From c021129cda1126161126f43237d626767ace4761 Mon Sep 17 00:00:00 2001 From: Inari Listenmaa Date: Tue, 15 Jan 2019 10:30:27 +0100 Subject: [PATCH 1/3] (Ara) Add missing masdars to some paradigms --- src/arabic/ResAra.gf | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/src/arabic/ResAra.gf b/src/arabic/ResAra.gf index e2d183fb..dbce22a6 100644 --- a/src/arabic/ResAra.gf +++ b/src/arabic/ResAra.gf @@ -709,11 +709,11 @@ v2defective : Root3 -> Verb = \gny -> ugannu = "ُ" + gannu; uganna = "ُ" + ganna; mugannaY = "مُ" + ganna + "ى"; - tagniya = "TODO" ; + tagniyat = "تَ" + mkStrong fcil (gny ** {l="ي"}) + "َة" ; } in verbDef (toDefForms ganna gannay gunni gunnu gunniy -- VPerf uganni ugannu uganna -- VImpf - ganni gannu mugannaY tagniya) i ; + ganni gannu mugannaY tagniyat) i ; v3sound : Root3 -> Verb = \tbc -> @@ -757,7 +757,7 @@ v4hollow : Root3 -> Verb = earId = mkHollow eafIc rwd ; -- VImp (Pl Masc / Sg Fem) ppart = "م" + urAd ; - eirAdat = mkWeak eifcAl rwd + "َة" ; + eirAdat = mkHollow eifcAl rwd + "َة" ; } in verbHollow (toDefForms earAd earad eurId eurid -- VPerf @@ -780,7 +780,7 @@ v4hollow : Root3 -> Verb = eacTi = "أَ" + _cTi; -- VImp (Masc Sg / Fem _) eacTu = "أَ" + _cTu; -- VImp Masc Pl mucTaY = "م" + ucTa +"ى" ; - eicTA' = "TODO" ; + eicTA' = mkStrong eifcAl (cTy ** {l="ء"}) ; } in toDefForms eacTa eacTay eucTi eucTu eucTiy -- VPerf ucTi ucTu ucTa -- VImpf eacTi eacTu mucTaY eicTA' ; @@ -790,7 +790,12 @@ v4defective : Root3 -> Verb = \cTy -> v4doubleweak : Root3 -> Verb = \r'y -> let ry = r'y ** {c = ""} ; - vforms : DefForms = \\x => rmSukun (v4DefForms ry ! x) ; -- only remove the first sukun + r' = ry ** {l = "ء"} ; + eirA'at = mkStrong eifcAl r' + "َة" ; + vforms : DefForms = table { + 11 => rmSukun eirA'at ; + n => rmSukun (v4DefForms ry ! n) -- only remove the first sukun + } ; in verbDoubleDef vforms i ; -- sukun in suffixes is removed in verbDoubleDef v5sound : Root3 -> Verb = @@ -928,7 +933,7 @@ v8hollow : Root3 -> Verb = -- IL -- iHtaj again -- VImp Sg Masc / Pl Fem -- iHtAj again -- VImp Pl Masc / Sg Fem ppart = "مُ" + _HtAj ; -- PPart - iHtiyAj = "TODO" ; + iHtiyAj = "اِ" + mkStrong fticAl (Hwj ** {c="ي"}) ; } in verbHollow (toDefForms iHtAj iHtaj uHtIj uHtij aHtAj aHtaj @@ -968,7 +973,7 @@ v10hollow : Root3 -> Verb = -- IL 10h -- to be checked ustaxaf = "ُ" + _staxaf ; -- VImpf Pas (Per2/Per3 Fem Pl) ustaxAf = "ُ" + _staxAf ; -- VImpf Pas _ ppart = "مُ" + _staxIf ; -- PPart ("weird anomalies" here too?) - istixAfat = "TODO ficAlp" ; + istixAfat = "اِسْتِ" + mkHollow fAc xwf + "َة" ; } in verbHollow (toDefForms istaxAf istaxaf ustuxIf ustuxif astaxIf astaxif From e44440928a49e45447b4de77dbf3ee6c038ed02a Mon Sep 17 00:00:00 2001 From: Inari Listenmaa Date: Tue, 15 Jan 2019 10:32:01 +0100 Subject: [PATCH 2/3] (Ara) Add v4assimilated --- src/arabic/ParadigmsAra.gf | 1 + src/arabic/PatternsAra.gf | 1 + src/arabic/ResAra.gf | 15 ++++++++++++--- 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/arabic/ParadigmsAra.gf b/src/arabic/ParadigmsAra.gf index 3c23365d..1be86828 100644 --- a/src/arabic/ParadigmsAra.gf +++ b/src/arabic/ParadigmsAra.gf @@ -474,6 +474,7 @@ resource ParadigmsAra = open \rootStr -> let root : Root3 = mkRoot3 rootStr ; verb : Verb = case rootStr of { + #weak + ? + ? => v4assimilated root ; ? + #hamza + #weak => v4doubleweak root ; ? + #weak + ? => v4hollow root ; _ + #weak => v4defective root ; diff --git a/src/arabic/PatternsAra.gf b/src/arabic/PatternsAra.gf index b2ac133c..920060ba 100644 --- a/src/arabic/PatternsAra.gf +++ b/src/arabic/PatternsAra.gf @@ -48,6 +48,7 @@ flags coding=utf8 ; eafcal = { h = "أَ"; m1 = "ْ" ; m2 = "َ" ; t = "" } ; eafcAl = { h = "أَ"; m1 = "ْ" ; m2 = "َا" ; t = "" } ; eifcAl = { h = "إِ"; m1 = "ْ" ; m2 = "َا" ; t = "" } ; + eIfcAl = eifcAl ** {h = "إِي"} ; eafcil = { h = "أَ"; m1 = "ْ" ; m2 = "ِ" ; t = "" } ; eafcul = { h = "أَ"; m1 = "ْ" ; m2 = "ُ" ; t = "" } ; eiftacal = { h = "إِ"; m1 = "ْتَ" ; m2 = "َ" ; t = "" } ; diff --git a/src/arabic/ResAra.gf b/src/arabic/ResAra.gf index dbce22a6..b95b3c5a 100644 --- a/src/arabic/ResAra.gf +++ b/src/arabic/ResAra.gf @@ -727,8 +727,7 @@ v3sound : Root3 -> Verb = mutAbacAt = mutAbac + "َاَة" } in verb tAbac twbic utAbic utAbac tAbic mutAbac mutAbacAt ; -v4sound : Root3 -> Verb = - \qnc -> +v4soundForms : Root3 -> SoundForms = \qnc -> let { eaqnac = mkStrong eafcal qnc; euqnic = mkStrong eufcil qnc; @@ -738,7 +737,17 @@ v4sound : Root3 -> Verb = muqnac = "م" + uqnac; eiqnAc = mkStrong eifcAl qnc } in - verb eaqnac euqnic uqnic uqnac eaqnic muqnac eiqnAc; + toSoundForms eaqnac euqnic uqnic uqnac eaqnic muqnac eiqnAc; + +v4sound : Root3 -> Verb = \qnc -> + verb' (v4soundForms qnc) ; + +-- TODO: other differences +v4assimilated : Root3 -> Verb = \wqf -> + let eIqAf = mkStrong eIfcAl (wqf ** {f=""}) ; + vforms_snd = v4soundForms wqf ; + vforms_ass = table {6 => eIqAf ; n => vforms_snd ! n} + in verb' vforms_ass ; v4hollow : Root3 -> Verb = \rwd -> From 25275794cff8c559d0dd27721d132e6eca65a8a5 Mon Sep 17 00:00:00 2001 From: Inari Listenmaa Date: Tue, 15 Jan 2019 10:32:26 +0100 Subject: [PATCH 3/3] (Ara) Add quadriliteral FormXI + improve documentation --- src/arabic/ParadigmsAra.gf | 57 ++++++++++++++++++++++++-------------- src/arabic/ResAra.gf | 27 ++++++++++++------ 2 files changed, 55 insertions(+), 29 deletions(-) diff --git a/src/arabic/ParadigmsAra.gf b/src/arabic/ParadigmsAra.gf index 1be86828..f8531a2c 100644 --- a/src/arabic/ParadigmsAra.gf +++ b/src/arabic/ParadigmsAra.gf @@ -201,36 +201,39 @@ resource ParadigmsAra = open mkV : overload { mkV : (imperfect : Str) -> V ; -- The verb in Per3 Sg Masc imperfect tense gives the most information - 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) -> (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 : (root : Str) -> (perf,impf : Vowel) -> (masdar : Str) -> V ; -- Verb form I. Vowel is one of {va,vi,vu}. Unpredictable masdar given as an argument. + mkV : (root : Str) -> (perf,impf : Vowel) -> V ; -- Like above, but 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,masdar : Str) -> VerbForm -> V ; -- FormI…FormXI (no IX). XI is quadriliteral. For FormI, default vowels are va and vu, and dummy masdar is inserted. Forms II-XI have predictable masdar, so this constructor works fine. + mkV : (root : Str) -> VerbForm -> V ; -- Like above, but dummy masdar inserted for FormI verbs. No difference for FormII-FormXI, because they have predictable masdar. mkV : V -> (particle : Str) -> V -- V with a non-inflecting particle/phrasal verb } ; reflV : V -> V ; -- نَفْس in the proper case and with possessive suffix, e.g. نَفْسَكِ 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. + v1 : (root : 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. + v1 : (root : 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 - v3 : Str -> V ; -- Verb Form III : faa`ala + v3 : Str -> V ; -- Verb Form III: faa`ala - v4 : Str -> V ; -- Verb Form IV : 'af`ala + v4 : Str -> V ; -- Verb Form IV: 'af`ala - v5 : Str -> V ; -- Verb Form V : tafa``ala + v5 : Str -> V ; -- Verb Form V: tafa``ala - v6 : Str -> V ; -- Verb Form VI : tafaa`ala + v6 : Str -> V ; -- Verb Form VI: tafaa`ala - v7 : Str -> V ; -- Verb Form VII : infa`ala + v7 : Str -> V ; -- Verb Form VII: infa`ala - v8 : Str -> V ; -- Verb Form VIII ifta`ala + v8 : Str -> V ; -- Verb Form VIII: ifta`ala - v10 : Str -> V ; -- Verb Form X 'istaf`ala + v10 : Str -> V ; -- Verb Form X: 'istaf`ala + + v11 : Str -> V ; -- Verb Form XI (quadriliteral): fa`laba --3 Two-place verbs @@ -539,6 +542,17 @@ resource ParadigmsAra = open _ => v10sound fcl } } in lin V verb ; + v11 = + \rootStr -> + let fcl : Root3 = case rootStr of { + f@? + c@? + l@? + b@? => {f=f ; c=c+"ْ"+l ; l=b} ; + _ => Predef.error "v11: implement quadriliterals properly" + } ; + verb : Verb = case rootStr of { + _ => v11sound fcl -- TODO more cases? + } ; + in lin V verb ; + reflV v = lin V (ResAra.reflV v) ; mkFullN nsc gen spec = lin N @@ -816,18 +830,19 @@ smartPN : Str -> PN = \s -> case last s of { } ; formV : (root : Str) -> VerbForm -> V = \s,f -> case f of { - FormI => v1 s a u ; - FormII => v2 s ; - FormIII => v3 s ; - FormIV => v4 s ; - FormV => v5 s ; - FormVI => v6 s ; + FormI => v1 s a u ; + FormII => v2 s ; + FormIII => v3 s ; + FormIV => v4 s ; + FormV => v5 s ; + FormVI => v6 s ; FormVII => v7 s ; FormVIII => v8 s ; - FormX => v10 s + FormX => v10 s ; + FormXI => v11 s } ; param VerbForm = - FormI | FormII | FormIII | FormIV | FormV | FormVI | FormVII | FormVIII | FormX ; + FormI | FormII | FormIII | FormIV | FormV | FormVI | FormVII | FormVIII | FormX | FormXI ; } ; diff --git a/src/arabic/ResAra.gf b/src/arabic/ResAra.gf index b95b3c5a..611ea91f 100644 --- a/src/arabic/ResAra.gf +++ b/src/arabic/ResAra.gf @@ -41,7 +41,6 @@ resource ResAra = PatternsAra ** open Prelude, Predef, OrthoAra, ParamX in { Root2 : Type = Root ** {c : Str} ; Root3 : Type = Root2 ** {l : Str} ; --- AR 7/12/2009 changed this to avoid duplication of consonants mkRoot3 : Str -> Root3 = \fcl -> case fcl of { f@? + c@? + l => {f = f ; c = c ; l = l} ; _ => error ("mkRoot3: too short root" ++ fcl) @@ -237,13 +236,13 @@ oper }) } ; verb' : SoundForms -> Verb = \vforms -> - let katab = vforms ! 0 ; - kutib = vforms ! 1 ; - aktub = vforms ! 2 ; - uktab = vforms ! 3 ; - euktub = vforms ! 4 ; - maktUb = vforms ! 5 ; - katb = vforms ! 6 ; + let katab = vforms ! 0 ; -- VPerf Act + kutib = vforms ! 1 ; -- VPerf Pas + aktub = vforms ! 2 ; -- VImpf _ Act + uktab = vforms ! 3 ; -- VImpf _ Pas + euktub = vforms ! 4 ; -- VImp + maktUb = vforms ! 5 ; -- VPPart + katb = vforms ! 6 ; -- Masdar in verb katab kutib aktub uktab euktub maktUb katb ; --affixes of sound verbs @@ -1042,6 +1041,18 @@ v10geminate : Str -> Verb = \fcl -> n@(6|7) => "ُسْتَ" + vforms ! n -- ??? }) ; +v11sound : Root3 -> Verb = \fclb -> + let faclabat = mkStrong facalp fclb ; + faclib = mkStrong facil fclb ; + faclab = mkStrong facal fclb ; + vforms = table { + 2 => "ُ" + faclib ; -- VImpf Act + 3 => "ُ" + faclab ; -- VImpf Pas + 5 => "مُ" + faclab ; -- VPPart + n => v1soundForms fclb a i faclabat ! n + } ; + in verb' vforms ; + patV1Perf : Vowel => Pattern = table { a => facal ; --katab