Files
gf-core/examples/numerals/greek_classical.gf
2005-05-11 08:10:23 +00:00

201 lines
5.8 KiB
Plaintext

include numerals.Abs.gf ;
flags coding=greek ;
-- Classical Greek (of Athens)
-- Aarne's transliteration
-- There are attested variant forms. kai:s between the elements in bigger ->
-- smaller order is also possible but not common.
param DForm = unit | tkismyr | teen | ten | hund | kisxil | kismyr |
tenkismyr | tenkis ;
param InterData = indep Order | xiliad | myriad Order ;
param Tenpart = kis1 | tkis1 ;
param Size = sg | pl | tenoverpl ;
param Order = des | asc;
lincat Numeral = {s : Str} ;
oper LinDigit = {s : DForm => Str} ;
oper LinSub1000 = {s : InterData => Str ; size : Size} ;
lincat Numeral = { s : Str } ;
lincat Digit = LinDigit ;
lincat Sub10 = {s : DForm => Str ;
size : Size} ;
lincat Sub100 = {s : InterData => Str ;
s1 : Tenpart => Str ;
s2 : Str ;
size : Size} ;
lincat Sub1000 = LinSub1000 ;
lincat Sub1000000 = {s : Str} ;
lin num x0 =
{s = "//" ++ x0.s ++ "//"} ; -- Greek environment
oper mkNum : Str -> Str -> Str -> Str -> Str -> Str -> Str -> LinDigit =
\dyo -> \dis -> \dwdekakis -> \dwdeka -> \eikosi -> \diakosioi ->
\eikosakis ->
{s = table {unit => dyo ;
tkismyr => dwdekakis + "m'yrioi" ;
teen => dwdeka ;
ten => eikosi ;
hund => diakosioi ;
kisxil => dis + "c'ilioi" ;
kismyr => dis + "m'yrioi" ;
tenkis => eikosakis ;
tenkismyr => eikosakis + "m'yrioi"} };
lin n2 = mkNum
"d'yo"
"dis"
"dwdekakis"
"d'wdeka"
"e)'ikosi"
"diak'osioi"
"e)ikos'akis" ;
lin n3 = mkNum
"tre~ij"
"tris"
"treiskaidekakis"
(variants {"tre~ij" ++ "ka`i" ++ "d'eka" ; "treiska'ideka"} )
"tri'akonta"
"triak'osioi"
"triakont'akis" ;
lin n4 = mkNum
"t'ettarej"
"tetrakis"
"tettareskaidekakis"
(variants {"t'ettarej" ++ "ka`i" ++ "d'eka" ; "tettareska'ideka"})
"tettar'akonta"
"tetrak'osioi"
"tettarakont'akis" ;
lin n5 = mkNum
"p'ente"
"pentakis"
"pentekaidekakis"
"penteka'ideka"
"pent'hkonta"
"pentak'osioi"
"penthkont'akis" ;
lin n6 = mkNum
"('ex"
"(exakis"
"(ekkaidekakis"
"(ekka'ideka"
"(ex'hkonta"
"(exak'osioi"
"(exhkont'akis" ;
lin n7 = mkNum
"(ept'a"
"(eptakis"
"(eptakaidekakis"
"(eptaka'ideka"
"(ebdom'hkonta"
"(eptak'osioi"
"(ebdomhkont'akis" ;
lin n8 = mkNum
")okt'w"
")oktakis"
")oktwkaidekakis"
")oktwka'ideka"
")ogdo'hkonta"
")oktak'osioi"
")ogdohkont'akis" ;
lin n9 = mkNum
")enn'ea"
")enakis"
")enneakaidekakis"
")enneaka'ideka"
")enen'hkonta"
")enak'osioi"
")enenhkont'akis" ;
lin pot01 =
{s = table {hund => "(ekat'on" ;
kisxil => "c'ilioi" ;
kismyr => "('apax" + "m'yrioi" ;
_ => "e('ij" } ;
size = sg} ;
lin pot0 d =
{s = d.s ; size = pl} ;
lin pot110 =
{s = table {xiliad => "dummy" ;
(myriad _) => "m'yrioi" ;
(indep _) => "d'eka" };
s1 = table {kis1 => "('apax" + "m'yrioi" ; tkis1 => "(endek'akis" + "m'yrioi"} ;
s2 = [] ;
size = tenoverpl} ;
lin pot111 =
{s = table {xiliad => "dummy" ;
(myriad des) => "m'yrioi" ++ "c'ilioi" ;
(myriad asc) => "c'ilioi" ++ "ka`i" ++ "m'yrioi" ;
(indep _) => "('endeka" } ;
s1 = table {kis1 => "('apax" + "m'yrioi" ; tkis1 => "(endek'akis" + "m'yrioi"} ;
s2 = "c'ilioi" ;
size = tenoverpl} ;
lin pot1to19 d =
{s = table {xiliad => "dummy" ;
(myriad des) => "m'yrioi" ++ d.s ! kisxil ;
(myriad asc) => d.s ! kisxil ++ "ka`i" ++ "m'yrioi" ;
(indep _) => d.s ! teen } ;
s1 = table {kis1 => "('apax" + "m'yrioi" ; tkis1 => "(endek'akis" + "m'yrioi" } ;
s2 = d.s ! kisxil ;
size = tenoverpl} ;
lin pot0as1 n =
{s = table {xiliad => n.s ! kisxil ;
(indep _) => n.s ! unit ;
(myriad _) => "dummy" } ;
s1 = table {_ => []} ;
s2 = n.s ! kisxil ;
size = n.size} ;
lin pot1 d =
{s = table {xiliad => "dummy" ;
(myriad _) => d.s ! kismyr ;
(indep _) => d.s ! ten} ;
s1 = table {kis1 => d.s ! kismyr ; tkis1 => d.s ! tkismyr } ;
s2 = [];
size = tenoverpl} ;
lin pot1plus d e =
{s = table {xiliad => "dummy" ;
(myriad des) => d.s ! kismyr ++ e.s ! kisxil ;
(myriad asc) => e.s ! kisxil ++ "ka`i" ++ d.s ! kismyr ;
(indep des) => d.s ! ten ++ e.s ! unit ;
(indep asc) => e.s ! unit ++ "ka`i" ++ d.s ! ten } ;
s1 = table {kis1 => d.s ! kismyr ; tkis1 => d.s ! tkismyr } ;
s2 = e.s ! kisxil ;
size = tenoverpl} ;
lin pot1as2 n =
{s = n.s ; size = n.size} ;
lin pot2 d =
{s = table {(indep _) => d.s ! hund ;
(myriad _) => d.s ! tenkismyr;
xiliad => "dummy"} ;
size = tenoverpl} ;
lin pot2plus d e =
{s = table {(myriad _) => table {sg => e.s1 ! tkis1 ;
pl => d.s ! tenkis ++ e.s1 ! kis1 ;
tenoverpl => "dummy" } ! d.size ++ e.s2 ;
(indep des) => d.s ! hund ++ e.s ! indep des ;
(indep asc) => (e.s ! indep asc) ++ "ka`i" ++ d.s ! hund ;
xiliad => "dummy" } ;
size = tenoverpl} ;
lin pot2as3 n =
{s = variants { n.s ! indep des ; n.s ! indep asc}} ;
lin pot3 n =
{s = variants {(Myr n des) ! n.size ; (Myr n asc) ! n.size} } ;
lin pot3plus n m =
{s = variants {(Myr n des) ! n.size ++ m.s ! indep des;
m.s ! indep asc ++ "ka`i" ++ (Myr n asc) ! n.size }} ;
oper Myr : LinSub1000 -> Order -> Size => Str = \n -> \order ->
table {sg => "c'ilioi" ;
pl => n.s ! xiliad ;
tenoverpl => n.s ! myriad order} ;