diff --git a/lib/src/slovenian/CatSlv.gf b/lib/src/slovenian/CatSlv.gf index fa4179adf..a0a2bab99 100644 --- a/lib/src/slovenian/CatSlv.gf +++ b/lib/src/slovenian/CatSlv.gf @@ -1,4 +1,4 @@ -concrete CatSlv of Cat = CommonX ** open ResSlv, (P=ParamX) in { +concrete CatSlv of Cat = CommonX ** open ResSlv, (P=ParamX), Prelude in { lincat -- Sentence @@ -18,7 +18,7 @@ lincat -- Noun CN = {s : Species => Case => Number => Str; g : AGender} ; - NP = {s : Case => Str ; a : Agr} ; + NP = {s : Case => Str; a : Agr; isPron : Bool} ; Pron = {s : Case => Str; poss : Gender => Case => Number => Str; a : Agr} ; diff --git a/lib/src/slovenian/ConjunctionSlv.gf b/lib/src/slovenian/ConjunctionSlv.gf index b866ad4d1..b1fe9f15e 100644 --- a/lib/src/slovenian/ConjunctionSlv.gf +++ b/lib/src/slovenian/ConjunctionSlv.gf @@ -1,10 +1,11 @@ concrete ConjunctionSlv of Conjunction = - CatSlv ** open ResSlv in { + CatSlv ** open ResSlv, Prelude in { lin ConjNP conj xs = { s = \\c => xs.s1 ! c ++ conj.s ++ xs.s2 ! c ; - a = {g = xs.a.g; n = conjNumber conj.n xs.a.n; p = xs.a.p} + a = {g = xs.a.g; n = conjNumber conj.n xs.a.n; p = xs.a.p} ; + isPron = False } ; ConjAP conj xs = { s = \\sp,g,c,n => xs.s1 ! sp ! g ! c ! n ++ conj.s ++ xs.s2 ! sp ! g ! c ! n diff --git a/lib/src/slovenian/NounSlv.gf b/lib/src/slovenian/NounSlv.gf index 2479bd8c3..d7204e7e8 100644 --- a/lib/src/slovenian/NounSlv.gf +++ b/lib/src/slovenian/NounSlv.gf @@ -1,4 +1,4 @@ -concrete NounSlv of Noun = CatSlv ** open ResSlv in { +concrete NounSlv of Noun = CatSlv ** open ResSlv,Prelude in { lin DetCN det cn = { @@ -13,11 +13,21 @@ concrete NounSlv of Noun = CatSlv ** open ResSlv in { UseGen => Pl } ; p = P3 - } + } ; + isPron = False } ; - UsePN pn = {s = pn.s; a = {g=agender2gender pn.g; n=Sg; p=P3}} ; - UsePron p = p ; + UsePN pn = { + s = pn.s; + a = {g=agender2gender pn.g; n=Sg; p=P3}; + isPron = False + } ; + + UsePron p = { + s = p.s; + a = p.a; + isPron = True + } ; DetQuant quant num = { s = \\g,c => quant.s ! g ! c ! (numAgr2num ! num.n) ++ num.s ! g ! c; @@ -27,7 +37,8 @@ concrete NounSlv of Noun = CatSlv ** open ResSlv in { DetNP det = { s = det.s ! Masc ; - a = {g=Masc; n=case det.n of {UseNum n=>n; UseGen=>Pl}; p=P3}; + a = {g=Masc; n=case det.n of {UseNum n=>n; UseGen=>Pl}; p=P3} ; + isPron = False } ; PossPron p = { @@ -54,7 +65,8 @@ concrete NounSlv of Noun = CatSlv ** open ResSlv in { MassNP n = { s = \\c => n.s ! Indef ! c ! Sg ; - a = {g=agender2gender n.g; n=Sg; p=P3} + a = {g=agender2gender n.g; n=Sg; p=P3} ; + isPron = False } ; UseN n = {s = \\_ => n.s; g = n.g} ; diff --git a/lib/src/slovenian/ParadigmsSlv.gf b/lib/src/slovenian/ParadigmsSlv.gf index 87f9c1d60..39d23b3b4 100644 --- a/lib/src/slovenian/ParadigmsSlv.gf +++ b/lib/src/slovenian/ParadigmsSlv.gf @@ -590,7 +590,8 @@ oper Loc => loc; Instr=>instr } ; - a = {g=Neut; n=n; p=P3} + a = {g=Neut; n=n; p=P3} ; + isPron = False } ; mkInterj : Str -> Interj = diff --git a/lib/src/slovenian/ResSlv.gf b/lib/src/slovenian/ResSlv.gf index 1a47e4b45..0dcc903c4 100644 --- a/lib/src/slovenian/ResSlv.gf +++ b/lib/src/slovenian/ResSlv.gf @@ -1,4 +1,4 @@ -resource ResSlv = open ParamX in { +resource ResSlv = open ParamX, Prelude in { param Case = Nom | Gen | Dat | Acc | Loc | Instr; @@ -53,11 +53,15 @@ oper Neg => table {Past => "ni"; _ => "ne"} } ; - predV : (VForm => Str) -> Tense => Polarity => Agr => Str = - \v -> table { + predV : Bool -> (VForm => Str) -> Tense => Polarity => Agr => Str = + \ispron,v -> table { Pres => \\p,a => neg ! p ! Pres ++ v ! VPres a.n a.p ; - Past => \\p,a => neg ! p ! Past + sem_V ! a.n ! a.p ++ v ! VPastPart a.g a.n ; - Fut => \\p,a => neg ! p ! Fut ++ bom_V ! a.n ! a.p ++ v ! VPastPart a.g a.n ; + Past => \\p,a => case of { + => v ! VPastPart a.g a.n ++ sem_V ! a.n ! a.p ; + <_ ,_ > => neg ! p ! Past + sem_V ! a.n ! a.p ++ v ! VPastPart a.g a.n } ; + Fut => \\p,a => case of { + => v ! VPastPart a.g a.n ++ bom_V ! a.n ! a.p ; + <_ ,_ > => neg ! p ! Fut ++ bom_V ! a.n ! a.p ++ v ! VPastPart a.g a.n } ; Cond => \\p,a => neg ! p ! Cond ++ "bi" ++ v ! VPastPart a.g a.n } ; @@ -103,10 +107,13 @@ oper s : Tense => Anteriority => Polarity => Str } ; - mkClause : Str -> Agr -> VP -> Clause = - \subj,agr,vp -> { + mkClause : Str -> Agr -> Bool -> VP -> Clause = + \subj,agr,ispron,vp -> { s = \\t,a,p => - subj ++ predV vp.s ! t ! p ! agr ++ vp.s2 ! agr + case ispron of { + False => subj ++ predV ispron vp.s ! t ! p ! agr ++ vp.s2 ! agr ; + True => predV ispron vp.s ! t ! p ! agr ++ vp.s2 ! agr + } } ; insertObj : (Agr => Str) -> VP -> VP = \obj,vp -> vp ** { diff --git a/lib/src/slovenian/SentenceSlv.gf b/lib/src/slovenian/SentenceSlv.gf index fd5fefdbe..5d94f3aa6 100644 --- a/lib/src/slovenian/SentenceSlv.gf +++ b/lib/src/slovenian/SentenceSlv.gf @@ -1,7 +1,7 @@ concrete SentenceSlv of Sentence = CatSlv ** open Prelude, ResSlv in { lin - PredVP np vp = mkClause (np.s ! Nom) np.a vp ; + PredVP np vp = mkClause (np.s ! Nom) np.a np.isPron vp ; ImpVP vp = { s = \\pol,g,n => vp.s ! VImper2 n ++ vp.s2 ! {g=g; n=n; p=P2} ;