forked from GitHub/gf-rgl
Merge pull request #445 from hleiss/ordinals
(Ger) ordinal endings of Digits fixed
This commit is contained in:
@@ -84,7 +84,7 @@ concrete CatGer of Cat =
|
|||||||
-- Numeral
|
-- Numeral
|
||||||
|
|
||||||
Numeral = {s : CardOrd => Str ; n : Number } ;
|
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} ;
|
Decimal = {s : CardOrd => Str ; n : Number ; hasDot : Bool} ;
|
||||||
|
|
||||||
-- Structural
|
-- Structural
|
||||||
|
|||||||
@@ -12,14 +12,14 @@ lincat
|
|||||||
lin
|
lin
|
||||||
num x = x ;
|
num x = x ;
|
||||||
|
|
||||||
n2 = mkDigit "zwei" "zwölf" "zwanzig" "zweite" ;
|
n2 = mkDigit "zwei" "zwölf" "zwanzig" "zweite" ;
|
||||||
n3 = mkDigit "drei" "dreizehn" "dreissig" "dritte" ;
|
n3 = mkDigit "drei" "dreizehn" "dreissig" "dritte" ;
|
||||||
n4 = regDigit "vier" ;
|
n4 = regDigit "vier" ;
|
||||||
n5 = regDigit "fünf" ;
|
n5 = regDigit "fünf" ;
|
||||||
n6 = regDigit "sechs" ;
|
n6 = mkDigit "sechs" "sechzehn" "sechzig" "sechste" ;
|
||||||
n7 = mkDigit "sieben" "siebzehn" "siebzig" "siebte" ;
|
n7 = mkDigit "sieben" "siebzehn" "siebzig" "siebte" ;
|
||||||
n8 = mkDigit "acht" "achzehn" "achzig" "achte" ;
|
n8 = mkDigit "acht" "achtzehn" "achtzig" "achte" ;
|
||||||
n9 = regDigit "neun" ;
|
n9 = regDigit "neun" ;
|
||||||
|
|
||||||
pot01 = {
|
pot01 = {
|
||||||
s = \\f => table {
|
s = \\f => table {
|
||||||
@@ -69,17 +69,33 @@ oper
|
|||||||
Dig = TDigit ;
|
Dig = TDigit ;
|
||||||
|
|
||||||
lin
|
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 = {
|
-- HL 11/2023 added case endings or ordinals to digits
|
||||||
s = \\o => d.s ! invNum ++ BIND ++ i.s ! o ;
|
-- NCard Masc Nom (= invNum): 0,1, 19, 20,21,...
|
||||||
n = Pl
|
-- 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 = mk2Dig "0" Sg ** {isZero = True} ;
|
||||||
D_0 = mkDig "0" ;
|
D_1 = mk2Dig "1" Sg ;
|
||||||
D_1 = mk3Dig "1" "1e" Sg ;
|
D_2 = mkDig "2" ;
|
||||||
D_2 = mk2Dig "2" "2e" ;
|
|
||||||
D_3 = mkDig "3" ;
|
D_3 = mkDig "3" ;
|
||||||
D_4 = mkDig "4" ;
|
D_4 = mkDig "4" ;
|
||||||
D_5 = mkDig "5" ;
|
D_5 = mkDig "5" ;
|
||||||
@@ -90,7 +106,9 @@ oper
|
|||||||
|
|
||||||
PosDecimal d = d ** {hasDot=False} ;
|
PosDecimal d = d ** {hasDot=False} ;
|
||||||
NegDecimal d = {
|
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 ;
|
n = Pl ;
|
||||||
hasDot=False
|
hasDot=False
|
||||||
} ;
|
} ;
|
||||||
@@ -103,17 +121,21 @@ oper
|
|||||||
} ;
|
} ;
|
||||||
|
|
||||||
oper
|
oper
|
||||||
mk2Dig : Str -> Str -> TDigit = \c,o -> mk3Dig c o Pl ;
|
mkDig : Str -> TDigit = \c -> mk2Dig c Pl ;
|
||||||
mkDig : Str -> TDigit = \c -> mk2Dig c (c + "e") ;
|
|
||||||
|
mk2Dig : Str -> Number -> TDigit = \c,n -> mk3Dig c (c + "t") n ; -- like Duden 464 (4.Auflage)
|
||||||
|
|
||||||
mk3Dig : Str -> Str -> Number -> TDigit = \c,o,n -> {
|
mk3Dig : Str -> Str -> Number -> TDigit = \c,o,n -> {
|
||||||
s = table {NCard _ _ => c ; NOrd _ => o} ;
|
s = table {NCard _ _ => c ; -- 0,...,9
|
||||||
n = n
|
NOrd af => (regA o).s ! Posit ! af} ; -- (ein) 0ter .. 9ter | (der) 0te ... 9te
|
||||||
|
n = n ; -- NOrd APred: "0",... or "am 0ten",... ?
|
||||||
|
isZero = False
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
TDigit = {
|
TDigit = {
|
||||||
n : Number ;
|
n : Number ;
|
||||||
s : CardOrd => Str
|
s : CardOrd => Str ;
|
||||||
|
isZero : Bool
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user