diff --git a/src/german/CatGer.gf b/src/german/CatGer.gf index 25496bf36..be5a5b3a9 100644 --- a/src/german/CatGer.gf +++ b/src/german/CatGer.gf @@ -68,7 +68,8 @@ concrete CatGer of Cat = DAP = {s,sp : Gender => Case => Str ; n : Number ; a : Adjf ; isDef,hasDefArt : Bool} ; Quant = { - s,sp : GenNum => Case => Str ; + s : Bool => GenNum => Case => Str ; -- True if leading DefArtSg is dropped + sp : GenNum => Case => Str ; -- and contracted with preposition a : Adjf ; isDefArt : Bool ; delCardOne : Bool -- delete following cardinal 1 (IndefArt and no_Quant) diff --git a/src/german/ExtendGer.gf b/src/german/ExtendGer.gf index bc363d189..ac2246799 100644 --- a/src/german/ExtendGer.gf +++ b/src/german/ExtendGer.gf @@ -26,11 +26,14 @@ concrete ExtendGer of Extend = (P = ParadigmsGer) in { lin - GenNP np = { - s,sp = \\gn,c => np.s ! False ! Gen ++ np.ext ++ np.rc ; - a = Strong ; - isDefArt = False ; - delCardOne = False + GenNP np = + let tab : GenNum => Case => Str = + \\gn,c => np.s ! False ! Gen ++ np.ext ++ np.rc + in {s = \\_ => tab ; + sp = tab ; + a = Strong ; + isDefArt = False ; + delCardOne = False } ; EmptyRelSlash slash = { diff --git a/src/german/MakeStructuralGer.gf b/src/german/MakeStructuralGer.gf index 4ec6b347a..50d7c5d5d 100644 --- a/src/german/MakeStructuralGer.gf +++ b/src/german/MakeStructuralGer.gf @@ -27,11 +27,13 @@ oper -- e.g. das selbe mmkQuant : Quant -> A -> Quant = \q,a -> q ** { - s,sp = \\gn,c => q.s ! gn ! c ++ a.s ! Posit ! agrAdj q.a gn c + s = \\b,gn,c => q.s ! b ! gn ! c ++ a.s ! Posit ! agrAdj q.a gn c ; + sp = \\gn,c => q.s ! False ! gn ! c ++ a.s ! Posit ! agrAdj q.a gn c } ; -- e.g. derjenige mmbQuant : Quant -> A -> Quant = \q,a -> q ** { - s,sp = \\gn,c => q.s ! gn ! c + a.s ! Posit ! agrAdj q.a gn c + s = \\b,gn,c => q.s ! b ! gn ! c + a.s ! Posit ! agrAdj q.a gn c ; + sp = \\gn,c => q.s ! False ! gn ! c + a.s ! Posit ! agrAdj q.a gn c } ; } diff --git a/src/german/NounGer.gf b/src/german/NounGer.gf index 2517be075..a15ad2230 100644 --- a/src/german/NounGer.gf +++ b/src/german/NounGer.gf @@ -71,11 +71,6 @@ concrete NounGer of Noun = CatGer ** open ResGer, MorphoGer, Prelude in { } ; oper - dropDefArtSg : Number -> Bool -> (GenNum => Case => Str) -> (Bool => GenNum => Case => Str) = - \n,isDefArt,qnt -> case of { - => table{True => \\gn,c => [] ; False => qnt} ; - _ => \\b => qnt - } ; einziger : AForm => Str = table{AMod gn c => "einzig" + adjEnding ! gn ! c ; _ => "einziges"} ; lin @@ -85,7 +80,6 @@ concrete NounGer of Noun = CatGer ** open ResGer, MorphoGer, Prelude in { a = quant.a ; d = quant.isDefArt ; isCardOne = case n of {Sg => num.isNum ; _ => False} ; - qunt : Bool => GenNum => Case => Str = dropDefArtSg n d quant.s ; nums : AForm => Str = \\af => case af of { AMod (GSg g) c => case of { => einziger ! af ; -- (ein,kein) einziger @@ -94,7 +88,7 @@ concrete NounGer of Noun = CatGer ** open ResGer, MorphoGer, Prelude in { _ => num.s ! APred} in { s,sp = \\b,g,c => let gn = gennum g n in - qunt ! b ! gn ! c ++ nums ! agrAdj a gn c ++ ord.s ! agrAdj a gn c ; + quant.s ! b ! gn ! c ++ nums ! agrAdj a gn c ++ ord.s ! agrAdj a gn c ; n = n ; a = a ; isDef = case a of {Strong => False ; _ => True} ; @@ -107,9 +101,8 @@ concrete NounGer of Noun = CatGer ** open ResGer, MorphoGer, Prelude in { a = quant.a ; d = quant.isDefArt ; isCardOne = case n of {Sg => num.isNum ; _ => False} ; - quants = dropDefArtSg n d quant.s ; quantsp : Bool => GenNum => Case => Str = - dropDefArtSg n d (case num.isNum of {True => quant.s ; False => quant.sp}) ; + case num.isNum of {True => quant.s ; False => \\b => quant.sp} ; nums : AForm => Str = \\af => case af of { AMod (GSg g) c => case of { => einziger ! af ; -- (k)ein einziger, drop cardinal "ein" of num @@ -119,7 +112,7 @@ concrete NounGer of Noun = CatGer ** open ResGer, MorphoGer, Prelude in { APred => num.s ! APred} in { s = \\b,g,c => let gn = gennum g n in - quants ! b ! gn ! c ++ nums ! agrAdj a gn c ; + quant.s ! b ! gn ! c ++ nums ! agrAdj a gn c ; sp = \\b,g,c => let gn = gennum g n in quantsp ! b ! gn ! c ++ nums ! agrAdj a gn c ; n = n ; @@ -129,8 +122,8 @@ concrete NounGer of Noun = CatGer ** open ResGer, MorphoGer, Prelude in { } ; PossPron p = { - s = \\gn,c => p.s ! NPPoss gn c ; -- mein (dritter) - sp = \\gn,c => p.sp ! PossF gn c ; -- meiner + s = \\_,gn,c => p.s ! NPPoss gn c ; -- mein (dritter) + sp = \\gn,c => p.sp ! PossF gn c ; -- meiner a = Mixed ; isDefArt = False ; delCardOne = False ; @@ -166,7 +159,7 @@ concrete NounGer of Noun = CatGer ** open ResGer, MorphoGer, Prelude in { af => n.s ! NOrd APred ++ BIND ++ a.s ! Superl ! af} -- drittbeste } ; DefArt = { - s = \\gn,c => artDef ! gn ! c ; + s = \\b,gn,c => case of { => [] ; _ => artDef ! gn ! c} ; sp = \\gn,c => case of { => "dessen" ; => "derer" ; @@ -180,8 +173,8 @@ concrete NounGer of Noun = CatGer ** open ResGer, MorphoGer, Prelude in { } ; IndefArt = { - s = table {GSg g => \\c => "ein" + pronEnding ! (GSg g) ! c ; - GPl => \\c => []} ; + s = \\_ => table {GSg g => \\c => "ein" + pronEnding ! (GSg g) ! c ; + GPl => \\c => []} ; sp = table {GSg g => \\c => "ein" + detEnding ! (GSg g) ! c ; GPl => caselist "einige" "einige" "einigen" "einiger"} ; a = MixedStrong ; -- Sg Mixed, Pl Strong diff --git a/src/german/StructuralGer.gf b/src/german/StructuralGer.gf index ff28926c5..e54a65dd3 100644 --- a/src/german/StructuralGer.gf +++ b/src/german/StructuralGer.gf @@ -103,17 +103,18 @@ concrete StructuralGer of Structural = CatGer ** } ; something_NP = nameNounPhrase Neutr {s = \\_ => "etwas"} ; somewhere_Adv = ss "irgendwo" ; - that_Quant = { - s,sp = \\gn,c => "jen" + detEnding ! gn ! c ; a = Weak ; isDefArt,delCardOne = False} ; + that_Quant = let jener : GenNum => Case => Str = \\gn,c => "jen" + detEnding ! gn ! c + in {s = \\_ => jener ; sp = jener ; a = Weak ; isDefArt,delCardOne = False} ; ---b that_NP = nameNounPhrase Neutr {s = caselist "das" "das" "dem" "dessen"} ; ---- there_Adv = ss "da" ; --- no variants in the rgl | ss "dort" ; there7to_Adv = ss "dahin" ; there7from_Adv = ss ["daher"] ; therefore_PConj = ss "deshalb" ; ---b these_NP = {s = caselist "diese" "diese" "diesen" "dieser" ; a = agrP3 Pl} ; + they_Pron = mkPronPers "sie" "sie" "ihnen" "ihrer" "ihr" Fem Pl P3 ; - this_Quant = { - s,sp = \\gn,c => "dies" + detEnding ! gn ! c ; a = Weak ; isDefArt, delCardOne = False} ; + this_Quant = let dieser : GenNum => Case => Str = \\gn,c => "dies" + detEnding ! gn ! c + in {s = \\_ => dieser ; sp = dieser ; a = Weak ; isDefArt, delCardOne = False} ; ---b this_NP = nameNounPhrase Neutr {s = caselist "dies" "dies" "diesem" "dieses"} ; ---- ---b those_NP = {s = caselist "jene" "jene" "jenen" "jener" ; a = agrP3 Pl} ; through_Prep = mkPrep "durch" P.accusative ; @@ -148,8 +149,8 @@ concrete StructuralGer of Structural = CatGer ** not_Predet = {s = \\_,_,_ => "nicht" ; c = noCase ; a = PAgNone} ; no_Quant = { - s = table {GSg g => \\c => "kein" + pronEnding ! GSg g ! c ; - GPl => \\c => "kein" + detEnding ! GPl ! c} ; + s = \\_ => table {GSg g => \\c => "kein" + pronEnding ! GSg g ! c ; + GPl => \\c => "kein" + detEnding ! GPl ! c} ; sp = \\gn,c => "kein" + detEnding ! gn ! c ; a = Mixed ; isDefArt = False ; delCardOne = True} ; -- HL kein+ein(er) => kein(er) if_then_Conj = {s1 = "wenn" ; s2 = "dann" ; n = Sg ; lock_Conj = <>} ; diff --git a/src/german/VerbGer.gf b/src/german/VerbGer.gf index 9053eb106..d5688a3be 100644 --- a/src/german/VerbGer.gf +++ b/src/german/VerbGer.gf @@ -37,7 +37,7 @@ concrete VerbGer of Verb = CatGer ** open Prelude, ResGer, Coordination in { insertInf inf vps) ** {c2 = v.c2 ; objCtrl = v.objCtrl} ; SlashV2A v ap = - insertAdj (ap.s ! APred) ap.c ap.ext (predV v) ** {c2 = v.c2; objCtrl = False} ; + insertAdj (ap.s ! APred ++ ap.s2 ! Nom) ap.c ap.ext (predV v) ** {c2 = v.c2; objCtrl = False} ; ComplSlash vps np = -- IL 24/04/2018 force reflexive in the VPSlash to take the agreement of np.