mirror of
https://github.com/GrammaticalFramework/gf-rgl.git
synced 2026-05-27 17:08:54 -06:00
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 = {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
|
||||
|
||||
@@ -16,9 +16,9 @@ lin
|
||||
n3 = mkDigit "drei" "dreizehn" "dreissig" "dritte" ;
|
||||
n4 = regDigit "vier" ;
|
||||
n5 = regDigit "fünf" ;
|
||||
n6 = regDigit "sechs" ;
|
||||
n6 = mkDigit "sechs" "sechzehn" "sechzig" "sechste" ;
|
||||
n7 = mkDigit "sieben" "siebzehn" "siebzig" "siebte" ;
|
||||
n8 = mkDigit "acht" "achzehn" "achzig" "achte" ;
|
||||
n8 = mkDigit "acht" "achtzehn" "achtzig" "achte" ;
|
||||
n9 = regDigit "neun" ;
|
||||
|
||||
pot01 = {
|
||||
@@ -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
|
||||
} ;
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user