diff --git a/src/bulgarian/NumeralBul.gf b/src/bulgarian/NumeralBul.gf index 0091426af..a111935a4 100644 --- a/src/bulgarian/NumeralBul.gf +++ b/src/bulgarian/NumeralBul.gf @@ -11,14 +11,14 @@ lincat Sub1000000 = {s : CardOrd => NumF => Str; n : Number} ; lin num x = {s = \\c => x.s ! c ! Formal; n=x.n} ; -lin n2 = mkDigit "два" "двама" "две" "втори" "двайсет" "двеста" ; -lin n3 = mkDigit "три" "трима" "три" "трети" "трийсет" "триста" ; -lin n4 = mkDigit "четири" "четирима" "четири" "четвърти" "четирийсет" "четиристотин" ; -lin n5 = mkDigit "пет" "петима" "пет" "пети" "петдесет" "петстотин" ; -lin n6 = mkDigit "шест" "шестима" "шест" "шести" "шейсет" "шестстотин" ; -lin n7 = mkDigit "седем" "седмина" "седем" "седми" "седемдесет" "седемстотин" ; -lin n8 = mkDigit "осем" "осмина" "осем" "осми" "осемдесет" "осемстотин" ; -lin n9 = mkDigit "девет" "деветима" "девет" "девети" "деветдесет" "деветстотин" ; +lin n2 = mkDigit "два" "двама" "две" "втори" "двайсет" "двеста" "двестата" ; +lin n3 = mkDigit "три" "трима" "три" "трети" "трийсет" "триста" "тристата" ; +lin n4 = mkDigit "четири" "четирима" "четири" "четвърти" "четирийсет" "четиристотин" "четиристотинте" ; +lin n5 = mkDigit "пет" "петима" "пет" "пети" "петдесет" "петстотин" "петстотинте" ; +lin n6 = mkDigit "шест" "шестима" "шест" "шести" "шейсет" "шестстотин" "шестстотинте" ; +lin n7 = mkDigit "седем" "седмина" "седем" "седми" "седемдесет" "седемстотин" "седемстотинте" ; +lin n8 = mkDigit "осем" "осмина" "осем" "осми" "осемдесет" "осемстотин" "осемстотинте" ; +lin n9 = mkDigit "девет" "деветима" "девет" "девети" "деветдесет" "деветстотин" "деветстотинте" ; lin pot01 = {s = table { @@ -47,7 +47,7 @@ lin pot01 = Informal => mkCardOrd "единайсет" "единайсет" "единайсет" "единайсти" } ; ten nf => mkCardOrd "десет" "десетима" "десет" "десети" ; - hundred => mkCardOrd100 "сто" "стотен" + hundred => mkCardOrd100 "сто" "стоте" "стотен" } ;n = Sg } ; @@ -72,15 +72,15 @@ lin pot2plus d e = { lin pot2as3 n = n ; lin pot3 n = { s = \\c,nf => case n.n of { - Sg => mkCardOrd100 "хиляда" "хиляден" ! c ; - Pl => n.s ! NCard (CFFem Indef) ! nf ++ mkCardOrd100 "хиляди" "хиляден" ! c + Sg => mkCardOrd100 "хиляда" "хилядата" "хиляден" ! c ; + Pl => n.s ! NCard (CFFem Indef) ! nf ++ mkCardOrd100 "хиляди" "хилядите" "хиляден" ! c } ; n = Pl } ; lin pot3plus n m = { s = \\c,nf => case n.n of { - Sg => mkCardOrd100 "хиляда" "хиляден" ! NCard (CFMasc Indef NonHuman) ; - Pl => n.s ! NCard (CFFem Indef) ! nf ++ mkCardOrd100 "хиляди" "хиляден" ! NCard (CFMasc Indef NonHuman) + Sg => mkCardOrd100 "хиляда" "хилядата" "хиляден" ! NCard (CFMasc Indef NonHuman) ; + Pl => n.s ! NCard (CFFem Indef) ! nf ++ mkCardOrd100 "хиляди" "хилядите" "хиляден" ! NCard (CFMasc Indef NonHuman) } ++ case m.i of {False => []; True => "и"} ++ m.s ! c ! nf ; n = Pl diff --git a/src/bulgarian/ResBul.gf b/src/bulgarian/ResBul.gf index e1e8030b9..cfe5416b9 100644 --- a/src/bulgarian/ResBul.gf +++ b/src/bulgarian/ResBul.gf @@ -644,8 +644,8 @@ resource ResBul = ParamX ** open Prelude, Predef in { -- For $Numeral$. - mkDigit : Str -> Str -> Str -> Str -> Str -> Str -> {s : DForm => CardOrd => Str} = - \dva, dvama, dve, vtori, dvaiset, dvesta -> + mkDigit : Str -> Str -> Str -> Str -> Str -> Str -> Str -> {s : DForm => CardOrd => Str} = + \dva, dvama, dve, vtori, dvaiset, dvesta, dvestata -> {s = table { unit => mkCardOrd dva dvama dve vtori ; teen nf => case nf of { @@ -661,7 +661,7 @@ resource ResBul = ParamX ** open Prelude, Predef in { dvest+"а" => dvest+"ен" ; chetiristot+"ин" => chetiristot+"ен" } - in mkCardOrd100 dvesta dvesten + in mkCardOrd100 dvesta dvestata dvesten } } ; @@ -685,10 +685,16 @@ resource ResBul = ParamX ** open Prelude, Predef in { } } ; - mkCardOrd100 : Str -> Str -> CardOrd => Str = - \sto, stoten -> + mkCardOrd100 : Str -> Str -> Str -> CardOrd => Str = + \sto, stote, stoten -> table { - NCard dg => sto ; + NCard (CFMasc Indef _) => sto ; + NCard (CFMasc Def _) => stote ; + NCard (CFMascDefNom _) => stote ; + NCard (CFFem Indef) => sto ; + NCard (CFFem Def) => stote ; + NCard (CFNeut Indef) => sto ; + NCard (CFNeut Def) => stote ; NOrd aform => let stotn = init (init stoten) + last stoten ; in case aform of { ASg Masc Indef => stoten ; diff --git a/src/english/CatEng.gf b/src/english/CatEng.gf index b404628e1..d57f7d8f5 100644 --- a/src/english/CatEng.gf +++ b/src/english/CatEng.gf @@ -80,7 +80,7 @@ concrete CatEng of Cat = CommonX - [Pol,SC,CAdv] ** open ResEng, Prelude in { -- Numeral - Numeral = {s : CardOrd => Case => Str ; n : Number} ; + Numeral = {s : Bool => CardOrd => Case => Str ; n : Number} ; Digits = {s : CardOrd => Case => Str ; n : Number ; tail : DTail} ; -- Structural diff --git a/src/english/NounEng.gf b/src/english/NounEng.gf index 22b748c41..cedb12cd4 100644 --- a/src/english/NounEng.gf +++ b/src/english/NounEng.gf @@ -77,8 +77,8 @@ concrete NounEng of Noun = CatEng ** open MorphoEng, ResEng, Prelude in { NumDigits n = {s,sp = \\_ => n.s ! NCard ; n = n.n} ; OrdDigits n = {s = n.s ! NOrd} ; - NumNumeral numeral = {s,sp = \\_ => numeral.s ! NCard; n = numeral.n} ; - OrdNumeral numeral = {s = numeral.s ! NOrd} ; + NumNumeral numeral = {s,sp = \\d => numeral.s ! d ! NCard; n = numeral.n} ; + OrdNumeral numeral = {s = numeral.s ! True ! NOrd} ; AdNum adn num = {s = \\_,c => adn.s ++ num.s !False!c ; sp = \\_,c => adn.s ++ num.sp!False!c ; @@ -86,7 +86,7 @@ concrete NounEng of Noun = CatEng ** open MorphoEng, ResEng, Prelude in { OrdSuperl a = {s = \\c => a.s ! AAdj Superl c } ; - OrdNumeralSuperl n a = {s = \\c => n.s ! NOrd ! Nom ++ a.s ! AAdj Superl c } ; + OrdNumeralSuperl n a = {s = \\c => n.s ! True ! NOrd ! Nom ++ a.s ! AAdj Superl c } ; DefArt = { s = \\hasCard,n => artDef ; diff --git a/src/english/NumeralEng.gf b/src/english/NumeralEng.gf index c612cc365..ce8019089 100644 --- a/src/english/NumeralEng.gf +++ b/src/english/NumeralEng.gf @@ -4,8 +4,8 @@ lincat Digit = {s : DForm => CardOrd => Case => Str} ; Sub10 = {s : DForm => CardOrd => Case => Str ; n : Number} ; Sub100 = {s : CardOrd => Case => Str ; n : Number} ; - Sub1000 = {s : CardOrd => Case => Str ; n : Number} ; - Sub1000000 = {s : CardOrd => Case => Str ; n : Number} ; + Sub1000 = {s : Bool => CardOrd => Case => Str ; n : Number} ; + Sub1000000 = {s : Bool => CardOrd => Case => Str ; n : Number} ; lin num x = x ; lin n2 = let two = mkNum "two" "twelve" "twenty" "second" in @@ -32,15 +32,15 @@ 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 = n ; -lin pot2 d = {s = \\o,c => d.s ! unit ! NCard ! Nom ++ mkCard o "hundred" ! c} ** {n = Pl} ; +lin pot1as2 n = {s = \\_ => n.s; n=n.n} ; +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} ; + s = \\_,o,c => d.s ! unit ! NCard ! Nom ++ "hundred" ++ "and" ++ e.s ! o ! c ; n = Pl} ; lin pot2as3 n = n ; lin pot3 n = { - s = \\o,c => n.s ! NCard ! Nom ++ mkCard o "thousand" ! c ; n = Pl} ; + s = \\d,o,c => n.s ! d ! NCard ! Nom ++ mkCard o "thousand" ! c ; n = Pl} ; lin pot3plus n m = { - s = \\o,c => n.s ! NCard ! Nom ++ "thousand" ++ m.s ! o ! c; n = Pl} ; + s = \\d,o,c => n.s ! d ! NCard ! Nom ++ "thousand" ++ m.s ! False ! o ! c; n = Pl} ; -- numerals as sequences of digits