mirror of
https://github.com/GrammaticalFramework/gf-core.git
synced 2026-04-19 01:39:32 -06:00
70 lines
3.1 KiB
Plaintext
70 lines
3.1 KiB
Plaintext
include numerals.Abs.gf ;
|
|
flags coding=greek ;
|
|
|
|
-- Free variation on accents on m'ia and d'yo
|
|
|
|
oper vowel : Strs = strs {"e" ; "o" ; "a" ; "'e" ; "'o" ; "'a"} ;
|
|
|
|
param DForm = unit | fem | femteen | teen | ten | hundredneut | hundredfem ;
|
|
param Use = indep | femattr ;
|
|
param Size = sg | pl ;
|
|
|
|
lincat Numeral = {s : Str} ;
|
|
lincat Digit = {s : DForm => Str } ;
|
|
lincat Sub10 = {s : DForm => Str ; size : Size} ;
|
|
lincat Sub100 = {s : Use => Str ; size : Size} ;
|
|
lincat Sub1000 = {s : Use => Str ; size : Size} ;
|
|
lincat Sub1000000 = {s : Str} ;
|
|
lin num x0 =
|
|
{s = "//" ++ x0.s ++ "//"} ; -- Greek environment
|
|
|
|
oper mkNum : Str -> Str -> Str -> Str -> Str -> Str -> Lin Digit =
|
|
\dyo -> \dwdeka -> \eikosi -> \diakosi -> \dyofem -> \dwdekafem ->
|
|
{s = table {unit => dyo ; teen => dwdeka ; ten => eikosi ;
|
|
hundredneut => diakosi + "a" ; hundredfem => diakosi + "ej" ;
|
|
fem => dyofem ; femteen => dwdekafem}} ;
|
|
|
|
oper mkIndeclNum : Str -> Str -> Str -> Str -> Lin Digit =
|
|
\dyo -> \dwdeka -> \eikosi -> \diakosi ->
|
|
{s = table {unit => dyo ; teen => dwdeka ; ten => eikosi ;
|
|
hundredneut => diakosi + "a" ; hundredfem => diakosi + "ej" ;
|
|
fem => dyo ; femteen => dwdeka}} ;
|
|
|
|
lin n2 = mkIndeclNum "d'yo" "d'wdeka" "e'ikosi" "diak'osi" ;
|
|
lin n3 = mkNum "tr'ia" "dekatr'ia" "tri'anta" "triak'osi" "tre'ij" "dekatre'is" ;
|
|
lin n4 = mkNum "t'essera" "dekat'essera" "sar'anta" "tetrak'osi" "t'esserij" "dekat'esserij" ;
|
|
lin n5 = mkIndeclNum "p'ente" "dekap'ente" "pen'hnta" "pentak'osi" ;
|
|
lin n6 = mkIndeclNum "'exi" (variants { "deka'exi" ; "deka'exi" }) "ex'hnta" "exak'osi" ;
|
|
lin n7 = mkIndeclNum (variants {"ept'a" ; "eft'a" }) "dekaeft'a" "ebdom'hnta" "eftak'osi" ;
|
|
lin n8 = mkIndeclNum "oct'w" "dekaoct'w" "ogd'onta" "octak'osi" ;
|
|
lin n9 = mkIndeclNum (variants {"enn'ea" ; "enn'ia" }) "dekaenn'ea" "enen'hnta" "enniak'osi" ;
|
|
lin pot01 =
|
|
{s = table {unit => "'ena" ; fem => "m'ia" ; _ => "ekat'o" + pre {[] ; "n" / vowel}} ; size = sg} ;
|
|
lin pot0 d =
|
|
{s = d.s ; size = pl} ;
|
|
lin pot110 =
|
|
{s = table {indep => "d'eka" ; femattr => "d'eka"} ; size = pl} ;
|
|
lin pot111 =
|
|
{s = table {indep => "'enteka" ; femattr => "'enteka" } ; size = pl} ;
|
|
lin pot1to19 d =
|
|
{s = table {indep => d.s ! teen; femattr => d.s ! femteen } ; size = pl} ;
|
|
lin pot0as1 n =
|
|
{s = table {indep => n.s ! unit ; femattr => n.s ! fem } ; size = n.size} ;
|
|
lin pot1 d =
|
|
{s = table {indep => d.s ! ten ; femattr => d.s ! ten } ; size = pl } ;
|
|
lin pot1plus d e =
|
|
{s = table {indep => d.s ! ten ++ e.s ! unit ; femattr => d.s ! ten ++ e.s ! fem } ; size = pl} ;
|
|
lin pot1as2 n = n ;
|
|
lin pot2 d =
|
|
{s = table {indep => d.s ! hundredneut ; femattr => d.s ! hundredfem} ; size = pl} ;
|
|
lin pot2plus d e =
|
|
{s = table {indep => d.s ! hundredneut ++ e.s ! indep ; femattr => d.s ! hundredfem ++ e.s ! femattr} ; size = pl} ;
|
|
lin pot2as3 n =
|
|
{s = n.s ! indep } ;
|
|
lin pot3 n =
|
|
{s = (Xilias (n.s ! femattr)) ! n.size} ;
|
|
lin pot3plus n m =
|
|
{s = (Xilias (n.s ! femattr)) ! n.size ++ m.s ! indep} ;
|
|
|
|
oper Xilias : Str -> Size => Str =
|
|
\s -> table {sg => "c'ilia" ; pl => s ++ "cili'adej" } ; |