mirror of
https://github.com/GrammaticalFramework/gf-core.git
synced 2026-05-20 16:42:51 -06:00
ported numerals to GF3 and encoded in UTF8; some problematic ones in todo
This commit is contained in:
80
examples/numerals/todo/irula.gf
Normal file
80
examples/numerals/todo/irula.gf
Normal file
@@ -0,0 +1,80 @@
|
||||
concrete irula of Numerals = {
|
||||
-- Irula
|
||||
-- include numerals.Abs.gf ;
|
||||
|
||||
oper bind : Str -> Str -> Str = \a -> \b -> a ++ b ;
|
||||
|
||||
oper
|
||||
vowel : Strs = strs {"o" ; "e" ; "a" ; "i" ; "u" ; "ä" ; "ö"} ;
|
||||
cons : Strs =
|
||||
strs {"b" ; "g" ; "d" ; "p" ; "t" ; "k" ; "l" ; "r" ; "m" ; "n" ; "s" ; "c"};
|
||||
oper adu : Str = "a" + pre {"du" ; "tt" / vowel} ;
|
||||
oper uru : Str = "u:" + pre {"r_u" ; "tti" / cons ; "tt"/ vowel} ;
|
||||
laks : Str = "lacca" + T ;
|
||||
ayira : Str = "a:yira" + T ;
|
||||
---- cavira : Str = variants {ayira ; "ca:vira" + T} ; ----BUG in Compute (AR 9/5/2005)
|
||||
cavira : Str = variants {"a:yira" + T ; "ca:vira" + T} ;
|
||||
|
||||
T : Str = pre {[] ; "tt" / vowel ; "tti" / cons} ;
|
||||
U : Str = pre {"u" ; [] / vowel } ;-- ; "ï" / cons} ;
|
||||
|
||||
oper LinDigit = {s : DForm => Str };
|
||||
oper LinS100 = {s : Place => Str };
|
||||
|
||||
param DForm = unit | ten | teen | hund | thou | thou2;
|
||||
param Place = p | lak ;
|
||||
|
||||
lincat Numeral = {s : Str} ;
|
||||
lincat Digit = LinDigit ;
|
||||
lincat Sub10 = LinDigit ;
|
||||
lincat Sub100 = LinS100 ;
|
||||
lincat Sub1000 = LinS100 ;
|
||||
lincat Sub1000000 = {s : Str} ;
|
||||
lin num x0 =
|
||||
{s = x0.s} ; -- TODO
|
||||
|
||||
oper mkN : Str -> Str -> Str -> Str -> Str -> LinDigit =
|
||||
\u -> \tn -> \t -> \h -> \a ->
|
||||
{s = table {unit => u ; teen => tn ; ten => t+adu ; hund => h+uru ; thou => a+ayira ; thou2 => a+ayira} };
|
||||
|
||||
lin n2 = mkN (variants {"ren.d.u" ; "ran.d.u"}) ("pannen.d."+U) "iruv" "eran" "ren.d." ;
|
||||
lin n3 = mkN "mu:nr_u" ("padimu:nr_"+U) "mupp" "munn" "mu:nr_" ;
|
||||
lin n4 = mkN "nä:lu" ("padanä:l"+U) "na:pp" "nä:n" "nä:l" ;
|
||||
lin n5 = mkN (variants {"anju" ; "anji"}) ("padananj"+U) "amb" "ayin" "anj" ;
|
||||
lin n6 = mkN "a:ru" ("padana:r_"+U) "ar_uv" "ar_a" "a:r_" ;
|
||||
lin n7 = mkN "e:l.u" ("padane:l."+U) "el.uv" "el.a" "e:l." ;
|
||||
lin n8 = mkN "et.t.u" ("padanet.t."+U) "emb" "et.t.un" "et.t." ;
|
||||
lin n9 = {s = table {unit => "ombadu" ; teen => "pattombad"+U ;
|
||||
ten => "ton.n."+uru ; hund => "tol.l."+ayira ;
|
||||
thou => "ombadan" + ayira ; thou2 => "ombadan" + ayira }};
|
||||
|
||||
oper ss : Str -> LinS100 = \s1 -> {s = table {p => s1 ; lak => bind s1 cavira }} ;
|
||||
|
||||
lin pot01 =
|
||||
{s = table {unit => "önr_u" ; ---- pre {[] ; "önr_u" / strs {[]}} ;
|
||||
---- equivalent by the sem. of pre. AR
|
||||
|
||||
thou => cavira ;
|
||||
thou2 => "or" + ayira ;
|
||||
hund => "n" + uru ;
|
||||
_ => "dummy"} };
|
||||
lin pot0 d = d ;
|
||||
lin pot110 = ss ("patt"+U) ;
|
||||
lin pot111 = ss ("padanon.n."+U) ;
|
||||
lin pot1to19 d = ss (d.s ! teen) ;
|
||||
lin pot0as1 n = {s = table {p => n.s ! unit ; lak => n.s ! thou } };
|
||||
lin pot1 d = ss (d.s ! ten) ;
|
||||
lin pot1plus d e =
|
||||
{s = table {p => bind (d.s ! ten) (e.s ! unit) ;
|
||||
lak => bind (d.s ! ten) (e.s ! thou2)}} ;
|
||||
lin pot1as2 n = n ;
|
||||
lin pot2 d =
|
||||
{s = table {p => d.s ! hund ; lak => bind (d.s ! unit) laks }};
|
||||
lin pot2plus d e =
|
||||
{s = table {p => bind (d.s ! hund) (e.s ! p) ;
|
||||
lak => bind (bind (d.s ! unit) laks) (e.s ! lak)}} ;
|
||||
lin pot2as3 n = {s = n.s ! p} ;
|
||||
lin pot3 n = {s = n.s ! lak } ;
|
||||
lin pot3plus n m = {s = bind (n.s ! lak) (m.s ! p) } ;
|
||||
|
||||
}
|
||||
75
examples/numerals/todo/kodagu.gf
Normal file
75
examples/numerals/todo/kodagu.gf
Normal file
@@ -0,0 +1,75 @@
|
||||
concrete kodagu of Numerals = {
|
||||
-- Kodagu
|
||||
-- include numerals.Abs.gf ;
|
||||
|
||||
oper bind : Str -> Str -> Str = \a -> \b -> a ++ b ;
|
||||
|
||||
oper
|
||||
vowel : Strs = strs {"o" ; "e" ; "a" ; "i" ; "u" ; "ï" ; "ë"} ;
|
||||
cons : Strs =
|
||||
strs {"b" ; "g" ; "d" ; "p" ; "t" ; "k" ; "l" ; "r" ; "m" ; "n" ; "s" ; "ñ"} ;
|
||||
|
||||
oper adi : Str = "a" + pre {"dï" ; "tt" / vowel} ;
|
||||
oper uri : Str = "u:" + pre {"rï" ; "yt.a" / cons ; "yt."/ vowel} ;
|
||||
laks : Str = "laks.a" + T ;
|
||||
ayra : Str = "a:yra" + T ;
|
||||
|
||||
T : Str = pre {[] ; "t" / vowel ; "t" / cons} ;
|
||||
I : Str = pre {"ï" ; [] / vowel } ;-- ; "ï" / cons} ;
|
||||
|
||||
oper LinDigit = {s : DForm => Str };
|
||||
oper LinS100 = {s : Place => Str };
|
||||
|
||||
param DForm = unit | ten | teen | hund | thou;
|
||||
param Place = p | lak ;
|
||||
|
||||
lincat Numeral = {s : Str} ;
|
||||
lincat Digit = LinDigit ;
|
||||
lincat Sub10 = LinDigit ;
|
||||
lincat Sub100 = LinS100 ;
|
||||
lincat Sub1000 = LinS100 ;
|
||||
lincat Sub1000000 = {s : Str} ;
|
||||
lin num x0 =
|
||||
{s = x0.s} ; -- TODO
|
||||
|
||||
oper mkN : Str -> Str -> Str -> Str -> Str -> LinDigit =
|
||||
\u -> \tn -> \t -> \h -> \a ->
|
||||
{s = table {unit => u ; teen => tn ; ten => t+adi ; hund => h+uri ; thou => a+ayra} };
|
||||
|
||||
lin n2 = mkN "dan.d.ï" ("panneran.d."+I) "iruv" "inn" "i:r" ;
|
||||
lin n3 = mkN "mu:ndï" ("padïmu:nd"+I) "nupp" "mu:n" "mu:v" ;
|
||||
lin n4 = mkN "na:lï" ("padïna:l"+I) "na:p" "na:n" "na:l" ;
|
||||
lin n5 = mkN "an~ji" "padïnan~ji" "aymb" "aññ" "ay" ;
|
||||
lin n6 = mkN "a:rï" ("padïna:r"+I) "arup" "a:rïn" "a:r" ;
|
||||
lin n7 = mkN "ë:lï" ("padïnë:l"+I) "ël.up" "ë:l.n" "ë:l." ;
|
||||
lin n8 = mkN "ët.t.ï" ("padïnët.t."+I) "ëmb" "et.n" "et.t." ;
|
||||
lin n9 = mkN "oymbadï" ("pattoymbad"+I) "tomb" "oymbayn" "oymbad" ;
|
||||
|
||||
oper ss : Str -> LinS100 = \s1 -> {s = table {p => s1 ; lak => bind s1 ayra }} ;
|
||||
|
||||
lin pot01 =
|
||||
{s = table {unit => "ondï" ; ---- pre {[] ; "ondï" / strs {[]}} ;
|
||||
---- equivalent by the sem. of pre. AR
|
||||
thou => variants {ayra ; "o:r" + ayra} ;
|
||||
hund => "n" + uri ;
|
||||
_ => "dummy"} };
|
||||
lin pot0 d = d ;
|
||||
lin pot110 = ss ("patt"+I) ;
|
||||
lin pot111 = ss ("pannond"+I) ;
|
||||
lin pot1to19 d = ss (d.s ! teen) ;
|
||||
lin pot0as1 n = {s = table {p => n.s ! unit ; lak => n.s ! thou } };
|
||||
lin pot1 d = ss (d.s ! ten) ;
|
||||
lin pot1plus d e =
|
||||
{s = table {p => bind (d.s ! ten) (e.s ! unit) ;
|
||||
lak => bind (d.s ! ten) (e.s ! thou)}} ;
|
||||
lin pot1as2 n = n ;
|
||||
lin pot2 d =
|
||||
{s = table {p => d.s ! hund ; lak => bind (d.s ! unit) laks }};
|
||||
lin pot2plus d e =
|
||||
{s = table {p => bind (d.s ! hund) (e.s ! p) ;
|
||||
lak => bind (bind (d.s ! unit) laks) (e.s ! lak)}} ;
|
||||
lin pot2as3 n = {s = n.s ! p} ;
|
||||
lin pot3 n = {s = n.s ! lak } ;
|
||||
lin pot3plus n m = {s = bind (n.s ! lak) (m.s ! p) } ;
|
||||
|
||||
}
|
||||
205
examples/numerals/todo/sanskrit.gf
Normal file
205
examples/numerals/todo/sanskrit.gf
Normal file
@@ -0,0 +1,205 @@
|
||||
concrete sanskrit of Numerals = {
|
||||
flags coding = utf8 ;
|
||||
-- include numerals.Abs.gf ;
|
||||
-- flags coding=devanagari ;
|
||||
|
||||
param DForm = unit | ten ;
|
||||
param DSize = sg | r2 | r3 | r4 | r5 | r6 | r7 | r8 | r9 ;
|
||||
param Size = sing | dual | less10 | more100 | more10 ;
|
||||
|
||||
|
||||
oper
|
||||
vowel : Strs = strs {"अ" ; "ए" ; "इ" ; "उ" ; "ओ"} ;
|
||||
dental : Strs = strs {"न"; "त"; "द"} ;
|
||||
labial : Strs = strs {"म"; "प"; "ब"} ;
|
||||
velar : Strs = strs {"ग़"; "क"; "ग"} ;
|
||||
affricate : Strs = strs {"ञ" ; "च"; "ज" } ;
|
||||
retroflex : Strs = strs {"ण" ; "ट" ; "ड"; "ष"} ;
|
||||
sibilant : Strs = strs {"श" ; "स"; "ह"; "र"} ; -- r also
|
||||
unvoiced : Strs = strs {"क"; "प"; "च"; "त"} ;
|
||||
|
||||
oper
|
||||
S : Str = pre {"ष" ; "ट" / unvoiced ; "ड" / vowel } ;
|
||||
as : Str = pre {"ओ" ; "अस" / unvoiced ; "अः" / sibilant } ;
|
||||
i : Str = pre {"इ" ; "य" / vowel } ;
|
||||
am : Str = "अ" + (pre {"म" ; "न" / dental ; "ग़" / velar ; "ञ" / affricate ; "ण" / retroflex ; "ं" / sibilant}) ;
|
||||
a_ : Str = pre { "आ" ; "अ" / vowel } ; -- shortened if a follows (no other vowel occur initally)
|
||||
r : Str = pre {"र" ; "स" / unvoiced ; "च" / affricate ; "ः" / sibilant } ;
|
||||
t : Str = pre {"त" ; "च" / affricate ; "ट" / retroflex } ;
|
||||
|
||||
|
||||
LinDigit = {s : DForm => Str ; size : DSize} ;
|
||||
|
||||
lincat Numeral = { s : Str } ;
|
||||
lincat Digit = LinDigit ;
|
||||
lincat Sub10 = {s : DForm => Str ; size : DSize} ;
|
||||
lincat Sub100 = {s : Str ; s2 : Str ; size : Size} ;
|
||||
lincat Sub1000 = {s : Str ; s2 : Str ; size : Size } ;
|
||||
lincat Sub1000000 = { s : Str } ;
|
||||
|
||||
lin num x0 =
|
||||
{s = [] ++ x0.s ++ []} ; -- the Devanagari environment
|
||||
|
||||
oper mkNum : Str -> Str -> DSize -> LinDigit =
|
||||
\u -> \t -> \sz ->
|
||||
{s = table {unit => u ; ten => t } ; size = sz } ;
|
||||
|
||||
-- lin n1 mkNum "एक" daca ... ;
|
||||
lin n2 = mkNum "द्व" viMcati r2 ;
|
||||
lin n3 = mkNum ("त्र" + i) triMcat r3 ;
|
||||
lin n4 = mkNum ("चतु" + r) catvariMcat r4 ;
|
||||
lin n5 = mkNum "पञ्च" pancacat r5 ;
|
||||
lin n6 = mkNum ("ष" + S) SaSTi r6 ;
|
||||
lin n7 = mkNum "सप्त" saptati r7 ;
|
||||
lin n8 = mkNum "अष्ट" aciti r8;
|
||||
lin n9 = mkNum "नव" navati r9 ;
|
||||
|
||||
oper daca : Str = "दश" ;
|
||||
oper viMcati : Str = "विंशत" + i;
|
||||
oper triMcat : Str = "त्रिंश" + t;
|
||||
oper catvariMcat : Str = "चत्वारिंश" + t ;
|
||||
oper pancacat : Str = "पञ्चाश" + t;
|
||||
oper SaSTi : Str = "षष्ट" + i;
|
||||
oper saptati : Str = "सप्तत" + i ;
|
||||
oper aciti : Str = "अशीत" + i ;
|
||||
oper navati : Str = "नवत" + i ;
|
||||
|
||||
oper mkR1 : Str -> Str -> DSize => Str = \a1 -> \a2 -> table {
|
||||
sg => a1 + daca ;
|
||||
r2 => a2 + viMcati ;
|
||||
r3 => a2 + triMcat ;
|
||||
r4 => a2 + catvariMcat ;
|
||||
r5 => a2 + pancacat ;
|
||||
r6 => a2 + SaSTi ;
|
||||
r7 => a2 + saptati ;
|
||||
r8 => a2 + aciti ;
|
||||
r9 => a2 + navati
|
||||
} ;
|
||||
|
||||
oper mkR : Str -> DSize => Str = \a1 -> table {
|
||||
sg => a1 + daca ;
|
||||
r2 => a1 + viMcati ;
|
||||
r3 => a1 + triMcat ;
|
||||
r4 => a1 + catvariMcat ;
|
||||
r5 => a1 + pancacat ;
|
||||
r6 => a1 + SaSTi ;
|
||||
r7 => a1 + saptati ;
|
||||
r8 => a1 + aciti ;
|
||||
r9 => a1 + navati
|
||||
} ;
|
||||
|
||||
oper mkR9 : Str -> DSize => Str = \a1 -> table {
|
||||
sg => variants {a1 + daca ; "ऊना" + viMcati} ;
|
||||
r2 => variants {a1 + viMcati ; "ऊना" + triMcat } ;
|
||||
r3 => variants {a1 + triMcat ; "ऊना" + catvariMcat } ;
|
||||
r4 => variants {a1 + catvariMcat ; "ऊना" + pancacat } ;
|
||||
r5 => variants {a1 + pancacat ; "ऊना" + SaSTi } ;
|
||||
r6 => variants {a1 + SaSTi ; "ऊना" + saptati } ;
|
||||
r7 => variants {a1 + saptati ; "ऊना" + aciti } ;
|
||||
r8 => variants {a1 + aciti ; "ऊना" + navati } ;
|
||||
r9 => variants {a1 + navati ; "ऊना" + cata }
|
||||
} ;
|
||||
|
||||
oper mkR3 : Str -> Str -> DSize => Str = \a1 -> \a2 -> table {
|
||||
sg => a1 + daca ;
|
||||
r2 => a1 + viMcati ;
|
||||
r3 => a1 + triMcat ;
|
||||
r4 => variants { a2 + catvariMcat ; a1 + catvariMcat } ;
|
||||
r5 => variants { a2 + pancacat ; a1 + pancacat } ;
|
||||
r6 => variants { a2 + SaSTi ; a1 + SaSTi } ;
|
||||
r7 => variants { a2 + saptati ; a1 + saptati } ;
|
||||
r8 => a2 + aciti ;
|
||||
r9 => variants { a2 + navati ; a1 + navati }
|
||||
} ;
|
||||
|
||||
oper mkR6 : Str -> DSize => Str = \a1 -> table {
|
||||
sg => "षोडश" ;
|
||||
r2 => a1 + viMcati ;
|
||||
r3 => a1 + triMcat ;
|
||||
r4 => a1 + catvariMcat ;
|
||||
r5 => a1 + pancacat ;
|
||||
r6 => a1 + SaSTi ;
|
||||
r7 => a1 + saptati ;
|
||||
r8 => a1 + aciti ;
|
||||
r9 => "षोण्णवत" + i
|
||||
} ;
|
||||
|
||||
oper rows : DSize => DSize => Str = table {
|
||||
sg => mkR1 ("एक" + a_) eka ;
|
||||
r2 => mkR3 ("द्व" + a_) ("द्व" + i) ;
|
||||
r3 => mkR3 ("त्रय" + as) ("त्र" + i) ;
|
||||
r4 => mkR ("चतु" + r) ;
|
||||
r5 => mkR "पञ्च" ;
|
||||
r6 => mkR6 ("ष" + S) ;
|
||||
r7 => mkR "सप्त" ;
|
||||
r8 => mkR3 ("अष्ट" + a_) "अष्ट" ;
|
||||
r9 => mkR9 "नव"
|
||||
} ;
|
||||
|
||||
oper eka : Str = "एक" ;
|
||||
|
||||
lin pot01 = {s = table {unit => eka ; ten => daca } ; size = sg} ;
|
||||
lin pot0 d = d ;
|
||||
lin pot110 = {s = daca ; s2 = variants { ayuta ; mksahasra2 more10 daca }; size = more10} ;
|
||||
lin pot111 = {s = rows ! sg ! sg ;
|
||||
s2 = mkayutamore eka sg eka sg ;
|
||||
size = more10} ;
|
||||
lin pot1to19 d =
|
||||
{s = rows ! d.size ! sg ;
|
||||
s2 = mkayutamore eka sg (d.s ! unit) d.size;
|
||||
size = more10} ;
|
||||
lin pot0as1 n = {s = n.s ! unit ;
|
||||
s2 = mksahasra n.size (n.s ! unit) ;
|
||||
size = table {sg => sing ; r2 => dual ; _ => less10} ! n.size };
|
||||
lin pot1 d = {s = d.s ! ten ;
|
||||
s2 = variants {mkayuta d.size (d.s ! unit) ; mksahasra2 more10 (d.s ! ten) } ;
|
||||
size = more10} ;
|
||||
lin pot1plus d e = {s = rows ! e.size ! d.size ;
|
||||
s2 = mkayutamore (d.s ! unit) d.size (e.s ! unit) e.size ;
|
||||
size = more10} ;
|
||||
lin pot1as2 n = {s = n.s ; s2 = n.s2 ; size = n.size } ;
|
||||
lin pot2 d =
|
||||
{s = mkcata d.size (d.s ! unit);
|
||||
s2 = mklakh d.size (d.s ! unit) ;
|
||||
size = more100} ;
|
||||
|
||||
lin pot2plus d e =
|
||||
{s = hundredplusunit (mkcata d.size (d.s ! unit)) e.s ;
|
||||
s2 = lakhplus (mklakh d.size (d.s ! unit)) e.s2 ;
|
||||
size = more100} ;
|
||||
|
||||
lin pot2as3 n = {s = n.s } ;
|
||||
lin pot3 n =
|
||||
{s = table {more10 => n.s2 ;
|
||||
_ => mksahasra2 n.size n.s } ! n.size} ;
|
||||
|
||||
lin pot3plus n m =
|
||||
{s = p3plus (table {more10 => n.s2 ; _ => mksahasra2 n.size n.s } ! n.size) n.size m.s m.size} ;
|
||||
|
||||
oper mksahasra2 : Size -> Str -> Str = \sz -> \s -> table {sing => "सहस्र" + am ; dual => "द्वे" ++ "सहस्रे" ; _ => s ++ ("सहस्राण" + i)} ! sz ;
|
||||
oper mksahasra : DSize -> Str -> Str = \sz -> \s -> table {sg => "सहस्र" + am ; r2 => "द्वे" ++ "सहस्रे" ; _ => s ++ ("सहस्राण" + i)} ! sz ;
|
||||
oper mkcata : DSize -> Str -> Str = \sz -> \s -> table {sg => cata ; r2 => variants {"द्वे" ++ "शते" ; "द्वी" + cata }; _ => s ++ ("शतान" + i)} ! sz ;
|
||||
oper mklakh : DSize -> Str -> Str = \sz -> \s -> table {sg => "लक्ष" + am ; r2 => "द्वे" ++ "लक्षे" ; _ => s ++ ("लक्षाण" + i) } ! sz ;
|
||||
oper mklakh2 : Size -> Str -> Str = \sz -> \s -> table {sing => "लक्ष" + am ; dual => "द्वे" ++ "लक्षे" ; _ => s ++ ("लक्षाण" + i) } ! sz ;
|
||||
|
||||
oper mkayuta : DSize -> Str -> Str = \sz -> \s -> table {sg => "अयुत" + am ; r2 => "द्वे" ++ "अयुते" ; _ => s ++ ("अयुतान" + i)} ! sz ;
|
||||
|
||||
oper adhikam : Str = "अधिक" + am ;
|
||||
oper ca : Str = "च" ;
|
||||
oper ayuta : Str = "अयुत" + am ;
|
||||
oper cata : Str = "शत" + am ;
|
||||
|
||||
oper hundredplusunit : Str -> Str -> Str = \hun -> \unit ->
|
||||
variants {hun ++ unit ++ "च" ; unit ++ adhikam ++ hun};
|
||||
|
||||
oper lakhplus : Str -> Str -> Str = \lakh -> \low -> lakh ++ low ++ ca ;
|
||||
|
||||
oper p3plus : Str -> Size -> Str -> Size -> Str = \b -> \bs -> \s -> \ss -> table {more10 => table {more10 => b ++ ca ++ s ++ ca ; _ => s ++ adhikam ++ b} ! ss;
|
||||
_ => table {more10 => b ++ s ++ ca ; _ => s ++ b} ! ss } ! bs;
|
||||
|
||||
mkayutamore : Str -> DSize -> Str -> DSize -> Str = \d -> \ds -> \e -> \es ->
|
||||
variants {(mkayuta ds d) ++ (mksahasra es e) ;
|
||||
mklakh2 more10 (rows ! es ! ds) } ;
|
||||
|
||||
|
||||
}
|
||||
204
examples/numerals/todo/sanskritTranslit.gf
Normal file
204
examples/numerals/todo/sanskritTranslit.gf
Normal file
@@ -0,0 +1,204 @@
|
||||
concrete sanskrit of Numerals = {
|
||||
-- include numerals.Abs.gf ;
|
||||
-- flags coding=devanagari ;
|
||||
|
||||
param DForm = unit | ten ;
|
||||
param DSize = sg | r2 | r3 | r4 | r5 | r6 | r7 | r8 | r9 ;
|
||||
param Size = sing | dual | less10 | more100 | more10 ;
|
||||
|
||||
|
||||
oper
|
||||
vowel : Strs = strs {"a" ; "e" ; "i" ; "u" ; "o"} ;
|
||||
dental : Strs = strs {"n"; "t"; "d"} ;
|
||||
labial : Strs = strs {"m"; "p"; "b"} ;
|
||||
velar : Strs = strs {"G"; "k"; "g"} ;
|
||||
affricate : Strs = strs {"ñ" ; "c"; "j" } ;
|
||||
retroflex : Strs = strs {"N" ; "T" ; "D"; "S"} ;
|
||||
sibilant : Strs = strs {"ç" ; "s"; "h"; "r"} ; -- r also
|
||||
unvoiced : Strs = strs {"k"; "p"; "c"; "t"} ;
|
||||
|
||||
oper
|
||||
S : Str = pre {"S" ; "T" / unvoiced ; "D" / vowel } ;
|
||||
as : Str = pre {"o" ; "as" / unvoiced ; "a;" / sibilant } ;
|
||||
i : Str = pre {"i" ; "y" / vowel } ;
|
||||
am : Str = "a" + (pre {"m" ; "n" / dental ; "G" / velar ; "ñ" / affricate ; "N" / retroflex ; "M" / sibilant}) ;
|
||||
a_ : Str = pre { "a:" ; "a" / vowel } ; -- shortened if a follows (no other vowel occur initally)
|
||||
r : Str = pre {"r" ; "s" / unvoiced ; "c" / affricate ; ";" / sibilant } ;
|
||||
t : Str = pre {"t" ; "c" / affricate ; "T" / retroflex } ;
|
||||
|
||||
|
||||
LinDigit = {s : DForm => Str ; size : DSize} ;
|
||||
|
||||
lincat Numeral = { s : Str } ;
|
||||
lincat Digit = LinDigit ;
|
||||
lincat Sub10 = {s : DForm => Str ; size : DSize} ;
|
||||
lincat Sub100 = {s : Str ; s2 : Str ; size : Size} ;
|
||||
lincat Sub1000 = {s : Str ; s2 : Str ; size : Size } ;
|
||||
lincat Sub1000000 = { s : Str } ;
|
||||
|
||||
lin num x0 =
|
||||
{s = "/&" ++ x0.s ++ "&/"} ; -- the Devanagari environment
|
||||
|
||||
oper mkNum : Str -> Str -> DSize -> LinDigit =
|
||||
\u -> \t -> \sz ->
|
||||
{s = table {unit => u ; ten => t } ; size = sz } ;
|
||||
|
||||
-- lin n1 mkNum "eka" daca ... ;
|
||||
lin n2 = mkNum "dva" viMcati r2 ;
|
||||
lin n3 = mkNum ("tr" + i) triMcat r3 ;
|
||||
lin n4 = mkNum ("catu" + r) catvariMcat r4 ;
|
||||
lin n5 = mkNum "pañca" pancacat r5 ;
|
||||
lin n6 = mkNum ("Sa" + S) SaSTi r6 ;
|
||||
lin n7 = mkNum "sapta" saptati r7 ;
|
||||
lin n8 = mkNum "aSTa" aciti r8;
|
||||
lin n9 = mkNum "nava" navati r9 ;
|
||||
|
||||
oper daca : Str = "daça" ;
|
||||
oper viMcati : Str = "viMçat" + i;
|
||||
oper triMcat : Str = "triMça" + t;
|
||||
oper catvariMcat : Str = "catva:riMça" + t ;
|
||||
oper pancacat : Str = "pañca:ça" + t;
|
||||
oper SaSTi : Str = "SaST" + i;
|
||||
oper saptati : Str = "saptat" + i ;
|
||||
oper aciti : Str = "açi:t" + i ;
|
||||
oper navati : Str = "navat" + i ;
|
||||
|
||||
oper mkR1 : Str -> Str -> DSize => Str = \a1 -> \a2 -> table {
|
||||
sg => a1 + daca ;
|
||||
r2 => a2 + viMcati ;
|
||||
r3 => a2 + triMcat ;
|
||||
r4 => a2 + catvariMcat ;
|
||||
r5 => a2 + pancacat ;
|
||||
r6 => a2 + SaSTi ;
|
||||
r7 => a2 + saptati ;
|
||||
r8 => a2 + aciti ;
|
||||
r9 => a2 + navati
|
||||
} ;
|
||||
|
||||
oper mkR : Str -> DSize => Str = \a1 -> table {
|
||||
sg => a1 + daca ;
|
||||
r2 => a1 + viMcati ;
|
||||
r3 => a1 + triMcat ;
|
||||
r4 => a1 + catvariMcat ;
|
||||
r5 => a1 + pancacat ;
|
||||
r6 => a1 + SaSTi ;
|
||||
r7 => a1 + saptati ;
|
||||
r8 => a1 + aciti ;
|
||||
r9 => a1 + navati
|
||||
} ;
|
||||
|
||||
oper mkR9 : Str -> DSize => Str = \a1 -> table {
|
||||
sg => variants {a1 + daca ; "u:na:" + viMcati} ;
|
||||
r2 => variants {a1 + viMcati ; "u:na:" + triMcat } ;
|
||||
r3 => variants {a1 + triMcat ; "u:na:" + catvariMcat } ;
|
||||
r4 => variants {a1 + catvariMcat ; "u:na:" + pancacat } ;
|
||||
r5 => variants {a1 + pancacat ; "u:na:" + SaSTi } ;
|
||||
r6 => variants {a1 + SaSTi ; "u:na:" + saptati } ;
|
||||
r7 => variants {a1 + saptati ; "u:na:" + aciti } ;
|
||||
r8 => variants {a1 + aciti ; "u:na:" + navati } ;
|
||||
r9 => variants {a1 + navati ; "u:na:" + cata }
|
||||
} ;
|
||||
|
||||
oper mkR3 : Str -> Str -> DSize => Str = \a1 -> \a2 -> table {
|
||||
sg => a1 + daca ;
|
||||
r2 => a1 + viMcati ;
|
||||
r3 => a1 + triMcat ;
|
||||
r4 => variants { a2 + catvariMcat ; a1 + catvariMcat } ;
|
||||
r5 => variants { a2 + pancacat ; a1 + pancacat } ;
|
||||
r6 => variants { a2 + SaSTi ; a1 + SaSTi } ;
|
||||
r7 => variants { a2 + saptati ; a1 + saptati } ;
|
||||
r8 => a2 + aciti ;
|
||||
r9 => variants { a2 + navati ; a1 + navati }
|
||||
} ;
|
||||
|
||||
oper mkR6 : Str -> DSize => Str = \a1 -> table {
|
||||
sg => "SoDaça" ;
|
||||
r2 => a1 + viMcati ;
|
||||
r3 => a1 + triMcat ;
|
||||
r4 => a1 + catvariMcat ;
|
||||
r5 => a1 + pancacat ;
|
||||
r6 => a1 + SaSTi ;
|
||||
r7 => a1 + saptati ;
|
||||
r8 => a1 + aciti ;
|
||||
r9 => "SoNNavat" + i
|
||||
} ;
|
||||
|
||||
oper rows : DSize => DSize => Str = table {
|
||||
sg => mkR1 ("ek" + a_) eka ;
|
||||
r2 => mkR3 ("dv" + a_) ("dv" + i) ;
|
||||
r3 => mkR3 ("tray" + as) ("tr" + i) ;
|
||||
r4 => mkR ("catu" + r) ;
|
||||
r5 => mkR "pañca" ;
|
||||
r6 => mkR6 ("Sa" + S) ;
|
||||
r7 => mkR "sapta" ;
|
||||
r8 => mkR3 ("aST" + a_) "aSTa" ;
|
||||
r9 => mkR9 "nava"
|
||||
} ;
|
||||
|
||||
oper eka : Str = "eka" ;
|
||||
|
||||
lin pot01 = {s = table {unit => eka ; ten => daca } ; size = sg} ;
|
||||
lin pot0 d = d ;
|
||||
lin pot110 = {s = daca ; s2 = variants { ayuta ; mksahasra2 more10 daca }; size = more10} ;
|
||||
lin pot111 = {s = rows ! sg ! sg ;
|
||||
s2 = mkayutamore eka sg eka sg ;
|
||||
size = more10} ;
|
||||
lin pot1to19 d =
|
||||
{s = rows ! d.size ! sg ;
|
||||
s2 = mkayutamore eka sg (d.s ! unit) d.size;
|
||||
size = more10} ;
|
||||
lin pot0as1 n = {s = n.s ! unit ;
|
||||
s2 = mksahasra n.size (n.s ! unit) ;
|
||||
size = table {sg => sing ; r2 => dual ; _ => less10} ! n.size };
|
||||
lin pot1 d = {s = d.s ! ten ;
|
||||
s2 = variants {mkayuta d.size (d.s ! unit) ; mksahasra2 more10 (d.s ! ten) } ;
|
||||
size = more10} ;
|
||||
lin pot1plus d e = {s = rows ! e.size ! d.size ;
|
||||
s2 = mkayutamore (d.s ! unit) d.size (e.s ! unit) e.size ;
|
||||
size = more10} ;
|
||||
lin pot1as2 n = {s = n.s ; s2 = n.s2 ; size = n.size } ;
|
||||
lin pot2 d =
|
||||
{s = mkcata d.size (d.s ! unit);
|
||||
s2 = mklakh d.size (d.s ! unit) ;
|
||||
size = more100} ;
|
||||
|
||||
lin pot2plus d e =
|
||||
{s = hundredplusunit (mkcata d.size (d.s ! unit)) e.s ;
|
||||
s2 = lakhplus (mklakh d.size (d.s ! unit)) e.s2 ;
|
||||
size = more100} ;
|
||||
|
||||
lin pot2as3 n = {s = n.s } ;
|
||||
lin pot3 n =
|
||||
{s = table {more10 => n.s2 ;
|
||||
_ => mksahasra2 n.size n.s } ! n.size} ;
|
||||
|
||||
lin pot3plus n m =
|
||||
{s = p3plus (table {more10 => n.s2 ; _ => mksahasra2 n.size n.s } ! n.size) n.size m.s m.size} ;
|
||||
|
||||
oper mksahasra2 : Size -> Str -> Str = \sz -> \s -> table {sing => "sahasr" + am ; dual => "dve" ++ "sahasre" ; _ => s ++ ("sahasra:N" + i)} ! sz ;
|
||||
oper mksahasra : DSize -> Str -> Str = \sz -> \s -> table {sg => "sahasr" + am ; r2 => "dve" ++ "sahasre" ; _ => s ++ ("sahasra:N" + i)} ! sz ;
|
||||
oper mkcata : DSize -> Str -> Str = \sz -> \s -> table {sg => cata ; r2 => variants {"dve" ++ "çate" ; "dvi:" + cata }; _ => s ++ ("çata:n" + i)} ! sz ;
|
||||
oper mklakh : DSize -> Str -> Str = \sz -> \s -> table {sg => "lakS" + am ; r2 => "dve" ++ "lakSe" ; _ => s ++ ("lakSa:N" + i) } ! sz ;
|
||||
oper mklakh2 : Size -> Str -> Str = \sz -> \s -> table {sing => "lakS" + am ; dual => "dve" ++ "lakSe" ; _ => s ++ ("lakSa:N" + i) } ! sz ;
|
||||
|
||||
oper mkayuta : DSize -> Str -> Str = \sz -> \s -> table {sg => "ayut" + am ; r2 => "dve" ++ "ayute" ; _ => s ++ ("ayuta:n" + i)} ! sz ;
|
||||
|
||||
oper adhikam : Str = "adHik" + am ;
|
||||
oper ca : Str = "ca" ;
|
||||
oper ayuta : Str = "ayut" + am ;
|
||||
oper cata : Str = "çat" + am ;
|
||||
|
||||
oper hundredplusunit : Str -> Str -> Str = \hun -> \unit ->
|
||||
variants {hun ++ unit ++ "ca" ; unit ++ adhikam ++ hun};
|
||||
|
||||
oper lakhplus : Str -> Str -> Str = \lakh -> \low -> lakh ++ low ++ ca ;
|
||||
|
||||
oper p3plus : Str -> Size -> Str -> Size -> Str = \b -> \bs -> \s -> \ss -> table {more10 => table {more10 => b ++ ca ++ s ++ ca ; _ => s ++ adhikam ++ b} ! ss;
|
||||
_ => table {more10 => b ++ s ++ ca ; _ => s ++ b} ! ss } ! bs;
|
||||
|
||||
mkayutamore : Str -> DSize -> Str -> DSize -> Str = \d -> \ds -> \e -> \es ->
|
||||
variants {(mkayuta ds d) ++ (mksahasra es e) ;
|
||||
mklakh2 more10 (rows ! es ! ds) } ;
|
||||
|
||||
|
||||
}
|
||||
72
examples/numerals/todo/thai.gf
Normal file
72
examples/numerals/todo/thai.gf
Normal file
@@ -0,0 +1,72 @@
|
||||
concrete thai of Numerals = {
|
||||
-- include numerals.Abs.gf ;
|
||||
|
||||
-- Thai transliteration, produces thaiU.gf by GF/Text/Thai.hs
|
||||
-- AR 28/12/2006
|
||||
|
||||
-- flags coding=utf8 ;
|
||||
|
||||
lincat
|
||||
Numeral = {s : Str} ;
|
||||
Digit = {s : DForm => Str} ;
|
||||
Sub10 = {s : DForm => Str} ;
|
||||
Sub100 = {s : NForm => Str} ;
|
||||
Sub1000 = {s : NForm => Str} ;
|
||||
Sub1000000 = {s : Str} ;
|
||||
|
||||
lin
|
||||
num x = x ;
|
||||
|
||||
pot01 = mkNum "hnvg" "hnvg" "eOSd" ;
|
||||
|
||||
n2 = mkNum "sOg" "yi:T1" "sOg" ;
|
||||
n3 = regNum "sa:m" ;
|
||||
n4 = regNum "si:T1" ; -- T1 = E48 '
|
||||
n5 = regNum "hT2a:" ; -- T2 = E49 9
|
||||
n6 = regNum "ho?k" ;
|
||||
n7 = regNum "ecSd" ; -- S = E47 w
|
||||
n8 = regNum "e'pd" ;
|
||||
n9 = regNum "eka:" ;
|
||||
|
||||
|
||||
pot0 d = d ;
|
||||
|
||||
pot110 = {s = sip} ;
|
||||
pot111 = {s = table {
|
||||
Unit => ["sib eOSd"] ;
|
||||
Thousand => ["hnvg hmv:T1n hnvg p2an"]
|
||||
}
|
||||
} ;
|
||||
pot1to19 d = {s = table {
|
||||
Unit => "sib" ++ d.s ! After ;
|
||||
Thousand => ["hnvg hmv:T1n"] ++ d.s ! Indep ++ "p2an"
|
||||
}
|
||||
} ;
|
||||
pot0as1 d = {s = \\n => d.s ! Indep ++ phan ! n} ;
|
||||
pot1 d = {s = \\n => d.s ! ModTen ++ sip ! n} ;
|
||||
pot1plus d e = {
|
||||
s = \\n => d.s ! ModTen ++ sip ! n ++ e.s ! After ++ phan ! n
|
||||
} ;
|
||||
pot1as2 n = n ;
|
||||
pot2 d = {s = \\n => d.s ! Indep ++ roy ! n} ;
|
||||
pot2plus d e = {s = \\n => d.s ! Indep ++ roy ! n ++ e.s ! n} ;
|
||||
pot2as3 n = {s = n.s ! Unit} ;
|
||||
pot3 n = {s = n.s ! Thousand} ;
|
||||
pot3plus n m = {s = n.s ! Thousand ++ m.s ! Unit} ;
|
||||
|
||||
param
|
||||
DForm = Indep | ModTen | After ;
|
||||
NForm = Unit | Thousand ;
|
||||
|
||||
oper
|
||||
mkNum : Str -> Str -> Str -> {s : DForm => Str} = \x,y,z ->
|
||||
{s = table {Indep => x ; ModTen => y ; After => z}} ;
|
||||
regNum : Str -> {s : DForm => Str} = \x ->
|
||||
mkNum x x x ;
|
||||
|
||||
|
||||
sip = table {Unit => "sib" ; Thousand => "hmv:T1n"} ;
|
||||
roy = table {Unit => "rT2Oy" ; Thousand => "e'sn"} ;
|
||||
phan = table {Unit => [] ; Thousand => "p2an"} ;
|
||||
|
||||
}
|
||||
51
examples/numerals/todo/thaiDU.gf
Normal file
51
examples/numerals/todo/thaiDU.gf
Normal file
@@ -0,0 +1,51 @@
|
||||
concrete thaiDU of Numerals = {
|
||||
-- include numerals.Abs.gf ;
|
||||
|
||||
-- Thai digits. AR 28/12/2006
|
||||
|
||||
flags lexer=chars ; unlexer=concat ; flags coding=utf8 ;
|
||||
|
||||
param Zeros = noz | zz ;
|
||||
|
||||
lincat Numeral = { s : Str } ;
|
||||
lincat Digit = { s : Str } ;
|
||||
lincat Sub10 = { s : Str } ;
|
||||
lincat Sub100 = {s : Zeros => Str} ;
|
||||
lincat Sub1000 = {s : Zeros => Str} ;
|
||||
lincat Sub1000000 = {s : Zeros => Str} ;
|
||||
|
||||
oper ss : Str -> {s : Str} = \s -> {s = s} ;
|
||||
oper mkz : Str -> {s : Zeros => Str} = \s -> {s = table {_ => s}} ;
|
||||
|
||||
lin num n = {s = n.s ! noz} ;
|
||||
lin n2 = ss "๒" ;
|
||||
lin n3 = ss "๓" ;
|
||||
lin n4 = ss "๔" ;
|
||||
lin n5 = ss "๕" ;
|
||||
lin n6 = ss "๖" ;
|
||||
lin n7 = ss "๗" ;
|
||||
lin n8 = ss "๘" ;
|
||||
lin n9 = ss "๙" ;
|
||||
|
||||
lin pot01 = ss "๑" ;
|
||||
lin pot0 d = d ;
|
||||
|
||||
lin pot110 = mkz ("๑" ++ "๐") ;
|
||||
lin pot111 = mkz ("๑" ++ "๑") ;
|
||||
lin pot1to19 d = mkz ("๑" ++ d.s) ;
|
||||
|
||||
lin pot0as1 n = {s = table {noz => n.s ; zz => "๐" ++ n.s}} ;
|
||||
|
||||
lin pot1 d = mkz (d.s ++ "๐") ;
|
||||
lin pot1plus d e = mkz (d.s ++ e.s) ;
|
||||
|
||||
lin pot1as2 n = {s = table {noz => n.s ! noz ; zz => "๐" ++ n.s ! zz}} ;
|
||||
lin pot2 d = mkz (d.s ++ "๐" ++ "๐") ;
|
||||
lin pot2plus d e = mkz (d.s ++ e.s ! zz) ;
|
||||
|
||||
lin pot2as3 n = {s = table {noz => n.s ! noz ; zz => "๐" ++ n.s ! zz}} ;
|
||||
|
||||
lin pot3 n = mkz (n.s ! noz ++ "๐" ++ "๐" ++ "๐") ;
|
||||
lin pot3plus n m = {s = table {z => n.s ! z ++ m.s ! zz}} ;
|
||||
|
||||
}
|
||||
72
examples/numerals/todo/thaiP.gf
Normal file
72
examples/numerals/todo/thaiP.gf
Normal file
@@ -0,0 +1,72 @@
|
||||
concrete thaiP of Numerals = {
|
||||
-- include numerals.Abs.gf ;
|
||||
|
||||
-- Thai pronunciation (mostly following Smyth's Essential Grammar)
|
||||
-- AR 28/12/2006
|
||||
|
||||
-- flags coding=utf8 ;
|
||||
|
||||
lincat
|
||||
Numeral = {s : Str} ;
|
||||
Digit = {s : DForm => Str} ;
|
||||
Sub10 = {s : DForm => Str} ;
|
||||
Sub100 = {s : NForm => Str} ;
|
||||
Sub1000 = {s : NForm => Str} ;
|
||||
Sub1000000 = {s : Str} ;
|
||||
|
||||
lin
|
||||
num x = x ;
|
||||
|
||||
pot01 = mkNum "nỳng" "nỳng" "èt" ;
|
||||
|
||||
n2 = mkNum "söong" "yîi" "söong" ;
|
||||
n3 = regNum "säam" ;
|
||||
n4 = regNum "sìi" ;
|
||||
n5 = regNum "hâa" ;
|
||||
n6 = regNum "hòk" ;
|
||||
n7 = regNum "cèt" ;
|
||||
n8 = regNum "pèet" ;
|
||||
n9 = regNum "kâaw" ;
|
||||
|
||||
|
||||
pot0 d = d ;
|
||||
|
||||
pot110 = {s = sip} ;
|
||||
pot111 = {s = table {
|
||||
Unit => ["sìp èt"] ;
|
||||
Thousand => ["nỳng mỳyn nỳng phan"]
|
||||
}
|
||||
} ;
|
||||
pot1to19 d = {s = table {
|
||||
Unit => "sìp" ++ d.s ! After ;
|
||||
Thousand => ["nỳng mỳyn"] ++ d.s ! Indep ++ "phan"
|
||||
}
|
||||
} ;
|
||||
pot0as1 d = {s = \\n => d.s ! Indep ++ phan ! n} ;
|
||||
pot1 d = {s = \\n => d.s ! ModTen ++ sip ! n} ;
|
||||
pot1plus d e = {
|
||||
s = \\n => d.s ! ModTen ++ sip ! n ++ e.s ! After ++ phan ! n
|
||||
} ;
|
||||
pot1as2 n = n ;
|
||||
pot2 d = {s = \\n => d.s ! Indep ++ roy ! n} ;
|
||||
pot2plus d e = {s = \\n => d.s ! Indep ++ roy ! n ++ e.s ! n} ;
|
||||
pot2as3 n = {s = n.s ! Unit} ;
|
||||
pot3 n = {s = n.s ! Thousand} ;
|
||||
pot3plus n m = {s = n.s ! Thousand ++ m.s ! Unit} ;
|
||||
|
||||
param
|
||||
DForm = Indep | ModTen | After ;
|
||||
NForm = Unit | Thousand ;
|
||||
|
||||
oper
|
||||
mkNum : Str -> Str -> Str -> {s : DForm => Str} = \x,y,z ->
|
||||
{s = table {Indep => x ; ModTen => y ; After => z}} ;
|
||||
regNum : Str -> {s : DForm => Str} = \x ->
|
||||
mkNum x x x ;
|
||||
|
||||
|
||||
sip = table {Unit => "sìp" ; Thousand => "mỳyn"} ;
|
||||
roy = table {Unit => "róoy" ; Thousand => "sëen"} ;
|
||||
phan = table {Unit => [] ; Thousand => "phan"} ;
|
||||
|
||||
}
|
||||
74
examples/numerals/todo/welsh.gf
Normal file
74
examples/numerals/todo/welsh.gf
Normal file
@@ -0,0 +1,74 @@
|
||||
concrete welsh of Numerals = {
|
||||
-- include numerals.Abs.gf ;
|
||||
|
||||
-- The neo-base-10 system dauddeg, trideg, pedwardeg, pumdeg/hanner cant, chwedeg, saithdeg, wythdeg, nawdeg is
|
||||
-- implemented as the second variant as it should be
|
||||
|
||||
oper LinDigit = {s : DForm => Str ; even20 : Even20 ; size : Size} ;
|
||||
oper LinSub100 = {s : Str ; size : Size} ;
|
||||
|
||||
oper mk20Ten : Str -> Str -> Str -> Str -> Size -> LinDigit =
|
||||
\tri -> \trideg -> \fiche -> \triarddeg -> \sz ->
|
||||
{ s = table {unit => tri ; twenty => fiche ; teen => triarddeg ; ten => trideg} ; even20 = odd ; size = sz} ;
|
||||
|
||||
oper mkEven20 : Str -> Str -> Str -> Str -> Size -> LinDigit =
|
||||
\tri -> \trideg -> \fiche -> \triarddeg -> \sz ->
|
||||
{ s = table {unit => tri ; twenty => fiche ; teen => triarddeg ; ten => trideg} ; even20 = even ; size = sz} ;
|
||||
|
||||
param Even20 = odd | even ;
|
||||
param DForm = unit | ten | twenty | teen ;
|
||||
param Size = sg | mutation | am | pl | five | overten;
|
||||
|
||||
lincat Numeral = {s : Str} ;
|
||||
lincat Digit = LinDigit ;
|
||||
lincat Sub10 = LinDigit ;
|
||||
lincat Sub100 = LinSub100 ;
|
||||
lincat Sub1000 = LinSub100 ;
|
||||
lincat Sub1000000 = {s : Str} ;
|
||||
lin num x0 =
|
||||
{s = x0.s} ;
|
||||
lin n2 = mkEven20 "dau" "dauddeg" "hugain" "deuddeg" mutation ;
|
||||
lin n3 = mk20Ten "tri" "trideg" "hugain" ("tri" ++ "ar" ++ "deg") am ;
|
||||
lin n4 = mkEven20 "pedwar" "pedwardeg" "deugain" ("pedwar" ++ "ar" ++ "ddeg") pl ;
|
||||
lin n5 = mk20Ten ("pum" + p) "pumdeg" "deugain" "pymtheg" five ;
|
||||
lin n6 = mkEven20 ("chwe" + ch) "chwedeg" "trigain" ("un" ++ "ar" ++ "bymtheg") am ;
|
||||
lin n7 = mk20Ten "saith" "saithdeg" "trigain" ("dau" ++ "ar" ++ "bymtheg") pl ;
|
||||
lin n8 = mkEven20 "wyth" "wythdeg" ("pedwar" ++ "ugain") "deunaw" pl ;
|
||||
lin n9 = mk20Ten "naw" "nawdeg" ("pedwar" ++ "ugain") ("pedwar" ++ "ar" ++ "bymtheg") pl ;
|
||||
oper AR : Str = pre {"ar" ; "a" / strs {"d"} } ;
|
||||
oper AG : Str = pre {"a" ; "ag" / strs {"a" ; "u" ; "i" ; "e" ; "o" ; "w"} } ; -- before vowel
|
||||
oper ng : Str = pre {"g" ; "ng" / strs {"m"} } ;
|
||||
oper t : Str = pre {[] ; "t" / strs {[]}} ;
|
||||
oper ch : Str = pre {[] ; "ch" / strs{[]}} ;
|
||||
oper p : Str = pre {[] ; "p" / strs{[]}} ;
|
||||
|
||||
oper mkR : Str -> LinSub100 = \s1 -> {s = s1 ; size = overten } ;
|
||||
oper mkR2 : Str -> Size -> LinSub100 = \s1 -> \sz -> {s = s1 ; size = table {mutation => mutation ; am => am ; _ => overten} ! sz } ;
|
||||
|
||||
lin pot01 =
|
||||
{s = table {unit => "un" ; _ => "dummy"} ; even20 = odd ; size = sg};
|
||||
lin pot0 d = d ;
|
||||
lin pot110 = {s = "de" + ng ; size = pl} ;
|
||||
lin pot111 = mkR (variants {"un" ++ "ar" ++ "ddeg" ; "undeg" ++ "un"}) ;
|
||||
lin pot1to19 d = mkR (variants {d.s ! teen ; "undeg" ++ d.s ! unit}) ;
|
||||
lin pot0as1 n = {s = n.s ! unit ; size = n.size} ;
|
||||
lin pot1 d = table {mutation => mkR (variants {"ugain" ; "dauddeg" }) ;
|
||||
five => mkR (variants {"hanner" ++ "cant" ; "deg" ++ "a" + "deugain" ; "pumdeg"}) ;
|
||||
_ => mkR (variants { table {even => d.s ! twenty ; odd => "deg" ++ AR ++ d.s ! twenty} ! d.even20 ; d.s ! ten}) } ! d.size ;
|
||||
lin pot1plus d e = mkR2 (variants { table {even => e.s ! unit ++ AR ++ d.s ! twenty ; odd => e.s ! teen ++ AR ++ d.s ! twenty} ! d.even20 ; d.s ! ten}) e.size ; -- hugain
|
||||
lin pot1as2 n = n ;
|
||||
lin pot2 d = mkR ((CANT (d.s ! unit)) ! d.size) ;
|
||||
lin pot2plus d e = mkR2 (((CANT (d.s ! unit)) ! d.size) ++ (maybeAG ! e.size) ++ e.s) e.size;
|
||||
lin pot2as3 n =
|
||||
{s = n.s } ;
|
||||
lin pot3 n =
|
||||
{s = (MIL n.s) ! n.size } ;
|
||||
lin pot3plus n m =
|
||||
{s = (MIL n.s) ! n.size ++ m.s } ;
|
||||
|
||||
oper maybeAG : Size => Str = (table {overten => [] ; _ => AG} );
|
||||
oper CANT : Str -> Size => Str = \s1 -> table {sg => "can" + t ; mutation => s1 ++ "gan" + t; am => s1 ++ "chan" + t ; _ => s1 ++ "can" + t} ;
|
||||
oper MIL : Str -> Size => Str = \s1 -> table {sg => "mil" ; mutation => s1 ++ "fil" ; _ => s1 ++ "mil" } ;
|
||||
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user