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} ;
verbDefBool : Bool -> Bool -> DefForms -> Vowel -> Verb =
\isDoubleDef,alif,vforms,vowImpf ->
let {
rama = vforms ! 0 ; -- VPerf Act (Per3 Masc Sg)
ramay = vforms ! 1 ; -- VPerf Act (Per3 Fem Pl)
rumi = vforms ! 2 ; -- VPerf Pas (Per3 _ Sg)
rumu = vforms ! 3 ; -- VPerf Pas (Per3 Masc Pl)
rumiy = vforms ! 4 ; -- VPerf Pas (Per3 Fem Pl)
armi = vforms ! 5 ; -- VImpf _ Act (Per1 _ _ | Per3 Fem _ | Per2/3 Masc Sg)
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
\isDoubleDef,normalAlif,vforms,vowImpf -> { s = table {
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)
ramay = vforms ! 1 ; -- VPerf Act (Per3 Fem Pl)
rumi = vforms ! 2 ; -- VPerf Pas (Per3 _ Sg)
rumu = vforms ! 3 ; -- VPerf Pas (Per3 Masc Pl)
rumiy = vforms ! 4 ; -- VPerf Pas (Per3 Fem Pl)
armi = vforms ! 5 ; -- VImpf _ Act (Per1 _ _ | Per3 Fem _ | Per2/3 Masc Sg)
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 ;
patImpfAct = patDefImpfAct armi armu ad3i ;
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 _ _ => rama ;
_ => ramay
} ;
Pas =>
table {
Per3 Masc Pl => rumu ;
Per3 Fem Pl => rumy ;
Per3 _ _ => rumi ;
_ => rumy
}
patPerf : Voice => PerGenNum => Str = table {
Act => table {
Per3 Fem Pl => ramay ;
Per3 _ _ => rama ;
_ => ramay } ;
Pas => table {
Per3 Masc Pl => rumu ;
Per3 Fem Pl => rumiy ;
Per3 _ _ => rumi ;
_ => rumiy }
} ;
--now includes the vowel=u case, eg "دعو" /IL 2019-01-18
patDefImpfAct : (x1,_,x3 : Str) -> PerGenNum => Str = \rmi,rmu,d3i ->
table {
Per3 Masc Pl => rmu ;
Per2 Masc Pl => rmu ;
Per2 Fem Sg => d3i ; -- for 1d3: d3i different, rmi = rmu
_ => rmi -- for others: rmu different, rmi = d3i
patImpfAct : PerGenNum => Str = table {
Per3 Masc Pl => armu ;
Per2 Masc Pl => armu ;
Per2 Fem Sg => ad3i ; -- for 1d3: d3i different, rmi = rmu
_ => armi -- 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 ->
table {
Masc => table {Pl => rmu ; _ => rmi} ;
_ => table {_ => rmi}
} ;
suffixPerfDef : Voice -> Bool -> PerGenNum => Str = \v,normalAlif ->
let p3ms = case v of {
suffixPerf : Voice -> PerGenNum => Str = \vc ->
let p3ms = case vc of {
Act => if_then_Str normalAlif "ا" "ى" ;
Pas => "يَ" } ;
ya = case v of {
ya = case vc of {
Act => "" ;
Pas => "يَ" }
in
table {
Per3 Masc Sg => p3ms ;
Per3 Masc Dl => "يَا" ;
Per3 Masc Pl => "وْا" ;
Per3 Fem Sg => ya + "تْ" ;
Per3 Fem Dl => ya + "تَا" ;
Per3 Fem Pl => "نَ" ;
Per2 Masc Sg => "تَ" ;
Per2 _ Dl => "تُمَا" ;
Per2 Masc Pl => "تُمْ" ;
Per2 Fem Sg => "تِ" ;
Per2 Fem Pl => "تُنَّ" ;
Per1 Sing => "تُ" ;
Per1 Plur => "نَا"
} ;
in table {
Per3 Masc Sg => p3ms ;
Per3 Masc Dl => "يَا" ;
Per3 Masc Pl => "وْا" ;
Per3 Fem Sg => ya + "تْ" ;
Per3 Fem Dl => ya + "تَا" ;
Per3 Fem Pl => "نَ" ;
Per2 Masc Sg => "تَ" ;
Per2 _ Dl => "تُمَا" ;
Per2 Masc Pl => "تُمْ" ;
Per2 Fem Sg => "تِ" ;
Per2 Fem Pl => "تُنَّ" ;
Per1 Sing => "تُ" ;
Per1 Plur => "نَا"
} ;
suffixImpfDef : Voice -> Vowel -> Mood => PerGenNum => Str = \vc,vw ->
let {
default : Mood -> Str = \m ->
case vc of {
suffixImpfDef : Voice -> Mood => PerGenNum => Str = \vc ->
let default : Mood -> Str = \m -> case vc of {
Pas => case m of {Jus => "" ; _ => "ى"} ;
Act => case vw of {
Act => case vowImpf of {
u => case m of {Ind => "و" ; Cnj => "وَ" ; Jus => ""} ;
i => 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
a => case m of {Ind => "ى" ; Cnj => "ى" ; Jus => ""} }
}
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
suffixImpfDoubleDef : Voice -> Vowel -> Mood => PerGenNum => Str = \vc,vw ->
\\m,p => rmSukun (suffixImpfDef vc vw ! m ! p) ;
suffixImpf : Voice -> Mood => PerGenNum => Str = \vc -> case isDoubleDef of {
False => suffixImpfDef vc ;
True => \\m,p => rmSukun (suffixImpfDef vc ! m ! p) } ;
} ;
------------------------------------------------------------
-- Common affixes