1
0
forked from GitHub/gf-core

Harald's new grammars.

This commit is contained in:
aarne
2003-12-09 16:07:42 +00:00
parent 15f94710f0
commit 8e637feb79
13 changed files with 579 additions and 39 deletions

View File

@@ -0,0 +1,51 @@
-- ä is ya
-- q is [ch]
-- w for [sh]
-- j for i kratkoe i.e i with a thing
include numerals.Abs.gf ;
param Size = sg | below10 | tenover ;
param DForm = unit | teen | ten | hundred ;
oper LinDigit = {s : DForm => Str ; size : Size } ;
lincat Digit = LinDigit ;
lincat Sub10 = LinDigit ;
lincat Sub100 = {s : Str ; size : Size } ;
lincat Sub1000 = {s : Str ; size : Size } ;
oper mkNum : Str -> Str -> Str -> LinDigit = \tri -> \trijset -> \trista ->
{ s = table {unit => tri ; teen => variants {tri + "nadeset" ; tri + "najset" }; ten => trijset ; hund => trista} ; size = below10};
lin num x = {s = "/_" ++ x.s ++ "_/"} ; -- the (Russian) Cyrillic ad-hoc translation
lin n2 = {s = table {unit => "dve" ; teen => variants {"dvanadeset" ; "dvanajset"}; ten => "dvajset" ; hund => "dvesta" } ; size = below10 } ;
lin n3 = mkNum "tri" (variants {"trijset"; "trideset"}) "trista" ;
lin n4 = mkNum "qetiri" (variants {"qetiriset" ; "qetirijset" ; "qetirideset"}) "qetiristotin" ;
lin n5 = mkNum "pet" "petdeset" "petstotin" ;
lin n6 = mkNum "west" (variants {"westdeset" ; "wejset"}) "weststotin" ;
lin n7 = mkNum "sedem" "sedemdeset" "sedemstotin" ;
lin n8 = mkNum "osem" "osemdeset" "osemstotin" ;
lin n9 = mkNum "devet" "devetdeset" "devetstotin" ;
lin pot01 = { s = table {unit => "edno" ; hundred => "sot" ; _ => "dummy" } ; size = sg };
lin pot0 d = d ;
lin pot110 = {s = "deset" ; size = below10};
lin pot111 = {s = variants {"edinadeset" ; "edinajset" }; size = tenover};
lin pot1to19 d = {s = d.s ! teen ; size = tenover};
lin pot0as1 n = {s = n.s ! unit ; size = n.size } ;
lin pot1 d = {s = d.s ! ten ; size = tenover} ;
lin pot1plus d e = {s = d.s ! ten ++ "i" ++ e.s ! unit ; size = tenover} ;
lin pot1as2 n = n ;
lin pot2 d = {s = d.s ! hundred ; size = tenover} ;
lin pot2plus d e = { s = d.s ! hundred ++ maybei e.size ++ e.s ; size = tenover } ;
lin pot2as3 n = {s = n.s };
lin pot3 n = {s = mkThou n.size n.s} ;
lin pot3plus n m = {s = mkThou n.size n.s ++ m.s} ;
oper mkThou : Size -> Str -> Str = \sz -> \attr ->
table {sg => "xiläda" ; _ => attr ++ "xilädi" } ! sz ;
oper maybei : Size -> Str = \sz -> table {tenover => [] ; _ => "i"} ! sz ;

View File

@@ -0,0 +1,56 @@
include numerals.Abs.gf ;
oper bind : Str -> Str -> Str = \s1 -> \s2 -> s1 ++ s2 ;
param DForm = unit | teen | ten | hundred | vint ;
param Size = sg | two | pl ;
lincat Numeral = {s : Str} ;
lincat Digit = {s : DForm => Str ; size : Size } ;
lincat Sub10 = {s : DForm => Str ; size : Size } ;
lincat Sub100 = {s : Str ; size : Size} ;
lincat Sub1000 = {s : Str ; size : Size} ;
lincat Sub1000000 = {s : Str} ;
oper mkNum : Str -> Str -> Str -> Lin Digit =
\dois -> \doze -> \vinte ->
{s = table {unit => dois ; teen => doze ; ten => vinte ; hundred => dois + "-" + "cents" ; vint => "vint-i-" + dois } ; size = pl} ;
lin num x0 =
{s = x0.s} ;
lin n2 = {s = table {unit => "dos" ; teen => "dotze" ; ten => "vint" ; hundred => "dos-cents" ; vint => "vint-i-" + "dos" } ; size = two } ;
lin n3 = mkNum "tres" "tretze" "trenta" ;
lin n4 = mkNum "quatre" "catorze" "quaranta" ;
lin n5 = mkNum "cinc" "quinze" "cinqanta" ;
lin n6 = mkNum "sis" "setze" "seixanta" ;
lin n7 = mkNum "set" "disset" "setanta" ;
lin n8 = mkNum "vuit" "divuit" "vuitanta" ;
lin n9 = mkNum "nou" "dinou" "noranta" ;
lin pot01 = {s = table {unit => "u" ; hundred => "cent" ; vint => "vint-i-" + "u" ; _ => "dummy"} ; size = sg} ;
lin pot0 d = d ;
lin pot110 =
{s = "deu" ; size = pl} ;
lin pot111 =
{s = "onze" ; size = pl} ;
lin pot1to19 d =
{s = d.s ! teen ; size = pl} ;
lin pot0as1 n =
{s = n.s ! unit ; size = n.size } ;
lin pot1 d =
{s = d.s ! ten ; size = pl} ;
lin pot1plus d e =
{s = table {two => e.s ! vint ; _ => bind (bind (d.s ! ten) "-") (e.s ! unit) } ! d.size ; size = pl} ;
lin pot1as2 n = n ;
lin pot2 d =
{s = d.s ! hundred ; size = pl} ;
lin pot2plus d e =
{s = d.s ! hundred ++ e.s ; size = pl} ;
lin pot2as3 n =
{s = n.s } ;
lin pot3 n =
{s = table {sg => "mil" ; _ => n.s ++ "mil"} ! n.size} ;
lin pot3plus n m =
{s = table {sg => "mil" ; _ => n.s ++ "mil"} ! n.size ++ m.s } ;

View File

@@ -14,7 +14,7 @@ lincat Sub100 = {s : Place => Str ; size : Size} ;
lincat Sub1000 = {s : Place => Str ; size : Size} ;
lincat Sub1000000 = {s : Str} ;
lin num x0 =
{s = "/-" ++ x0.s ++ "-/"} ; -- the Arabic environment
{s = "/6" ++ x0.s ++ "6/"} ; -- the Arabic0x0600 environment
lin n2 =
{s = table {(unit attr) => [] ;
@@ -75,7 +75,7 @@ lin pot1to19 d =
lin pot0as1 n =
{s = table {p => n.s ! unit p} ; size = n.size} ;
lin pot1 d =
{s = table {_ => d.s ! ten} ; size = pl} ;
{s = table {_ => d.s ! ten} ; size = eleventonineteen} ;
lin pot1plus d e =
{s = table {_ => e.s ! unit indep ++ "w" ++ d.s ! ten} ; size = e.size} ;
lin pot1as2 n =

View File

@@ -0,0 +1,58 @@
include numerals.Abs.gf ;
oper bind : Str -> Str -> Str = \s1 -> \s2 -> s1 ++ s2 ;
-- [c^], [s^], [r^], [e^]
param Size = sg | twothreefour | fiveup ;
param DForm = unit | teen | ten | hundred ;
lincat Digit = {s : DForm => Str ; size : Size} ;
lincat Sub10 = {s : DForm => Str ; size : Size} ;
lincat Sub100 = {s : Str; size : Size } ;
lincat Sub1000 = {s : Str; size : Size } ;
oper mkNum : Str -> Str -> Str -> Str -> Size -> Lin Digit =
\dva -> \dvanast -> \dvadsat -> \dveste -> \sz ->
{ s = table {unit => dva ; teen => dvanast + "náct" ; ten => dvadsat ; hundred => dveste } ; size = sz };
oper mk2Num : Str -> Str -> Str -> Str -> Lin Digit = \unit -> \teenbase -> \tenbase -> \hundred ->
mkNum unit teenbase (tenbase + "cet") hundred twothreefour ;
oper mk5Num : Str -> Str -> Str -> Lin Digit = \unit -> \teenbase -> \tenbase ->
mkNum unit teenbase (tenbase + "desát") (unit ++ "set") fiveup ;
lin num x = {s = "/L" ++ x.s ++ "L/" } ; -- Latin A supplement encoding
lin n2 = mk2Num "dva" "dva" "dva" ("dve^" ++ "ste^") ;
lin n3 = mk2Num "tr^i" "tr^i" "tr^i" ("tr^i" ++ "sta") ;
lin n4 = mk2Num "c^tyr^i" "c^tr" "c^tyr^i" ("c^tyr^i" ++ "sta") ;
lin n5 = mk5Num "pe^t" "pat" "pa" ;
lin n6 = mk5Num "s^est" "s^est" "s^e" ;
lin n7 = mk5Num "sedm" "sedm" "sedm";
lin n8 = mk5Num "osm" "osm" "osm";
lin n9 = mk5Num "deve^t" "devate" "deva" ;
lin pot01 = {s = table {unit => "jeden" ; hundred => "sto" ; _ => "dummy" } ;
size = sg } ;
lin pot0 d = d ;
lin pot110 = {s = "deset" ; size = fiveup } ;
lin pot111 = {s = "jedenáct" ; size = fiveup };
lin pot1to19 d = {s = d.s ! teen ; size = fiveup} ;
lin pot0as1 n = {s = n.s ! unit ; size = n.size} ;
lin pot1 d = {s = d.s ! ten ; size = fiveup} ;
lin pot1plus d e = {s = variants { d.s ! ten ++ e.s ! unit ; bind (bind (e.s ! unit) "a") (d.s ! ten)} ; size = tfSize e.size} ;
lin pot1as2 n = n ;
lin pot2 d = {s = d.s ! hundred ; size = fiveup} ;
lin pot2plus d e = {s = d.s ! hundred ++ e.s ; size = tfSize e.size} ;
lin pot2as3 n = {s = n.s } ;
lin pot3 n = {s = (mkTh n.s) ! n.size} ;
lin pot3plus n m = {s = (mkTh n.s) ! n.size ++ m.s} ;
oper tfSize : Size -> Size = \sz ->
table {sg => fiveup ; other => other} ! sz ;
oper mkTh : Str -> Size => Str = \attr ->
table {sg => "tisíc" ;
twothreefour => attr ++ "tisíce" ;
fiveup => attr ++ "tisíc" } ;

View File

@@ -0,0 +1,50 @@
include numerals.Abs.gf ;
param DForm = unit | ten ;
param Size = sg | pl ;
oper LinDigit = {s : DForm => Str ; size : Size} ;
lincat Digit = LinDigit ;
lincat Sub10 = LinDigit ;
lincat Sub100 = {s : Str ; s2 : Str ; size : Size} ;
lincat Sub1000 = {s : Str ; s2 : Str ; size : Size} ;
oper mkNum : Str -> Str -> LinDigit = \u -> \t -> {s = table {unit => u ; ten => t} ; size = pl} ;
lin n2 = mkNum "bi:ra" "mbhai" ;
lin n3 = mkNum "pi:" ("sa:ma" ++ "sipa") ;
lin n4 = mkNum "pwna" ("se:" ++ "sipa") ;
lin n5 = mkNum "pra:m." ("ha:" ++ "sipa") ;
lin n6 = mkNum ("pra:m." ++ "mwya") ("huka" ++ "sipa") ;
lin n7 = mkNum ("pra:m." ++ "bi:ra") ("cita" ++ "sipa") ;
lin n8 = mkNum ("pra:m." ++ "pi:") ("pe:ta" ++ "sipa") ;
lin n9 = mkNum ("pra:m." ++ "pwna") ("kau" ++ "sipa") ;
oper bana : Str = variants {"mwya" ++ "ba:'na" ; "mpa:'na"} ;
lin num x = {s = "/X" ++ x.s ++ "X/"} ; -- for the diacritics
lin pot01 = {s = table { _ => "mwya" } ; size = sg } ;
lin pot0 d = d ;
lin pot110 = {s = "t.a'pa" ; s2 = "hmi-na" ; size = pl} ;
lin pot111 = {s = "mwya" ++ "t.an.ta'pa" ; s2 = "hmi-na" ++ bana; size = pl} ;
lin pot1to19 d = {s = (d.s ! unit) ++ "t.an.ta'pa" ; s2 = "hmi-na" ++ (d.s ! unit) ++ "ba:'na" ; size = pl } ;
lin pot0as1 n = {s = n.s ! unit ; s2 = xsg n.size bana (n.s ! unit ++ "ba:'na") ; size = n.size} ;
lin pot1 d = {s = d.s ! ten ; s2 = d.s ! unit ++ "hmi-na" ; size = pl} ;
lin pot1plus d e = {s = d.s ! ten ++ e.s ! unit ; s2 = d.s ! unit ++ "hmi-na" ++ xsg e.size bana (e.s ! unit ++ "ba:'na") ; size = pl} ;
lin pot1as2 n = n ;
lin pot2 d = {s = xsg d.size (variants {"raya" ; "mraya"}) (d.s ! unit ++ "raya") ;
s2 = (d.s ! unit) ++ "se:na" ;
size = pl } ;
lin pot2plus d e = {s = xsg d.size (variants {"raya" ; "mraya"}) (d.s ! unit ++ "raya") ++ e.s ;
s2 = (d.s ! unit) ++ "se:na" ++ e.s2 ;
size = pl} ;
lin pot2as3 n = {s = n.s} ;
lin pot3 n = {s = n.s2 } ;
lin pot3plus n m = {s = n.s2 ++ m.s } ;
oper xsg : Size -> Str -> Str -> Str = \sz -> \s1 -> \s2 -> table {sg => s1 ; _ => s2} ! sz ;

View File

@@ -0,0 +1,48 @@
include numerals.Abs.gf ;
-- D^ is from implosive d IPA symbol
-- N Num
param Size = sg | two | three | other ;
oper LinDigit = {s : Str ; size : Size} ;
lincat Digit = LinDigit ;
lincat Sub10 = LinDigit ;
lincat Sub100 = LinDigit ;
lincat Sub1000 = LinDigit ;
lincat Sub1000000 = {s : Str} ;
oper mkNum : Str -> LinDigit = \kunun ->
{s = kunun ; size = other} ;
lin num x0 =
{s = "/L" ++ x0.s ++ "L/"} ; -- for D^
lin n2 = {s = variants {"póllów" ; "fóllów"} ; size = two };
lin n3 = {s = "kúnún" ; size = three } ;
lin n4 = mkNum (variants {"pòD^òw" ; "fòD^òw"}) ;
lin n5 = mkNum (variants {"páaD^í" ; "fáaD^í"}) ;
lin n6 = mkNum (variants {"páyíndì" ; "fáyíndì"}) ;
lin n7 = mkNum (variants {"pópíllów" ; "fópíllów"}) ;
lin n8 = mkNum (variants {"pówùrD^ów" ; "fówùrD^ów"}) ;
lin n9 = mkNum "làmbáD^à" ;
oper thirty : Str = variants {("kúu" ++ "kúnún") ; "tàlàatín"} ;
oper two100 : Str = variants {"dálmágí" ++ "póllów" ; "mèetán"} ;
oper thousand : Str = variants {("dálmágí" ++ "kúmó") ; "dùbúk" ; "dúbúk"} ;
lin pot01 =
{s = "múndí" ; size = sg};
lin pot0 d = d ;
lin pot110 = mkNum "kúmó" ;
lin pot111 = mkNum ("kúmó" ++ "kán" ++ "múndí") ;
lin pot1to19 d = mkNum ((variants {"kúmó" ++ "kán" ; "tùrò"}) ++ d.s ) ;
lin pot0as1 n = n ;
lin pot1 d = mkNum (table {three => thirty ; _ => "kúu" ++ d.s} ! d.size) ;
lin pot1plus d e = mkNum ((table {three => thirty ; _ => "kúu" ++ d.s} ! d.size) ++ "kán" ++ e.s) ;
lin pot1as2 n = n ;
lin pot2 d = mkNum (table {sg => (variants {"dálmágí" ; "dálmák"}) ; two => two100 ; _ => "dálmágí" ++ d.s } ! d.size) ;
lin pot2plus d e = mkNum ((table {two => two100 ; sg => (variants {"dálmágí" ; "dálmák"}) ; _ => "dálmágí" ++ d.s } ! d.size) ++ "kán" ++ e.s) ;
lin pot2as3 n = {s = n.s} ;
lin pot3 n = {s = table {sg => thousand ; _ => "dùbúk" ++ n.s} ! n.size } ;
lin pot3plus n m = {s = table {sg => thousand ; _ => "dùbúk" ++ n.s} ! n.size ++ m.s} ;

View File

@@ -0,0 +1,95 @@
include numerals.Abs.gf ;
-- the sporadic kam-forms not implemented (general minus formations are hardly possible to implement)
param DForm = unit | ten | teen | tene | next | inv ;
param Size = sg | two | five | seven | nine | e25 | e75 | e50s | e90s | other ;
oper LinDigit = {s : DForm => Str ; s2 : Str ; size : Size} ;
oper LinSub100 = {s : Str ; s2 : Str ; s3 : Str ; size : Size} ;
lincat Digit = LinDigit ;
lincat Sub10 = LinDigit ;
lincat Sub100 = LinSub100 ;
lincat Sub1000 = {s : Str ; s2 : Str } ;
lin num x0 =
{s = x0.s } ;
oper mkNum : Str -> Str -> Str -> Str -> Str -> LinDigit =
\do -> \baara -> \bis -> \nxt -> \inverse ->
{s = table {unit => do ; teen => baara ; ten => bis ; tene => bis + "e" ; next => nxt ; inv => inverse} ;
s2 = do ++ "hajaar" ;
size = other } ;
oper mkNumS : Str -> Str -> Str -> Str -> Str -> Size -> LinDigit =
\do -> \baara -> \bis -> \nxt -> \inverse -> \sz ->
{s = table {unit => do ; teen => baara ; ten => bis ; tene => bis + "e" ; next => nxt ; inv => inverse} ;
s2 = do ++ "hajaar" ;
size = sz } ;
-- lin n1 mkNum "ek" "gyaara" "das"
lin n2 = mkNum "di" "baara" "vis" ("tin" ++ "se") "aaT" ;
lin n3 = mkNumS "tin" "tera" "tis" ("caar"++ "se") "saat" two ;
lin n4 = mkNum "caar" "cawda" "caaLis" ("paanc" ++ "se") "cho" ;
lin n5 = mkNumS "paanc" "pandra" "pacaas" ("cho" ++ "se") "paanc" five;
lin n6 = mkNum "cho" "sola" "saaT" ("saat" ++ "se") "caar" ;
lin n7 = mkNumS "saat" "satara" "sattar" ("aaT" ++ "se") "tin" seven ;
lin n8 = mkNum "aaT" "aTara" "ãysi" ("naw" ++ "se") "di" ;
lin n9 = mkNumS "naw" "wagNis" "nawwad" "hajaar" "ek" nine;
oper ss : Str -> LinSub100 = \s1 -> {s = s1 ; s2 = s1 ++ "hajaar" ; s3 = s1 ; size = other} ;
oper sssize : Str -> Str -> Size -> LinSub100 = \s1 -> \aux -> \sz ->
{s = s1 ; s2 = s1 ++ "hajaar" ; s3 = aux ; size = sz} ;
oper spcsize : Size -> Size -> Size = \s1 -> \s2 ->
table {two => table {five => e25 ; _ => other} ;
five => table {_ => e50s} ;
seven => table {five => e75 ; _ => other} ;
nine => table {_ => e90s} ;
_ => table {_ => other}} ! s1 ! s2 ;
lin pot01 = {s = table {unit => "ek" ; next => "di" ; inv => "naw" ; _ => "dummy" } ; s2 = "hajaar" ; size = sg} ;
lin pot0 d = d ;
lin pot110 = ss "das" ;
lin pot111 = ss "gyaara" ;
lin pot1to19 d = ss (d.s ! teen) ;
lin pot0as1 n = {s = n.s ! unit ; s2 = n.s2 ; s3 = (n.s ! unit) ; size = n.size} ;
lin pot1 d = sssize (d.s ! ten) [] (table {five => e50s ; _ => other} ! d.size) ;
lin pot1plus d e = sssize (variants {(d.s ! tene) ++ "par" ++ (e.s ! unit) ; (d.s ! ten) ++ "an" ++ (e.s ! unit)}) (table {nine => e.s ! inv ; _ => e.s ! unit} ! d.size) (spcsize d.size e.size) ;
lin pot1as2 n = {s = n.s ; s2 = n.s2 } ;
lin pot2 d = {s = selsg d.size "so" ((d.s ! unit) ++ "se") ;
s2 = selsg d.size [] ((d.s ! unit) ++ "laak") } ;
lin pot2plus d e =
{s = mkso d.size e.size (table {e75 => d.s ! next ; e90s => d.s ! next ; _ => d.s ! unit} ! e.size)
(table {e50s => e.s3 ; e90s => e.s3 ; _ => e.s } ! e.size) ;
s2 = (d.s ! unit) ++ "laak" ++ (selsg e.size "hajaar" (e.s ++ "hajaar")) } ;
lin pot2as3 n = {s = n.s } ;
lin pot3 n = {s = n.s2 } ;
lin pot3plus n m = {s = n.s2 ++ m.s } ;
oper selsg : Size -> Str -> Str -> Str = \sz -> \s1 -> \s2 -> table {sg => s1 ; _ => s2} ! sz ;
oper mkso : Size -> Size -> Str -> Str -> Str = \ds -> \es -> \auxd -> \auxe -> table {
sg => table {e25 => "sawaa" + "se" ;
e50s => "DoD" ++ "se" ++ auxe ;
e75 => "pawNe" ++ auxd ;
e90s => variants { auxd ++ "kam" ++ auxe ; auxe ++ "kam" ++ auxd} ;
_ => "ek" ++ "so" ++ auxe} ;
two => table {e50s => "aDaai" ++ auxe ;
e25 => "sawaa" ++ auxd ++ "se" ;
e75 => "pawNe" ++ auxd ;
e90s => variants { auxd ++ "kam" ++ auxe ; auxe ++ "kam" ++ auxd} ;
_ => "do" ++ "se" ++ auxe} ;
_ => table {e50s => "saaDe" ++ auxd ++ "se" ++ auxe ;
e25 => "sawaa" ++ auxd ++ "se" ;
e75 => "pawNe" ++ auxd ;
e90s => variants { auxd ++ "kam" ++ auxe ; auxe ++ "kam" ++ auxd} ;
_ => auxd ++ "se" ++ auxe}
} ! ds ! es ;

View File

@@ -0,0 +1,49 @@
-- c^
-- s^
-- n, is n with a comma under
-- u^ with line over
include numerals.Abs.gf ;
param DForm = unit | teen | ten | hundred ;
oper LinDigit = {s : DForm => Str ; s2 : Str };
oper LinSub100 = {s : Str ; s2 : Str } ;
lincat Digit = LinDigit ;
lincat Sub10 = LinDigit ;
lincat Sub100 = LinSub100 ;
lincat Sub1000 = LinSub100 ;
oper mkNum : Str -> Str -> LinDigit = \tri -> \tribase ->
{ s = table {unit => tri ; teen => tribase + "padsmit" ; ten => tribase + "desmit" ; hundred => variants {tribase + "simt" ; tri ++ "simti"} } ; s2 = tribase + "tu^kstos^" };
lin num x = {s = "/L" ++ x.s ++ "L/"} ; -- Latin A Supplement diacritics ;
lin n2 = mkNum "divi" "div" ;
lin n3 = mkNum "tri:s" "tri:s" ;
lin n4 = mkNum "c^etri" "c^etr" ;
lin n5 = mkNum "pieci" "piec" ;
lin n6 = mkNum "ses^i" "ses^" ;
lin n7 = mkNum "septin,i" "septin," ;
lin n8 = mkNum "aston,i" "aston," ;
lin n9 = mkNum "devin,i" "devin," ;
oper mkR : Str -> LinSub100 = \n -> {s = n ; s2 = n ++ "tu^kstos^" } ;
lin pot01 = { s = table {hundred => "simts" ; _ => "viens" } ; s2 = "tu^kstotis" ; size = sg };
lin pot0 d = d ;
lin pot110 = mkR "desmit" ;
lin pot111 = mkR "vienpadsmit" ;
lin pot1to19 d = mkR (d.s ! teen) ;
lin pot0as1 n = {s = n.s ! unit ; s2 = n.s2 } ;
lin pot1 d = mkR (d.s ! ten) ;
lin pot1plus d e = mkR ((d.s ! ten) ++ (e.s ! unit)) ;
lin pot1as2 n = n ;
lin pot2 d = mkR (d.s ! hundred) ;
lin pot2plus d e = mkR ((d.s ! hundred) ++ e.s) ;
lin pot2as3 n = {s = n.s };
lin pot3 n = {s = n.s2} ;
lin pot3plus n m = {s = n.s2 ++ m.s} ;

View File

@@ -0,0 +1,54 @@
include numerals.Abs.gf ;
param Size = sg | belowten | moreten ;
oper LinDigit = {s : Str ; size : Size} ;
lincat Digit = LinDigit ;
lincat Sub10 = LinDigit ;
lincat Sub100 = {s : Str ; s2 : Str ; size : Size} ;
lincat Sub1000 = {s : Str ; s2 : Str ; size : Size} ;
oper mkNum : Str -> LinDigit = \u -> {s = u ; size = belowten} ;
lin n2 = mkNum "baar" ;
lin n3 = mkNum "pê" ;
lin n4 = mkNum "puôn" ;
lin n5 = mkNum "pram" ;
lin n6 = mkNum "prau" ;
lin n7 = mkNum "poh" ;
lin n8 = mkNum "phaam" ;
lin n9 = mkNum "sên" ;
oper ban : Str = (variants {"ban" ; "rabu"} ) ;
lin num x = x ;
lin pot01 = {s = variants {"muôi" ; "du" ; "di"} ; size = sg } ;
lin pot0 d = d ;
lin pot110 = {s = "jo'mo't" ; s2 = variants {"mu'n" ; "jo'm'ot" ++ "ban"} ; size = moreten} ;
lin pot111 = {s = "jo'mo't" ++ "muôi" ; s2 = variants {"mu'n" ++ ban ; "jo'm'ot" ++ "muôi" ++ ban} ; size = moreten} ;
lin pot1to19 d = {s = "jo'mo't" ++ d.s ; s2 = variants {"mu'n" ++ d.s ++ "ban"; "jo'm'ot" ++ d.s ++ "ban"} ; size = moreten };
lin pot0as1 n = {s = n.s ; s2 = xsg n.size ban (n.s ++ "ban") ; size = n.size} ;
lin pot1 d = {s = d.s ++ "jo't" ; s2 = variants {d.s ++ "mu'n" ; d.s ++ "jo't" ++ "ban"} ; size = moreten} ;
lin pot1plus d e = {s = d.s ++ "jo't" ++ e.s ; s2 = variants {d.s ++ "mu'n" ; d.s ++ "jo't" } ++ xsg e.size ban (e.s ++ "ban") ; size = moreten} ;
lin pot1as2 n = n ;
lin pot2 d = {s = xsg d.size (variants { "riêng" ; "rhiêng" }) (d.s ++ "riêng") ;
s2 = xsg d.size "seen" (d.s ++ "seen") ;
size = moreten} ;
lin pot2plus d e = {s = xsg d.size (variants { "riêng" ; "rhiêng" }) (d.s ++ "riêng") ++ maybeo e.size ++ e.s ;
s2 = xsg d.size "seen" (d.s ++ "seen") ++ e.s2 ;
size = moreten} ;
lin pot2as3 n = {s = n.s} ;
lin pot3 n = {s = table {sg => (variants {"ban" ; "rabu"}) ;
belowten => n.s ++ "ban" ;
tenover => n.s2} ! n.size } ;
lin pot3plus n m = {s = table {sg => (variants {"ban" ; "rabu"}) ;
belowten => n.s ++ "ban" ;
tenover => n.s2} ! n.size ++ maybeo m.size ++ m.s } ;
oper maybeo : Size -> Str = \sz -> table {moreten => [] ; _ => "ô"} ! sz;
oper xsg : Size -> Str -> Str -> Str = \sz -> \s1 -> \s2 -> table {sg => s1 ; _ => s2} ! sz ;

View File

@@ -0,0 +1,54 @@
include numerals.Abs.gf ;
param DForm = unit | ten ;
param Size = sg | pl | pl_end | more100;
param S1000 = reg | lakh ;
lincat Numeral = {s : Str} ;
lincat Digit = {s : DForm => Str ; size : Size } ;
lincat Sub10 = {s : DForm => Str ; size : Size } ;
lincat Sub100 = {s : Str ; size : Size} ;
lincat Sub1000 = {s : S1000 => Str ; size : Size } ;
lincat Sub1000000 = {s : Str} ;
lin num x0 =
{s = x0.s} ;
oper mkNum : Str -> Str -> Lin Digit = \mbili -> \ishirini ->
{s = table {unit => mbili ; ten => ishirini } ; size = pl_end };
-- lin n1 = mkNum "moja" ;
lin n2 = mkNum "mbili" "ishirini" ;
lin n3 = mkNum "tatu" "thelathini" ;
lin n4 = mkNum "nne" "arobaini" ;
lin n5 = mkNum "tano" "hamsini" ;
lin n6 = mkNum "sita" "sitini" ;
lin n7 = mkNum "saba" "sabini" ;
lin n8 = mkNum "nane" "themanini" ;
lin n9 = mkNum "tisa" "tisini" ;
lin pot01 =
{s = table {unit => "moja" ; _ => "dummy" } ; size = sg };
lin pot0 d = d ;
lin pot110 = {s = "kumi" ; size = pl_end} ;
lin pot111 = {s = "kumi" ++ "na" ++ "moja" ; size = pl} ;
lin pot1to19 d = {s = "kumi" ++ "na" ++ d.s ! unit ; size = pl} ;
lin pot0as1 n = {s = n.s ! unit ; size = n.size} ;
lin pot1 d = {s = d.s ! ten ; size = pl_end} ;
lin pot1plus d e = {s = d.s ! ten ++ "na" ++ e.s ! unit ; size = pl} ;
lin pot1as2 n = {s = table {_ => n.s } ; size = n.size} ;
lin pot2 d = {s = table {reg => mkmia d.size (d.s ! unit) ; lakh => mklakh d.size (d.s ! unit) []} ; size = more100};
lin pot2plus d e =
{s = table {lakh => mklakh d.size (d.s ! unit) ("elfu" ++ e.s) ;
reg => mkmia d.size (d.s ! unit) ++ maybena e.size ++ e.s } ;
size = more100} ;
lin pot2as3 n = {s = n.s ! reg } ;
lin pot3 n = {s = table {sg => variants {"elfu" ; "elfu" ++ "moja"} ; more100 => n.s ! lakh ; _ => n.s ! reg ++ "elfu"} ! n.size} ; -- invert order in 1 < x < 100 * 1000 if nothing follows the elfu
lin pot3plus n m = {s = table {more100 => n.s ! lakh ; _ => "elfu" ++ n.s ! reg} ! n.size ++ maybena m.size ++ m.s ! reg} ;
oper lakhi : Str = (variants {"lakh" ; "lakhi" }) ;
oper mia : Str = (variants { "mia" ; "mia" ++ "moja" }) ;
oper maybena : Size -> Str = \sz -> table {sg => "na" ; pl_end => "na" ; _ => []} ! sz ;
oper mklakh : Size -> Str -> Str -> Str = \sz -> \attr -> \elfu ->
table {sg => lakhi ; _ => lakhi ++ attr} ! sz ++ elfu ;
oper mkmia : Size -> Str -> Str = \sz -> \attr ->
table {sg => mia; _ => "mia" ++ attr } ! sz ;

View File

@@ -24,11 +24,11 @@ lin n5 =
lin n6 =
{inh = unit ; inh1 = sg ; s = table {unit => "six" ; teen => "seize" ; ten => "soixante" }} ;
lin n7 =
{inh = teen ; inh1 = sg ; s = table {unit => "sept" ; teen => "dix" ++ "-" ++ "sept" ; ten => "septante" }} ;
{inh = unit ; inh1 = sg ; s = table {unit => "sept" ; teen => "dix" ++ "-" ++ "sept" ; ten => "septante" }} ;
lin n8 =
{inh = unit ; inh1 = pl ; s = table {unit => "huit" ; teen => "dix" ++ "-" ++ "huit" ; ten => "huitante" }} ;
lin n9 =
{inh = teen ; inh1 = pl ; s = table {unit => "neuf" ; teen => "dix" ++ "-" ++ "neuf" ; ten => "nonante" }} ;
{inh = unit ; inh1 = pl ; s = table {unit => "neuf" ; teen => "dix" ++ "-" ++ "neuf" ; ten => "nonante" }} ;
lin pot01 =
{inh = sg ;
s = table {{p1 = unit ; p2 = indep} => "un" ;

View File

@@ -1,47 +1,64 @@
include numerals.Abs.gf ;
param DForm = unit | ten | teen ;
oper bind : Str -> Str -> Str = \s1 -> \s2 -> s1 ++ s2;
-- Have no idea about the orthography, taken from Univ. History of Numbers
-- Georges Ifrah p. 26
param DForm = unit | teen | bform | ten | hundred | agg ;
-- Sorry no tibetan script but the adhoc transliteration should be phonematic
-- 21 has an extra variant namely nyerchi'
lincat Digit = {s : DForm => Str} ;
lincat Sub10 = {s : DForm => Str} ;
oper LinDigit = {s : DForm => Str} ;
oper mkNum : Str -> Lin Digit =
\gnyis ->
{s = table {unit => gnyis ; teen => "bcu" ++ gnyis ; ten => gnyis ++ "bcu" }} ;
lincat Digit = LinDigit ;
lincat Sub10 = LinDigit ;
lincat Sub100 = {s : Str ; s2 : Str} ;
lincat Sub1000 = {s : Str ; s2 : Str} ;
-- lin n1 mkNum "gcig" ;
lin n2 = mkNum "gnyis" ;
lin n3 = mkNum "gsum" ;
lin n4 = mkNum "bzhi" ;
lin n5 = mkNum "lnga" ;
lin n6 = mkNum "drug" ;
lin n7 = mkNum "bdun" ;
lin n8 = mkNum "brgyad" ;
lin n9 = mkNum "dgu" ;
oper mkNum : Str -> Str -> Str -> Str -> LinDigit =
\u -> \tn -> \b -> \t ->
{s = table {unit => u ; teen => tn ; bform => b + "chu" ; ten => t ; hundred => b + "g~ya" ; agg => "t.'a'" ++ u}} ;
oper ss : Str -> {s : Str} = \s -> {s = s} ;
-- lin n1 mkNum "chi'" "chug/chi'" ;
lin n2 =
{s = table {unit => "n~yi:" ; teen => "chug/n~yi:" ; ten => "tsag/" ;
bform => "nyishu" ; hundred => (variants {"nyibg~ya"; "nyi:bg~ya"}) ;
agg => "t.'a'" ++ "n~yi:" } };
lin n3 = mkNum "sum" "chug/sum" "sum" "sog/" ;
lin n4 = mkNum "z~hyi" "chubz~hyi" (variants {"z~hyib" ; "z~hib"}) "z/hye" ;
lin n5 = mkNum "n~ga" "chö:n~ga" "n~gab" "nga" ;
lin n6 = mkNum "d.u'" "chud.u'" "d.ug/" "re";
lin n7 = mkNum "d~ün" "chubd~ün" "d~ün" "d/ön";
lin n8 = mkNum "g~yä'" "chobg~yä'" "g~yä'" "g/ya";
lin n9 = mkNum "g~u" "chug~u" "g~ub" "g/o";
lin pot01 = {s = table {f => "gcig"}} ;
lin pot0 d = {s = table {f => d.s ! f}} ;
lin pot110 = ss "bcu" ;
lin pot111 = ss ("bcu" ++ "gcig");
lin pot1to19 d = {s = d.s ! teen } ;
lin pot0as1 n = {s = n.s ! unit } ;
lin pot1 d = {s = d.s ! ten } ;
lin pot1plus d e = {s = d.s ! ten ++ e.s ! unit} ;
lin pot1as2 n = n ;
lin pot2 d = {s = d.s ! unit ++ "brgya"} ;
lin pot2plus d e = {s = d.s ! unit ++ "brgya" ++ e.s} ;
oper dang : Str = "d/ang" ;
oper tampa : Str -> Str = \s -> (variants {s; s ++ "t'ampa"});
lin pot2as3 n = n ;
lin pot3 n = {s = n.s ++ "thousand"} ;
lin pot3plus n m = {s = n.s ++ "thousand" ++ m.s} ;
lin num x = {s = "/X" ++ x.s ++ "X/" }; -- extra diacritics translation
-- Don't know the word for thousand
lin pot01 =
{s = table {hundred => "g~ya" ; agg => (variants {[] ; "t'a'"}) ; _ => "chi'"}} ;
lin pot0 d = d ;
lin pot110 = {s = tampa "chu" ; s2 = variants {"t.'i" ; "t.'it.'a'"}} ;
lin pot111 =
{s = "chug/chi'" ;
s2 = variants {"t.'i" ; "t.'it.'a'"} ++ dang ++ variants {"t~ong'i" ; "t~ongt.'a'"}} ;
lin pot1to19 d = {s = d.s ! teen ; s2 = variants {"t.'i" ; "t.'it.'a'"} ++ mkagg (d.s ! agg) "t~ong"} ;
lin pot0as1 n = {s = n.s ! unit ; s2 = mkagg (n.s ! agg) "t~ong"} ;
lin pot1 d = {s = tampa (d.s ! bform) ; s2 = mkagg (d.s ! agg) "t.'i"} ;
lin pot1plus d e =
{s = variants { d.s ! bform ++ (bind (d.s ! ten) (e.s ! unit)) ;
(bind (d.s ! ten) (e.s ! unit))} ;
s2 = mkagg (d.s ! agg) "t.'i" ++ dang ++ mkagg (e.s ! agg) "t~ong"} ;
lin pot1as2 n = {s = n.s ; s2 = n.s2 } ;
lin pot2 d = {s = d.s ! hundred ; s2 = mkagg (d.s ! agg) "b~um" } ;
lin pot2plus d e = {s = d.s ! hundred ++ dang ++ e.s ;
s2 = mkagg (d.s ! agg) "b~um" ++ dang ++ e.s2} ;
lin pot2as3 n = {s = n.s } ;
lin pot3 n = {s = n.s2 } ;
lin pot3plus n m = {s = n.s2 ++ dang ++ m.s} ;
oper mkagg : Str -> Str -> Str = \attr -> \s -> bind s attr ;

View File

@@ -5,6 +5,15 @@ i -old -abs=Nums biblical_hebrew.gf
i -old -abs=Nums classical_arabic.gf
i -old -abs=Nums classical_greek.gf
i -old -abs=Nums croatian.gf
i -old -abs=Nums bulgarian.gf
i -old -abs=Nums catalan.gf
i -old -abs=Nums czech.gf
i -old -abs=Nums khmer.gf
i -old -abs=Nums kwami.gf
i -old -abs=Nums lamani.gf
i -old -abs=Nums latvian.gf
i -old -abs=Nums stieng.gf
i -old -abs=Nums swahili.gf
i -old -abs=Nums geez.gf
i -old -abs=Nums hindi.gf
i -old -abs=Nums hungarian.gf
@@ -17,7 +26,6 @@ i -old -abs=Nums korean.gf
i -old -abs=Nums kulung.gf
i -old -abs=Nums modern_greek.gf
i -old -abs=Nums mongolian.gf
i -old -abs=Nums numerals.Ara.gf
i -old -abs=Nums numerals.ChiU.gf
i -old -abs=Nums numerals.Dan.gf
i -old -abs=Nums numerals.Deu.gf
@@ -45,4 +53,4 @@ i -old -abs=Nums tamil.gf
i -old -abs=Nums tibetan.gf
i -old -abs=Nums totonac.gf
i -old -abs=Nums turkish.gf
ts -f
---ts -f