From 8e637feb793364134d469cb7d1e68605aab2c2ea Mon Sep 17 00:00:00 2001 From: aarne Date: Tue, 9 Dec 2003 16:07:42 +0000 Subject: [PATCH] Harald's new grammars. --- grammars/numerals/old/bulgarian.gf | 51 ++++++++++++ grammars/numerals/old/catalan.gf | 56 +++++++++++++ grammars/numerals/old/classical_arabic.gf | 4 +- grammars/numerals/old/czech.gf | 58 ++++++++++++++ grammars/numerals/old/khmer.gf | 50 ++++++++++++ grammars/numerals/old/kwami.gf | 48 ++++++++++++ grammars/numerals/old/lamani.gf | 95 +++++++++++++++++++++++ grammars/numerals/old/latvian.gf | 49 ++++++++++++ grammars/numerals/old/stieng.gf | 54 +++++++++++++ grammars/numerals/old/swahili.gf | 54 +++++++++++++ grammars/numerals/old/swiss_french.gf | 4 +- grammars/numerals/old/tibetan.gf | 83 ++++++++++++-------- grammars/numerals/old/transNum.gfs | 12 ++- 13 files changed, 579 insertions(+), 39 deletions(-) create mode 100644 grammars/numerals/old/bulgarian.gf create mode 100644 grammars/numerals/old/catalan.gf create mode 100644 grammars/numerals/old/czech.gf create mode 100644 grammars/numerals/old/khmer.gf create mode 100644 grammars/numerals/old/kwami.gf create mode 100644 grammars/numerals/old/lamani.gf create mode 100644 grammars/numerals/old/latvian.gf create mode 100644 grammars/numerals/old/stieng.gf create mode 100644 grammars/numerals/old/swahili.gf diff --git a/grammars/numerals/old/bulgarian.gf b/grammars/numerals/old/bulgarian.gf new file mode 100644 index 000000000..fd330152f --- /dev/null +++ b/grammars/numerals/old/bulgarian.gf @@ -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 ; + diff --git a/grammars/numerals/old/catalan.gf b/grammars/numerals/old/catalan.gf new file mode 100644 index 000000000..b1396c6b3 --- /dev/null +++ b/grammars/numerals/old/catalan.gf @@ -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 } ; + diff --git a/grammars/numerals/old/classical_arabic.gf b/grammars/numerals/old/classical_arabic.gf index a1e0d19d5..767be53d6 100644 --- a/grammars/numerals/old/classical_arabic.gf +++ b/grammars/numerals/old/classical_arabic.gf @@ -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 = diff --git a/grammars/numerals/old/czech.gf b/grammars/numerals/old/czech.gf new file mode 100644 index 000000000..880bd25d5 --- /dev/null +++ b/grammars/numerals/old/czech.gf @@ -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" } ; diff --git a/grammars/numerals/old/khmer.gf b/grammars/numerals/old/khmer.gf new file mode 100644 index 000000000..7c4fb1051 --- /dev/null +++ b/grammars/numerals/old/khmer.gf @@ -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 ; + + + diff --git a/grammars/numerals/old/kwami.gf b/grammars/numerals/old/kwami.gf new file mode 100644 index 000000000..cb441f3ee --- /dev/null +++ b/grammars/numerals/old/kwami.gf @@ -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} ; \ No newline at end of file diff --git a/grammars/numerals/old/lamani.gf b/grammars/numerals/old/lamani.gf new file mode 100644 index 000000000..d295ebaa2 --- /dev/null +++ b/grammars/numerals/old/lamani.gf @@ -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 ; + diff --git a/grammars/numerals/old/latvian.gf b/grammars/numerals/old/latvian.gf new file mode 100644 index 000000000..5cfbba3b7 --- /dev/null +++ b/grammars/numerals/old/latvian.gf @@ -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} ; + + diff --git a/grammars/numerals/old/stieng.gf b/grammars/numerals/old/stieng.gf new file mode 100644 index 000000000..549e9bd3f --- /dev/null +++ b/grammars/numerals/old/stieng.gf @@ -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 ; + + + diff --git a/grammars/numerals/old/swahili.gf b/grammars/numerals/old/swahili.gf new file mode 100644 index 000000000..e3613e986 --- /dev/null +++ b/grammars/numerals/old/swahili.gf @@ -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 ; diff --git a/grammars/numerals/old/swiss_french.gf b/grammars/numerals/old/swiss_french.gf index 64f5d761b..1966c25c0 100644 --- a/grammars/numerals/old/swiss_french.gf +++ b/grammars/numerals/old/swiss_french.gf @@ -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" ; diff --git a/grammars/numerals/old/tibetan.gf b/grammars/numerals/old/tibetan.gf index a10a658cb..b862108fc 100644 --- a/grammars/numerals/old/tibetan.gf +++ b/grammars/numerals/old/tibetan.gf @@ -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 ; diff --git a/grammars/numerals/old/transNum.gfs b/grammars/numerals/old/transNum.gfs index 5378f0717..b5ce6cc6b 100644 --- a/grammars/numerals/old/transNum.gfs +++ b/grammars/numerals/old/transNum.gfs @@ -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