mirror of
https://github.com/GrammaticalFramework/gf-rgl.git
synced 2026-05-28 09:28:54 -06:00
(Ara) WIP verbal nouns; new paradigms+keep old ones backwards compatible
This commit is contained in:
@@ -201,16 +201,20 @@ resource ParadigmsAra = open
|
|||||||
|
|
||||||
mkV : overload {
|
mkV : overload {
|
||||||
mkV : (imperfect : Str) -> V ; -- The verb in Per3 Sg Masc imperfect tense gives the most information
|
mkV : (imperfect : Str) -> V ; -- The verb in Per3 Sg Masc imperfect tense gives the most information
|
||||||
mkV : (root : Str) -> (perf,impf : Vowel) -> V ; -- verb form I ; vowel = a|i|u
|
mkV : (root : Str) -> (perf,impf : Vowel) -> (masdar : Str) -> V ; -- verb form I ; vowel = a|i|u ; unpredictable masdar given as an argument.
|
||||||
mkV : (root : Str) -> VerbForm -> V ; -- FormI .. FormX (no VII, IX) ; default vowels a u for I
|
mkV : (root : Str) -> (perf,impf : Vowel) -> V ; -- verb form I ; vowel = a|i|u ; dummy masdar inserted. This function is here only to keep compatibility for the old API; for new grammars, use the constructor with masdar as an argument.
|
||||||
|
mkV : (root : Str) -> VerbForm -> V ; -- FormI .. FormX (no IX) ; default vowels a u for I, and dummy masdar. Forms II-X have predictable masdar.
|
||||||
mkV : V -> (particle : Str) -> V -- V with a non-inflecting particle/phrasal verb
|
mkV : V -> (particle : Str) -> V -- V with a non-inflecting particle/phrasal verb
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
-- regV : Str -> V ;
|
|
||||||
|
|
||||||
reflV : V -> V ; -- نَفْس in the proper case and with possessive suffix, e.g. نَفْسَكِ
|
reflV : V -> V ; -- نَفْس in the proper case and with possessive suffix, e.g. نَفْسَكِ
|
||||||
|
|
||||||
v1 : Str -> Vowel -> Vowel -> V ; -- Verb Form I : fa`ala, fa`ila, fa`ula
|
v1 = overload {
|
||||||
|
v1 : Str -> (perf,impf : Vowel) -> (masdar : Str) -> V -- Verb Form I : fa`ala, fa`ila, fa`ula. Verbal noun (masdar) given as the third argument.
|
||||||
|
= v1masdar ;
|
||||||
|
v1 : Str -> (perf,impf : Vowel) -> V -- To keep compatibility for the old API; dummy masdar inserted.
|
||||||
|
= v1dummymasdar ;
|
||||||
|
} ;
|
||||||
|
|
||||||
v2 : Str -> V ; -- Verb Form II : fa``ala
|
v2 : Str -> V ; -- Verb Form II : fa``ala
|
||||||
|
|
||||||
@@ -401,8 +405,10 @@ resource ParadigmsAra = open
|
|||||||
mkV = overload {
|
mkV = overload {
|
||||||
mkV : (imperfect : Str) -> V
|
mkV : (imperfect : Str) -> V
|
||||||
= regV ;
|
= regV ;
|
||||||
mkV : (root : Str) -> (perf,impf : Vowel) -> V -- verb form I ; vowel = a|i|u
|
mkV : (root : Str) -> (perf,impf : Vowel) -> (masdar : Str) -> V -- verb form I ; vowel = a|i|u
|
||||||
= v1 ;
|
= v1masdar ;
|
||||||
|
mkV : (root : Str) -> (perf,impf : Vowel) -> V -- verb form I ; vowel = a|i|u ; dummy masdar
|
||||||
|
= v1dummymasdar ;
|
||||||
mkV : (root : Str) -> VerbForm -> V -- FormI .. FormX (no VII, IX) ; default vowels a u for I
|
mkV : (root : Str) -> VerbForm -> V -- FormI .. FormX (no VII, IX) ; default vowels a u for I
|
||||||
= formV ;
|
= formV ;
|
||||||
mkV : V -> (particle : Str) -> V = \v,p ->
|
mkV : V -> (particle : Str) -> V = \v,p ->
|
||||||
@@ -418,46 +424,50 @@ resource ParadigmsAra = open
|
|||||||
f@? + "َ" + c@? + "ِ" + l => <f+c+l, i, a> ;
|
f@? + "َ" + c@? + "ِ" + l => <f+c+l, i, a> ;
|
||||||
_ => Predef.error ("regV not applicable to" ++ wo)
|
_ => Predef.error ("regV not applicable to" ++ wo)
|
||||||
}
|
}
|
||||||
in v1 rau.p1 rau.p2 rau.p3 ;
|
in v1dummymasdar rau.p1 rau.p2 rau.p3 ;
|
||||||
|
|
||||||
v1 = \rootStr,vPerf,vImpf ->
|
v1masdar : Str -> (perf,impf : Vowel) -> (masdar : Str) -> V =
|
||||||
let { raw = v1' rootStr vPerf vImpf } in
|
\rootStr,vPerf,vImpf,msdr ->
|
||||||
lin V { s = \\vf =>rectifyHmz (raw.s ! vf) } ;
|
let { raw = v1' rootStr vPerf vImpf msdr }
|
||||||
|
in lin V { s = \\vf =>rectifyHmz (raw.s ! vf) } ;
|
||||||
|
|
||||||
v1' : Str -> Vowel -> Vowel -> Verb =
|
v1dummymasdar : Str -> (p,i : Vowel) -> V = \rootStr,vPerf,vImpf ->
|
||||||
\rootStr,vPerf,vImpf ->
|
let { dummyMasdar = mkStrong facl (mkRoot3 rootStr) ;
|
||||||
|
raw = v1' rootStr vPerf vImpf dummyMasdar }
|
||||||
|
in lin V { s = \\vf =>rectifyHmz (raw.s ! vf) } ;
|
||||||
|
|
||||||
|
v1' : Str -> (p,i : Vowel) -> (masdar : Str) -> Verb =
|
||||||
|
\rootStr,vPerf,vImpf,masdar ->
|
||||||
let root = mkRoot3 rootStr
|
let root = mkRoot3 rootStr
|
||||||
in case rootStr of {
|
in case rootStr of {
|
||||||
f@? + c@? + "ّ" => v1geminate (f+c+c) vPerf vImpf ;
|
f@? + c@? + "ّ" => v1geminate (f+c+c) vPerf vImpf masdar ;
|
||||||
? + #hamza + #weak => v1doubleweak root ;
|
? + #hamza + #weak => v1doubleweak root masdar ;
|
||||||
#weak + ? + #weak => v1assimilated_defective root vPerf vImpf ;
|
#weak + ? + #weak => v1assimilated_defective root vPerf vImpf masdar ;
|
||||||
? + ? + #weak => case vPerf of {
|
? + ? + #weak => case vPerf of {
|
||||||
i => v1defective_i root vImpf ;
|
i => v1defective_i root vImpf masdar ;
|
||||||
_ => v1defective_a root vImpf } ;
|
_ => v1defective_a root vImpf masdar } ;
|
||||||
? + #weak + ? => v1hollow root vImpf ;
|
? + #weak + ? => v1hollow root vImpf masdar ;
|
||||||
_ => v1sound root vPerf vImpf } ;
|
_ => v1sound root vPerf vImpf masdar } ;
|
||||||
|
|
||||||
v2 =
|
v2 =
|
||||||
\rootStr ->
|
\rootStr ->
|
||||||
let {
|
let {
|
||||||
root = mkRoot3 rootStr
|
root = mkRoot3 rootStr
|
||||||
} in {
|
} in lin V {
|
||||||
s =
|
s =
|
||||||
case rootStr of {
|
case rootStr of {
|
||||||
-- #weak + ? + ? =>
|
-- #weak + ? + ? =>
|
||||||
? + ? + #weak => (v2defective root).s;
|
? + ? + #weak => (v2defective root).s;
|
||||||
_ => (v2sound root).s
|
_ => (v2sound root).s
|
||||||
};
|
}
|
||||||
lock_V = <>
|
|
||||||
};
|
};
|
||||||
|
|
||||||
v3 =
|
v3 =
|
||||||
\rootStr ->
|
\rootStr ->
|
||||||
let {
|
let {
|
||||||
tbc = mkRoot3 rootStr ;
|
tbc = mkRoot3 rootStr ;
|
||||||
} in {
|
} in lin V {
|
||||||
s = (v3sound tbc).s ;
|
s = (v3sound tbc).s
|
||||||
lock_V = <>
|
|
||||||
};
|
};
|
||||||
|
|
||||||
v4 =
|
v4 =
|
||||||
@@ -473,30 +483,28 @@ resource ParadigmsAra = open
|
|||||||
|
|
||||||
v5 =
|
v5 =
|
||||||
\rootStr ->
|
\rootStr ->
|
||||||
let { raw = v5' rootStr } in
|
let { raw = v5' rootStr } in raw **
|
||||||
{ s = \\vf =>
|
{ s = \\vf =>
|
||||||
case rootStr of {
|
case rootStr of {
|
||||||
_ + #hamza + _ => rectifyHmz(raw.s ! vf);
|
_ + #hamza + _ => rectifyHmz(raw.s ! vf);
|
||||||
_ => raw.s ! vf
|
_ => raw.s ! vf
|
||||||
};
|
}
|
||||||
lock_V = <>
|
|
||||||
};
|
};
|
||||||
|
|
||||||
v5' : Str -> V =
|
v5' : Str -> V =
|
||||||
\rootStr ->
|
\rootStr ->
|
||||||
let {
|
let {
|
||||||
nfs = mkRoot3 rootStr ;
|
nfs = mkRoot3 rootStr ;
|
||||||
} in {
|
} in lin V {
|
||||||
s = (v5sound nfs).s ; lock_V = <>
|
s = (v5sound nfs).s
|
||||||
};
|
};
|
||||||
|
|
||||||
v6 =
|
v6 =
|
||||||
\rootStr ->
|
\rootStr ->
|
||||||
let {
|
let {
|
||||||
fqm = mkRoot3 rootStr ;
|
fqm = mkRoot3 rootStr ;
|
||||||
} in {
|
} in lin V {
|
||||||
s = (v6sound fqm).s ;
|
s = (v6sound fqm).s
|
||||||
lock_V = <>
|
|
||||||
};
|
};
|
||||||
|
|
||||||
v7 =
|
v7 =
|
||||||
|
|||||||
@@ -47,6 +47,7 @@ flags coding=utf8 ;
|
|||||||
eafcilp = { h = "أَ"; m1 = "ْ" ; m2 = "ِ" ; t = "َة" } ;
|
eafcilp = { h = "أَ"; m1 = "ْ" ; m2 = "ِ" ; t = "َة" } ;
|
||||||
eafcal = { h = "أَ"; m1 = "ْ" ; m2 = "َ" ; t = "" } ;
|
eafcal = { h = "أَ"; m1 = "ْ" ; m2 = "َ" ; t = "" } ;
|
||||||
eafcAl = { h = "أَ"; m1 = "ْ" ; m2 = "َا" ; t = "" } ;
|
eafcAl = { h = "أَ"; m1 = "ْ" ; m2 = "َا" ; t = "" } ;
|
||||||
|
eifcAl = { h = "إِ"; m1 = "ْ" ; m2 = "َا" ; t = "" } ;
|
||||||
eafcil = { h = "أَ"; m1 = "ْ" ; m2 = "ِ" ; t = "" } ;
|
eafcil = { h = "أَ"; m1 = "ْ" ; m2 = "ِ" ; t = "" } ;
|
||||||
eafcul = { h = "أَ"; m1 = "ْ" ; m2 = "ُ" ; t = "" } ;
|
eafcul = { h = "أَ"; m1 = "ْ" ; m2 = "ُ" ; t = "" } ;
|
||||||
eiftacal = { h = "إِ"; m1 = "ْتَ" ; m2 = "َ" ; t = "" } ;
|
eiftacal = { h = "إِ"; m1 = "ْتَ" ; m2 = "َ" ; t = "" } ;
|
||||||
@@ -82,11 +83,14 @@ flags coding=utf8 ;
|
|||||||
fcil = { h = "" ; m1 = "ْ" ; m2 = "ِ" ; t = "" } ;
|
fcil = { h = "" ; m1 = "ْ" ; m2 = "ِ" ; t = "" } ;
|
||||||
fcul = { h = "" ; m1 = "ْ" ; m2 = "ُ" ; t = "" } ;
|
fcul = { h = "" ; m1 = "ْ" ; m2 = "ُ" ; t = "" } ;
|
||||||
ficl = { h = "" ; m1 = "ِ" ; m2 = "ْ" ; t = "" } ;
|
ficl = { h = "" ; m1 = "ِ" ; m2 = "ْ" ; t = "" } ;
|
||||||
|
fcIl = fcil ** {m2 = "ِي"} ;
|
||||||
|
fcAl = fcal ** {m2 = "َا"} ;
|
||||||
ficAl = { h = "" ; m1 = "ِ" ; m2 = "َا" ; t = "" } ;
|
ficAl = { h = "" ; m1 = "ِ" ; m2 = "َا" ; t = "" } ;
|
||||||
ficlp = { h = "" ; m1 = "ِ" ; m2 = "ْ" ; t = "َة" } ;
|
ficlp = { h = "" ; m1 = "ِ" ; m2 = "ْ" ; t = "َة" } ;
|
||||||
ftacc = facc ** {m1 = "ْتَ"} ;
|
ftacc = facc ** {m1 = "ْتَ"} ;
|
||||||
ftucc = facc ** {m1 = "ْتُ"} ;
|
ftucc = facc ** {m1 = "ْتُ"} ;
|
||||||
ftacal = { h = "" ; m1 = "ْتَ" ; m2 = "َ" ; t = "" } ;
|
ftacal = { h = "" ; m1 = "ْتَ" ; m2 = "َ" ; t = "" } ;
|
||||||
|
fticAl = ficAl ** { m1 = "ْتِ" } ; -- IL hollow VIII
|
||||||
ftical = ftacal ** { m1 = "ْتِ" } ; -- IL hollow VIII
|
ftical = ftacal ** { m1 = "ْتِ" } ; -- IL hollow VIII
|
||||||
ftAcal = ftacal ** { m1 = "ْتَا" } ; -- IL hollow VIII
|
ftAcal = ftacal ** { m1 = "ْتَا" } ; -- IL hollow VIII
|
||||||
ftIcal = ftacal ** { m1 = "ْتِي" } ; -- IL hollow VIII
|
ftIcal = ftacal ** { m1 = "ْتِي" } ; -- IL hollow VIII
|
||||||
@@ -95,6 +99,7 @@ flags coding=utf8 ;
|
|||||||
euttucil = { h = "اُتُّ" ; m1 = "ِ" ; m2 = "" ; t = "" } ; ---- IL assimilated VIII
|
euttucil = { h = "اُتُّ" ; m1 = "ِ" ; m2 = "" ; t = "" } ; ---- IL assimilated VIII
|
||||||
ttacal = ftacal ** { m1 = "" ; h = "تَّ" } ; ---- IL assimilated VIII
|
ttacal = ftacal ** { m1 = "" ; h = "تَّ" } ; ---- IL assimilated VIII
|
||||||
ttacil = ftacil ** { m1 = "" ; h = "تَّ" } ; ---- IL assimilated VIII
|
ttacil = ftacil ** { m1 = "" ; h = "تَّ" } ; ---- IL assimilated VIII
|
||||||
|
tticAl = ficAl ** { h = "تِّ" } ; ---- IL assimilated VIII
|
||||||
fuccAl = { h = "" ; m1 = "ُ" ; m2 = "َّا" ; t = "" } ;
|
fuccAl = { h = "" ; m1 = "ُ" ; m2 = "َّا" ; t = "" } ;
|
||||||
fuccil = { h = "" ; m1 = "ُ" ; m2 = "ِّ" ; t = "" } ;
|
fuccil = { h = "" ; m1 = "ُ" ; m2 = "ِّ" ; t = "" } ;
|
||||||
fuccilo = { h = "" ; m1 = "ُ" ; m2 = "ِّ" ; t = "ْ" } ;
|
fuccilo = { h = "" ; m1 = "ُ" ; m2 = "ِّ" ; t = "ْ" } ;
|
||||||
@@ -112,7 +117,9 @@ flags coding=utf8 ;
|
|||||||
mafcUl = { h = "مَ"; m1 = "ْ" ; m2 = "ُو" ; t = "" } ;
|
mafcUl = { h = "مَ"; m1 = "ْ" ; m2 = "ُو" ; t = "" } ;
|
||||||
mafcil = { h = "مَ"; m1 = "ْ" ; m2 = "ِ" ; t = "" } ;
|
mafcil = { h = "مَ"; m1 = "ْ" ; m2 = "ِ" ; t = "" } ;
|
||||||
tafAcal = { h = "تَ"; m1 = "َا" ; m2 = "َ" ; t = "" } ;
|
tafAcal = { h = "تَ"; m1 = "َا" ; m2 = "َ" ; t = "" } ;
|
||||||
|
tafAcul = { h = "تَ"; m1 = "َا" ; m2 = "ُ" ; t = "" } ;
|
||||||
tafaccal = { h = "تَ"; m1 = "َ" ; m2 = "َّ" ; t = "" } ;
|
tafaccal = { h = "تَ"; m1 = "َ" ; m2 = "َّ" ; t = "" } ;
|
||||||
|
tafaccul = { h = "تَ"; m1 = "َ" ; m2 = "ُّ" ; t = "" } ;
|
||||||
tufuccil = { h = "تُ"; m1 = "ُ" ; m2 = "ِّ" ; t = "" } ;
|
tufuccil = { h = "تُ"; m1 = "ُ" ; m2 = "ِّ" ; t = "" } ;
|
||||||
tufUcil = { h = "تُ"; m1 = "ُو" ; m2 = "ِ" ; t = "" } ;
|
tufUcil = { h = "تُ"; m1 = "ُو" ; m2 = "ِ" ; t = "" } ;
|
||||||
ufAcal = { h = "ُ" ; m1 = "َا" ; m2 = "َ" ; t = "" } ;
|
ufAcal = { h = "ُ" ; m1 = "َا" ; m2 = "َ" ; t = "" } ;
|
||||||
|
|||||||
@@ -202,7 +202,8 @@ resource ResAra = PatternsAra ** open Prelude, Predef, OrthoAra, ParamX in {
|
|||||||
VPerf Voice PerGenNum
|
VPerf Voice PerGenNum
|
||||||
| VImpf Mood Voice PerGenNum
|
| VImpf Mood Voice PerGenNum
|
||||||
| VImp Gender Number
|
| VImp Gender Number
|
||||||
| VPPart ; -- TODO: add gender and number (or check if easy to use BIND)
|
| VPPart -- TODO: add gender and number (or check if easy to use BIND)
|
||||||
|
| Masdar ; -- verbal noun
|
||||||
|
|
||||||
PerGenNum =
|
PerGenNum =
|
||||||
Per3 Gender Number
|
Per3 Gender Number
|
||||||
@@ -221,8 +222,8 @@ oper
|
|||||||
|
|
||||||
--macro for sound verb
|
--macro for sound verb
|
||||||
--PerfAct, PerfPas, ImpfAct, ImpfPas, Imp, PPart
|
--PerfAct, PerfPas, ImpfAct, ImpfPas, Imp, PPart
|
||||||
verb : (x1,_,_,_,_,x6 : Str) -> Verb =
|
verb : (x1,_,_,_,_,_,x7 : Str) -> Verb =
|
||||||
\katab,kutib,aktub,uktab,euktub,maktUb -> {
|
\katab,kutib,aktub,uktab,euktub,maktUb,katb -> {
|
||||||
s = \\vf => rectifyHmz (case vf of {
|
s = \\vf => rectifyHmz (case vf of {
|
||||||
VPerf Act pgn => katab + suffixPerf ! pgn ;
|
VPerf Act pgn => katab + suffixPerf ! pgn ;
|
||||||
VPerf Pas pgn => kutib + suffixPerf ! pgn ;
|
VPerf Pas pgn => kutib + suffixPerf ! pgn ;
|
||||||
@@ -231,7 +232,8 @@ oper
|
|||||||
VImpf m Act pgn => prefixImpf!pgn + aktub + suffixImpfCJ m ! pgn;
|
VImpf m Act pgn => prefixImpf!pgn + aktub + suffixImpfCJ m ! pgn;
|
||||||
VImpf m Pas pgn => prefixImpf !pgn + uktab + suffixImpfCJ m !pgn;
|
VImpf m Pas pgn => prefixImpf !pgn + uktab + suffixImpfCJ m !pgn;
|
||||||
VImp g n => euktub + suffixImpfCJ Jus ! (Per2 g n);
|
VImp g n => euktub + suffixImpfCJ Jus ! (Per2 g n);
|
||||||
VPPart => maktUb
|
VPPart => maktUb ;
|
||||||
|
Masdar => katb
|
||||||
})
|
})
|
||||||
} ;
|
} ;
|
||||||
verb' : SoundForms -> Verb = \vforms ->
|
verb' : SoundForms -> Verb = \vforms ->
|
||||||
@@ -241,7 +243,8 @@ oper
|
|||||||
uktab = vforms ! 3 ;
|
uktab = vforms ! 3 ;
|
||||||
euktub = vforms ! 4 ;
|
euktub = vforms ! 4 ;
|
||||||
maktUb = vforms ! 5 ;
|
maktUb = vforms ! 5 ;
|
||||||
in verb katab kutib aktub uktab euktub maktUb ;
|
katb = vforms ! 6 ;
|
||||||
|
in verb katab kutib aktub uktab euktub maktUb katb ;
|
||||||
--affixes of sound verbs
|
--affixes of sound verbs
|
||||||
|
|
||||||
suffixPerf : PerGenNum => Str =
|
suffixPerf : PerGenNum => Str =
|
||||||
@@ -309,6 +312,7 @@ oper
|
|||||||
impSg = vforms ! 8 ; -- VImp (Sg Masc / Pl Fem)
|
impSg = vforms ! 8 ; -- VImp (Sg Masc / Pl Fem)
|
||||||
impPl = vforms ! 9 ; -- VImp (Pl Masc / Sg Fem)
|
impPl = vforms ! 9 ; -- VImp (Pl Masc / Sg Fem)
|
||||||
ppart = vforms ! 10 ; -- VPPart
|
ppart = vforms ! 10 ; -- VPPart
|
||||||
|
masdar = vforms ! 11 ; -- verbal noun
|
||||||
|
|
||||||
patPerf = patHollowPerf xAf xif xIf xuf ;
|
patPerf = patHollowPerf xAf xif xIf xuf ;
|
||||||
patImpf = patHollowImpf axAf axaf uxAf uxaf ;
|
patImpf = patHollowImpf axAf axaf uxAf uxaf ;
|
||||||
@@ -321,7 +325,8 @@ oper
|
|||||||
VImpf Cnj v pgn => prefixImpf ! pgn + patImpf ! v ! pgn + suffixImpfCJ Cnj ! pgn ;
|
VImpf Cnj v pgn => prefixImpf ! pgn + patImpf ! v ! pgn + suffixImpfCJ Cnj ! pgn ;
|
||||||
VImpf Jus v pgn => prefixImpf ! pgn + patJus ! v ! pgn + suffixImpfCJ Jus ! pgn ;
|
VImpf Jus v pgn => prefixImpf ! pgn + patJus ! v ! pgn + suffixImpfCJ Jus ! pgn ;
|
||||||
VImp g n => patImp ! g ! n + suffixImpfCJ Jus ! Per2 g n ;
|
VImp g n => patImp ! g ! n + suffixImpfCJ Jus ! Per2 g n ;
|
||||||
VPPart => ppart
|
VPPart => ppart ;
|
||||||
|
Masdar => masdar
|
||||||
}
|
}
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
@@ -355,6 +360,7 @@ oper
|
|||||||
Irmi = vforms ! 8 ; -- VImp Masc Sg | VImp Fem _
|
Irmi = vforms ! 8 ; -- VImp Masc Sg | VImp Fem _
|
||||||
Irmu = vforms ! 9 ; -- VImp Masc Pl
|
Irmu = vforms ! 9 ; -- VImp Masc Pl
|
||||||
ppart = vforms ! 10 ; -- VPPart
|
ppart = vforms ! 10 ; -- VPPart
|
||||||
|
masdar = vforms ! 11 ; -- verbal noun
|
||||||
|
|
||||||
patPerf = patDefPerf rama ramay rumi rumu rumiy ;
|
patPerf = patDefPerf rama ramay rumi rumu rumiy ;
|
||||||
patImpfAct = patDefImpfAct armi armu ;
|
patImpfAct = patDefImpfAct armi armu ;
|
||||||
@@ -366,7 +372,8 @@ oper
|
|||||||
VImpf m Act pgn => prefixImpf ! pgn + patImpfAct ! pgn + suffixImpf Act vowImpf ! m ! 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 ;
|
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 ;
|
VImp g n => patImp ! g ! n + suffixImpf Act vowImpf ! Jus ! Per2 g n ;
|
||||||
VPPart => ppart
|
VPPart => ppart ;
|
||||||
|
Masdar => masdar
|
||||||
}
|
}
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
@@ -473,8 +480,8 @@ oper
|
|||||||
|
|
||||||
--now is used for the sound, assimilated (weak C1), and when C1 = hamza:
|
--now is used for the sound, assimilated (weak C1), and when C1 = hamza:
|
||||||
|
|
||||||
v1soundForms : Root3 -> Vowel -> Vowel -> SoundForms =
|
v1soundForms : Root3 -> Vowel -> Vowel -> (masdar:Str) -> SoundForms =
|
||||||
\fcl,vowPerf,vowImpf ->
|
\fcl,vowPerf,vowImpf,masdar ->
|
||||||
let {
|
let {
|
||||||
qf = {f = fcl.c ; c = fcl.l} ;
|
qf = {f = fcl.c ; c = fcl.l} ;
|
||||||
qif = mkBilit (fvc ! vowImpf) qf;
|
qif = mkBilit (fvc ! vowImpf) qf;
|
||||||
@@ -493,13 +500,13 @@ v1soundForms : Root3 -> Vowel -> Vowel -> SoundForms =
|
|||||||
};
|
};
|
||||||
maktUb = mkStrong mafcUl fcl
|
maktUb = mkStrong mafcUl fcl
|
||||||
} in
|
} in
|
||||||
toSoundForms katab kutib aktub uktab euktub maktUb ;
|
toSoundForms katab kutib aktub uktab euktub maktUb masdar ;
|
||||||
|
|
||||||
v1sound : Root3 -> Vowel -> Vowel -> Verb = \fcl,vp,vi ->
|
v1sound : Root3 -> Vowel -> Vowel -> (masdar:Str) -> Verb = \fcl,vp,vi,masdar ->
|
||||||
verb' (v1soundForms fcl vp vi) ;
|
verb' (v1soundForms fcl vp vi masdar) ;
|
||||||
|
|
||||||
v1hollow : Root3 -> Vowel -> Verb =
|
v1hollow : Root3 -> Vowel -> (masdar:Str) -> Verb =
|
||||||
\xwf,vowImpf ->
|
\xwf,vowImpf,masdar ->
|
||||||
let {
|
let {
|
||||||
xif = mkHollow (patHol1 ! vowImpf) xwf ; -- VPerf Act (Per3 Fem Pl)
|
xif = mkHollow (patHol1 ! vowImpf) xwf ; -- VPerf Act (Per3 Fem Pl)
|
||||||
xAf = mkHollow fAc xwf ; -- VPerf Act _
|
xAf = mkHollow fAc xwf ; -- VPerf Act _
|
||||||
@@ -513,7 +520,7 @@ v1hollow : Root3 -> Vowel -> Verb =
|
|||||||
uxAf= mkHollow ufAc xwf ; -- VImpf Pas _
|
uxAf= mkHollow ufAc xwf ; -- VImpf Pas _
|
||||||
ppart = "مَ" + xAf' -- FIXME actually wierd anomalies happen with the a vowel..
|
ppart = "مَ" + xAf' -- FIXME actually wierd anomalies happen with the a vowel..
|
||||||
|
|
||||||
} in verbHollow (toDefForms xAf xif xIf xuf axAf axaf uxAf uxaf xaf xAf' ppart) ;
|
} in verbHollow (toDefForms xAf xif xIf xuf axAf axaf uxAf uxaf xaf xAf' ppart masdar) ;
|
||||||
|
|
||||||
patHol1 : Vowel => Pattern =
|
patHol1 : Vowel => Pattern =
|
||||||
table { u => fuc ; _ => fic} ;
|
table { u => fuc ; _ => fic} ;
|
||||||
@@ -536,12 +543,12 @@ fvc : Vowel => Pattern =
|
|||||||
a => fac
|
a => fac
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
v1geminate : Str -> Vowel -> Vowel -> Verb =
|
v1geminate : Str -> Vowel -> Vowel -> (masdar:Str) -> Verb =
|
||||||
\r,vp,vi ->
|
\r,vp,vi,masdar ->
|
||||||
verbGeminate (v1geminateForms r vp vi) ;
|
verbGeminate (v1geminateForms r vp vi masdar) ;
|
||||||
|
|
||||||
v1geminateForms : Str -> Vowel -> Vowel -> DefForms =
|
v1geminateForms : Str -> Vowel -> Vowel -> (masdar:Str) -> DefForms =
|
||||||
\rootStr,vowPerf,vowImpf ->
|
\rootStr,vowPerf,vowImpf,masdar ->
|
||||||
let {
|
let {
|
||||||
mdd = mkRoot3 rootStr ; --fcc
|
mdd = mkRoot3 rootStr ; --fcc
|
||||||
md = mkRoot2 rootStr ; --fc
|
md = mkRoot2 rootStr ; --fc
|
||||||
@@ -560,7 +567,7 @@ v1geminateForms : Str -> Vowel -> Vowel -> DefForms =
|
|||||||
} in toDefForms
|
} in toDefForms
|
||||||
madd madad mudd mudid -- VPerf
|
madd madad mudd mudid -- VPerf
|
||||||
amudd amdud umadd umdad -- VImpf
|
amudd amdud umadd umdad -- VImpf
|
||||||
Umdud mudd' mamdUd ;
|
Umdud mudd' mamdUd masdar ;
|
||||||
|
|
||||||
patGem1 : Vowel => Pattern =
|
patGem1 : Vowel => Pattern =
|
||||||
table {
|
table {
|
||||||
@@ -586,23 +593,23 @@ patGem3 : Vowel => Pattern =
|
|||||||
-- IL -- Defective, hollow and geminate verbs all need 11 forms.
|
-- IL -- Defective, hollow and geminate verbs all need 11 forms.
|
||||||
{- NB. the numbers don't always refer to the same forms!
|
{- NB. the numbers don't always refer to the same forms!
|
||||||
The verb(Def|Hollow|Geminate) constructors pick the right forms. -}
|
The verb(Def|Hollow|Geminate) constructors pick the right forms. -}
|
||||||
SoundForms : Type = Predef.Ints 5 => Str ;
|
SoundForms : Type = Predef.Ints 6 => Str ;
|
||||||
DefForms : Type = Predef.Ints 10 => Str ;
|
DefForms : Type = Predef.Ints 11 => Str ;
|
||||||
|
|
||||||
toSoundForms : (x1,_,_,_,_,x6 : Str) -> SoundForms =
|
toSoundForms : (x1,_,_,_,_,_,x7 : Str) -> SoundForms =
|
||||||
\a,b,c,d,e,f ->
|
\a,b,c,d,e,f,g ->
|
||||||
table {
|
table {
|
||||||
0 => a ; 1 => b ; 2 => c ; 3 => d ; 4 => e ; 5 => f
|
0 => a ; 1 => b ; 2 => c ; 3 => d ; 4 => e ; 5 => f ; 6 => g
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
toDefForms : (x1,_,_,_,_,_,_,_,_,_,x11 : Str) -> DefForms =
|
toDefForms : (x1,_,_,_,_,_,_,_,_,_,_,x12 : Str) -> DefForms =
|
||||||
\a,b,c,d,e,f,g,h,i,j,k ->
|
\a,b,c,d,e,f,g,h,i,j,k,l ->
|
||||||
table {
|
table {
|
||||||
0 => a ; 1 => b ; 2 => c ; 3 => d ; 4 => e ; 5 => f ;
|
0 => a ; 1 => b ; 2 => c ; 3 => d ; 4 => e ; 5 => f ;
|
||||||
6 => g ; 7 => h ; 8 => i ; 9 => j ; 10 => k
|
6 => g ; 7 => h ; 8 => i ; 9 => j ; 10 => k ; 11 => l
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
v1defForms_perfA : Root3 -> Vowel -> DefForms = \rmy,vowImpf ->
|
v1defForms_perfA : Root3 -> Vowel -> (masdar:Str) -> DefForms = \rmy,vowImpf,masdar ->
|
||||||
let {
|
let {
|
||||||
_rmi = mkDefective (patDef1 ! vowImpf) rmy ;
|
_rmi = mkDefective (patDef1 ! vowImpf) rmy ;
|
||||||
_rmu = mkDefective (patDef2 ! vowImpf) rmy ;
|
_rmu = mkDefective (patDef2 ! vowImpf) rmy ;
|
||||||
@@ -620,28 +627,28 @@ v1defForms_perfA : Root3 -> Vowel -> DefForms = \rmy,vowImpf ->
|
|||||||
} in toDefForms
|
} in toDefForms
|
||||||
rama ramay rumi rumu rumiy -- VPerf
|
rama ramay rumi rumu rumiy -- VPerf
|
||||||
armi armu urma -- VImpf
|
armi armu urma -- VImpf
|
||||||
eirmi eirmu marmiy ;
|
eirmi eirmu marmiy masdar ;
|
||||||
|
|
||||||
v1defForms_perfI : Root3 -> Vowel -> DefForms = \bqy,vowImpf ->
|
v1defForms_perfI : Root3 -> Vowel -> (masdar:Str) -> DefForms = \bqy,vowImpf,masdar ->
|
||||||
let vforms_a = v1defForms_perfA bqy vowImpf ;
|
let vforms_a = v1defForms_perfA bqy vowImpf masdar ;
|
||||||
baqI = mkDefective facIl bqy ;
|
baqI = mkDefective facIl bqy ;
|
||||||
baqiy = mkDefective facil bqy ;
|
baqiy = mkDefective facil bqy ;
|
||||||
in table { 0 => baqI ;
|
in table { 0 => baqI ;
|
||||||
1 => baqiy ;
|
1 => baqiy ;
|
||||||
x => vforms_a ! x } ;
|
x => vforms_a ! x } ;
|
||||||
|
|
||||||
v1defective_a : Root3 -> Vowel -> Verb = \rmy,vowImpf ->
|
v1defective_a : Root3 -> Vowel -> (masdar:Str) -> Verb = \rmy,vowImpf,masdar ->
|
||||||
let vforms = v1defForms_perfA rmy vowImpf
|
let vforms = v1defForms_perfA rmy vowImpf masdar
|
||||||
in verbDef vforms vowImpf ;
|
in verbDef vforms vowImpf ;
|
||||||
|
|
||||||
v1defective_i : Root3 -> Vowel -> Verb = \bqy,vowImpf -> -- IL (conjugation 1d4)
|
v1defective_i : Root3 -> Vowel -> (masdar:Str) -> Verb = \bqy,vowImpf,masdar -> -- IL (conjugation 1d4)
|
||||||
let vforms_i = v1defForms_perfI bqy vowImpf ;
|
let vforms_i = v1defForms_perfI bqy vowImpf masdar ;
|
||||||
in verbDef vforms_i vowImpf ;
|
in verbDef vforms_i vowImpf ;
|
||||||
|
|
||||||
v1doubleweak : Root3 -> Verb = \r'y ->
|
v1doubleweak : Root3 -> (masdar:Str) -> Verb = \r'y,masdar ->
|
||||||
let ry = r'y ** {c = ""} ;
|
let ry = r'y ** {c = ""} ;
|
||||||
vforms_doubleweak : DefForms = \\x => rmSukun (v1defForms_perfA ry a ! x) ; -- only remove the first sukun
|
vforms_doubleweak : DefForms = \\x => rmSukun (v1defForms_perfA ry a masdar ! x) ; -- only remove the first sukun
|
||||||
vforms_weak : DefForms = v1defForms_perfA r'y a ;
|
vforms_weak : DefForms = v1defForms_perfA r'y a masdar ;
|
||||||
vforms = table { 0 => vforms_weak ! 0 ; -- all perfect forms
|
vforms = table { 0 => vforms_weak ! 0 ; -- all perfect forms
|
||||||
1 => vforms_weak ! 1 ;
|
1 => vforms_weak ! 1 ;
|
||||||
2 => vforms_weak ! 2 ;
|
2 => vforms_weak ! 2 ;
|
||||||
@@ -650,10 +657,10 @@ v1doubleweak : Root3 -> Verb = \r'y ->
|
|||||||
x => vforms_doubleweak ! x } ;
|
x => vforms_doubleweak ! x } ;
|
||||||
in verbDoubleDef vforms a ; -- sukun in suffixes is removed in verbDoubleDef
|
in verbDoubleDef vforms a ; -- sukun in suffixes is removed in verbDoubleDef
|
||||||
|
|
||||||
v1assimilated_defective : Root3 -> Vowel -> Vowel -> Verb = \root,vPerf,vImpf ->
|
v1assimilated_defective : Root3 -> Vowel -> Vowel -> (masdar:Str) -> Verb = \root,vPerf,vImpf,msdr ->
|
||||||
let vffun = case vPerf of {i => v1defForms_perfI ; _ => v1defForms_perfA} ;
|
let vffun = case vPerf of {i => v1defForms_perfI ; _ => v1defForms_perfA } ;
|
||||||
vforms_def : DefForms = vffun root vImpf ;
|
vforms_def : DefForms = vffun root vImpf msdr ;
|
||||||
vforms_ass : DefForms = \\x => rmSukun (vffun (root ** {f = ""}) vImpf ! x) ;
|
vforms_ass : DefForms = \\x => rmSukun (vffun (root ** {f = ""}) vImpf msdr ! x) ;
|
||||||
vforms : DefForms =
|
vforms : DefForms =
|
||||||
table { 4 => vforms_ass ! 4 ;
|
table { 4 => vforms_ass ! 4 ;
|
||||||
5 => vforms_ass ! 5 ;
|
5 => vforms_ass ! 5 ;
|
||||||
@@ -684,9 +691,10 @@ v2sound : Root3 -> Verb = \qsm ->
|
|||||||
qassim = mkStrong faccil qsm ;
|
qassim = mkStrong faccil qsm ;
|
||||||
uqassim = "ُ" + qassim ;
|
uqassim = "ُ" + qassim ;
|
||||||
uqassam = "ُ" + qassam ;
|
uqassam = "ُ" + qassam ;
|
||||||
muqassam = "مُ" + qassam
|
muqassam = "مُ" + qassam ;
|
||||||
|
taqsIm = "تَ" + mkStrong fcIl qsm ;
|
||||||
} in
|
} in
|
||||||
verb qassam qussim uqassim uqassam qassim muqassam ;
|
verb qassam qussim uqassim uqassam qassim muqassam taqsIm ;
|
||||||
|
|
||||||
v2defective : Root3 -> Verb = \gny ->
|
v2defective : Root3 -> Verb = \gny ->
|
||||||
let {
|
let {
|
||||||
@@ -700,11 +708,12 @@ v2defective : Root3 -> Verb = \gny ->
|
|||||||
gannu = mkDefective faccu gny;
|
gannu = mkDefective faccu gny;
|
||||||
ugannu = "ُ" + gannu;
|
ugannu = "ُ" + gannu;
|
||||||
uganna = "ُ" + ganna;
|
uganna = "ُ" + ganna;
|
||||||
mugannaY = "مُ" + ganna + "ى"
|
mugannaY = "مُ" + ganna + "ى";
|
||||||
|
tagniya = "TODO" ;
|
||||||
} in verbDef (toDefForms
|
} in verbDef (toDefForms
|
||||||
ganna gannay gunni gunnu gunniy -- VPerf
|
ganna gannay gunni gunnu gunniy -- VPerf
|
||||||
uganni ugannu uganna -- VImpf
|
uganni ugannu uganna -- VImpf
|
||||||
ganni gannu mugannaY) i ;
|
ganni gannu mugannaY tagniya) i ;
|
||||||
|
|
||||||
v3sound : Root3 -> Verb =
|
v3sound : Root3 -> Verb =
|
||||||
\tbc ->
|
\tbc ->
|
||||||
@@ -714,8 +723,9 @@ v3sound : Root3 -> Verb =
|
|||||||
tAbic = mkStrong fAcil tbc ;
|
tAbic = mkStrong fAcil tbc ;
|
||||||
utAbic = "ُ" + tAbic ;
|
utAbic = "ُ" + tAbic ;
|
||||||
utAbac = mkStrong ufAcal tbc ;
|
utAbac = mkStrong ufAcal tbc ;
|
||||||
mutAbac = "م" + utAbac
|
mutAbac = "م" + utAbac ;
|
||||||
} in verb tAbac twbic utAbic utAbac tAbic mutAbac;
|
mutAbacAt = mutAbac + "َاَة"
|
||||||
|
} in verb tAbac twbic utAbic utAbac tAbic mutAbac mutAbacAt ;
|
||||||
|
|
||||||
v4sound : Root3 -> Verb =
|
v4sound : Root3 -> Verb =
|
||||||
\qnc ->
|
\qnc ->
|
||||||
@@ -725,9 +735,10 @@ v4sound : Root3 -> Verb =
|
|||||||
uqnic = mkStrong ufcil qnc;
|
uqnic = mkStrong ufcil qnc;
|
||||||
uqnac = mkStrong ufcal qnc;
|
uqnac = mkStrong ufcal qnc;
|
||||||
eaqnic = mkStrong eafcil qnc;
|
eaqnic = mkStrong eafcil qnc;
|
||||||
muqnac = "م" + uqnac
|
muqnac = "م" + uqnac;
|
||||||
|
eiqnAc = mkStrong eifcAl qnc
|
||||||
} in
|
} in
|
||||||
verb eaqnac euqnic uqnic uqnac eaqnic muqnac;
|
verb eaqnac euqnic uqnic uqnac eaqnic muqnac eiqnAc;
|
||||||
|
|
||||||
v4hollow : Root3 -> Verb =
|
v4hollow : Root3 -> Verb =
|
||||||
\rwd ->
|
\rwd ->
|
||||||
@@ -746,11 +757,12 @@ v4hollow : Root3 -> Verb =
|
|||||||
earId = mkHollow eafIc rwd ; -- VImp (Pl Masc / Sg Fem)
|
earId = mkHollow eafIc rwd ; -- VImp (Pl Masc / Sg Fem)
|
||||||
|
|
||||||
ppart = "م" + urAd ;
|
ppart = "م" + urAd ;
|
||||||
|
eirAdat = mkWeak eifcAl rwd + "َة" ;
|
||||||
|
|
||||||
} in verbHollow (toDefForms
|
} in verbHollow (toDefForms
|
||||||
earAd earad eurId eurid -- VPerf
|
earAd earad eurId eurid -- VPerf
|
||||||
urId urid urAd urad -- VImpf
|
urId urid urAd urad -- VImpf
|
||||||
earId earid ppart) ;
|
earId earid ppart eirAdat) ;
|
||||||
|
|
||||||
v4DefForms : Root3 -> DefForms = \cTy ->
|
v4DefForms : Root3 -> DefForms = \cTy ->
|
||||||
let {
|
let {
|
||||||
@@ -767,10 +779,11 @@ v4hollow : Root3 -> Verb =
|
|||||||
ucTa = "ُ" + _cTa; -- VImpf Pas
|
ucTa = "ُ" + _cTa; -- VImpf Pas
|
||||||
eacTi = "أَ" + _cTi; -- VImp (Masc Sg / Fem _)
|
eacTi = "أَ" + _cTi; -- VImp (Masc Sg / Fem _)
|
||||||
eacTu = "أَ" + _cTu; -- VImp Masc Pl
|
eacTu = "أَ" + _cTu; -- VImp Masc Pl
|
||||||
mucTaY = "م" + ucTa +"ى"
|
mucTaY = "م" + ucTa +"ى" ;
|
||||||
|
eicTA' = "TODO" ;
|
||||||
} in toDefForms eacTa eacTay eucTi eucTu eucTiy -- VPerf
|
} in toDefForms eacTa eacTay eucTi eucTu eucTiy -- VPerf
|
||||||
ucTi ucTu ucTa -- VImpf
|
ucTi ucTu ucTa -- VImpf
|
||||||
eacTi eacTu mucTaY ;
|
eacTi eacTu mucTaY eicTA' ;
|
||||||
|
|
||||||
v4defective : Root3 -> Verb = \cTy ->
|
v4defective : Root3 -> Verb = \cTy ->
|
||||||
verbDef (v4DefForms cTy) i ;
|
verbDef (v4DefForms cTy) i ;
|
||||||
@@ -787,8 +800,9 @@ v5sound : Root3 -> Verb =
|
|||||||
tunuffis = mkStrong tufuccil nfs ;
|
tunuffis = mkStrong tufuccil nfs ;
|
||||||
atanaffas = "َ" + tanaffas ;
|
atanaffas = "َ" + tanaffas ;
|
||||||
utanaffas = "ُ" + tanaffas ;
|
utanaffas = "ُ" + tanaffas ;
|
||||||
mutanaffas = "م" + tanaffas
|
mutanaffas = "م" + tanaffas ;
|
||||||
} in verb tanaffas tunuffis atanaffas utanaffas tanaffas mutanaffas;
|
tanaffus = mkStrong tafaccul nfs
|
||||||
|
} in verb tanaffas tunuffis atanaffas utanaffas tanaffas mutanaffas tanaffus;
|
||||||
|
|
||||||
v6sound : Root3 -> Verb =
|
v6sound : Root3 -> Verb =
|
||||||
\fqm ->
|
\fqm ->
|
||||||
@@ -797,11 +811,13 @@ v6sound : Root3 -> Verb =
|
|||||||
tufUqim = mkStrong tufUcil fqm ;
|
tufUqim = mkStrong tufUcil fqm ;
|
||||||
atafAqam = "َ" + tafAqam ;
|
atafAqam = "َ" + tafAqam ;
|
||||||
utafAqam = "ُ" + tafAqam ;
|
utafAqam = "ُ" + tafAqam ;
|
||||||
mutafAqam = "م" + utafAqam
|
mutafAqam = "م" + utafAqam ;
|
||||||
} in verb tafAqam tufUqim atafAqam utafAqam tafAqam mutafAqam;
|
tafAqum = mkStrong tafAcul fqm ;
|
||||||
|
} in verb tafAqam tufUqim atafAqam utafAqam tafAqam mutafAqam tafAqum;
|
||||||
|
|
||||||
v7sound : Root3 -> Verb = \fcl ->
|
v7sound : Root3 -> Verb = \fcl ->
|
||||||
let vforms = v1soundForms fcl a i ;
|
let inficAl = "اِ" + mkStrong ficAl fcl ;
|
||||||
|
vforms = v1soundForms fcl a i inficAl ;
|
||||||
_nfacil = "نْ" + mkStrong facil fcl ;
|
_nfacil = "نْ" + mkStrong facil fcl ;
|
||||||
infacal = "اِنْ" + vforms ! 0 ;
|
infacal = "اِنْ" + vforms ! 0 ;
|
||||||
anfacil = "َ" + _nfacil ;
|
anfacil = "َ" + _nfacil ;
|
||||||
@@ -816,7 +832,8 @@ v7sound : Root3 -> Verb = \fcl ->
|
|||||||
}) ;
|
}) ;
|
||||||
|
|
||||||
v7geminate : Str -> Verb = \fcl ->
|
v7geminate : Str -> Verb = \fcl ->
|
||||||
let vforms = v1geminateForms fcl a i ;
|
let inficAc = "اِنْ" + mkStrong ficAl (mkRoot3 fcl) ;
|
||||||
|
vforms = v1geminateForms fcl a i inficAc ;
|
||||||
_nfacc = "نْ" + vforms ! 0 ;
|
_nfacc = "نْ" + vforms ! 0 ;
|
||||||
_nfacic = "نْ" + mkStrong facil (mkRoot3 fcl) ;
|
_nfacic = "نْ" + mkStrong facil (mkRoot3 fcl) ;
|
||||||
infacc = "اِ" + _nfacc ; -- VPerf Act
|
infacc = "اِ" + _nfacc ; -- VPerf Act
|
||||||
@@ -836,6 +853,21 @@ v7geminate : Str -> Verb = \fcl ->
|
|||||||
n => "ُنْ" + vforms ! n -- doesn't exist for form 7
|
n => "ُنْ" + vforms ! n -- doesn't exist for form 7
|
||||||
}) ;
|
}) ;
|
||||||
|
|
||||||
|
v8sound : Root3 -> Verb =
|
||||||
|
\rbT ->
|
||||||
|
let {
|
||||||
|
rtabiT = mkStrong ftacil rbT ;
|
||||||
|
rtabaT = mkStrong ftacal rbT ;
|
||||||
|
rtibAT = mkStrong fticAl rbT ;
|
||||||
|
eirtabaT = "إِ" + rtabaT ;
|
||||||
|
eurtubiT = "أُ" + mkStrong ftucil rbT ;
|
||||||
|
artabiT = "َ" + rtabiT ;
|
||||||
|
urtabaT = "ُ" + rtabaT ;
|
||||||
|
eirtabiT = "إِ" + rtabiT ;
|
||||||
|
murtabaT = "م" + urtabaT ;
|
||||||
|
irtibAT = "اِ" + rtibAT ;
|
||||||
|
} in verb eirtabaT eurtubiT artabiT urtabaT eirtabiT murtabaT irtibAT;
|
||||||
|
|
||||||
v8geminate : Str -> Verb =
|
v8geminate : Str -> Verb =
|
||||||
\rootStr ->
|
\rootStr ->
|
||||||
let {
|
let {
|
||||||
@@ -846,6 +878,7 @@ v8geminate : Str -> Verb =
|
|||||||
_mtadid = mkStrong ftacil mdd ;
|
_mtadid = mkStrong ftacil mdd ;
|
||||||
_mtudd = mkBilit ftucc md ;
|
_mtudd = mkBilit ftucc md ;
|
||||||
_mtudid = mkStrong ftucil mdd ;
|
_mtudid = mkStrong ftucil mdd ;
|
||||||
|
_mtidAd = mkStrong fticAl mdd ;
|
||||||
imtadd = "اِ" + _mtadd ;
|
imtadd = "اِ" + _mtadd ;
|
||||||
imtadad = "اِ" + _mtadad ;
|
imtadad = "اِ" + _mtadad ;
|
||||||
umtudd = "اُ" + _mtudd ;
|
umtudd = "اُ" + _mtudd ;
|
||||||
@@ -856,37 +889,26 @@ v8geminate : Str -> Verb =
|
|||||||
umtadad = "ُ" + _mtadad ;
|
umtadad = "ُ" + _mtadad ;
|
||||||
imtadid = "اِ" + _mtadid ;
|
imtadid = "اِ" + _mtadid ;
|
||||||
mumtadd = "مُ" + _mtadd ;
|
mumtadd = "مُ" + _mtadd ;
|
||||||
|
imtidAd = "اِ" + _mtidAd ;
|
||||||
} in verbGeminate (toDefForms
|
} in verbGeminate (toDefForms
|
||||||
imtadd imtadad umtudd umtudid -- VPerf
|
imtadd imtadad umtudd umtudid -- VPerf
|
||||||
amtadd amtadid umtadd umtadad -- VPres
|
amtadd amtadid umtadd umtadad -- VPres
|
||||||
imtadd imtadid mumtadd) ;
|
imtadd imtadid mumtadd imtidAd) ;
|
||||||
|
|
||||||
|
|
||||||
v8sound : Root3 -> Verb =
|
|
||||||
\rbT ->
|
|
||||||
let {
|
|
||||||
rtabiT = mkStrong ftacil rbT ;
|
|
||||||
rtabaT = mkStrong ftacal rbT ;
|
|
||||||
eirtabaT = "إِ" + rtabaT ;
|
|
||||||
eurtubiT = "أُ" + mkStrong ftucil rbT ;
|
|
||||||
artabiT = "َ" + rtabiT ;
|
|
||||||
urtabaT = "ُ" + rtabaT ;
|
|
||||||
eirtabiT = "إِ" + rtabiT ;
|
|
||||||
murtabaT = "م" + urtabaT
|
|
||||||
} in verb eirtabaT eurtubiT artabiT urtabaT eirtabiT murtabaT;
|
|
||||||
|
|
||||||
v8assimilated : Root3 -> Verb = --- IL 8a1
|
v8assimilated : Root3 -> Verb = --- IL 8a1
|
||||||
\wfq ->
|
\wfq ->
|
||||||
let {
|
let {
|
||||||
ttafiq = mkWeak ttacil wfq ;
|
ttafiq = mkWeak ttacil wfq ;
|
||||||
ttafaq = mkWeak ttacal wfq ;
|
ttafaq = mkWeak ttacal wfq ;
|
||||||
eittafaq = "إِ" + ttafaq ;
|
ttifAq = mkWeak tticAl wfq ;
|
||||||
|
ittafaq = "اِ" + ttafaq ;
|
||||||
euttufiq = mkWeak euttucil wfq ; -- TODO check
|
euttufiq = mkWeak euttucil wfq ; -- TODO check
|
||||||
attafiq = "َ" + ttafiq ;
|
attafiq = "َ" + ttafiq ;
|
||||||
uttafaq = "ُ" + ttafaq ;
|
uttafaq = "ُ" + ttafaq ;
|
||||||
eittafiq = "إِ" + ttafiq ;
|
ittafiq = "اِ" + ttafiq ;
|
||||||
muttafaq = "م" + uttafaq
|
muttafaq = "م" + uttafaq ;
|
||||||
} in verb eittafaq euttufiq attafiq uttafaq eittafiq muttafaq;
|
ittifAq = "اِ" + ttifAq ;
|
||||||
|
} in verb ittafaq euttufiq attafiq uttafaq ittafiq muttafaq ittifAq;
|
||||||
|
|
||||||
v8hollow : Root3 -> Verb = -- IL
|
v8hollow : Root3 -> Verb = -- IL
|
||||||
\Hwj ->
|
\Hwj ->
|
||||||
@@ -905,25 +927,28 @@ v8hollow : Root3 -> Verb = -- IL
|
|||||||
uHtAj = "ُ" + _Htaj ; -- VImpf Pas _
|
uHtAj = "ُ" + _Htaj ; -- VImpf Pas _
|
||||||
-- iHtaj again -- VImp Sg Masc / Pl Fem
|
-- iHtaj again -- VImp Sg Masc / Pl Fem
|
||||||
-- iHtAj again -- VImp Pl Masc / Sg Fem
|
-- iHtAj again -- VImp Pl Masc / Sg Fem
|
||||||
ppart = "مُ" + _HtAj -- PPart
|
ppart = "مُ" + _HtAj ; -- PPart
|
||||||
|
iHtiyAj = "TODO" ;
|
||||||
|
|
||||||
} in verbHollow (toDefForms
|
} in verbHollow (toDefForms
|
||||||
iHtAj iHtaj uHtIj uHtij aHtAj aHtaj
|
iHtAj iHtaj uHtIj uHtij aHtAj aHtaj
|
||||||
uHtAj uHtaj iHtAj iHtaj ppart) ;
|
uHtAj uHtaj iHtAj iHtaj ppart iHtiyAj) ;
|
||||||
|
|
||||||
v10sound : Root3 -> Verb = -- IL 10s -- to be checked
|
v10sound : Root3 -> Verb = -- IL 10s -- to be checked
|
||||||
\qtl ->
|
\qtl ->
|
||||||
let {
|
let {
|
||||||
_staqtal = "ستَ" + mkStrong fcal qtl ;
|
_staqtal = "ستَ" + mkStrong fcal qtl ;
|
||||||
_staqtil = "ستَ" + mkStrong fcil qtl;
|
_staqtil = "ستَ" + mkStrong fcil qtl ;
|
||||||
|
_stiqtAl = "ستِ" + mkStrong fcAl qtl ;
|
||||||
istaqtal = "اِ" + _staqtal ; -- VPerf Act
|
istaqtal = "اِ" + _staqtal ; -- VPerf Act
|
||||||
ustuqtil = "اُسْتُ" + mkStrong fcil qtl; -- VPerf Pas
|
ustuqtil = "اُسْتُ" + mkStrong fcil qtl; -- VPerf Pas
|
||||||
astaqtil = "َ" + _staqtil ; -- VImpf _ Act
|
astaqtil = "َ" + _staqtil ; -- VImpf _ Act
|
||||||
astaqtal = "َ" + _staqtal ; -- VImpf _ Pas
|
astaqtal = "َ" + _staqtal ; -- VImpf _ Pas
|
||||||
istaqtil = "اِ" + _staqtil ; -- VImp
|
istaqtil = "اِ" + _staqtil ; -- VImp
|
||||||
mustaqtal = "مُ" + _staqtal -- VPPart
|
mustaqtal = "مُ" + _staqtal ; -- VPPart
|
||||||
|
istiqtAl = "اِ" + _stiqtAl ;
|
||||||
} in
|
} in
|
||||||
verb istaqtal ustuqtil astaqtil astaqtal istaqtil mustaqtal ;
|
verb istaqtal ustuqtil astaqtil astaqtal istaqtil mustaqtal istiqtAl ;
|
||||||
|
|
||||||
v10hollow : Root3 -> Verb = -- IL 10h -- to be checked
|
v10hollow : Root3 -> Verb = -- IL 10h -- to be checked
|
||||||
\xwf ->
|
\xwf ->
|
||||||
@@ -942,11 +967,12 @@ v10hollow : Root3 -> Verb = -- IL 10h -- to be checked
|
|||||||
astaxIf = "َ" + _staxIf ; -- VImpf Act _
|
astaxIf = "َ" + _staxIf ; -- VImpf Act _
|
||||||
ustaxaf = "ُ" + _staxaf ; -- VImpf Pas (Per2/Per3 Fem Pl)
|
ustaxaf = "ُ" + _staxaf ; -- VImpf Pas (Per2/Per3 Fem Pl)
|
||||||
ustaxAf = "ُ" + _staxAf ; -- VImpf Pas _
|
ustaxAf = "ُ" + _staxAf ; -- VImpf Pas _
|
||||||
ppart = "مُ" + _staxIf -- PPart ("weird anomalies" here too?)
|
ppart = "مُ" + _staxIf ; -- PPart ("weird anomalies" here too?)
|
||||||
|
istixAfat = "TODO ficAlp" ;
|
||||||
|
|
||||||
} in verbHollow (toDefForms
|
} in verbHollow (toDefForms
|
||||||
istaxAf istaxaf ustuxIf ustuxif astaxIf astaxif
|
istaxAf istaxaf ustuxIf ustuxif astaxIf astaxif
|
||||||
ustaxAf ustaxaf istaxif istaxIf ppart) ;
|
ustaxAf ustaxaf istaxif istaxIf ppart istixAfat) ;
|
||||||
|
|
||||||
v10defective : Root3 -> Verb = -- IL
|
v10defective : Root3 -> Verb = -- IL
|
||||||
\lqy ->
|
\lqy ->
|
||||||
@@ -967,12 +993,16 @@ v10defective : Root3 -> Verb = -- IL
|
|||||||
istalqu = "اِ" + _stalqu; -- VImp Masc Pl
|
istalqu = "اِ" + _stalqu; -- VImp Masc Pl
|
||||||
mustalqin = "مُ" + _stalqi + "ت" ;
|
mustalqin = "مُ" + _stalqi + "ت" ;
|
||||||
|
|
||||||
|
lq' = lqy ** {l = "ء"} ;
|
||||||
|
istilqA' = "اِسْتِ" + mkStrong fcAl lq' ;
|
||||||
|
|
||||||
} in verbDef (toDefForms
|
} in verbDef (toDefForms
|
||||||
istalqa istalqay ustulqi ustulqi ustulqi
|
istalqa istalqay ustulqi ustulqi ustulqi
|
||||||
astalqi astalqu ustalqa istalqi istalqu mustalqin) i ;
|
astalqi astalqu ustalqa
|
||||||
|
istalqi istalqu mustalqin istilqA') i ;
|
||||||
|
|
||||||
v10geminate : Str -> Verb = \fcl ->
|
v10geminate : Str -> Verb = \fcl ->
|
||||||
let vforms = v1geminateForms fcl a i ;
|
let vforms = v1geminateForms fcl a i "dummy masdar" ;
|
||||||
_stafacc = "سْتَ" + vforms ! 0 ;
|
_stafacc = "سْتَ" + vforms ! 0 ;
|
||||||
_stafcac = "سْتَ" + mkStrong fcal (mkRoot3 fcl) ;
|
_stafcac = "سْتَ" + mkStrong fcal (mkRoot3 fcl) ;
|
||||||
_staficc = "سْت" + vforms ! 4 ; -- vowel is in the stem from vforms
|
_staficc = "سْت" + vforms ! 4 ; -- vowel is in the stem from vforms
|
||||||
@@ -984,6 +1014,7 @@ v10geminate : Str -> Verb = \fcl ->
|
|||||||
istaficc = "اِ" + _staficc ; -- VImp
|
istaficc = "اِ" + _staficc ; -- VImp
|
||||||
istafcic = "اِ" + _stafcic ; -- VImp PlF
|
istafcic = "اِ" + _stafcic ; -- VImp PlF
|
||||||
mustafacc = "مُ" + _stafacc ; -- VPPart
|
mustafacc = "مُ" + _stafacc ; -- VPPart
|
||||||
|
istifcAc = "اِسْتِ" + mkStrong fcAl (mkRoot3 fcl) ;
|
||||||
in verbGeminate (table {
|
in verbGeminate (table {
|
||||||
0 => istafacc ;
|
0 => istafacc ;
|
||||||
1 => istafcac ;
|
1 => istafcac ;
|
||||||
@@ -992,6 +1023,7 @@ v10geminate : Str -> Verb = \fcl ->
|
|||||||
8 => istaficc ;
|
8 => istaficc ;
|
||||||
9 => istafcic ;
|
9 => istafcic ;
|
||||||
10 => mustafacc ;
|
10 => mustafacc ;
|
||||||
|
11 => istifcAc ;
|
||||||
n@(2|3) => "ُسْتُ" + vforms ! n ; -- ???
|
n@(2|3) => "ُسْتُ" + vforms ! n ; -- ???
|
||||||
n@(6|7) => "ُسْتَ" + vforms ! n -- ???
|
n@(6|7) => "ُسْتَ" + vforms ! n -- ???
|
||||||
}) ;
|
}) ;
|
||||||
@@ -1629,7 +1661,7 @@ patGeminateImp : (_,_ :Str) -> Gender => Number => Str = \facc,facic ->
|
|||||||
VPerf _ pgn => v.s ! vf ++ reflPron Acc pgn ;
|
VPerf _ pgn => v.s ! vf ++ reflPron Acc pgn ;
|
||||||
VImpf _ _ pgn => v.s ! vf ++ reflPron Acc pgn ;
|
VImpf _ _ pgn => v.s ! vf ++ reflPron Acc pgn ;
|
||||||
VImp g n => v.s ! vf ++ reflPron Acc (Per2 g n) ;
|
VImp g n => v.s ! vf ++ reflPron Acc (Per2 g n) ;
|
||||||
VPPart => v.s ! vf ++ reflPron Acc (Per3 Masc Sg) ----
|
_ => v.s ! vf ++ reflPron Acc (Per3 Masc Sg) ----
|
||||||
}
|
}
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
@@ -1647,7 +1679,8 @@ patGeminateImp : (_,_ :Str) -> Gender => Number => Str = \facc,facic ->
|
|||||||
vf@(VImpf _ _ pgn) => copula.s ! vf ++ laday pgn ;
|
vf@(VImpf _ _ pgn) => copula.s ! vf ++ laday pgn ;
|
||||||
vf@(VPerf _ pgn) => copula.s ! vf ++ laday pgn ;
|
vf@(VPerf _ pgn) => copula.s ! vf ++ laday pgn ;
|
||||||
vf@(VImp g n) => copula.s ! vf ++ laday (Per2 g n) ;
|
vf@(VImp g n) => copula.s ! vf ++ laday (Per2 g n) ;
|
||||||
VPPart => copula.s ! VPPart ++ "لَدَى" }
|
x => copula.s ! x ++ "لَدَى" }
|
||||||
|
|
||||||
} ;
|
} ;
|
||||||
-----------------------------------------------------------------------------
|
-----------------------------------------------------------------------------
|
||||||
-- IP, questions
|
-- IP, questions
|
||||||
@@ -1699,7 +1732,8 @@ patGeminateImp : (_,_ :Str) -> Gender => Number => Str = \facc,facic ->
|
|||||||
param VPForm =
|
param VPForm =
|
||||||
VPPerf
|
VPPerf
|
||||||
| VPImpf Mood
|
| VPImpf Mood
|
||||||
| VPImp ;
|
| VPImp
|
||||||
|
| VPGer ;
|
||||||
|
|
||||||
oper
|
oper
|
||||||
|
|
||||||
@@ -1726,7 +1760,8 @@ patGeminateImp : (_,_ :Str) -> Gender => Number => Str = \facc,facic ->
|
|||||||
case vf of {
|
case vf of {
|
||||||
VPPerf => v.s ! VPerf Act pgn ;
|
VPPerf => v.s ! VPerf Act pgn ;
|
||||||
VPImpf m => v.s ! VImpf m Act pgn ;
|
VPImpf m => v.s ! VImpf m Act pgn ;
|
||||||
VPImp => v.s ! VImp gn.g gn.n
|
VPImp => v.s ! VImp gn.g gn.n ;
|
||||||
|
VPGer => v.s ! Masdar
|
||||||
};
|
};
|
||||||
sc = noPrep ;
|
sc = noPrep ;
|
||||||
obj = emptyObj ;
|
obj = emptyObj ;
|
||||||
@@ -1895,7 +1930,7 @@ patGeminateImp : (_,_ :Str) -> Gender => Number => Str = \facc,facic ->
|
|||||||
kaan : {s : AAgr => Case => Str} -> VP = \xabar ->
|
kaan : {s : AAgr => Case => Str} -> VP = \xabar ->
|
||||||
insertPred xabar (predV copula);
|
insertPred xabar (predV copula);
|
||||||
|
|
||||||
copula : Verb = v1hollow {f = "ك"; c = "و" ; l = "ن"} u ;
|
copula : Verb = v1hollow {f = "ك"; c = "و" ; l = "ن"} u "كَوْن" ;
|
||||||
|
|
||||||
-----------------------------------------------------------------------------
|
-----------------------------------------------------------------------------
|
||||||
-- Slash categories
|
-- Slash categories
|
||||||
|
|||||||
Reference in New Issue
Block a user