(Ara) Cleanup in verbDefBool

This commit is contained in:
Inari Listenmaa
2019-01-22 09:31:31 +01:00
parent 8e908a6810
commit e1eb288c29

View File

@@ -652,8 +652,14 @@ oper
normalAlif : Root3 -> Bool = \r -> case r.l of {"و" => True ; _ => False} ; normalAlif : Root3 -> Bool = \r -> case r.l of {"و" => True ; _ => False} ;
verbDefBool : Bool -> Bool -> DefForms -> Vowel -> Verb = verbDefBool : Bool -> Bool -> DefForms -> Vowel -> Verb =
\isDoubleDef,alif,vforms,vowImpf -> \isDoubleDef,normalAlif,vforms,vowImpf -> { s = table {
let { VPerf v pgn => patPerf ! v ! pgn + suffixPerf v ! pgn ;
VImpf m Act pgn => prefixImpf ! pgn + patImpfAct ! pgn + suffixImpf Act ! m ! pgn ;
VImpf m Pas pgn => prefixImpf ! pgn + urma + suffixImpf Pas ! m ! pgn ;
VImp g n => patImp ! g ! n + suffixImpf Act ! Jus ! Per2 g n ;
VPPart => ppart ;
Masdar => masdar }
} where {
rama = vforms ! 0 ; -- VPerf Act (Per3 Masc Sg) rama = vforms ! 0 ; -- VPerf Act (Per3 Masc Sg)
ramay = vforms ! 1 ; -- VPerf Act (Per3 Fem Pl) ramay = vforms ! 1 ; -- VPerf Act (Per3 Fem Pl)
rumi = vforms ! 2 ; -- VPerf Pas (Per3 _ Sg) rumi = vforms ! 2 ; -- VPerf Pas (Per3 _ Sg)
@@ -668,64 +674,36 @@ oper
ppart = vforms ! 11 ; -- VPPart ppart = vforms ! 11 ; -- VPPart
masdar = vforms ! 12 ; -- verbal noun masdar = vforms ! 12 ; -- verbal noun
patPerf = patDefPerf rama ramay rumi rumu rumiy ; patPerf : Voice => PerGenNum => Str = table {
patImpfAct = patDefImpfAct armi armu ad3i ; Act => table {
patImp = patDefImp Irmi Irmu ;
suffixImpf = case isDoubleDef of {True => suffixImpfDoubleDef ; _ => suffixImpfDef}
} in
{ s = table {
VPerf v pgn => patPerf ! v ! pgn + suffixPerfDef v alif ! pgn ;
VImpf m Act pgn => prefixImpf ! pgn + patImpfAct ! pgn + suffixImpf Act vowImpf ! m ! pgn ;
VImpf m Pas pgn => prefixImpf ! pgn + urma + suffixImpf Pas vowImpf ! m ! pgn ;
VImp g n => patImp ! g ! n + suffixImpf Act vowImpf ! Jus ! Per2 g n ;
VPPart => ppart ;
Masdar => masdar
}
} ;
patDefPerf : (_,_,_,_,_ :Str) -> Voice => PerGenNum => Str = \rama,ramay,rumi,rumu,rumy ->
table {
Act =>
table {
Per3 Fem Pl => ramay ; Per3 Fem Pl => ramay ;
Per3 _ _ => rama ; Per3 _ _ => rama ;
_ => ramay _ => ramay } ;
} ; Pas => table {
Pas =>
table {
Per3 Masc Pl => rumu ; Per3 Masc Pl => rumu ;
Per3 Fem Pl => rumy ; Per3 Fem Pl => rumiy ;
Per3 _ _ => rumi ; Per3 _ _ => rumi ;
_ => rumy _ => rumiy }
}
} ; } ;
--now includes the vowel=u case, eg "دعو" /IL 2019-01-18 patImpfAct : PerGenNum => Str = table {
patDefImpfAct : (x1,_,x3 : Str) -> PerGenNum => Str = \rmi,rmu,d3i -> Per3 Masc Pl => armu ;
table { Per2 Masc Pl => armu ;
Per3 Masc Pl => rmu ; Per2 Fem Sg => ad3i ; -- for 1d3: d3i different, rmi = rmu
Per2 Masc Pl => rmu ; _ => armi -- for others: rmu different, rmi = d3i
Per2 Fem Sg => d3i ; -- for 1d3: d3i different, rmi = rmu
_ => rmi -- for others: rmu different, rmi = d3i
} ; } ;
patImp : Gender => Number => Str = \\g,n =>
case <g,n> of { <Masc,Pl> => Irmu ; _ => Irmi } ;
patDefImp : (_,_ : Str) -> Gender => Number => Str = \rmi, rmu -> suffixPerf : Voice -> PerGenNum => Str = \vc ->
table { let p3ms = case vc of {
Masc => table {Pl => rmu ; _ => rmi} ;
_ => table {_ => rmi}
} ;
suffixPerfDef : Voice -> Bool -> PerGenNum => Str = \v,normalAlif ->
let p3ms = case v of {
Act => if_then_Str normalAlif "ا" "ى" ; Act => if_then_Str normalAlif "ا" "ى" ;
Pas => "يَ" } ; Pas => "يَ" } ;
ya = case v of { ya = case vc of {
Act => "" ; Act => "" ;
Pas => "يَ" } Pas => "يَ" }
in in table {
table {
Per3 Masc Sg => p3ms ; Per3 Masc Sg => p3ms ;
Per3 Masc Dl => "يَا" ; Per3 Masc Dl => "يَا" ;
Per3 Masc Pl => "وْا" ; Per3 Masc Pl => "وْا" ;
@@ -741,47 +719,43 @@ oper
Per1 Plur => "نَا" Per1 Plur => "نَا"
} ; } ;
suffixImpfDef : Voice -> Vowel -> Mood => PerGenNum => Str = \vc,vw -> suffixImpfDef : Voice -> Mood => PerGenNum => Str = \vc ->
let { let default : Mood -> Str = \m -> case vc of {
default : Mood -> Str = \m ->
case vc of {
Pas => case m of {Jus => "" ; _ => "ى"} ; Pas => case m of {Jus => "" ; _ => "ى"} ;
Act => case vw of { Act => case vowImpf of {
u => case m of {Ind => "و" ; Cnj => "وَ" ; Jus => ""} ; u => case m of {Ind => "و" ; Cnj => "وَ" ; Jus => ""} ;
i => case m of {Ind => "ي" ; Cnj => "يَ" ; Jus => ""} ; i => case m of {Ind => "ي" ; Cnj => "يَ" ; Jus => ""} ;
a => case m of {Ind => "ى" ; Cnj => "ى" ; Jus => ""} a => case m of {Ind => "ى" ; Cnj => "ى" ; Jus => ""} }
} }
} in table { -- TODO: check whether to remove sukuns
} in Ind => table {
table {
Ind =>
table {
Per3 Masc Pl => "وْنَ" ; Per3 Masc Pl => "وْنَ" ;
Per2 Masc Pl => "وْنَ" ; Per2 Masc Pl => "وْنَ" ;
(Per3 _ Dl|Per2 _ Dl) => case vw of { (Per3 _ Dl|Per2 _ Dl) => case vowImpf of {
u => "وَانِ" ; u => "وَانِ" ;
_ => "يَانِ" } ; _ => "يَانِ" } ;
Per3 Fem Pl => "يْنَ" ; Per3 Fem Pl => "يْنَ" ;
Per2 Fem _ => "يْنَ" ; Per2 Fem _ => "يْنَ" ;
_ => default Ind _ => default Ind
} ; } ;
m => -- TODO: check whether to remove sukuns mood => table {
table {
Per3 Masc Pl => "وْا" ; Per3 Masc Pl => "وْا" ;
Per2 Masc Pl => "وْا" ; Per2 Masc Pl => "وْا" ;
(Per3 _ Dl|Per2 _ Dl) => case vw of { (Per3 _ Dl|Per2 _ Dl) => case vowImpf of {
u => "وَا" ; u => "وَا" ;
_ => "يَا" } ; _ => "يَا" } ;
Per3 Fem Pl => "يْنَ" ; Per3 Fem Pl => "يْنَ" ;
Per2 Fem Pl => "يْنَ" ; Per2 Fem Pl => "يْنَ" ;
Per2 Fem Sg => "ي" ; Per2 Fem Sg => "ي" ;
_ => default m _ => default mood
} }
} ; } ;
-- does this even happen other than with رءي? /IL suffixImpf : Voice -> Mood => PerGenNum => Str = \vc -> case isDoubleDef of {
suffixImpfDoubleDef : Voice -> Vowel -> Mood => PerGenNum => Str = \vc,vw -> False => suffixImpfDef vc ;
\\m,p => rmSukun (suffixImpfDef vc vw ! m ! p) ; True => \\m,p => rmSukun (suffixImpfDef vc ! m ! p) } ;
} ;
------------------------------------------------------------ ------------------------------------------------------------
-- Common affixes -- Common affixes