diff --git a/src/arabic/CatAra.gf b/src/arabic/CatAra.gf index e4cfd520..48e5d221 100644 --- a/src/arabic/CatAra.gf +++ b/src/arabic/CatAra.gf @@ -70,8 +70,7 @@ concrete CatAra of Cat = CommonX - [Utt] ** open ResAra, Prelude, ParamX in { -- Structural - Conj = {s : Str ; n : ResAra.Number} ; --- DConj = {s1,s2 : Str ; n : ResAra.Number} ; + Conj = {s1,s2 : Str; n : ResAra.Number} ; Subj = {s : Str ; o : Order} ; Prep = ResAra.Preposition ; @@ -81,7 +80,7 @@ concrete CatAra of Cat = CommonX - [Utt] ** open ResAra, Prelude, ParamX in { V2, V2A = ResAra.Verb2 ; VV = ResAra.Verb2 ** {sc : Preposition} ; -- c2 is for verb V2S, V2Q = ResAra.Verb2 ; - VS = ResAra.Verb ** {o : Order} ; + VS = ResAra.Verb ** {o : Order; s2 : Str} ; V3 = ResAra.Verb3 ; V2V = ResAra.Verb3 ** {sc : Preposition} ; -- c3 is for verb, c2 is for dir.obj diff --git a/src/arabic/ConjunctionAra.gf b/src/arabic/ConjunctionAra.gf index 0db6abd1..24b16903 100644 --- a/src/arabic/ConjunctionAra.gf +++ b/src/arabic/ConjunctionAra.gf @@ -13,11 +13,11 @@ lin BaseAdv = twoSS ; ConsAdv = consrSS comma ; - ConjAdv = conjunctSS ; + ConjAdv = conjunctDistrSS ; BaseS = twoTable Order ; ConsS = consrTable Order comma ; - ConjS = conjunctTable Order ; + ConjS = conjunctDistrTable Order ; BaseNP x y = twoTable Case x y ** { a = conjAgr x.a y.a ; @@ -27,7 +27,7 @@ lin a = conjAgr xs.a x.a ; empty = [] } ; - ConjNP conj ss = conjunctTable Case conj ss ** { + ConjNP conj ss = conjunctDistrTable Case conj ss ** { a = let gn = pgn2gn ss.a.pgn in {pgn = Per3 gn.g (conjNumber conj.n gn.n) ; isPron = False} ; empty = [] @@ -35,7 +35,7 @@ lin BaseAP = twoTable5 Species Gender Number State Case ; ConsAP = consrTable5 Species Gender Number State Case comma ; - ConjAP = conjunctTable5 Species Gender Number State Case ; + ConjAP = conjunctDistrTable5 Species Gender Number State Case ; oper @@ -74,9 +74,9 @@ oper \P,Q,R,T,S,or,xs -> {s = \\p,q,r,t,s => xs.s1 ! p ! q ! r ! t ! s ++ or.s ++ xs.s2 ! p ! q ! r ! t ! s} ; - -- conjunctDistrTable5 : - -- (P,Q,R,T,S : PType) -> ConjunctionDistr -> ListTable5 P Q R T S -> - -- {s : P => Q => R => T => S => Str} = - -- \P,Q,R,T,S,or,xs -> - -- {s = \\p,q,r,t,s => or.s1++ xs.s1 ! p ! q ! r ! t ! s ++ or.s2 ++ xs.s2 ! p ! q ! r ! t ! s} ; + conjunctDistrTable5 : + (P,Q,R,T,S : PType) -> ConjunctionDistr -> ListTable5 P Q R T S -> + {s : P => Q => R => T => S => Str} = + \P,Q,R,T,S,or,xs -> + {s = \\p,q,r,t,s => or.s1++ xs.s1 ! p ! q ! r ! t ! s ++ or.s2 ++ xs.s2 ! p ! q ! r ! t ! s} ; } diff --git a/src/arabic/ExtendAra.gf b/src/arabic/ExtendAra.gf index 4e230204..a3bb0953 100644 --- a/src/arabic/ExtendAra.gf +++ b/src/arabic/ExtendAra.gf @@ -50,7 +50,7 @@ concrete ExtendAra of Extend = BaseVPS = twoTable PerGenNum ; ConsVPS = consrTable PerGenNum comma ; - ConjVPS = conjunctTable PerGenNum ; + ConjVPS = conjunctDistrTable PerGenNum ; PredVPS np vps = { s = \\_ => np.s ! Nom ++ vps.s ! np.a.pgn -- first quick version with order always Nominal. diff --git a/src/arabic/MissingAra.gf b/src/arabic/MissingAra.gf index 9dfe21b1..774055f8 100644 --- a/src/arabic/MissingAra.gf +++ b/src/arabic/MissingAra.gf @@ -15,7 +15,6 @@ oper DetNP : Det -> NP = notYet "DetNP" ; oper ExistIP : IP -> QCl = notYet "ExistIP" ; oper FunRP : Prep -> NP -> RP -> RP = notYet "FunRP" ; oper ImpPl1 : VP -> Utt = notYet "ImpPl1" ; -oper ImpersCl : VP -> Cl = notYet "ImpersCl" ; oper PConjConj : Conj -> PConj = notYet "PConjConj" ; oper PPartNP : NP -> V2 -> NP = notYet "PPartNP" ; oper PredSCVP : SC -> VP -> Cl = notYet "PredSCVP" ; diff --git a/src/arabic/ParadigmsAra.gf b/src/arabic/ParadigmsAra.gf index 6c0e69e8..4c9cf18a 100644 --- a/src/arabic/ParadigmsAra.gf +++ b/src/arabic/ParadigmsAra.gf @@ -150,6 +150,8 @@ resource ParadigmsAra = open = \r,s,p -> lin A (brkA r s p) ; } ; + idaafaA : N -> A -> A ; -- first argument will be in constructus but inflect in case, adjective in genitive, but inflect in gender, number and definiteness. e.g. غَيْرُ طَيِّبٍ + 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. @@ -199,6 +201,13 @@ resource ParadigmsAra = open mkPrep : Str -> Prep ; mkPrep : Str -> Case -> Prep } ; -- preposition in the sense of RGL abstract syntax + +--2 Conjunctions + mkConj : overload { + mkConj : Str -> Conj ; -- and + mkConj : Str -> Str -> Conj ; -- either … or + } ; + --2 Verbs -- Overloaded operations @@ -267,7 +276,10 @@ resource ParadigmsAra = open -- questions, verb phrases, and adjectives. mkV0 : V -> V0 ; - mkVS : V -> VS ; + -- mkVS = overload { + -- mkVS : V -> VS ; + -- mkVS : V -> Str -> VS + -- } ; mkV2S : V -> Str -> V2S ; mkVV = overload { mkVV : V -> VV = regVV ; @@ -539,7 +551,9 @@ resource ParadigmsAra = open brkN' : Str -> Str -> Str -> Gender -> Species -> N = \root,sg,pl,gen,spec -> - let { kitAb = mkWord sg root; + let { kitAb = case root of { + ? + ? + "ي" => mkDefectiveAlifMaqsura (mkPat sg) (mkRoot3 root) ; + _ => mkWord sg root }; kutub = mkWord pl root } in mkFullN (reg kitAb kutub) gen spec; @@ -592,6 +606,13 @@ resource ParadigmsAra = open lin N3 (n ** {c2 = mkPreposition p ; c3 = mkPreposition q}) ; } ; + mkConj = overload { + mkConj : Str -> Conj = \s -> lin Conj {s1 = [] ; s2 = s ; n = Sg} ; + mkConj : Str -> Str -> Conj = \s1,s2 -> lin Conj {s1 = s1 ; s2 = s2 ; n = Sg} ; + mkConj : Str -> Number -> Conj = \s,n -> lin Conj {s1 = [] ; s2 = s ; n = n} ; + mkConj : Str -> Str -> Number -> Conj = \s1,s2,n -> lin Conj {s1 = s1 ; s2 = s2 ; n = n} + } ; + mkPron : (_,_,_ : Str) -> PerGenNum -> Pron = \ana,nI,I,pgn -> lin Pron (ResAra.mkPron ana nI I pgn) ; @@ -642,7 +663,11 @@ resource ParadigmsAra = open degrA : (posit,compar,plur : Str) -> A = \posit,compar,plur -> lin A {s = clr posit compar plur} ; - + idaafaA : N -> A -> A = \ghayr,tayyib -> tayyib ** { + s = table { + APosit g n d c => ghayr.s ! n ! Const ! c ++ tayyib.s ! APosit g n d c ; + AComp d c => ghayr.s ! Sg ! Const ! c ++ tayyib.s ! AComp d c } + } ; sndA root pat = let raw = sndA' root pat in { @@ -723,7 +748,10 @@ resource ParadigmsAra = open dirdirV3 v = dirV3 v (casePrep acc) ; - mkVS v = lin VS (v ** {o = Subord}) ; + mkVS = overload { + mkVS : V -> VS = \v -> lin VS (v ** {o = Subord; s2 = []}) ; + mkVS : V -> Str -> VS = \v,s -> lin VS (v ** {o = Subord; s2 = s}) + } ; mkVQ v = lin VQ v ; regVV : V -> VV = \v -> lin VV v ** {c2 = mkPreposition "أَنْ" ; sc = noPrep} ; diff --git a/src/arabic/ResAra.gf b/src/arabic/ResAra.gf index d807d3bf..a54db8ec 100644 --- a/src/arabic/ResAra.gf +++ b/src/arabic/ResAra.gf @@ -221,7 +221,7 @@ oper --PerfAct, PerfPas, ImpfAct, ImpfPas, Imp, PPart verb : (_,_,_,_,_,_ : Str) -> Verb = \katab,kutib,aktub,uktab,euktub,maktUb -> { - s = table { + s = \\vf => rectifyHmz (case vf of { VPerf Act pgn => katab + suffixPerf ! pgn ; VPerf Pas pgn => kutib + suffixPerf ! pgn ; VImpf Ind Act pgn => prefixImpf!pgn + aktub + suffixImpfInd !pgn; @@ -230,7 +230,7 @@ oper VImpf m Pas pgn => prefixImpf !pgn + uktab + suffixImpfCJ m !pgn; VImp g n => euktub + suffixImpfCJ Jus ! (Per2 g n); VPPart => maktUb - } + }) } ; --affixes of sound verbs diff --git a/src/arabic/SentenceAra.gf b/src/arabic/SentenceAra.gf index cea5f38e..b3fc8bf7 100644 --- a/src/arabic/SentenceAra.gf +++ b/src/arabic/SentenceAra.gf @@ -12,23 +12,8 @@ concrete SentenceAra of Sentence = CatAra ** open flags optimize=all_subs ; coding=utf8 ; lin -{- - PredVP np vp = - { s = \\t,p,o => - case o of { - Verbal => - case vp.comp.a.isPron of { - False => vp.s ! t ! p ! Verbal ! np.a ++ np.s ! Nom ++ vp.comp.s ! Acc ; - True => vp.s ! t ! p ! Verbal ! np.a ++ vp.comp.s ! Acc ++ np.s ! Nom - }; - Nominal => - np.s ! Nom ++ vp.s ! t ! p ! Nominal ! np.a ++ vp.comp.s ! Acc - } - }; --} - PredVP = predVP ; --- PredSCVP sc vp = mkClause sc.s (agrP3 Sg) vp ; + PredVP = predVP ; ImpVP vp = { s = \\p,g,n => @@ -57,11 +42,9 @@ concrete SentenceAra of Sentence = CatAra ** open -- SlashVS np vs sslash = TODO - - EmbedS s = {s = "أَنْ" ++ s.s ! Verbal} ; - EmbedQS qs = {s = qs.s ! QIndir} ; - EmbedVP vp = {s = uttVP vp ! Masc} ; - + EmbedS s = {s = "أَنْ" ++ s.s ! Verbal} ; + EmbedQS qs = {s = qs.s ! QIndir} ; + EmbedVP vp = {s = uttVP vp ! Masc} ; UseCl t p cl = {s = \\o => t.s ++ p.s ++ diff --git a/src/arabic/StructuralAra.gf b/src/arabic/StructuralAra.gf index 749a2561..e8bb48b6 100644 --- a/src/arabic/StructuralAra.gf +++ b/src/arabic/StructuralAra.gf @@ -11,12 +11,12 @@ concrete StructuralAra of Structural = CatAra ** almost_AdN = ss "حَوَالي" ; -- or "تَقرِيبا" -- although_Subj = ss "َلتهُْغه" ; -- always_AdV = ss "َلوَيس" ; - and_Conj = ss "وَ" ** {n = Pl} ; + and_Conj = mkConj "وَ" Pl ; -- because_Subj = ss "بعَُسي" ; before_Prep = mkPrep "قَبْلَ" ; behind_Prep = mkPrep "خَلْفَ" ; between_Prep = mkPrep "بَيْنَ" ; --- both7and_DConj = sd2 "بْته" "َند" ** {n = Pl} ; + both7and_DConj = mkConj "كِلا" "وَ" Pl ; -- but_PConj = ss "بُت" ; by8agent_Prep, by8means_Prep = biPrep ; @@ -64,7 +64,7 @@ concrete StructuralAra of Structural = CatAra ** no_Utt = {s = \\_ => "لا"} ; on_Prep = mkPrep "عَلَى" ; only_Predet = mkPredet "فَقَط" False; - or_Conj = ss "أَوْ" ** {n = Sg} ; + or_Conj = mkConj "أَوْ" ; -- otherwise_PConj = ss "ْتهروِسي" ; part_Prep = mkPrep "مِنَ" ; -- please_Voc = ss "ةلَسي" ; diff --git a/src/arabic/VerbAra.gf b/src/arabic/VerbAra.gf index 63c483f2..0f36da2a 100644 --- a/src/arabic/VerbAra.gf +++ b/src/arabic/VerbAra.gf @@ -51,7 +51,7 @@ concrete VerbAra of Verb = CatAra ** open Prelude, ResAra, ParamX in { -- : VS -> S -> VP ; -- say that she runs ComplVS vs s = predV vs ** { -- IL - obj = emptyObj ** {s = s.s ! vs.o} + obj = emptyObj ** {s = vs.s2 ++ s.s ! vs.o} } ; -- : VQ -> QS -> VP ; -- wonder who runs