diff --git a/src/finnish/AdjectiveFin.gf b/src/finnish/AdjectiveFin.gf index d725780fb..227695dea 100644 --- a/src/finnish/AdjectiveFin.gf +++ b/src/finnish/AdjectiveFin.gf @@ -5,54 +5,63 @@ concrete AdjectiveFin of Adjective = CatFin ** open ResFin, StemFin, Prelude in lin - PositA a = { + PositA a = a ** { s = \\_ => sAdjFull2nforms Posit a ; } ; - ComparA a np = - let acomp = sAdjFull2nforms Compar a in { + ComparA a np = + let acomp = sAdjFull2nforms Compar a in a ** { s = \\isMod,af => case isMod of { True => np.s ! NPCase Part ++ acomp ! af ; -- minua isompi _ => acomp ! af ++ "kuin" ++ np.s ! NPSep -- isompi kuin minä - } + } ; + hasPrefix = False } ; - CAdvAP ad ap np = { - s = \\m,af => ad.s ++ ap.s ! m ! af ++ ad.p ++ np.s ! NPSep + CAdvAP ad ap np = ap ** { + s = \\m,af => ad.s ++ ap.s ! m ! af ++ ad.p ++ np.s ! NPSep ; + hasPrefix = False } ; - UseComparA a = { + UseComparA a = a ** { s = \\_ => sAdjFull2nforms Compar a } ; -- $SuperlA$ belongs to determiner syntax in $Noun$. AdjOrd ord = { - s = \\_ => ord.s + s = \\_ => ord.s ; + p = [] ; hasPrefix = False } ; ComplA2 a np = { s = \\isMod,af => - preOrPost isMod (appCompl True Pos a.c2 np) (sAdjFull2nforms Posit a ! af) + preOrPost isMod (appCompl True Pos a.c2 np) (sAdjFull2nforms Posit a ! af) ; + p = [] ; hasPrefix = False } ; ReflA2 a = { s = \\isMod,af => preOrPost isMod - (appCompl True Pos a.c2 (reflPron (agrP3 Sg))) (sAdjFull2nforms Posit a ! af) + (appCompl True Pos a.c2 (reflPron (agrP3 Sg))) (sAdjFull2nforms Posit a ! af) ; + p = [] ; hasPrefix = False } ; - SentAP ap sc = { - s = \\b,a => ap.s ! b ! a ++ sc.s + SentAP ap sc = ap ** { + s = \\b,a => ap.s ! b ! a ++ sc.s ; + hasPrefix = False } ; - AdAP ada ap = { - s = \\b,af => ada.s ++ ap.s ! b ! af + AdAP ada ap = ap ** { + s = \\b,af => ada.s ++ ap.s ! b ! af ; + hasPrefix = False } ; - AdvAP ap adv = { - s = \\b,af => adv.s ++ ap.s ! b ! af -- luonnostaan vaalea + AdvAP ap adv = ap ** { + s = \\b,af => adv.s ++ ap.s ! b ! af ; -- luonnostaan vaalea + hasPrefix = False } ; UseA2 a = { - s = \\_ => sAdjFull2nforms Posit a + s = \\_ => sAdjFull2nforms Posit a ; + p = [] ; hasPrefix = False } ; } diff --git a/src/finnish/CatFin.gf b/src/finnish/CatFin.gf index 3607e78e5..e6e8f174e 100644 --- a/src/finnish/CatFin.gf +++ b/src/finnish/CatFin.gf @@ -42,7 +42,7 @@ concrete CatFin of Cat = CommonX ** open ResFin, StemFin, Prelude in { -- The $Bool$ tells whether usage is modifying (as opposed to -- predicative), e.g. "x on suurempi kuin y" vs. "y:tä suurempi luku". - AP = {s : Bool => NForm => Str} ; + AP = {s : Bool => NForm => Str ; p : Str ; hasPrefix : Bool} ; -- Noun @@ -89,7 +89,7 @@ concrete CatFin of Cat = CommonX ** open ResFin, StemFin, Prelude in { V2V = SVerb1 ** {c2 : Compl ; vi : VVType} ; ---- infinitive form V3 = SVerb1 ** {c2, c3 : Compl} ; - A = {s : Degree => SAForm => Str ; h : Harmony} ; + A = {s : Degree => SAForm => Str ; h : Harmony ; p : Str ; hasPrefix : Bool} ; A2 = {s : Degree => SAForm => Str ; h : Harmony ; c2 : Compl} ; N = SNoun ; diff --git a/src/finnish/ConjunctionFin.gf b/src/finnish/ConjunctionFin.gf index ba95340ad..9fb39a33d 100644 --- a/src/finnish/ConjunctionFin.gf +++ b/src/finnish/ConjunctionFin.gf @@ -16,7 +16,7 @@ concrete ConjunctionFin of Conjunction = isPron = False ; isNeg = ss.isNeg } ; - ConjAP conj ss = conjunctDistrTable2 Bool NForm conj ss ; + ConjAP conj ss = conjunctDistrTable2 Bool NForm conj ss ** { hasPrefix = False ; p = [] } ; ConjRS conj ss = conjunctDistrTable Agr conj ss ** { c = ss.c diff --git a/src/finnish/Kotus.gf b/src/finnish/Kotus.gf index b5fe474fe..802432d68 100644 --- a/src/finnish/Kotus.gf +++ b/src/finnish/Kotus.gf @@ -41,11 +41,19 @@ oper (s + "n") (init s + case a of {"a" => "o" ; _ => "ö"} + "j" + a) ; d09A : Str -> NForms -- 1040 ääniraita - = \s -> let a = last s in dSilakka s - (weakGrade s + "n") - (init s + case a of {"a" => "o" ; _ => "ö"} + "j" + a) ; + = \s -> case s of { + x + "aaka" => dSilakka s (x+"aa'an") (x+"aakoja") ; + x + "aika" => dSilakka s (x+"ajan") (x+"aikoja") ; -- lots of compound words in NewDictFin that end in aika, but are not analysed as compounds + _ => let a = last s + in dSilakka s + (weakGrade s + "n") + (init s + case a of {"a" => "o" ; _ => "ö"} + "j" + a) + } ; d10 : Str -> NForms -- 2119 äänittäjä - = \s -> dSilakka s (s + "n") (init s + "i" + vowelHarmony (last s)) ; + = \s -> case s of { + x+"poika" => dSilakka s (x+"pojan") (x+"poikia") ; + _ => dSilakka s (s + "n") (init s + "i" + vowelHarmony (last s)) + } ; d10A : Str -> NForms -- 284 änkkä = \s -> dSilakka s (weakGrade s + "n") (init s + "i" + vowelHarmony (last s)) ; d11 : Str -> NForms -- 46 ödeema diff --git a/src/finnish/MorphoFin.gf b/src/finnish/MorphoFin.gf index e1a2580ec..7edd84bae 100644 --- a/src/finnish/MorphoFin.gf +++ b/src/finnish/MorphoFin.gf @@ -858,7 +858,8 @@ resource MorphoFin = ResFin ** open Prelude in { ("hk" | "tk") + _ => kukko ; -- *tahko-tahon, *pitkä-pitkän ("f"|"s") + ("k" | "p" | "t") + _ => kukko ; -- *lasku-lasvun, *raspi-rasvin, *lastu-lasdun, *afta-aftan ("k"|"p") + "t" + _ => kukko ; -- *projekti-projekdin - x + "ku" => ku + x + "vu" ; + "uku" => ku + "uvu" ; + "yky" => ku + "yvy" ; x + "k" + ("a" | "e" | "i" | "o" | "u" | "y" | "ä" | "ö") => ku + x + o ; x + "p" + ("a" | "e" | "i" | "o" | "u" | "y" | "ä" | "ö") => ku + x + "v" + o ; x + "t" + ("a" | "e" | "i" | "o" | "u" | "y" | "ä" | "ö") => ku + x + "d" + o ; @@ -882,7 +883,7 @@ resource MorphoFin = ResFin ** open Prelude in { ("tk" | "hk" | "sk" | "sp" | "st") + _ => nke ; -- viuhke,kuiske a + k@("k"|"p"|"t") + e@("e"|"a"|"ä"|"u"|"y"|"i"|"o"|"ö") => a + k + k + e ; a + "d" + e@("e"|"a"|"ä"|"u"|"i"|"o"|"ö") => a + "t" + e ; - s + a@("a" | "ä") + "e" => s + a + "ke" ; -- säe, tae + s + a@("a"|"ä"|"o"|"ö") + "e" => s + a + "ke" ; -- säe, tae, koe s + "ui" => s + "uki" ; -- ruis s + "aa" => s + "aka" ; -- taata s + "i" + a@("a" | "e" | "i") => s + "ik" + a ; -- liata, siitä, pietä diff --git a/src/finnish/NewDictFin.gf b/src/finnish/NewDictFin.gf index d92da5c7c..3ee742b82 100644 --- a/src/finnish/NewDictFin.gf +++ b/src/finnish/NewDictFin.gf @@ -327,8 +327,8 @@ lin aiheutua_V = mkV {s = c52A "aiheutua"} ; lin aiheutus_N = mkN {s = d39 "aiheutus"} ; lin aihio_N = mkN {s = d03 "aihio"} ; lin aijai_Adv = mkAdv {s = c99 "aijai"} ; -lin aika_1_N = mkN {s = d09A "aika"} ; -lin aika_2_Adv = mkAdv {s = c99 "aika"} ; +lin aika_N = mkN {s = d09A "aika"} ; +lin aika_Adv = mkAdv {s = c99 "aika"} ; lin aikaansaannos_N = mkN {s = d39 "aikaansaannos"} ; lin aikaansaapa_N = mkN {s = d10A "aikaansaapa"} ; lin aikaansaava_N = mkN {s = d10 "aikaansaava"} ; @@ -4583,8 +4583,8 @@ lin haaste_N = mkN {s = d48 "haaste"} ; lin haasteaika_N = mkN {s = d09A "haasteaika"} ; lin haasteellinen_N = mkN {s = d38 "haasteellinen"} ; lin haastella_V = mkV {s = c67 "haastella"} ; -lin haava_1_N = mkN {s = d09 "haava"} ; -lin haava_2_Adv = mkAdv {s = c99 "haava"} ; +lin haava_N = mkN {s = d09 "haava"} ; +lin haava_Adv = mkAdv {s = c99 "haava"} ; lin haavainen_N = mkN {s = d38 "haavainen"} ; lin haavakko_N = mkN {s = d04A "haavakko"} ; lin haavauma_N = mkN {s = d10 "haavauma"} ; @@ -9916,8 +9916,7 @@ lin kallistaa_1_V = mkV {s = c53 "kallistaa"} ; lin kallistaa_2_V = mkV {s = c53 "kallistaa"} ; lin kallistella_V = mkV {s = c67 "kallistella"} ; lin kallistelu_N = mkN {s = d02 "kallistelu"} ; -lin kallistua_1_V = mkV {s = c52 "kallistua"} ; -lin kallistua_2_V = mkV {s = c52 "kallistua"} ; +lin kallistua_V = mkV {s = c52 "kallistua"} ; lin kallistus_N = mkN {s = d39 "kallistus"} ; lin kallistuvakorinen_N = mkN {s = d38 "kallistuvakorinen"} ; lin kallo_N = mkN {s = d01 "kallo"} ; @@ -12120,8 +12119,7 @@ lin kimputus_N = mkN {s = d39 "kimputus"} ; lin kimröökki_N = mkN {s = d05A "kimröökki"} ; lin kimuli_N = mkN {s = d06 "kimuli"} ; lin kimurantti_N = mkN {s = d05A "kimurantti"} ; -lin kina_1_N = mkN {s = d09 "kina"} ; -lin kina_2_N = mkN {s = d09 "kina"} ; +lin kina_N = mkN {s = d09 "kina"} ; lin kinailla_V = mkV {s = c67 "kinailla"} ; lin kinailu_N = mkN {s = d02 "kinailu"} ; lin kinastella_V = mkV {s = c67 "kinastella"} ; @@ -12786,12 +12784,10 @@ lin kokkareinen_N = mkN {s = d38 "kokkareinen"} ; lin kokkaroitua_V = mkV {s = c52A "kokkaroitua"} ; lin kokkaus_N = mkN {s = d39 "kokkaus"} ; lin kokkeli_N = mkN {s = d06 "kokkeli"} ; -lin kokki_1_N = mkN {s = d05A "kokki"} ; -lin kokki_2_N = mkN {s = d05A "kokki"} ; -lin kokko_1_N = mkN {s = d01A "kokko"} ; -lin kokko_2_N = mkN {s = d01A "kokko"} ; -lin koko_1_N = mkN {s = d01A "koko"} ; -lin koko_2_Adv = mkAdv {s = c99 "koko"} ; +lin kokki_N = mkN {s = d05A "kokki"} ; +lin kokko_N = mkN {s = d01A "kokko"} ; +lin koko_N = mkN {s = d01A "koko"} ; +lin koko_Adv = mkAdv {s = c99 "koko"} ; lin kokoaja_N = mkN {s = d10 "kokoaja"} ; lin kokoelma_N = mkN {s = d10 "kokoelma"} ; lin kokoilla_V = mkV {s = c67 "kokoilla"} ; @@ -13653,7 +13649,7 @@ lin kouruilla_V = mkV {s = c67 "kouruilla"} ; lin kouruttaa_V = mkV {s = c53A "kouruttaa"} ; lin kouruuntua_V = mkV {s = c52A "kouruuntua"} ; lin koutsi_N = mkN {s = d05 "koutsi"} ; -lin kova_A = mkA {s = d10 "kova"} ; +lin kova_A = mkA (mkN {s = d10 "kova"}) "kovempi" "kovin" ; lin kovaa_Adv = mkAdv {s = c99 "kovaa"} ; lin kovaan_Adv = mkAdv {s = c99 "kovaan"} ; lin kovakorvaisuus_N = mkN {s = d40 "kovakorvaisuus"} ; @@ -14937,7 +14933,7 @@ lin kylmiltään_Adv = mkAdv {s = c99 "kylmiltään"} ; lin kylmissään_Adv = mkAdv {s = c99 "kylmissään"} ; lin kylmiö_N = mkN {s = d03 "kylmiö"} ; lin kylmyys_N = mkN {s = d40 "kylmyys"} ; -lin kylmä_A = mkA {s = d10 "kylmä"} ; +lin kylmä_A = mkA (mkN {s = d10 "kylmä"}) "kylmempi" "kylmin" ; lin kylmäkiskoisesti_Adv = mkAdv {s = c99 "kylmäkiskoisesti"} ; lin kylmäkiskoisuus_N = mkN {s = d40 "kylmäkiskoisuus"} ; lin kylmäkkö_N = mkN {s = d04A "kylmäkkö"} ; @@ -15031,7 +15027,7 @@ lin kypsyttää_V = mkV {s = c53A "kypsyttää"} ; lin kypsytys_N = mkN {s = d39 "kypsytys"} ; lin kypsyys_N = mkN {s = d40 "kypsyys"} ; lin kypsyä_V = mkV {s = c52 "kypsyä"} ; -lin kypsä_A = mkA {s = d10 "kypsä"} ; +lin kypsä_A = mkA (mkN {s = d10 "kypsä"}) "kypsempi" "kypsin" ; lin kypsästi_Adv = mkAdv {s = c99 "kypsästi"} ; lin kypärä_N = mkN {s = d10 "kypärä"} ; lin kyrillinen_N = mkN {s = d38 "kyrillinen"} ; @@ -23105,7 +23101,7 @@ lin padota_V = mkV {s = c74A "padota"} ; lin paella_N = mkN {s = d13 "paella"} ; lin paeta_V = mkV {s = c72A "paeta"} ; lin pagodi_N = mkN {s = d05 "pagodi"} ; -lin paha_A = mkA {s = d09 "paha"} ; +lin paha_A = mkA (mkN {s = d09 "paha"}) "pahempi" "pahin" ; lin pahainen_N = mkN {s = d38 "pahainen"} ; lin pahaksua_V = mkV {s = c52 "pahaksua"} ; lin pahamaineisuus_N = mkN {s = d40 "pahamaineisuus"} ; @@ -23337,8 +23333,7 @@ lin pakaste_N = mkN {s = d48 "pakaste"} ; lin pakastin_N = mkN {s = d33 "pakastin"} ; lin pakastua_V = mkV {s = c52 "pakastua"} ; lin pakastus_N = mkN {s = d39 "pakastus"} ; -lin pakata_1_V = mkV {s = c73A "pakata"} ; -lin pakata_2_V = mkV {s = c73A "pakata"} ; +lin pakata_V = mkV {s = c73A "pakata"} ; lin pakeilla_Adv = mkAdv {s = c99 "pakeilla"} ; lin pakeillaan_Adv = mkAdv {s = c99 "pakeillaan"} ; lin pakeille_Adv = mkAdv {s = c99 "pakeille"} ; @@ -23601,8 +23596,8 @@ lin pankkiaika_N = mkN {s = d09A "pankkiaika"} ; lin pankkiiri_N = mkN {s = d06 "pankkiiri"} ; lin pankkisäästäminen_N = mkN {s = d38 "pankkisäästäminen"} ; lin pankko_N = mkN {s = d01A "pankko"} ; -lin panna_1_V = mkV {s = c67 "panna"} ; -lin panna_2_N = mkN {s = d09 "panna"} ; +lin panna_V = mkV {s = c67 "panna"} ; +lin panna_N = mkN {s = d09 "panna"} ; lin pannahinen_N = mkN {s = d38 "pannahinen"} ; lin pannari_N = mkN {s = d06 "pannari"} ; lin pannu_N = mkN {s = d01 "pannu"} ; @@ -23879,10 +23874,7 @@ lin passata_2_V = mkV {s = c73 "passata"} ; lin passauttaa_V = mkV {s = c53A "passauttaa"} ; lin passeli_N = mkN {s = d06 "passeli"} ; --? lin passepartout_N = mkN {s = d22 "passepartout"} ; -lin passi_1_N = mkN {s = d05 "passi"} ; -lin passi_2_N = mkN {s = d05 "passi"} ; -lin passi_3_N = mkN {s = d05 "passi"} ; -lin passi_4_N = mkN {s = d05 "passi"} ; +lin passi_N = mkN {s = d05 "passi"} ; --? lin passiivat_N = mkN {s = d12 "passiivat"} ; lin passiivi_N = mkN {s = d05 "passiivi"} ; lin passiivinen_A = mkA {s = d38 "passiivinen"} ; @@ -23963,8 +23955,7 @@ lin patsastelu_N = mkN {s = d02 "patsastelu"} ; lin patteri_N = mkN {s = d06 "patteri"} ; lin patteristi_N = mkN {s = d05 "patteristi"} ; lin patteristo_N = mkN {s = d01 "patteristo"} ; -lin patti_1_N = mkN {s = d05A "patti"} ; -lin patti_2_N = mkN {s = d05A "patti"} ; +lin patti_N = mkN {s = d05A "patti"} ; lin patu_N = mkN {s = d01 "patu"} ; lin patukka_N = mkN {s = d14A "patukka"} ; lin pauhata_V = mkV {s = c73 "pauhata"} ; @@ -25134,7 +25125,7 @@ lin pitkittää_V = mkV {s = c53A "pitkittää"} ; lin pitkitys_N = mkN {s = d39 "pitkitys"} ; lin pitko_N = mkN {s = d01 "pitko"} ; lin pitkulainen_N = mkN {s = d38 "pitkulainen"} ; -lin pitkä_A = mkA {s = d10 "pitkä"} ; +lin pitkä_A = mkA (mkN {s = d10 "pitkä"}) "pidempi" "pisin" ; lin pitkäinen_N = mkN {s = d38 "pitkäinen"} ; lin pitkäjännitteisesti_Adv = mkAdv {s = c99 "pitkäjännitteisesti"} ; lin pitkäjänteisesti_Adv = mkAdv {s = c99 "pitkäjänteisesti"} ; @@ -28531,8 +28522,7 @@ lin riipus_N = mkN {s = d39 "riipus"} ; lin riipustaa_V = mkV {s = c53 "riipustaa"} ; lin riiputtaa_V = mkV {s = c53A "riiputtaa"} ; lin riiputus_N = mkN {s = d39 "riiputus"} ; -lin riisi_1_N = mkN {s = d05 "riisi"} ; -lin riisi_2_N = mkN {s = d05 "riisi"} ; +lin riisi_N = mkN {s = d05 "riisi"} ; lin riista_N = mkN {s = d09 "riista"} ; lin riistainen_N = mkN {s = d38 "riistainen"} ; lin riistamaaliammunta_N = mkN {s = d09A "riistamaaliammunta"} ; @@ -28570,8 +28560,7 @@ lin riittämätön_N = mkN {s = d34A "riittämätön"} ; lin riittävyys_N = mkN {s = d40 "riittävyys"} ; lin riittävä_A = mkA {s = d10 "riittävä"} ; lin riittävästi_Adv = mkAdv {s = c99 "riittävästi"} ; -lin riittää_1_V = mkV {s = c53A "riittää"} ; -lin riittää_2_V = mkV {s = c53A "riittää"} ; +lin riittää_V = mkV {s = c53A "riittää"} ; lin riiustaa_V = mkV {s = c53 "riiustaa"} ; lin riiustella_V = mkV {s = c67 "riiustella"} ; lin riiustelu_N = mkN {s = d02 "riiustelu"} ; @@ -28597,8 +28586,8 @@ lin rikka_N = mkN {s = d09A "rikka"} ; lin rikkaasti_Adv = mkAdv {s = c99 "rikkaasti"} ; lin rikkaus_N = mkN {s = d40 "rikkaus"} ; lin rikkeetön_N = mkN {s = d34A "rikkeetön"} ; -lin rikki_1_N = mkN {s = d05A "rikki"} ; -lin rikki_2_Adv = mkAdv {s = c99 "rikki"} ; +lin rikki_N = mkN {s = d05A "rikki"} ; +lin rikki_Adv = mkAdv {s = c99 "rikki"} ; lin rikkidioksidi_N = mkN {s = d05 "rikkidioksidi"} ; lin rikkinäinen_N = mkN {s = d38 "rikkinäinen"} ; lin rikkinäisyys_N = mkN {s = d40 "rikkinäisyys"} ; @@ -28734,8 +28723,7 @@ lin risauttaa_V = mkV {s = c53A "risauttaa"} ; lin risiini_N = mkN {s = d05 "risiini"} ; lin riskaabeli_N = mkN {s = d05 "riskaabeli"} ; lin riskeerata_V = mkV {s = c73 "riskeerata"} ; -lin riski_1_N = mkN {s = d05 "riski"} ; -lin riski_2_N = mkN {s = d05 "riski"} ; +lin riski_N = mkN {s = d05 "riski"} ; lin riskilä_N = mkN {s = d12 "riskilä"} ; lin riskinen_N = mkN {s = d38 "riskinen"} ; lin riskitön_N = mkN {s = d34A "riskitön"} ; @@ -33728,7 +33716,7 @@ lin syvyinen_N = mkN {s = d38 "syvyinen"} ; lin syvyys_N = mkN {s = d40 "syvyys"} ; lin syvyyttää_V = mkV {s = c53A "syvyyttää"} ; lin syvyytys_N = mkN {s = d39 "syvyytys"} ; -lin syvä_A = mkA {s = d10 "syvä"} ; +lin syvä_A = mkA (mkN {s = d10 "syvä"}) "syvempi" "syvin" ; lin syvälle_Adv = mkAdv {s = c99 "syvälle"} ; lin syvällinen_A = mkA {s = d38 "syvällinen"} ; lin syvällisesti_Adv = mkAdv {s = c99 "syvällisesti"} ; @@ -37084,8 +37072,7 @@ lin tuttavallisesti_Adv = mkAdv {s = c99 "tuttavallisesti"} ; lin tuttavallisuus_N = mkN {s = d40 "tuttavallisuus"} ; --? lin tuttavukset_N = mkN {s = d39 "tuttavukset"} ; lin tuttavuus_N = mkN {s = d40 "tuttavuus"} ; -lin tutti_1_N = mkN {s = d05A "tutti"} ; -lin tutti_2_N = mkN {s = d05A "tutti"} ; +lin tutti_N = mkN {s = d05A "tutti"} ; lin tuttu_N = mkN {s = d01A "tuttu"} ; lin tuttuus_N = mkN {s = d40 "tuttuus"} ; lin tutua_V = mkV {s = c52 "tutua"} ; @@ -38423,7 +38410,7 @@ lin vahingollisuus_N = mkN {s = d40 "vahingollisuus"} ; lin vahinko_N = mkN {s = d01A "vahinko"} ; lin vahti_N = mkN {s = d05A "vahti"} ; lin vahtia_V = mkV {s = c61A "vahtia"} ; -lin vahva_A = mkA {s = d09 "vahva"} ; +lin vahva_A = mkA (mkN {s = d09 "vahva"}) "vahvempi" "vahvin" ; lin vahvalti_Adv = mkAdv {s = c99 "vahvalti"} ; lin vahvasti_Adv = mkAdv {s = c99 "vahvasti"} ; lin vahvennos_N = mkN {s = d39 "vahvennos"} ; @@ -39121,7 +39108,7 @@ lin varkaisiin_Adv = mkAdv {s = c99 "varkaisiin"} ; lin varkaissa_Adv = mkAdv {s = c99 "varkaissa"} ; lin varkaista_Adv = mkAdv {s = c99 "varkaista"} ; lin varkaus_N = mkN {s = d40 "varkaus"} ; -lin varma_A = mkA {s = d09 "varma"} ; +lin varma_A = mkA (mkN {s = d09 "varma"}) "varmempi" "varmin" ; lin varmaan_Adv = mkAdv {s = c99 "varmaan"} ; lin varmasti_Adv = mkAdv {s = c99 "varmasti"} ; lin varmenne_N = mkN {s = d48A "varmenne"} ; diff --git a/src/finnish/NewDictFinAbs.gf b/src/finnish/NewDictFinAbs.gf index 6fed25844..cdcaf147c 100644 --- a/src/finnish/NewDictFinAbs.gf +++ b/src/finnish/NewDictFinAbs.gf @@ -321,8 +321,8 @@ fun aiheutua_V : V ; fun aiheutus_N : N ; fun aihio_N : N ; fun aijai_Adv : Adv ; -fun aika_1_N : N ; -fun aika_2_Adv : Adv ; +fun aika_N : N ; +fun aika_Adv : Adv ; fun aikaansaannos_N : N ; fun aikaansaapa_N : N ; fun aikaansaava_N : N ; @@ -4577,8 +4577,8 @@ fun haaste_N : N ; fun haasteaika_N : N ; fun haasteellinen_N : N ; fun haastella_V : V ; -fun haava_1_N : N ; -fun haava_2_Adv : Adv ; +fun haava_N : N ; +fun haava_Adv : Adv ; fun haavainen_N : N ; fun haavakko_N : N ; fun haavauma_N : N ; @@ -9910,8 +9910,7 @@ fun kallistaa_1_V : V ; fun kallistaa_2_V : V ; fun kallistella_V : V ; fun kallistelu_N : N ; -fun kallistua_1_V : V ; -fun kallistua_2_V : V ; +fun kallistua_V : V ; fun kallistus_N : N ; fun kallistuvakorinen_N : N ; fun kallo_N : N ; @@ -12114,8 +12113,7 @@ fun kimputus_N : N ; fun kimröökki_N : N ; fun kimuli_N : N ; fun kimurantti_N : N ; -fun kina_1_N : N ; -fun kina_2_N : N ; +fun kina_N : N ; fun kinailla_V : V ; fun kinailu_N : N ; fun kinastella_V : V ; @@ -12780,12 +12778,10 @@ fun kokkareinen_N : N ; fun kokkaroitua_V : V ; fun kokkaus_N : N ; fun kokkeli_N : N ; -fun kokki_1_N : N ; -fun kokki_2_N : N ; -fun kokko_1_N : N ; -fun kokko_2_N : N ; -fun koko_1_N : N ; -fun koko_2_Adv : Adv ; +fun kokki_N : N ; +fun kokko_N : N ; +fun koko_N : N ; +fun koko_Adv : Adv ; fun kokoaja_N : N ; fun kokoelma_N : N ; fun kokoilla_V : V ; @@ -23331,8 +23327,7 @@ fun pakaste_N : N ; fun pakastin_N : N ; fun pakastua_V : V ; fun pakastus_N : N ; -fun pakata_1_V : V ; -fun pakata_2_V : V ; +fun pakata_V : V ; fun pakeilla_Adv : Adv ; fun pakeillaan_Adv : Adv ; fun pakeille_Adv : Adv ; @@ -23595,8 +23590,8 @@ fun pankkiaika_N : N ; fun pankkiiri_N : N ; fun pankkisäästäminen_N : N ; fun pankko_N : N ; -fun panna_1_V : V ; -fun panna_2_N : N ; +fun panna_V : V ; +fun panna_N : N ; fun pannahinen_N : N ; fun pannari_N : N ; fun pannu_N : N ; @@ -23873,10 +23868,7 @@ fun passata_2_V : V ; fun passauttaa_V : V ; fun passeli_N : N ; --? fun passepartout_N : N ; -fun passi_1_N : N ; -fun passi_2_N : N ; -fun passi_3_N : N ; -fun passi_4_N : N ; +fun passi_N : N ; --? fun passiivat_N : N ; fun passiivi_N : N ; fun passiivinen_A : A ; @@ -23957,8 +23949,7 @@ fun patsastelu_N : N ; fun patteri_N : N ; fun patteristi_N : N ; fun patteristo_N : N ; -fun patti_1_N : N ; -fun patti_2_N : N ; +fun patti_N : N ; fun patu_N : N ; fun patukka_N : N ; fun pauhata_V : V ; @@ -28525,8 +28516,7 @@ fun riipus_N : N ; fun riipustaa_V : V ; fun riiputtaa_V : V ; fun riiputus_N : N ; -fun riisi_1_N : N ; -fun riisi_2_N : N ; +fun riisi_N : N ; fun riista_N : N ; fun riistainen_N : N ; fun riistamaaliammunta_N : N ; @@ -28564,8 +28554,7 @@ fun riittämätön_N : N ; fun riittävyys_N : N ; fun riittävä_A : A ; fun riittävästi_Adv : Adv ; -fun riittää_1_V : V ; -fun riittää_2_V : V ; +fun riittää_V : V ; fun riiustaa_V : V ; fun riiustella_V : V ; fun riiustelu_N : N ; @@ -28591,8 +28580,8 @@ fun rikka_N : N ; fun rikkaasti_Adv : Adv ; fun rikkaus_N : N ; fun rikkeetön_N : N ; -fun rikki_1_N : N ; -fun rikki_2_Adv : Adv ; +fun rikki_N : N ; +fun rikki_Adv : Adv ; fun rikkidioksidi_N : N ; fun rikkinäinen_N : N ; fun rikkinäisyys_N : N ; @@ -28728,8 +28717,7 @@ fun risauttaa_V : V ; fun risiini_N : N ; fun riskaabeli_N : N ; fun riskeerata_V : V ; -fun riski_1_N : N ; -fun riski_2_N : N ; +fun riski_N : N ; fun riskilä_N : N ; fun riskinen_N : N ; fun riskitön_N : N ; @@ -37078,8 +37066,7 @@ fun tuttavallisesti_Adv : Adv ; fun tuttavallisuus_N : N ; --? fun tuttavukset_N : N ; fun tuttavuus_N : N ; -fun tutti_1_N : N ; -fun tutti_2_N : N ; +fun tutti_N : N ; fun tuttu_N : N ; fun tuttuus_N : N ; fun tutua_V : V ; diff --git a/src/finnish/NounFin.gf b/src/finnish/NounFin.gf index e395290d2..7daa3e62b 100644 --- a/src/finnish/NounFin.gf +++ b/src/finnish/NounFin.gf @@ -215,7 +215,9 @@ concrete NounFin of Noun = CatFin ** open ResFin, MorphoFin, StemFin, Prelude in } ; AdjCN ap cn = { - s = \\nf => ap.s ! True ! (n2nform nf) ++ cn.s ! nf ; + s = case ap.hasPrefix of { + True => \\nf => ap.p ++ BIND ++ cn.s ! nf ; + False => \\nf => ap.s ! True ! (n2nform nf) ++ cn.s ! nf } ; h = cn.h } ; RelCN cn rs = {s = \\nf => cn.s ! nf ++ BIND ++ "," ++ rs.s ! agrP3 (numN nf) ; diff --git a/src/finnish/ParadigmsFin.gf b/src/finnish/ParadigmsFin.gf index bea18dd6a..4cea49ebe 100644 --- a/src/finnish/ParadigmsFin.gf +++ b/src/finnish/ParadigmsFin.gf @@ -61,6 +61,7 @@ oper infIness : InfForm ; -- e.g. "tekemässä" infElat : InfForm ; -- e.g. "tekemästä" infIllat : InfForm ; -- e.g. "tekemään" + infAdess : InfForm ; -- e.g. "tekemällä" infPresPart : InfForm ; -- e.g. "tekevän" infPresPartAgr : InfForm ; -- e.g. "tekevänsä" @@ -137,6 +138,19 @@ oper = \oma, asunto -> lin N {s = \\c => oma.s ! c + "_" + asunto.s ! c ; h = asunto.h} ; } ; + compN : N -> N -> N = \valkuainen,aine -> aine ** { + s = \\c => (StemFin.snoun2nounBind valkuainen).s ! NCompound + aine.s ! c + } ; + + genCompN = overload { + genCompN : N -> N -> N = genitiveCompoundN Sg ; + genCompN : Number -> N -> N -> N = genitiveCompoundN + } ; + + genitiveCompoundN : Number -> N -> N -> N = \n,veri,paine -> paine ** { + s = \\c => (StemFin.snoun2nounBind veri).s ! NCase n Gen + paine.s ! c + } ; + -- Nouns used as functions need a case, of which the default is -- the genitive. @@ -177,17 +191,23 @@ oper } ; invarA : Str -> A -- invariant adjective, e.g. "kelpo" - = \s -> lin A {s = \\_,_ => s ; h = Back} ; ----- stemming adds bogus endings + = \s -> lin A {s = \\_,_ => s ; h = Back ; p = [] ; hasPrefix = False} ; ----- stemming adds bogus endings + prefixA : Str -> A -> A = \pr,a -> a ** { + p = pr ; + hasPrefix = True + } ; + -- Two-place adjectives need a case for the second argument. mkA2 = overload { mkA2 : Str -> A2 -- e.g. "vihainen" (jollekin) - = \s -> mkA s ** {c2 = mkPrep allative ; lock_A2 = <>} ; + = \a -> let adj = mkA a ; + in lin A2 (adj ** {c2 = casePrep allative}) ; mkA2 : Str -> Prep -> A2 -- e.g. "jaollinen" (mkPrep adessive) - = \a,p -> mkA a ** {c2 = p ; lock_A2 = <>} ; + = \a,p -> let adj = mkA a in lin A2 (adj ** {c2=p}) ; mkA2 : A -> Prep -> A2 -- e.g. "jaollinen" (mkPrep adessive) - = \a,p -> a ** {c2 = p ; lock_A2 = <>} ; + = \a,p -> lin A2 (a ** {c2 = p}) ; } ; @@ -384,7 +404,10 @@ mkVS = overload { ablative = Ablat ; allative = Allat ; - infFirst = Inf1 ; infElat = Inf3Elat ; infIllat = Inf3Illat ; infIness = Inf3Iness ; infPresPart = InfPresPart ; infPresPartAgr = InfPresPartAgr ; + infFirst = Inf1 ; + infElat = Inf3Elat ; infIllat = Inf3Illat ; + infIness = Inf3Iness ; infAdess = Inf3Adess ; + infPresPart = InfPresPart ; infPresPartAgr = InfPresPartAgr ; prePrep : Case -> Str -> Prep = \c,p -> lin Prep {c = NPCase c ; s = []>} ; -- no possessive suffix @@ -637,25 +660,26 @@ mkVS = overload { mkA = overload { mkA : Str -> A = mkA_1 ; mkA : N -> A = \n -> noun2adjDeg n ** {lock_A = <>} ; - mkA : N -> (kivempaa,kivinta : Str) -> A = \n -> regAdjective n ; + mkA : N -> (kivempi,kivin : Str) -> A = \n -> regAdjective n ; mkA : (sana : AK) -> A = \w -> noun2adjDeg (nforms2snoun w.s) ; mkA : (hyva,parempi,paras : N) -> (hyvin,paremmin,parhaiten : Str) -> A - = \h,p,ps,hn,pn,ph -> lin A (mkAdj h p ps hn pn ph) ; - mkA : V -> A = presPartA ; + = \h,p,ps,hn,pn,ph -> lin A (mkAdj h p ps hn pn ph ** {p=[]; hasPrefix=False}) ; + mkA : V -> A = presActA ; } ; mkA_1 : Str -> A = \x -> lin A (noun2adjDeg (mk1N x)) ; -- auxiliaries - mkAdjective : (_,_,_ : SAdj) -> A = \hyva,parempi,paras -> + mkAdjective : (_,_,_ : SAdj) -> A = \hyva,parempi,paras -> lin A {s = table { Posit => hyva.s ; Compar => parempi.s ; Superl => paras.s } ; h = hyva.h ; ---- different for parempi, paras - lock_A = <> + p = [] ; + hasPrefix = False } ; regAdjective : SNoun -> Str -> Str -> A = \kiva, kivempi, kivin -> mkAdjective @@ -669,13 +693,21 @@ mkVS = overload { (snoun2superl suuri) ; - presPartA : SVerb -> A = \tullaSV -> - let tulla = sverb2verb True tullaSV ; - tuleva : NForm => Str = \\nf => tulla.s ! PresPartAct (AN nf) ; - tuleva_SN = { s = tuleva ; - h = tullaSV.h } ; + presActA : SVerb -> A = \tulla -> + let tuleva : NForm => Str = \\nf => (sverb2verb True tulla).s ! PresPartAct (AN nf) ; + in noun2adjDeg { s = tuleva ; h = tulla.h } ; - in noun2adjDeg tuleva_SN ; + presPassA : SVerb -> A = \mennä -> + let mentävä : NForm => Str = \\nf => (sverb2verb True mennä).s ! PresPartPass (AN nf) ; + in noun2adjDeg { s = mentävä ; h = mennä.h } ; + + pastActA : SVerb -> A = \syntyä -> + let syntynyt : NForm => Str = \\nf => (sverb2verb True syntyä).s ! PastPartAct (AN nf) ; + in noun2adjDeg { s = syntynyt ; h = syntyä.h } ; + + pastPassA : SVerb -> A = \sulkea -> + let suljettu : NForm => Str = \\nf => (sverb2verb True sulkea).s ! PastPartPass (AN nf) ; + in noun2adjDeg { s = suljettu ; h = sulkea.h } ; -- verbs