From 51f6d6247c6131ca9c1eda59c0069a7ff85ee85b Mon Sep 17 00:00:00 2001 From: Inari Listenmaa Date: Fri, 30 Nov 2018 13:08:18 +0100 Subject: [PATCH 1/4] (Ara) Low-level hacks for overriding verb agreement and word order --- src/arabic/ResAra.gf | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/arabic/ResAra.gf b/src/arabic/ResAra.gf index 879d51523..f63e12a69 100644 --- a/src/arabic/ResAra.gf +++ b/src/arabic/ResAra.gf @@ -150,6 +150,16 @@ resource ResAra = PatternsAra ** open Prelude, Predef, OrthoAra, ParamX in { Verb2 : Type = Verb ** {c2 : Preposition} ; Verb3 : Type = Verb2 ** {c3 : Preposition} ; + -- Sometimes a verb is only used in one form (per3 masc sg); + -- ideally, one would use an impersonal syntactic construction, + -- less ideally, hardcode the verb to only contain forms of one person. + forcePerson : PerGenNum -> Verb -> Verb = \pgn,verb -> verb ** { + s = \\vf => case vf of { + VPerf v _ => verb.s ! VPerf v pgn ; + VImpf m v _ => verb.s ! VImpf m v pgn ; + _ => verb.s ! vf } + } ; + AP : Type = {s : Species => Gender => NTable } ; uttAP : AP -> (Gender => Str) ; uttAP ap = \\g => ap.s ! NoHum ! g ! Sg ! Def ! Nom ; ----IL @@ -1701,6 +1711,7 @@ patHollowImp : (_,_ :Str) -> Gender => Number => Str =\xaf,xAf -> Cl : Type = {s : Tense => Polarity => Order => Str} ; QCl : Type = {s : Tense => Polarity => QForm => Str} ; + -- To override the default order; forces all orders in a Cl to be the chosen order. forceOrder : Order -> Cl -> Cl = \o,cl -> {s = \\t,p,_ => cl.s ! t ! p ! o} ; From cb90184a9551dcc3d687c70e60c83b751830afd7 Mon Sep 17 00:00:00 2001 From: Inari Listenmaa Date: Fri, 30 Nov 2018 13:08:50 +0100 Subject: [PATCH 2/4] (Ara) SlashV2V: fix a bug about object placement --- src/arabic/VerbAra.gf | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/arabic/VerbAra.gf b/src/arabic/VerbAra.gf index ce5686ae2..ad7b178ca 100644 --- a/src/arabic/VerbAra.gf +++ b/src/arabic/VerbAra.gf @@ -12,7 +12,9 @@ concrete VerbAra of Verb = CatAra ** open Prelude, ResAra, ParamX in { vp ** { s = v2vVP.s ; agrObj = \\pgn => v2v.c3.s -- أَنْ - ++ vp.s ! pgn ! VPImpf Cnj ; -- this will agree with the object added by ComplSlash + ++ vp.s ! pgn ! VPImpf Cnj -- this will agree with the object added by ComplSlash + ++ vp.obj.s ; + obj = emptyObj ; isPred = False ; c2 = v2v.c2 ; -- preposition for the direct object sc = v2v.sc From fc0c5041071690899e90a90a37f244ff0fe2d8a3 Mon Sep 17 00:00:00 2001 From: Inari Listenmaa Date: Fri, 30 Nov 2018 14:12:28 +0100 Subject: [PATCH 3/4] (Ara) Add new constructor irregFemA --- src/arabic/ParadigmsAra.gf | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/arabic/ParadigmsAra.gf b/src/arabic/ParadigmsAra.gf index f13c1664d..9c4a22c50 100644 --- a/src/arabic/ParadigmsAra.gf +++ b/src/arabic/ParadigmsAra.gf @@ -145,6 +145,8 @@ resource ParadigmsAra = open degrA : (posit,compar,plur : Str) -> A ; + irregFemA : (masc : A) -> (fem : A) -> A ; -- adjective with irregular feminine. Takes two adjectives (masc. "regular" and fem. "regular") and puts them together. + --Takes a root string and a pattern string sndA : (root,patt : Str) -> Adj ; @@ -623,6 +625,8 @@ resource ParadigmsAra = open degrA : (posit,compar,plur : Str) -> A = \posit,compar,plur -> lin A {s = clr posit compar plur} ; + + sndA root pat = let raw = sndA' root pat in { s = \\af => @@ -643,6 +647,13 @@ resource ParadigmsAra = open } }; + irregFemA : (masc : A) -> (fem : A) -> A = \m,f -> m ** { + s = table { + APosit Masc n d c => m.s ! APosit Masc n d c ; + APosit Fem n d c => f.s ! APosit Masc n d c ; -- The fem. adjective is built as if the irregular fem. forms were Masc. This is on purpose. + x => m.s ! x } + } ; + nisbaA : Str -> Adj = \Haal -> let Haaliyy = Haal + "ِيّ" in { s = table { From 0475955567aeac07ae81fea7209fe5f1702369b7 Mon Sep 17 00:00:00 2001 From: Inari Listenmaa Date: Fri, 30 Nov 2018 15:23:49 +0100 Subject: [PATCH 4/4] (Ara) Add state parameter to regNP + small cleanup/move around code --- src/arabic/IdiomAra.gf | 2 +- src/arabic/ParadigmsAra.gf | 9 --------- src/arabic/ResAra.gf | 11 +++++++++++ src/arabic/StructuralAra.gf | 12 ++++++------ 4 files changed, 18 insertions(+), 16 deletions(-) diff --git a/src/arabic/IdiomAra.gf b/src/arabic/IdiomAra.gf index 7a18b1334..ca2ff4369 100644 --- a/src/arabic/IdiomAra.gf +++ b/src/arabic/IdiomAra.gf @@ -16,7 +16,7 @@ concrete IdiomAra of Idiom = CatAra ** open in predVP it vp ; -- : VP -> Cl ; -- one sleeps - GenericCl = predVP (regNP "المَرْء" Sg) ; + GenericCl = predVP (regNP "المَرْء" Sg Def) ; -- : NP -> RS -> Cl ; -- it is I who did it --CleftNP np rs = diff --git a/src/arabic/ParadigmsAra.gf b/src/arabic/ParadigmsAra.gf index 9c4a22c50..0c5030ef7 100644 --- a/src/arabic/ParadigmsAra.gf +++ b/src/arabic/ParadigmsAra.gf @@ -571,15 +571,6 @@ resource ParadigmsAra = open proDrop : NP -> NP = \np -> lin NP (ResAra.proDrop np) ; - -- e.g. al-jamii3, 2a7ad - regNP : Str -> Number -> NP = \word,n -> lin NP (emptyNP ** { - s = \\c => fixShd word (dec1sg ! Def ! c) - }); - - -- e.g. hadha, dhaalika - indeclNP : Str -> Number -> NP = \word,n -> lin NP (emptyNP ** { - s = \\c => word - }); mkQuant7 : (_,_,_,_,_,_,_ : Str) -> State -> Quant = \hava,havihi,havAn,havayn,hAtAn,hAtayn,hA'ulA,det -> lin Quant (baseQuant ** diff --git a/src/arabic/ResAra.gf b/src/arabic/ResAra.gf index f63e12a69..d51984839 100644 --- a/src/arabic/ResAra.gf +++ b/src/arabic/ResAra.gf @@ -1386,6 +1386,17 @@ patHollowImp : (_,_ :Str) -> Gender => Number => Str =\xaf,xAf -> agrNP : Agr -> NP = \agr -> emptyNP ** {a = agr} ; + -- e.g. al-jamii3, 2a7ad + regNP : Str -> Number -> State -> NP = \word,n,s -> + agrNP {pgn = Per3 Masc n ; isPron = False} ** { + s = \\c => fixShd word (dec1sg ! s ! c) ; + } ; + + -- e.g. hadha, dhaalika + indeclNP : Str -> Number -> NP = \word,n -> emptyNP ** { + s = \\c => word + } ; + i_Pron : NP = mkPron "أَنَا" "نِي" "ي" (Per1 Sing) ; we_Pron : NP = mkPron "نَحنُ" "نا" "نا" (Per1 Plur) ; diff --git a/src/arabic/StructuralAra.gf b/src/arabic/StructuralAra.gf index c6c8aaafc..ee7b31576 100644 --- a/src/arabic/StructuralAra.gf +++ b/src/arabic/StructuralAra.gf @@ -28,9 +28,9 @@ concrete StructuralAra of Structural = CatAra ** -- } ; during_Prep = mkPrep "خِلَالَ" ; -- either7or_DConj = sd2 "ِتهر" "ْر" ** {n = Sg} ; - everybody_NP = regNP "الجَمِيع" Pl ; + everybody_NP = regNP "الجَمِيع" Pl Def ; every_Det = mkDet "كُلّ" Sg Const ; - everything_NP = regNP "كُلّ" Sg ; + everything_NP = regNP "كُلّ" Sg Def ; -- everywhere_Adv = ss "ثريوهري" ; few_Det = mkDet "بَعض" Pl Const ; -- first_Ord = ss "فِرست" ; @@ -72,10 +72,10 @@ concrete StructuralAra of Structural = CatAra ** -- quite_Adv = ss "قُِتي" ; she_Pron = ResAra.she_Pron ; -- so_AdA = ss "سْ" ; - somebody_NP = regNP "أَحَد" Sg ; + somebody_NP = regNP "أَحَد" Sg Indef ; someSg_Det = mkDet "أَحَد" Sg Const ; somePl_Det = mkDet "بَعض" Pl Const ; - something_NP = regNP "شَيْء" Sg ; + something_NP = regNP "شَيْء" Sg Indef ; -- somewhere_Adv = ss "سْموهري" ; that_Quant = mkQuant3 "ذَلِكَ" "تِلكَ" "أُلٱِكَ" Def; that_Subj = mkSubj "أنَّ" ; @@ -85,13 +85,13 @@ concrete StructuralAra of Structural = CatAra ** -- there7from_Adv = ss ["فرْم تهري"] ; -- therefore_PConj = ss "تهرفْري" ; ----b these_NP = indeclNP "هَؤُلَاء" Pl ; - they_Pron = theyMasc_Pron ; + they_Pron = theyMasc_Pron ; this_Quant = mkQuant7 "هَذا" "هَذِهِ" "هَذَان" "هَذَيْن" "هَاتَان" "هَاتَيْن" "هَؤُلَاء" Def; ----b this_NP = indeclNP "هَذا" Sg ; ----b those_NP = indeclNP "هَؤُلَاءكَ" Pl ; through_Prep = mkPrep "عَبْرَ" ; -- too_AdA = ss "تّْ" ; - to_Prep = mkPrep "إِلى" ; + to_Prep = mkPrep "إِلَى" ; under_Prep = mkPrep "تَحْتَ" ; -- very_AdA = ss "ثري" ; want_VV = mkVV (mkV "رود" FormIV) ;