summaryrefslogtreecommitdiff
path: root/next-lib/src
diff options
context:
space:
mode:
Diffstat (limited to 'next-lib/src')
-rw-r--r--next-lib/src/bulgarian/NumeralBul.gf61
-rw-r--r--next-lib/src/bulgarian/ResBul.gf37
2 files changed, 63 insertions, 35 deletions
diff --git a/next-lib/src/bulgarian/NumeralBul.gf b/next-lib/src/bulgarian/NumeralBul.gf
index bf89fbe21..021c8566a 100644
--- a/next-lib/src/bulgarian/NumeralBul.gf
+++ b/next-lib/src/bulgarian/NumeralBul.gf
@@ -5,19 +5,19 @@ concrete NumeralBul of Numeral = CatBul ** open Prelude, ResBul in {
lincat
Digit = {s : DForm => CardOrd => Str} ;
Sub10 = {s : DForm => CardOrd => Str; n : Number} ;
- Sub100 = {s : CardOrd => Str; n : Number; i : Bool} ;
- Sub1000 = {s : CardOrd => Str; n : Number; i : Bool} ;
- Sub1000000 = {s : CardOrd => Str; n : Number} ;
-
-lin num x = x ;
-lin n2 = mkDigit "два" "двама" "две" "втори" "двеста" ;
-lin n3 = mkDigit "три" "трима" "три" "трети" "триста" ;
-lin n4 = mkDigit "четири" "четирима" "четири" "четвърти" "четиристотин" ;
-lin n5 = mkDigit "пет" "петима" "пет" "пети" "петстотин" ;
-lin n6 = mkDigit "шест" "шестима" "шест" "шести" "шестстотин" ;
-lin n7 = mkDigit "седем" "седмина" "седем" "седми" "седемстотин" ;
-lin n8 = mkDigit "осем" "осмина" "осем" "осми" "осемстотин" ;
-lin n9 = mkDigit "девет" "деветима" "девет" "девети" "деветстотин" ;
+ 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} ;
+
+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 pot01 =
{s = table {
@@ -44,40 +44,43 @@ lin pot01 =
APl Def => "първите"
}
} ;
- teen => mkCardOrd "единадесет" "единадесетима" "единадесет" "единадесети" ;
- ten => mkCardOrd "десет" "десетима" "десет" "десети" ;
- hundred => mkCardOrd "сто" "стотина" "сто" "стотен"
+ teen nf => case nf of {
+ Formal => mkCardOrd "единадесет" "единадесетима" "единадесет" "единадесети" ;
+ Informal => mkCardOrd "единайсет" "единайсет" "единайсет" "единайсти"
+ } ;
+ ten nf => mkCardOrd "десет" "десетима" "десет" "десети" ;
+ hundred => mkCardOrd100 "сто" "стотен"
}
;n = Sg
} ;
lin pot0 d = d ** {n = Pl} ;
-lin pot110 = {s=pot01.s ! ten; n = Pl; i = True} ;
-lin pot111 = {s=pot01.s ! teen; n = Pl; i = True} ;
-lin pot1to19 d = {s = d.s ! teen; n = Pl; i = True} ;
-lin pot0as1 n = {s = n.s ! unit; n = n.n; i = True} ;
-lin pot1 d = {s = d.s ! ten; n = Pl; 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 => d.s ! ten ! NCard DMascIndef ++ "и" ++ e.s ! unit ! c ; n = Pl; i = False} ;
+ s = \\c,nf => d.s ! ten nf ! NCard DMascIndef ++ "и" ++ e.s ! unit ! c ; n = Pl; i = False} ;
lin pot1as2 n = n ;
-lin pot2 n = {s = \\c => n.s ! hundred ! c; n = Pl; i = True} ;
+lin pot2 n = {s = \\c,nf => n.s ! hundred ! c; n = Pl; i = True} ;
lin pot2plus d e = {
- s = \\c => d.s ! hundred ! NCard DMascIndef ++ case e.i of {False => []; True => "и"} ++ e.s ! c ;
+ s = \\c,nf => d.s ! hundred ! NCard DMascIndef ++ case e.i of {False => []; True => "и"} ++ e.s ! c ! nf ;
n = Pl ;
i = False
} ;
lin pot2as3 n = n ;
lin pot3 n = {
- s = \\c => case n.n of {
- Sg => mkCardOrd "хиляда" "хиляда" "хиляда" "хиляден" ! c ;
- Pl => n.s ! NCard DFemIndef ++ mkCardOrd "хиляди" "хиляди" "хиляди" "хиляден" ! c
- } ;
+ s = \\c,nf => case n.n of {
+ Sg => mkCardOrd100 "хиляда" "хиляден" ! c ;
+ Pl => n.s ! NCard DFemIndef ! nf ++ mkCardOrd100 "хиляди" "хиляден" ! c
+ } ;
n = Pl
} ;
lin pot3plus n m = {
- s = \\c => (pot3 (n ** {lock_Sub1000=<>})).s ! NCard DMascIndef ++ case m.i of {False => []; True => "и"} ++ m.s ! c ;
+ s = \\c,nf => (pot3 (n ** {lock_Sub1000=<>})).s ! NCard DMascIndef ! nf ++ case m.i of {False => []; True => "и"} ++ m.s ! c ! nf ;
n = Pl
} ;
diff --git a/next-lib/src/bulgarian/ResBul.gf b/next-lib/src/bulgarian/ResBul.gf
index 09072eda0..c26a92824 100644
--- a/next-lib/src/bulgarian/ResBul.gf
+++ b/next-lib/src/bulgarian/ResBul.gf
@@ -101,7 +101,8 @@ resource ResBul = ParamX ** open Prelude in {
;
CardOrd = NCard DGenderSpecies | NOrd AForm ;
- DForm = unit | teen | ten | hundred ;
+ NumF = Formal | Informal ;
+ DForm = unit | teen NumF | ten NumF | hundred ;
--2 Transformations between parameter types
@@ -475,18 +476,24 @@ resource ResBul = ParamX ** open Prelude in {
-- For $Numeral$.
- mkDigit : Str -> Str -> Str -> Str -> Str -> {s : DForm => CardOrd => Str} =
- \dva, dvama, dve, vtori, dvesta ->
+ mkDigit : Str -> Str -> Str -> Str -> Str -> Str -> {s : DForm => CardOrd => Str} =
+ \dva, dvama, dve, vtori, dvaiset, dvesta ->
{s = table {
unit => mkCardOrd dva dvama dve vtori ;
- teen => mkCardOrd (dva+"надесет") (dva+"надесетима") (dva+"надесет") (dva+"надесети") ;
- ten => mkCardOrd (dva+"десет") (dva+"десетима") (dva+"десет") (dva+"десети") ;
+ teen nf => case nf of {
+ Formal => mkCardOrd (dva+"надесет") (dva+"надесетима") (dva+"надесет") (dva+"надесети") ;
+ Informal => mkCardOrd (dva+"найсет") (dva+"найсет") (dva+"найсет") (dva+"найсти")
+ } ;
+ ten nf => case nf of {
+ Formal => mkCardOrd (dva+"десет") (dva+"десетима") (dva+"десет") (dva+"десети") ;
+ Informal => mkCardOrd dvaiset dvaiset dvaiset (dvaiset+"и")
+ } ;
hundred => let dvesten : Str
= case dvesta of {
dvest+"а" => dvest+"ен" ;
chetiristot+"ин" => chetiristot+"ен"
}
- in mkCardOrd dvesta dvesta dvesta dvesten
+ in mkCardOrd100 dvesta dvesten
}
} ;
@@ -509,6 +516,24 @@ resource ResBul = ParamX ** open Prelude in {
}
} ;
+ mkCardOrd100 : Str -> Str -> CardOrd => Str =
+ \sto, stoten ->
+ table {
+ NCard dg => sto ;
+ NOrd aform => let stotn = init (init stoten) + last stoten ;
+ in case aform of {
+ ASg Masc Indef => stoten ;
+ ASg Masc Def => stotn+"ия" ;
+ ASgMascDefNom => stotn+"ият" ;
+ ASg Fem Indef => stotn+"а" ;
+ ASg Fem Def => stotn+"ата" ;
+ ASg Neut Indef => stotn+"о" ;
+ ASg Neut Def => stotn+"ото" ;
+ APl Indef => stotn+"и" ;
+ APl Def => stotn+"ите"
+ }
+ } ;
+
digitGenderSpecies : Str -> Str -> Str -> DGenderSpecies => Str =
\dva, dvama, dve
-> let addDef : Str -> Str =