From 88be4ca0ae68785f71b4d448c202d840ba306ac9 Mon Sep 17 00:00:00 2001 From: Hans Leiss Date: Wed, 29 Nov 2023 10:48:20 +0100 Subject: [PATCH] (Ger) ordinal endings of Digits fixed --- src/german/CatGer.gf | 2 +- src/german/NumeralGer.gf | 66 ++++++++++++++++++++++++++-------------- 2 files changed, 45 insertions(+), 23 deletions(-) diff --git a/src/german/CatGer.gf b/src/german/CatGer.gf index 72a55eb3c..1f4c64b9e 100644 --- a/src/german/CatGer.gf +++ b/src/german/CatGer.gf @@ -84,7 +84,7 @@ concrete CatGer of Cat = -- Numeral Numeral = {s : CardOrd => Str ; n : Number } ; - Digits = {s : CardOrd => Str ; n : Number } ; + Digits = {s : CardOrd => Str ; n : Number ; isDig, tail1to19 : Bool} ; Decimal = {s : CardOrd => Str ; n : Number ; hasDot : Bool} ; -- Structural diff --git a/src/german/NumeralGer.gf b/src/german/NumeralGer.gf index a9b3e267d..eab2cc238 100644 --- a/src/german/NumeralGer.gf +++ b/src/german/NumeralGer.gf @@ -12,14 +12,14 @@ lincat lin num x = x ; - n2 = mkDigit "zwei" "zwölf" "zwanzig" "zweite" ; + n2 = mkDigit "zwei" "zwölf" "zwanzig" "zweite" ; n3 = mkDigit "drei" "dreizehn" "dreissig" "dritte" ; - n4 = regDigit "vier" ; - n5 = regDigit "fünf" ; - n6 = regDigit "sechs" ; - n7 = mkDigit "sieben" "siebzehn" "siebzig" "siebte" ; - n8 = mkDigit "acht" "achzehn" "achzig" "achte" ; - n9 = regDigit "neun" ; + n4 = regDigit "vier" ; + n5 = regDigit "fünf" ; + n6 = mkDigit "sechs" "sechzehn" "sechzig" "sechste" ; + n7 = mkDigit "sieben" "siebzehn" "siebzig" "siebte" ; + n8 = mkDigit "acht" "achtzehn" "achtzig" "achte" ; + n9 = regDigit "neun" ; pot01 = { s = \\f => table { @@ -69,17 +69,33 @@ oper Dig = TDigit ; lin - IDig d = d ; + IDig d = {s = table{NCard g c => d.s ! NCard g c ; + NOrd APred => "am" ++ d.s ! invNum ++ BIND ++ "ten"; + NOrd amod => d.s ! NOrd amod} ; + n = d.n ; + isDig = True ; + tail1to19 = notB d.isZero} ; - IIDig d i = { - s = \\o => d.s ! invNum ++ BIND ++ i.s ! o ; - n = Pl - } ; + -- HL 11/2023 added case endings or ordinals to digits + -- NCard Masc Nom (= invNum): 0,1, 19, 20,21,... + -- NOrd (AMid (GSg Masc) Nom): 0ter,1ter,...,19ter, 20ster,21ster,...,99ster, 100ster + -- 101ter,...,119ter,120ster,... , 200ster + IIDig d i = + let isPld : Bool = case d.n of {Sg => False ; _ => True} ; + 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 } + in {s = table {NCard g c => d.s ! invNum ++ BIND ++ i.s ! NCard g c ; + NOrd APred => "am" ++ d.s ! invNum ++ BIND ++ i'.s ! invNum ++ BIND ++ "ten" ; + 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} + } ; - ---- TODO: case endings of ordinals - D_0 = mkDig "0" ; - D_1 = mk3Dig "1" "1e" Sg ; - D_2 = mk2Dig "2" "2e" ; + D_0 = mk2Dig "0" Sg ** {isZero = True} ; + D_1 = mk2Dig "1" Sg ; + D_2 = mkDig "2" ; D_3 = mkDig "3" ; D_4 = mkDig "4" ; D_5 = mkDig "5" ; @@ -90,7 +106,9 @@ oper PosDecimal d = d ** {hasDot=False} ; NegDecimal d = { - s = \\o => "-" ++ BIND ++ d.s ! o ; + s = \\o => case o of { + NOrd APred => "am" ++ "-" ++ BIND ++ d.s ! NOrd (AMod GPl Dat) ; + _ => "-" ++ BIND ++ d.s ! o} ; n = Pl ; hasDot=False } ; @@ -103,17 +121,21 @@ oper } ; oper - mk2Dig : Str -> Str -> TDigit = \c,o -> mk3Dig c o Pl ; - mkDig : Str -> TDigit = \c -> mk2Dig c (c + "e") ; + mkDig : Str -> TDigit = \c -> mk2Dig c Pl ; + + mk2Dig : Str -> Number -> TDigit = \c,n -> mk3Dig c (c + "t") n ; -- like Duden 464 (4.Auflage) mk3Dig : Str -> Str -> Number -> TDigit = \c,o,n -> { - s = table {NCard _ _ => c ; NOrd _ => o} ; - n = 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",... ? + isZero = False } ; TDigit = { n : Number ; - s : CardOrd => Str + s : CardOrd => Str ; + isZero : Bool } ; }