diff --git a/src/danish/ParadigmsDan.gf b/src/danish/ParadigmsDan.gf index 682a3a8db..d1fec5b2d 100644 --- a/src/danish/ParadigmsDan.gf +++ b/src/danish/ParadigmsDan.gf @@ -81,7 +81,8 @@ oper -- This function takes the singular indefinite and definite forms; the -- gender is computed from the definite form. - mkN : (bil,bilen : Str) -> N ; -- better prediction from both singular and plural + mkN : (bil,bilen : Str) -> N ; -- prediction from both singular indefinite and definite + mkN : (bil,biler : Str) -> Gender -> N ; -- prediction from both singular and plural plus gender -- This function takes the singular indefinite and definite and the plural -- indefinite @@ -91,7 +92,9 @@ oper -- 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 : (dreng,drengen,drenge,drengene : Str) -> N ; -- worst case + mkN : (dreng,drengen,drenge,drengene : Str) -> N ; -- almost worst case, gender guessed from Sg Def + mkN : (dreng,drengen,drenge,drengene : Str) -> Gender -> N ; -- worst case + } ; @@ -325,6 +328,17 @@ oper "n" => mk3N x y (init y + "r") ; _ => mk3N x y x } ; + + mk2gN x y g = case last x of { + "e" => case g of { + Utr => mk4N x (x + "n") y (y + "ne") ; + Neutr => mk4N x (x + "t") y (y + "e") + } ; + _ => case g of { + Utr => mk4N x (x + "en") y (x + "ne") ; + Neutr => mk4N x (x + "et") y (y + "ene") + } + } ; mk3N x y z = let u = ifTok Str x z "ene" "ne" in mk4N x y z (z + u) ; @@ -452,7 +466,9 @@ oper mkN : Str -> N = regN ; mkN : Str -> Gender -> N = regGenN ; mkN : (bil,bilen : Str) -> N = mk2N ; + mkN : (bil,biler : Str) -> Gender -> N = mk2gN ; mkN : (bil,bilen,biler : Str) -> N = mk3N ; + mkN : (dreng,drengen,drenge,drengene : Str) -> Gender -> N = \x,y,z,u,g -> mk4N x y z u ** {g = g} ; mkN : (dreng,drengen,drenge,drengene : Str) -> N = mk4N ; } ; @@ -460,6 +476,7 @@ oper regN : Str -> N ; regGenN : Str -> Gender -> N ; mk2N : (bil,bilen : Str) -> N ; + mk2gN : (bil,biler : Str) -> Gender -> N ; mk3N : (bil,bilen,biler : Str) -> N ; mk4N : (dreng,drengen,drenge,drengene : Str) -> N ; diff --git a/src/norwegian/ParadigmsNor.gf b/src/norwegian/ParadigmsNor.gf index 899f9035a..532448296 100644 --- a/src/norwegian/ParadigmsNor.gf +++ b/src/norwegian/ParadigmsNor.gf @@ -45,6 +45,7 @@ oper masculine : Gender ; -- the "en" gender feminine : Gender ; -- the "ei" gender neutrum : Gender ; -- the "et" gender + utrum : Gender ; -- the "en" gender, same as masculine -- To abstract over number names, we define the following. @@ -82,7 +83,9 @@ oper mkN : Str -> N ; -- predictable noun, feminine for "-e" otherwise masculine mkN : Str -> Gender -> N ; -- force gender mkN : (bil,bilen : Str) -> N ; --% - mkN : (dreng,drengen,drenger,drengene : Str) -> N -- worst case + mkN : (dreng,drengen,drenger,drengene : Str) -> N ; -- worst case, gender guessed + mkN : (dreng,drengen,drenger,drengene : Str) -> Gender -> N ; -- worst case + } ; @@ -279,6 +282,7 @@ oper masculine = NUtr Masc ; feminine = NUtr Fem ; neutrum = NNeutr ; + utrum = masculine ; singular = Sg ; plural = Pl ; nominative = Nom ; @@ -305,6 +309,19 @@ oper NNeutr => mk4N x (x + "et") (x + "") (x + "a") } } ; + + mk2gN x y g = case last x of { + "e" => case g of { + NUtr Masc => mk4N x (x + "n") y (x + "ne") ; + NUtr Fem => mk4N x (init x + "a") y (x + "ne") ; + NNeutr => mk4N x (x + "t") y (init x + "a") ---- + } ; + _ => case g of { + NUtr Masc => mk4N x (x + "en") y (x + "ene") ; + NUtr Fem => mk4N x (x + "a") y (x + "ene") ; + NNeutr => mk4N x (x + "et") y (x + "a") + } + } ; mk2N x y = case last y of { "n" => regGenN x masculine ; @@ -435,15 +452,17 @@ oper --------- mk2N : (bil,bilen : Str) -> N ; + mk2gN : (bil,bilen : Str) -> Gender -> 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 : (bil,biler : Str) -> Gender -> N = mk2gN ; + mkN : (dreng,drengen,drenge,drengene : Str) -> Gender -> N = \x,y,z,u,g -> mk4N x y z u ** {g = g} ; mkN : (dreng,drengen,drenger,drengene : Str) -> N = mk4N } ;