1
0
forked from GitHub/gf-core

New order among numerals.

This commit is contained in:
aarne
2004-01-29 12:57:32 +00:00
parent eb82e5960e
commit 22dcbef870
96 changed files with 6177 additions and 160 deletions

View File

@@ -1,8 +1,6 @@
include numerals.Abs.gf ;
-- by Patrik Jansson, Chalmers
-- Small change by HH i.e
-- ö in kettö should be ö with tilted long Hungarian dots ad-hoc written o%
param DForm = ental | tiotal ;
param Place = attr | indep ;
@@ -13,9 +11,9 @@ lincat Sub100 = {s : Place => Str} ;
lincat Sub1000 = {s : Place => Str} ;
lincat Sub1000000 = {s : Str} ;
lin num x0 =
{s = "/L" ++ x0.s ++ "L/"} ; -- the Latin-A-Supplement environment} ;
{s = x0.s} ;
lin n2 =
{s = table {<ental,indep> => "ketto%" ;
{s = table {<ental,indep> => "kettö" ;
<tiotal,indep> => "húsz" ;
<ental,attr> => "két" ;
<tiotal, attr> => "huszon"}} ;
@@ -40,24 +38,24 @@ lin pot0 d =
lin pot110 =
{s = table {p => "tíz"}} ;
lin pot111 =
{s = table {p => "tizen" + "egy"}} ;
{s = table {p => "tizen" ++ "egy"}} ;
lin pot1to19 d =
{s = table {p => "tizen" ++ d.s ! <ental,indep>}} ; -- Glue!
{s = table {p => "tizen" ++ d.s ! <ental,indep>}} ;
lin pot0as1 n =
{s = table {p => n.s ! <ental,p>}} ;
lin pot1 d =
{s = table {p => d.s ! <tiotal,indep>}} ;
lin pot1plus d e =
{s = table {p => (d.s ! <tiotal,attr>) ++ e.s ! <ental,indep>}} ; -- Glue!
{s = table {p => (d.s ! <tiotal,attr>) ++ e.s ! <ental,indep>}} ;
lin pot1as2 n =
{s = table {p => n.s ! p}} ;
lin pot2 d =
{s = table {p => (d.s ! <ental,attr>) ++ "száz"}} ; -- Glue!
{s = table {p => (d.s ! <ental,attr>) ++ "száz"}} ;
lin pot2plus d e =
{s = table {p => (d.s ! <ental,attr>) ++ "száz" ++ e.s ! indep}} ; -- Glue!
{s = table {p => (d.s ! <ental,attr>) ++ "száz" ++ e.s ! indep}} ;
lin pot2as3 n =
{s = n.s ! indep} ;
lin pot3 n =
{s = n.s ! attr ++ "ezer"} ; -- Glue!
{s = n.s ! attr ++ "ezer"} ;
lin pot3plus n m =
{s = n.s ! attr ++ "ezer" ++ m.s ! indep} ; -- Glue!
{s = n.s ! attr ++ "ezer" ++ m.s ! indep} ;

View File

@@ -1,39 +1,32 @@
include numerals.Abs.gf ;
-- unit + hundreds | mille are written together more often that not.
-- ten + unit are written together!
param DForm = ental Pred | ton | tiotal | spctre;
param DForm = ental Pred | ton | tiotal ;
param Num = sg | pl ;
param Pred = pred | indip ;
oper LinDigit = {s : DForm => Str} ;
lincat Digit = LinDigit ;
lincat Digit = {s : DForm => Str} ;
lincat Sub10 = {s : DForm => Str ; n : Num} ;
lincat Sub100 = {s : Str ; n : Num} ;
lincat Sub1000 = {s : Str ; n : Num} ;
lincat Sub1000000 = {s : Str} ;
oper vowel : Strs = strs {"u" ; "o"} ; -- uno e otto
oper mkTal : Str -> Str -> Str -> LinDigit =
oper mkTal : Str -> Str -> Str -> Lin Digit =
\två -> \tolv -> \tjugo ->
{s = table {ental _ => två ; ton => tolv ; tiotal => tjugo ; spctre => två}} ;
{s = table {ental _ => två ; ton => tolv ; tiotal => tjugo}} ;
oper ss : Str -> {s : Str} = \s -> {s = s} ;
oper spl : Str -> {s : Str ; n : Num} = \s -> {s = s ; n = pl} ;
oper mille : Str -> Num => Str = \s -> table {sg => "mille" ; pl => s ++ "mila"} ; -- Glue s + "mila"!
oper mille : Num => Str = table {sg => "mille" ; pl => "mila"} ;
lin num x = x ;
lin n2 = mkTal "due" "dodici" ("vent" + pre {"i" ; [] / vowel}) ;
lin n3 = {s = table {ental _ => "tre" ; ton => "tredici" ; tiotal => ("trent" + pre {"a" ; [] / vowel}) ; spctre => "tré" } };
lin n4 = mkTal "quattro" "quattordici" ("quarant" + pre {"a" ; [] / vowel}) ;
lin n5 = mkTal "cinque" "quindici" ("cinquant" + pre {"a" ; [] / vowel}) ;
lin n6 = mkTal "sei" "sedici" ("sessant" + pre {"a" ; [] / vowel}) ;
lin n7 = mkTal "sette" "diciassette" ("settant" + pre {"a" ; [] / vowel}) ;
lin n8 = mkTal "otto" "diciotto" ("ottant" + pre {"a" ; [] / vowel}) ;
lin n9 = mkTal "nove" "diciannove" ("novant" + pre {"a" ; [] / vowel});
lin n2 = mkTal "due" "dodici" "venti" ;
lin n3 = mkTal "tre" "tredici" "trenta" ;
lin n4 = mkTal "quattro" "quattordici" "quaranta" ;
lin n5 = mkTal "cinque" "quindici" "cinquanta" ;
lin n6 = mkTal "sei" "sedici" "sessanta" ;
lin n7 = mkTal "sette" "diciassette" "settanta" ;
lin n8 = mkTal "otto" "diciotto" "ottanta" ;
lin n9 = mkTal "nove" "diciannove" "novanta" ;
lin pot01 = {s = table {ental pred => [] ; _ => "uno"} ; n = sg} ;
lin pot0 d = {s = table {f => d.s ! f} ; n = pl} ;
@@ -42,11 +35,11 @@ lin pot111 = spl "undici" ;
lin pot1to19 d = spl (d.s ! ton) ;
lin pot0as1 n = {s = n.s ! ental indip ; n = n.n} ;
lin pot1 d = spl (d.s ! tiotal) ;
lin pot1plus d e = spl (d.s ! tiotal ++ e.s ! spctre) ; -- Glue!
lin pot1plus d e = spl (d.s ! tiotal ++ e.s ! ental indip) ;
lin pot1as2 n = {s = n.s ; n = n.n} ;
lin pot2 d = spl (d.s ! ental pred ++ "cento") ; -- Glue!
lin pot2plus d e = spl (d.s ! ental pred ++ "cento" ++ e.s) ; -- Glue!
lin pot2 d = spl (d.s ! ental pred ++ "cento") ;
lin pot2plus d e = spl (d.s ! ental pred ++ "cento" ++ e.s) ;
lin pot2as3 n = {s = n.s ; n = n.n} ;
lin pot3 n = ss ((mille n.s) ! n.n) ;
lin pot3plus n m = ss ((mille n.s) ! n.n ++ m.s) ;
lin pot3 n = ss (n.s ++ mille ! n.n) ;
lin pot3plus n m = ss (n.s ++ mille ! n.n ++ m.s) ;

View File

@@ -1,15 +1,5 @@
-- numerals in Polish, author Wojciech Mostowski, 20/9/2002
-- Did special Polish characters Harald Hammarstrom October 2003
-- e, for e,
-- c' for c'
-- s' for s'
-- a, for a,
-- l/ for l/
-- n' for n'
-- z. for z.
include numerals.Abs.gf ;
-- all different for unit digits, teens, tens and hundreds
@@ -47,47 +37,47 @@ dwiescie };
oper mkRegNum1 : Str -> LinDigit =
\siedem ->
{ s = table { unit => siedem ; teen => siedem + "nas'cie" ;
ten => siedem + "dziesia,t" ; hund => siedem + "set"
{ s = table { unit => siedem ; teen => siedem + "nascie" ;
ten => siedem + "dziesiat" ; hund => siedem + "set"
};
o = fiveup ; t = fiveup
};
oper mkRegNum2 : Str -> LinDigit =
\pie ->
{ s = table { unit => pie + "c'" ; teen => pie + "tnas'cie" ;
ten => pie + "c'dziesia,t" ; hund => pie + "c'set"
{ s = table { unit => pie + "c" ; teen => pie + "tnascie" ;
ten => pie + "cdziesiat" ; hund => pie + "cset"
};
o = fiveup ; t = fiveup
};
oper mkTh : Str -> ThForm => Str = \s ->
table { onlyone => "tysia,c" ; lastone => s ++ "tysie,cy" ;
twoorthreeorfour => s ++ "tysia,ce" ; fiveup => s ++ "tysie,cy"
oper mkTh : ThForm => Str =
table { onlyone => "tysiac" ; lastone => "tysiecy" ;
twoorthreeorfour => "tysiace" ; fiveup => "tysiecy"
};
oper ss : Str -> ThForm -> {s : Str ; t : ThForm} = \str -> \th -> {s = str; t = th}
;
lin num x = {s = "/L" ++ x.s ++ "L/"} ; -- the Polish in Latin A supplement ;
lin num x = x ;
lin n2 = mkNum "dwa" "dwanas'cie" "dwadzies'cia" "dwies'cie"
lin n2 = mkNum "dwa" "dwanascie" "dwadziescia" "dwiescie"
twoorthreeorfour ;
lin n3 = mkNum "trzy" "trzynas'cie" "trzydzies'ci" "trzysta"
lin n3 = mkNum "trzy" "trzynascie" "trzydziesci" "trzysta"
twoorthreeorfour ;
lin n4 = mkNum "cztery" "czternas'cie" (variants {"czterydzies'ci" ; "czterdzies'ci"}) "czterysta"
lin n4 = mkNum "cztery" "czternascie" "czterdziesci" "czterysta"
twoorthreeorfour ;
lin n5 = mkRegNum2 "pie," ;
lin n6 = mkNum "szes'c'" "szesnas'cie" "szes'c'dziesia,t" "szes'c'set" fiveup;
lin n5 = mkRegNum2 "pie" ;
lin n6 = mkNum "szesc" "szesnascie" "szescdziesiat" "szescset" fiveup;
lin n7 = mkRegNum1 "siedem" ;
lin n8 = mkRegNum1 "osiem" ;
lin n9 = mkRegNum2 "dziewie," ;
lin n9 = mkRegNum2 "dziewie" ;
lin pot01 = { s = table {hund => "sto"; f => "jeden" };
o = onlyone ; t = lastone
};
lin pot0 d = {s = table {f => d.s ! f} ; o = d.o ; t = d.t} ;
lin pot110 = ss "dziesie,c'" fiveup ;
lin pot111 = ss "jedenas'cie" fiveup ;
lin pot110 = ss "dziesiec" fiveup ;
lin pot111 = ss "jedenascie" fiveup ;
lin pot1to19 d = {s = d.s ! teen ; t = fiveup} ;
lin pot0as1 n = {s = n.s ! unit ; t = n.o} ;
lin pot1 d = {s = d.s ! ten ; t = fiveup} ;
@@ -99,6 +89,6 @@ lin pot2plus d e = { s = d.s ! hund ++ e.s ;
} ;
lin pot2as3 n = n ;
lin pot3 n = {s = (mkTh n.s) ! n.t} ;
lin pot3plus n m = {s = (mkTh n.s) ! n.t ++ m.s} ;
lin pot3 n = {s = n.s ++ mkTh ! n.t} ;
lin pot3plus n m = {s = n.s ++ mkTh ! n.t ++ m.s} ;

View File

@@ -1,56 +1,60 @@
include numerals.Abs.gf ;
-- [c^], [s^], [c']
-- by Karol Ostrovsky, Chalmers
-- mechanically translated to new GF notation by AR
param Size = sg | twothreefour | fiveup ;
param DForm = unit | teen | ten | hundred ;
param DForm = unit | teen | ten ;
param Place = indep | prae ;
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 -> Size -> Lin Digit =
\dva -> \dvanast -> \dvadsat -> \sz ->
{ s = table {unit => dva ; teen => dvanast ; ten => dvadsat ; hund =>
dva + "sto" };
size = sz
};
oper mkRegNum : Str -> Lin Digit = \unit ->
mkNum unit (unit + "nást'") (unit + "desiat") fiveup ;
lin num x = {s = "/L" ++ x.s ++ "L/" } ; -- Latin A supplement encoding
lin n2 = mkNum "dva" "dvanást'" "dvadsat'" twothreefour ;
lin n3 = mkNum "tri" "trinást'" "tridsat'" twothreefour ;
lin n4 = mkNum "s^tyri" "s^trnást'" "s^tyridsat'" twothreefour ;
lin n5 = mkNum "pät'" "pätnást'" "pädesiat" fiveup ;
lin n6 = mkNum "s^est'" "s^estnást'" "s^estdesiat" fiveup ;
lin n7 = mkRegNum "sedem" ;
lin n8 = mkRegNum "osem" ;
lin n9 = mkNum "devät'" "devätnást'" "devätdesiat" fiveup ;
lin pot01 = {s = table {unit => "jeden" ; hundred => "sto" ; _ => "dummy" } ;
size = sg } ;
lin pot0 d = d ;
lin pot110 = {s = "desät'" ; size = fiveup } ;
lin pot111 = {s = "jedenást'" ; 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 ; 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" } ;
lincat Numeral = {s : Str} ;
lincat Digit = {s : {p1 : DForm ; p2 : Place} => Str} ;
lincat Sub10 = {s : {p1 : DForm ; p2 : Place} => Str} ;
lincat Sub100 = {s : Place => Str} ;
lincat Sub1000 = {s : Place => Str} ;
lincat Sub1000000 = {s : Str} ;
lin num x0 =
{s = x0.s} ;
lin n2 =
{s = table {{p1 = unit ; p2 = indep} => "dva" ; {p1 = unit ; p2 = prae} => "dve" ; {p1 = teen ; p2 = indep} => "dvanast" ; {p1 = teen ; p2 = prae} => "dvanast" ; {p1 = ten ; p2 = indep} => "dvadsat" ; {p1 = ten ; p2 = prae} => "dvadsat"}} ;
lin n3 =
{s = table {{p1 = unit ; p2 = indep} => "tri" ; {p1 = unit ; p2 = prae} => "tri" ; {p1 = teen ; p2 = indep} => "trinast" ; {p1 = teen ; p2 = prae} => "trinast" ; {p1 = ten ; p2 = indep} => "tridsat" ; {p1 = ten ; p2 = prae} => "tridsat"}} ;
lin n4 =
{s = table {{p1 = unit ; p2 = indep} => "styri" ; {p1 = unit ; p2 = prae} => "styri" ; {p1 = teen ; p2 = indep} => "strnast" ; {p1 = teen ; p2 = prae} => "strnast" ; {p1 = ten ; p2 = indep} => "styridsat" ; {p1 = ten ; p2 = prae} => "styridsat"}} ;
lin n5 =
{s = table {{p1 = unit ; p2 = indep} => "pat" ; {p1 = unit ; p2 = prae} => "pat" ; {p1 = teen ; p2 = indep} => "patnast" ; {p1 = teen ; p2 = prae} => "patnast" ; {p1 = ten ; p2 = indep} => "patdesiat" ; {p1 = ten ; p2 = prae} => "patdesiat"}} ;
lin n6 =
{s = table {{p1 = unit ; p2 = indep} => "sest" ; {p1 = unit ; p2 = prae} => "sest" ; {p1 = teen ; p2 = indep} => "sestnast" ; {p1 = teen ; p2 = prae} => "sestnast" ; {p1 = ten ; p2 = indep} => "sestdesiat" ; {p1 = ten ; p2 = prae} => "sestdesiat"}} ;
lin n7 =
{s = table {{p1 = unit ; p2 = indep} => "sedem" ; {p1 = unit ; p2 = prae} => "sedem" ; {p1 = teen ; p2 = indep} => "sedemnast" ; {p1 = teen ; p2 = prae} => "sedemnast" ; {p1 = ten ; p2 = indep} => "sedemdesiat" ; {p1 = ten ; p2 = prae} => "sedemdesiat"}} ;
lin n8 =
{s = table {{p1 = unit ; p2 = indep} => "osem" ; {p1 = unit ; p2 = prae} => "osem" ; {p1 = teen ; p2 = indep} => "osemnast" ; {p1 = teen ; p2 = prae} => "osemnast" ; {p1 = ten ; p2 = indep} => "osemdesiat" ; {p1 = ten ; p2 = prae} => "osemdesiat"}} ;
lin n9 =
{s = table {{p1 = unit ; p2 = indep} => "devat" ; {p1 = unit ; p2 = prae} => "devat" ; {p1 = teen ; p2 = indep} => "devatnast" ; {p1 = teen ; p2 = prae} => "devatnast" ; {p1 = ten ; p2 = indep} => "devatdesiat" ; {p1 = ten ; p2 = prae} => "devatdesiat"}} ;
lin pot01 =
{s = table {{p1 = unit ; p2 = indep} => "jedna" ; {p1 = unit ; p2 = prae} => [] ; {p1 = teen ; p2 = indep} => "jedna" ; {p1 = teen ; p2 = prae} => [] ; {p1 = ten ; p2 = indep} => "jedna" ; {p1 = ten ; p2 = prae} => []}} ;
lin pot0 d =
{s = table {{p1 = unit ; p2 = indep} => d.s ! {p1 = unit ; p2 = indep} ; {p1 = unit ; p2 = prae} => d.s ! {p1 = unit ; p2 = prae} ; {p1 = teen ; p2 = indep} => d.s ! {p1 = teen ; p2 = indep} ; {p1 = teen ; p2 = prae} => d.s ! {p1 = teen ; p2 = prae} ; {p1 = ten ; p2 = indep} => d.s ! {p1 = ten ; p2 = indep} ; {p1 = ten ; p2 = prae} => d.s ! {p1 = ten ; p2 = prae}}} ;
lin pot110 =
{s = table {indep => "desat" ; prae => "desat"}} ;
lin pot111 =
{s = table {indep => "jedenast" ; prae => "jedenast"}} ;
lin pot1to19 d =
{s = table {indep => d.s ! {p1 = teen ; p2 = indep} ; prae => d.s ! {p1 = teen ; p2 = prae}}} ;
lin pot0as1 n =
{s = table {indep => n.s ! {p1 = unit ; p2 = indep} ; prae => n.s ! {p1 = unit ; p2 = indep}}} ;
lin pot1 d =
{s = table {indep => d.s ! {p1 = ten ; p2 = indep} ; prae => d.s ! {p1 = ten ; p2 = prae}}} ;
lin pot1plus d e =
{s = table {indep => (d.s ! {p1 = ten ; p2 = indep}) ++ e.s ! {p1 = unit ; p2 = indep} ; prae => (d.s ! {p1 = ten ; p2 = prae}) ++ e.s ! {p1 = unit ; p2 = indep}}} ;
lin pot1as2 n =
{s = table {indep => n.s ! indep ; prae => n.s ! indep}} ;
lin pot2 d =
{s = table {indep => (d.s ! {p1 = unit ; p2 = prae}) ++ "sto" ; prae => (d.s ! {p1 = unit ; p2 = prae}) ++ "sto"}} ;
lin pot2plus d e =
{s = table {indep => (d.s ! {p1 = unit ; p2 = prae}) ++ "sto" ++ e.s ! indep ; prae => (d.s ! {p1 = unit ; p2 = prae}) ++ "sto" ++ e.s ! indep}} ;
lin pot2as3 n =
{s = n.s ! indep} ;
lin pot3 n =
{s = (n.s ! prae) ++ "tisic"} ;
lin pot3plus n m =
{s = (n.s ! prae) ++ "tisic" ++ m.s ! indep} ;

View File

@@ -1,63 +1,61 @@
include numerals.Abs.gf ;
param DForm = unit | teen | ten | hundred | veinti ;
param Size = sg | two | pl ;
param Uso = indep | attr ;
-- by Carlos Gonzalia, Chalmers, 1999
-- original source automatically translated to new GF by AR
param DForm = unit | teen | ten | hundred ;
param Modif = mod | unmod | conj ;
lincat Numeral = {s : Str} ;
lincat Digit = {s : DForm => Str ; size : Size } ;
lincat Sub10 = {s : DForm => Str ; size : Size } ;
lincat Sub100 = {s : Uso => Str ; size : Size} ;
lincat Sub1000 = {s : Uso => Str ; size : Size} ;
lincat Digit = {inh : Modif ; s : {p1 : DForm ; p2 : Modif} => Str} ;
lincat Sub10 = {s : {p1 : DForm ; p2 : Modif} => Str} ;
lincat Sub100 = {s : Str} ;
lincat Sub1000 = {s : Str} ;
lincat Sub1000000 = {s : Str} ;
oper mkNum : Str -> Str -> Str -> Str -> Lin Digit =
\dois -> \doze -> \vinte -> \duzentos ->
{s = table {unit => dois ; teen => doze ; ten => vinte ; hundred => duzentos ;veinti => "veinti" + dois } ; size = pl} ;
lin num x0 =
{s = x0.s} ;
lin n2 = {s = table {unit => "dos" ; teen => "doce" ; ten => "veinte" ; hundred => "doscientos" ; veinti => "veinti" + "dos" } ; size = two } ;
lin n3 = mkNum "tres" "trece" "treinta" "trescientos" ;
lin n4 = mkNum "cuatro" "catorce" "cuarenta" "cuatrocientos" ;
lin n5 = mkNum "cinco" "quince" "cincuenta" "quinientos" ;
lin n6 = {s = table {unit => "seis" ; teen => "dieciseís" ; ten => "sesenta" ; hundred => "seiscientos" ; veinti => "veinti" + "seís" } ; size = pl } ;
lin n7 = mkNum "siete" "diecisiete" "setenta" "setecientos" ;
lin n8 = mkNum "ocho" "dieciocho" "ochenta" "ochocientos" ;
lin n9 = mkNum "nueve" "diecinueve" "noventa" "novecientos" ;
lin pot01 = {s = table {unit => "uno" ; hundred => "cien" ; veinti => "veinti" + "uno" ; _ => "dummy"} ; size = sg} ;
lin pot0 d = d ;
lin pot110 =
{s = table {_ => "diez" } ; size = pl} ;
lin n2 =
{inh = mod ; s = table {{p1 = unit ; p2 = mod} => "dos" ; {p1 = unit ; p2 = unmod} => "dos" ; {p1 = unit ; p2 = conj} => "y" ++ "dos" ; {p1 = teen ; p2 = mod} => "doce" ; {p1 = teen ; p2 = unmod} => "doce" ; {p1 = teen ; p2 = conj} => "doce" ; {p1 = ten ; p2 = mod} => "veinti" ; {p1 = ten ; p2 = unmod} => "veinte" ; {p1 = ten ; p2 = conj} => "veinte" ; {p1 = hundred ; p2 = mod} => "doscientos" ; {p1 = hundred ; p2 = unmod} => "doscientos" ; {p1 = hundred ; p2 = conj} => "doscientos"}} ;
lin n3 =
{inh = conj ; s = table {{p1 = unit ; p2 = mod} => "tres" ; {p1 = unit ; p2 = unmod} => "tres" ; {p1 = unit ; p2 = conj} => "y" ++ "tres" ; {p1 = teen ; p2 = mod} => "trece" ; {p1 = teen ; p2 = unmod} => "trece" ; {p1 = teen ; p2 = conj} => "trece" ; {p1 = ten ; p2 = mod} => "treinta" ; {p1 = ten ; p2 = unmod} => "treinta" ; {p1 = ten ; p2 = conj} => "treinta" ; {p1 = hundred ; p2 = mod} => "trescientos" ; {p1 = hundred ; p2 = unmod} => "trescientos" ; {p1 = hundred ; p2 = conj} => "trescientos"}} ;
lin n4 =
{inh = conj ; s = table {{p1 = unit ; p2 = mod} => "cuatro" ; {p1 = unit ; p2 = unmod} => "cuatro" ; {p1 = unit ; p2 = conj} => "y" ++ "cuatro" ; {p1 = teen ; p2 = mod} => "catorce" ; {p1 = teen ; p2 = unmod} => "catorce" ; {p1 = teen ; p2 = conj} => "catorce" ; {p1 = ten ; p2 = mod} => "cuarenta" ; {p1 = ten ; p2 = unmod} => "cuarenta" ; {p1 = ten ; p2 = conj} => "cuarenta" ; {p1 = hundred ; p2 = mod} => "cuatrocientos" ; {p1 = hundred ; p2 = unmod} => "cuatrocientos" ; {p1 = hundred ; p2 = conj} => "cuatrocientos"}} ;
lin n5 =
{inh = conj ; s = table {{p1 = unit ; p2 = mod} => "cinco" ; {p1 = unit ; p2 = unmod} => "cinco" ; {p1 = unit ; p2 = conj} => "y" ++ "cinco" ; {p1 = teen ; p2 = mod} => "quince" ; {p1 = teen ; p2 = unmod} => "quince" ; {p1 = teen ; p2 = conj} => "quince" ; {p1 = ten ; p2 = mod} => "cincuenta" ; {p1 = ten ; p2 = unmod} => "cincuenta" ; {p1 = ten ; p2 = conj} => "cincuenta" ; {p1 = hundred ; p2 = mod} => "quinientos" ; {p1 = hundred ; p2 = unmod} => "quinientos" ; {p1 = hundred ; p2 = conj} => "quinientos"}} ;
lin n6 =
{inh = conj ; s = table {{p1 = unit ; p2 = mod} => "seis" ; {p1 = unit ; p2 = unmod} => "seis" ; {p1 = unit ; p2 = conj} => "y" ++ "seis" ; {p1 = teen ; p2 = mod} => "dieciseis" ; {p1 = teen ; p2 = unmod} => "dieciseis" ; {p1 = teen ; p2 = conj} => "dieciseis" ; {p1 = ten ; p2 = mod} => "sesenta" ; {p1 = ten ; p2 = unmod} => "sesenta" ; {p1 = ten ; p2 = conj} => "sesenta" ; {p1 = hundred ; p2 = mod} => "seiscientos" ; {p1 = hundred ; p2 = unmod} => "seiscientos" ; {p1 = hundred ; p2 = conj} => "seiscientos"}} ;
lin n7 =
{inh = conj ; s = table {{p1 = unit ; p2 = mod} => "siete" ; {p1 = unit ; p2 = unmod} => "siete" ; {p1 = unit ; p2 = conj} => "y" ++ "siete" ; {p1 = teen ; p2 = mod} => "diecisiete" ; {p1 = teen ; p2 = unmod} => "diecisiete" ; {p1 = teen ; p2 = conj} => "diecisiete" ; {p1 = ten ; p2 = mod} => "setenta" ; {p1 = ten ; p2 = unmod} => "setenta" ; {p1 = ten ; p2 = conj} => "setenta" ; {p1 = hundred ; p2 = mod} => "setecientos" ; {p1 = hundred ; p2 = unmod} => "setecientos" ; {p1 = hundred ; p2 = conj} => "setecientos"}} ;
lin n8 =
{inh = conj ; s = table {{p1 = unit ; p2 = mod} => "ocho" ; {p1 = unit ; p2 = unmod} => "ocho" ; {p1 = unit ; p2 = conj} => "y" ++ "ocho" ; {p1 = teen ; p2 = mod} => "dieciocho" ; {p1 = teen ; p2 = unmod} => "dieciocho" ; {p1 = teen ; p2 = conj} => "dieciocho" ; {p1 = ten ; p2 = mod} => "ochenta" ; {p1 = ten ; p2 = unmod} => "ochenta" ; {p1 = ten ; p2 = conj} => "ochenta" ; {p1 = hundred ; p2 = mod} => "ochocientos" ; {p1 = hundred ; p2 = unmod} => "ochocientos" ; {p1 = hundred ; p2 = conj} => "ochocientos"}} ;
lin n9 =
{inh = conj ; s = table {{p1 = unit ; p2 = mod} => "nueve" ; {p1 = unit ; p2 = unmod} => "nueve" ; {p1 = unit ; p2 = conj} => "y" ++ "nueve" ; {p1 = teen ; p2 = mod} => "diecinueve" ; {p1 = teen ; p2 = unmod} => "diecinueve" ; {p1 = teen ; p2 = conj} => "diecinueve" ; {p1 = ten ; p2 = mod} => "noventa" ; {p1 = ten ; p2 = unmod} => "noventa" ; {p1 = ten ; p2 = conj} => "noventa" ; {p1 = hundred ; p2 = mod} => "novecientos" ; {p1 = hundred ; p2 = unmod} => "novecientos" ; {p1 = hundred ; p2 = conj} => "novecientos"}} ;
lin pot01 =
{s = table {{p1 = unit ; p2 = mod} => "uno" ; {p1 = unit ; p2 = unmod} => "uno" ; {p1 = unit ; p2 = conj} => "y" ++ "uno" ; {p1 = teen ; p2 = mod} => "uno" ; {p1 = teen ; p2 = unmod} => "uno" ; {p1 = teen ; p2 = conj} => "y" ++ "uno" ; {p1 = ten ; p2 = mod} => "uno" ; {p1 = ten ; p2 = unmod} => "uno" ; {p1 = ten ; p2 = conj} => "y" ++ "uno" ; {p1 = hundred ; p2 = mod} => "ciento" ; {p1 = hundred ; p2 = unmod} => "cien" ; {p1 = hundred ; p2 = conj} => "y" ++ "uno"}} ;
lin pot0 d =
{s = table {{p1 = unit ; p2 = mod} => d.s ! {p1 = unit ; p2 = mod} ; {p1 = unit ; p2 = unmod} => d.s ! {p1 = unit ; p2 = unmod} ; {p1 = unit ; p2 = conj} => d.s ! {p1 = unit ; p2 = conj} ; {p1 = teen ; p2 = mod} => d.s ! {p1 = teen ; p2 = mod} ; {p1 = teen ; p2 = unmod} => d.s ! {p1 = teen ; p2 = unmod} ; {p1 = teen ; p2 = conj} => d.s ! {p1 = teen ; p2 = conj} ; {p1 = ten ; p2 = mod} => d.s ! {p1 = ten ; p2 = mod} ; {p1 = ten ; p2 = unmod} => d.s ! {p1 = ten ; p2 = unmod} ; {p1 = ten ; p2 = conj} => d.s ! {p1 = ten ; p2 = conj} ; {p1 = hundred ; p2 = mod} => d.s ! {p1 = hundred ; p2 = mod} ; {p1 = hundred ; p2 = unmod} => d.s ! {p1 = hundred ; p2 = unmod} ; {p1 = hundred ; p2 = conj} => d.s ! {p1 = hundred ; p2 = conj}}} ;
lin pot110 =
{s = "diez"} ;
lin pot111 =
{s = table {_ => "once" } ; size = pl} ;
{s = "once"} ;
lin pot1to19 d =
{s = table {_ => d.s ! teen } ; size = pl} ;
{s = d.s ! {p1 = teen ; p2 = unmod}} ;
lin pot0as1 n =
{s = table {indep => n.s ! unit ; attr => shorten (n.s ! unit) n.size }; size = n.size } ;
{s = n.s ! {p1 = unit ; p2 = unmod}} ;
lin pot1 d =
{s = table {_ => d.s ! ten } ; size = pl} ;
{s = d.s ! {p1 = ten ; p2 = unmod}} ;
lin pot1plus d e =
{s = table {indep => table {two => e.s ! veinti ; _ => d.s ! ten ++ "y" ++ e.s ! unit} ! d.size ; attr => table {two => accent (e.s ! veinti) e.size ; _ => d.s ! ten ++ "y" ++ (shorten (e.s ! unit) e.size)} ! d.size } ; size = pl} ;
{s = (d.s ! {p1 = ten ; p2 = mod}) ++ e.s ! {p1 = unit ; p2 = d.inh}} ;
lin pot1as2 n =
{s = table {f => n.s ! f } ; size = n.size} ;
{s = n.s} ;
lin pot2 d =
{s = table {_ => d.s ! hundred } ; size = pl} ;
{s = d.s ! {p1 = hundred ; p2 = unmod}} ;
lin pot2plus d e =
{s = table {f => table {sg => "ciento" ;
_ => d.s ! hundred } ! d.size ++ e.s ! f} ; size = pl} ;
{s = (d.s ! {p1 = hundred ; p2 = mod}) ++ e.s} ;
lin pot2as3 n =
{s = n.s ! indep } ;
{s = n.s} ;
lin pot3 n =
{s = table {sg => "mil" ; _ => n.s ! attr ++ "mil"} ! n.size} ;
{s = n.s ++ "mil"} ;
lin pot3plus n m =
{s = table {sg => "mil" ; _ => n.s ! attr ++ "mil"} ! n.size ++ m.s ! indep} ;
oper accent : Str -> Size -> Str = \s -> \sz ->
table {sg => "veintiún" ; _ => s} ! sz ;
oper shorten : Str -> Size -> Str = \s -> \sz ->
table {sg => "un" ; _ => s} ! sz ;
{s = n.s ++ "mil" ++ m.s} ;