From b066fb4d35c56a01411739f23712e4f79c7d489d Mon Sep 17 00:00:00 2001 From: Krasimir Angelov Date: Fri, 21 Oct 2022 20:50:49 +0200 Subject: [PATCH] extended Numerals API. moved from the WordNet grammar --- src/abstract/Numeral.gf | 32 +++++++++++--- src/afrikaans/NumeralAfr.gf | 4 +- src/ancient_greek/ExtraGrc.gf | 4 +- src/ancient_greek/ExtraGrcAbs.gf | 4 +- src/ancient_greek/NumeralGrc.gf | 10 +++-- src/api/Constructors.gf | 26 ++++++------ src/bulgarian/NumeralBul.gf | 72 ++++++++++++++++++++++++++++---- src/catalan/NumeralCat.gf | 6 ++- src/dutch/NumeralDut.gf | 4 +- src/english/NumeralEng.gf | 57 +++++++++++++++++++++++-- src/estonian/NumeralEst.gf | 5 ++- src/finnish/NumeralFin.gf | 16 +++++-- src/french/NumeralFre.gf | 5 +++ src/german/NumeralGer.gf | 16 ++++++- src/greek/NumeralGre.gf | 11 +++-- src/italian/NumeralIta.gf | 5 +++ src/korean/NumeralKor.gf | 7 +++- src/latvian/NumeralLav.gf | 5 +++ src/maltese/NumeralMlt.gf | 5 +++ src/polish/NumeralPol.gf | 7 +++- src/portuguese/NumeralPor.gf | 29 +++++++++++++ src/romanian/NumeralRon.gf | 5 +++ src/slovak/NumeralSlo.gf | 5 +++ src/slovenian/NumeralSlv.gf | 15 ++++--- src/somali/NumeralSom.gf | 5 ++- src/spanish/NumeralSpa.gf | 5 +++ src/swahili/NumeralSwa.gf | 13 ++++-- src/swedish/NumeralSwe.gf | 29 +++++++++++-- src/turkish/NumeralTur.gf | 13 ++++-- 29 files changed, 351 insertions(+), 69 deletions(-) diff --git a/src/abstract/Numeral.gf b/src/abstract/Numeral.gf index 0feae9ec4..01702b5c6 100644 --- a/src/abstract/Numeral.gf +++ b/src/abstract/Numeral.gf @@ -20,11 +20,13 @@ abstract Numeral = Cat [Numeral,Digits] ** { cat - Digit ; -- 2..9 - Sub10 ; -- 1..9 - Sub100 ; -- 1..99 - Sub1000 ; -- 1..999 - Sub1000000 ; -- 1..999999 + Digit ; -- 2..9 + Sub10 ; -- 1..9 + Sub100 ; -- 1..99 + Sub1000 ; -- 1..999 + Sub1000000 ; -- 1..999999 + Sub1000000000 ; -- 1..999999999 + Sub1000000000000 ; -- 1..999999999999 data num : Sub1000000 -> Numeral ; -- 123456 [coercion to top category] @@ -33,18 +35,36 @@ data pot01 : Sub10 ; -- 1 pot0 : Digit -> Sub10 ; -- d * 1 + pot0as1 : Sub10 -> Sub100 ; -- coercion of 1..9 + pot110 : Sub100 ; -- 10 pot111 : Sub100 ; -- 11 pot1to19 : Digit -> Sub100 ; -- 10 + d - pot0as1 : Sub10 -> Sub100 ; -- coercion of 1..9 pot1 : Digit -> Sub100 ; -- d * 10 pot1plus : Digit -> Sub10 -> Sub100 ; -- d * 10 + n pot1as2 : Sub100 -> Sub1000 ; -- coercion of 1..99 + + pot21 : Sub1000 ; -- a hundred instead of one hundred pot2 : Sub10 -> Sub1000 ; -- m * 100 pot2plus : Sub10 -> Sub100 -> Sub1000 ; -- m * 100 + n pot2as3 : Sub1000 -> Sub1000000 ; -- coercion of 1..999 + + pot31 : Sub1000000 ; -- a thousand instead of one thousand pot3 : Sub1000 -> Sub1000000 ; -- m * 1000 pot3plus : Sub1000 -> Sub1000 -> Sub1000000 ; -- m * 1000 + n + pot3as4 : Sub1000000 -> Sub1000000000 ; -- coercion of 1..999999 + pot3float : Float -> Sub1000000 ; -- 3.5 thousand + + pot41 : Sub1000000000 ; -- a million instead of one million + pot4 : Sub1000 -> Sub1000000000 ; -- m * 1000000000 + pot4plus : Sub1000 -> Sub1000000 -> Sub1000000000 ; -- m * 1000000000 + n + pot4as5 : Sub1000000000 -> Sub1000000000000 ; -- coercion of 1..999999999 + pot4float : Float -> Sub1000000000 ; -- 3.5 million + + pot51 : Sub1000000000000 ; -- a billion instead of one billion + pot5 : Sub1000 -> Sub1000000000000 ; -- m * 1000000000 + pot5plus : Sub1000 -> Sub1000000000 -> Sub1000000000000 ; -- m * 1000000000 + n + pot5float : Float -> Sub1000000000000 ; -- 3.5 billion -- Numerals as sequences of digits have a separate, simpler grammar diff --git a/src/afrikaans/NumeralAfr.gf b/src/afrikaans/NumeralAfr.gf index e4aca3883..222024185 100644 --- a/src/afrikaans/NumeralAfr.gf +++ b/src/afrikaans/NumeralAfr.gf @@ -7,7 +7,7 @@ flags optimize = all_subs ; lincat Digit = {s : DForm => CardOrd => Str ; en : Str} ; Sub10 = {s : DForm => CardOrd => Str ; n : Number ; en : Str ; attr : Str} ; - Sub100, Sub1000, Sub1000000 = + Sub100, Sub1000, Sub1000000, Sub1000000000, Sub1000000000000 = {s : CardOrd => Str ; n : Number ; attr : Str} ; lin @@ -50,6 +50,8 @@ lin pot3plus n m = addAttr {s = \\g => n.attr ++ "duisend" ++ m.s ! g ; n = Pl} ; + pot3as4 n = n ; + pot4as5 n = n ; lincat Dig = TDigit ; diff --git a/src/ancient_greek/ExtraGrc.gf b/src/ancient_greek/ExtraGrc.gf index de2b867bb..1e713673b 100644 --- a/src/ancient_greek/ExtraGrc.gf +++ b/src/ancient_greek/ExtraGrc.gf @@ -323,8 +323,8 @@ concrete ExtraGrc of ExtraGrcAbs = CatGrc, NumeralGrc[Sub1000000,tenthousand] ** Sub10000 = {s : CardOrd => Str ; n : Number} ; -- TODO: constructors lin -- d * 10000 - pot4 d = { s = \\f => d.s ! NAdv ++ (tenthousand ! f) ; n = Pl } ; - pot4plus d m = { + pot3X d = { s = \\f => d.s ! NAdv ++ (tenthousand ! f) ; n = Pl } ; + pot3Xplus d m = { s = \\f => d.s ! NAdv ++ tenthousand ! f ++ "kai`" ++ m.s ! f ; n = Pl} ; diff --git a/src/ancient_greek/ExtraGrcAbs.gf b/src/ancient_greek/ExtraGrcAbs.gf index b6655df24..e9b502116 100644 --- a/src/ancient_greek/ExtraGrcAbs.gf +++ b/src/ancient_greek/ExtraGrcAbs.gf @@ -153,8 +153,8 @@ abstract ExtraGrcAbs = Extra, Numeral[Sub1000000] ** { Sub10000 ; -- 1..9999 data - pot4 : Sub10000 -> Sub1000000 ; -- m * 10000 - pot4plus : Sub10000 -> Sub10000 -> Sub1000000 ; -- m * 10000 + n + pot3X : Sub10000 -> Sub1000000 ; -- m * 10000 + pot3Xplus : Sub10000 -> Sub10000 -> Sub1000000 ; -- m * 10000 + n -- Conjunctions: diff --git a/src/ancient_greek/NumeralGrc.gf b/src/ancient_greek/NumeralGrc.gf index 6173afa7e..a1042a307 100644 --- a/src/ancient_greek/NumeralGrc.gf +++ b/src/ancient_greek/NumeralGrc.gf @@ -5,9 +5,11 @@ concrete NumeralGrc of Numeral = CatGrc ** open ResGrc, MorphoGrc in { lincat Digit = {s : DForm => CardOrd => Str} ; Sub10 = {s : DForm => CardOrd => Str ; n : Number} ; - Sub100 = {s : CardOrd => Str ; n : Number} ; - Sub1000 = {s : CardOrd => Str ; n : Number} ; - Sub1000000 = {s : CardOrd => Str ; n : Number} ; + Sub100 = {s : CardOrd => Str ; n : Number} ; + Sub1000 = {s : CardOrd => Str ; n : Number} ; + Sub1000000 = {s : CardOrd => Str ; n : Number} ; + Sub1000000000 = {s : CardOrd => Str ; n : Number} ; + Sub1000000000000 = {s : CardOrd => Str ; n : Number} ; lin num x = x ; @@ -52,6 +54,8 @@ lin -- mkDigit d (d+10) (d*10) d-th d-times pot3plus d m = { s = \\f => d.s ! NAdv ++ thousand ! f ++ "kai`" ++ m.s ! f ; n = Pl} ; + pot3as4 n = n ; + pot4as5 n = n ; -- numerals as sequences of digits diff --git a/src/api/Constructors.gf b/src/api/Constructors.gf index b9f696d5a..394b50934 100644 --- a/src/api/Constructors.gf +++ b/src/api/Constructors.gf @@ -121,9 +121,9 @@ incomplete resource Constructors = open Grammar in { --% mkText : QS -> Text -- Did she sleep? = \q -> TQuestMark (PhrUtt NoPConj (UttQS q) NoVoc) TEmpty ; --% mkText : (Pol) -> Imp -> Text -- Don't sleep! - = \p,i -> TExclMark (PhrUtt NoPConj (UttImpSg p i) NoVoc) TEmpty; --% + = \p,i -> TExclMark (PhrUtt NoPConj (UttImpSg p i) NoVoc) TEmpty ; --% mkText : Imp -> Text -- Sleep! --% - = \i -> TExclMark (PhrUtt NoPConj (UttImpSg PPos i) NoVoc) TEmpty; --% + = \i -> TExclMark (PhrUtt NoPConj (UttImpSg PPos i) NoVoc) TEmpty ; --% -- Finally, two texts can be combined into a text. @@ -374,11 +374,11 @@ incomplete resource Constructors = open Grammar in { --% mkCl = overload { mkCl : NP -> V -> Cl -- she sleeps - = \s,v -> PredVP s (UseV v); --% + = \s,v -> PredVP s (UseV v) ; --% mkCl : NP -> V2 -> NP -> Cl -- she loves him - = \s,v,o -> PredVP s (ComplV2 v o); --% + = \s,v,o -> PredVP s (ComplV2 v o) ; --% mkCl : NP -> V3 -> NP -> NP -> Cl -- she sends it to him - = \s,v,o,i -> PredVP s (ComplV3 v o i); --% + = \s,v,o,i -> PredVP s (ComplV3 v o i) ; --% mkCl : NP -> VV -> VP -> Cl -- she wants to sleep = \s,v,vp -> PredVP s (ComplVV v vp) ; --% mkCl : NP -> VS -> S -> Cl -- she says that she sleeps @@ -1006,9 +1006,9 @@ incomplete resource Constructors = open Grammar in { --% mkCN : A -> N -> CN -- big house - = \x,y -> AdjCN (PositA x) (UseN y); --% + = \x,y -> AdjCN (PositA x) (UseN y) ; --% mkCN : A -> CN -> CN -- big blue house - = \x,y -> AdjCN (PositA x) y; --% + = \x,y -> AdjCN (PositA x) y ; --% mkCN : AP -> N -> CN -- very big house = \x,y -> AdjCN x (UseN y) ; --% mkCN : AP -> CN -> CN -- very big blue house @@ -1211,11 +1211,11 @@ incomplete resource Constructors = open Grammar in { --% mkQCl : IP -> VP -> QCl -- who sleeps --: = QuestVP ; --% mkQCl : IP -> V -> QCl -- who sleeps - = \s,v -> QuestVP s (UseV v); --% + = \s,v -> QuestVP s (UseV v) ; --% mkQCl : IP -> V2 -> NP -> QCl -- who loves her - = \s,v,o -> QuestVP s (ComplV2 v o); --% + = \s,v,o -> QuestVP s (ComplV2 v o) ; --% mkQCl : IP -> V3 -> NP -> NP -> QCl -- who sends it to her - = \s,v,o,i -> QuestVP s (ComplV3 v o i); --% + = \s,v,o,i -> QuestVP s (ComplV3 v o i) ; --% mkQCl : IP -> VV -> VP -> QCl -- who wants to sleep = \s,v,vp -> QuestVP s (ComplVV v vp) ; --% mkQCl : IP -> VS -> S -> QCl -- who says that she sleeps @@ -1408,11 +1408,11 @@ incomplete resource Constructors = open Grammar in { --% = RelVP ; --% mkRCl : RP -> V -> RCl -- who sleeps - = \s,v -> RelVP s (UseV v); --% + = \s,v -> RelVP s (UseV v) ; --% mkRCl : RP -> V2 -> NP -> RCl -- who loves her - = \s,v,o -> RelVP s (ComplV2 v o); --% + = \s,v,o -> RelVP s (ComplV2 v o) ; --% mkRCl : RP -> V3 -> NP -> NP -> RCl -- who sends it to her - = \s,v,o,i -> RelVP s (ComplV3 v o i); --% + = \s,v,o,i -> RelVP s (ComplV3 v o i) ; --% mkRCl : RP -> VV -> VP -> RCl -- who wants to sleep = \s,v,vp -> RelVP s (ComplVV v vp) ; --% mkRCl : RP -> VS -> S -> RCl -- who says that she sleeps diff --git a/src/bulgarian/NumeralBul.gf b/src/bulgarian/NumeralBul.gf index cc18e870d..170351fdd 100644 --- a/src/bulgarian/NumeralBul.gf +++ b/src/bulgarian/NumeralBul.gf @@ -4,11 +4,13 @@ concrete NumeralBul of Numeral = CatBul [Numeral,Digits] ** open Prelude, ResBul lincat - Digit = {s : DForm => CardOrd => Str} ; - Sub10 = {s : DForm => CardOrd => Str; n : Number} ; - Sub100 = {s : CardOrd => NumF => Str; n : Number; i : Bool} ; - Sub1000 = {s : CardOrd => NumF => Str; n : Number; i : Bool} ; - Sub1000000 = {s : CardOrd => NumF => Str; n : Number} ; + Digit = {s : DForm => CardOrd => Str} ; + Sub10 = {s : DForm => CardOrd => Str; n : Number} ; + Sub100 = {s : CardOrd => NumF => Str; n : Number; i : Bool} ; + Sub1000 = {s : CardOrd => NumF => Str; n : Number; i : Bool} ; + Sub1000000 = {s : CardOrd => NumF => Str; n : Number} ; + Sub1000000000 = {s : CardOrd => NumF => Str; n : Number} ; + Sub1000000000000 = {s : CardOrd => NumF => Str; n : Number} ; lin num x = {s = \\c => x.s ! c ! Formal; n=x.n} ; lin n2 = mkDigit "два" "двама" "две" "втори" "двайсет" "двеста" "двестата" ; @@ -52,24 +54,33 @@ lin pot01 = ;n = Sg } ; lin pot0 d = d ** {n = Pl} ; +lin pot0as1 n = {s = \\c,nf => n.s ! unit ! c; n = n.n; i = True} ; lin pot110 = {s=\\c,nf => pot01.s ! ten nf ! c; n = Pl; i = True} ; lin pot111 = {s=\\c,nf => pot01.s ! teen nf ! c; n = Pl; i = True} ; lin pot1to19 d = {s = \\c,nf => d.s ! teen nf ! c; n = Pl; i = True} ; -lin pot0as1 n = {s = \\c,nf => n.s ! unit ! c; n = n.n; i = True} ; lin pot1 d = {s = \\c,nf => d.s ! ten nf ! c; n = Pl; i = True} ; lin pot1plus d e = { s = \\c,nf => d.s ! ten nf ! NCard (CFMasc Indef NonHuman) ++ "и" ++ e.s ! unit ! c ; n = Pl; i = False} ; - lin pot1as2 n = n ; + +lin pot21 = { + s = \\o,_ => mkCardOrd100 "сто" "стоте" "стотен" ! o ; + i = False ; + n = Pl + } ; lin pot2 n = {s = \\c,nf => n.s ! hundred ! c; n = Pl; i = True} ; lin pot2plus d e = { s = \\c,nf => d.s ! hundred ! NCard (CFMasc Indef NonHuman) ++ case e.i of {False => []; True => "и"} ++ e.s ! c ! nf ; n = Pl ; i = False } ; - lin pot2as3 n = n ; + +lin pot31 = { + s = \\o,_ => mkCardOrd100 "хиляда" "хилядата" "хиляден" ! o ; + n = Pl + } ; lin pot3 n = { s = \\c,nf => case n.n of { Sg => mkCardOrd100 "хиляда" "хилядата" "хиляден" ! c ; @@ -85,7 +96,52 @@ lin pot3plus n m = { ++ case m.i of {False => []; True => "и"} ++ m.s ! c ! nf ; n = Pl } ; +lin pot3as4 n = n ; +lin pot3float f = { + s = \\c,nf => f.s ++ mkCardOrd100 "хиляди" "хилядите" "хиляден" ! c ; + n = Pl + } ; +lin pot41 = { + s = \\o,_ => mkCardOrd100 "милион" "милионите" "милионен" ! o ; + n = Pl + } ; +lin pot4 n = { + s = \\c,nf => case n.n of { + Sg => mkCardOrd100 "милион" "милионите" "милионен" ! c ; + Pl => n.s ! NCard (CFFem Indef) ! nf ++ mkCardOrd100 "милиони" "милионите" "милионен" ! c + } ; + n = Pl + } ; +lin pot4plus n1 n2 = { + s = \\o,f => (pot4 n1).s ! o ! f ++ "и" ++ n2.s ! o ! f; + n = Pl + } ; +lin pot4as5 n = n ; +lin pot4float f = { + s = \\c,nf => f.s ++ mkCardOrd100 "милиона" "милиона" "милионен" ! c ; + n = Pl + } ; + +lin pot51 = { + s = \\o,_ => mkCardOrd100 "милиярд" "милиярдите" "милиярден" ! o ; + n = Pl + } ; +lin pot5 n = { + s = \\c,nf => case n.n of { + Sg => mkCardOrd100 "милиярд" "милиярдите" "милиярден" ! c ; + Pl => n.s ! NCard (CFFem Indef) ! nf ++ mkCardOrd100 "милиярд" "милиярдите" "милиярден" ! c + } ; + n = Pl + } ; +lin pot5plus n1 n2 = { + s = \\o,f => (pot5 n1).s ! o ! f ++ "и" ++ n2.s ! o ! f; + n = Pl + } ; +lin pot5float f = { + s = \\c,nf => f.s ++ mkCardOrd100 "милиярда" "милиярда" "милиярден" ! c ; + n = Pl + } ; -- numerals as sequences of digits diff --git a/src/catalan/NumeralCat.gf b/src/catalan/NumeralCat.gf index 4f8350ca8..1d5f69386 100644 --- a/src/catalan/NumeralCat.gf +++ b/src/catalan/NumeralCat.gf @@ -12,6 +12,8 @@ lincat Sub100 = {s : CardOrd => Str ; n : Number} ; Sub1000 = {s : CardOrd => Str ; n : Number} ; Sub1000000 = {s : CardOrd => Str ; n : Number} ; + Sub1000000000 = {s : CardOrd => Str ; n : Number} ; + Sub1000000000000 = {s : CardOrd => Str ; n : Number} ; -- Auxiliaries @@ -125,7 +127,9 @@ lin pot3plus n m = {s= \\co => (table {Sg => []; Pl => (n.s ! co)} ! n.n) ++ "mil" ++ (m.s !co); n= Pl} ; - + + pot3as4 n = n ; + pot4as5 n = n ; param DForm = unit | teen | ten | tenplus | Aunit | OrdF ; diff --git a/src/dutch/NumeralDut.gf b/src/dutch/NumeralDut.gf index 31d1d8091..00697295c 100644 --- a/src/dutch/NumeralDut.gf +++ b/src/dutch/NumeralDut.gf @@ -6,7 +6,7 @@ flags optimize = all_subs ; lincat Digit = {s : DForm => CardOrd => Str ; en : Str} ; Sub10 = {s : DForm => CardOrd => Str ; n : Number ; en : Str ; attr : Str} ; - Sub100, Sub1000, Sub1000000 = + Sub100, Sub1000, Sub1000000, Sub1000000000, Sub1000000000000 = {s : CardOrd => Str ; n : Number ; attr : Str} ; lin @@ -49,6 +49,8 @@ lin pot3plus n m = addAttr {s = \\g => n.attr ++ "duizend" ++ m.s ! g ; n = Pl} ; + pot3as4 n = n ; + pot4as5 n = n ; lincat Dig = TDigit ; diff --git a/src/english/NumeralEng.gf b/src/english/NumeralEng.gf index 47fc1c356..999da63db 100644 --- a/src/english/NumeralEng.gf +++ b/src/english/NumeralEng.gf @@ -4,8 +4,10 @@ lincat Digit = {s : DForm => CardOrd => Case => Str} ; Sub10 = {s : DForm => CardOrd => Case => Str ; n : Number} ; Sub100 = {s : CardOrd => Case => Str ; n : Number} ; - Sub1000 = {s : Bool => CardOrd => Case => Str ; n : Number} ; - Sub1000000 = {s : Bool => CardOrd => Case => Str ; n : Number} ; + Sub1000 = {s : Bool => CardOrd => Case => Str ; n : Number} ; + Sub1000000 = {s : Bool => CardOrd => Case => Str ; n : Number} ; + Sub1000000000 = {s : Bool => CardOrd => Case => Str ; n : Number} ; + Sub1000000000000 = {s : Bool => CardOrd => Case => Str ; n : Number} ; lin num x = x ; lin n2 = let two = mkNum "two" "twelve" "twenty" "second" in @@ -25,22 +27,71 @@ lin n9 = mkNum "nine" "nineteen" "ninety" "ninth" ; lin pot01 = mkNum "one" "eleven" "ten" "first" ** {n = Sg} ; lin pot0 d = d ** {n = Pl} ; +lin pot0as1 n = {s = n.s ! unit} ** {n = n.n} ; + lin pot110 = regCardOrd "ten" ** {n = Pl} ; lin pot111 = regCardOrd "eleven" ** {n = Pl} ; lin pot1to19 d = {s = d.s ! teen} ** {n = Pl} ; -lin pot0as1 n = {s = n.s ! unit} ** {n = n.n} ; lin pot1 d = {s = d.s ! ten} ** {n = Pl} ; lin pot1plus d e = { s = \\o,c => d.s ! ten ! NCard ! Nom ++ BIND ++ "-" ++ BIND ++ e.s ! unit ! o ! c ; n = Pl} ; lin pot1as2 n = {s = \\_ => n.s; n=n.n} ; + +lin pot21 = { + s = \\d,o,c => case d of {True => []; False => "a"} ++ + (regCardOrd "hundred").s ! o ! c; + n = Pl + } ; lin pot2 d = {s = \\_,o,c => d.s ! unit ! NCard ! Nom ++ mkCard o "hundred" ! c} ** {n = Pl} ; lin pot2plus d e = { s = \\_,o,c => d.s ! unit ! NCard ! Nom ++ "hundred" ++ "and" ++ e.s ! o ! c ; n = Pl} ; lin pot2as3 n = n ; + +lin pot31 = { + s = \\d,o,c => case d of {True => []; False => "a"} ++ + (regCardOrd "thousand").s ! o ! c; + n = Pl + } ; lin pot3 n = { s = \\d,o,c => n.s ! d ! NCard ! Nom ++ mkCard o "thousand" ! c ; n = Pl} ; lin pot3plus n m = { s = \\d,o,c => n.s ! d ! NCard ! Nom ++ "thousand" ++ m.s ! False ! o ! c; n = Pl} ; +lin pot3as4 n = n ; +lin pot3float f = { + s = \\d,o,c => f.s ++ mkCard o "thousand" ! c ; n = Pl} ; + +lin pot41 = { + s = \\d,o,c => case d of {True => []; False => "a"} ++ + (regCardOrd "million").s ! o ! c; + n = Pl + } ; +lin pot4 n = { + s = \\d,o,c => n.s ! d ! NCard ! Nom ++ pot41.s ! True ! o ! c ; + n = Pl + } ; +lin pot4plus n1 n2 = { + s = \\d,o,c => n1.s ! d ! NCard ! Nom ++ pot41.s ! True ! NCard ! Nom ++ "and" ++ n2.s ! True ! o ! c; + n = Pl + } ; +lin pot4as5 n = n ; +lin pot4float f = { + s = \\d,o,c => f.s ++ pot41.s ! True ! o ! c ; n = Pl} ; + +lin pot51 = { + s = \\d,o,c => case d of {True => []; False => "a"} ++ + (regCardOrd "billion").s ! o ! c; + n = Pl + } ; +lin pot5 n = { + s = \\d,o,c => n.s ! d ! NCard ! Nom ++ pot51.s ! True ! o ! c ; + n = Pl + } ; +lin pot5plus n1 n2 = { + s = \\d,o,c => n1.s ! d ! NCard ! Nom ++ pot51.s ! True ! NCard ! Nom ++ "and" ++ n2.s ! True ! o ! c; + n = Pl + } ; +lin pot5float f = { + s = \\d,o,c => f.s ++ pot51.s ! True ! o ! c ; n = Pl} ; -- numerals as sequences of digits diff --git a/src/estonian/NumeralEst.gf b/src/estonian/NumeralEst.gf index 40d737b9d..db30ad22b 100644 --- a/src/estonian/NumeralEst.gf +++ b/src/estonian/NumeralEst.gf @@ -6,7 +6,7 @@ concrete NumeralEst of Numeral = CatEst [Numeral,Digits] ** open Prelude, Parad flags optimize=all_subs ; coding=utf8; lincat - Sub1000000 = {s : CardOrd => Str ; n : MorphoEst.Number} ; + Sub1000000, Sub1000000000, Sub1000000000000 = {s : CardOrd => Str ; n : MorphoEst.Number} ; Digit = {s : CardOrd => Str} ; Sub10, Sub100, Sub1000 = {s : NumPlace => CardOrd => Str ; n : MorphoEst.Number} ; @@ -65,6 +65,9 @@ lin s = \\c => d.s ! NumAttr ! c ++ tuhattaN.s ! d.n ! c ++ e.s ! NumIndep ! c } ; + pot3as4 n = n ; + pot4as5 n = n ; + oper co : (c,o : {s : NForm => Str}) -> {s : CardOrd => Str} = \c,o -> { s = table { diff --git a/src/finnish/NumeralFin.gf b/src/finnish/NumeralFin.gf index c839580d2..b182c1b8e 100644 --- a/src/finnish/NumeralFin.gf +++ b/src/finnish/NumeralFin.gf @@ -7,7 +7,7 @@ flags optimize = all_subs ; coding=utf8 ; lincat - Sub1000000 = {s : CardOrd => Str ; n : MorphoFin.Number} ; + Sub1000000, Sub1000000000, Sub1000000000000 = {s : CardOrd => Str ; n : MorphoFin.Number} ; Digit = {s : CardOrd => Str} ; Sub10, Sub100, Sub1000 = {s : NumPlace => CardOrd => Str ; n : MorphoFin.Number} ; @@ -44,21 +44,21 @@ lin n = Sg } ; pot0 d = {n = Pl ; s = \\_ => d.s} ; + pot0as1 n = n ; + pot110 = {s = \\_ => kymmenenN.s ; n = Pl } ; - pot111 = {n = Pl ; s = \\_,c => yksiN.s ! c ++ BIND ++ "toista"} ; ---- yhdes pot1to19 d = {n = Pl ; s = \\_,c => d.s ! c ++ BIND ++ "toista"} ; - pot0as1 n = n ; - pot1 d = {n = Pl ; s = \\_,c => d.s ! c ++ BIND ++ kymmentaN.s ! c} ; pot1plus d e = { n = Pl ; s = \\_,c => d.s ! c ++ BIND ++ kymmentaN.s ! c ++ BIND ++ e.s ! NumIndep ! c } ; pot1as2 n = n ; + pot2 d = {n = Pl ; s = \\_,c => d.s ! NumAttr ! c ++ nBIND d.n ++ sataaN.s ! d.n ! c} ; ---- pot2plus d e = { n = Pl ; @@ -66,11 +66,19 @@ lin BIND ++ e.s ! NumIndep ! c } ; pot2as3 n = {n = n.n ; s = n.s ! NumIndep} ; + pot3 d = {n = Pl ; s = \\c => d.s ! NumAttr ! c ++ nBIND d.n ++ tuhattaN.s ! d.n ! c} ; ---- pot3plus d e = { n = Pl ; s = \\c => d.s ! NumAttr ! c ++ nBIND d.n ++ tuhattaN.s ! d.n ! c ++ e.s ! NumIndep ! c } ; + pot3as4 n = n ; + pot3float f = {n = Pl ; s = \\c => f.s ++ BIND ++ tuhattaN.s ! Pl ! c} ; + + pot4as5 n = n ; + pot4float f = {n = Pl ; s = \\c => f.s ++ "miljoonaa"} ; -- KA: case inflection missing + + pot51 = {n = Pl ; s = \\c => "miljardi"} ; -- KA: case inflection missing oper -- co : (c,o : {s : NForm => Str}) -> {s : CardOrd => Str} = \c,o -> { diff --git a/src/french/NumeralFre.gf b/src/french/NumeralFre.gf index a3cb1d314..5e667d8bf 100644 --- a/src/french/NumeralFre.gf +++ b/src/french/NumeralFre.gf @@ -46,6 +46,8 @@ lincat Sub100 = {s : CardOrd => Placement => Str ; n : Number} ; Sub1000 = {s : CardOrd => Placement => Str ; n : Number} ; Sub1000000 = {s : CardOrd => Str ; n : Number} ; + Sub1000000000 = {s : CardOrd => Str ; n : Number} ; + Sub1000000000000 = {s : CardOrd => Str ; n : Number} ; lin num x0 = x0 ; @@ -139,6 +141,9 @@ lin pot3plus n m = {s = \\g => (n.s ! NCard Masc ! attr) ++ "mille" ++ m.s ! g ! postpo ; n = Pl} ; +lin pot3as4 n = n ; +lin pot4as5 n = n ; + oper hyphen = BIND ++ "-" ++ BIND ; diff --git a/src/german/NumeralGer.gf b/src/german/NumeralGer.gf index babb14e1e..befad3c51 100644 --- a/src/german/NumeralGer.gf +++ b/src/german/NumeralGer.gf @@ -6,7 +6,7 @@ flags optimize = all_subs ; lincat Digit = {s : DForm => CardOrd => Str} ; Sub10 = {s : DForm => CardOrd => Str ; n : Number} ; - Sub100, Sub1000, Sub1000000 = + Sub100, Sub1000, Sub1000000, Sub1000000000, Sub1000000000000 = {s : CardOrd => Str ; n : Number} ; lin @@ -29,23 +29,35 @@ lin n = Sg } ; pot0 d = {s = \\f,g => d.s ! f ! g ; n = Pl} ; + pot0as1 n = {s = n.s ! DUnit; n = n.n } ; + pot110 = {s = cardReg "zehn"; n = Pl} ; pot111 = {s = cardReg "elf"; n = Pl} ; pot1to19 d = {s = d.s ! DTeen; n = Pl} ; - pot0as1 n = {s = n.s ! DUnit; n = n.n } ; pot1 d = {s = d.s ! DTen; n = Pl} ; pot1plus d e = {s = \\g => e.s ! DUnit ! invNum ++ BIND ++ "und" ++ BIND ++ d.s ! DTen ! g; n = Pl} ; pot1as2 n = n ; + pot2 d = {s = \\g => multiple (d.s ! DUnit) d.n ++ cardOrd "hundert" "hunderte" ! g ; n = Pl} ; pot2plus d e = {s = \\g => multiple (d.s ! DUnit) d.n ++ "hundert" ++ BIND ++ e.s ! g ; n = Pl} ; pot2as3 n = n ; + pot3 n = {s = \\g => multiple n.s n.n ++ cardOrd "tausend" "tausendte" ! g ; n = Pl} ; ---- pot3plus n m = {s = \\g => multiple n.s n.n ++ "tausend" ++ m.s ! g ; n = Pl} ; + pot3as4 n = n ; + pot3float f = {s = \\g => + f.s ++ cardOrd "tausend" "tausendte" ! g ; n = Pl} ; ---- + + pot4as5 n = n ; + pot4float f = {s = \\g => + f.s ++ cardOrd "Millionen" "Millionte" ! g ; n = Pl} ; ---- + + pot51 = {s = \\g => "einer Milliarde"; n = Pl} ; -- KA: case inflection missing oper multiple : (CardOrd => Str) -> Number -> Str = \d,n -> diff --git a/src/greek/NumeralGre.gf b/src/greek/NumeralGre.gf index 6473c1f63..b898da1c5 100644 --- a/src/greek/NumeralGre.gf +++ b/src/greek/NumeralGre.gf @@ -6,9 +6,11 @@ concrete NumeralGre of Numeral = CatGre [Numeral,Digits] ** open ResGre,Prelude lincat Digit = {s : DForm => CardOrd => Str} ; Sub10 = {s : DForm => CardOrd => Str ; n : Number} ; - Sub100 = {s : CardOrd => Str ; n : Number} ; - Sub1000 = {s : CardOrd => Str ; n : Number} ; - Sub1000000 = {s : CardOrd => Str ; n : Number} ; + Sub100 = {s : CardOrd => Str ; n : Number} ; + Sub1000 = {s : CardOrd => Str ; n : Number} ; + Sub1000000 = {s : CardOrd => Str ; n : Number} ; + Sub1000000000 = {s : CardOrd => Str ; n : Number} ; + Sub1000000000000 = {s : CardOrd => Str ; n : Number} ; @@ -59,6 +61,9 @@ lin pot3plus n m = { Pl => Xilias co n.s n.n ++ cardOrdXiliaPl "χιλιάδες" "χιλιοστός" ! co ++ m.s ! co } } ** {n = Pl} ; +lin pot3as4 n = n ; +lin pot4as5 n = n ; + oper diff --git a/src/italian/NumeralIta.gf b/src/italian/NumeralIta.gf index c0bb4c70f..d5e9e8e1e 100644 --- a/src/italian/NumeralIta.gf +++ b/src/italian/NumeralIta.gf @@ -7,6 +7,8 @@ lincat Sub100 = {s : CardOrd => Str ; n : Number} ; Sub1000 = {s : CardOrd => Str ; n : Number} ; Sub1000000 = {s : CardOrd => Str ; n : Number} ; + Sub1000000000 = {s : CardOrd => Str ; n : Number} ; + Sub1000000000000 = {s : CardOrd => Str ; n : Number} ; lin num x = x ; @@ -72,6 +74,9 @@ lin pot3 n = spl (\\co => n.s ! NCard Masc ++ nBIND n.n ++ lin pot3plus n m = {s = \\g => n.s ! NCard Masc ++ nBIND n.n ++ mille ! n.n ++ "e" ++ m.s ! g ; n = Pl} ; +lin pot3as4 n = n ; +lin pot4as5 n = n ; + oper nBIND : Number -> Str = \n -> case n of {Sg => [] ; _ => BIND} ; -- no BIND after silent 1 diff --git a/src/korean/NumeralKor.gf b/src/korean/NumeralKor.gf index ac21579a1..e8b41c2ce 100644 --- a/src/korean/NumeralKor.gf +++ b/src/korean/NumeralKor.gf @@ -6,7 +6,9 @@ lincat Sub10, Sub100, Sub1000, - Sub1000000 = ResKor.Numeral ; + Sub1000000, + Sub1000000000, + Sub1000000000000 = ResKor.Numeral ; lin -- : Sub1000000 -> Numeral ; -- 123456 [coercion to top category] @@ -84,6 +86,9 @@ lin -- : Sub1000 -> Sub1000 -> Sub1000000 ; -- m * 1000 + n pot3plus m n = TODO ; + pot3as4 x = x ; + pot4as5 x = x ; + oper LinDigit : Type = ResKor.Numeral ** {isTwo : Bool ; ten : Str} ; diff --git a/src/latvian/NumeralLav.gf b/src/latvian/NumeralLav.gf index d4d7e9363..c53a5a494 100644 --- a/src/latvian/NumeralLav.gf +++ b/src/latvian/NumeralLav.gf @@ -12,6 +12,8 @@ lincat Sub100 = { s : CardOrd => Gender => Case => Str ; num : Number } ; Sub1000 = { s : CardOrd => Gender => Case => Str ; num : Number } ; Sub1000000 = { s : CardOrd => Gender => Case => Str ; num : Number } ; + Sub1000000000 = { s : CardOrd => Gender => Case => Str ; num : Number } ; + Sub1000000000000 = { s : CardOrd => Gender => Case => Str ; num : Number } ; lin @@ -80,6 +82,9 @@ lin num = e.num } ; + pot3as4 n = n ; + pot4as5 n = n ; + -- Numerals as sequences of digits: lincat diff --git a/src/maltese/NumeralMlt.gf b/src/maltese/NumeralMlt.gf index b9d096889..1d19d1e08 100644 --- a/src/maltese/NumeralMlt.gf +++ b/src/maltese/NumeralMlt.gf @@ -63,6 +63,8 @@ concrete NumeralMlt of Numeral = CatMlt [Numeral,Digits] ** open Prelude,ResMlt Sub100 = Form2 ; Sub1000 = Form2 ; Sub1000000 = Form2 ; + Sub1000000000 = Form2 ; + Sub1000000000000 = Form2 ; oper @@ -335,6 +337,9 @@ concrete NumeralMlt of Numeral = CatMlt [Numeral,Digits] ** open Prelude,ResMlt f = Hund ; -- NOT IMPORTANT } ; + pot3as4 m = m ; + pot4as5 m = m ; + oper -- Build "x thousand" table numTable : (CardOrd => NumCase => Str) = overload { diff --git a/src/polish/NumeralPol.gf b/src/polish/NumeralPol.gf index c4766a0db..92a8e1c3c 100644 --- a/src/polish/NumeralPol.gf +++ b/src/polish/NumeralPol.gf @@ -13,7 +13,7 @@ concrete NumeralPol of Numeral = CatPol [Numeral,Digits] ** open ResPol,Prelude, Sub10 = { unit,hundred: Case * Gender => Str; ounit,ohundred: AForm => Str; a:Accom; n:Number }; -- 1..9 - Sub100, Sub1000, Sub1000000 = + Sub100, Sub1000, Sub1000000, Sub1000000000, Sub1000000000000 = { s:Case * Gender => Str; o:AForm => Str; a:Accom; n:Number }; @@ -513,7 +513,10 @@ n9 = { unit = table { a = case s2.n of { Sg => TysiacA; _=> s2.a } ; n = Pl }; - + + pot3as4 n = n ; + pot4as5 n = n ; + oper tysiac = table { <(Nom|Acc), Sg> => "tysiąc"; => "tysiąca"; diff --git a/src/portuguese/NumeralPor.gf b/src/portuguese/NumeralPor.gf index 5146a9f24..5006a5ec8 100644 --- a/src/portuguese/NumeralPor.gf +++ b/src/portuguese/NumeralPor.gf @@ -14,6 +14,8 @@ concrete NumeralPor of Numeral = CatPor [Numeral,Digits] ** Sub100 = {s : CardOrd => Str ; n : Number} ; Sub1000 = {s : CardOrd => Str ; n : Number} ; Sub1000000 = {s : CardOrd => Str ; n : Number} ; + Sub1000000000 = {s : CardOrd => Str ; n : Number} ; + Sub1000000000000 = {s : CardOrd => Str ; n : Number} ; lin num x = x ; @@ -111,6 +113,33 @@ concrete NumeralPor of Numeral = CatPor [Numeral,Digits] ** ++ m.s ! co ; n = Pl} ; + + pot3as4 n = n ; + + pot4 n = {s = table CardOrd {co => n.s ! NCard Masc ++ milhao ! co } ; n = Pl} ; + + pot4plus n m = {s = \\co => n.s ! NCard Masc + ++ milhao ! co + ++ e_CardOrd co ++ m.s ! co ; + n = Pl + } ; + + pot21 = mkNum "cem" "centésimo" ; + + pot31 = mkNum "mil" "milésimo" ; + + -- cem, mil, but um milhão, um bilhão + pot41 = mkNum "um milhão" "milhonésimo" ; + + pot4as5 n = n ; + + oper + milhao : CardOrd => Str ; + milhao = mkNumStr "milhão" "milhonésimo" ; + + mkNum : Str -> Str -> {s : CardOrd => Str ; n : Number} ; + mkNum cem centesimo = spl (mkNumStr cem centesimo) ; + oper mkTal : (_,_,_,_,_,_,_ : Str) -> {s : DForm => CardOrd => Str} = \dois,doze,vinte,duzentos,segundo,vigesimo,duocentesimo -> diff --git a/src/romanian/NumeralRon.gf b/src/romanian/NumeralRon.gf index b0feae9cb..2370af48d 100644 --- a/src/romanian/NumeralRon.gf +++ b/src/romanian/NumeralRon.gf @@ -11,6 +11,8 @@ lincat Sub10 = {s : CardOrd => DForm => Placement => Str ; size : Size} ; lincat Sub100 = {s : CardOrd => NumF => Placement => Str ; size : Size} ; lincat Sub1000 = {s : CardOrd => NumF => Placement => Str ; size : Size } ; lincat Sub1000000 = { s : CardOrd => NumF => Placement => Str; size : Size } ; +lincat Sub1000000000 = { s : CardOrd => NumF => Placement => Str; size : Size } ; +lincat Sub1000000000000 = { s : CardOrd => NumF => Placement => Str; size : Size } ; @@ -196,6 +198,9 @@ lin pot3plus n m = size = m.size }; +lin pot3as4 n = n ; +lin pot4as5 n = n ; + oper mksute : Size -> Str = \sz -> table {sg => "sută" ; _ => "sute" } ! sz ; oper mkSute : Size -> Gender -> Str = \sz, g -> table {sg => mkOrdinalForm "sută" g ; diff --git a/src/slovak/NumeralSlo.gf b/src/slovak/NumeralSlo.gf index f96f8adc0..ece83a787 100644 --- a/src/slovak/NumeralSlo.gf +++ b/src/slovak/NumeralSlo.gf @@ -21,6 +21,8 @@ lincat Sub10 = LinDigit ; lincat Sub100 = LinNumeral ; lincat Sub1000 = LinNumeral ; lincat Sub1000000 = LinNumeral ; +lincat Sub1000000000 = LinNumeral ; +lincat Sub1000000000000 = LinNumeral ; oper mkNum : Determiner -> Str -> Str -> Str -> LinDigit = \dva, dvanast, dvadsat, dveste -> { @@ -85,6 +87,9 @@ lin pot3plus n m = { size = tfSize m.size } ; +lin pot3as4 n = n ; +lin pot4as5 n = n ; + oper tfSize : NumSize -> NumSize = \sz -> table {Num1 => Num5 ; other => other} ! sz ; diff --git a/src/slovenian/NumeralSlv.gf b/src/slovenian/NumeralSlv.gf index b1d1794c5..6dc79d5f9 100644 --- a/src/slovenian/NumeralSlv.gf +++ b/src/slovenian/NumeralSlv.gf @@ -1,11 +1,13 @@ concrete NumeralSlv of Numeral = CatSlv [Numeral,Digits] ** open Prelude, ResSlv in { lincat - Digit = {s : DForm => Case => Str; n : NumAgr} ; - Sub10 = {s : Gender => Case => Str; h : Case => Str; e : Str; n : NumAgr} ; - Sub100 = {s : Gender => Case => Str; e : Str; n : NumAgr} ; - Sub1000 = {s : Gender => Case => Str; e : Str; n : NumAgr} ; - Sub1000000 = {s : Gender => Case => Str; n : NumAgr} ; + Digit = {s : DForm => Case => Str; n : NumAgr} ; + Sub10 = {s : Gender => Case => Str; h : Case => Str; e : Str; n : NumAgr} ; + Sub100 = {s : Gender => Case => Str; e : Str; n : NumAgr} ; + Sub1000 = {s : Gender => Case => Str; e : Str; n : NumAgr} ; + Sub1000000 = {s : Gender => Case => Str; n : NumAgr} ; + Sub1000000000 = {s : Gender => Case => Str; n : NumAgr} ; + Sub1000000000000 = {s : Gender => Case => Str; n : NumAgr} ; lin num x = x ; @@ -143,6 +145,9 @@ lin pot110 = {s=\\g => table { n = UseGen } ; + pot3as4 x = x ; + pot4as5 x = x ; + oper mkDigit : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> Gender => Case => Str; mkDigit nomMasc nomFem nomNeut accMasc accFem accNeut genMasc genFem genNeut datMasc datFem datNeut diff --git a/src/somali/NumeralSom.gf b/src/somali/NumeralSom.gf index 0ace5e5d6..51660deeb 100644 --- a/src/somali/NumeralSom.gf +++ b/src/somali/NumeralSom.gf @@ -37,7 +37,7 @@ lincat where laba 'two' is a feminine noun in absolutive case and boqol 'hundred' is a masculine noun in genitive case. Since laba is head, the whole nominal is feminine." -} - Sub10, Sub100, Sub1000, Sub1000000 = { + Sub10, Sub100, Sub1000, Sub1000000, Sub1000000000, Sub1000000000000 = { s : DForm => Str ; thousand : Str ; -- TODO figure out if this really works so hasThousand : Bool ; @@ -128,6 +128,9 @@ lin pot3plus n m = n ** { ord = n.ord ++ "kun iyo" ++ m.ord ; n = Pl} ; +lin pot3as4 n = n ; +lin pot4as5 n = n ; + ---------------------------------------------------------------------------- diff --git a/src/spanish/NumeralSpa.gf b/src/spanish/NumeralSpa.gf index 84cd34d88..7cf6ecf64 100644 --- a/src/spanish/NumeralSpa.gf +++ b/src/spanish/NumeralSpa.gf @@ -8,6 +8,8 @@ lincat Sub100 = {s : CardOrd => Str ; n : Number} ; Sub1000 = {s : CardOrd => Str ; n : Number} ; Sub1000000 = {s : CardOrd => Str ; n : Number} ; + Sub1000000000 = {s : CardOrd => Str ; n : Number} ; + Sub1000000000000 = {s : CardOrd => Str ; n : Number} ; lin num x = x ; @@ -66,6 +68,9 @@ lin pot2as3 n = n ; lin pot3 n = spl (\\g => n.s ! NCard Masc ++ mil g) ; lin pot3plus n m = {s = \\g => n.s ! NCard Masc ++ mil g ++ m.s ! g ; n = Pl} ; +lin pot3as4 n = n ; +lin pot4as5 n = n ; + oper mkTal : (x1,_,_,_,_,_,_,x8 : Str) -> {s : DForm => CardOrd => Str} = \due,dodici,venti,ducento,secondo,dodicesimo,ventesimo,ducentesimo -> diff --git a/src/swahili/NumeralSwa.gf b/src/swahili/NumeralSwa.gf index 8e097ba00..7b6451149 100644 --- a/src/swahili/NumeralSwa.gf +++ b/src/swahili/NumeralSwa.gf @@ -4,9 +4,11 @@ open Prelude,DiffSwa,MorphoSwa in { lincat Digit = {s : DForm => CardOrd => Gender => Str} ; Sub10 = {s : DForm => CardOrd => Gender => Str ; n : Number} ; - Sub100 = {s : CardOrd => Gender => Str ; n : Number} ; - Sub1000 = {s : CardOrd => Gender => Str ; n : Number} ; - Sub1000000 = {s : CardOrd => Gender => Str ; n : Number} ; + Sub100 = {s : CardOrd => Gender => Str ; n : Number} ; + Sub1000 = {s : CardOrd => Gender => Str ; n : Number} ; + Sub1000000 = {s : CardOrd => Gender => Str ; n : Number} ; + Sub1000000000 = {s : CardOrd => Gender => Str ; n : Number} ; + Sub1000000000000 = {s : CardOrd => Gender => Str ; n : Number} ; lin num x = x ; lin n2 = mkNumn "ili" "ishirini" "pili" ; @@ -35,7 +37,7 @@ lin pot2plus d e = {s = table { NCard => \\g => d.s ! hund ! NCard ! g ++ "na" ++ e.s !NCard ! g ; NOrd => \\g =>Ordprefix g++ d.s ! hund ! NCard ! g ++ "na" ++ e.s ! NCard ! g } ; n = Pl} ; - lin pot2as3 n = n ; +lin pot2as3 n = n ; lin pot3 n = { s = table { NCard => \\g => mkCard NCard "elfu" ! g ++ n.s ! NCard ! g ; NOrd => \\g =>Ordprefix g++ mkCard NCard "elfu" ! g ++ n.s ! NCard ! g } ; @@ -45,6 +47,9 @@ lin pot3plus n m = { s = table { NOrd => \\g =>Ordprefix g++ "elfu" ++ n.s ! NCard !g ++ m.s ! NCard ! g} ; n = Pl} ; +lin pot3as4 n = n ; +lin pot4as5 n = n ; + -- numerals as sequences of digits0' lincat diff --git a/src/swedish/NumeralSwe.gf b/src/swedish/NumeralSwe.gf index fc901d808..6e4c60ef8 100644 --- a/src/swedish/NumeralSwe.gf +++ b/src/swedish/NumeralSwe.gf @@ -4,7 +4,7 @@ concrete NumeralSwe of Numeral = CatSwe [Numeral,Digits] ** open ResSwe, MorphoS lincat Digit = {s : DForm => CardOrd => Str} ; Sub10 = {s : DForm => CardOrd => Str ; n : Number} ; - Sub100, Sub1000, Sub1000000 = + Sub100, Sub1000, Sub1000000, Sub1000000000, Sub1000000000000 = {s : CardOrd => Str ; n : Number} ; lin @@ -27,24 +27,47 @@ lin n = Sg } ; pot0 d = {s = \\f,g => d.s ! f ! g ; n = Pl} ; + pot0as1 n = {s = n.s ! ental ; n = n.n} ; + pot110 = numPl (cardReg "tio") ; pot111 = numPl (cardOrd "elva" "elfte") ; pot1to19 d = numPl (d.s ! ton) ; - pot0as1 n = {s = n.s ! ental ; n = n.n} ; pot1 d = numPl (d.s ! tiotal) ; pot1plus d e = {s = \\g => d.s ! tiotal ! invNum ++ BIND ++ e.s ! ental ! g ; n = Pl} ; pot1as2 n = n ; + + pot21 = numPl (cardOrd "hundra" "hundrade") ; pot2 d = numPl (\\g => d.s ! ental ! invNum ++ BIND ++ cardOrd "hundra" "hundrade" ! g) ; pot2plus d e = {s = \\g => d.s ! ental ! invNum ++ BIND ++ "hundra" ++ e.s ! g ; n = Pl} ; pot2as3 n = n ; + + pot31 = numPl (cardOrd "tusen" "tusende") ; pot3 n = numPl (\\g => n.s ! invNum ++ cardOrd "tusen" "tusende" ! g) ; pot3plus n m = {s = \\g => n.s ! invNum ++ BIND ++ "tusen" ++ m.s ! g ; n = Pl} ; + pot3as4 n = n ; - lincat + pot41 = numPl (cardOrd "miljon" "miljonde") ; + pot4 n = + numPl (\\g => n.s ! NCard Utr ++ cardOrd "miljon" "miljonde" ! g) ; + pot4plus n m = + {s = \\g => n.s ! NCard Utr ++ BIND ++ "miljon" ++ m.s ! g ; n = Pl} ; + pot4as5 n = n ; + pot4float f = + numPl (\\g => f.s ++ cardOrd "miljoner" "miljonde" ! g) ; + + pot51 = numPl (cardOrd "miljard" "miljarde") ; + pot5 n = + numPl (\\g => n.s ! NCard Utr ++ cardOrd "miljard" "miljarde" ! g) ; + pot5plus n m = + {s = \\g => n.s ! NCard Utr ++ BIND ++ "miljard" ++ m.s ! g ; n = Pl} ; + pot5float f = + numPl (\\g => f.s ++ cardOrd "miljarder" "miljarde" ! g) ; + + lincat Dig = TDigit ; lin diff --git a/src/turkish/NumeralTur.gf b/src/turkish/NumeralTur.gf index 3f10e5eda..710ea0c55 100644 --- a/src/turkish/NumeralTur.gf +++ b/src/turkish/NumeralTur.gf @@ -8,9 +8,11 @@ flags lincat Digit = {s : DForm => CardOrd => Number => Case => Str} ; Sub10 = {s : DForm => CardOrd => Number => Case => Str ; n : Number ; blank : Str} ; -- the field blank is used to get rid of metavariables at parsing - Sub100 = {s : CardOrd => Number => Case => Str ; n : Number ; blank : Str} ; - Sub1000 = {s : CardOrd => Number => Case => Str ; n : Number ; blank : Str} ; - Sub1000000 = {s : CardOrd => Number => Case => Str ; n : Number} ; + Sub100 = {s : CardOrd => Number => Case => Str ; n : Number ; blank : Str} ; + Sub1000 = {s : CardOrd => Number => Case => Str ; n : Number ; blank : Str} ; + Sub1000000 = {s : CardOrd => Number => Case => Str ; n : Number} ; + Sub1000000000 = {s : CardOrd => Number => Case => Str ; n : Number} ; + Sub1000000000000 = {s : CardOrd => Number => Case => Str ; n : Number} ; lin num x = x ; @@ -48,6 +50,11 @@ lin pot3plus n m = {s = \\t,num,c => case n.n of { Sg => n.blank ; Pl => n.s ! NCard ! Sg !Nom } ++ "bin" ++ m.s ! t ! num ! c; n = Pl} ; + +lin pot3as4 n = n ; +lin pot4as5 n = n ; + + lincat Dig = {s : CardOrd => Number => Case => Str ; n : Number} ; lin