diff --git a/src/slovak/ParadigmsSlo.gf b/src/slovak/ParadigmsSlo.gf index 3b8b86a1..b8330b44 100644 --- a/src/slovak/ParadigmsSlo.gf +++ b/src/slovak/ParadigmsSlo.gf @@ -1,4 +1,4 @@ -resource ParadigmsSlo = open CatSlo, ResSlo, Prelude in { +resource ParadigmsSlo = open CatSlo, ResSlo, (R=ResSlo), Prelude in { ---------------- -- Parameters @@ -35,6 +35,7 @@ oper -- Nouns oper + mkN = overload { mkN : (nom : Str) -> N = \nom -> lin N (guessNounForms nom) ; @@ -46,35 +47,36 @@ oper -- However, they have some defaults that may have to be overwritten. -- This can be done easily by overriding those formes with record extension (**). -- The default extensions are shown in comments; if the default is correct, no extension is needed. +-- Notice that some paradigms take two arguments, some take one. - panN : Str -> N -- default ** {pnom = +i} - = \s -> lin N (declPAN s) ; - predsedaN : Str -> N -- default ** {sgen = +i} - = \s -> lin N (declPREDSEDA s) ; - hradN : Str -> N -- default ** {sgen,sloc = +u} - = \s -> lin N (declHRAD s) ; - zenaN : Str -> N -- default ** {pgen = zen} - = \s -> lin N (declZENA s) ; - mestoN : Str -> N -- default ** {sloc = +u ; pgen = mest ; ploc = +ech} - = \s -> lin N (declMESTO s) ; - muzN : Str -> N - = \s -> lin N (declMUZ s) ; - soudceN : Str -> N -- default ** {sdat,sloc = +i ; pnom = +i} - = \s -> lin N (declSOUDCE s) ; + chlapN : Str -> N + = \s -> lin N (R.chlapN s) ; + hrdinaN : Str -> N + = \s -> lin N (R.hrdinaN s) ; + dubN : Str -> N + = \s -> lin N (R.dubN s) ; strojN : Str -> N - = \s -> lin N (declSTROJ s) ; - ruzeN : Str -> N - = \s -> lin N (declRUZE s) ; - pisenN : Str -> N - = \s -> lin N (declPISEN s) ; - kostN : Str -> N - = \s -> lin N (declKOST s) ; - kureN : Str -> N - = \s -> lin N (declKURE s) ; - moreN : Str -> N -- default ** {pgen = +í} - = \s -> lin N (declMORE s) ; - staveniN : Str -> N - = \s -> lin N (declSTAVENI s) ; + = \s -> lin N (R.strojN s) ; + ponyN : Str -> N + = \s -> lin N (R.ponyN s) ; + zenaN : (snom, pgen : Str) -> N + = \s,p -> lin N (R.zenaN s) ** {pgen = p} ; + ulicaN : (snom, pgen : Str) -> N + = \s,p -> lin N (R.ulicaN s) ** {pgen = p} ; + dlanN : (snom, pgen : Str) -> N + = \s,p -> lin N (R.dlanN s p) ; + kostN : (snom, pgen : Str) -> N + = \s,p -> lin N (R.kostN s p) ; + mestoN : (snom, pgen : Str) -> N + = \s,p -> lin N (R.mestoN s) ** {pgen = p} ; + srdceN : (snom, pgen : Str) -> N + = \s,p -> lin N (R.srdceN s) ** {pgen = p} ; + vysvedcenieN : Str -> N + = \s -> lin N (R.vysvedcenieN s) ; + dievcaN : Str -> N + = \s -> lin N (R.dievcaN s) ; + dievceniecN : Str -> N + = \s -> lin N (R.dievceniecN s) ; -- The full definition of the noun record is -- { diff --git a/src/slovak/ResSlo.gf b/src/slovak/ResSlo.gf index cb4b0765..edbaefc8 100644 --- a/src/slovak/ResSlo.gf +++ b/src/slovak/ResSlo.gf @@ -31,8 +31,8 @@ oper consonant : pattern Str = #( "d" | "t" | "g" | "h" | "k" | "n" | "r" | - "ť" | "ď" | "j" | "ň" | "ř" | "š" | "c" | "č" | "ž" | - "b" | "f" | "l" | "m" | "p" | "s" | "v" + "ť" | "ď" | "j" | "ň" | "š" | "c" | "č" | "ž" | + "b" | "f" | "l" | "m" | "p" | "s" | "v" | "ľ" | "ĺ" | "ŕ" | "dz" ) ; dropFleetingE : Str -> Str = \s -> case s of { @@ -140,46 +140,52 @@ oper -- terminology of CEG DeclensionType : Type = Str -> NounForms ; -{- ----- - declensionNounForms : (nom,gen : Str) -> Gender -> NounForms - = \nom,gen,g -> - let decl : DeclensionType = case of { - => declHRDINA ; + declensionNounForms : (snom,pgen : Str) -> Gender -> NounForms + = \snom,pgen,g -> case of { + => hrdinaN snom ; + => ponyN snom ; ---- + => hrdinaN snom ; + + => strojN snom ; + => dubN snom ; + => dubN snom ; - => declCHLAP ; - => declHRAD ; - => declZENA ; - => declMESTO ; - => declMUZ ; - => declMUZ ; - => declSOUDCE ; - => declSTROJ ; - => declRUZE ; - => declPISEN ; - => declKOST ; --- also many other "st" 3.6.3 - => declKURE ; - => declMORE ; - => declSTAVENI ; - _ => Predef.error ("cannot infer declension type for" ++ nom ++ gen) - } - in decl nom ; + => zenaN snom ; + => zenaN snom ; + => ulicaN snom ; + => ulicaN snom ; + => kostN snom pgen ; + => dlanN snom pgen ; + + => mestoN snom ; + => vysvedcenieN snom ; + => srdceN snom ; + => dievceniecN snom ; + => dievcaN snom ; + + _ => Predef.error ("cannot infer declension type for" ++ snom ++ pgen) + } ** {pgen = pgen ; g = g} ; -- the "smartest" one-argument mkN guessNounForms : Str -> NounForms - = \s -> case s of { - _ + "ost" => declKOST s ; - _ + "tel" => declMUZ s ; - _ + #hardConsonant => declHRAD s ; - _ + #softConsonant => declSTROJ s ; - _ + "a" => declZENA s ; - _ + "o" => declMESTO s ; - _ + "ce" => declSOUDCE s ; - _ + "e" => declMORE s ; - _ + "í" => declSTAVENI s ; - _ => Predef.error ("cannot guess declension type for" ++ s) + = \snom -> case snom of { + _ + ("i"|"y"|"e") => ponyN snom ; + _ + #softConsonant => strojN snom ; + _ + #hardConsonant => dubN snom ; + _ + #neutralConsonant => dubN snom ; + _ + #hardConsonant + "a" => zenaN snom ; + _ + #neutralConsonant + "a" => zenaN snom ; + _ + #softConsonant + "a" => ulicaN snom ; + _ + ("ia"|"ya") => ulicaN snom ; + _ + "o" => mestoN snom ; + _ + "ie" => vysvedcenieN snom ; + _ + "e" => srdceN snom ; + _ + "ä" => dievcaN snom ; + + _ => Predef.error ("cannot guess declension type for" ++ snom) } ; --} + -- the traditional declensions, in both CEG and Wiki -- they are also exported in ParadigmsSlo with names chlapN etc @@ -327,11 +333,8 @@ oper g = Fem } ; - dlanN : DeclensionType = \dlanj -> - let dlan : Str = case dlanj of { - dla + "ň" => dla + "n" ; - _ => dlanj ---- TODO many more cases - } ; + dlanN : Str -> DeclensionType = \dlanj,dlani -> + let dlan : Str = init dlani in { snom = dlanj ; @@ -342,7 +345,7 @@ oper sins = dlanj + "ou" ; pnom = dlan + "e" ; - pgen = dlan + "í" ; + pgen = dlani ; pdat = dlan + "iam" ; pacc = dlan + "e" ; ploc = dlan + "iach" ; @@ -351,11 +354,8 @@ oper g = Fem } ; - kostN : DeclensionType = \kost' -> - let kost : Str = case kost' of { - kos + "ť" => kos + "t" ; - _ => kost' ---- TODO more cases - } ; + kostN : Str -> DeclensionType = \kost',kosti -> + let kost = init kosti in { snom = kost' ; @@ -366,7 +366,7 @@ oper sins = kost' + "ou" ; pnom = kost + "i" ; - pgen = kost + "í" ; + pgen = kosti ; pdat = kost + "iam" ; pacc = kost + "i" ; ploc = kost + "iach" ; @@ -457,7 +457,7 @@ oper sloc = dievca + "ti" ; sins = dievca + "ťom" ; - pnom = dievca + "tá" ; ---- TODO alternatives dievčence etc + pnom = dievca + "tá" ; pgen = dievc + "iat" ; pdat = dievca + "tám" ; pacc = dievca + "tá" ; @@ -467,7 +467,17 @@ oper g = Neutr } ; - + -- with variant plural forms of the previous + dievceniecN : DeclensionType = \dievca -> + let dievc = init dievca + in dievcaN dievca ** { + pnom = dievc + "ence" ; + pgen = dievc + "eniec" ; + pdat = dievc + "encom" ; + pacc = dievc + "ence" ; + ploc = dievc + "encoch" ; + pins = dievc + "encami" ; + } ; --------------------------- -- Adjectives