diff --git a/src/somali/CatSom.gf b/src/somali/CatSom.gf index d180619d..e23c9ca0 100644 --- a/src/somali/CatSom.gf +++ b/src/somali/CatSom.gf @@ -123,7 +123,7 @@ concrete CatSom of Cat = CommonX - [Adv] ** open ResSom, Prelude in { linref -- Cl = linCl ; - VP = linVP VInf ; + VP = infVP ; CN = linCN ; Prep = \prep -> prep.s ! P3_Prep ++ prep.sii ++ prep.dhex ++ prep.miscAdv ! Sg3 Masc ; S = \s -> linBaseCl (s.s ! False) ; diff --git a/src/somali/NounSom.gf b/src/somali/NounSom.gf index 7e4b11da..bc680e61 100644 --- a/src/somali/NounSom.gf +++ b/src/somali/NounSom.gf @@ -256,7 +256,7 @@ concrete NounSom of Noun = CatSom ** open ResSom, Prelude in { 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 ! st ! gennum cn n ! c ; + ++ rs.s ! st ! gennum cn Sg ! c ; -- gennum cn Sg, because plural form is only for 1st person plural hasMod = True ; } ; diff --git a/src/somali/ParamSom.gf b/src/somali/ParamSom.gf index b80a8f19..30be8f82 100644 --- a/src/somali/ParamSom.gf +++ b/src/somali/ParamSom.gf @@ -288,6 +288,7 @@ param 1/2SG/3SG M/2PL/3PL suga (VRel MascSg) 3 SG F sugta (VRel FemSg) 1PL sugna (VRel PlInv) -} + | VRelNeg -- Saeed p. 211 have: lahayn, be: ahayni | VNegCond GenNum ; VAgr = @@ -315,6 +316,14 @@ oper Pl1 _ => Pl1_ ; Pl2 => Pl2_ ; Pl3 => Pl3_ } ; + isNeg : VForm -> Bool = \vf -> case vf of { + VNegPast _ => True ; + VNegCond _ => True ; + VRelNeg => True ; + VImp _ Neg => True ; + VPres _ _ Neg => True ; + _ => False + } ; -------------------------------------------------------------------------------- -- Clauses diff --git a/src/somali/RelativeSom.gf b/src/somali/RelativeSom.gf index 9581a077..795c7346 100644 --- a/src/somali/RelativeSom.gf +++ b/src/somali/RelativeSom.gf @@ -18,7 +18,8 @@ lin rclSubord = mergeRCl (cls.s ! True) ; rclStatement = mergeRCl (cls.s ! False) ; in rp.s ++ case of { - => linVP (VRel g) vp ; -- reduced present only in absolutive + => linVP (VRel g) Subord vp ; -- reduced present only in absolutive + <_,Abs,Pres,Simul,Neg> => linVP VRelNeg Subord vp ; -- special form for have and be <_,Nom,Pres,Simul,Pos> => rclStatement.s ! t ! a ! p ; -- the usual forms, not subordinate _ => rclSubord.s ! t ! a ! p } -- the rest is Subord because of negation. } ; diff --git a/src/somali/ResSom.gf b/src/somali/ResSom.gf index a3449b6a..e6579227 100644 --- a/src/somali/ResSom.gf +++ b/src/somali/ResSom.gf @@ -561,7 +561,8 @@ oper VInf => arki ; VRel SgMasc => qaat + "a" ; VRel SgFem => arag + t + "a" ; - VRel PlInv => arag + "na" + VRel PlInv => arag + "na" ; + VRelNeg => qaat + "o" -- TODO check } ; sii, dhex = [] ; @@ -630,8 +631,8 @@ oper VNegCond SgMasc => "ahaadeen" ; -- 1SG/3 SG M/3PL VNegCond SgFem => "ahaateen" ; -- 2SG/3 SG F/2PL VNegCond PlInv => "ahaanneen" ; -- 1PL - --VRelShort => "ah" ; - VRel _ => "ah" ; -- TODO find right forms + VRel _ => "ah" ; -- All persons: see Nilsson p. 78. TODO check Saeed p. 103 + VRelNeg => "ahayni" ; -- Saeed VInf => "ahaan" ; VImp Sg pol => if_then_Pol pol "ahaw" "ahaanin" ; VImp Pl pol => if_then_Pol pol "ahaada" "ahaanina" ; @@ -649,10 +650,19 @@ oper VPres _ Pl1_ Pos => "leenahay" ; VPres _ Pl2_ Pos => "leedihiin" ; VPres _ Pl3_ Pos => "leeyihiin" ; + + VPres _ Sg1_Sg3Masc Neg => "lihi" ; + VPres _ Sg2_Sg3Fem Neg => "lihid" ; + VPres _ Pl1_ Neg => "lihin" ; + VPres _ Pl2_ Neg => "lihidin" ; + VPres _ Pl3_ Neg => "laha" ; + + VNegPast _ => "lahayn" ; + VPast asp agr => "l" + copula.s ! VPast asp agr ; VNegCond agr => "l" + copula.s ! VNegCond agr ; --- VRelShort => "leh" ; - VRel _ => "leh" ; -- TODO find right forms + VRel _ => "leh" ; -- All persons: see Nilsson p. 78 + VRelNeg => "lahayn" ; x => hold_V.s ! x } } ; @@ -839,7 +849,7 @@ oper Statement => case of { => {p1 = "waa" ; p2 = []} ; _ => stmarkerNoContr ! subj.a ! p }} ; - in (wordOrder subjnoun subjpron stm obj pred vp) ; + in wordOrder subjnoun subjpron stm obj pred vp cltyp ; } where { vp : VerbPhrase = case isPassive vps of { True => complSlash (insertComp vps np) ; @@ -847,13 +857,23 @@ oper subj : NounPhrase = case isPassive vps of {True => impersNP ; _ => np} } ; - wordOrder : (sn,sp : Str) -> (stm,obj : {p1,p2 : Str}) -> {fin,inf : Str} -> VerbPhrase -> BaseCl = - \subjnoun,subjpron,stm,obj,pred,vp -> { + wordOrder : (sn,sp : Str) -> (stm,obj : {p1,p2 : Str}) -> {fin,inf : Str} -> VerbPhrase -> ClType -> BaseCl = + \subjnoun,subjpron,stm,obj,pred,vp,cltyp -> { + {- Saeed p. 210-211: "The relative clause resembles a main clause in syntax + except that the tendency for verb final order is much stronger. [..] Certain + elements such as subject clitic pronouns, and the negative word aan 'not' are + attracted to the head nominal and thus move away from the verbal group." + -} beforeSTM = vp.berri -- AdV ++ subjnoun -- subject if it's a noun - ++ obj.p1 ; -- object if it's a noun - stm = stm.p1 ; -- sentence type marker - afterSTM = stm.p2 -- possible subj. pronoun + ++ case cltyp of { + Subord => [] ; + _ => obj.p1 } ; -- noun object if it's a statement + stm = stm.p1 ; -- sentence type marker; empty if subordinate and positive + afterSTM = stm.p2 -- possible subj. pronoun + ++ case cltyp of { + Subord => obj.p1 ; -- noun object if it's subordinate clause + _ => [] } ++ obj.p2 -- object if it's a pronoun ++ vp.sii -- restricted set of particles ++ vp.dhex -- restricted set of nouns/adverbials @@ -903,7 +923,7 @@ oper _ => vfStatement t ant p agr vp } ; -- TODO other relative forms - infVP : VerbPhrase -> Str = linVP VInf ; + infVP : VerbPhrase -> Str = linVP VInf Statement ; stmarkerContr : Agreement => Polarity => Str = \\a,b => let stm = if_then_Pol b "w" "m" @@ -926,11 +946,15 @@ oper -- linrefs oper - linVP : VForm -> VerbPhrase -> Str = \vf,vp -> + linVP : VForm -> ClType -> VerbPhrase -> Str = \vf,cltyp,vp -> let vp' = complSlash vp ; inf = {inf = vp.s ! vf ; fin=[]} ; - wo = wordOrder [] [] {p1,p2=[]} (vp'.comp ! pagr2agr vp.obj2.a) inf vp' ; - in wo.beforeSTM ++ wo.afterSTM ; + stm = case of { + => {p1 = "aan" ; p2 = []} ; + _ => {p1,p2 = []} + } ; + wo = wordOrder [] [] stm (vp'.comp ! pagr2agr vp.obj2.a) inf vp' cltyp ; + in wo.beforeSTM ++ wo.stm ++ wo.afterSTM ; linCN : CNoun -> Str = \cn -> cn.s ! Indef Sg ++ cn.mod ! Indefinite ! Sg ! Abs ; linAdv : Adverb -> Str = \adv -> diff --git a/src/somali/unittest/cl.gftest b/src/somali/unittest/cl.gftest index 5fe3feb6..ec23ae2b 100644 --- a/src/somali/unittest/cl.gftest +++ b/src/somali/unittest/cl.gftest @@ -14,7 +14,7 @@ LangSom: niman BIND ka buugaag BIND ta iibsada Lang: PhrUtt NoPConj (UttNP (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)))))))) NoVoc -- LangEng: the men that don't buy the books -LangSom: niman BIND ka buugaag BIND ta aan iibsado +LangSom: niman BIND ka aan buugaag BIND ta iibsado Lang: PhrUtt NoPConj (UttNP (DetCN (DetQuant DefArt NumPl) (RelCN (UseN man_N) (UseRCl (TTAnt TPres ASimul) PNeg (RelVP IdRP (ComplSlash (SlashV2a buy_V2) (DetCN (DetQuant DefArt NumPl) (UseN book_N)))))))) NoVoc @@ -23,7 +23,7 @@ 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 men that don't buy the books are these -LangSom: niman BIND ka buugaag BIND ta aan iibsado waa kuwan +LangSom: niman BIND ka aan buugaag BIND ta iibsado waa kuwan Lang: PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) PPos (PredVP (DetCN (DetQuant DefArt NumPl) (RelCN (UseN man_N) (UseRCl (TTAnt TPres ASimul) PNeg (RelVP IdRP (ComplSlash (SlashV2a buy_V2) (DetCN (DetQuant DefArt NumPl) (UseN book_N))))))) (UseComp (CompNP (DetNP (DetQuant this_Quant NumPl))))))) NoVoc