1
0
forked from GitHub/gf-rgl

(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,136 +652,110 @@ 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 ;
rama = vforms ! 0 ; -- VPerf Act (Per3 Masc Sg) VImpf m Act pgn => prefixImpf ! pgn + patImpfAct ! pgn + suffixImpf Act ! m ! pgn ;
ramay = vforms ! 1 ; -- VPerf Act (Per3 Fem Pl) VImpf m Pas pgn => prefixImpf ! pgn + urma + suffixImpf Pas ! m ! pgn ;
rumi = vforms ! 2 ; -- VPerf Pas (Per3 _ Sg) VImp g n => patImp ! g ! n + suffixImpf Act ! Jus ! Per2 g n ;
rumu = vforms ! 3 ; -- VPerf Pas (Per3 Masc Pl) VPPart => ppart ;
rumiy = vforms ! 4 ; -- VPerf Pas (Per3 Fem Pl) Masdar => masdar }
armi = vforms ! 5 ; -- VImpf _ Act (Per1 _ _ | Per3 Fem _ | Per2/3 Masc Sg) } where {
armu = vforms ! 6 ; -- VImpf _ Act (Per2/3 Masc Pl) rama = vforms ! 0 ; -- VPerf Act (Per3 Masc Sg)
ad3i = vforms ! 7 ; -- VImpf _ Act (Per2 Fem) ramay = vforms ! 1 ; -- VPerf Act (Per3 Fem Pl)
urma = vforms ! 8 ; -- VImpf _ Pas rumi = vforms ! 2 ; -- VPerf Pas (Per3 _ Sg)
Irmi = vforms ! 9 ; -- VImp Masc Sg | VImp Fem _ rumu = vforms ! 3 ; -- VPerf Pas (Per3 Masc Pl)
Irmu = vforms ! 10 ; -- VImp Masc Pl rumiy = vforms ! 4 ; -- VPerf Pas (Per3 Fem Pl)
ppart = vforms ! 11 ; -- VPPart armi = vforms ! 5 ; -- VImpf _ Act (Per1 _ _ | Per3 Fem _ | Per2/3 Masc Sg)
masdar = vforms ! 12 ; -- verbal noun armu = vforms ! 6 ; -- VImpf _ Act (Per2/3 Masc Pl)
ad3i = vforms ! 7 ; -- VImpf _ Act (Per2 Fem)
urma = vforms ! 8 ; -- VImpf _ Pas
Irmi = vforms ! 9 ; -- VImp Masc Sg | VImp Fem _
Irmu = vforms ! 10 ; -- VImp Masc Pl
ppart = vforms ! 11 ; -- VPPart
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 ; Per3 Fem Pl => ramay ;
suffixImpf = case isDoubleDef of {True => suffixImpfDoubleDef ; _ => suffixImpfDef} Per3 _ _ => rama ;
} in _ => ramay } ;
{ s = table { Pas => table {
VPerf v pgn => patPerf ! v ! pgn + suffixPerfDef v alif ! pgn ; Per3 Masc Pl => rumu ;
VImpf m Act pgn => prefixImpf ! pgn + patImpfAct ! pgn + suffixImpf Act vowImpf ! m ! pgn ; Per3 Fem Pl => rumiy ;
VImpf m Pas pgn => prefixImpf ! pgn + urma + suffixImpf Pas vowImpf ! m ! pgn ; Per3 _ _ => rumi ;
VImp g n => patImp ! g ! n + suffixImpf Act vowImpf ! Jus ! Per2 g n ; _ => rumiy }
VPPart => ppart ;
Masdar => masdar
}
} ;
patDefPerf : (_,_,_,_,_ :Str) -> Voice => PerGenNum => Str = \rama,ramay,rumi,rumu,rumy ->
table {
Act =>
table {
Per3 Fem Pl => ramay ;
Per3 _ _ => rama ;
_ => ramay
} ;
Pas =>
table {
Per3 Masc Pl => rumu ;
Per3 Fem Pl => rumy ;
Per3 _ _ => rumi ;
_ => rumy
}
} ; } ;
--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 => "وْا" ; Per3 Fem Sg => ya + "تْ" ;
Per3 Fem Sg => ya + "تْ" ; Per3 Fem Dl => ya + "تَا" ;
Per3 Fem Dl => ya + "تَا" ; Per3 Fem Pl => "نَ" ;
Per3 Fem Pl => "نَ" ; Per2 Masc Sg => "تَ" ;
Per2 Masc Sg => "تَ" ; Per2 _ Dl => "تُمَا" ;
Per2 _ Dl => "تُمَا" ; Per2 Masc Pl => "تُمْ" ;
Per2 Masc Pl => "تُمْ" ; Per2 Fem Sg => "تِ" ;
Per2 Fem Sg => "تِ" ; Per2 Fem Pl => "تُنَّ" ;
Per2 Fem Pl => "تُنَّ" ; Per1 Sing => "تُ" ;
Per1 Sing => "تُ" ; 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 {
Ind =>
table {
Per3 Masc Pl => "وْنَ" ;
Per2 Masc Pl => "وْنَ" ;
(Per3 _ Dl|Per2 _ Dl) => case vw of {
u => "وَانِ" ;
_ => "يَانِ" } ;
Per3 Fem Pl => "يْنَ" ;
Per2 Fem _ => "يْنَ" ;
_ => default Ind
} ;
m => -- TODO: check whether to remove sukuns
table {
Per3 Masc Pl => "وْا" ;
Per2 Masc Pl => "وْا" ;
(Per3 _ Dl|Per2 _ Dl) => case vw of {
u => "وَا" ;
_ => "يَا" } ;
Per3 Fem Pl => "يْنَ" ;
Per2 Fem Pl => "يْنَ" ;
Per2 Fem Sg => "ي" ;
_ => default m
} }
in table { -- TODO: check whether to remove sukuns
Ind => table {
Per3 Masc Pl => "وْنَ" ;
Per2 Masc Pl => "وْنَ" ;
(Per3 _ Dl|Per2 _ Dl) => case vowImpf of {
u => "وَانِ" ;
_ => "يَانِ" } ;
Per3 Fem Pl => "يْنَ" ;
Per2 Fem _ => "يْنَ" ;
_ => default Ind
} ;
mood => table {
Per3 Masc Pl => "وْا" ;
Per2 Masc Pl => "وْا" ;
(Per3 _ Dl|Per2 _ Dl) => case vowImpf of {
u => "وَا" ;
_ => "يَا" } ;
Per3 Fem Pl => "يْنَ" ;
Per2 Fem Pl => "يْنَ" ;
Per2 Fem Sg => "ي" ;
_ => 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