diff --git a/lib/resource-1.0/danish/IdiomDan.gf b/lib/resource-1.0/danish/IdiomDan.gf index df3483c70..b5a05271f 100644 --- a/lib/resource-1.0/danish/IdiomDan.gf +++ b/lib/resource-1.0/danish/IdiomDan.gf @@ -12,7 +12,7 @@ concrete IdiomDan of Idiom = CatDan ** (insertObj (\\_ => np.s ! rs.c) (predV verbBe))) ; CleftAdv ad s = mkClause "det" (agrP3 neutrum Sg) - (insertObj (\\_ => s.s ! Main) + (insertObj (\\_ => "som" ++ s.s ! Sub) (insertObj (\\_ => ad.s) (predV verbBe))) ; diff --git a/lib/resource-1.0/finnish/CatFin.gf b/lib/resource-1.0/finnish/CatFin.gf index b40ebe702..7515aa682 100644 --- a/lib/resource-1.0/finnish/CatFin.gf +++ b/lib/resource-1.0/finnish/CatFin.gf @@ -8,7 +8,7 @@ concrete CatFin of Cat = CommonX ** open ResFin, Prelude in { S = {s : Str} ; QS = {s : Str} ; - RS = {s : Agr => Str} ; + RS = {s : Agr => Str ; c : NPForm} ; -- Sentence @@ -25,7 +25,7 @@ concrete CatFin of Cat = CommonX ** open ResFin, Prelude in { -- Relative - RCl = {s : Tense => Anteriority => Polarity => Agr => Str} ; + RCl = {s : Tense => Anteriority => Polarity => Agr => Str ; c : NPForm} ; RP = {s : Number => NPForm => Str ; a : RAgr} ; -- Verb diff --git a/lib/resource-1.0/finnish/IdiomFin.gf b/lib/resource-1.0/finnish/IdiomFin.gf index d04585e25..d82e2a1b4 100644 --- a/lib/resource-1.0/finnish/IdiomFin.gf +++ b/lib/resource-1.0/finnish/IdiomFin.gf @@ -23,6 +23,18 @@ concrete IdiomFin of Idiom = CatFin ** s = \\t,a,p => cl.s ! t ! a ! p ! SDecl } ; +-- Notice the nominative in the cleft $NP$: "se on Matti josta Liisa pitää" + + CleftNP np rs = mkClause (\_ -> "se") (agrP3 Sg) + (insertExtrapos (rs.s ! np.a) + (insertObj (\\_,_,_ => np.s ! NPCase Nom) (predV olla))) ; + +-- This gives the almost forbidden "se on Porissa kun Matti asuu". + + CleftAdv ad s = mkClause (\_ -> "se") (agrP3 Sg) + (insertExtrapos ("kun" ++ s.s) + (insertObj (\\_,_,_ => ad.s) (predV olla))) ; + ImpersCl vp = mkClause noSubj (agrP3 Sg) vp ; GenericCl vp = mkClause noSubj (agrP3 Sg) { @@ -32,7 +44,6 @@ concrete IdiomFin of Idiom = CatFin ** sc = vp.sc } ; - ProgrVP vp = let inf = (vp.s ! VIInf Inf3Iness ! Simul ! Pos ! agrP3 Sg).fin ; @@ -44,6 +55,15 @@ concrete IdiomFin of Idiom = CatFin ** sc = vp.sc } ; +-- This gives "otetaan oluet" instead of "ottakaamme oluet". +-- The imperative is not available in a $VP$. + + ImpPl1 vp = + let vps = vp.s ! VIPass ! Simul ! Pos ! {n = Pl ; p = P1} + in + {s = vps.fin ++ vps.inf ++ vp.s2 ! True ! Pos ! {n = Pl ; p = P1} ++ vp.ext + } ; + oper olla = verbOlla ** {sc = NPCase Nom} ; diff --git a/lib/resource-1.0/finnish/RelativeFin.gf b/lib/resource-1.0/finnish/RelativeFin.gf index a7fc27eaf..3e1d80565 100644 --- a/lib/resource-1.0/finnish/RelativeFin.gf +++ b/lib/resource-1.0/finnish/RelativeFin.gf @@ -5,8 +5,9 @@ concrete RelativeFin of Relative = CatFin ** open Prelude, ResFin, MorphoFin in lin RelCl cl = { - s = \\t,a,p,_ => "siten" ++ "että" ++ cl.s ! t ! a ! p ! SDecl + s = \\t,a,p,_ => "siten" ++ "että" ++ cl.s ! t ! a ! p ! SDecl ; ---- sellainen + c = NPCase Nom } ; RelVP rp vp = { @@ -18,7 +19,8 @@ concrete RelativeFin of Relative = CatFin ** open Prelude, ResFin, MorphoFin in } ; cl = mkClause (subjForm {s = rp.s ! agr.n ; a = agr ; isPron = False} vp.sc) agr vp in - cl.s ! t ! ant ! b ! SDecl + cl.s ! t ! ant ! b ! SDecl ; + c = NPCase Nom } ; RelSlash rp slash = { @@ -27,7 +29,8 @@ concrete RelativeFin of Relative = CatFin ** open Prelude, ResFin, MorphoFin in cls = slash.s ! t ! a ! p ; who = appCompl True p slash.c2 (rp2np ag.n rp) in - who ++ cls + who ++ cls ; + c = slash.c2.c } ; FunRP p np rp = { diff --git a/lib/resource-1.0/finnish/SentenceFin.gf b/lib/resource-1.0/finnish/SentenceFin.gf index 75dcf014c..2f07f17aa 100644 --- a/lib/resource-1.0/finnish/SentenceFin.gf +++ b/lib/resource-1.0/finnish/SentenceFin.gf @@ -59,6 +59,9 @@ concrete SentenceFin of Sentence = CatFin ** open Prelude, ResFin in { UseCl t a p cl = {s = t.s ++ a.s ++ p.s ++ cl.s ! t.t ! a.a ! p.p ! SDecl} ; UseQCl t a p cl = {s = t.s ++ a.s ++ p.s ++ cl.s ! t.t ! a.a ! p.p} ; - UseRCl t a p cl = {s = \\r => t.s ++ a.s ++ p.s ++ cl.s ! t.t ! a.a ! p.p ! r} ; + UseRCl t a p cl = { + s = \\r => t.s ++ a.s ++ p.s ++ cl.s ! t.t ! a.a ! p.p ! r ; + c = cl.c + } ; } diff --git a/lib/resource-1.0/french/IdiomFre.gf b/lib/resource-1.0/french/IdiomFre.gf index 402fe728b..812455911 100644 --- a/lib/resource-1.0/french/IdiomFre.gf +++ b/lib/resource-1.0/french/IdiomFre.gf @@ -1,5 +1,5 @@ concrete IdiomFre of Idiom = CatFre ** - open PhonoFre, MorphoFre, ParadigmsFre, Prelude in { + open (P = ParamX), PhonoFre, MorphoFre, ParadigmsFre, Prelude in { flags optimize=all_subs ; @@ -17,11 +17,27 @@ concrete IdiomFre of Idiom = CatFre ** (mkClause "il" (agrP3 Masc Sg) (insertClit2 "y" (predV avoir_V))).s ! t ! a ! p ! Indic } ; + CleftNP np rs = mkClause elisCe (agrP3 Masc Sg) + (insertComplement (\\_ => rs.s ! Indic ! np.a) + (insertComplement (\\_ => np.s ! Ton rs.c) (predV copula))) ; + + CleftAdv ad s = mkClause elisCe (agrP3 Masc Sg) + (insertComplement (\\_ => conjThat ++ s.s ! Indic) + (insertComplement (\\_ => ad.s) (predV copula))) ; + + ProgrVP vp = insertComplement (\\a => "en" ++ "train" ++ elisDe ++ infVP vp a) (predV copula) ; + ImpPl1 vp = {s = + (mkClause [] {g = Fem ; n = Pl ; p = P1} vp).s ! P.Pres ! Simul ! Pos ! Indic + } ; + + oper + elisCe = elision "c" ; + } diff --git a/lib/resource-1.0/german/IdiomGer.gf b/lib/resource-1.0/german/IdiomGer.gf index b4575cc46..d6a65db6a 100644 --- a/lib/resource-1.0/german/IdiomGer.gf +++ b/lib/resource-1.0/german/IdiomGer.gf @@ -8,11 +8,11 @@ concrete IdiomGer of Idiom = CatGer ** GenericCl vp = mkClause "man" (agrP3 Sg) vp ; CleftNP np rs = mkClause "es" (agrP3 Sg) - (insertObj (\\_ => rs.s ! gennum np.a.g np.a.n) ---- + (insertExtrapos (rs.s ! gennum np.a.g np.a.n) ---- (insertObj (\\_ => np.s ! rs.c) (predV sein_V))) ; CleftAdv ad s = mkClause "es" (agrP3 Sg) - (insertObj (\\_ => s.s ! Main) + (insertExtrapos (conjThat ++ s.s ! Sub) (insertObj (\\_ => ad.s) (predV sein_V))) ; diff --git a/lib/resource-1.0/italian/IdiomIta.gf b/lib/resource-1.0/italian/IdiomIta.gf index 7ccf0d5e2..62cbc7118 100644 --- a/lib/resource-1.0/italian/IdiomIta.gf +++ b/lib/resource-1.0/italian/IdiomIta.gf @@ -1,5 +1,5 @@ concrete IdiomIta of Idiom = CatIta ** - open PhonoIta, MorphoIta, BeschIta, ParadigmsIta, Prelude in { + open (P = ParamX), PhonoIta, MorphoIta, BeschIta, ParadigmsIta, Prelude in { flags optimize=all_subs ; @@ -7,6 +7,14 @@ concrete IdiomIta of Idiom = CatIta ** ImpersCl vp = mkClause [] (agrP3 Masc Sg) vp ; GenericCl vp = mkClause "si" (agrP3 Masc Sg) vp ; ---- non se ci fanno cose + CleftNP np rs = mkClause [] (agrP3 Masc Sg) + (insertComplement (\\_ => rs.s ! Indic ! np.a) + (insertComplement (\\_ => np.s ! Ton rs.c) (predV copula))) ; + + CleftAdv ad s = mkClause [] (agrP3 Masc Sg) + (insertComplement (\\_ => conjThat ++ s.s ! Indic) + (insertComplement (\\_ => ad.s) (predV copula))) ; + ExistNP np = mkClause [] (agrP3 np.a.g np.a.n) (insertClit2 (elision "ci" "c'" "ci") @@ -17,7 +25,8 @@ concrete IdiomIta of Idiom = CatIta ** s = \\t,a,p,_ => ip.s ! Nom ++ (mkClause [] (agrP3 ip.a.g ip.a.n) - (insertClit2 (elision "ci" "c'" "ci") (predV copula))).s ! t ! a ! p ! Indic + (insertClit2 (elision "ci" "c'" "ci") + (predV copula))).s ! t ! a ! p ! Indic } ; ProgrVP vp = @@ -31,5 +40,9 @@ concrete IdiomIta of Idiom = CatIta ** ) (predV (essereV (verboV (stare_16 "stare")))) ; + ImpPl1 vp = {s = + (mkClause [] {g = Fem ; n = Pl ; p = P1} vp).s ! P.Pres ! Simul ! Pos ! Indic + } ; + } diff --git a/lib/resource-1.0/norwegian/IdiomNor.gf b/lib/resource-1.0/norwegian/IdiomNor.gf index eb9942c2b..313def85a 100644 --- a/lib/resource-1.0/norwegian/IdiomNor.gf +++ b/lib/resource-1.0/norwegian/IdiomNor.gf @@ -13,7 +13,7 @@ concrete IdiomNor of Idiom = CatNor ** (insertObj (\\_ => np.s ! rs.c) (predV verbBe))) ; CleftAdv ad s = mkClause "det" (agrP3 neutrum Sg) - (insertObj (\\_ => s.s ! Main) + (insertObj (\\_ => "som" ++ s.s ! Sub) (insertObj (\\_ => ad.s) (predV verbBe))) ; ExistNP np = diff --git a/lib/resource-1.0/romance/CatRomance.gf b/lib/resource-1.0/romance/CatRomance.gf index 32433410e..605df85e5 100644 --- a/lib/resource-1.0/romance/CatRomance.gf +++ b/lib/resource-1.0/romance/CatRomance.gf @@ -9,7 +9,7 @@ incomplete concrete CatRomance of Cat = S = {s : Mood => Str} ; QS = {s : QForm => Str} ; - RS = {s : Mood => Agr => Str} ; + RS = {s : Mood => Agr => Str ; c : Case} ; -- Sentence @@ -26,7 +26,10 @@ incomplete concrete CatRomance of Cat = -- Relative - RCl = {s : Agr => Tense => Anteriority => Polarity => Mood => Str} ; + RCl = { + s : Agr => Tense => Anteriority => Polarity => Mood => Str ; + c : Case + } ; RP = {s : Bool => AAgr => Case => Str ; a : AAgr ; hasAgr : Bool} ; -- Verb diff --git a/lib/resource-1.0/romance/RelativeRomance.gf b/lib/resource-1.0/romance/RelativeRomance.gf index 2b6565468..7ea683125 100644 --- a/lib/resource-1.0/romance/RelativeRomance.gf +++ b/lib/resource-1.0/romance/RelativeRomance.gf @@ -6,7 +6,8 @@ incomplete concrete RelativeRomance of Relative = lin RelCl cl = { - s = \\ag,t,a,p,m => pronSuch ! ag ++ conjThat ++ cl.s ! t ! a ! p ! m + s = \\ag,t,a,p,m => pronSuch ! ag ++ conjThat ++ cl.s ! t ! a ! p ! m ; + c = Nom } ; --- more efficient to compile than case inside mkClause; see log.txt @@ -15,18 +16,20 @@ incomplete concrete RelativeRomance of Relative = (mkClause (rp.s ! False ! {g = ag.g ; n = ag.n} ! Nom) {g = rp.a.g ; n = rp.a.n ; p = P3} - vp).s} ; + vp).s ; c = Nom} ; False => {s = \\ag => (mkClause (rp.s ! False ! {g = ag.g ; n = ag.n} ! Nom) ag - vp).s + vp).s ; c = Nom } } ; RelSlash rp slash = { s = \\ag,t,a,p,m => - slash.c2.s ++ rp.s ! False ! {g = ag.g ; n = ag.n} ! slash.c2.c ++ slash.s ! t ! a ! p ! m + slash.c2.s ++ rp.s ! False ! {g = ag.g ; n = ag.n} ! slash.c2.c ++ + slash.s ! t ! a ! p ! m ; + c = Acc } ; FunRP p np rp = { diff --git a/lib/resource-1.0/romance/SentenceRomance.gf b/lib/resource-1.0/romance/SentenceRomance.gf index dbaeee2e5..ca1bd0278 100644 --- a/lib/resource-1.0/romance/SentenceRomance.gf +++ b/lib/resource-1.0/romance/SentenceRomance.gf @@ -35,7 +35,9 @@ incomplete concrete SentenceRomance of Sentence = UseCl t a p cl = {s = \\o => t.s ++ a.s ++ p.s ++ cl.s ! t.t ! a.a ! p.p ! o} ; UseQCl t a p cl = {s = \\q => t.s ++ a.s ++ p.s ++ cl.s ! t.t ! a.a ! p.p ! q} ; - UseRCl t a p cl = - {s = \\r,ag => t.s ++ a.s ++ p.s ++ cl.s ! ag ! t.t ! a.a ! p.p ! r} ; + UseRCl t a p cl = { + s = \\r,ag => t.s ++ a.s ++ p.s ++ cl.s ! ag ! t.t ! a.a ! p.p ! r ; + c = cl.c + } ; } diff --git a/lib/resource-1.0/spanish/IdiomSpa.gf b/lib/resource-1.0/spanish/IdiomSpa.gf index 541ecc7e6..a112230f3 100644 --- a/lib/resource-1.0/spanish/IdiomSpa.gf +++ b/lib/resource-1.0/spanish/IdiomSpa.gf @@ -1,5 +1,5 @@ concrete IdiomSpa of Idiom = CatSpa ** - open MorphoSpa, ParadigmsSpa, BeschSpa, Prelude in { + open (P = ParamX), MorphoSpa, ParadigmsSpa, BeschSpa, Prelude in { flags optimize=all_subs ; @@ -7,6 +7,15 @@ concrete IdiomSpa of Idiom = CatSpa ** ImpersCl vp = mkClause [] (agrP3 Masc Sg) vp ; GenericCl vp = mkClause "se" (agrP3 Masc Sg) vp ; ---- just Italian ? + CleftNP np rs = mkClause [] (agrP3 Masc Sg) + (insertComplement (\\_ => rs.s ! Indic ! np.a) + (insertComplement (\\_ => np.s ! Ton rs.c) (predV copula))) ; + + CleftAdv ad s = mkClause [] (agrP3 Masc Sg) + (insertComplement (\\_ => conjThat ++ s.s ! Indic) + (insertComplement (\\_ => ad.s) (predV copula))) ; + + ExistNP np = mkClause [] (agrP3 Masc Sg) (insertComplement (\\_ => np.s ! Ton Acc) (predV (verboV (hay_3 "haber")))) ; @@ -27,4 +36,8 @@ concrete IdiomSpa of Idiom = CatSpa ** ) (predV (verboV (estar_2 "estar"))) ; + ImpPl1 vp = {s = + (mkClause [] {g = Fem ; n = Pl ; p = P1} vp).s ! P.Pres ! Simul ! Pos ! Indic + } ; + } diff --git a/lib/resource-1.0/swedish/IdiomSwe.gf b/lib/resource-1.0/swedish/IdiomSwe.gf index 1456c2720..412391529 100644 --- a/lib/resource-1.0/swedish/IdiomSwe.gf +++ b/lib/resource-1.0/swedish/IdiomSwe.gf @@ -12,7 +12,7 @@ concrete IdiomSwe of Idiom = CatSwe ** (insertObj (\\_ => np.s ! rs.c) (predV verbBe))) ; CleftAdv ad s = mkClause "det" (agrP3 neutrum Sg) - (insertObj (\\_ => s.s ! Main) + (insertObj (\\_ => "som" ++ s.s ! Sub) (insertObj (\\_ => ad.s) (predV verbBe))) ;