diff --git a/src/somali/ExtendSom.gf b/src/somali/ExtendSom.gf index e1bc68168..50be82b1e 100644 --- a/src/somali/ExtendSom.gf +++ b/src/somali/ExtendSom.gf @@ -10,9 +10,7 @@ lin FocusObj np sslash = -- FIXME: preposition disappears in negative sentences let ss = sslash.s ! False ; ssSub = sslash.s ! True ; -- the negative particle is the same as subordinate, but verb forms come from main clause - obj = case np.isPron of { - True => np.empty ++ (pronTable ! np.a).sp ; - False => np.s ! Abs } + obj = objpron np ! Abs ; in {s = ssSub.beforeSTM ++ "waxa" ++ ssSub.stm ++ ss.afterSTM ++ obj} ; -- FocusAdv : Adv -> S -> Utt ; -- today I will sleep diff --git a/src/somali/NounSom.gf b/src/somali/NounSom.gf index df94864c0..73eee4cb7 100644 --- a/src/somali/NounSom.gf +++ b/src/somali/NounSom.gf @@ -70,7 +70,8 @@ concrete NounSom of Noun = CatSom ** open ResSom, Prelude in { -- : NP -> RS -> NP ; -- Paris, which is here RelNP np rs = np ** { - s = \\c => np.s ! c ++ rs.s ! npgender np ! c + s = \\c => objpron np ! c ++ rs.s ! npgender np ! c ; + isPron = False ; } ; -- Determiners can form noun phrases directly. @@ -198,7 +199,7 @@ concrete NounSom of Noun = CatSom ** open ResSom, Prelude in { True => qnt.shortPoss ! art ; _ => qnt.s ! sg n2.gda ! Abs } ; noun = case np.isPron of { - True => (pronTable ! np.a).sp ; -- long subject pronoun + True => (pronTable ! np.a).sp ! Abs ; -- long subject pronoun False => np.s ! Abs } in noun ++ cn.s ! Def num ++ BIND ++ det ; isPoss = True} ; diff --git a/src/somali/ResSom.gf b/src/somali/ResSom.gf index bc7c1bff0..6f4e7ebee 100644 --- a/src/somali/ResSom.gf +++ b/src/somali/ResSom.gf @@ -145,9 +145,13 @@ oper let pagr : PrepAgr = agr2pagr np.a in case of { => {s = np.s ! Abs ; a = pagr} ; - -- => {s = np.empty ++ (pronTable ! np.a).sp ; a = pagr} ; -- uncomment if you want to add long object pronoun for 3rd person object + -- => {s = objpron np ! Abs ; a = pagr} ; -- uncomment if you want to add long object pronoun for 3rd person object _ => {s = np.empty ; a = pagr} } ; -- no long object for other pronouns + objpron : NounPhrase -> Case => Str = \np -> case np.isPron of { + True => \\c => np.empty ++ (pronTable ! np.a).sp ! c ; + False => np.s} ; + useN : Noun -> CNoun ** BaseNP = \n -> n ** { mod = \\_,_ => [] ; hasMod = False ; a = Sg3 (gender n) ; isPron,isPoss = False ; @@ -175,61 +179,61 @@ oper sp : GenNum => Str ; -- independent forms, e.g. M:kayga F:tayda Pl:kuwayga short : DefArticle => Str -- short possessive suffix: e.g. family members, my/your name } ; - sp : Str ; + sp : Case => Str ; } ; pronTable : Agreement => Pronoun = table { Sg1 => { s = table {Nom => "aan" ; Abs => "i"} ; - a = Sg1 ; isPron = True ; sp = "aniga" ; + a = Sg1 ; isPron = True ; sp = table {Nom => "anigu" ; _ =>"aniga"} ; empty = [] ; poss = {s = quantTable "ayg" "ayd" ; short = quantTable "ay" ; sp = gnTable "ayg" "ayd" "uwayg"} } ; Sg2 => { s = table {Nom => "aad" ; Abs => "ku"} ; - a = Sg2 ; isPron = True ; sp ="adiga" ; + a = Sg2 ; isPron = True ; sp = table {Nom => "adigu" ; _ => "adiga"} ; empty = [] ; poss = {s = quantTable "aag" "aad" ; short = quantTable "aa" ; sp = gnTable "aag" "aad" "uwaag"} } ; Sg3 Masc => { s = table {Nom => "uu" ; Abs => []} ; - a = Sg3 Masc ; isPron = True ; sp ="isaga" ; + a = Sg3 Masc ; isPron = True ; sp = table {Nom => "isagu" ; _ => "isaga"} ; empty = [] ; poss = {s, short = quantTable "iis" ; sp = gnTable "iis" "iis" "uwiis"} } ; Sg3 Fem => { s = table {Nom => "ay" ; Abs => []} ; - a = Sg3 Fem ; isPron = True ; sp = "iyada" ; + a = Sg3 Fem ; isPron = True ; sp = table {Nom => "iyadu" ; _ => "iyada"} ; empty = [] ; poss = {s, short = quantTable "eed" ; sp = gnTable "eed" "eed" "uweed"} } ; Pl1 Excl => { s = table {Nom => "aan" ; Abs => "na"} ; - a = Pl1 Excl ; isPron = True ; sp ="annaga" ; + a = Pl1 Excl ; isPron = True ; sp = table {Nom => "annagu" ; _ => "annaga"} ; empty = [] ; poss = {s = quantTable "eenn" ; short = quantTable "een" ; sp = gnTable "eenn" "eenn" "uweenn"} } ; Pl1 Incl => { s = table {Nom => "aynu" ; Abs => "ina"} ; - a = Pl1 Incl ; isPron = True ; sp ="innaga" ; + a = Pl1 Incl ; isPron = True ; sp = table {Nom => "innagu" ; _ => "innaga"} ; empty = [] ; poss = {s = quantTable "eenn" ; short = quantTable "een" ; sp = gnTable "eenn" "eenn" "uweenn"} } ; Pl2 => { s = table {Nom => "aad" ; Abs => "idin"} ; - a = Pl2 ; isPron = True ; sp ="idinka" ; + a = Pl2 ; isPron = True ; sp = table {Nom => "idinku" ; _ => "idinka"} ; empty = [] ; poss = {s = quantTable "iinn" ; short = quantTable "iin" ; sp = gnTable "iinn" "iinn" "uwiinn"} } ; Pl3 => { s = table {Nom => "ay" ; Abs => []} ; - a = Pl3 ; isPron = True ; sp = "iyaga" ; + a = Pl3 ; isPron = True ; sp = table {Nom => "iyagu" ; _ => "iyaga"} ; empty = [] ; poss = {s, short = quantTable "ood" ; sp = gnTable "ood" "ood" "uwood"} } ; Impers => { s = table {Nom => "la" ; Abs => "la"} ; - a = Impers ; isPron = True ; sp = "" ; + a = Impers ; isPron = True ; sp = \\_ => "" ; empty = [] ; poss = {s, short = quantTable "??" ; sp = gnTable "??" "??" "??"} } diff --git a/src/somali/StructuralSom.gf b/src/somali/StructuralSom.gf index eda485d25..1cf7b3159 100644 --- a/src/somali/StructuralSom.gf +++ b/src/somali/StructuralSom.gf @@ -118,7 +118,7 @@ lin with_Prep = mkPrep la ; -- Pron -- Pronouns are closed class, no constructor in ParadigmsSom. - it_Pron = he_Pron ** {s = \\_ => [] ; sp = [] ; a = Impers} ; + it_Pron = he_Pron ** {s = \\_ => [] ; sp = \\_ => [] ; a = Impers} ; i_Pron = pronTable ! Sg1 ; youPol_Pron, youSg_Pron = pronTable ! Sg2 ;