From b33d260377d55ce934b6c19db253a61fd929f47e Mon Sep 17 00:00:00 2001 From: Inari Listenmaa Date: Tue, 16 Oct 2018 17:46:28 +0200 Subject: [PATCH 01/16] (Ara) Add NP field to CN for apposition, to attach poss.suff. correctly --- src/arabic/CatAra.gf | 2 +- src/arabic/NounAra.gf | 14 ++++++-------- 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/src/arabic/CatAra.gf b/src/arabic/CatAra.gf index 2dbc2278a..ac01f54e3 100644 --- a/src/arabic/CatAra.gf +++ b/src/arabic/CatAra.gf @@ -47,7 +47,7 @@ concrete CatAra of Cat = CommonX - [Utt] ** open ResAra, Prelude, ParamX in { -- Noun - CN = ResAra.Noun ** {adj : NTable}; + CN = ResAra.Noun ** {adj : NTable ; np : Case => Str}; NP, Pron = ResAra.NP; --{s : Case => Str ; a : Agr } ; Num, Ord, diff --git a/src/arabic/NounAra.gf b/src/arabic/NounAra.gf index f383f1806..b7cc77d2f 100644 --- a/src/arabic/NounAra.gf +++ b/src/arabic/NounAra.gf @@ -169,7 +169,9 @@ lin -- isNum = False; isPron = False} ; UseN, - UseN2 = \n -> n ** {adj = \\_,_,_ => []}; + UseN2 = \n -> n ** { + adj = \\_,_,_ => []; + np = \\_ => []}; Use2N3 n3 = n3 ; Use3N3 n3 = n3 ** {c2 = n3.c3} ; @@ -179,16 +181,12 @@ lin ComplN3 n3 np = ComplN2 n3 np ** {c2 = n3.c3} ; - AdjCN ap cn = { - s = \\n,d,c => cn.s ! n ! d ! c; - adj = \\n,d,c => ap.s ! cn.h ! cn.g ! n ! (definite ! d) ! c ; - g = cn.g; - h = cn.h + AdjCN ap cn = cn ** { + adj = \\n,d,c => ap.s ! cn.h ! cn.g ! n ! (definite ! d) ! c }; -- RelCN cn rs = {s = \\n,c => cn.s ! n ! c ++ rs.s ! {n = n ; p = P3}} ; -- AdvCN cn ad = {s = \\n,c => cn.s ! n ! c ++ ad.s} ; -- -- SentCN cn sc = {s = \\n,c => cn.s ! n ! c ++ sc.s} ; - ApposCN cn np = cn ** { - s = \\n,d,c => cn.s ! n ! d ! c ++ np.s ! c } ; + ApposCN cn np = cn ** { np = np.s } ; } From 5f39c419882e81e050e35b2327e7414948e9b798 Mon Sep 17 00:00:00 2001 From: Inari Listenmaa Date: Tue, 16 Oct 2018 17:47:14 +0200 Subject: [PATCH 02/16] (Ara) Fixes to a few fords --- src/arabic/LexiconAra.gf | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/arabic/LexiconAra.gf b/src/arabic/LexiconAra.gf index f8f2a5b2f..f6248048a 100644 --- a/src/arabic/LexiconAra.gf +++ b/src/arabic/LexiconAra.gf @@ -234,7 +234,7 @@ flags write_V2 = dirV2 (regV "يَكتُب") ; -- write_V2 = dirV2 (v1 "كتب" a u) ; yellow_A = clrA "صفر" ; - young_A = sndA "شبّ" "فاعّ" ; + young_A = sndA "شبب" "فاعّ" ; do_V2 = dirV2 (regV "يَفعَل") ; -- do_V2 = dirV2 (v1 "فعل" a a ) ; @@ -287,7 +287,7 @@ flags fingernail_N = brkN "ظفر" "فُعل" "أَفاعِل" Masc NoHum; fire_N = brkN "نور" "فاع" "فِيعان" Fem NoHum; flower_N = brkN "زهر" "فَعلة" "فُعُول" Fem NoHum; - fog_N = brkN "ضبّ" "فَعال" "فَعال" Masc NoHum; --no plural ? + fog_N = brkN "ضبب" "فَعال" "فَعال" Masc NoHum; --no plural ? foot_N = brkN "قدم" "فَعَل" "أَفعال" Fem NoHum; forest_N = sdfN "غيب" "فاعة" Fem NoHum; grass_N = brkN "عشب" "فُعلة" "أَفعال" Fem NoHum; @@ -305,7 +305,7 @@ flags liver_N = brkN "كبد" "فَعِل" "أَفعال" Masc NoHum ; louse_N = sdfN "قمل" "فَعلة" Fem NoHum; mouth_N = brkN "فوه" "فُعل" "أَفعال" Masc NoHum ; - name_N = brkN "؟سم" "فِعل" "فَعالِي" Masc NoHum; + name_N = brkN "ءسم" "فِعل" "فَعالِي" Masc NoHum; neck_N = brkN "رقب" "فَعَلة" "فِعال" Fem NoHum; night_N = brkN "ليل" "فَعلة" "فَعالِي" Fem NoHum; --plural? nose_N = brkN "؟نف" "فَعل" "فُعُول" Masc NoHum; From f5525dfbf090cd338c46160cebb82e7e2c621ce3 Mon Sep 17 00:00:00 2001 From: Inari Listenmaa Date: Tue, 16 Oct 2018 17:47:35 +0200 Subject: [PATCH 03/16] (Ara) Supporting possessive suffixes, WIP --- src/arabic/CatAra.gf | 5 +- src/arabic/MorphoAra.gf | 12 +--- src/arabic/NounAra.gf | 49 ++++++++------- src/arabic/ParadigmsAra.gf | 22 +++---- src/arabic/ResAra.gf | 122 +++++++++++++++++++++--------------- src/arabic/StructuralAra.gf | 1 + 6 files changed, 110 insertions(+), 101 deletions(-) diff --git a/src/arabic/CatAra.gf b/src/arabic/CatAra.gf index ac01f54e3..759e0fd5b 100644 --- a/src/arabic/CatAra.gf +++ b/src/arabic/CatAra.gf @@ -57,10 +57,7 @@ concrete CatAra of Cat = CommonX - [Utt] ** open ResAra, Prelude, ParamX in { Det = ResAra.Det ; -- {s : Species => Gender => Case => Str ; -- d : State; n : Size; isNum : Bool } ; - Quant = {s : ResAra.Number => Species => Gender => Case => Str; - d : State; - isNum : Bool; - isPron: Bool} ; + Quant = ResAra.Quant ; Art = {s : ResAra.Number => Species => Gender => Case => Str; d : State} ; diff --git a/src/arabic/MorphoAra.gf b/src/arabic/MorphoAra.gf index 2d9225c11..b55549b83 100644 --- a/src/arabic/MorphoAra.gf +++ b/src/arabic/MorphoAra.gf @@ -7,9 +7,10 @@ flags optimize = all ;--noexpand; mkDet : Str -> Number -> State -> Det = \word,num,state -> - { s = \\_,_,c => word + vowel ! c ; + { s = \\_,_,c => word + caseTbl ! c ; n = numberToSize num; d = state; --only Const is used now. check StructuralAra + is1sg = False; isNum = False; isPron = False }; @@ -18,7 +19,7 @@ flags optimize = all ;--noexpand; = \word,decl -> { s = \\c => case decl of { - True => word + vowel!c; + True => word + caseTbl!c; False => word }; isDecl = decl @@ -40,11 +41,4 @@ flags optimize = all ;--noexpand; isNum = True }; - vowel : Case => Str = - table { - Nom => "ُ"; - Acc => "َ"; - Gen => "ِ" - }; - } diff --git a/src/arabic/NounAra.gf b/src/arabic/NounAra.gf index b7cc77d2f..d02c0a3be 100644 --- a/src/arabic/NounAra.gf +++ b/src/arabic/NounAra.gf @@ -6,19 +6,27 @@ lin DetCN det cn = let { number = sizeToNumber det.n; + state = possState det.d; determiner : Case -> Str = \c -> det.s ! cn.h ! (detGender cn.g det.n) ! c; - noun : Case -> NTable -> Str = \c,nt -> nt ! - number ! (nounState det.d number) ! (nounCase c det.n det.d) + noun : Case -> NTable -> Str = \c,nt -> + let cas = if_then_else Case det.is1sg Bare c -- no case vowel with 1sg poss. suff. + in nt ! number + ! nounState det.d number + ! nounCase cas det.n det.d } in { s = \\c => case cnB4det det.isPron det.isNum det.n det.d of { - False => determiner c ++ noun c cn.s ++ noun c cn.adj ; - --FIXME use the adj -> cn -> cn rule from below instead of - --repeating code - True => cn.s ! number ! det.d ! c ++ det.s ! cn.h ! cn.g ! c - ++ cn.adj ! number ! det.d ! c - }; + False => determiner c + ++ noun c cn.s -- deal with poss. suffix + ++ cn.adj ! number ! state ! c -- normal case+state + ++ cn.np ! c ; + True => noun c cn.s -- deal with poss. suffix + -- ++ determiner c -- or this? + ++ det.s ! cn.h ! cn.g ! c + ++ cn.adj ! number ! state ! c -- normal case+state + ++ cn.np ! c + }; a = { pgn = agrP3 cn.h cn.g number; isPron = False } }; @@ -70,36 +78,33 @@ lin } ; -} - DetQuantOrd quant num ord = { + DetQuantOrd quant num ord = quant ** { s = \\h,g,c => quant.s ! Pl ! h ! g ! c ++ num.s ! g ! (toDef quant.d num.n) ! c --FIXME check this: ++ ord.s ! g ! (toDef quant.d num.n) ! c ; n = num.n; - d = quant.d; - isPron = quant.isPron; - isNum = case num.n of { - None => ord.isNum ; -- ord may come from OrdDigits or OrdNumeral - _ => True - } + isNum = orB num.isNum ord.isNum ; + -- ord may come from OrdDigits or OrdNumeral + -- num may come from NumCard : Card -> Num + } ; - DetQuant quant num = { + DetQuant quant num = quant ** { s = \\h,g,c => quant.s ! Pl ! h ! g ! c ++ num.s ! g ! (toDef quant.d num.n) ! c ; n = num.n; - d = quant.d; - isPron = quant.isPron; isNum = -- Num may come from NumCard : Card -> Num case num.n of { None => False; - _ => True + _ => num.isNum } } ; PossPron p = { s = \\_,_,_,_ => p.s ! Gen; - d = Const; + d = Poss; + is1sg = case p.a.pgn of { Per1 _ => True ; _ => False } ; isPron = True; isNum = False } ; @@ -152,13 +157,13 @@ lin DefArt = { s = \\_,_,_,_ => []; d = Def ; - isNum,isPron = False + isNum,isPron,is1sg = False } ; IndefArt = { s = \\_,_,_,_ => []; d = Indef ; - isNum,isPron = False + isNum,isPron,is1sg = False } ; MassNP cn = ---- AR diff --git a/src/arabic/ParadigmsAra.gf b/src/arabic/ParadigmsAra.gf index bd1e5da9e..1533bdef9 100644 --- a/src/arabic/ParadigmsAra.gf +++ b/src/arabic/ParadigmsAra.gf @@ -428,9 +428,9 @@ resource ParadigmsAra = open mkPron : (_,_,_ : Str) -> PerGenNum -> NP = \ana,nI,I,pgn -> { s = table { - Nom => ana; Acc => nI; - Gen => I + Gen => I; + _ => ana }; a = {pgn = pgn; isPron = True }; lock_NP = <> @@ -451,7 +451,7 @@ resource ParadigmsAra = open }; mkQuant7 : (_,_,_,_,_,_,_ : Str) -> State -> Quant = - \hava,havihi,havAn,havayn,hAtAn,hAtayn,hA'ulA,det -> + \hava,havihi,havAn,havayn,hAtAn,hAtayn,hA'ulA,det -> lin Quant (baseQuant ** { s = \\n,s,g,c => case of { <_,Masc,_,Sg> => hava; @@ -463,14 +463,11 @@ resource ParadigmsAra = open => hA'ulA; _ => havihi }; - d = Def; - isPron = False; - isNum = False; - lock_Quant = <> - }; + d = det + }); mkQuant3 : (_,_,_ : Str) -> State -> Quant = - \dalika,tilka,ula'ika,det -> + \dalika,tilka,ula'ika,det -> lin Quant (baseQuant ** { s = \\n,s,g,c => case of { <_,Masc,_,Sg> => dalika; @@ -478,11 +475,8 @@ resource ParadigmsAra = open => ula'ika; _ => tilka }; - d = det; - isPron = False; - isNum = False; - lock_Quant = <> - }; + d = det + }); degrA : (posit,compar,plur : Str) -> A = \posit,compar,plur -> lin A {s = clr posit compar plur} ; diff --git a/src/arabic/ResAra.gf b/src/arabic/ResAra.gf index 90222d049..3031f0062 100644 --- a/src/arabic/ResAra.gf +++ b/src/arabic/ResAra.gf @@ -17,10 +17,14 @@ resource ResAra = PatternsAra ** open Prelude, Predef, OrthoAra, ParamX in { Vowel = u | a | i ; Number = Sg | Dl | Pl; Gender = Masc | Fem ; - Case = Nom | Acc | Gen ; + Case = Nom | Acc | Gen + | Bare ; -- 1st person poss. suff. overrides case Person = P1 | P2 | P3 ; Species = NoHum | Hum ; - State = Def | Indef | Const ; + State = Def | Indef | Const + | Poss ; -- ة turns into ت + -- sound masculine plural drops ن + -- case vowel retained Mood = Ind | Cnj | Jus ; Voice = Act | Pas ; Tense = Pres | Past | Fut ; @@ -783,6 +787,14 @@ patHollowImp : (_,_ :Str) -> Gender => Number => Str =\xaf,xAf -> --Nominal Morphology + caseTbl : Case => Str = + table { + Bare => [] ; + Nom => "ُ"; + Acc => "َ"; + Gen => "ِ" + }; + --takes the adjective lemma and gives the Posit table positAdj : Str -> Gender => NTable = \kabIr -> @@ -848,20 +860,22 @@ patHollowImp : (_,_ :Str) -> Gender => Number => Str =\xaf,xAf -> \\s,c => defArt s (case word of { lemma + "ِي" => fixShd lemma (dec2sg ! s ! c) ; _ + ("ا"|"ى") => fixShd word (dec3sg ! s ! c) ; + lemma + "ة" => case s of { + Poss => lemma + "ت" + dec1sg ! s ! c ; + _ => word + dec1sg ! s ! c + } ; _ => fixShd word (dec1sg ! s ! c) }) ; -- takes a singular word and tests the ending to -- determine the declension and gives the corresponding dual inf table - dual : Str -> State => Case => Str = - \caSaA -> - case caSaA of { - lemma + ("ا"|"ى") => \\s,c => defArt s lemma + "ي" + dl ! s ! c ; - lemma + "ة" => - \\s,c => defArt s (lemma + "ت") + dl ! s ! c ; - _ => \\s,c => defArt s caSaA + dl ! s ! c - }; + dual : Str -> State => Case => Str = \caSaA -> + \\s,c => defArt s (case caSaA of { + lemma + ("ا"|"ى") => lemma + "ي" + dl ! s ! c ; + lemma + "ة" => lemma + "ت" + dl ! s ! c ; + _ => fixShd caSaA (dl ! s ! c) + }); -- takes a singular word and gives the corresponding sound --plural feminine table @@ -898,52 +912,39 @@ patHollowImp : (_,_ :Str) -> Gender => Number => Str =\xaf,xAf -> table { Indef => table { + Bare => []; Nom => "ٌ"; Acc => "ً"; Gen => "ٍ" }; - _ => - table { --think of ?axU, ?axA, (the five nouns) - Nom => "ُ"; - Acc => "َ"; - Gen => "ِ" - } + _ => caseTbl --think of ?axU, ?axA, (the five nouns) + }; --indeclinables (mamnuu3 mina S-Sarf) indecl : Case => Str = table { - Nom => "ُ"; - _ => "َ" + Gen => "َ" ; + x => caseTbl ! x }; - --declection 2 (ends in yaa') - dec2sg : State => Case => Str = - table { - Indef => - table { - Acc => "ِياً"; - _ => "ٍ" - }; - _ => - table { - Acc => "ِيَ"; - _ => "ِي" - } + --declension 2 (ends in yaa') + dec2sg : State => Case => Str = \\s,c => + case of { + <_, Bare> => [] ; + => "ِياً" ; + => "ٍ" ; + <_, Acc> => "ِيَ" ; + _ => "ِي" }; - --declention 3 (ending in alif) - dec3sg : State => Case => Str = - table { - Indef => - table { - _ => "ً" - }; - _ => - table { - _ => "" - } + --declension 3 (ending in alif) + dec3sg : State => Case => Str = \\s,c => + case of { + => [] ; + => "ً" ; + _ => [] }; @@ -957,12 +958,13 @@ patHollowImp : (_,_ :Str) -> Gender => Number => Str =\xaf,xAf -> }; _ => table { - Nom => "َانِ"; - _ => "َيْنِ" + Nom => "َانِ"; + Bare => "َيْن"; + _ => "َيْنِ" } }; - --sound mascualine plural suffixes + --sound masculine plural suffixes m_pl : State => Case => Str = table { Const => @@ -972,6 +974,7 @@ patHollowImp : (_,_ :Str) -> Gender => Number => Str =\xaf,xAf -> }; _ => table { + Bare => "ِين"; Nom => "ُونَ"; _ => "ِينَ" } @@ -982,11 +985,13 @@ patHollowImp : (_,_ :Str) -> Gender => Number => Str =\xaf,xAf -> table { Indef => table { + Bare => []; Nom => "ٌ"; _ => "ٍ" }; _ => table { + Bare => []; Nom => "ُ"; _ => "ِ" } @@ -1030,11 +1035,14 @@ patHollowImp : (_,_ :Str) -> Gender => Number => Str =\xaf,xAf -> case of { => Def; --kullu l-kutubi, bacDu l-kutubi => Indef; --kullu kitaabin - => Indef; --kitaabun - _ => Def --Lkitaabu + => Indef; --kitaabun + => Poss; + _ => Def --Lkitaabu }; - + possState : State -> State = \s -> + case s of { Poss => Def ; + x => x } ; --FIXME needs testing nounCase : Case -> Size -> State -> Case = \c,size,s -> @@ -1112,14 +1120,24 @@ patHollowImp : (_,_ :Str) -> Gender => Number => Str =\xaf,xAf -> oper - Det : Type = { - s : Species => Gender => Case => Str ; + BaseQuant : Type = { d : State; - n : Size; + is1sg : Bool; -- To force no case marker for 1st person poss. suff. isNum : Bool; -- for genitive pronouns (suffixes). if true, then "cn ++ det" --should be used instead of "det ++ cn" when constructing the NP - isPron : Bool + isPron: Bool} ; + + baseQuant = { d = Indef ; + is1sg,isNum,isPron = False } ; + + Quant : Type = BaseQuant ** { + s : ResAra.Number => Species => Gender => Case => Str + } ; + + Det : Type = BaseQuant ** { + s : Species => Gender => Case => Str ; + n : Size } ; Predet : Type = { diff --git a/src/arabic/StructuralAra.gf b/src/arabic/StructuralAra.gf index fb7ae0b12..5c49c6bf7 100644 --- a/src/arabic/StructuralAra.gf +++ b/src/arabic/StructuralAra.gf @@ -98,6 +98,7 @@ concrete StructuralAra of Structural = CatAra ** where_IAdv = ss "أَينَ" ; which_IQuant = { s = \\s,c => case of { + => "أيّ" ; => "أيٌّ" ; => "أيُّ" ; => "أيّاً" ; From 0b901669fd70684360483ddb6aee29cb68887da7 Mon Sep 17 00:00:00 2001 From: Inari Listenmaa Date: Wed, 17 Oct 2018 17:15:00 +0200 Subject: [PATCH 04/16] (Ara) change someSg_Det into singular --- src/arabic/StructuralAra.gf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/arabic/StructuralAra.gf b/src/arabic/StructuralAra.gf index 5c49c6bf7..8160f2eff 100644 --- a/src/arabic/StructuralAra.gf +++ b/src/arabic/StructuralAra.gf @@ -69,7 +69,7 @@ concrete StructuralAra of Structural = CatAra ** she_Pron = mkPron "هِيَ" "ها" "ها" (Per3 Fem Sg) ; -- so_AdA = ss "سْ" ; somebody_NP = regNP "أَحَد" Sg ; - someSg_Det = mkDet "أَحَد" Pl Const ; + someSg_Det = mkDet "أَحَد" Sg Const ; somePl_Det = mkDet "بَعض" Pl Const ; something_NP = regNP "شَيْء" Sg ; -- somewhere_Adv = ss "سْموهري" ; From 096beae214454467a198ba2d01b46b00bc386e71 Mon Sep 17 00:00:00 2001 From: Inari Listenmaa Date: Wed, 17 Oct 2018 17:15:39 +0200 Subject: [PATCH 05/16] (Ara) More cases in normalisation functions for diacritics --- src/arabic/OrthoAra.gf | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/src/arabic/OrthoAra.gf b/src/arabic/OrthoAra.gf index 3a24690cd..8e861e0cd 100644 --- a/src/arabic/OrthoAra.gf +++ b/src/arabic/OrthoAra.gf @@ -4,18 +4,16 @@ flags coding=utf8 ; oper - -- Definite article assimilation - vow : pattern Str = #("َ" | "ِ" | "ُ") ; - + vow : pattern Str = #("َ" | "ِ" | "ُ" | "ً" | "ٍ" | "ٌ") ; -- "Sun letters": assimilate with def. article sun : pattern Str = #("ت"|"ث"|"د"|"ذ"|"ر"|"ز"|"س"|"ش"|"ص"|"ض"|"ط"|"ظ"|"ل"|"ن") ; -- Shadda: https://www.unicode.org/L2/L2017/17253-arabic-ordering.pdf - fixShd : Str -> Str -> Str = \word,vowel -> - case word of { - x + "ّ" => x + vowel + "ّ" ; - x => x + vowel + fixShd : Str -> Str -> Str = \word,suffix -> + case of { + => x + v + "ّ" + y ; + _ => word + suffix } ; -- Hamza From 5489e1cd5121434361a4034a7623863dbaf98293 Mon Sep 17 00:00:00 2001 From: Inari Listenmaa Date: Wed, 17 Oct 2018 17:17:09 +0200 Subject: [PATCH 06/16] =?UTF-8?q?(Ara)=20Small=20fixes:=20hamza,=20order?= =?UTF-8?q?=20of=20diacritics=20and=20remove=20=D9=91=20=20from=20root?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/arabic/LexiconAra.gf | 225 +++++++++++++++++++-------------------- 1 file changed, 112 insertions(+), 113 deletions(-) diff --git a/src/arabic/LexiconAra.gf b/src/arabic/LexiconAra.gf index f6248048a..7d4e95071 100644 --- a/src/arabic/LexiconAra.gf +++ b/src/arabic/LexiconAra.gf @@ -11,16 +11,16 @@ flags lin - airplane_N = sdfN "ط؟ر" "فاعِلة" Fem NoHum ; + airplane_N = sdfN "طءر" "فاعِلة" Fem NoHum ; answer_V2S = dirV2 (v3 "جوب") ; apartment_N = brkN "شقّ" "فِعّة" "فِعَل" Fem NoHum ; apple_N = sdfN "تفح" "فِعّالة" Fem NoHum ; - art_N = brkN "فنّ" "فَعّ" "فُعُول" Masc NoHum ; - ask_V2Q = dirV2 (regV "يَس؟َل") ; --- ask_V2Q = dirV2 (v1 "س؟ل" a a) ; - baby_N = brkN "طفل" "فِعل" "أَفعال" Masc Hum; --- bad_A = sndA "سو؟" "فَيِّع" ; - bad_A = mkA "سَيِّئ" "سَيِّئَة" "سَيِّئِين" ; + art_N = brkN "فنن" "فَعّ" "فُعُول" Masc NoHum ; + ask_V2Q = dirV2 (regV "يَسءَل") ; +-- ask_V2Q = dirV2 (v1 "سءل" a a) ; + baby_N = brkN "طفل" "فِعل" "أَفعَال" Masc Hum; +-- bad_A = sndA "سوء" "فَيِّع" ; + bad_A = degrA "سَيِّئ" "سَيِّئَة" "سَيِّئِين" ; bank_N = brkN "بنك" "فَعل" "فُعُول" Masc NoHum ; beautiful_A = sndA "جمل" "فَعِيل" ; become_VA = mkVA (v4 "صبح") ; @@ -32,89 +32,90 @@ flags black_A = clrA "سود" ; blue_A = clrA "زرق" ; boat_N = brkN "قرب" "فاعِل" "فَواعِل" Masc NoHum ; - book_N = brkN "كتب" "فِعال" "فُعُل" Masc NoHum ; + book_N = brkN "كتب" "فِعَال" "فُعُل" Masc NoHum ; boot_N = sdfN "جزم" "فَعلة" Fem NoHum ; - boss_N = brkN "دور" "مُفِيع" "مُفَعاء" Masc Hum ; + boss_N = sdmN "دور" "مُفِيع" Masc Hum ; + --boss_N = brkN "دور" "مُفِيع" "مُفَعَاء" Masc Hum ; boy_N = brkN "صبي" "فَعِل" "فُعلان" Masc Hum ; - bread_N = brkN "خبز" "فُعل" "أَفعال" Masc NoHum ; + bread_N = brkN "خبز" "فُعل" "أَفعَال" Masc NoHum ; break_V2 = dirV2 (regV "يَكسُر") ; -- break_V2 = dirV2 (v1 "كسر" a u) ; broad_A = sndA "وسع" "فاعِل" ; - brother_N2 = mkN2 (brkN "؟خو" "فَع" "فِعلة" Masc Hum) ; --FIXME - brown_A = sndA "بني" "فُعِّل"; + brother_N2 = mkN2 (brkN "ءخو" "فَع" "فِعلة" Masc Hum) ; --FIXME dual + brown_A = sndA "بني" "فُعِّل"; butter_N = sdfN "سبد" "فُعلة" Fem NoHum ; buy_V2 = dirV2 (v8 "شري") ; camera_N = sdfN "كمر" "فاعِيلا" Fem NoHum ; -- |Alö taSwIr - cap_N = sdfN "قبع" "فُعَّلة" Fem NoHum ; --qalnUsö + cap_N = sdfN "قبع" "فُعَّلة" Fem NoHum ; --qalnUsö car_N = sdfN "سير" "فَعّالة" Fem NoHum ; carpet_N = sdfN "سجد" "فَعّالة" Fem NoHum ; - cat_N = brkN "هرّ" "فِعّة" "فِعَل" Fem NoHum ; + cat_N = brkN "هرّ" "فِعّ" "فِعَلَة" Fem NoHum ; ceiling_N = brkN "سقف" "فَعل" "أَفعُل" Masc NoHum ; - chair_N = brkN "كرس" "فُعلِي" "فَعالِي" Masc NoHum ; - cheese_N = brkN "جبن" "فُعلة" "أَفعال" Fem NoHum ; - child_N = brkN "ولد" "فَعَل" "أَفعال" Masc Hum ; - church_N = brkN "كنس" "فَعِيلة" "فَعاٱِل" Fem Hum ; + chair_N = brkN "كرس" "فُعلِي" "فَعَالِي" Masc NoHum ; + cheese_N = brkN "جبن" "فُعلة" "أَفعَال" Fem NoHum ; + child_N = brkN "ولد" "فَعَل" "أَفعَال" Masc Hum ; + church_N = brkN "كنس" "فَعِيلة" "فَعَاٱِل" Fem Hum ; city_N = brkN "مدن" "فَعِيلة" "فُعُل" Fem NoHum ; clean_A = sndA "نظف" "فَعِيل" ; clever_A = sndA "جهد" "مُفتَعِل" ; close_V2 = dirV2 (v4 "غلق") ; coat_N = brkN "عطف" "مِفعَل" "مَفاعِل" Masc NoHum ; cold_A = sndA "برد" "فاعِل" ; - come_V = v1 "جي؟" a i ; --check + come_V = v1 "جيء" a i ; --check computer_N = brkN "حسب" "فاعُول" "فَواعِيل" Masc NoHum ; - country_N = brkN "بلد" "فَعَل" "فِعال" Masc NoHum ; + country_N = brkN "بلد" "فَعَل" "فِعَال" Masc NoHum ; cousin_N = brkN "قرب" "فَعِيل" "أَفعِلاء" Masc Hum ; -- (aDAc love_N = brkN "حبّ" "فُعّ" "فُعّ" Masc NoHum ; -- no plur love_V2 = dirV2 (v1 "حبّ" a i) ; - man_N = brkN "رجل" "فَعُل" "فِعال" Masc Hum ; - married_A2 = mkA2 (sndA "زوج" "مُتَفَعِّل") "مِن" ; + man_N = brkN "رجل" "فَعُل" "فِعَال" Masc Hum ; + married_A2 = mkA2 (sndA "زوج" "مُتَفَعِّل") "مِن" ; meat_N = brkN "لحم" "فَعلة" "فُعُول" Masc NoHum ; milk_N = brkN "حلب" "فَعِيل" "فَعِيل" Masc NoHum ; --no plur - moon_N = brkN "قمر" "فَعَل" "أَفعال" Masc NoHum ; - mother_N2 = mkN2 (sdfN "؟م" "فُعّ" Fem Hum) ; - mountain_N = brkN "جبل" "فَعَل" "فِعال" Masc NoHum ; + moon_N = brkN "قمر" "فَعَل" "أَفعَال" Masc NoHum ; + mother_N2 = mkN2 (sdfN "ءم" "فُعَّ" Fem Hum) ; + mountain_N = brkN "جبل" "فَعَل" "فِعَال" Masc NoHum ; music_N = mkN (reg "مُوسِيقَى" "مُوسِيقَى") Fem NoHum ; --no plur - narrow_A = sndA "ضيق" "فَعِّل" ; - new_A = sndA "جدّ" "فَعِيل" ; + narrow_A = sndA "ضيق" "فَعِّل" ; + new_A = mkA "جدد" "فَعِيل" "فُعُل" ; newspaper_N = brkN "صحف" "فَعِيلة" "فُعُل" Fem NoHum ; oil_N = brkN "زيت" "فَعل" "فُعُول" Masc NoHum ; old_A = sndA "قدم" "فَعِيل" ; @@ -145,30 +146,30 @@ flags -- open_V2 = dirV2 (v1 "فتح" a a ) ; paint_V2A = mkV2A (regV "يَدهَن" ) [] ; -- paint_V2A = mkV2A (v1 "دهن" a a ) [] ; - paper_N = brkN "ورق" "فَعَلة" "أَفعال" Fem NoHum ; + paper_N = brkN "ورق" "فَعَلة" "أَفعَال" Fem NoHum ; paris_PN = mkPN "بارِيس" Fem NoHum ; - peace_N = brkN "سلم" "فَعال" "فَعال" Masc NoHum; --no plur - pen_N = brkN "قلم" "فَعَل" "أَفعال" Masc NoHum; + peace_N = brkN "سلم" "فَعَال" "فَعَال" Masc NoHum; --no plur + pen_N = brkN "قلم" "فَعَل" "أَفعَال" Masc NoHum; planet_N = mkN (reg "كَوكَب" "كَواكِب") Masc NoHum ; -- quadriconsonantal plastic_N = mkN (sndf "بلاستِيك") Masc NoHum ; play_V2 = dirV2 (regV "لَعِب") ; -- play_V2 = dirV2 (v1 "لعب" i a) ; policeman_N = sdmN "شرط" "فِعلِي" Masc Hum ; - priest_N = brkN "قسّ" "فِعِّيل" "أَفِعّة" Masc Hum ; + priest_N = brkN "قسّ" "فِعِّيل" "أَفِعّة" Masc Hum ; probable_AS = mkAS (sndA "مكن" "مُفعِل") ; queen_N = sdfN "ملك" "فَعِلة" Fem Hum ; radio_N = mkN (sndf "راديُو") Masc NoHum ; rain_V0 = mkV0 (regV "يَمطُر") ; -- rain_V0 = mkV0 (v1 "مطر" a u) ; - read_V2 = dirV2 (regV "يَقرَ؟") ; --- read_V2 = dirV2 (v1 "قر؟" a a ) ; + read_V2 = dirV2 (regV "يَقرَء") ; +-- read_V2 = dirV2 (v1 "قرء" a a ) ; red_A = clrA "حمر" ; - religion_N = brkN "دين" "فِعل" "أَفعال" Masc NoHum ; + religion_N = brkN "دين" "فِعل" "أَفعَال" Masc NoHum ; restaurant_N = brkN "طعم" "مَفعَل" "مَفاعِل" Masc NoHum ; - river_N = brkN "نهر" "فَعل" "أَفعال" Masc NoHum ; + river_N = brkN "نهر" "فَعل" "أَفعَال" Masc NoHum ; rock_N = brkN "صخر" "فَعلة" "فُعُول" Fem NoHum ; roof_N = brkN "سطح" "فَعل" "أَفعُل" Masc NoHum ; - rubber_N = brkN "مطّ" "فَعّال" "فَعّال" Masc NoHum ; -- no hum + rubber_N = brkN "مطط" "فَعَّال" "فَعَّال" Masc NoHum ; -- no hum run_V = regV "يَركُض" ; -- run_V = v1 "ركض" a u ; say_VS = mkVS (v1 "قول" a u) ; --check @@ -177,41 +178,41 @@ flags sea_N = brkN "بحر" "فَعل" "فُعُول" Masc NoHum ; seek_V2 = dirV2 (regV "يَطلُب") ; -- seek_V2 = dirV2 (v1 "طلب" a u) ; - see_V2 = dirV2 (v1 "ر؟ي" a a) ; + see_V2 = dirV2 (v1 "رءي" a a) ; sell_V3 = dirdirV3 (v1 "بيع" a i) ; --check send_V3 = dirdirV3 (v4 "رسل") ; - sheep_N = brkN "خرف" "فَعُول" "فِعال" Masc NoHum ; + sheep_N = brkN "خرف" "فَعُول" "فِعَال" Masc NoHum ; ship_N = brkN "سفن" "فَعِيلة" "فُعُل" Fem NoHum ; shirt_N = brkN "قمص" "فَعِيل" "فُعلان" Masc NoHum ; - shoe_N = brkN "حذو" "فِعاء" "أَفعِية" Masc NoHum ; + shoe_N = brkN "حذو" "فِعَاء" "أَفعِية" Masc NoHum ; shop_N = brkN "تجر" "مَفعَل" "مَفاعِل" Masc NoHum ; short_A = sndA "قصر" "فَعِيل" ; - silver_N = brkN "فضّ" "فِعّة" "فِعَل" Fem NoHum ; - sister_N = brkN "؟خو" "فُعت" "فَعَوات" Fem Hum ; --FIXME + silver_N = brkN "فضض" "فِعَّة" "فِعَل" Fem NoHum ; + sister_N = brkN "ءخو" "فُعت" "فَعَوَات" Fem Hum ; --FIXME sleep_V = v1 "نوم" i a ; --check small_A = sndA "صغر" "فَعِيل" ; - snake_N = sdfN "حيّ" "فَعّة" Fem NoHum ; + snake_N = sdfN "حيّ" "فَعَّة" Fem NoHum ; sock_N = brkN "جرب" "فَوعَل" "فَواعِل" Masc NoHum ; speak_V2 = dirV2 (v5 "كلم") ; star_N = brkN "نجم" "فَعل" "فُعُول" Masc NoHum ; --najmö - steel_N = brkN "فلذ" "فُوعال" "فَواعِل" Masc NoHum ; - stone_N = brkN "حجر" "فَعَل" "أَفعال" Masc NoHum ; + steel_N = brkN "فلذ" "فُوعَال" "فَواعِل" Masc NoHum ; + stone_N = brkN "حجر" "فَعَل" "أَفعَال" Masc NoHum ; stove_N = brkN "وقد" "مَفعِل" "مَفاعِل" Masc NoHum ; student_N = brkN "طلب" "فاعِل" "فُعّال" Masc Hum ; --tilmI* stupid_A = clrA "بله" ; sun_N = brkN "شمس" "فَعل" "فُعُول" Fem NoHum ; - switch8off_V2 = dirV2 (v4 "طف؟") ; + switch8off_V2 = dirV2 (v4 "طفء") ; switch8on_V2 = dirV2 (v4 "شعل") ; table_N = sdfN "طول" "فاعِلة" Fem NoHum ; talk_V3 = mkV3 (v5 "حدث") "لِ" "عَن" ; - teacher_N = sdmN "علم" "مُفَعِّل" Masc Hum ; --mucal~imö + teacher_N = sdmN "علم" "مُفَعِّل" Masc Hum ; --mucal~imö teach_V2 = dirV2 (v2 "علم") ; television_N = mkN (sndf "تِلِفِزيُون") Masc NoHum ; thick_A = sndA "سمك" "فَعِيل" ; thin_A = sndA "رفع" "فَعِيل" ; - train_N = sdfN "قطر" "فِعال" Masc NoHum; + train_N = sdfN "قطر" "فِعَال" Masc NoHum; travel_V = v3 "سفر" ; - tree_N = brkN "شجر" "فَعلة" "أَفعال" Fem NoHum ; + tree_N = brkN "شجر" "فَعلة" "أَفعَال" Fem NoHum ; ugly_A = sndA "قبح" "فَعِيل" ; understand_V2 = dirV2 (regV "فَهِم") ; -- understand_V2 = dirV2 (v1 "فهم" i a ) ; @@ -219,7 +220,7 @@ flags village_N = brkN "قري" "فَعلة" "فُعَى" Fem NoHum ; --Daycö wait_V2 = dirV2 (v8 "نظر") ; walk_V = v1 "مشي" a i ; --check - warm_A = sndA "دف؟" "فاعِل" ; + warm_A = sndA "دفء" "فاعِل" ; war_N = brkN "حرب" "فَعل" "فُعُول" Fem NoHum ; watch_V2 = dirV2 (v3 "شهد") ; water_N = mkN (reg "ماء" "مِياه") Fem NoHum ; --"موه" "فاء" "فِياع" ?? @@ -229,21 +230,21 @@ flags win_V2 = dirV2 (regV "رَبِح") ; -- win_V2 = dirV2 (v1 "ربح" i a) ; woman_N = mkN (reg "إِمرَأَة" "نِسوَة") Fem Hum ; - wonder_VQ = mkVQ (v6 "س؟ل") ; - wood_N = brkN "خشب" "فَعَل" "أَفعال" Masc NoHum ; + wonder_VQ = mkVQ (v6 "سءل") ; + wood_N = brkN "خشب" "فَعَل" "أَفعَال" Masc NoHum ; write_V2 = dirV2 (regV "يَكتُب") ; -- write_V2 = dirV2 (v1 "كتب" a u) ; yellow_A = clrA "صفر" ; - young_A = sndA "شبب" "فاعّ" ; + young_A = sndA "شبب" "فَاعّ" ; do_V2 = dirV2 (regV "يَفعَل") ; -- do_V2 = dirV2 (v1 "فعل" a a ) ; now_Adv = mkAdv "الآن" ; already_Adv = mkAdv "سابِقاً" ; - song_N = brkN "غني" "أَفعِلة" "أَفاعِي" Fem NoHum ; + song_N = brkN "غني" "أُفعِلَة" "أَفَاعِي" Fem NoHum ; add_V3 = dirV3 (regV "يَجمَع") "وَ" ; -- add_V3 = dirV3 (v1 "جمع" a a) "وَ" ; - number_N = brkN "رقم" "فَعل" "أَفعال" Masc NoHum ; --cadad + number_N = brkN "رقم" "فَعل" "أَفعَال" Masc NoHum ; --cadad put_V2 = dirV2 (v1 "وضع" a a ); stop_V = v5 "وقف" ; jump_V = regV "يَقفِز" ; @@ -253,14 +254,14 @@ flags right_Ord = mkOrd "أَيمَن" "يُمنَى" One; far_Adv = mkAdv "بَعِيداً" ; - correct_A = sndA "صحّ" "فَعِيل" ; + correct_A = sndA "صحّ" "فَعِيل" ; -- TODO broken plural dry_A = sndA "نشف" "فاعِل" ; dull_A = sndA "بهت" "فاعِل" ; - full_A = sndA "مل؟" "فَعِيل" ; + full_A = sndA "ملء" "فَعِيل" ; heavy_A = sndA "ثقل" "فَعِيل" ; near_A = sndA "قرب" "فَعِيل" ; rotten_A = sndA "فسد" "فاعِل" ; - round_A = sndA "دور" "مُفَعَّل" ; + round_A = sndA "دور" "مُفَعَّل" ; sharp_A = sndA "حدّ" "فاعّ" ; smooth_A = sndA "نعم" "فاعِل" ; straight_A = sndA "قوم" "مُستَفِيع" ; @@ -268,68 +269,68 @@ flags wide_A = sndA "وسع" "فاعِل" ; animal_N = sdfN "حيّ" "فَعَوان" Masc NoHum ; - ashes_N = brkN "رمد" "فَعال" "أَفعِلة" Masc NoHum; + ashes_N = brkN "رمد" "فَعَال" "أَفعِلة" Masc NoHum; back_N = brkN "ظهر" "فَعل" "فُعُول" Masc NoHum; - bark_N = brkN "نبح" "فَعل" "فُعال" Masc NoHum; + bark_N = brkN "نبح" "فَعل" "فُعَال" Masc NoHum; belly_N = brkN "بطن" "فَعل" "فُعُول" Fem NoHum; - blood_N = brkN "دم" "فَع" "فِعاء" Masc NoHum; - bone_N = brkN "عظم" "فَعلة" "فِعال" Fem NoHum; + blood_N = brkN "دم" "فَع" "فِعَاء" Masc NoHum; + bone_N = brkN "عظم" "فَعلة" "فِعَال" Fem NoHum; breast_N = brkN "صدر" "فَعل" "فُعُول" Masc NoHum; cloud_N = brkN "غيم" "فَعلة" "فُعُول" Fem NoHum; - day_N = brkN "يوم" "فَعل" "أَفّاع" Masc NoHum; - dust_N = brkN "غبر" "فُعال" "أَفعِلة" Masc NoHum; - ear_N = brkN "؟ذن" "فُعل" "أَفعال" Fem NoHum; + day_N = brkN "يوم" "فَعل" "أَفَّاع" Masc NoHum; + dust_N = brkN "غبر" "فُعَال" "أَفعِلة" Masc NoHum; + ear_N = brkN "ءذن" "فُعل" "أَفعَال" Fem NoHum; earth_N = brkN "ترب" "فُعلة" "فُعَل" Fem NoHum; egg_N = sdfN "بيض" "فَعلة" Fem NoHum; eye_N = brkN "عين" "فَعل" "فُعُول" Fem NoHum; fat_N = brkN "دهن" "فُعل" "فُعُول" Masc NoHum ; feather_N = sdfN "ريش" "فِعلة" Fem NoHum; fingernail_N = brkN "ظفر" "فُعل" "أَفاعِل" Masc NoHum; - fire_N = brkN "نور" "فاع" "فِيعان" Fem NoHum; + fire_N = brkN "نور" "فاع" "فِيعَان" Fem NoHum; flower_N = brkN "زهر" "فَعلة" "فُعُول" Fem NoHum; - fog_N = brkN "ضبب" "فَعال" "فَعال" Masc NoHum; --no plural ? - foot_N = brkN "قدم" "فَعَل" "أَفعال" Fem NoHum; + fog_N = brkN "ضبب" "فَعَال" "فَعَال" Masc NoHum; --no plural ? + foot_N = brkN "قدم" "فَعَل" "أَفعَال" Fem NoHum; forest_N = sdfN "غيب" "فاعة" Fem NoHum; - grass_N = brkN "عشب" "فُعلة" "أَفعال" Fem NoHum; - guts_N = brkN "حشو" "فَعا" "أَفعاء" Fem NoHum; + grass_N = brkN "عشب" "فُعلة" "أَفعَال" Fem NoHum; + guts_N = brkN "حشو" "فَعَا" "أَفعَاء" Fem NoHum; hair_N = sdfN "شعر" "فَعلة" Fem NoHum ; - hand_N = brkN "يد" "فَع" "أَفاعِي" Fem NoHum ; - head_N = brkN "ر؟س" "فَعل" "فُعُول" Masc NoHum; + hand_N = brkN "يد" "فَع" "أَفَاعِي" Fem NoHum ; + head_N = brkN "رءس" "فَعل" "فُعُول" Masc NoHum; heart_N = brkN "قلب" "فَعل" "فُعُول" Masc NoHum; horn_N = brkN "قرن" "فَعل" "فُعُول" Masc NoHum; - husband_N = brkN "زوج" "فَعل" "أَفعال" Masc NoHum; + husband_N = brkN "زوج" "فَعل" "أَفعَال" Masc NoHum; ice_N = brkN "ثلج" "فَعل" "فُعُول" Masc NoHum; knee_N = brkN "ركب" "فُعلة" "فُعَل" Fem NoHum; - leaf_N = brkN "ورق" "فَعَلة" "أَفعال" Fem NoHum; + leaf_N = brkN "ورق" "فَعَلة" "أَفعَال" Fem NoHum; leg_N = brkN "رجل" "فِعل" "أَفعُل" Fem NoHum; - liver_N = brkN "كبد" "فَعِل" "أَفعال" Masc NoHum ; + liver_N = brkN "كبد" "فَعِل" "أَفعَال" Masc NoHum ; louse_N = sdfN "قمل" "فَعلة" Fem NoHum; - mouth_N = brkN "فوه" "فُعل" "أَفعال" Masc NoHum ; - name_N = brkN "ءسم" "فِعل" "فَعالِي" Masc NoHum; - neck_N = brkN "رقب" "فَعَلة" "فِعال" Fem NoHum; - night_N = brkN "ليل" "فَعلة" "فَعالِي" Fem NoHum; --plural? - nose_N = brkN "؟نف" "فَعل" "فُعُول" Masc NoHum; - person_N = brkN "شخص" "فَعل" "أَفعال" Masc Hum; + mouth_N = brkN "فوه" "فُعل" "أَفعَال" Masc NoHum ; + name_N = brkN "ءسم" "فِعل" "فَعَالِي" Masc NoHum; + neck_N = brkN "رقب" "فَعَلة" "فِعَال" Fem NoHum; + night_N = brkN "ليل" "فَعلة" "فَعَالِي" Fem NoHum; --plural? + nose_N = brkN "ءنف" "فَعل" "فُعُول" Masc NoHum; + person_N = brkN "شخص" "فَعل" "أَفعَال" Masc Hum; question_N = mkN "سؤال" ; ----IL - rain_N = brkN "مطر" "فَعَل" "أَفعال" Masc NoHum; + rain_N = brkN "مطر" "فَعَل" "أَفعَال" Masc NoHum; road_N = brkN "طرق" "فَعِيل" "فُعُل" Fem NoHum; root_N = brkN "جذر" "فَعل" "فُعُول" Masc NoHum ; - rope_N = brkN "حبل" "فَعل" "فِعال" Masc NoHum; - salt_N = brkN "ملح" "فِعل" "أَفعال" Masc NoHum; - sand_N = brkN "رمل" "فَعل" "فِعال" Masc NoHum; + rope_N = brkN "حبل" "فَعل" "فِعَال" Masc NoHum; + salt_N = brkN "ملح" "فِعل" "أَفعَال" Masc NoHum; + sand_N = brkN "رمل" "فَعل" "فِعَال" Masc NoHum; seed_N = brkN "بذر" "فَعل" "فُعُول" Masc NoHum; skin_N = brkN "جلد" "فِعل" "فُعُول" Masc NoHum; - sky_N = sdfN "سمو" "فَعاء" Fem NoHum; - smoke_N = brkN "دخن" "فُعال" "أَفعِلة" Masc NoHum; + sky_N = sdfN "سمو" "فَعَاء" Fem NoHum; + smoke_N = brkN "دخن" "فُعَال" "أَفعِلة" Masc NoHum; snow_N = brkN "ثلج" "فَعل" "فُعُول" Masc NoHum; - stick_N = brkN "عصو" "فَعا" "فِعِي" Masc NoHum ; --"عصو" - tail_N = brkN "ذنب" "فَعَل" "أَفعال" Masc NoHum; - tongue_N = brkN "لسن" "فِعال" "أَفعِلة" Masc NoHum; - tooth_N = brkN "سنّ" "فِعل" "أَفعال" Masc NoHum ; + stick_N = brkN "عصو" "فَعَا" "فِعِي" Masc NoHum ; --"عصو" + tail_N = brkN "ذنب" "فَعَل" "أَفعَال" Masc NoHum; + tongue_N = brkN "لسن" "فِعَال" "أَفعِلة" Masc NoHum; + tooth_N = brkN "سنن" "فِعّ" "أَفعَال" Masc NoHum ; wife_N = sdfN "زوج" "فَعلة" Fem Hum; - wind_N = brkN "ريح" "فِعل" "فِعال" Fem NoHum; - wing_N = brkN "جنح" "فَعال" "أَفعِلة" Masc NoHum ; - worm_N = brkN "دود" "فُعلة" "فِيعان" Fem NoHum ; + wind_N = brkN "ريح" "فِعل" "فِعَال" Fem NoHum; + wing_N = brkN "جنح" "فَعَال" "أَفعِلة" Masc NoHum ; + worm_N = brkN "دود" "فُعلة" "فِيعَان" Fem NoHum ; year_N = mkN "سَنَة" "سَنَوَات" Fem NoHum ; blow_V = regV "يَنفُخ" ; @@ -355,7 +356,7 @@ flags swim_V = regV "يَسبَح" ; think_V = v2 "فكر" ; turn_V = regV "يَبرُم" ; - vomit_V = v5 "قي؟" ; + vomit_V = v5 "قيء" ; bite_V2 = dirV2 ( v1 "عضّ" a a ) ; count_V2 = dirV2 (v1 "عدّ" a u) ; @@ -378,7 +379,5 @@ flags tie_V2 = dirV2 (regV "يَربُط" ) ; wash_V2 = dirV2 ( regV "يَغسِل" ) ; wipe_V2 = dirV2 ( regV "يَمسَح" ) ; - -- other_A = sndA "ْتهر" ; - } ; From 069a02c441a2d9f8a326468ef2a4f59c409657f7 Mon Sep 17 00:00:00 2001 From: Inari Listenmaa Date: Wed, 17 Oct 2018 17:17:24 +0200 Subject: [PATCH 07/16] (Ara) WIP: noun compounds --- src/arabic/NounAra.gf | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/arabic/NounAra.gf b/src/arabic/NounAra.gf index d02c0a3be..0e7a0c2db 100644 --- a/src/arabic/NounAra.gf +++ b/src/arabic/NounAra.gf @@ -193,5 +193,15 @@ lin -- AdvCN cn ad = {s = \\n,c => cn.s ! n ! c ++ ad.s} ; -- -- SentCN cn sc = {s = \\n,c => cn.s ! n ! c ++ sc.s} ; - ApposCN cn np = cn ** { np = np.s } ; + ApposCN cn np = cn ** { np = \\c => cn.np ! c ++ np.s ! c } ; + + -- : CN -> NP -> CN ; -- house of Paris, house of mine + PossNP cn np = cn ** { + s = \\n,_d,c => cn.s ! n ! Const ! c ; + np = \\c => cn.np ! c ++ np.s ! Gen + }; + + + -- : CN -> NP -> CN ; -- glass of wine + --PartNP } From e05182963753e24726583112da6280a78a4cfd40 Mon Sep 17 00:00:00 2001 From: Inari Listenmaa Date: Wed, 17 Oct 2018 17:17:52 +0200 Subject: [PATCH 08/16] (Ara) Add paradigm for broken plural adjectives --- src/arabic/ParadigmsAra.gf | 50 ++++++++++++++++++++++++++------------ 1 file changed, 34 insertions(+), 16 deletions(-) diff --git a/src/arabic/ParadigmsAra.gf b/src/arabic/ParadigmsAra.gf index 1533bdef9..68db5d3da 100644 --- a/src/arabic/ParadigmsAra.gf +++ b/src/arabic/ParadigmsAra.gf @@ -107,19 +107,21 @@ resource ParadigmsAra = open mkA = overload { mkA : (root,patt : Str) -> A - = sndA ; + = \r,p -> lin A (sndA r p); mkA : (root : Str) -> A -- forms adjectives with positive form aFCal - = clrA ; - mkA : (posit,compar,plur : Str) -> A - = degrA ; + = \r -> lin A (clrA r); + mkA : (root,sg,pl : Str) -> A + = \r,s,p -> lin A (brkA r s p) ; + -- mkA : (posit,compar,plur : Str) -> A + -- = degrA ; } ; --Takes a root string and a pattern string - sndA : (root,patt : Str) -> A ; + sndA : (root,patt : Str) -> Adj ; --Takes a root string only - clrA : (root : Str) -> A ; -- forms adjectives of type aFCal + clrA : (root : Str) -> Adj ; -- forms adjectives of type aFCal --3 Two-place adjectives -- @@ -405,8 +407,14 @@ resource ParadigmsAra = open sdfN = \root,sg,gen,spec -> - let { kalima = mkWord sg root; - } in mkFullN (sndf kalima) gen spec; + let { kalimaStr = mkWord sg root; + kalimaRaw = sndf kalimaStr; + kalima : NTable = \\n,d,c => case root of { + _ + #hamza + _ + => rectifyHmz (kalimaRaw ! n ! d ! c); + _ => kalimaRaw ! n ! d ! c + }; + } in mkFullN kalima gen spec; sdmN = \root,sg,gen,spec -> @@ -478,6 +486,19 @@ resource ParadigmsAra = open d = det }); + brkA : (root,sg,pl : Str) -> Adj = \root,sg,pl -> + let jadId = mkWord sg root ; + jadIda = jadId + "َة" ; + judud = mkWord pl root ; + akbar = mkWord "أَفعَل" root ; + mascTbl = reg jadId judud ; + femTbl = reg jadIda judud ; + in { s = table { + APosit Masc n d c => mascTbl ! n ! d ! c ; + APosit Fem n d c => femTbl ! n ! d ! c ; + AComp d c => indeclN akbar ! d ! c } + } ; + degrA : (posit,compar,plur : Str) -> A = \posit,compar,plur -> lin A {s = clr posit compar plur} ; @@ -487,20 +508,18 @@ resource ParadigmsAra = open case root of { _ + #hamza + _ => rectifyHmz(raw.s ! af); _ => raw.s ! af - }; - lock_A = <> + } }; - sndA' : Str -> Str -> A = + sndA' : Str -> Str -> Adj = \root,pat -> let { kabIr = mkWord pat root; akbar = mkWord "أَفعَل" root } in { s = table { - APosit g n d c => (positAdj kabIr) ! g ! n ! d ! c ; - AComp d c => (indeclN akbar) ! d ! c - }; - lock_A = <> + APosit g n d c => positAdj kabIr ! g ! n ! d ! c ; + AComp d c => indeclN akbar ! d ! c + } }; clrA root = @@ -509,7 +528,6 @@ resource ParadigmsAra = open Humr = mkWord "فُعل" root } in { s = clr eaHmar HamrA' Humr; - lock_A = <> }; mkA2 a p = a ** {c2 = p ; lock_A2 = <>} ; From 6cd6ddd020045093e08a5eae96371fb1cb0451cd Mon Sep 17 00:00:00 2001 From: Inari Listenmaa Date: Wed, 17 Oct 2018 17:18:26 +0200 Subject: [PATCH 09/16] (Ara) Fixes in pattern matching root and pattern --- src/arabic/ResAra.gf | 47 ++++++++++++++++++++++---------------------- 1 file changed, 24 insertions(+), 23 deletions(-) diff --git a/src/arabic/ResAra.gf b/src/arabic/ResAra.gf index 3031f0062..bb2fbf0be 100644 --- a/src/arabic/ResAra.gf +++ b/src/arabic/ResAra.gf @@ -41,26 +41,19 @@ resource ResAra = PatternsAra ** open Prelude, Predef, OrthoAra, ParamX in { -- 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} + f@? + c@? + l => {f = f ; c = c ; l = l} ; + _ => error ("mkRoot3: too short root" ++ fcl) } ; -{- - mkRoot3 : Str -> Root3 = \fcl -> - let { cl = drop 2 fcl; --drop 1 fcl - l' = dp 2 fcl; --last fcl - c' = take 2 cl} in --take 1 cl - {f = take 2 fcl; c = c'; --take 1 fcl - l = case l' of { - "ّ" => c'; - _ => l' - } - }; --} --for roots with 2 consonants (works also for assimilated strs, like fc~, --because the function discards anything after the first two characters mkRoot2 : Str -> Root2 = \fcl -> - let { cl = drop 2 fcl} in --drop 1 fcl - {f = take 2 fcl; c = take 2 cl}; --take 1 + -- let { cl = drop 2 fcl} in --drop 1 fcl + -- {f = take 2 fcl; c = take 2 cl}; --take 1 + case fcl of { + f@? + c@? + _ => { f = f ; c = c } ; + _ => error ("mkRoot2: too short root" ++ fcl) + }; --opers to interdigitize (make words out of roots and patterns: @@ -93,15 +86,23 @@ resource ResAra = PatternsAra ** open Prelude, Predef, OrthoAra, ParamX in { --takes a pattern string and root string and makes a word mkWord : Str -> Str -> Str =\pS, rS -> case pS of { - w@_ + "ف" + x@_ + "ع" + y@_ + "ل" + z@_ => - mkStrong { h = w ; m1 = x; m2 = y; t = z} (mkRoot3 rS); - w@_ + "ف" + x@_ + "ع" + y@_ => + w + "ف" + x + "ع" + y + "ل" + z => + let pat = { h = w ; m1 = x; m2 = y; t = z} in + case rS of { + x@? + y@? + "ّ" => mkStrong pat (mkRoot3 (x+y+y)) ; -- In principle, shadda shouldn't be in the root, but if someone puts one, this should fix it. /IL + _ => mkStrong pat (mkRoot3 rS) } ; + w + "ف" + x + "ع" + y => let pat = { h = w ; m1 = x; m2 = ""; t = y} in - case of { --- 6 | 5 => mkWeak pat (mkRoot3 rS) ; --3=> - 6 | 5 => mkHollow pat (mkRoot3 rS) ; --3=> - 4 | 3 => mkBilit pat (mkRoot2 rS) ; --2=> - _ => rS ---- AR error "expected 3--6" + case rS of { + x + "ّ" => mkBilit pat (mkRoot2 x) ; -- fc~ + x@? + y@? + ("و"|"ي") + => mkDefective pat (mkRoot3 rS) ; + x@? + ("و"|"ي") + z@? + => mkHollow pat (mkRoot3 rS) ; + ("و"|"ي") + y@? + z@? + => mkAssimilated pat (mkRoot3 rS) ; + ? + ? + _ => mkBilit pat (mkRoot2 rS) ; --2=> + _=> error rS ---- AR error "expected 3--6" } }; From 214214657742fae137894d6a534c61796c7de9c2 Mon Sep 17 00:00:00 2001 From: Inari Listenmaa Date: Thu, 18 Oct 2018 14:45:27 +0200 Subject: [PATCH 10/16] (Ara) Add CN's new np field in more functions --- src/arabic/NounAra.gf | 2 +- src/arabic/VerbAra.gf | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/arabic/NounAra.gf b/src/arabic/NounAra.gf index 0e7a0c2db..a35572820 100644 --- a/src/arabic/NounAra.gf +++ b/src/arabic/NounAra.gf @@ -167,7 +167,7 @@ lin } ; MassNP cn = ---- AR - {s = \\c => cn.s ! Sg ! Indef ! c ++ cn.adj ! Sg ! Indef ! c ; + {s = \\c => cn.s ! Sg ! Indef ! c ++ cn.np ! c ++ cn.adj ! Sg ! Indef ! c ; a = {pgn = Per3 cn.g Sg ; isPron = False}} ; -- MassDet = {s = \\_,_,_,_ => [] ; d = Indef; diff --git a/src/arabic/VerbAra.gf b/src/arabic/VerbAra.gf index ea33158c3..23878f9b6 100644 --- a/src/arabic/VerbAra.gf +++ b/src/arabic/VerbAra.gf @@ -43,7 +43,7 @@ concrete VerbAra of Verb = CatAra ** open Prelude, ResAra in { -- -- UseVS, UseVQ = \vv -> {s = vv.s ; c2 = [] ; isRefl = vv.isRefl} ; -- no - CompCN cn = {s = \\agr,c => cn.s ! agr.n ! Indef ! c} ; ----IL + CompCN cn = {s = \\agr,c => cn.s ! agr.n ! Indef ! c ++ cn.np ! c ++ cn.adj ! agr.n ! Indef ! c} ; ----IL CompAP ap = {s = \\agr,c => ap.s ! Hum ! agr.g ! agr.n ! Indef ! c} ; --FIXME CompNP np = {s = \\_,c => np.s ! c}; CompAdv a = {s = \\_,_ => a.s} ; From 08ff8ee3e5bec0cf79aa3ae647fa347d0ecf5065 Mon Sep 17 00:00:00 2001 From: Inari Listenmaa Date: Thu, 18 Oct 2018 14:45:50 +0200 Subject: [PATCH 11/16] (Ara) Small orthography fixes --- src/arabic/OrthoAra.gf | 5 ++++- src/arabic/ParadigmsAra.gf | 7 +++---- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/arabic/OrthoAra.gf b/src/arabic/OrthoAra.gf index 8e861e0cd..a7dc5d664 100644 --- a/src/arabic/OrthoAra.gf +++ b/src/arabic/OrthoAra.gf @@ -21,8 +21,11 @@ flags coding=utf8 ; rectifyHmz: Str -> Str = \word -> case word of { + l@(""|"ال") + ("أ"|"أَ") + #hamza + "ْ" + tail => l + "آ" + tail; + l@(""|"ال") + ("أ"|"أَ") + #hamza + tail => l + "آ" + tail; l@(""|"ال") + #hamza + v@("َ"|"ُ") + tail => l + "أ" + v + tail; - l@(""|"ال") + #hamza + v@("ِ") + tail => l + "إ" + v + tail; + l@(""|"ال") + #hamza + v@("ِ") + tail => l + "إ" + v + tail; + head + v1@("ِ"|"ُ"|"َ"|"ْ"|"ا"|"ي"|"و") + #hamza + v2@(""|"ُ"|"َ"|"ْ"|"ِ") => head + v1 + (tHmz v1) + v2; head + #hamza + tail => head + (bHmz (dp 2 head) (take 2 tail)) + tail; --last head , take 1 tail _ => word diff --git a/src/arabic/ParadigmsAra.gf b/src/arabic/ParadigmsAra.gf index 68db5d3da..f84fc7add 100644 --- a/src/arabic/ParadigmsAra.gf +++ b/src/arabic/ParadigmsAra.gf @@ -286,10 +286,9 @@ resource ParadigmsAra = open v1' : Str -> Vowel -> Vowel -> Verb = \rootStr,vPerf,vImpf -> - let { root = mkRoot3 rootStr ; - l = dp 2 rootStr } in --last rootStr - case of { - <"ّ",_> => v1geminate rootStr vPerf vImpf ; + let { root = mkRoot3 rootStr } in + case of { + <"ّ", _> => v1geminate rootStr vPerf vImpf ; <"و"|"ي",_> => case vPerf of { i => v1defective_i root vImpf ; _ => v1defective_a root vImpf } ; From 85e4a8061fcfbdcaebb788dd9a7bfecc9520fa80 Mon Sep 17 00:00:00 2001 From: Inari Listenmaa Date: Thu, 18 Oct 2018 15:08:54 +0200 Subject: [PATCH 12/16] (Ara) Fix agreement in imperatives --- src/arabic/ResAra.gf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/arabic/ResAra.gf b/src/arabic/ResAra.gf index bb2fbf0be..39768e9e8 100644 --- a/src/arabic/ResAra.gf +++ b/src/arabic/ResAra.gf @@ -1202,7 +1202,7 @@ patHollowImp : (_,_ :Str) -> Gender => Number => Str =\xaf,xAf -> case vf of { VPPerf => v.s ! (VPerf Act pgn); VPImpf m => v.s ! (VImpf m Act pgn); - VPImp => v.s ! (VImp Masc Sg)--gn.g gn.n) + VPImp => v.s ! (VImp gn.g gn.n) }; obj = { s = [] ; From 4b2c706bcdbf119d5fb9d930207f8c6a537489be Mon Sep 17 00:00:00 2001 From: Inari Listenmaa Date: Fri, 19 Oct 2018 17:25:25 +0200 Subject: [PATCH 13/16] (Ara) Add linref for CN + choose bare form for UttCN, no case --- src/arabic/CatAra.gf | 6 +++++- src/arabic/PhraseAra.gf | 2 +- src/arabic/ResAra.gf | 16 ++++++++++------ 3 files changed, 16 insertions(+), 8 deletions(-) diff --git a/src/arabic/CatAra.gf b/src/arabic/CatAra.gf index 759e0fd5b..3a1ee2584 100644 --- a/src/arabic/CatAra.gf +++ b/src/arabic/CatAra.gf @@ -47,7 +47,7 @@ concrete CatAra of Cat = CommonX - [Utt] ** open ResAra, Prelude, ParamX in { -- Noun - CN = ResAra.Noun ** {adj : NTable ; np : Case => Str}; + CN = ResAra.CN; NP, Pron = ResAra.NP; --{s : Case => Str ; a : Agr } ; Num, Ord, @@ -90,4 +90,8 @@ concrete CatAra of Cat = CommonX - [Utt] ** open ResAra, Prelude, ParamX in { N3 = ResAra.Noun ** {c2, c3 : Str} ; PN = {s : Case => Str; g : Gender; h : Species} ; +linref + + CN = \cn -> uttCN cn ! Masc ; + } diff --git a/src/arabic/PhraseAra.gf b/src/arabic/PhraseAra.gf index 0bc3931cb..9d24e6898 100644 --- a/src/arabic/PhraseAra.gf +++ b/src/arabic/PhraseAra.gf @@ -15,7 +15,7 @@ concrete PhraseAra of Phrase = CatAra ** open UttAP ap = {s = ResAra.uttAP ap} ; --IL UttCard c = {s = ResAra.uttNum c} ; --IL - UttCN cn = {s = \\_ => cn.s ! Sg ! Def ! Nom} ; --IL + UttCN cn = {s = ResAra.uttCN cn } ; --IL UttNP np = {s = \\_ => np.s ! Nom} ; UttVP vp = {s = \\g => (compVP vp).s ! {g=g ; n=Sg} ! Nom} ; --IL UttS, diff --git a/src/arabic/ResAra.gf b/src/arabic/ResAra.gf index 39768e9e8..bf9a37941 100644 --- a/src/arabic/ResAra.gf +++ b/src/arabic/ResAra.gf @@ -17,7 +17,7 @@ resource ResAra = PatternsAra ** open Prelude, Predef, OrthoAra, ParamX in { Vowel = u | a | i ; Number = Sg | Dl | Pl; Gender = Masc | Fem ; - Case = Nom | Acc | Gen + Case = Nom | Acc | Gen | Bare ; -- 1st person poss. suff. overrides case Person = P1 | P2 | P3 ; Species = NoHum | Hum ; @@ -99,7 +99,7 @@ resource ResAra = PatternsAra ** open Prelude, Predef, OrthoAra, ParamX in { => mkDefective pat (mkRoot3 rS) ; x@? + ("و"|"ي") + z@? => mkHollow pat (mkRoot3 rS) ; - ("و"|"ي") + y@? + z@? + ("و"|"ي") + y@? + z@? => mkAssimilated pat (mkRoot3 rS) ; ? + ? + _ => mkBilit pat (mkRoot2 rS) ; --2=> _=> error rS ---- AR error "expected 3--6" @@ -119,6 +119,10 @@ resource ResAra = PatternsAra ** open Prelude, Predef, OrthoAra, ParamX in { uttAP : AP -> (Gender => Str) ; uttAP ap = \\g => ap.s ! NoHum ! g ! Sg ! Def ! Nom ; ----IL + CN : Type = Noun ** {adj : NTable ; np : Case => Str}; + uttCN : CN -> (Gender => Str) ; + uttCN cn = \\_ => cn.s ! Sg ! Indef ! Bare ; + NumOrdCard : Type = { s : Gender => State => Case => Str ; n : Size ; @@ -861,11 +865,11 @@ patHollowImp : (_,_ :Str) -> Gender => Number => Str =\xaf,xAf -> \\s,c => defArt s (case word of { lemma + "ِي" => fixShd lemma (dec2sg ! s ! c) ; _ + ("ا"|"ى") => fixShd word (dec3sg ! s ! c) ; - lemma + "ة" => case s of { + lemma + "ة" => case s of { Poss => lemma + "ت" + dec1sg ! s ! c ; _ => word + dec1sg ! s ! c } ; - _ => fixShd word (dec1sg ! s ! c) + _ => fixShd word (dec1sg ! s ! c) }) ; @@ -960,7 +964,7 @@ patHollowImp : (_,_ :Str) -> Gender => Number => Str =\xaf,xAf -> _ => table { Nom => "َانِ"; - Bare => "َيْن"; + Bare => "َيْن"; _ => "َيْنِ" } }; @@ -975,7 +979,7 @@ patHollowImp : (_,_ :Str) -> Gender => Number => Str =\xaf,xAf -> }; _ => table { - Bare => "ِين"; + Bare => "ِين"; Nom => "ُونَ"; _ => "ِينَ" } From 2d5655aa506eb48d9d92f021e70cdf535b4e1e78 Mon Sep 17 00:00:00 2001 From: bruno cuconato Date: Sun, 21 Oct 2018 17:42:05 +0000 Subject: [PATCH 14/16] (Por) Extend: add lins (#49) - add PastPartAP, PastPartAgentAP - add PassVPSlash, PassAgentVPSlash lins from ExtraRomance - correct CompoundN --- src/portuguese/ExtendPor.gf | 45 +++++++++++++++++++---------- src/portuguese/MakeStructuralPor.gf | 3 +- 2 files changed, 30 insertions(+), 18 deletions(-) diff --git a/src/portuguese/ExtendPor.gf b/src/portuguese/ExtendPor.gf index 6719ca65d..3ee18db8f 100644 --- a/src/portuguese/ExtendPor.gf +++ b/src/portuguese/ExtendPor.gf @@ -18,7 +18,9 @@ concrete ExtendPor of Extend = iFem_Pron, ListVPS, PassVPSlash, - PassVPSlash, + PassAgentVPSlash, + PastPartAP, + PastPartAgentAP, ProDrop, theyFem_Pron, VPS, @@ -94,31 +96,42 @@ concrete ExtendPor of Extend = PrepCN prep cn = {s = prep.s ++ prepCase prep.c ++ cn.s ! Sg} ; lin - PassVPSlash vps = - let auxvp = predV copula - in - insertComplement (\\a => let agr = complAgr a in vps.s.s ! VPart agr.g agr.n) { - s = auxvp.s ; - agr = auxvp.agr ; - neg = vps.neg ; - clit1 = vps.clit1 ; - clit2 = vps.clit2 ; - clit3 = vps.clit3 ; - isNeg = vps.isNeg ; - comp = vps.comp ; - ext = vps.ext + PastPartAP vps = pastPartAP vps [] ; + + PastPartAgentAP vps np = pastPartAP vps (let by = in by.s ++ (np.s ! by.c).ton) ; + + oper + pastPartAP : VPSlash -> Str -> AP ; + pastPartAP vps agent = lin AP { + s = \\af => vps.comp ! (aform2aagr af ** {p = P3}) ++ vps.s.s ! VPart (aform2gender af) (aform2number af) ++ agent ; + isPre = False } ; + lin + PassVPSlash vps = passVPSlash vps [] ; + + PassAgentVPSlash vps np = passVPSlash vps (let by = in by.s ++ (np.s ! by.c).ton) ; + ExistsNP np = mkClause [] True False np.a (insertComplement (\\_ => (np.s ! Nom).ton) (predV (mkV "existir"))) ; + oper + passVPSlash : VPSlash -> Str -> VP = \vps, agent -> + let auxvp = predV auxPassive + in + vps ** { + s = auxvp.s ; + agr = auxvp.agr ; + comp = \\a => vps.comp ! a ++ (let agr = complAgr a in vps.s.s ! VPart agr.g agr.n) ++ agent ; + } ; + lin CompoundN noun noun2 = { -- order is different because that's needed for correct translation from english s = \\n => noun2.s ! n - ++ variants {genNumForms "do" "da" "dos" "das" ! noun.g ! n; "de"} - ++ noun.s ! n ; + ++ variants {"de" ; genForms "do" "da" ! noun.g} + ++ noun.s ! Sg ; g = noun2.g } ; diff --git a/src/portuguese/MakeStructuralPor.gf b/src/portuguese/MakeStructuralPor.gf index d7f714587..87ab6dc31 100644 --- a/src/portuguese/MakeStructuralPor.gf +++ b/src/portuguese/MakeStructuralPor.gf @@ -19,5 +19,4 @@ oper a = if_then_else PAgr p (PAg Sg) PNoAg ---- e,g, "chacun de"; other possibilities? } ; - -} +} ; From eb074e6bcd4626d1cfd127954f7f1f842ebfe407 Mon Sep 17 00:00:00 2001 From: Inari Listenmaa Date: Mon, 22 Oct 2018 17:09:33 +0200 Subject: [PATCH 15/16] (Ara) Small cleanup and adding comments --- src/arabic/NounAra.gf | 59 +++++++++++++++++++++---------------------- src/arabic/ResAra.gf | 7 +---- 2 files changed, 30 insertions(+), 36 deletions(-) diff --git a/src/arabic/NounAra.gf b/src/arabic/NounAra.gf index a35572820..d20b3e787 100644 --- a/src/arabic/NounAra.gf +++ b/src/arabic/NounAra.gf @@ -5,26 +5,28 @@ flags optimize=noexpand ; lin DetCN det cn = let { - number = sizeToNumber det.n; - state = possState det.d; + cas : Case -> Case = if_then_else Case det.is1sg Bare ; + number = sizeToNumber det.n ; determiner : Case -> Str = \c -> - det.s ! cn.h ! (detGender cn.g det.n) ! c; - noun : Case -> NTable -> Str = \c,nt -> - let cas = if_then_else Case det.is1sg Bare c -- no case vowel with 1sg poss. suff. - in nt ! number - ! nounState det.d number - ! nounCase cas det.n det.d + det.s ! cn.h ! (detGender cn.g det.n) ! c ; + noun : Case -> Str = \c -> + cn.s ! number + ! nounState det.d number + ! nounCase c det.n det.d ; + adj : Case -> Str = \c -> + cn.adj ! number + ! (definite ! det.d) -- Indef remains Indef, rest become Def + ! c } in { s = \\c => case cnB4det det.isPron det.isNum det.n det.d of { False => determiner c - ++ noun c cn.s -- deal with poss. suffix - ++ cn.adj ! number ! state ! c -- normal case+state - ++ cn.np ! c ; - True => noun c cn.s -- deal with poss. suffix - -- ++ determiner c -- or this? - ++ det.s ! cn.h ! cn.g ! c - ++ cn.adj ! number ! state ! c -- normal case+state + ++ noun c + ++ adj c + ++ cn.np ! c ; + True => noun (cas c) -- deal with possessive suffix + ++ determiner c + ++ adj c ++ cn.np ! c }; a = { pgn = agrP3 cn.h cn.g number; @@ -45,23 +47,20 @@ lin }; a = np.a } ; - {- - --should compile.. not working :( wierd error message.. bug? + +{- PPartNP np v2 = let x = case np.a.pgn of { - Per3 g n => ( positAdj (v2.s ! VPPart) ) ! g ! n ! Indef ; - _ => \\_ => [] -- not occuring anyway - } in { - s = \\c => np.s ! c ++ x ! c ; - a = np.a - }; - -} + Per3 g n => positAdj (v2.s ! VPPart) ) ! g ! n ! Indef ; -- doesn't work because trying to glue runtime tokens + Per2 g n => \\_ => [] ; + _ => \\_ => [] + } in np ** { + s = \\c => np.s ! c ++ v2.s ! VPPart ---- TODO: agreement + }; +-} - -- FIXME try parsing something like "this house now" and you'll get - -- an internal compiler error, but it still works.. wierd.. - AdvNP np adv = { - s = \\c => np.s ! c ++ adv.s; - a = np.a + AdvNP np adv = np ** { + s = \\c => np.s ! c ++ adv.s }; {- DetSg quant ord = { @@ -104,7 +103,7 @@ lin PossPron p = { s = \\_,_,_,_ => p.s ! Gen; d = Poss; - is1sg = case p.a.pgn of { Per1 _ => True ; _ => False } ; + is1sg = case p.a.pgn of { Per1 Sing => True ; _ => False } ; isPron = True; isNum = False } ; diff --git a/src/arabic/ResAra.gf b/src/arabic/ResAra.gf index bf9a37941..c73158c7a 100644 --- a/src/arabic/ResAra.gf +++ b/src/arabic/ResAra.gf @@ -48,8 +48,6 @@ resource ResAra = PatternsAra ** open Prelude, Predef, OrthoAra, ParamX in { --for roots with 2 consonants (works also for assimilated strs, like fc~, --because the function discards anything after the first two characters mkRoot2 : Str -> Root2 = \fcl -> - -- let { cl = drop 2 fcl} in --drop 1 fcl - -- {f = take 2 fcl; c = take 2 cl}; --take 1 case fcl of { f@? + c@? + _ => { f = f ; c = c } ; _ => error ("mkRoot2: too short root" ++ fcl) @@ -138,7 +136,7 @@ resource ResAra = PatternsAra ** open Prelude, Predef, OrthoAra, ParamX in { VPerf Voice PerGenNum | VImpf Mood Voice PerGenNum | VImp Gender Number - | VPPart ; + | VPPart ; -- TODO: add gender and number (or check if easy to use BIND) PerGenNum = Per3 Gender Number @@ -1045,9 +1043,6 @@ patHollowImp : (_,_ :Str) -> Gender => Number => Str =\xaf,xAf -> _ => Def --Lkitaabu }; - possState : State -> State = \s -> - case s of { Poss => Def ; - x => x } ; --FIXME needs testing nounCase : Case -> Size -> State -> Case = \c,size,s -> From 6b0094b22a4c6fe5b742f956c756710fe3cd31b4 Mon Sep 17 00:00:00 2001 From: Inari Listenmaa Date: Mon, 22 Oct 2018 17:09:51 +0200 Subject: [PATCH 16/16] (Ara) Fixing possessive suffixes --- src/arabic/ParadigmsAra.gf | 4 ++-- src/arabic/ResAra.gf | 9 ++++++--- src/arabic/StructuralAra.gf | 4 ++-- 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/src/arabic/ParadigmsAra.gf b/src/arabic/ParadigmsAra.gf index f84fc7add..9dea1146f 100644 --- a/src/arabic/ParadigmsAra.gf +++ b/src/arabic/ParadigmsAra.gf @@ -435,8 +435,8 @@ resource ParadigmsAra = open mkPron : (_,_,_ : Str) -> PerGenNum -> NP = \ana,nI,I,pgn -> { s = table { - Acc => nI; - Gen => I; + Acc => BIND ++ nI; -- object suffix + Gen => BIND ++ I; -- possessive suffix _ => ana }; a = {pgn = pgn; isPron = True }; diff --git a/src/arabic/ResAra.gf b/src/arabic/ResAra.gf index c73158c7a..d4f08f631 100644 --- a/src/arabic/ResAra.gf +++ b/src/arabic/ResAra.gf @@ -954,7 +954,7 @@ patHollowImp : (_,_ :Str) -> Gender => Number => Str =\xaf,xAf -> --dual suffixes dl : State => Case => Str = table { - Const => + (Const|Poss) => table { Nom => "َا"; _ => "َيْ" @@ -970,7 +970,7 @@ patHollowImp : (_,_ :Str) -> Gender => Number => Str =\xaf,xAf -> --sound masculine plural suffixes m_pl : State => Case => Str = table { - Const => + (Const|Poss) => table { Nom => "ُو"; _ => "ِي" @@ -1266,7 +1266,10 @@ patHollowImp : (_,_ :Str) -> Gender => Number => Str =\xaf,xAf -> mkNum : Str -> Str -> Str -> {s : DForm => CardOrd => Gender => State => Case => Str} = \wAhid,awwal,Ula -> - let { wAhida = wAhid + "َة"} in + let wAhida : Str = case wAhid of { + x + "ة" => mkAt wAhid ; + _ => wAhid + "َة" } + in { s= table { unit => table { NCard => table { diff --git a/src/arabic/StructuralAra.gf b/src/arabic/StructuralAra.gf index 8160f2eff..7931b8132 100644 --- a/src/arabic/StructuralAra.gf +++ b/src/arabic/StructuralAra.gf @@ -43,9 +43,9 @@ concrete StructuralAra of Structural = CatAra ** -- how8many_IDet = mkDet "كَمْ" Pl Const ; -- IL: check (was ["هْو مَني"]) ; -- if_Subj = ss "ِف" ; in8front_Prep = ss "مُقَابِلَ" ; - i_Pron = mkPron "أَنَا" "نِي" "ِي" (Per1 Sing); + i_Pron = mkPron "أَنَا" "نِي" "ي" (Per1 Sing); in_Prep = ss "فِي" ; - it_Pron = mkPron "ِت" "ِت" "ِتس" (Per3 Masc Sg); -- IL: check + it_Pron = he_Pron ; -- was: it_Pron = mkPron "ِت" "ِت" "ِتس" (Per3 Masc Sg); -- less_CAdv = ss "لسّ" ; many_Det = mkDet "جَمِيع" Pl Const ; -- more_CAdv = ss "مْري" ;