diff --git a/lib/src/finnish/AdjectiveFin.gf b/lib/src/finnish/AdjectiveFin.gf index 32430933b..d725780fb 100644 --- a/lib/src/finnish/AdjectiveFin.gf +++ b/lib/src/finnish/AdjectiveFin.gf @@ -6,10 +6,10 @@ concrete AdjectiveFin of Adjective = CatFin ** open ResFin, StemFin, Prelude in lin PositA a = { - s = \\_ => (snoun2nounSep {s = \\f => a.s ! Posit ! sAN f ; h = a.h}).s + s = \\_ => sAdjFull2nforms Posit a ; } ; ComparA a np = - let acomp = (snoun2nounSep {s = \\f => a.s ! Compar ! sAN f ; h = a.h}).s in { + let acomp = sAdjFull2nforms Compar a in { s = \\isMod,af => case isMod of { True => np.s ! NPCase Part ++ acomp ! af ; -- minua isompi _ => acomp ! af ++ "kuin" ++ np.s ! NPSep -- isompi kuin minä @@ -19,7 +19,7 @@ concrete AdjectiveFin of Adjective = CatFin ** open ResFin, StemFin, Prelude in s = \\m,af => ad.s ++ ap.s ! m ! af ++ ad.p ++ np.s ! NPSep } ; UseComparA a = { - s = \\_ => (snoun2nounSep {s = \\f => a.s ! Compar ! sAN f ; h = a.h}).s + s = \\_ => sAdjFull2nforms Compar a } ; -- $SuperlA$ belongs to determiner syntax in $Noun$. @@ -30,13 +30,13 @@ concrete AdjectiveFin of Adjective = CatFin ** open ResFin, StemFin, Prelude in ComplA2 a np = { s = \\isMod,af => - preOrPost isMod (appCompl True Pos a.c2 np) ((snoun2nounSep {s = \\f => a.s ! Posit ! sAN f ; h = a.h}).s ! af) + preOrPost isMod (appCompl True Pos a.c2 np) (sAdjFull2nforms Posit a ! af) } ; ReflA2 a = { s = \\isMod,af => preOrPost isMod - (appCompl True Pos a.c2 (reflPron (agrP3 Sg))) ((snoun2nounSep {s = \\f => a.s ! Posit ! sAN f ; h = a.h}).s ! af) + (appCompl True Pos a.c2 (reflPron (agrP3 Sg))) (sAdjFull2nforms Posit a ! af) } ; SentAP ap sc = { @@ -52,7 +52,7 @@ concrete AdjectiveFin of Adjective = CatFin ** open ResFin, StemFin, Prelude in } ; UseA2 a = { - s = \\_ => (snoun2nounSep {s = \\f => a.s ! Posit ! sAN f ; h = a.h}).s + s = \\_ => sAdjFull2nforms Posit a } ; } diff --git a/lib/src/finnish/NounFin.gf b/lib/src/finnish/NounFin.gf index fd7ce31ad..afc1f82e5 100644 --- a/lib/src/finnish/NounFin.gf +++ b/lib/src/finnish/NounFin.gf @@ -151,7 +151,7 @@ concrete NounFin of Noun = CatFin ** open ResFin, MorphoFin, StemFin, Prelude in n = num.n } ; - OrdSuperl a = snoun2nounSep {s = \\nc => a.s ! Superl ! sAN nc ; h = a.h} ; + OrdSuperl a = {s = sAdjFull2nforms Superl a ; h = a.h} ; OrdNumeralSuperl n a = -- kolmanneksi suurin {s = \\f => n.s ! NOrd (NCase Sg Transl) ++ (snoun2nounSep {s = \\nc => a.s ! Superl ! sAN nc ; h = a.h}).s ! f} ; diff --git a/lib/src/finnish/StemFin.gf b/lib/src/finnish/StemFin.gf index 7421d9538..280be6e48 100644 --- a/lib/src/finnish/StemFin.gf +++ b/lib/src/finnish/StemFin.gf @@ -51,6 +51,9 @@ oper oper SAdj = {s : SAForm => Str ; h : Harmony} ; + SAdjFull = {s : Degree => SAForm => Str ; h : Harmony} ; + + sAdjFull2nforms : Degree -> SAdjFull -> NForm => Str = \d,a -> (snoun2nounSep {s = \\nc => a.s ! d ! sAN nc ; h = a.h}).s ; snoun2sadj : SNoun -> SAdj = snoun2sadjComp True ; @@ -70,7 +73,7 @@ oper sAAdv : SAForm = AAdv ; sANGen : (SAForm => Str) -> Str = \a -> a ! AN (NCase Sg Gen) ; - mkAdj : (hyva,parempi,paras : SNoun) -> (hyvin,paremmin,parhaiten : Str) -> {s : Degree => SAForm => Str ; h : Harmony} = \h,p,ps,hn,pn,ph -> { + mkAdj : (hyva,parempi,paras : SNoun) -> (hyvin,paremmin,parhaiten : Str) -> SAdjFull = \h,p,ps,hn,pn,ph -> { s = table { Posit => table { AN nf => h.s ! nf ; diff --git a/lib/src/finnish/stemmed/StemFin.gf b/lib/src/finnish/stemmed/StemFin.gf index 550a12c2e..965314a40 100644 --- a/lib/src/finnish/stemmed/StemFin.gf +++ b/lib/src/finnish/stemmed/StemFin.gf @@ -125,6 +125,9 @@ param oper SAdj = {s : SAForm => Str ; h : Harmony} ; + SAdjFull = {s : Degree => SAForm => Str ; h : Harmony} ; + + sAdjFull2nforms : Degree -> SAdjFull -> NForm => Str = \d,a -> (snoun2nounSep {s = \\nc => a.s ! d ! sAN nc ; h = a.h}).s ; snoun2sadj : SNoun -> SAdj = snoun2sadjComp True ; diff --git a/lib/src/finnish/tagged/StemFin.gf b/lib/src/finnish/tagged/StemFin.gf index 220078b4b..ea37fb44f 100644 --- a/lib/src/finnish/tagged/StemFin.gf +++ b/lib/src/finnish/tagged/StemFin.gf @@ -49,6 +49,10 @@ oper oper SAForm : Type = SNForm ; SAdj : Type = SNoun ; + SAdjFull = {s : Degree => SAForm => Str ; h : Harmony} ; + + sAdjFull2nforms : Degree -> SAdjFull -> NForm => Str = \d,a -> + \\nf => tagWord (adjectiveTag ++ consTag (tagDegree d) (tagNForm nf)) (a.s ! Posit ! 0) ; ---- order diff from UD snoun2sadj : SNoun -> SAdj = snoun2sadjComp True ;