diff --git a/src/somali/LexiconSom.gf b/src/somali/LexiconSom.gf index 13c117787..f52d8b8fc 100644 --- a/src/somali/LexiconSom.gf +++ b/src/somali/LexiconSom.gf @@ -33,7 +33,7 @@ lin big_A = mkA "weyn" ; -- lin bike_N = mkN "" ; lin bird_N = mkN "shimbir" fem ; -- lin bite_V2 = mkV2 "" ; --- lin black_A = mkA "" ; +lin black_A = mkA "madow" ; -- lin blood_N = mkN "" ; -- lin blow_V = mkV "" ; -- lin blue_A = mkA "" ; @@ -397,7 +397,7 @@ lin wait_V2 = mkV2 "sug" ; -- lin watch_V2 = mkV2 "" ; lin water_N = mkNoun "biyo" "biyaha" "biyo" "biyaha" Masc ; -- ?? gender -- lin wet_A = mkA "" ; --- lin white_A = mkA "" ; +lin white_A = mkA "cad" ; -- lin wide_A = mkA "" ; -- lin wife_N = mkN "" ; -- lin win_V2 = mkV2 "" ; diff --git a/src/somali/NounSom.gf b/src/somali/NounSom.gf index 051308f33..8d21a618a 100644 --- a/src/somali/NounSom.gf +++ b/src/somali/NounSom.gf @@ -42,7 +42,7 @@ concrete NounSom of Noun = CatSom ** open ResSom, Prelude in { in dt.pref -- if det is numeral ++ cn.s ! nfc.nf ++ dt.s -- non-numeral det - ++ cn.mod ! num ! c + ++ cn.mod ! det.st ! num ! c } ; -- : PN -> NP ; @@ -90,8 +90,8 @@ concrete NounSom of Noun = CatSom ** open ResSom, Prelude in { -- MassNP : CN -> NP ; MassNP cn = useN cn ** { - s = table { Nom => cn.s ! NomSg ++ cn.mod ! Sg ! Nom ; - c => cn.s ! Indef Sg ++ cn.mod ! Sg ! c } + s = table { Nom => cn.s ! NomSg ++ cn.mod ! Indefinite ! Sg ! Nom ; + c => cn.s ! Indef Sg ++ cn.mod ! Indefinite ! Sg ! c } } ; @@ -224,19 +224,20 @@ concrete NounSom of Noun = CatSom ** open ResSom, Prelude in { -- : AP -> CN -> CN AdjCN ap cn = cn ** { s = table { NomSg => cn.s ! Indef Sg ; -- When an adjective is added, noun loses case marker. - x => cn.s ! x } ; - mod = let conj = if_then_Str cn.hasMod "oo" [] in - \\n,c => cn.mod ! n ! Abs -- If there was something before, it is now in Abs - ++ conj -- If the sentence is already modified, any new modifier needs to be introduced with conjunction - ++ ap.s ! AF n c ; + x => cn.s ! x } ; + mod = \\st,n,c => + cn.mod ! st ! n ! Abs -- If there was something before, it is now in Abs + ++ andConj st cn.hasMod -- If the sentence is already modified, any new modifier needs to be introduced with conjunction + ++ ap.s ! AF n c ; hasMod = True } ; - -- : CN -> RS -> CN ; RelCN cn rs = cn ** { - mod = let conj = if_then_Str cn.hasMod "ee" [] in - \\n,c => cn.mod ! n ! c ++ conj ++ rs.s ! gender cn ! c ; + mod = \\st,n,c => --what to do with subject case if there's both adj and RS? + cn.mod ! st ! n ! Abs + ++ andConj st cn.hasMod + ++ rs.s ! gender cn ! c ; hasMod = True ; } ; @@ -263,7 +264,9 @@ concrete NounSom of Noun = CatSom ** open ResSom, Prelude in { --2 Possessive and partitive constructs -- : PossNP : CN -> NP -> CN ; - PossNP cn np = cn ** {mod = \\n,c => cn.mod ! n ! c ++ np.s ! Abs} ; -- guriga Axmed, not Axmed gurigiisa + PossNP cn np = cn ** { -- guriga Axmed, not Axmed gurigiisa + mod = \\st,n,c => cn.mod ! st ! n ! c ++ objpron np ! Abs + } ; {- -- : CN -> NP -> CN ; -- glass of wine / two kilos of red apples PartNP cn np = cn ** { } ; @@ -284,4 +287,12 @@ concrete NounSom of Noun = CatSom ** open ResSom, Prelude in { -- : Det -> DAP ; -- this (or that) DetDAP det = det ; -} + +oper + andConj : State -> Bool -> Str = \st,hasMod -> + case of { + => "oo" ; + => "ee" ; + _ => [] + } ; } diff --git a/src/somali/ParamSom.gf b/src/somali/ParamSom.gf index e13ee1d45..a09fbd03d 100644 --- a/src/somali/ParamSom.gf +++ b/src/somali/ParamSom.gf @@ -175,7 +175,7 @@ oper Sg2_Prep => Sg2 ; Pl1_Prep i => Pl1 i ; Pl2_Prep => Pl2 ; - _ => Pl3 + _ => Sg3 Masc } ; isP3 = overload { diff --git a/src/somali/ResSom.gf b/src/somali/ResSom.gf index f369b7e51..2680d4a8a 100644 --- a/src/somali/ResSom.gf +++ b/src/somali/ResSom.gf @@ -13,13 +13,14 @@ oper Noun3 : Type = Noun ; CNoun : Type = Noun ** { - mod : Number => Case => Str ; + mod : State -- for conjunctions: oo for indef, ee for def + => Number => Case => Str ; hasMod : Bool ; isPoss : Bool -- to prevent impossible forms in ComplN2 with Ns that have short possessive, e.g. "father" } ; cn2str : Number -> Case -> CNoun -> Str = \n,c,cn -> - cn.s ! Indef n ++ cn.mod ! n ! c ; + cn.s ! Indef n ++ cn.mod ! Indefinite ! n ! c ; PNoun : Type = {s : Str ; a : Agreement} ; @@ -154,7 +155,7 @@ oper False => np.s} ; useN : Noun -> CNoun ** BaseNP = \n -> n ** - { mod = \\_,_ => [] ; hasMod = False ; + { mod = \\_,_,_ => [] ; hasMod = False ; a = Sg3 (gender n) ; isPron,isPoss = False ; empty = [] ; st = Indefinite } ; @@ -896,7 +897,7 @@ oper wo = wordOrder [] [] {p1,p2=[]} (vp'.comp ! pagr2agr vp.obj2.a) inf vp' ; in wo.beforeSTM ++ wo.afterSTM ; - linCN : CNoun -> Str = \cn -> cn.s ! NomSg ++ cn.mod ! Sg ! Abs ; + linCN : CNoun -> Str = \cn -> cn.s ! Indef Sg ++ cn.mod ! Indefinite ! Sg ! Abs ; linAdv : Adverb -> Str = \adv -> adv.berri ++ adv.sii diff --git a/src/somali/unittest/ap.gftest b/src/somali/unittest/ap.gftest new file mode 100644 index 000000000..6f666c36b --- /dev/null +++ b/src/somali/unittest/ap.gftest @@ -0,0 +1,7 @@ +-- LangEng: the big black bird +LangSom: shimbir BIND da madow ee weyn +Lang: PhrUtt NoPConj (UttNP (DetCN (DetQuant DefArt NumSg) (AdjCN (PositA big_A) (AdjCN (PositA black_A) (UseN bird_N))))) NoVoc + +-- LangEng: a big black bird +LangSom: shimbir madow oo weyn +Lang: PhrUtt NoPConj (UttNP (DetCN (DetQuant IndefArt NumSg) (AdjCN (PositA big_A) (AdjCN (PositA black_A) (UseN bird_N))))) NoVoc diff --git a/src/somali/unittest/cl.gftest b/src/somali/unittest/cl.gftest index b0ad409f3..4e55ab60a 100644 --- a/src/somali/unittest/cl.gftest +++ b/src/somali/unittest/cl.gftest @@ -9,3 +9,7 @@ Lang: PhrUtt NoPConj (UttNP (DetCN (DetQuant DefArt NumPl) (RelCN (UseN man_N) ( -- LangEng: the men that buy the books are these LangSom: niman BIND ka buugaag BIND ta iibsadaa waa kuwan Lang: PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) PPos (PredVP (DetCN (DetQuant DefArt NumPl) (RelCN (UseN man_N) (UseRCl (TTAnt TPres ASimul) PPos (RelVP IdRP (ComplSlash (SlashV2a buy_V2) (DetCN (DetQuant DefArt NumPl) (UseN book_N))))))) (UseComp (CompNP (DetNP (DetQuant this_Quant NumPl))))))) NoVoc + +-- LangEng: the books that the men buy are these +LangSom: buugaag BIND ta niman BIND ku iibsadaan waa kuwan +Lang: PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) PPos (PredVP (DetCN (DetQuant DefArt NumPl) (RelCN (UseN book_N) (UseRCl (TTAnt TPres ASimul) PPos (RelSlash IdRP (SlashVP (DetCN (DetQuant DefArt NumPl) (UseN man_N)) (SlashV2a buy_V2)))))) (UseComp (CompNP (DetNP (DetQuant this_Quant NumPl))))))) NoVoc