diff --git a/src/catalan/NumeralCat.gf b/src/catalan/NumeralCat.gf index 374ba7829..d1bc08bee 100644 --- a/src/catalan/NumeralCat.gf +++ b/src/catalan/NumeralCat.gf @@ -140,11 +140,12 @@ param Dig = TDigit ; lin - IDig d = d ; + IDig d = d ** {tail = T1} ; IIDig d i = { - s = \\o => d.s ! NCard Masc ++ BIND ++ i.s ! o ; - n = Pl + s = \\o => d.s ! NCard Masc ++ spaceIf i.tail ++ i.s ! o ; + n = Pl ; + tail = inc i.tail } ; D_0 = mkDig "0" ; @@ -166,12 +167,24 @@ param } ; IFrac d i = { s = \\o => d.s ! NCard Masc ++ - if_then_Str d.hasDot BIND (BIND++"."++BIND) ++ + if_then_Str d.hasDot BIND (BIND++","++BIND) ++ i.s ! o ; n = Pl ; hasDot=True } ; + oper + spaceIf : DTail -> Str = \t -> case t of { + T3 => SOFT_SPACE ; + _ => BIND + } ; + + inc : DTail -> DTail = \t -> case t of { + T1 => T2 ; + T2 => T3 ; + T3 => T1 + } ; + oper mk2Dig : Str -> Str -> TDigit = \c,o -> mk3Dig c o Pl ; mkDig : Str -> TDigit = \c -> mk2Dig c (c + ":o") ; diff --git a/src/french/NumeralFre.gf b/src/french/NumeralFre.gf index 56e505cf1..6ad455d3b 100644 --- a/src/french/NumeralFre.gf +++ b/src/french/NumeralFre.gf @@ -153,11 +153,12 @@ oper hyphen = BIND ++ "-" ++ BIND ; Dig = TDigit ; lin - IDig d = d ; + IDig d = d ** {tail = T1} ; IIDig d i = { - s = \\o => d.s ! NCard Masc ++ BIND ++ i.s ! o ; - n = Pl + s = \\o => d.s ! NCard Masc ++ spaceIf i.tail ++ i.s ! o ; + n = Pl ; + tail = inc i.tail } ; D_0 = mkDig "0" ; @@ -179,12 +180,24 @@ oper hyphen = BIND ++ "-" ++ BIND ; } ; IFrac d i = { s = \\o => d.s ! NCard Masc ++ - if_then_Str d.hasDot BIND (BIND++"."++BIND) ++ + if_then_Str d.hasDot BIND (BIND++","++BIND) ++ i.s ! o ; n = Pl ; hasDot=True } ; + oper + spaceIf : DTail -> Str = \t -> case t of { + T3 => SOFT_SPACE ; + _ => BIND + } ; + + inc : DTail -> DTail = \t -> case t of { + T1 => T2 ; + T2 => T3 ; + T3 => T1 + } ; + oper mk2Dig : Str -> Str -> TDigit = \c,o -> mk3Dig c o Pl ; mkDig : Str -> TDigit = \c -> mk2Dig c (c + "ème") ; diff --git a/src/italian/NumeralIta.gf b/src/italian/NumeralIta.gf index 93a55a2f4..db4588999 100644 --- a/src/italian/NumeralIta.gf +++ b/src/italian/NumeralIta.gf @@ -120,11 +120,12 @@ param Pred = pred | indip ; Dig = TDigit ; lin - IDig d = d ; + IDig d = d ** {tail = T1} ; IIDig d i = { - s = \\o => d.s ! NCard Masc ++ BIND ++ i.s ! o ; - n = Pl + s = \\o => d.s ! NCard Masc ++ spaceIf i.tail ++ i.s ! o ; + n = Pl ; + tail = inc i.tail } ; D_0 = mkDig "0" ; @@ -146,12 +147,24 @@ param Pred = pred | indip ; } ; IFrac d i = { s = \\o => d.s ! NCard Masc ++ - if_then_Str d.hasDot BIND (BIND++"."++BIND) ++ + if_then_Str d.hasDot BIND (BIND++","++BIND) ++ i.s ! o; n = Pl ; hasDot=True } ; + oper + spaceIf : DTail -> Str = \t -> case t of { + T3 => SOFT_SPACE ; + _ => BIND + } ; + + inc : DTail -> DTail = \t -> case t of { + T1 => T2 ; + T2 => T3 ; + T3 => T1 + } ; + oper mkDig : Str -> TDigit = \c -> mk2Dig c Pl ; diff --git a/src/portuguese/NumeralPor.gf b/src/portuguese/NumeralPor.gf index b1ddce787..91e0abd36 100644 --- a/src/portuguese/NumeralPor.gf +++ b/src/portuguese/NumeralPor.gf @@ -189,11 +189,12 @@ concrete NumeralPor of Numeral = CatPor [Numeral,Digits,Decimal] ** Dig = TDigit ; lin - IDig d = d ; + IDig d = d ** {tail = T1} ; IIDig d i = { - s = \\o => d.s ! NCard Masc ++ BIND ++ i.s ! o ; - n = Pl + s = \\o => d.s ! NCard Masc ++ spaceIf i.tail ++ i.s ! o ; + n = Pl ; + tail = inc i.tail } ; D_0 = mkDig "0" Sg ; @@ -215,12 +216,24 @@ concrete NumeralPor of Numeral = CatPor [Numeral,Digits,Decimal] ** } ; IFrac d i = { s = \\o => d.s ! NCard Masc ++ - if_then_Str d.hasDot BIND (BIND++"."++BIND) ++ + if_then_Str d.hasDot BIND (BIND++","++BIND) ++ i.s ! o; n = Pl ; hasDot=True } ; + oper + spaceIf : DTail -> Str = \t -> case t of { + T3 => SOFT_SPACE ; + _ => BIND + } ; + + inc : DTail -> DTail = \t -> case t of { + T1 => T2 ; + T2 => T3 ; + T3 => T1 + } ; + oper mk4Dig : Str -> Str -> Str -> Number -> TDigit = \c,o,a,n -> { s = table { diff --git a/src/romance/CatRomance.gf b/src/romance/CatRomance.gf index dc56e066c..9395627a0 100644 --- a/src/romance/CatRomance.gf +++ b/src/romance/CatRomance.gf @@ -89,7 +89,7 @@ incomplete concrete CatRomance of Cat = CommonX - [SC,Pol,MU] -- Numeral Numeral = {s : CardOrd => Str ; n : Number} ; - Digits = {s : CardOrd => Str ; n : Number} ; + Digits = {s : CardOrd => Str ; n : Number ; tail : DTail} ; Decimal = {s : CardOrd => Str ; n : Number ; hasDot : Bool} ; -- Structural diff --git a/src/spanish/NumeralSpa.gf b/src/spanish/NumeralSpa.gf index dff595811..fbdb1ad21 100644 --- a/src/spanish/NumeralSpa.gf +++ b/src/spanish/NumeralSpa.gf @@ -114,11 +114,12 @@ param Dig = TDigit ; lin - IDig d = d ; + IDig d = d ** {tail = T1} ; IIDig d i = { - s = \\o => d.s ! NCard Masc ++ BIND ++ i.s ! o ; - n = Pl + s = \\o => d.s ! NCard Masc ++ spaceIf i.tail ++ i.s ! o ; + n = Pl ; + tail = inc i.tail } ; D_0 = mkDig "0" ; @@ -140,12 +141,24 @@ param } ; IFrac d i = { s = \\o => d.s ! NCard Masc ++ - if_then_Str d.hasDot BIND (BIND++"."++BIND) ++ + if_then_Str d.hasDot BIND (BIND++","++BIND) ++ i.s ! o ; n = Pl ; hasDot=True } ; + oper + spaceIf : DTail -> Str = \t -> case t of { + T3 => SOFT_SPACE ; + _ => BIND + } ; + + inc : DTail -> DTail = \t -> case t of { + T1 => T2 ; + T2 => T3 ; + T3 => T1 + } ; + oper mk2Dig : Str -> Str -> TDigit = \c,o -> mk3Dig c o Pl ; mkDig : Str -> TDigit = \c -> mk2Dig c (c + ":o") ;