mirror of
https://github.com/GrammaticalFramework/gf-rgl.git
synced 2026-05-28 01:18:57 -06:00
(Por) corrects edge cases in NumeralPor
This commit is contained in:
@@ -1,9 +1,14 @@
|
|||||||
concrete NumeralPor of Numeral = CatPor [Numeral,Digits] **
|
concrete NumeralPor of Numeral = CatPor [Numeral,Digits] **
|
||||||
open CommonRomance, ResRomance, MorphoPor, Prelude in {
|
open CommonRomance, ResRomance, MorphoPor, Prelude, Predef in {
|
||||||
|
|
||||||
flags coding=utf8 ;
|
flags coding=utf8 ;
|
||||||
|
|
||||||
|
param
|
||||||
|
DForm = unit | teen | ten | hundred ;
|
||||||
|
|
||||||
lincat
|
lincat
|
||||||
|
--- cardinals are generally not inflected by gender, however 1 and 2
|
||||||
|
--- are, as are the hundreds from 2 to 9
|
||||||
Digit = {s : DForm => CardOrd => Str} ;
|
Digit = {s : DForm => CardOrd => Str} ;
|
||||||
Sub10 = {s : DForm => CardOrd => Str ; n : Number} ;
|
Sub10 = {s : DForm => CardOrd => Str ; n : Number} ;
|
||||||
Sub100 = {s : CardOrd => Str ; n : Number} ;
|
Sub100 = {s : CardOrd => Str ; n : Number} ;
|
||||||
@@ -44,10 +49,11 @@ concrete NumeralPor of Numeral = CatPor [Numeral,Digits] **
|
|||||||
"novecentos" "nono" "nonagésimo" "noningentésimo";
|
"novecentos" "nono" "nonagésimo" "noningentésimo";
|
||||||
|
|
||||||
pot01 =
|
pot01 =
|
||||||
let um = (mkTal "um" "onze" "dez" "cento" "primeiro"
|
let um = (mkTal "um" "onze" "dez" "centos" "primeiro"
|
||||||
"décimo" "centésimo").s in
|
"décimo" "centésimo").s in
|
||||||
{s =\\f,g => case <f,g> of {
|
{s =\\f,g => case <f,g> of {
|
||||||
<unit, NCard Fem> => "uma" ;
|
<unit, NCard Fem> => "uma" ;
|
||||||
|
<hundred, NCard _> => "cento" ;
|
||||||
_ => um ! f ! g
|
_ => um ! f ! g
|
||||||
} ;
|
} ;
|
||||||
n = Sg
|
n = Sg
|
||||||
@@ -66,20 +72,32 @@ concrete NumeralPor of Numeral = CatPor [Numeral,Digits] **
|
|||||||
pot1as2 n = n ;
|
pot1as2 n = n ;
|
||||||
pot2 d =
|
pot2 d =
|
||||||
let n = case d.n of {
|
let n = case d.n of {
|
||||||
Sg => mkTal [] [] [] "cem" [] [] "centésimo" ;
|
Sg => cem ;
|
||||||
_ => d
|
_ => d.s ! hundred
|
||||||
}
|
}
|
||||||
in spl (n.s ! hundred) ;
|
in spl n ;
|
||||||
pot2plus d e =
|
pot2plus d e =
|
||||||
{s = \\g => d.s ! hundred ! g
|
{s = \\g => d.s ! hundred ! g
|
||||||
++ e_CardOrd g ++ e.s ! g ;
|
++ e_CardOrd g ++ e.s ! g ;
|
||||||
n = Pl} ;
|
n = Pl} ;
|
||||||
pot2as3 n = n ;
|
pot2as3 n = n ;
|
||||||
pot3 n = spl (\\g => n.s ! NCard Masc ++ mil g) ;
|
pot3 n =
|
||||||
pot3plus n m = {s = \\g => n.s ! NCard Masc
|
let n = case n.n of {
|
||||||
++ mil g ++ e_CardOrd g
|
Sg => [] ;
|
||||||
++ m.s ! g ;
|
_ => n.s ! NCard Masc
|
||||||
n = Pl} ;
|
} ;
|
||||||
|
in spl (\\g => n ++ mil g) ;
|
||||||
|
pot3plus n m =
|
||||||
|
let n = case n.n of {
|
||||||
|
Sg => [] ;
|
||||||
|
_ => n.s ! NCard Masc
|
||||||
|
} ;
|
||||||
|
in {s = \\g => n ++ mil g
|
||||||
|
-- actually, 'e' only if m is exact hundred (pot2) or
|
||||||
|
-- lower
|
||||||
|
++ e_CardOrd g
|
||||||
|
++ m.s ! g ;
|
||||||
|
n = Pl} ;
|
||||||
|
|
||||||
oper
|
oper
|
||||||
mkTal : (_,_,_,_,_,_,_ : Str) -> {s : DForm => CardOrd => Str} =
|
mkTal : (_,_,_,_,_,_,_ : Str) -> {s : DForm => CardOrd => Str} =
|
||||||
@@ -88,8 +106,8 @@ concrete NumeralPor of Numeral = CatPor [Numeral,Digits] **
|
|||||||
<unit, NCard _> => dois ;
|
<unit, NCard _> => dois ;
|
||||||
<teen, NCard _> => doze ;
|
<teen, NCard _> => doze ;
|
||||||
<ten, NCard _> => vinte ;
|
<ten, NCard _> => vinte ;
|
||||||
<hundred, NCard _> => duzentos ;
|
<hundred, NCard g> => regCard (tk 1 duzentos) g Pl ;
|
||||||
<unit, NOrd g n> => (regCard segundo) g n ;
|
<unit, NOrd g n> => regCard segundo g n ;
|
||||||
<teen, NOrd g n> => (regCard "décimo") g n ++ (regCard segundo) g n ;
|
<teen, NOrd g n> => (regCard "décimo") g n ++ (regCard segundo) g n ;
|
||||||
<ten, NOrd g n> => regCard vigesimo g n ;
|
<ten, NOrd g n> => regCard vigesimo g n ;
|
||||||
<hundred, NOrd g n> => regCard duocentesimo g n
|
<hundred, NOrd g n> => regCard duocentesimo g n
|
||||||
@@ -104,6 +122,13 @@ concrete NumeralPor of Numeral = CatPor [Numeral,Digits] **
|
|||||||
n = Pl
|
n = Pl
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
cem : CardOrd => Str ;
|
||||||
|
cem = \\co =>
|
||||||
|
case co of {
|
||||||
|
NCard _ => "cem" ;
|
||||||
|
NOrd g n => regCard "centésimo" g n
|
||||||
|
} ;
|
||||||
|
|
||||||
mil : CardOrd -> Str = \g ->
|
mil : CardOrd -> Str = \g ->
|
||||||
(mkTal "mil" [] [] [] "milésimo" [] []).s ! unit ! g ;
|
(mkTal "mil" [] [] [] "milésimo" [] []).s ! unit ! g ;
|
||||||
|
|
||||||
@@ -112,9 +137,6 @@ concrete NumeralPor of Numeral = CatPor [Numeral,Digits] **
|
|||||||
_ => []
|
_ => []
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
param
|
|
||||||
DForm = unit | teen | ten | hundred ;
|
|
||||||
|
|
||||||
---
|
---
|
||||||
-- numerals as sequences of digits
|
-- numerals as sequences of digits
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user