diff --git a/lib/src/finnish/ExtraFin.gf b/lib/src/finnish/ExtraFin.gf index 57a531a3e..fe1679ac6 100644 --- a/lib/src/finnish/ExtraFin.gf +++ b/lib/src/finnish/ExtraFin.gf @@ -270,4 +270,27 @@ concrete ExtraFin of ExtraFinAbs = CatFin ** h = Back ; ---- TODO should be ap.h, which does not exist } ; + lincat + RNP = {s : Agr => NPForm => Str ; isPron : Bool} ; + lin + ReflRNP vps rnp = insertObjPre False + (\fin,b,agr -> appCompl fin b vps.c2 + {s = \\npf => rnp.s ! agr ! npf ; a = agr ; isPron = rnp.isPron}) + vps ; + + ReflPoss num cn = { + s = \\agr, npf => + let + quant : NounFin.Quant = lin Quant { -- possessive pronoun with suffix only + s2 : Harmony => Str = \\harm => possSuffixGen harm agr ; + s1,sp = \\_,_ => [] ; isNum,isNeg = False ; isPoss,isDef = True + } ; + det = NounFin.DetQuant quant num + in + (NounFin.DetCN det cn).s ! npf ; + isPron = False + } ; + + + } diff --git a/lib/src/finnish/ExtraFinAbs.gf b/lib/src/finnish/ExtraFinAbs.gf index 3fa884d95..e5822df49 100644 --- a/lib/src/finnish/ExtraFinAbs.gf +++ b/lib/src/finnish/ExtraFinAbs.gf @@ -4,7 +4,9 @@ abstract ExtraFinAbs = Extra [ PassVPSlash, PassAgentVPSlash, VPI,ListVPI,BaseVPI,ConsVPI,MkVPI,ComplVPIVV,ConjVPI, VPS,ListVPS,BaseVPS,ConsVPS,ConjVPS,MkVPS,PredVPS,ConjVPS,Tense,Temp,Pol,S, - VV,VP,Conj,NP,Quant,IAdv,IComp,ICompAP,IAdvAdv,Adv,AP, Pron, RP, ProDrop, AdjAsCN] ** { + VV,VP,Conj,NP,Quant,IAdv,IComp,ICompAP,IAdvAdv,Adv,AP, Pron, RP, ProDrop, AdjAsCN, + RNP,ReflRNP,ReflPoss + ] ** { flags coding=utf8 ; fun diff --git a/lib/src/german/ExtraGer.gf b/lib/src/german/ExtraGer.gf index 09f5f86c1..c4f8b2f2a 100644 --- a/lib/src/german/ExtraGer.gf +++ b/lib/src/german/ExtraGer.gf @@ -149,6 +149,14 @@ concrete ExtraGer of ExtraGerAbs = CatGer ** ConjVPS = conjunctDistrTable2 Order Agr ; + lincat + RNP = {s : Agr => Case => Str} ; + lin + ReflRNP vps rnp = + insertObj (\\a => appPrep vps.c2 + (\\k => usePrepC k (\c -> rnp.s ! a ! c))) vps ; + + ReflPoss num cn = {s = \\a,c => num.s ! cn.g ! c ++ possPron a num.n cn.g c ++ cn.s ! adjfCase Strong c ! num.n ! c} ; -- implementation of some of the relevant Foc rules from Extra diff --git a/lib/src/german/ExtraGerAbs.gf b/lib/src/german/ExtraGerAbs.gf index 7e1ae97a8..84b572aab 100644 --- a/lib/src/german/ExtraGerAbs.gf +++ b/lib/src/german/ExtraGerAbs.gf @@ -3,7 +3,9 @@ abstract ExtraGerAbs = Extra [ VPS,ListVPS,BaseVPS,ConsVPS,ConjVPS,MkVPS,PredVPS,EmptyRelSlash, VPSlash, PassVPSlash, PassAgentVPSlash, CompIQuant, PastPartAP, PastPartAgentAP, Temp,Tense,Pol,S,NP,VV,VP,Conj,IAdv,IQuant,IComp,ICompAP,IAdvAdv,Adv,AP, - Foc,FocObj,FocAdv,FocAP,UseFoc] ** { + Foc,FocObj,FocAdv,FocAP,UseFoc, + RNP,ReflRNP,ReflPoss + ] ** { flags coding=utf8; cat @@ -23,4 +25,5 @@ abstract ExtraGerAbs = Extra [ VPass : V -> FClause ; -- (es) wird getanzt AdvFor : Adv -> FClause -> FClause ; -- es wird heute gelacht - addition of adverbs FtoCl : FClause -> Cl ; -- embedding FClause within the RGL, to allow generation of S, Utt, etc. + } diff --git a/lib/src/german/ResGer.gf b/lib/src/german/ResGer.gf index 23d9cc612..8a8a09df6 100644 --- a/lib/src/german/ResGer.gf +++ b/lib/src/german/ResGer.gf @@ -780,6 +780,38 @@ resource ResGer = ParamX ** open Prelude in { Ag _ Pl P3 => caselist "sie" "sich" "sich" "ihrer" } ; + possPron : Agr -> Number -> Gender -> Case -> Str = \a,n,g,c -> case of { + => caselist "mein" "meinen" "meinem" "meines" ! c ; + => caselist "meine" "meine" "meiner" "meiner" ! c ; + => caselist "mein" "mein" "meinem" "meines" ! c ; + => caselist "meine" "meine" "meinen" "meiner" ! c ; + => caselist "dein" "deinen" "deinem" "deines" ! c ; + => caselist "deine" "deine" "deiner" "deiner" ! c ; + => caselist "dein" "dein" "deinem" "deines" ! c ; + => caselist "deine" "deine" "deinen" "deiner" ! c ; + + => caselist "sein" "seinen" "seinem" "seines" ! c ; + => caselist "seine" "seine" "seiner" "seiner" ! c ; + => caselist "sein" "sein" "seinem" "seines" ! c ; + => caselist "seine" "seine" "seinen" "seiner" ! c ; + + => caselist "ihr" "ihren" "ihrem" "ihres" ! c ; + => caselist "ihre" "ihre" "ihrer" "ihrer" ! c ; + => caselist "ihr" "ihr" "ihrem" "ihres" ! c ; + => caselist "ihre" "ihre" "ihren" "ihrer" ! c ; + + => caselist "unser" "unseren" "unserem" "unseres" ! c ; + => caselist "unsere" "unsere" "unserer" "unserer" ! c ; + => caselist "unser" "unser" "unserem" "unseres" ! c ; + => caselist "unsere" "unsere" "unseren" "unserer" ! c ; + + => caselist "euer" "euren" "eurem" "eures" ! c ; + => caselist "eure" "eure" "eurer" "eurer" ! c ; + => caselist "euer" "euer" "eurem" "eures" ! c ; + => caselist "eure" "eure" "euren" "eurer" ! c + + } ; + conjThat : Str = "dass" ; conjThan : Str = "als" ;