From 693cd88f7bb7c982641d29a18a668c94717098d4 Mon Sep 17 00:00:00 2001 From: Aarne Ranta Date: Thu, 13 Feb 2025 10:43:17 +0100 Subject: [PATCH 1/3] heuristic rule for Gre mkPN --- src/greek/ResGre.gf | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/greek/ResGre.gf b/src/greek/ResGre.gf index 8a0168420..ba5f208cb 100644 --- a/src/greek/ResGre.gf +++ b/src/greek/ResGre.gf @@ -375,7 +375,8 @@ resource ResGre = ParamX ** open Prelude in { Fros + "ω" => mkName Giannis (Fros + "ως") (Fros + "ω") (Fros + "ω") ("") ("")Fem ; Mirt + "ώ" => mkName Giannis (Mirt + "ώς") (Mirt + "ώ") (Mirt + "ώ") ("")("")Fem ; Londin + "ο" => mkName Giannis (Londin + "ου") (Londin + "ο") (Londin + "ο") (Londin + "α") (Londin + "ων") Neut ; - Paris + "ι" => mkName Giannis (mkStemNouns Paris + "ιού") (Paris + "ι") (Paris + "ι")(Paris + "ια") (mkStemNouns Paris + "ιών") Neut + Paris + "ι" => mkName Giannis (mkStemNouns Paris + "ιού") (Paris + "ι") (Paris + "ι")(Paris + "ια") (mkStemNouns Paris + "ιών") Neut ; + x => mkName x x x x x x Neut ---- AR 2025-02-13 guess }; From ababe72fb8c4c8e698c5e162fc0b061172a438f1 Mon Sep 17 00:00:00 2001 From: Aarne Ranta Date: Wed, 12 Mar 2025 16:32:40 +0100 Subject: [PATCH 2/3] started adding capital letters to Gre.FemAccFinalN; most letters still todo --- src/greek/ResGre.gf | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/greek/ResGre.gf b/src/greek/ResGre.gf index ba5f208cb..45d1d79da 100644 --- a/src/greek/ResGre.gf +++ b/src/greek/ResGre.gf @@ -1380,7 +1380,7 @@ resource ResGre = ParamX ** open Prelude in { -----Pattern for the final -ν in the Feminine Accusative of the definite article---------- - FemAccFinalN : pattern Str = #("ά" | "ό" | "ί"| "έ" | "ή" | "ύ"| "ώ" | "α" | "ο" | "ι"| "ε" |"η" | "υ" | "ω" |"κ"|"π" |"τ"| "ξ" |"ψ"| "γκ" |"μπ" |"ντ" ); + FemAccFinalN : pattern Str = #("Α" | "Τ" | "ά" | "ό" | "ί"| "έ" | "ή" | "ύ"| "ώ" | "α" | "ο" | "ι"| "ε" |"η" | "υ" | "ω" |"κ"|"π" |"τ"| "ξ" |"ψ"| "γκ" |"μπ" |"ντ" ); @@ -1406,8 +1406,10 @@ resource ResGre = ParamX ** open Prelude in { => "στον" ; => "η" ; => "της" ; - => pre { "ά" | "ό" | "ί"| "έ" | "ή" | "ύ"| "ώ" | "α" | "ο" | "ι"| "ε" |"η" | "υ" | "ω" |"κ"|"π" |"τ"| "ξ" |"ψ"| "γκ" |"μπ" |"ντ" => "την" ; _=> "τη"} ; - => pre { "ά" | "ό" | "ί"| "έ" | "ή" | "ύ"| "ώ" | "α" | "ο" | "ι"| "ε" |"η" | "υ" | "ω" |"κ"|"π" |"τ"| "ξ" |"ψ"| "γκ" |"μπ" |"ντ" => "στην" ; _=> "στη"} ; + => + pre {#FemAccFinalN => "την" ; _=> "τη"} ; + => + pre {#FemAccFinalN => "στην" ; _=> "στη"} ; => prepCase c++ "το" ; => "του" ; => "στο" ; From 35f3b5e2065ad912c4de8645776c1118aef18e34 Mon Sep 17 00:00:00 2001 From: Hans Leiss Date: Sun, 16 Mar 2025 15:34:46 +0100 Subject: [PATCH 3/3] (Ger) Added missing linearizations pot21 to pot5plus --- src/german/NumeralGer.gf | 71 +++++++++++++++++++++++++++++++++++----- 1 file changed, 62 insertions(+), 9 deletions(-) diff --git a/src/german/NumeralGer.gf b/src/german/NumeralGer.gf index d2b7963d8..26da2827d 100644 --- a/src/german/NumeralGer.gf +++ b/src/german/NumeralGer.gf @@ -40,29 +40,82 @@ lin e.s ! DUnit ! invNum ++ BIND ++ "und" ++ BIND ++ d.s ! DTen ! g; n = Pl} ; pot1as2 n = n ; - pot2 d = {s = \\g => + -- HL 15.3.2025 added: + -- pot21, pot31, pot41, pot4, pot4plus, pot51, pot5, pot5plus, pot5decimal + -- and opers oneCardOrd, cardOrdNum, toFem + -- changed: multiple to get pot21 = hundert (Eng: a hundred, Swe: hundra) + -- versus pot2 pot01 = einhundert (Eng: one hundred, Swe: etthundra) + -- likewise for [ein]tausend, [eine] Million, Milliarde + -- Q: add BIND or "und" in pot4plus, pot5plus ? + + pot21 = {s = \\g => cardOrd "hundert" "hundertste" ! g ; n = Pl} ; + pot2 d = {s = \\g => multiple (d.s ! DUnit) d.n ++ cardOrd "hundert" "hundertste" ! g ; n = Pl} ; pot2plus d e = {s = \\g => multiple (d.s ! DUnit) d.n ++ "hundert" ++ BIND ++ e.s ! g ; n = Pl} ; pot2as3 n = n ; + pot31 = {s = \\g => cardOrd "tausend" "tausendste" ! g ; n = Pl} ; pot3 n = {s = \\g => multiple n.s n.n ++ cardOrd "tausend" "tausendste" ! g ; n = Pl} ; - pot3plus n m = {s = \\g => + pot3plus n m = {s = \\g => multiple n.s n.n ++ "tausend" ++ m.s ! g ; n = Pl} ; pot3as4 n = n ; pot3decimal d = {s = \\g => - d.s ! invNum ++ cardOrd "tausend" "tausendste" ! g ; n = Pl} ; + d.s ! invNum ++ cardOrd "Tausend" "tausendste" ! g ; n = Pl} ; + pot41 = {s = \\g => oneCardOrd "Million" "millionste" ! g ; n = Pl} ; + pot4 n = let tab = cardOrdNum n.n "Million" "millionste" in { + s = table{ + NCard af => n.s ! (NCard (toFem af)) ++ tab ! (NCard af) ; + NOrd af => n.s ! (NCard APred) ++ BIND ++ tab ! (NOrd af) + } ; + n = Pl} ; + pot4plus n m = let tab = cardOrdNum n.n "million" "millionste" in { + s = table{ + NCard af => n.s ! (NCard (toFem af)) ++ BIND ++ tab ! (NCard af) ++ m.s ! NCard af ; + NOrd af => n.s ! (NCard (toFem APred)) ++ BIND ++ tab ! (NCard (toFem af)) ++ m.s ! NOrd af + } ; + n = Pl} ; pot4as5 n = n ; pot4decimal d = {s = \\g => - d.s ! invNum ++ cardOrd "Millionen" "Millionste" ! g ; n = Pl} ; -- * 1 Million + d.s ! invNum ++ cardOrdNum d.n "Million" "-millionste" ! g ; n = Pl} ; - pot51 = {s = \\g => "einer Milliarde"; n = Pl} ; -- KA: case inflection missing + pot51 = {s = \\g => oneCardOrd "Milliarde" "milliardste" ! g ; n = Pl} ; + pot5 n = let tab = cardOrdNum n.n "Milliarde" "milliardste" in { + s = table{ + NCard af => n.s ! (NCard (toFem af)) ++ tab ! (NCard af) ; + NOrd af => n.s ! (NCard APred) ++ BIND ++ tab ! (NOrd af) + } ; + n = Pl} ; + pot5plus n m = let tab = cardOrdNum n.n "milliarde" "milliardste" in { + s = table{ + NCard af => n.s ! (NCard (toFem af)) ++ BIND ++ tab ! (NCard af) ++ "und" ++ m.s ! NCard af ; + NOrd af => n.s ! (NCard (toFem APred)) ++ BIND ++ tab ! (NCard (toFem af)) ++ m.s ! NOrd af + } ; + n = Pl} ; + pot5decimal d = {s = \\g => + d.s ! invNum ++ cardOrdNum d.n "Milliarde" "-milliardste" ! g ; n = Pl} ; oper multiple : (CardOrd => Str) -> Number -> Str = \d,n -> - case n of {Sg => [] ; _ => d ! invNum ++ BIND} ; + -- case n of {Sg => [] ; _ => d ! invNum ++ BIND} ; + d ! invNum ++ BIND ; -- HL + + oneCardOrd : Str -> Str -> CardOrd => Str = + \million,millionste -> table { + NCard (AMod (GSg _) c) => "ein" + pronEnding ! (GSg Fem) ! c ++ million ; + NCard (AMod GPl _) => pluralN million ; + NCard APred => "ein" + pronEnding ! (GSg Fem) ! Nom ++ million ; + NOrd a => (regA (init millionste)).s ! Posit ! a + } ; + + cardOrdNum : Number -> Str -> Str -> CardOrd => Str = \n,drei,dritte -> + case n of {Sg => cardOrd drei dritte ; _ => cardOrd (pluralN drei) dritte} ; + + toFem : AForm -> AForm = \af -> case af of { + AMod _ c => AMod (GSg Fem) c ; + APred => AMod (GSg Fem) Nom} ; -------------------- @@ -81,15 +134,15 @@ oper -- 101ter,...,119ter,120ster,... , 200ster IIDig d i = let isPld : Bool = case d.n of {Sg => False ; _ => True} ; + i = lin Digits i ; -- suppress warning missing lock_Digits b : Bool = case i.isDig of {True => isPld ; _ => notB i.tail1to19} ; i' : Digits = case b of {True => IDig (mkDig (i.s ! invNum ++ BIND ++ "s")) ; - _ => i } + _ => i} in {s = table {NCard af => d.s ! invNum ++ BIND ++ i.s ! NCard af ; NOrd af => d.s ! invNum ++ BIND ++ i'.s ! NOrd af} ; n = Pl ; isDig = False ; tail1to19 = case i.isDig of {True => notB isPld ; False => i.tail1to19} ; - lock_Digits = <> } ; D_0 = mkDig "0" ** {isZero = True} ; @@ -123,7 +176,7 @@ oper mk3Dig : Str -> Str -> Number -> TDigit = \c,o,n -> { s = table {NCard _ => c ; -- 0,...,9 NOrd af => (regA o).s ! Posit ! af} ; -- (ein) 0ter .. 9ter | (der) 0te ... 9te - n = n ; -- NOrd APred: "0",... or "am 0ten",... ? + n = n ; -- NOrd APred: "0t" isZero = False } ;