forked from GitHub/gf-rgl
make it possible to extend numberals beyound 1000000
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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 ;
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 ;
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user