forked from GitHub/gf-core
Norwegian complete but with many unchecked words
This commit is contained in:
27
lib/resource/norwegian/CountryNor.gf
Normal file
27
lib/resource/norwegian/CountryNor.gf
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
concrete CountryNor of Country = open CategoriesNor, ParadigmsNor in {
|
||||||
|
|
||||||
|
lincat
|
||||||
|
Country = PN ;
|
||||||
|
Nationality = A ;
|
||||||
|
Language = N ;
|
||||||
|
|
||||||
|
lin
|
||||||
|
Denmark = regPN "Danmark" neutrum ;
|
||||||
|
England = regPN "England" neutrum ;
|
||||||
|
Finland = regPN "Finland" neutrum ;
|
||||||
|
France = regPN "Frankrike" neutrum ;
|
||||||
|
Germany = regPN "Tyskland" neutrum ;
|
||||||
|
Italy = regPN "Italien" neutrum ;
|
||||||
|
Norway = regPN "Norge" neutrum ;
|
||||||
|
Russia = regPN "Ryssland" neutrum ;
|
||||||
|
Spain = regPN "Spanien" neutrum ;
|
||||||
|
Sweden = regPN "Sverige" neutrum ;
|
||||||
|
|
||||||
|
Danish = regA "dansk" ;
|
||||||
|
English = regA "engelsk" ;
|
||||||
|
|
||||||
|
DanishLang = regN "dansk" masculine ;
|
||||||
|
EnglishLang = regN "engelsk" masculine ;
|
||||||
|
|
||||||
|
|
||||||
|
} ;
|
||||||
22
lib/resource/norwegian/LangNor.gf
Normal file
22
lib/resource/norwegian/LangNor.gf
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
--# -path=.:../scandinavian:../abstract:../../prelude
|
||||||
|
|
||||||
|
concrete LangNor of Lang =
|
||||||
|
RulesNor,
|
||||||
|
ClauseNor,
|
||||||
|
StructuralNor,
|
||||||
|
BasicNor,
|
||||||
|
TimeNor,
|
||||||
|
CountryNor
|
||||||
|
|
||||||
|
** open Prelude, ParadigmsNor in {
|
||||||
|
|
||||||
|
lin
|
||||||
|
AdvDate d = prefixSS "på" d ;
|
||||||
|
AdvTime t = prefixSS "klokken" t ;
|
||||||
|
NWeekday w = w ;
|
||||||
|
PNWeekday w = nounPN w ;
|
||||||
|
|
||||||
|
PNCountry x = x ;
|
||||||
|
ANationality x = x ;
|
||||||
|
NLanguage x = x ;
|
||||||
|
}
|
||||||
@@ -8,7 +8,7 @@
|
|||||||
--
|
--
|
||||||
-- We use the parameter types and word classes defined for morphology.
|
-- We use the parameter types and word classes defined for morphology.
|
||||||
|
|
||||||
resource MorphoNor = open Prelude, TypesNor in {
|
resource MorphoNor = open Predef, Prelude, TypesNor in {
|
||||||
|
|
||||||
-- Danish grammar source: http://users.cybercity.dk/~nmb3879/danish.html
|
-- Danish grammar source: http://users.cybercity.dk/~nmb3879/danish.html
|
||||||
|
|
||||||
@@ -36,6 +36,12 @@ oper
|
|||||||
Gen => bil + "s" --- but: hus --> hus
|
Gen => bil + "s" --- but: hus --> hus
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
extNGen : Str -> NounGender = \s -> case last s of {
|
||||||
|
"n" => NUtr Masc ;
|
||||||
|
"a" => NUtr NoMasc ;
|
||||||
|
_ => NNeutr
|
||||||
|
} ;
|
||||||
|
|
||||||
nBil : Str -> Subst = \bil ->
|
nBil : Str -> Subst = \bil ->
|
||||||
mkSubstantive bil (bil + "en") (bil + "er") (bil + "erne") **
|
mkSubstantive bil (bil + "en") (bil + "er") (bil + "erne") **
|
||||||
{h1 = masc} ;
|
{h1 = masc} ;
|
||||||
@@ -74,6 +80,12 @@ oper
|
|||||||
aRask : Str -> Adj = \rask ->
|
aRask : Str -> Adj = \rask ->
|
||||||
mkAdjective rask rask (rask + "e") (rask + "ere") (rask + "est") ;
|
mkAdjective rask rask (rask + "e") (rask + "ere") (rask + "est") ;
|
||||||
|
|
||||||
|
aBillig : Str -> Adj = \billig ->
|
||||||
|
mkAdjective billig billig (billig + "e") (billig + "ere") (billig + "st") ;
|
||||||
|
|
||||||
|
extractPositive : Adj -> {s : AdjFormPos => Case => Str} = \adj ->
|
||||||
|
{s = \\a,c => adj.s ! (AF (Posit a) c)} ;
|
||||||
|
|
||||||
-- verbs
|
-- verbs
|
||||||
|
|
||||||
mkVerb : (_,_,_,_,_,_ : Str) -> Verbum =
|
mkVerb : (_,_,_,_,_,_ : Str) -> Verbum =
|
||||||
@@ -83,7 +95,11 @@ oper
|
|||||||
VF (Pres Pass) => spises ;
|
VF (Pres Pass) => spises ;
|
||||||
VF (Pret v) => mkVoice v spiste ;
|
VF (Pret v) => mkVoice v spiste ;
|
||||||
VI (Supin v) => mkVoice v spist ;
|
VI (Supin v) => mkVoice v spist ;
|
||||||
VI (PtPret _ c) => mkCase spist ! c ; ---- GenNum
|
VI (PtPret (Strong (ASg _)) c) => mkCase spist ! c ;
|
||||||
|
VI (PtPret _ c) => case last spist of {
|
||||||
|
"a" => mkCase spist ! c ;
|
||||||
|
_ => mkCase (spist + "e") ! c
|
||||||
|
} ;
|
||||||
VF (Imper v) => mkVoice v spis
|
VF (Imper v) => mkVoice v spis
|
||||||
}
|
}
|
||||||
} ;
|
} ;
|
||||||
@@ -97,14 +113,37 @@ oper
|
|||||||
} ;
|
} ;
|
||||||
|
|
||||||
vHusk : Str -> Verbum = \husk ->
|
vHusk : Str -> Verbum = \husk ->
|
||||||
mkVerb (husk + "e") (husk + "er") (husk + "es") (husk + "et") (husk + "et") husk ;
|
let huska : Str = husk + "a" ---- variants {husk + "a" ; husk + "et"}
|
||||||
|
in
|
||||||
|
mkVerb (husk + "e") (husk + "er") (husk + "es") huska huska husk ;
|
||||||
|
|
||||||
vSpis : Str -> Verbum = \spis ->
|
vSpis : Str -> Verbum = \spis ->
|
||||||
mkVerb (spis + "e") (spis + "er") (spis + "es") (spis + "te") (spis + "t") spis ;
|
mkVerb (spis + "e") (spis + "er") (spis + "es") (spis + "te") (spis + "t") spis ;
|
||||||
|
|
||||||
|
vLev : Str -> Verbum = \lev ->
|
||||||
|
mkVerb (lev + "e") (lev + "er") (lev + "es") (lev + "de") (lev + "d") lev ;
|
||||||
|
|
||||||
vBo : Str -> Verbum = \bo ->
|
vBo : Str -> Verbum = \bo ->
|
||||||
mkVerb bo (bo + "r") (bo + "es") (bo + "dde") (bo + "dd") bo ;
|
mkVerb 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
|
||||||
|
} ;
|
||||||
|
|
||||||
|
irregVerb : (drikke,drakk,drukket : Str) -> Verbum =
|
||||||
|
\drikke,drakk,drukket ->
|
||||||
|
mkVerb drikke (drikke + "r") (drikke + "s") drakk drukket (init drikke) ;
|
||||||
|
|
||||||
-- pronouns
|
-- pronouns
|
||||||
|
|
||||||
oper jag_32 : ProPN =
|
oper jag_32 : ProPN =
|
||||||
@@ -208,7 +247,7 @@ oper De_38 : ProPN =
|
|||||||
|
|
||||||
oper den_39 : ProPN =
|
oper den_39 : ProPN =
|
||||||
{s = table {
|
{s = table {
|
||||||
PNom => "de " ;
|
PNom => "de" ;
|
||||||
PAcc => "den" ;
|
PAcc => "den" ;
|
||||||
PGen _ => "dens"
|
PGen _ => "dens"
|
||||||
} ;
|
} ;
|
||||||
|
|||||||
@@ -71,9 +71,11 @@ oper
|
|||||||
|
|
||||||
regN : Str -> Gender -> N ;
|
regN : Str -> Gender -> N ;
|
||||||
|
|
||||||
-- In practice the worst case is often just: give singular and plural indefinite.
|
-- This function takes the singular indefinite and definite forms; the
|
||||||
|
-- gender is computed from the definite form.
|
||||||
|
|
||||||
|
mk2N : (bil,bilen : Str) -> N ;
|
||||||
|
|
||||||
mk2N : (dreng,drenger : Str) -> N ;
|
|
||||||
|
|
||||||
--3 Compound nouns
|
--3 Compound nouns
|
||||||
--
|
--
|
||||||
@@ -199,14 +201,14 @@ oper
|
|||||||
|
|
||||||
regV : (snakke : Str) -> V ;
|
regV : (snakke : Str) -> V ;
|
||||||
|
|
||||||
-- The almost regular verb function needs the infinitive and the present.
|
-- The almost regular verb function needs the infinitive and the preteritum.
|
||||||
|
|
||||||
mk2V : (leve,levde : Str) -> V ;
|
mk2V : (leve,levde : Str) -> V ;
|
||||||
|
|
||||||
-- There is an extensive list of irregular verbs in the module $IrregularSwe$.
|
-- There is an extensive list of irregular verbs in the module $IrregularSwe$.
|
||||||
-- In practice, it is enough to give three forms, as in school books.
|
-- In practice, it is enough to give three forms, as in school books.
|
||||||
|
|
||||||
irregV : (drikke, drakk, drukket : Str) -> V ;
|
irregV : (drikke, drakk, drukket : Str) -> V ;
|
||||||
|
|
||||||
|
|
||||||
--3 Verbs with a particle.
|
--3 Verbs with a particle.
|
||||||
@@ -266,42 +268,64 @@ oper
|
|||||||
-- hidden from the document.
|
-- hidden from the document.
|
||||||
--.
|
--.
|
||||||
|
|
||||||
Gender = SyntaxSwe.NounGender ;
|
Gender = SyntaxNor.NounGender ;
|
||||||
Number = TypesSwe.Number ;
|
Number = TypesNor.Number ;
|
||||||
Case = TypesSwe.Case ;
|
Case = TypesNor.Case ;
|
||||||
utrum = NUtr NoMasc ;
|
masculine = NUtr NoMasc ;
|
||||||
|
feminine = NUtr NoMasc ;
|
||||||
neutrum = NNeutr ;
|
neutrum = NNeutr ;
|
||||||
singular = Sg ;
|
singular = Sg ;
|
||||||
plural = Pl ;
|
plural = Pl ;
|
||||||
nominative = Nom ;
|
nominative = Nom ;
|
||||||
genitive = Gen ;
|
genitive = Gen ;
|
||||||
|
|
||||||
mkN x y z u = extCommNoun (mkNoun x y z u) ** {lock_N = <>} ;
|
mkN x y z u = let sb = mkSubstantive x y z u
|
||||||
regN x g = extCommNoun (regNoun x (genNoun g)) ** {lock_N = <>} ;
|
in {s = \\n,b,c => sb.s ! SF n b c ; g = extNGen y ; lock_N = <>} ;
|
||||||
mk2N x g = extCommNoun (reg2Noun x g) ** {lock_N = <>} ;
|
regN x g = case last x of {
|
||||||
mascN n = {s = n.s ; g = NUtr Masc ; lock_N = <>} ;
|
"e" => case g of {
|
||||||
|
NUtr Masc => mkN x (x + "n") (x + "r") (x + "ne") ;
|
||||||
|
NUtr NoMasc => mkN x (init x + "a") (x + "r") (x + "ne") ;
|
||||||
|
NNeutr => mkN x (x + "t") (x + "r") (init x + "a")
|
||||||
|
} ;
|
||||||
|
_ => case g of {
|
||||||
|
NUtr Masc => mkN x (x + "en") (x + "er") (x + "ene") ;
|
||||||
|
NUtr NoMasc => mkN x (x + "a") (x + "er") (x + "ene") ;
|
||||||
|
NNeutr => mkN x (x + "et") (x + "") (x + "a")
|
||||||
|
}
|
||||||
|
} ;
|
||||||
|
|
||||||
|
mk2N x y = case last y of {
|
||||||
|
"n" => regN x masculine ;
|
||||||
|
"a" => regN x feminine ;
|
||||||
|
_ => regN x neutrum
|
||||||
|
} ;
|
||||||
|
|
||||||
|
|
||||||
mkN2 = \n,p -> n ** {lock_N2 = <> ; s2 = p} ;
|
mkN2 = \n,p -> n ** {lock_N2 = <> ; s2 = p} ;
|
||||||
regN2 n g = mkN2 (regN n g) (mkPreposition "av") ;
|
regN2 n g = mkN2 (regN n g) (mkPreposition "av") ;
|
||||||
mkN3 = \n,p,q -> n ** {lock_N3 = <> ; s2 = p ; s3 = q} ;
|
mkN3 = \n,p,q -> n ** {lock_N3 = <> ; s2 = p ; s3 = q} ;
|
||||||
|
|
||||||
regPN n g = {s = \\c => mkCase c n ; g = g} ** {lock_PN = <>} ;
|
regPN n g = {s = \\c => mkCase n ! c ; g = g} ** {lock_PN = <>} ;
|
||||||
nounPN n = {s = n.s ! singular ! Indef ; g = n.g ; lock_PN = <>} ;
|
nounPN n = {s = n.s ! singular ! Indef ; g = n.g ; lock_PN = <>} ;
|
||||||
mkNP x y n g =
|
mkNP x y n g =
|
||||||
{s = table {PGen _ => x ; _ => y} ; g = genNoun g ; n = n ; p = P3 ;
|
{s = table {PGen _ => x ; _ => y} ; g = genNoun g ; n = n ; p = P3 ;
|
||||||
lock_NP = <>} ;
|
lock_NP = <>} ;
|
||||||
|
|
||||||
mkA a b c = extractPositive (adjAlmostReg a b c) ** {lock_A = <>} ;
|
mkA a b c = extractPositive (mkAdjective a b c [] []) ** {lock_A = <>} ;
|
||||||
mk2A a b = extractPositive (adj2Reg a b) ** {lock_A = <>} ;
|
mk2A a b = mkA a b (a + "e") ;
|
||||||
regA a = extractPositive (adjReg a) ** {lock_A = <>} ;
|
regA a = extractPositive (regADeg a) ** {lock_A = <>} ;
|
||||||
|
|
||||||
mkA2 a p = a ** {s2 = p ; lock_A2 = <>} ;
|
mkA2 a p = a ** {s2 = p ; lock_A2 = <>} ;
|
||||||
|
|
||||||
mkADeg a b c d e f g = mkAdjective a b c d e f g ** {lock_ADeg = <>} ;
|
mkADeg a b c d e = mkAdjective a b c d e ** {lock_ADeg = <>} ;
|
||||||
regADeg a = adjReg a ** {lock_ADeg = <>} ;
|
regADeg a = case Predef.dp 2 a of {
|
||||||
irregADeg a b c = adjIrreg3 a b c ** {lock_ADeg = <>} ;
|
"ig" => aBillig a ;
|
||||||
mk3ADeg a b c = adjAlmostReg a b c ** {lock_ADeg = <>} ;
|
"sk" => aRask a ;
|
||||||
mk2ADeg a b = adj2Reg a b ** {lock_ADeg = <>} ;
|
_ => aRod a
|
||||||
|
} ** {lock_ADeg = <>} ;
|
||||||
|
irregADeg a b c = mkAdjective a (a + "t") (a + "e") b c ** {lock_ADeg = <>} ;
|
||||||
|
mk3ADeg a b c = mkAdjective a b c (a + "ere") (a + "est") ** {lock_ADeg = <>} ;
|
||||||
|
mk2ADeg a b = mkAdjective a b (a + "e") (a + "ere") (a + "est") ** {lock_ADeg = <>} ;
|
||||||
|
|
||||||
mkAdv x = ss x ** {lock_Adv = <>} ;
|
mkAdv x = ss x ** {lock_Adv = <>} ;
|
||||||
mkAdV x = ss x ** {lock_AdV = <>} ;
|
mkAdV x = ss x ** {lock_AdV = <>} ;
|
||||||
@@ -311,10 +335,14 @@ oper
|
|||||||
|
|
||||||
mkV a b c d e f = mkVerb a b c d e f ** {s1 = [] ; lock_V = <>} ;
|
mkV a b c d e f = mkVerb a b c d e f ** {s1 = [] ; lock_V = <>} ;
|
||||||
|
|
||||||
regV a = mk2V a (a + "r") ;
|
regV a = case last a of {
|
||||||
|
"e" => vHusk (init a) ;
|
||||||
|
_ => vBo a
|
||||||
|
} ** {s1 = [] ; lock_V = <>} ;
|
||||||
|
|
||||||
mk2V a b = regVerb a b ** {s1 = [] ; lock_V = <>} ;
|
mk2V a b = regVerb a b ** {s1 = [] ; lock_V = <>} ;
|
||||||
|
|
||||||
irregV x y z = vSälja x y z
|
irregV x y z = irregVerb x y z
|
||||||
** {s1 = [] ; lock_V = <>} ;
|
** {s1 = [] ; lock_V = <>} ;
|
||||||
|
|
||||||
partV v p = {s = v.s ; s1 = p ; lock_V = <>} ;
|
partV v p = {s = v.s ; s1 = p ; lock_V = <>} ;
|
||||||
|
|||||||
5
lib/resource/norwegian/ResourceNor.gf
Normal file
5
lib/resource/norwegian/ResourceNor.gf
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
--# -path=.:../scandinavian:../abstract:../../prelude
|
||||||
|
|
||||||
|
---- concrete ResourceSwe of Resource = RulesSwe, VerbphraseSwe ** {} ;
|
||||||
|
concrete ResourceNor of Resource = RulesNor, StructuralNor, ClauseNor ** {} ;
|
||||||
|
|
||||||
33
lib/resource/norwegian/TimeNor.gf
Normal file
33
lib/resource/norwegian/TimeNor.gf
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
concrete TimeNor of Time = NumeralsNor **
|
||||||
|
open Prelude, TypesNor, CategoriesNor, ParadigmsNor in {
|
||||||
|
|
||||||
|
lincat
|
||||||
|
Date = SS ;
|
||||||
|
Weekday = N ;
|
||||||
|
Hour = SS ;
|
||||||
|
Minute = SS ;
|
||||||
|
Time = SS ;
|
||||||
|
|
||||||
|
lin
|
||||||
|
DayDate day = ss (day.s ! singular ! Indef ! nominative) ;
|
||||||
|
DayTimeDate day time = ss (day.s ! singular ! Indef ! nominative ++ "klokken" ++ time.s) ;
|
||||||
|
|
||||||
|
FormalTime = infixSS "og" ;
|
||||||
|
PastTime h m = ss (m.s ++ "over" ++ h.s) ;
|
||||||
|
ToTime h m = ss (m.s ++ "på" ++ h.s) ;
|
||||||
|
ExactTime h = ss (h.s ++ "akkurat") ;
|
||||||
|
|
||||||
|
NumHour n = n ;
|
||||||
|
NumMinute n = n ;
|
||||||
|
|
||||||
|
monday = regN "mandag" masculine ;
|
||||||
|
tuesday = regN "tirsdag" masculine ;
|
||||||
|
wednesday = regN "onsdag" masculine ;
|
||||||
|
thursday = regN "torsdag" masculine ;
|
||||||
|
friday = regN "fredag" masculine ;
|
||||||
|
saturday = regN "lørdag" masculine ;
|
||||||
|
sunday = regN "søndag" masculine ;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
} ;
|
||||||
Reference in New Issue
Block a user