mirror of
https://github.com/GrammaticalFramework/gf-rgl.git
synced 2026-10-01 22:53:40 -06:00
extensions from Codex
This commit is contained in:
@@ -0,0 +1,181 @@
|
||||
--# -path=.:../abstract:../common:../prelude
|
||||
|
||||
concrete NumeralHye of Numeral = CatHye [Numeral,Digits,Decimal] **
|
||||
open Prelude, ResHye in {
|
||||
|
||||
flags coding = utf8 ;
|
||||
|
||||
param DForm = Unit | Teen | Ten ;
|
||||
|
||||
lincat
|
||||
Digit = {s : DForm => CardOrd => Str; compoundOrd : DForm => Str} ;
|
||||
Sub10 = {s : DForm => CardOrd => Str; compoundOrd : DForm => Str; n : Number} ;
|
||||
Sub100, Sub1000, Sub1000000, Sub1000000000, Sub1000000000000 = LinNum ;
|
||||
|
||||
lin
|
||||
num n = {s = n.s; n = n.n} ;
|
||||
|
||||
n2 = mkDigit "երկու" "տասներկու" "քսան" "երկրորդ" ;
|
||||
n3 = mkDigit "երեք" "տասներեք" "երեսուն" "երրորդ" ;
|
||||
n4 = mkDigit "չորս" "տասնչորս" "քառասուն" "չորրորդ" ;
|
||||
n5 = mkDigit "հինգ" "տասնհինգ" "հիսուն" "հինգերորդ" ;
|
||||
n6 = mkDigit "վեց" "տասնվեց" "վաթսուն" "վեցերորդ" ;
|
||||
n7 = mkDigit "յոթ" "տասնյոթ" "յոթանասուն" "յոթերորդ" ;
|
||||
n8 = mkDigit "ութ" "տասնութ" "ութսուն" "ութերորդ" ;
|
||||
n9 = mkDigit "ինը" "տասնինը" "իննսուն" "իններորդ" ;
|
||||
|
||||
pot01 = mkDigit "մեկ" "տասնմեկ" "տասը" "առաջին" ** {
|
||||
compoundOrd = table {
|
||||
Unit => "մեկերորդ" ;
|
||||
Teen => "տասնմեկերորդ" ;
|
||||
Ten => "տասներորդ"
|
||||
} ;
|
||||
n = Sg
|
||||
} ;
|
||||
pot0 d = d ** {n = Pl} ;
|
||||
|
||||
pot110 = mkNum "տասը" "տասներորդ" Pl ** {attr = "տաս"} ;
|
||||
pot111 = regNum "տասնմեկ" Pl ;
|
||||
pot1to19 d = {
|
||||
s = d.s ! Teen ;
|
||||
compoundOrd = d.compoundOrd ! Teen ;
|
||||
attr = d.s ! Teen ! NCard ;
|
||||
n = Pl
|
||||
} ;
|
||||
pot0as1 n = {
|
||||
s = n.s ! Unit ;
|
||||
compoundOrd = n.compoundOrd ! Unit ;
|
||||
attr = n.s ! Unit ! NCard ;
|
||||
n = n.n
|
||||
} ;
|
||||
pot1 d = {
|
||||
s = d.s ! Ten ;
|
||||
compoundOrd = d.compoundOrd ! Ten ;
|
||||
attr = d.s ! Ten ! NCard ;
|
||||
n = Pl
|
||||
} ;
|
||||
pot1plus d e = regNum
|
||||
(d.s ! Ten ! NCard ++ BIND ++ e.s ! Unit ! NCard) Pl ;
|
||||
pot1as2 n = n ;
|
||||
|
||||
pot21 = mkNum "հարյուր" "հարյուրերորդ" Pl ;
|
||||
pot2 d = scaleNum (d.s ! Unit ! NCard) "հարյուր" Pl ;
|
||||
pot2plus d e = plusNum
|
||||
(d.s ! Unit ! NCard ++ "հարյուր") e Pl ;
|
||||
pot2as3 n = n ;
|
||||
|
||||
pot31 = mkNum "հազար" "հազարերորդ" Pl ;
|
||||
pot3 n = scaleNum n.attr "հազար" Pl ;
|
||||
pot3plus n m = plusNum (n.attr ++ "հազար") m Pl ;
|
||||
pot3as4 n = n ;
|
||||
pot3decimal n = decimalScale n "հազար" ;
|
||||
|
||||
pot41 = mkNum "միլիոն" "միլիոներորդ" Pl ;
|
||||
pot4 n = scaleNum n.attr "միլիոն" Pl ;
|
||||
pot4plus n m = plusNum (n.attr ++ "միլիոն") m Pl ;
|
||||
pot4as5 n = n ;
|
||||
pot4decimal n = decimalScale n "միլիոն" ;
|
||||
|
||||
pot51 = mkNum "միլիարդ" "միլիարդերորդ" Pl ;
|
||||
pot5 n = scaleNum n.attr "միլիարդ" Pl ;
|
||||
pot5plus n m = plusNum (n.attr ++ "միլիարդ") m Pl ;
|
||||
pot5decimal n = decimalScale n "միլիարդ" ;
|
||||
|
||||
lincat Dig = {s : CardOrd => Str; n : Number} ;
|
||||
|
||||
lin
|
||||
IDig d = d ** {tail = T1} ;
|
||||
IIDig d ds = {
|
||||
s = table {
|
||||
NCard => glue (d.s ! NCard) (ds.s ! NCard) ;
|
||||
NOrd => glue (glue (d.s ! NCard) (ds.s ! NCard)) "-րդ"
|
||||
} ;
|
||||
n = Pl ;
|
||||
tail = inc ds.tail
|
||||
} ;
|
||||
|
||||
D_0 = mkDig "0" ;
|
||||
D_1 = mkDig1 ;
|
||||
D_2 = mkDig "2" ;
|
||||
D_3 = mkDig "3" ;
|
||||
D_4 = mkDig "4" ;
|
||||
D_5 = mkDig "5" ;
|
||||
D_6 = mkDig "6" ;
|
||||
D_7 = mkDig "7" ;
|
||||
D_8 = mkDig "8" ;
|
||||
D_9 = mkDig "9" ;
|
||||
|
||||
PosDecimal d = d ** {hasDot = False} ;
|
||||
NegDecimal d = {
|
||||
s = \\o => "-" ++ BIND ++ d.s ! o ;
|
||||
n = Pl ;
|
||||
hasDot = False
|
||||
} ;
|
||||
IFrac d i = {
|
||||
s = \\o => d.s ! NCard ++
|
||||
if_then_Str d.hasDot BIND (BIND ++ "." ++ BIND) ++
|
||||
i.s ! o ;
|
||||
n = Pl ;
|
||||
hasDot = True
|
||||
} ;
|
||||
|
||||
oper
|
||||
LinNum : Type = {
|
||||
s : CardOrd => Str ;
|
||||
compoundOrd : Str ;
|
||||
attr : Str ;
|
||||
n : Number
|
||||
} ;
|
||||
|
||||
mkNum : Str -> Str -> Number -> LinNum = \card,ord,n -> {
|
||||
s = table {NCard => card; NOrd => ord} ;
|
||||
compoundOrd = ord ;
|
||||
attr = card ;
|
||||
n = n
|
||||
} ;
|
||||
|
||||
regNum : Str -> Number -> LinNum = \card,n ->
|
||||
mkNum card (glue card "երորդ") n ;
|
||||
|
||||
mkDigit : Str -> Str -> Str -> Str ->
|
||||
{s : DForm => CardOrd => Str; compoundOrd : DForm => Str} =
|
||||
\unit,teen,ten,unitOrd -> {
|
||||
s = table {
|
||||
Unit => table {NCard => unit; NOrd => unitOrd} ;
|
||||
Teen => table {NCard => teen; NOrd => glue teen "երորդ"} ;
|
||||
Ten => table {NCard => ten; NOrd => glue ten "երորդ"}
|
||||
} ;
|
||||
compoundOrd = table {
|
||||
Unit => unitOrd ;
|
||||
Teen => glue teen "երորդ" ;
|
||||
Ten => glue ten "երորդ"
|
||||
}
|
||||
} ;
|
||||
|
||||
scaleNum : Str -> Str -> Number -> LinNum = \prefix,scale,n ->
|
||||
mkNum (prefix ++ scale) (prefix ++ glue scale "երորդ") n ;
|
||||
|
||||
plusNum : Str -> LinNum -> Number -> LinNum = \prefix,last,n -> {
|
||||
s = table {
|
||||
NCard => prefix ++ last.s ! NCard ;
|
||||
NOrd => prefix ++ last.compoundOrd
|
||||
} ;
|
||||
compoundOrd = prefix ++ last.compoundOrd ;
|
||||
attr = prefix ++ last.s ! NCard ;
|
||||
n = n
|
||||
} ;
|
||||
|
||||
decimalScale : Decimal -> Str -> LinNum = \decimal,scale ->
|
||||
mkNum (decimal.s ! NCard ++ scale)
|
||||
(decimal.s ! NCard ++ glue scale "երորդ") Pl ;
|
||||
|
||||
mkDig : Str -> {s : CardOrd => Str; n : Number} = \d -> {
|
||||
s = table {NCard => d; NOrd => glue d "-րդ"} ;
|
||||
n = Pl
|
||||
} ;
|
||||
|
||||
mkDig1 : {s : CardOrd => Str; n : Number} = {
|
||||
s = table {NCard => "1"; NOrd => "1-ին"} ;
|
||||
n = Sg
|
||||
} ;
|
||||
}
|
||||
Reference in New Issue
Block a user