diff options
| author | aarne <aarne@chalmers.se> | 2009-06-22 15:39:08 +0000 |
|---|---|---|
| committer | aarne <aarne@chalmers.se> | 2009-06-22 15:39:08 +0000 |
| commit | e89fdae2fa1626348d8025824a7469252fa85e42 (patch) | |
| tree | c7d46bbd0494043b4bd6f917a25a7687517d0547 /old-lib/resource/norwegian | |
| parent | 3049b59b35b25381a7c6787444165c200d66e08b (diff) | |
next-lib renamed to lib, lib to old-lib
Diffstat (limited to 'old-lib/resource/norwegian')
28 files changed, 1609 insertions, 0 deletions
diff --git a/old-lib/resource/norwegian/AdjectiveNor.gf b/old-lib/resource/norwegian/AdjectiveNor.gf new file mode 100644 index 000000000..e1c722b36 --- /dev/null +++ b/old-lib/resource/norwegian/AdjectiveNor.gf @@ -0,0 +1,2 @@ +concrete AdjectiveNor of Adjective = CatNor ** AdjectiveScand with + (ResScand = ResNor) ; diff --git a/old-lib/resource/norwegian/AdverbNor.gf b/old-lib/resource/norwegian/AdverbNor.gf new file mode 100644 index 000000000..09244f110 --- /dev/null +++ b/old-lib/resource/norwegian/AdverbNor.gf @@ -0,0 +1,2 @@ +concrete AdverbNor of Adverb = CatNor ** AdverbScand with + (ResScand = ResNor) ; diff --git a/old-lib/resource/norwegian/AllNor.gf b/old-lib/resource/norwegian/AllNor.gf new file mode 100644 index 000000000..cf84e6768 --- /dev/null +++ b/old-lib/resource/norwegian/AllNor.gf @@ -0,0 +1,7 @@ +--# -path=.:../scandinavian:../abstract:../common:prelude + +concrete AllNor of AllNorAbs = + LangNor, + IrregNor - [fly_V], + ExtraNor + ** {} ; diff --git a/old-lib/resource/norwegian/AllNorAbs.gf b/old-lib/resource/norwegian/AllNorAbs.gf new file mode 100644 index 000000000..a252fd6f2 --- /dev/null +++ b/old-lib/resource/norwegian/AllNorAbs.gf @@ -0,0 +1,5 @@ +abstract AllNorAbs = + Lang, + IrregNorAbs - [fly_V], + ExtraNorAbs + ** {} ; diff --git a/old-lib/resource/norwegian/CatNor.gf b/old-lib/resource/norwegian/CatNor.gf new file mode 100644 index 000000000..bfc4b5390 --- /dev/null +++ b/old-lib/resource/norwegian/CatNor.gf @@ -0,0 +1,2 @@ +concrete CatNor of Cat = CommonX ** CatScand with + (ResScand = ResNor) ; diff --git a/old-lib/resource/norwegian/ConjunctionNor.gf b/old-lib/resource/norwegian/ConjunctionNor.gf new file mode 100644 index 000000000..85357dffd --- /dev/null +++ b/old-lib/resource/norwegian/ConjunctionNor.gf @@ -0,0 +1,2 @@ +concrete ConjunctionNor of Conjunction = CatNor ** ConjunctionScand with + (ResScand = ResNor) ; diff --git a/old-lib/resource/norwegian/DiffNor.gf b/old-lib/resource/norwegian/DiffNor.gf new file mode 100644 index 000000000..3723369f2 --- /dev/null +++ b/old-lib/resource/norwegian/DiffNor.gf @@ -0,0 +1,90 @@ +instance DiffNor of DiffScand = open CommonScand, Prelude in { + +-- Parameters. + + param + Gender = Utr Sex | Neutr ; + Sex = Masc | Fem ; + + oper + utrum = Utr Masc ; + neutrum = Neutr ; + + gennum : Gender -> Number -> GenNum = \g,n -> + case <<g,n> : Gender * Number> of { + <Utr _,Sg> => SgUtr ; + <Neutr,Sg> => SgNeutr ; + _ => Plg + } ; + + detDef : Species = Def ; + + Verb : Type = { + s : VForm => Str ; + part : Str ; + vtype : VType ; + isVaere : Bool + } ; + + hasAuxBe v = v.isVaere ; + +-- Strings. + + conjThat = "at" ; + conjThan = "enn" ; + conjAnd = "og" ; + compMore = "mere" ; + infMark = "å" ; + + subjIf = "hvis" ; + + artIndef : Gender => Str = table { + Utr Masc => "en" ; + Utr Fem => "ei" ; + Neutr => "et" + } ; + + verbHave = + mkVerb "ha" "har" "ha" "hadde" "hatt" "haven" "havet" "havne" + ** {part = [] ; isVaere = False} ; + verbBe = + mkVerb "være" "er" "var" "var" "vært" "væren" "været" "værne" + ** {part = [] ; isVaere = False} ; + verbBecome = + mkVerb "bli" "blir" "bli" "ble" "blitt" "bliven" "blivet" "blivne" + ** {part = [] ; isVaere = True} ; + + -- auxiliary + noPart = {part = []} ; + + auxFut = "vil" ; -- "skal" in ExtNor + auxCond = "ville" ; + + negation : Polarity => Str = table { + Pos => [] ; + Neg => "ikke" + } ; + + genderForms : (x1,x2 : Str) -> Gender => Str = \all,allt -> + table { + Utr _ => all ; + Neutr => allt + } ; + + relPron : GenNum => RCase => Str = \\gn,c => case c of { + RNom | RPrep False => "som" ; + RGen => "hvis" ; + RPrep _ => gennumForms "hvilken" "hvilket" "hvilke" ! gn + } ; + + pronSuch = gennumForms "sådan" "sådant" "sådanne" ; + + reflPron : Agr -> Str = \a -> case a of { + {gn = Plg ; p = P1} => "oss" ; + {gn = Plg ; p = P2} => "jer" ; + {p = P1} => "meg" ; + {p = P2} => "deg" ; + {p = P3} => "seg" + } ; + +} diff --git a/old-lib/resource/norwegian/ExtraNor.gf b/old-lib/resource/norwegian/ExtraNor.gf new file mode 100644 index 000000000..1cfd1008b --- /dev/null +++ b/old-lib/resource/norwegian/ExtraNor.gf @@ -0,0 +1,8 @@ +concrete ExtraNor of ExtraNorAbs = ExtraScandNor ** open CommonScand, ResNor in { + + lin + PossNP np pro = { + s = \\c => np.s ! NPNom ++ pro.s ! NPPoss np.a.gn ; ---- c + a = np.a + } ; +} diff --git a/old-lib/resource/norwegian/ExtraNorAbs.gf b/old-lib/resource/norwegian/ExtraNorAbs.gf new file mode 100644 index 000000000..21c03ae7e --- /dev/null +++ b/old-lib/resource/norwegian/ExtraNorAbs.gf @@ -0,0 +1,9 @@ +-- Structures special for Norwegian. These are not implemented in other +-- Scandinavian languages. + +abstract ExtraNorAbs = ExtraScandAbs ** { + + fun + PossNP : NP -> Pron -> NP ; -- bilen min + +}
\ No newline at end of file diff --git a/old-lib/resource/norwegian/ExtraScandNor.gf b/old-lib/resource/norwegian/ExtraScandNor.gf new file mode 100644 index 000000000..5f988fe7e --- /dev/null +++ b/old-lib/resource/norwegian/ExtraScandNor.gf @@ -0,0 +1,2 @@ +concrete ExtraScandNor of ExtraScandAbs = CatNor ** ExtraScand with + (ResScand = ResNor) ; diff --git a/old-lib/resource/norwegian/GrammarNor.gf b/old-lib/resource/norwegian/GrammarNor.gf new file mode 100644 index 000000000..ed36ad496 --- /dev/null +++ b/old-lib/resource/norwegian/GrammarNor.gf @@ -0,0 +1,21 @@ +--# -path=.:../scandinavian:../abstract:../common:prelude + +concrete GrammarNor of Grammar = + NounNor, + VerbNor, + AdjectiveNor, + AdverbNor, + NumeralNor, + SentenceNor, + QuestionNor, + RelativeNor, + ConjunctionNor, + PhraseNor, + TextX, + IdiomNor, + StructuralNor + ** { + +flags startcat = Phr ; unlexer = text ; lexer = text ; + +} ; diff --git a/old-lib/resource/norwegian/IdiomNor.gf b/old-lib/resource/norwegian/IdiomNor.gf new file mode 100644 index 000000000..998d8fa8d --- /dev/null +++ b/old-lib/resource/norwegian/IdiomNor.gf @@ -0,0 +1,40 @@ +concrete IdiomNor of Idiom = CatNor ** + open MorphoNor, ParadigmsNor, IrregNor, Prelude in { + + flags optimize=all_subs ; + + lin + + ImpersCl vp = mkClause "det" (agrP3 ParadigmsNor.neutrum Sg) vp ; + GenericCl vp = mkClause "man" (agrP3 utrum Sg) vp ; + + CleftNP np rs = mkClause "det" (agrP3 ParadigmsNor.neutrum Sg) + (insertObj (\\_ => np.s ! rs.c ++ rs.s ! np.a) (predV verbBe)) ; + + CleftAdv ad s = mkClause "det" (agrP3 ParadigmsNor.neutrum Sg) + (insertObj (\\_ => ad.s ++ s.s ! Sub) (predV verbBe)) ; + + ExistNP np = + mkClause "det" (agrP3 ParadigmsNor.neutrum Sg) (insertObj + (\\_ => np.s ! accusative) (predV (depV finne_V))) ; + + ExistIP ip = { + s = \\t,a,p => + let + cls = + (mkClause "det" (agrP3 ParadigmsNor.neutrum Sg) (predV (depV finne_V))).s ! t ! a ! p ; + who = ip.s ! accusative + in table { + QDir => who ++ cls ! Inv ; + QIndir => who ++ cls ! Sub + } + } ; + + ProgrVP vp = + insertObj (\\a => ["ved å"] ++ infVP vp a) (predV verbBe) ; + + ImpPl1 vp = {s = ["lat oss"] ++ infVP vp {gn = Plg ; p = P1}} ; + + +} + diff --git a/old-lib/resource/norwegian/IrregNor.gf b/old-lib/resource/norwegian/IrregNor.gf new file mode 100644 index 000000000..ba734148b --- /dev/null +++ b/old-lib/resource/norwegian/IrregNor.gf @@ -0,0 +1,72 @@ +--# -path=.:../scandinavian:../common:../abstract:../../prelude + +-- see: http://frodo.bruderhof.com/norskklassen/commonverbs.htm + +concrete IrregNor of IrregNorAbs = CatNor ** open ParadigmsNor in { + + flags optimize=values ; + + lin be_V = mkV "be" "ber" "bes" "bad" "bedt" "be" ; + lin bite_V = irregV "bite" (variants {"bet" ; "beit"}) "bitt" ; + lin bli_V = irregV "bli" (variants {"ble" ; "blei"}) "blitt" ; + lin brenne_V = irregV "brenne" (variants {"brant" ; "brente"}) "brent" ; + lin bringe_V = irregV "bringe" "brakte" "brakt" ; + lin burde_V = irregV "burde" "burde" "burdet" ; + lin bære_V = irregV "bære" "bar" "båret" ; + lin dra_V = mkV "dra" "drar" "dras" "drog" (variants {"dradd" ; "dratt"}) "dra" ; + lin drikke_V = irregV "drikke" "drakk" "drukket" ; + lin drive_V = irregV "drive" (variants {"drev" ; "dreiv"}) "drevet" ; + lin dø_V = irregV "dø" (variants {"dødde" ; "døde"}) "dødd" ; + lin eie_V = irregV "eie" (variants {"eide" ; "åtte"}) (variants {"eid" ; "ått"}) ; + lin falle_V = irregV "falle" "falt" "falt" ; + lin finne_V = irregV "finne" "fant" "funnet" ; + lin fly_V = irregV "fly" (variants {"fløy" ; "flaug"}) (variants {"fløyet";"flydd"}) ; + lin flyte_V = irregV "flyte" (variants {"fløte" ; "flaut"}) "flytt" ; + lin foretrekke_V = irregV "foretrekke" "foretrakk" "foretrukket" ; + lin forlate_V = irregV "forlate" "forlot" "forlatt" ; + lin forstå_V = irregV "forstå" "forstod" "forstått" ; + lin fortelle_V = irregV "fortelle" "fortalte" "fortalt" ; + lin fryse_V = irregV "fryse" "frøs" "frosset" ; + lin få_V = irregV "få" "fikk" "fått" ; + lin gi_V = irregV "gi" "gav" "gitt" ; + lin gjelde_V = irregV "gjelde" (variants {"gjaldt" ; "galdt"}) "gjeldt" ; + lin gjøre_V = irregV "gjøre" "gjorde" "gjort" ; + lin gni_V = irregV "gni" (variants {"gned" ; "gnei" ; "gnidde"}) "gnidd" ; + lin gå_V = irregV "gå" "gikk" "gått" ; + lin ha_V = irregV "ha" "hadde" "hatt" ; + lin hente_V = irregV "hente" "hentet" "hendt" ; + lin hete_V = irregV "hete" (variants {"het" ; "hette"}) "hett" ; + lin hjelpe_V = irregV "hjelpe" "hjalp" "hjulpet" ; + lin holde_V = irregV "holde" "holdt" "holdt" ; + lin komme_V = irregV "komme" "kom" "kommet" ; + lin kunne_V = irregV "kunne" "kunne" "kunnet" ; + lin la_V = irregV "la" "lot" "latt" ; + lin legge_V = irregV "legge" "la" "lagt" ; + lin ligge_V = irregV "ligge" "lå" "ligget" ; + lin løpe_V = irregV "løpe" "løp" (variants {"løpt" ; "løpet"}) ; + lin måtte_V = irregV "måtte" "måtte" "måttet" ; + lin renne_V = irregV "renne" "rant" "rent" ; + lin se_V = mkV "se" "ser" "ses" "så" "sett" "se" ; + lin selge_V = irregV "selge" "solgte" "solgt" ; + lin sette_V = irregV "sette" "satte" "satt" ; + lin si_V = mkV "si" "sier" "sies" "sa" "sagt" "sagd" ; + lin sitte_V = irregV "sitte" "satt" "sittet" ; + lin skjære_V = irregV "skjære" "skar" "skåret" ; + lin skrive_V = irregV "skrive" "skrev" "skrevet" ; + lin skulle_V = irregV "skulle" "skulle" "skullet" ; + lin slå_V = irregV "slå" "slo" "slått" ; + lin slåss_V = mkV "slåss" "slåss" "slåss" "sloss" "slåss" "slåss" ; + lin sove_V = irregV "sove" "sov" "sovet" ; + lin springe_V = irregV "springe" "sprang" "sprunget" ; + lin spørre_V = irregV "spørre" "spurte" "spurt" ; + lin stikke_V = irregV "stikke" "stakk" "stukket" ; + lin stå_V = irregV "stå" "stod" "stått" ; + lin suge_V = irregV "suge" (variants {"sugde" ; "saug"}) "sugd" ; + lin synes_V = irregV "synes" "syntes" (variants {"synes" ; "syns"}) ; + lin synge_V = irregV "synge" "sang" "sunget" ; + lin ta_V = irregV "ta" "tok" "tatt" ; + lin treffe_V = irregV "treffe" "traff" "truffet" ; + lin trives_V = irregV "trives" "trivdes" (variants {"trives" ; "trivs"}) ; + lin ville_V = irregV "ville" "ville" "villet" ; + lin vite_V = mkV "vite" "vet" "vetes" "visste" "visst" "vit" ; +} diff --git a/old-lib/resource/norwegian/IrregNorAbs.gf b/old-lib/resource/norwegian/IrregNorAbs.gf new file mode 100644 index 000000000..2c6c61181 --- /dev/null +++ b/old-lib/resource/norwegian/IrregNorAbs.gf @@ -0,0 +1,65 @@ +abstract IrregNorAbs = Cat ** { + fun be_V : V ; + fun bite_V : V ; + fun bli_V : V ; + fun brenne_V : V ; + fun bringe_V : V ; + fun burde_V : V ; + fun bære_V : V ; + fun dra_V : V ; + fun drikke_V : V ; + fun drive_V : V ; + fun dø_V : V ; + fun eie_V : V ; + fun falle_V : V ; + fun finne_V : V ; + fun fly_V : V ; + fun flyte_V : V ; + fun foretrekke_V : V ; + fun forlate_V : V ; + fun forstå_V : V ; + fun fortelle_V : V ; + fun fryse_V : V ; + fun få_V : V ; + fun gi_V : V ; + fun gjelde_V : V ; + fun gjøre_V : V ; + fun gni_V : V ; + fun gå_V : V ; + fun ha_V : V ; + fun hente_V : V ; + fun hete_V : V ; + fun hjelpe_V : V ; + fun holde_V : V ; + fun komme_V : V ; + fun kunne_V : V ; + fun la_V : V ; + fun legge_V : V ; + fun ligge_V : V ; + fun løpe_V : V ; + fun måtte_V : V ; + fun renne_V : V ; + fun se_V : V ; + fun selge_V : V ; + fun sette_V : V ; + fun si_V : V ; + fun sitte_V : V ; + fun skjære_V : V ; + fun skrive_V : V ; + fun skulle_V : V ; + fun slå_V : V ; + fun slåss_V : V ; + fun sove_V : V ; + fun springe_V : V ; + fun spørre_V : V ; + fun stikke_V : V ; + fun stå_V : V ; + fun suge_V : V ; + fun synes_V : V ; + fun synge_V : V ; + fun ta_V : V ; + fun treffe_V : V ; + fun trives_V : V ; + fun ville_V : V ; + fun vite_V : V ; +} diff --git a/old-lib/resource/norwegian/LangNor.gf b/old-lib/resource/norwegian/LangNor.gf new file mode 100644 index 000000000..41d51c2a9 --- /dev/null +++ b/old-lib/resource/norwegian/LangNor.gf @@ -0,0 +1,10 @@ +--# -path=.:../scandinavian:../abstract:../common:prelude + +concrete LangNor of Lang = + GrammarNor, + LexiconNor + ** { + +flags startcat = Phr ; unlexer = text ; lexer = text ; + +} ; diff --git a/old-lib/resource/norwegian/LexiconNor.gf b/old-lib/resource/norwegian/LexiconNor.gf new file mode 100644 index 000000000..30cda22ea --- /dev/null +++ b/old-lib/resource/norwegian/LexiconNor.gf @@ -0,0 +1,368 @@ +--# -path=.:../scandinavian:../common:../abstract:../../prelude + +concrete LexiconNor of Lexicon = CatNor ** + open Prelude, ParadigmsNor, IrregNor in { + +flags startcat=Phr ; lexer=textlit ; unlexer=text ; + optimize=values ; + +lin + airplane_N = mk2N "fly" "flyet" ; + answer_V2S = mkV2S (regV "svare") (mkPrep "til") ; + apartment_N = mk2N "leilighet" "leiligheten" ; + apple_N = mk2N "eple" "eplet" ; + art_N = mk2N "kunst" "kunsten" ; + ask_V2Q = mkV2Q spørre_V noPrep ; + baby_N = mk2N "baby" "babyen" ; + bad_A = regADeg "dårlig" ; ---- + bank_N = mk2N "bank" "banken" ; + beautiful_A = mk3ADeg "vakker" "vakkert" "vakre" ; + become_VA = mkVA (vaereV bli_V) ; + beer_N = regGenN "øl" neutrum ; + beg_V2V = mkV2V be_V noPrep (mkPrep "at") ; + big_A = irregADeg "stor" "større" "størst"; + bike_N = mkN "sykkel" "sykkelen" "sykler" "syklene" ; + bird_N = mk2N "fugl" "fuglen" ; + black_A = mk2ADeg "svart" "svart" ; + blue_A = mk2ADeg "blå" "blått"; + boat_N = regGenN "båt" masculine ; + book_N = mkN "bok" "boka" "bøker" "bøkene" ; + boot_N = mkN "støvel" "støvelen" "støvler" "støvlene" ; + boss_N = mk2N "sjef" "sjefen" ; + boy_N = regGenN "gutt" masculine ; + bread_N = regGenN "brød" neutrum ; + break_V2 = dirV2 (mk2V "knuse" "knuste") ; + broad_A = regADeg "bred" ; + brother_N2 = mkN2 ( (mkN "bror" "broren" "brødre" "brødrene")) (mkPrep "til") ; + brown_A = regADeg "brun" ; + butter_N = regGenN "smør" neutrum ; + buy_V2 = dirV2 (mk2V "kjøpe" "kjøpte") ; + camera_N = mk2N "kamera" "kameraen" ; ---- + cap_N = mk2N "lue" "lua" ; + car_N = regGenN "bil" masculine ; + carpet_N = regGenN "matte" feminine ; + cat_N = mk2N "katt" "katten" ; + ceiling_N = regGenN "tak" neutrum ; + chair_N = regGenN "stol" masculine ; + cheese_N = regGenN "ost" masculine ; + child_N = regGenN "barn" neutrum ; + church_N = regGenN "kirke" feminine ; + city_N = mk2N "by" "byen" ; + clean_A = regADeg "rein" ; + clever_A = regADeg "klok" ; + close_V2 = dirV2 (mk2V "lukke" "lukket") ; + coat_N = regGenN "frakk" masculine ; + cold_A = regADeg "kald" ; + come_V = vaereV IrregNor.komme_V ; + computer_N = mk2N "datamaskin" "datamaskinen" ; + country_N = mk2N "land" "landet" ; + cousin_N = mk2N "fetter" "fetteren" ; ---- + cow_N = mkN "ku" "kua" "kyr" "kyrne" ; ---- + die_V = vaereV IrregNor.dø_V ; + dirty_A = mk3ADeg "skitten" "skittent" "skitne" ; ---- + distance_N3 = mkN3 (regGenN "avstand" masculine) (mkPrep "fra") (mkPrep "til") ; + doctor_N = mk2N "lege" "legen" ; + dog_N = regGenN "hund" masculine ; + door_N = regGenN "dør" feminine ; + drink_V2 = dirV2 IrregNor.drikke_V ; + easy_A2V = mkA2V (regA "grei") (mkPrep "for") ; + eat_V2 = dirV2 (mk2V "spise" "spiste") ; + empty_A = mkADeg "tom" "tomt" "tomme" "tommere" "tommest" ; + enemy_N = regGenN "fiende" masculine ; + factory_N = mk2N "fabrikk" "fabrikken" ; + father_N2 = mkN2 ( (mkN "far" "faren" "fedre" "fedrene")) (mkPrep "til") ; + fear_VS = mkVS (regV "frykte") ; + find_V2 = dirV2 (irregV "finne" "fann" "funnet") ; + fish_N = mk2N "fisk" "fisken" ; + floor_N = regGenN "golv" neutrum ; + forget_V2 = dirV2 (mkV "glemme" "glemmer" "glemmes" "glemte" "glemt" "glem") ; + fridge_N = regGenN "kjøleskap" neutrum ; + friend_N = mkN "venn" "vennen" "venner" "vennene" ; + fruit_N = mk2N "frukt" "frukten" ; + fun_AV = mkAV (mkA "morsom" "morsomt" "morsomme") ; + garden_N = regGenN "hage" masculine ; + girl_N = regGenN "jente" feminine ; + glove_N = regGenN "hanske" masculine ; + gold_N = regGenN "gull" neutrum ; + good_A = mkADeg "god" "godt" "gode" "bedre" "best" ; + go_V = vaereV IrregNor.gå_V ; + green_A = mk2ADeg "grønn" "grønt" ; + harbour_N = regGenN "havn" feminine; + hate_V2 = dirV2 (regV "hate") ; + hat_N = regGenN "hatt" masculine ; + have_V2 = dirV2 IrregNor.ha_V ; + hear_V2 = dirV2 (mk2V "høre" "hørte") ; + hill_N = regGenN "haug" masculine ; + hope_VS = mkVS (regV "håpe") ; + horse_N = regGenN "hest" masculine ; + hot_A = regADeg "heit" ; + house_N = regGenN "hus" neutrum ; + important_A = regADeg "viktig" ; + industry_N = mk2N "industri" "industrien" ; + iron_N = regGenN "jern" neutrum ; + john_PN = mkPN "John" masculine ; + king_N = regGenN "konge" masculine ; + know_V2 = dirV2 IrregNor.vite_V ; + lake_N = regGenN "vann" neutrum ; + lamp_N = regGenN "lampe" feminine ; + learn_V2 = dirV2 (mk2V "lære" "lærte") ; + leather_N = regGenN "lær" neutrum ; + leave_V2 = dirV2 forlate_V ; + like_V2 = dirV2 (mk2V "like" "likte") ; + listen_V2 = dirV2 (regV "lytte") ; + live_V = mk2V "leve" "levde" ; + long_A = irregADeg "lang" "lengre" "lengst" ; + lose_V2 = dirV2 (mk2V "tape" "tapte") ; + love_N = regGenN "kjærlighet" masculine ; + love_V2 = dirV2 (regV "elske") ; + man_N = (mkN "mann" "mannen" "menn" "mennen") ; + married_A2 = mkA2 (mk2A "gift" "gift") (mkPrep "med") ; + meat_N = regGenN "kjøtt" neutrum ; + milk_N = regGenN "melk" masculine ; + moon_N = regGenN "måne" masculine ; + mother_N2 = mkN2 (mkN "mor" "moren" "mødre" "mødrene") (mkPrep "til") ; ---- fem + mountain_N = regGenN "berg" neutrum ; + music_N = mk2N "musikk" "musikken" ; + narrow_A = regADeg "smal" ; + new_A = mkADeg "ny" "nytt" "nye" "nyere" "nyest" ; + newspaper_N = regGenN "avis" feminine ; + oil_N = regGenN "olje" masculine ; + old_A = mkADeg "gammel" "gammelt" "gamle" "eldre" "eldst" ; + open_V2 = dirV2 (regV "åpne") ; + paint_V2A = mkV2A (regV "male") noPrep ; + paper_N = regGenN "papir" neutrum ; ---- + paris_PN = regGenPN "Paris" neutrum ; + peace_N = regGenN "fred" masculine ; + pen_N = regGenN "penn" masculine ; + planet_N = mk2N "planet" "planeten" ; + plastic_N = mk2N "plast" "plasten" ; + play_V2 = dirV2 (mk2V "spille" "spilte") ; + policeman_N = mk2N "politi" "politien" ; + priest_N = mk2N "prest" "presten" ; + probable_AS = mkAS (regA "sannsynlig") ; + queen_N = regGenN "dronning" feminine ; + radio_N = regGenN "radio" masculine ; + rain_V0 = mkV0 (regV "regne") ; + read_V2 = dirV2 (mk2V "lese" "leste") ; + red_A = regADeg "rød" ; + religion_N = mk2N "religion" "religionen" ; + restaurant_N = mk2N "restaurant" "restauranten" ; + river_N = mk2N "elv" "elva" ; + rock_N = regGenN "stein" masculine ; + roof_N = regGenN "tak" neutrum ; + rubber_N = mk2N "gummi" "gummien" ; + run_V = vaereV IrregNor.springe_V ; + say_VS = mkVS si_V ; + school_N = regGenN "skole" feminine; + science_N = mk2N "vitenskap" "vitenskapen" ; + sea_N = mk2N "sjø" "sjøen" ; + seek_V2 = mkV2 (mk2V "lete" "lette") (mkPrep "etter") ; + see_V2 = dirV2 se_V ; + sell_V3 = dirV3 selge_V (mkPrep "til") ; + send_V3 = dirV3 (mk2V "sende" "sendte") (mkPrep "til") ; + sheep_N = mk2N "får" "fåret" ; + ship_N = regGenN "skip" neutrum ; + shirt_N = regGenN "skjorte" feminine ; + shoe_N = regGenN "sko" masculine ; + shop_N = mk2N "butikk" "butikken" ; + short_A = regADeg "kort" ; + silver_N = mk2N "sølv" "sølvet"; + sister_N = mkN "søster" "søsteren" "søstrer" "søstrene" ; + sleep_V = irregV "sove" "sov" "sovet" ; + small_A = mkADeg "liten" "lite" "små" "mindre" "minst" ; ---- lille + snake_N = regGenN "orm" masculine ; + sock_N = regGenN "strømpe" masculine ; + speak_V2 = dirV2 (regV "snakke") ; + star_N = regGenN "stjerne" feminine ; + steel_N = regGenN "stål" neutrum ; + stone_N = regGenN "stein" masculine ; + stove_N = regGenN "komfyr" masculine ; + student_N = mk2N "student" "studenten" ; + stupid_A = mk3ADeg "dum" "dumt" "dumme" ; + sun_N = regGenN "sol" feminine ; + switch8off_V2 = dirV2 (partV (irregV "slå" "slo" "slått") "av") ; + switch8on_V2 = dirV2 (partV (irregV "slå" "slo" "slått") "på") ; + table_N = regGenN "bord" neutrum ; + talk_V3 = mkV3 (regV "snakke") (mkPrep "til") (mkPrep "om") ; + teacher_N = mkN "lærer" "læreren" "lærere" "lærerne" ; + teach_V2 = dirV2 (mk2V "undervise" "underviste") ; + television_N = mk2N "fjernsyn" "fjernsynet" ; + thick_A = mk2ADeg "tykk" "tykt" ; + thin_A = mk2ADeg "tynn" "tynt" ; + train_N = regGenN "tog" neutrum ; + travel_V = vaereV (mk2V "reise" "reiste") ; + tree_N = mkN "tre" "treet" "trær" "træne" ; + ---- trousers_N = regGenN "trousers" ; ---- pl t ! + ugly_A = mk2ADeg "stygg" "stygt" ; + understand_V2 = dirV2 (irregV "forstå" "forstod" "forstått") ; + university_N = regGenN "universitet" neutrum ; + village_N = mk2N "grend" "grenda" ; + wait_V2 = mkV2 (regV "vente") (mkPrep "på") ; + walk_V = vaereV IrregNor.gå_V ; + warm_A = regADeg "varm" ; + war_N = regGenN "krig" masculine ; + watch_V2 = mkV2 se_V (mkPrep "på") ; + water_N = mk2N "vatn" "vatnet" ; + white_A = regADeg "hvit" ; + window_N = mkN "vindu" "vinduet" "vinduer" "vinduene" ; ---- er? + wine_N = mk2N "vin" "vinen" ; + win_V2 = dirV2 (irregV "vinne" "vant" "vunnet") ; + woman_N = regGenN "kvinne" feminine ; ---- kvinnen + wonder_VQ = mkVQ (regV "undre") ; ---- seg + wood_N = mkN "tre" "treet" "trær" "træne" ; + write_V2 = dirV2 (irregV "skrive" "skrev" "skrevet") ; + yellow_A = regADeg "gul" ; + young_A = irregADeg "ung" "yngre" "yngst" ; + + do_V2 = dirV2 (irregV "gjøre" "gjorde" "gjort") ; + now_Adv = mkAdv "nå" ; + already_Adv = mkAdv "allerede" ; + song_N = mk2N "sang" "sangen" ; + add_V3 = mkV3 (partV (irregV "legge" "la" "lagt") "til") noPrep (mkPrep "til") ; + number_N = mk2N "nummer" "nummeret" ; + put_V2 = mkV2 (irregV "sette" "satte" "satt") noPrep ; + stop_V = vaereV (regV "stanse") ; + jump_V = regV "hoppe" ; + + left_Ord = {s = "venstre" ; isDet = True} ; + right_Ord = {s = "høyre" ; isDet = True} ; + far_Adv = mkAdv "fjern" ; + correct_A = regA "riktig" ; + dry_A = mk2A "tørr" "tørt" ; + dull_A = regA "sløv" ; + full_A = regA "full" ; + heavy_A = irregADeg "tung" "tyngre" "tyngst" ; + near_A = mkADeg "nære" "nære" "nære" "nærmere" "nærmest" ; + rotten_A = mk3ADeg "råtten" "råttent" "råtne" ; + round_A = regA "rund" ; + sharp_A = mk2A "kvass" "kvast" ; + smooth_A = mk2A "slett" "slett" ; + straight_A = regA "rak" ; + wet_A = regA "våt" ; + wide_A = regA "bred" ; + animal_N = mk2N "dyr" "dyret" ; + ashes_N = mk2N "aske" "aska" ; + back_N = mk2N "rygg" "ryggen" ; + bark_N = mk2N "bark" "barken" ; + belly_N = mk2N "mage" "magen" ; + blood_N = mk2N "blod" "blodet" ; + bone_N = mk2N "bein" "beinet" ; + breast_N = mk2N "bryst" "brystet" ; + cloud_N = mk2N "sky" "skya" ; + day_N = mk2N "dag" "dagen" ; + dust_N = mk2N "støv" "støvet" ; + ear_N = mk2N "øre" "øret" ; + earth_N = mk2N "jord" "jorda" ; + egg_N = mk2N "egg" "egget" ; + eye_N = mkN "øye" "øyet" "øyne" "øynene" ; + fat_N = mk2N "fett" "fettet" ; + feather_N = mk2N "fjør" "fjøra" ; + fingernail_N = mk2N "negl" "neglen" ; + fire_N = mk2N "ild" "ilden" ; + flower_N = mk2N "blomst" "blomsten" ; + fog_N = mk2N "tåke" "tåka" ; + foot_N = mk2N "fot" "føtter" ; + forest_N = mk2N "skog" "skogen" ; + grass_N = mk2N "gras" "graset" ; + guts_N = mk2N "tarm" "tarmen" ; ---- involler + hair_N = mk2N "hår" "håret" ; + hand_N = mk2N "hånd" "hånden" ; + head_N = mk2N "hode" "hodet" ; + heart_N = mk2N "hjerte" "hjertet" ; + horn_N = mk2N "horn" "hornet" ; + husband_N = mkN "ektemann" "ektemannen" "ektemenn" "ektemennen" ; + ice_N = mk2N "is" "isen" ; + knee_N = mkN "kne" "kneet" "knær" "knæne" ; + leaf_N = mk2N "løv" "løvet" ; + leg_N = mk2N "bein" "beinet" ; + liver_N = mkN "lever" "leveren" "levrer" "levrene" ; + louse_N = mk2N "lus" "lusa" ; + mouth_N = mk2N "munn" "munnen" ; + name_N = mk2N "navn" "navnet" ; + neck_N = mk2N "nakke" "nakken" ; + night_N = mkN "natt" "natta" "netter" "nettene" ; + nose_N = mk2N "nese" "nesen" ; + person_N = mk2N "person" "personen" ; + rain_N = mk2N "regn" "regnet" ; + road_N = mk2N "vei" "veien" ; + root_N = mkN "rot" "rota" "røtter" "røttene" ; + rope_N = mk2N "tau" "tauet" ; + salt_N = mk2N "salt" "saltet" ; + sand_N = mk2N "sand" "sanden" ; + seed_N = mk2N "frø" "frøet" ; + skin_N = mk2N "skinn" "skinnet" ; + sky_N = mkN "himmel" "himmelen" "himler" "himlene" ; + smoke_N = mk2N "røyk" "røyken" ; + snow_N = mk2N "snø" "snøen" ; + stick_N = mk2N "pinne" "pinnen" ; + tail_N = mk2N "hale" "halen" ; + tongue_N = mk2N "tunge" "tunga" ; + tooth_N = mkN "tann" "tanna" "tenner" "tennene" ; + wife_N = mk2N "kone" "kona" ; + wind_N = mk2N "vind" "vinden" ; + wing_N = mk2N "vinge" "vingen" ; + worm_N = mk2N "mark" "marken" ; + year_N = mk2N "år" "året" ; + bite_V2 = dirV2 (IrregNor.bite_V) ; + blow_V = mk2V "blåse" "blåste" ; + burn_V = brenne_V ; + count_V2 = dirV2 (regV "regne") ; + cut_V2 = dirV2 (skjære_V) ; + dig_V = mk2V "grave" "gravde" ; + fall_V = vaereV falle_V ; + fear_V2 = dirV2 (regV "frykte") ; + fight_V2 = dirV2 (slåss_V) ; + float_V = flyte_V ; + flow_V = renne_V ; + fly_V = vaereV IrregNor.fly_V ; + freeze_V = fryse_V ; + give_V3 = dirV3 gi_V (mkPrep "til"); + hit_V2 = dirV2 (slå_V) ; + hold_V2 = dirV2 (holde_V) ; + hunt_V2 = dirV2 (regV "jakte") ; + kill_V2 = dirV2 (mk2V "drepe" "drepte") ; + laugh_V = mkV "le" "ler" "les" "lo" "ledd" "le" ; + lie_V = ligge_V ; + play_V = mk2V "leke" "lekte" ; + pull_V2 = dirV2 (dra_V) ; + push_V2 = dirV2 (irregV "skyve" "skjøv" "skjøvet") ; + rub_V2 = dirV2 (gni_V) ; + scratch_V2 = dirV2 (regV "klø") ; + sew_V = mk2V "sy" "sydde" ; + sing_V = synge_V ; + sit_V = sitte_V ; + smell_V = regV "lukte" ; + spit_V = regV "spytte" ; + split_V2 = dirV2 (mk2V "kløyve" "kløyvde") ; + squeeze_V2 = dirV2 (mk2V "klemme" "klemte") ; + stab_V2 = dirV2 (stikke_V) ; + stand_V = vaereV stå_V ; + suck_V2 = dirV2 (suge_V) ; + swell_V = partV (regV "hovne") "opp" ; + swim_V = regV "simme" ; + think_V = mk2V "tenke" "tenkte" ; + throw_V2 = dirV2 (regV "kaste") ; + tie_V2 = dirV2 (regV "knytte") ; + turn_V = mk2V "vende" "vendte" ; + vomit_V = partV (regV "kaste") "opp" ; + wash_V2 = dirV2 (regV "vaske") ; + wipe_V2 = dirV2 (regV "tørke") ; + breathe_V = regV "puste" ; + + + grammar_N = regN "grammatikk" ; + language_N = mk2N "språk" "språket" ; + rule_N = mkN "regel" "regelen" "regler" "reglene" ; + + question_N = mk2N "spørsmål" "spørsmålet" ; +---- ready_A = regA "färdig" ; +---- reason_N = regN "anledning" ; + today_Adv = mkAdv "idag" ; +---- uncertain_A = mk3A "osäker" "osäkert" "osäkra" ; + +} ; + +-- a" -> e" 86 +-- ö -> ø 66 +-- ck -> kk 20 +-- ä -> e 44 diff --git a/old-lib/resource/norwegian/MathNor.gf b/old-lib/resource/norwegian/MathNor.gf new file mode 100644 index 000000000..53e9ffd99 --- /dev/null +++ b/old-lib/resource/norwegian/MathNor.gf @@ -0,0 +1,2 @@ +concrete MathNor of Math = CatNor ** MathScand with + (ResScand = ResNor) ; diff --git a/old-lib/resource/norwegian/MorphoNor.gf b/old-lib/resource/norwegian/MorphoNor.gf new file mode 100644 index 000000000..13a87125a --- /dev/null +++ b/old-lib/resource/norwegian/MorphoNor.gf @@ -0,0 +1,171 @@ +--1 A Simple Norwegian Resource Morphology +-- +-- Aarne Ranta 2002 +-- +-- This resource morphology contains definitions needed in the resource +-- syntax. It moreover contains copies of the most usual inflectional patterns +-- as defined in functional morphology (in the Haskell file $RulesSw.hs$). +-- +-- We use the parameter types and word classes defined for morphology. + +resource MorphoNor = CommonScand, ResNor ** open Prelude, Predef in { + +-- genders + +oper + masc = Utr Masc ; + fem = Utr Fem ; + neutr = Neutr ; + +-- type synonyms + + Subst : Type = {s : Number => Species => Case => Str} ; + Adj = Adjective ; + +-- nouns + + mkSubstantive : (_,_,_,_ : Str) -> Subst = + \dreng, drengen, drenger, drengene -> + {s = nounForms dreng drengen drenger drengene} ; + + extNGen : Str -> Gender = \s -> case last s of { + "n" => Utr Masc ; + "a" => Utr Fem ; + _ => Neutr + } ; + + nBil : Str -> Subst = \bil -> + mkSubstantive bil (bil + "en") (bil + "er") (bil + "erne") ** + {h1 = masc} ; + + nUke : Str -> Subst = \uke -> + mkSubstantive uke (init uke + "a") (uke + "r") (uke + "ne") ** + {h1 = fem} ; + + nHus : Str -> Subst = \hus -> + mkSubstantive hus (hus + "et") hus (hus + "ene") ** + {h1 = neutr} ; + + nHotell : Str -> Subst = \hotell -> + mkSubstantive hotell (hotell + "et") (hotell + "er") (hotell + "ene") ** + {h1 = neutr} ; + + + + +-- adjectives + + mkAdject : (_,_,_,_,_ : Str) -> Adj = + \stor,stort,store,storre,storst -> {s = table { + AF (APosit (Strong SgUtr )) c => mkCase c stor ; + AF (APosit (Strong SgNeutr)) c => mkCase c stort ; + AF (APosit _) c => mkCase c store ; + AF ACompar c => mkCase c storre ; + AF (ASuperl SupStrong) c => mkCase c storst ; + AF (ASuperl SupWeak) c => mkCase c (storst + "e") + } + } ; + + aRod : Str -> Adj = \rod -> + mkAdject rod (rod + "t") (rod + "e") (rod + "ere") (rod + "est") ; + + aAbstrakt : Str -> Adj = \abstrakt -> + mkAdject abstrakt abstrakt (abstrakt + "e") (abstrakt + "ere") (abstrakt + "est") ; + + aRask : Str -> Adj = \rask -> + mkAdject rask rask (rask + "e") (rask + "ere") (rask + "est") ; + + aBillig : Str -> Adj = \billig -> + mkAdject billig billig (billig + "e") (billig + "ere") (billig + "st") ; + +-- verbs + + Verbum : Type = {s : VForm => Str} ; + + mkVerb6 : (_,_,_,_,_,_ : Str) -> Verbum = + \spise,spiser,spises,spiste,spist,spis -> {s = table { + VI (VInfin v) => mkVoice v spise ; + VF (VPres Act) => spiser ; + VF (VPres Pass) => spises ; + VF (VPret v) => mkVoice v spiste ; --# notpresent + VI (VSupin v) => mkVoice v spist ; --# notpresent + VI (VPtPret (Strong (SgUtr | SgNeutr)) c) => mkCase c spist ; + VI (VPtPret _ c) => case last spist of { + "a" => mkCase c spist ; + _ => mkCase c (spist + "e") + } ; + VF (VImper v) => mkVoice v spis + } + } ; + + vHusk : Str -> Verbum = \husk -> + let huska : Str = husk + "a" ---- variants {husk + "a" ; husk + "et"} + in + mkVerb6 (husk + "e") (husk + "er") (husk + "es") huska huska husk ; + + vSpis : Str -> Verbum = \spis -> + mkVerb6 (spis + "e") (spis + "er") (spis + "es") (spis + "te") (spis + "t") spis ; + + vLev : Str -> Verbum = \lev -> + let lever = case last lev of { + "r" => lev ; + _ => lev + "er" + } + in + mkVerb6 (lev + "e") lever (lev + "es") (lev + "de") (lev + "d") lev ; + + vBo : Str -> Verbum = \bo -> + mkVerb6 bo (bo + "r") (bo + "es") (bo + "dde") (bo + "dd") bo ; + + regVerb : Str -> Str -> Verbum = \spise, spiste -> + let + spis = init spise ; + te = dp 2 spiste + in + case te of { + "te" => vSpis spis ; + "de" => case last spise of { + "e" => vLev spis ; + _ => vBo spise + } ; + _ => vHusk spis + } ; + + +-- For $Numeral$. + +param DForm = ental | ton | tiotal ; + +oper + LinDigit = {s : DForm => CardOrd => Str} ; + + cardOrd : Str -> Str -> CardOrd => Str = \tre,tredje -> + table { + NCard _ => tre ; + NOrd a => tredje ---- a + } ; + + cardReg : Str -> CardOrd => Str = \syv -> + cardOrd syv (syv + case last syv of { + "n" => "de" ; + "e" => "nde" ; + _ => "ende" + }) ; + + + mkTal : (x1,_,_,_,x5 : Str) -> LinDigit = + \två, tolv, tjugo, andra, tolfte -> + {s = table { + ental => cardOrd två andra ; + ton => cardOrd tolv tolfte ; + tiotal => cardReg tjugo + } + } ; + + numPl : (CardOrd => Str) -> {s : CardOrd => Str ; n : Number} = \n -> + {s = n ; n = Pl} ; + + invNum : CardOrd = NCard Neutr ; + + +} diff --git a/old-lib/resource/norwegian/NounNor.gf b/old-lib/resource/norwegian/NounNor.gf new file mode 100644 index 000000000..d3aa276ab --- /dev/null +++ b/old-lib/resource/norwegian/NounNor.gf @@ -0,0 +1,2 @@ +concrete NounNor of Noun = CatNor ** NounScand with + (ResScand = ResNor) ; diff --git a/old-lib/resource/norwegian/NumeralNor.gf b/old-lib/resource/norwegian/NumeralNor.gf new file mode 100644 index 000000000..0d0a6e907 --- /dev/null +++ b/old-lib/resource/norwegian/NumeralNor.gf @@ -0,0 +1,85 @@ +concrete NumeralNor of Numeral = CatNor ** open MorphoNor in { + +lincat + Digit = {s : DForm => CardOrd => Str} ; + Sub10 = {s : DForm => CardOrd => Str ; n : Number} ; + Sub100, Sub1000, Sub1000000 = + {s : CardOrd => Str ; n : Number} ; + +lin + num x = x ; + + n2 = mkTal "to" "tolv" "tjue" "andre" "tolfte" ; + n3 = mkTal "tre" "tretten" "tretti" "tredje" "trettende" ; + n4 = mkTal "fire" "fjorten" "førti" "fjerde" "fjortende" ; + n5 = mkTal "fem" "femten" "femti" "femte" "femtende" ; + n6 = mkTal "seks" "seksten" "seksti" "sjette" "sextende" ; + n7 = mkTal "sju" "sytten" "sytti" "syvende" "syttende" ; + n8 = mkTal "åtte" "atten" "åtti" "åttende" "attende" ; + n9 = mkTal "ni" "nitten" "nitti" "niende" "nittende" ; + + pot01 = { + s = \\f => table { + NCard g => case g of {Neutr => "ett" ; _ => "en"} ; + _ => "første" + } ; + n = Sg + } ; + pot0 d = {s = \\f,g => d.s ! f ! g ; n = Pl} ; + pot110 = numPl (cardReg "ti") ; + pot111 = numPl (cardOrd "elve" "elfte") ; + pot1to19 d = numPl (d.s ! ton) ; + pot0as1 n = {s = n.s ! ental ; n = n.n} ; + pot1 d = numPl (d.s ! tiotal) ; + pot1plus d e = {s = \\g => d.s ! tiotal ! invNum ++ e.s ! ental ! g ; n = Pl} ; + pot1as2 n = n ; + pot2 d = + numPl (\\g => d.s ! ental ! invNum ++ cardOrd "hundre" "hundrede" ! g) ; + pot2plus d e = + {s = \\g => d.s ! ental ! invNum ++ "hundre" ++ "og" ++ e.s ! g ; n = Pl} ; + pot2as3 n = n ; + pot3 n = + numPl (\\g => n.s ! invNum ++ cardOrd "tusen" "tusende" ! g) ; + pot3plus n m = + {s = \\g => n.s ! invNum ++ "tusen" ++ "og" ++ m.s ! g ; n = Pl} ; + +-- Numerals from sequences of digits. + + lincat + Dig = TDigit ; + + lin + IDig d = d ; + + IIDig d i = { + s = \\o => d.s ! NCard neutrum ++ i.s ! o ; + n = Pl + } ; + + D_0 = mkDig "0" ; + D_1 = mk3Dig "1" "1:e" Sg ; + D_2 = mk2Dig "2" "2:e" ; + D_3 = mkDig "3" ; + D_4 = mkDig "4" ; + D_5 = mkDig "5" ; + D_6 = mkDig "6" ; + D_7 = mkDig "7" ; + D_8 = mkDig "8" ; + D_9 = mkDig "9" ; + + oper + mk2Dig : Str -> Str -> TDigit = \c,o -> mk3Dig c o Pl ; + mkDig : Str -> TDigit = \c -> mk2Dig c (c + ":e") ; + + mk3Dig : Str -> Str -> Number -> TDigit = \c,o,n -> { + s = table {NCard _ => c ; NOrd _ => o} ; + n = n + } ; + + TDigit = { + n : Number ; + s : CardOrd => Str + } ; + +} + diff --git a/old-lib/resource/norwegian/ParadigmsNor.gf b/old-lib/resource/norwegian/ParadigmsNor.gf new file mode 100644 index 000000000..cdb71a1e6 --- /dev/null +++ b/old-lib/resource/norwegian/ParadigmsNor.gf @@ -0,0 +1,502 @@ +--# -path=.:../scandinavian:../common:../abstract:../../prelude + +--1 Norwegian Lexical Paradigms +-- +-- Aarne Ranta 2003 +-- +-- This is an API for the user of the resource grammar +-- for adding lexical items. It gives functions for forming +-- expressions of open categories: nouns, adjectives, verbs. +-- It covers the "bokmål" variant of Norwegian. +-- +-- Closed categories (determiners, pronouns, conjunctions) are +-- accessed through the resource syntax API, $Structural$. +-- +-- The main difference with $MorphoNor.gf$ is that the types +-- referred to are compiled resource grammar types. We have moreover +-- had the design principle of always having existing forms, rather +-- than stems, as string arguments of the paradigms. +-- +-- The structure of functions for each word class $C$ is the following: +-- first we give a handful of patterns that aim to cover all +-- regular cases. Then we give a worst-case function $mkC$, which serves as an +-- escape to construct the most irregular words of type $C$. +-- However, this function should only seldom be needed: we have a +-- separate module [``IrregNor`` ../../norwegian/IrregNor], +-- which covers irregularly inflected verbs. + +resource ParadigmsNor = + open + (Predef=Predef), + Prelude, + CommonScand, + ResNor, + MorphoNor, + CatNor in { + +--2 Parameters +-- +-- To abstract over gender names, we define the following identifiers. + +oper + Gender : Type ; + + masculine : Gender ; + feminine : Gender ; + neutrum : Gender ; + +-- To abstract over number names, we define the following. + + Number : Type ; + + singular : Number ; + plural : Number ; + +-- To abstract over case names, we define the following. + + Case : Type ; + + nominative : Case ; + genitive : Case ; + +-- Prepositions used in many-argument functions are just strings. + + mkPrep : Str -> Prep ; + noPrep : Prep ; -- empty string + +--2 Nouns + +-- The regular function takes the singular indefinite form +-- and computes the other forms and the gender by a heuristic. +-- The heuristic is that nouns ending "e" are feminine like "kvinne", +-- all others are masculine like "bil". +-- Giving gender manually makes the heuristic more reliable. +-- One can also compute the gender from the definite form. +-- gender is computed from the definite form. +-- If in doubt, use the $cc$ command to test! +-- In the worst case, give all four forms. The gender is computed from the +-- last letter of the second form (if "n", then $utrum$, otherwise $neutrum$). + + mkN : overload { + mkN : Str -> N ; + mkN : Str -> Gender -> N ; + mkN : (bil,bilen : Str) -> N ; + mkN : (dreng,drengen,drenger,drengene : Str) -> N + } ; + + + +--3 Compound nouns +-- +-- All the functions above work quite as well to form compound nouns, +-- such as "fotboll". + + +--3 Relational nouns +-- +-- Relational nouns ("datter til x") need a preposition. + + mkN2 : N -> Prep -> N2 ; + +-- The most common preposition is "av", and the following is a +-- shortcut for regular, $nonhuman$ relational nouns with "av". + + regN2 : Str -> Gender -> N2 ; + +-- Use the function $mkPrep$ or see the section on prepositions below to +-- form other prepositions. +-- +-- Three-place relational nouns ("forbindelse fra x til y") +-- need two prepositions. + + mkN3 : N -> Prep -> Prep -> N3 ; + + +--3 Relational common noun phrases +-- +-- In some cases, you may want to make a complex $CN$ into a +-- relational noun (e.g. "den gamle kongen av"). However, $N2$ and +-- $N3$ are purely lexical categories. But you can use the $AdvCN$ +-- and $PrepNP$ constructions to build phrases like this. + +-- +--3 Proper names and noun phrases +-- +-- Proper names, with a regular genitive, are formed as follows +-- Sometimes you can reuse a common noun as a proper name, e.g. "Bank". + + mkPN : overload { + mkPN : Str -> PN ; -- masculine + mkPN : Str -> Gender -> PN ; + mkPN : N -> PN ; + } ; + + +--2 Adjectives + +-- The regular pattern works for many adjectives, e.g. those ending +-- with "ig". Two, five, or at worst five forms are sometimes needed. + + mkA : overload { + mkA : (fin : Str) -> A ; + mkA : (fin,fint : Str) -> A ; + mkA : (galen,galet,galne : Str) -> A ; + mkA : (stor,stort,store,storre,storst : Str) -> A ; + +-- If comparison is formed by "mer", "mest", as in general for +-- long adjective, the following pattern is used: + + mkA : A -> A ; -- -/mer/mest norsk + } ; + + +--3 Two-place adjectives +-- +-- Two-place adjectives need a preposition for their second argument. + + mkA2 : A -> Prep -> A2 ; + + + +--2 Adverbs + +-- Adverbs are not inflected. Most lexical ones have position +-- after the verb. Some follow the verb (e.g. "altid"). + + mkAdv : Str -> Adv ; -- e.g. her + mkAdV : Str -> AdV ; -- e.g. altid + +-- Adverbs modifying adjectives and sentences can also be formed. + + mkAdA : Str -> AdA ; + + +--2 Verbs +-- + + mkV : overload { + +-- The 'regular verb' function is the first conjugation. + + mkV : (snakke : Str) -> V ; + +-- The almost regular verb function needs the infinitive and the preteritum. + + mkV : (leve,levde : Str) -> V ; + +-- There is an extensive list of irregular verbs in the module $IrregNor$. +-- In practice, it is enough to give three forms, as in school books. + + mkV : (drikke, drakk, drukket : Str) -> V ; + +-- The worst case needs six forms. + + mkV : (spise,spiser,spises,spiste,spist,spis : Str) -> V ; + +--3 Verbs with a particle. +-- +-- The particle, such as in "lukke opp", is given as a string. + + mkV : V -> Str -> V ; + } ; + + + +--3 Verbs with 'være' as auxiliary +-- +-- By default, the auxiliary is "have". This function changes it to "være". + + vaereV : V -> V ; + + + +--3 Deponent verbs. +-- +-- Some words are used in passive forms only, e.g. "trives", some as +-- reflexive e.g. "forestille seg". + + depV : V -> V ; + reflV : V -> V ; + +--3 Two-place verbs +-- +-- Two-place verbs need a preposition, except the special case with direct object. +-- (transitive verbs). Notice that, if a particle is needed, it comes from the $V$. + + mkV2 : overload { + mkV2 : Str -> V2 ; + mkV2 : V -> V2 ; + mkV2 : V -> Prep -> V2 ; + } ; + + +--3 Three-place verbs +-- +-- Three-place (ditransitive) verbs need two prepositions, of which +-- the first one or both can be absent. + + mkV3 : V -> Prep -> Prep -> V3 ; -- snakke, med, om + dirV3 : V -> Prep -> V3 ; -- gi,_,til + dirdirV3 : V -> V3 ; -- gi,_,_ + +--3 Other complement patterns +-- +-- Verbs and adjectives can take complements such as sentences, +-- questions, verb phrases, and adjectives. + + mkV0 : V -> V0 ; + mkVS : V -> VS ; + mkV2S : V -> Prep -> V2S ; + mkVV : V -> VV ; + mkV2V : V -> Prep -> Prep -> V2V ; + mkVA : V -> VA ; + mkV2A : V -> Prep -> V2A ; + mkVQ : V -> VQ ; + mkV2Q : V -> Prep -> V2Q ; + + mkAS : A -> AS ; + mkA2S : A -> Prep -> A2S ; + mkAV : A -> AV ; + mkA2V : A -> Prep -> A2V ; + +-- Notice: categories $AS, A2S, AV, A2V$ are just $A$. +-- $V0$ is just $V$. + + V0 : Type ; + AS, A2S, AV, A2V : Type ; + + +--. +--2 Definitions of the paradigms +-- +-- The definitions should not bother the user of the API. So they are +-- hidden from the document. + + Gender = MorphoNor.Gender ; + Number = MorphoNor.Number ; + Case = MorphoNor.Case ; + masculine = Utr Masc ; + feminine = Utr Fem ; + neutrum = Neutr ; + singular = Sg ; + plural = Pl ; + nominative = Nom ; + genitive = Gen ; + + mk4N x y z u = mkSubstantive x y z u ** {g = extNGen y ; lock_N = <>} ; + + regN x = regGenN x g where { + g = case <x : Str> of { + _ + "e" => Utr Fem ; + _ => Utr Masc + } + } ; + + regGenN x g = case last x of { + "e" => case g of { + Utr Masc => mk4N x (x + "n") (x + "r") (x + "ne") ; + Utr Fem => mk4N x (init x + "a") (x + "r") (x + "ne") ; + Neutr => mk4N x (x + "t") (x + "r") (init x + "a") + } ; + _ => case g of { + Utr Masc => mk4N x (x + "en") (x + "er") (x + "ene") ; + Utr Fem => mk4N x (x + "a") (x + "er") (x + "ene") ; + Neutr => mk4N x (x + "et") (x + "") (x + "a") + } + } ; + + mk2N x y = case last y of { + "n" => regGenN x masculine ; + "a" => regGenN x feminine ; + _ => regGenN x neutrum + } ; + + + mkN2 = \n,p -> n ** {lock_N2 = <> ; c2 = mkComplement p.s} ; + regN2 n g = mkN2 (regGenN n g) (mkPrep "av") ; + mkN3 = \n,p,q -> n ** {lock_N3 = <> ; c2 = mkComplement p.s ; c3 = mkComplement q.s} ; + + regGenPN n g = {s = \\c => mkCase c n ; g = g} ** {lock_PN = <>} ; + regPN n = regGenPN n utrum ; + nounPN n = {s = n.s ! singular ! Indef ; g = n.g ; lock_PN = <>} ; + +-- To form a noun phrase that can also be plural and have an irregular +-- genitive, you can use the worst-case function. + + makeNP : Str -> Str -> Number -> Gender -> NP ; + makeNP x y n g = + {s = table {NPPoss _ => x ; _ => y} ; a = agrP3 g n ; + lock_NP = <>} ; + + mk3A a b c = (mkAdject a b c [] []) ** {isComp = False ; lock_A = <>} ; + mk2A a b = mk3A a b (a + "e") ; + regA a = (regADeg a) ** {isComp = False ; lock_A = <>} ; + + mkA2 a p = a ** {c2 = mkComplement p.s ; lock_A2 = <>} ; + + mkADeg a b c d e = mkAdject a b c d e ** {isComp = False ; lock_A = <>} ; + regADeg a = case Predef.dp 2 a of { + "ig" => aBillig a ; + "sk" => aRask a ; + _ => aRod a + } ** {isComp = False ; lock_A = <>} ; + irregADeg a b c = mkAdject a (a + "t") (a + "e") b c ** + {isComp = False ; lock_A = <>} ; + mk3ADeg a b c = mkAdject a b c (a + "ere") (a + "est") ** + {isComp = False ; lock_A = <>} ; + mk2ADeg a b = mkAdject a b (a + "e") (a + "ere") (a + "est") ** + {isComp = False ; lock_A = <>} ; + + compoundA adj = {s = adj.s ; isComp = True ; lock_A = <>} ; + + mkAdv x = ss x ** {lock_Adv = <>} ; + mkAdV x = ss x ** {lock_AdV = <>} ; + mkAdA x = ss x ** {lock_AdA = <>} ; + + mkPrep p = {s = p ; lock_Prep = <>} ; + noPrep = mkPrep [] ; + + mk6V a b c d e f = mkVerb6 a b c d e f ** + {part = [] ; vtype = VAct ; isVaere = False ; lock_V = <>} ; + + regV a = case last a of { + +--3 Verbs with a particle. +-- +-- The particle, such as in "lukke opp", is given as a string. + + + +--3 Verbs with a particle. +-- +-- The particle, such as in "lukke opp", is given as a string. + + + "e" => vHusk (init a) ; + _ => vBo a + } ** {part = [] ; vtype = VAct ; isVaere = False ; lock_V = <>} ; + + mk2V a b = regVerb a b ** {part = [] ; vtype = VAct ; isVaere = False ; lock_V = <>} ; + + irregV = + \drikke,drakk,drukket -> + let + drikk = case last drikke of { + "e" => init drikke ; + _ => drikke + } ; + drikker = case last (init drikke) of { + "r" => init drikke ; + _ => drikke + "r" + } + in + mk6V drikke drikker (drikke + "s") drakk drukket drikk ; + + vaereV v = { + s = v.s ; + part = [] ; + vtype = v.vtype ; + isVaere = True ; + lock_V = <> + } ; + + partV v p = {s = v.s ; part = p ; vtype = v.vtype ; isVaere = v.isVaere ; lock_V = <>} ; + depV v = {s = v.s ; part = v.part ; vtype = VPass ; isVaere = False ; lock_V = <>} ; + reflV v = {s = v.s ; part = v.part ; vtype = VRefl ; isVaere = False ; lock_V = <>} ; + + mk2V2 v p = v ** {c2 = mkComplement p.s ; lock_V2 = <>} ; + dirV2 v = mk2V2 v noPrep ; + + mkV3 v p q = v ** {c2 = mkComplement p.s ; c3 = mkComplement q.s ; lock_V3 = <>} ; + dirV3 v p = mkV3 v noPrep p ; + dirdirV3 v = dirV3 v noPrep ; + + mkV0 v = v ** {lock_V0 = <>} ; + mkVS v = v ** {lock_VS = <>} ; + mkV2S v p = mk2V2 v p ** {lock_V2S = <>} ; + mkVV v = v ** {c2 = mkComplement "å" ; lock_VV = <>} ; + mkV2V v p t = mk2V2 v p ** {c3 = mkComplement "att" ; lock_V2V = <>} ; + mkVA v = v ** {lock_VA = <>} ; + mkV2A v p = mk2V2 v p ** {lock_V2A = <>} ; + mkVQ v = v ** {lock_VQ = <>} ; + mkV2Q v p = mk2V2 v p ** {lock_V2Q = <>} ; + + mkAS v = v ** {lock_A = <>} ; + mkA2S v p = mkA2 v p ** {lock_A = <>} ; + mkAV v = v ** {lock_A = <>} ; + mkA2V v p = mkA2 v p ** {lock_A = <>} ; + + V0 : Type = V ; + AS, A2S, AV : Type = A ; + A2V : Type = A2 ; + + +--------- + + mk2N : (bil,bilen : Str) -> N ; + mk4N : (dreng,drengen,drenger,drengene : Str) -> N ; + regN : Str -> N ; + regGenN : Str -> Gender -> N ; + mk2N : (bil,bilen : Str) -> N ; + + mkN = overload { + mkN : Str -> N = regN ; + mkN : Str -> Gender -> N = regGenN ; + mkN : (bil,bilen : Str) -> N = mk2N ; + mkN : (dreng,drengen,drenger,drengene : Str) -> N = mk4N + } ; + + mkPN = overload { + mkPN : Str -> PN = regPN ; -- masculine + mkPN : Str -> Gender -> PN = regGenPN ; + mkPN : N -> PN = nounPN ; + } ; + + regPN : Str -> PN ; -- utrum + regGenPN : Str -> Gender -> PN ; + nounPN : N -> PN ; + + mkA = overload { + mkA : (fin : Str) -> A = regADeg ; + mkA : (fin,fint : Str) -> A = mk2ADeg ; + mkA : (galen,galet,galne : Str) -> A = mk3ADeg ; + mkA : (stor,stort,store,storre,storst : Str) -> A = mkADeg ; + mkA : A -> A = compoundA ; -- -/mer/mest norsk + } ; + + mk3A : (galen,galet,galne : Str) -> A ; + regA : Str -> A ; + mk2A : (stor,stort : Str) -> A ; + mkADeg : (stor,stort,store,storre,storst : Str) -> A ; + regADeg : Str -> A ; + irregADeg : (tung,tyngre,tyngst : Str) -> A ; + mk3ADeg : (galen,galet,galne : Str) -> A ; + mk2ADeg : (bred,bredt : Str) -> A ; + compoundA : A -> A ; -- -/mer/mest norsk + + mkV = overload { + mkV : (snakke : Str) -> V = regV ; + mkV : (leve,levde : Str) -> V = mk2V ; + mkV : (drikke, drakk, drukket : Str) -> V = irregV ; + mkV : (spise,spiser,spises,spiste,spist,spis : Str) -> V = mk6V ; + mkV : V -> Str -> V = partV ; + } ; + + + regV : (snakke : Str) -> V ; + mk2V : (leve,levde : Str) -> V ; + irregV : (drikke, drakk, drukket : Str) -> V ; + mk6V : (spise,spiser,spises,spiste,spist,spis : Str) -> V ; + partV : V -> Str -> V ; + + + mkV2 = overload { + mkV2 : Str -> V2 = \s -> dirV2 (regV s) ; + mkV2 : V -> V2 = dirV2 ; + mkV2 : V -> Prep -> V2 = mk2V2 ; + } ; + + mk2V2 : V -> Prep -> V2 ; + dirV2 : V -> V2 ; + +} ; diff --git a/old-lib/resource/norwegian/PhraseNor.gf b/old-lib/resource/norwegian/PhraseNor.gf new file mode 100644 index 000000000..da463adb1 --- /dev/null +++ b/old-lib/resource/norwegian/PhraseNor.gf @@ -0,0 +1,2 @@ +concrete PhraseNor of Phrase = CatNor ** PhraseScand with + (ResScand = ResNor) ; diff --git a/old-lib/resource/norwegian/QuestionNor.gf b/old-lib/resource/norwegian/QuestionNor.gf new file mode 100644 index 000000000..8a7c08e0f --- /dev/null +++ b/old-lib/resource/norwegian/QuestionNor.gf @@ -0,0 +1,2 @@ +concrete QuestionNor of Question = CatNor ** QuestionScand with + (ResScand = ResNor) ; diff --git a/old-lib/resource/norwegian/RelativeNor.gf b/old-lib/resource/norwegian/RelativeNor.gf new file mode 100644 index 000000000..18be3bc45 --- /dev/null +++ b/old-lib/resource/norwegian/RelativeNor.gf @@ -0,0 +1,2 @@ +concrete RelativeNor of Relative = CatNor ** RelativeScand with + (ResScand = ResNor) ; diff --git a/old-lib/resource/norwegian/ResNor.gf b/old-lib/resource/norwegian/ResNor.gf new file mode 100644 index 000000000..490389ad2 --- /dev/null +++ b/old-lib/resource/norwegian/ResNor.gf @@ -0,0 +1,3 @@ +instance ResNor of ResScand = DiffNor ** open CommonScand, Prelude in { +} ; + diff --git a/old-lib/resource/norwegian/SentenceNor.gf b/old-lib/resource/norwegian/SentenceNor.gf new file mode 100644 index 000000000..eeca680ab --- /dev/null +++ b/old-lib/resource/norwegian/SentenceNor.gf @@ -0,0 +1,2 @@ +concrete SentenceNor of Sentence = CatNor ** SentenceScand with + (ResScand = ResNor) ; diff --git a/old-lib/resource/norwegian/StructuralNor.gf b/old-lib/resource/norwegian/StructuralNor.gf new file mode 100644 index 000000000..7f23ddd62 --- /dev/null +++ b/old-lib/resource/norwegian/StructuralNor.gf @@ -0,0 +1,129 @@ +concrete StructuralNor of Structural = CatNor ** + open MorphoNor, ParadigmsNor, Prelude in { + + flags optimize=all ; + + lin + above_Prep = ss "ovenfor" ; + after_Prep = ss "etter" ; + by8agent_Prep = ss "av" ; + all_Predet = {s = gennumForms "all" "alt" "alle"} ; + almost_AdA, almost_AdN = ss "nesten" ; + although_Subj = ss ["selv om"] ; + always_AdV = ss "altid" ; + and_Conj = {s1 = [] ; s2 = "og" ; n = Pl} ; + because_Subj = ss "fordi" ; + before_Prep = ss "før" ; + behind_Prep = ss "bakom" ; + between_Prep = ss "mellom" ; + both7and_DConj = sd2 "både" "og" ** {n = Pl} ; + but_PConj = ss "men" ; + by8means_Prep = ss "med" ; + can8know_VV, can_VV = + mkV "kunne" "kan" "kunn" "kunne" "kunnet" "kunnen" ** + {c2 = mkComplement [] ; lock_VV = <>} ; + during_Prep = ss "under" ; + either7or_DConj = sd2 "enten" "eller" ** {n = Sg} ; + everybody_NP = regNP "alle" "alles" Plg ; + every_Det = {s = \\_,_ => "hver" ; n = Sg ; det = DDef Indef} ; + everything_NP = regNP "alt" "alts" SgNeutr ; + everywhere_Adv = ss "overalt" ; + few_Det = {s = \\_,_ => "få" ; n = Pl ; det = DDef Indef} ; +--- first_Ord = {s = "første" ; isDet = True} ; DEPREC + for_Prep = ss "for" ; + from_Prep = ss "fra" ; + he_Pron = MorphoNor.mkNP "han" "ham" "hans" "hans" "hans" SgUtr P3 ; + here_Adv = ss "her" ; + here7to_Adv = ss "hit" ; + here7from_Adv = ss "herfra" ; + how_IAdv = ss "hvor" ; + how8many_IDet = {s = \\_ => ["hur mange"] ; n = Pl ; det = DDef Indef} ; + if_Subj = ss "hvis" ; + in8front_Prep = ss "foran" ; + i_Pron = + MorphoNor.mkNP "jeg" "meg" (variants {"min" ; "mi"}) "mit" "mine" SgUtr P1 ; --- mi + in_Prep = ss "i" ; + it_Pron = MorphoNor.regNP "det" "dets" SgNeutr ; + less_CAdv = ss "mindre" ; + many_Det = {s = \\_,_ => "mange" ; n = Pl ; det = DDef Indef} ; + more_CAdv = ss "mer" ; + most_Predet = {s = gennumForms ["den meste"] ["det meste"] ["de fleste"]} ; + much_Det = {s = \\_,_ => "mye" ; n = Pl ; det = DDef Indef} ; + must_VV = + mkV "måtte" "må" "må" "måtte" "måttet" "mått" ** + {c2 = mkComplement [] ; lock_VV = <>} ; + no_Utt = ss ["nei"] ; + on_Prep = ss "på" ; +--- one_Quant = {s = \\_ => genderForms ["en"] ["et"] ; n = Sg ; det = DIndef} ; DEPREC + only_Predet = {s = \\_ => "kun"} ; + or_Conj = {s1 = [] ; s2 = "eller" ; n = Pl} ; + otherwise_PConj = ss "annarledes" ; + part_Prep = ss "av" ; + please_Voc = ss "takk" ; --- + possess_Prep = ss "av" ; + quite_Adv = ss "temmelig" ; + she_Pron = MorphoNor.mkNP "hun" "henne" "hennes" "hennes" "hennes" SgUtr P3 ; + so_AdA = ss "så" ; + someSg_Det = {s = \\_ => genderForms "noen" "noe" ; n = Sg ; det = DIndef} ; + somePl_Det = {s = \\_,_ => "noen" ; n = Pl ; det = DIndef} ; + somebody_NP = regNP "noen" "noens" SgUtr ; + something_NP = regNP "noe" "noes" SgNeutr ; + somewhere_Adv = ss ["et eller annet sted"] ; ---- ? + that_Quant = + {s = table { + Sg => \\_ => genderForms ["den der"] ["det der"] ; + Pl => \\_,_ => ["de der"] + } ; + det = DDef Indef + } ; + there_Adv = ss "der" ; + there7to_Adv = ss "dit" ; + there7from_Adv = ss "derfra" ; + therefore_PConj = ss "derfor" ; + they_Pron = MorphoNor.mkNP "de" "dem" "deres" "deres" "deres" Plg P1 ; + this_Quant = + {s = table { + Sg => \\_ => genderForms ["denne"] ["dette"] ; + Pl => \\_,_ => ["disse"] + } ; + det = DDef Def + } ; + through_Prep = ss "gjennom" ; + too_AdA = ss "for" ; + to_Prep = ss "til" ; + under_Prep = ss "under" ; + very_AdA = ss "mye" ; + want_VV = + mkV "ville" "vil" "vill" "ville" "villet" "villed" ** + {c2 = mkComplement [] ; lock_VV = <>} ; + we_Pron = MorphoNor.mkNP "vi" "oss" "vår" "vårt" "våre" Plg P1 ; + whatSg_IP = {s = \\_ => "hva" ; gn = SgUtr} ; ---- infl + whatPl_IP = {s = \\_ => "hva" ; gn = Plg} ; ---- infl + when_IAdv = ss "når" ; + when_Subj = ss "når" ; + where_IAdv = ss "hver" ; + which_IQuant = { + s = table { + Sg => genderForms "hvilken" "hvilket" ; + Pl => \\_ => "hvilke" + } ; + det = DIndef + } ; + whoSg_IP = {s = vem.s ; gn = SgUtr} ; + whoPl_IP = {s = \\_ => "hvilke" ; gn = Plg} ; + why_IAdv = ss "hvorfor" ; + without_Prep = ss "uten" ; + with_Prep = ss "med" ; + yes_Utt = ss ["ja"] ; + youSg_Pron = + MorphoNor.mkNP "du" "deg" (variants {"din" ; "di"}) "dit" "dine" SgUtr P2 ; ---- + youPl_Pron = MorphoNor.mkNP "dere" "dere" "deres" "deres" "deres" Plg P2 ; + youPol_Pron = MorphoNor.mkNP "Dere" "Dere" "Deres" "Deres" "Deres" SgUtr P2 ; --- wrong in refl + +-- Auxiliaries that are used repeatedly. + + oper + vem = MorphoNor.mkNP "hvem" "hvem" "hvis" "hvis" "hvis" SgUtr P3 ; + +} + diff --git a/old-lib/resource/norwegian/VerbNor.gf b/old-lib/resource/norwegian/VerbNor.gf new file mode 100644 index 000000000..cd816e2fc --- /dev/null +++ b/old-lib/resource/norwegian/VerbNor.gf @@ -0,0 +1,2 @@ +concrete VerbNor of Verb = CatNor ** VerbScand with + (ResScand = ResNor) ; |
