From 5d912f78a48f9ff42f9977e3f65c3193f198f7e3 Mon Sep 17 00:00:00 2001 From: Krasimir Angelov Date: Mon, 24 Jul 2023 20:06:01 +0200 Subject: [PATCH] floating point numerals --- src/abstract/Noun.gf | 1 + src/afrikaans/NounAfr.gf | 2 ++ src/bulgarian/NounBul.gf | 2 ++ src/chinese/NamesChi.gf | 5 +++-- src/dutch/NounDut.gf | 2 ++ src/english/NounEng.gf | 2 ++ src/estonian/NounEst.gf | 5 +++++ src/finnish/NounFin.gf | 5 +++++ src/german/NounGer.gf | 2 ++ src/korean/NounKor.gf | 6 ++++++ src/maltese/NounMlt.gf | 4 ++++ src/polish/NounPol.gf | 2 ++ src/romance/NounRomance.gf | 2 ++ src/romanian/NounRon.gf | 5 ++++- src/russian/NounRus.gf | 2 ++ src/scandinavian/NounScand.gf | 2 ++ src/turkish/NounTur.gf | 4 ++++ 17 files changed, 50 insertions(+), 3 deletions(-) diff --git a/src/abstract/Noun.gf b/src/abstract/Noun.gf index 31cfdf59b..e6298dbc4 100644 --- a/src/abstract/Noun.gf +++ b/src/abstract/Noun.gf @@ -58,6 +58,7 @@ abstract Noun = Cat ** { data NumDigits : Digits -> Card ; -- 51 + NumFloat : Digits -> Digits -> Card ; -- 3.14 NumNumeral : Numeral -> Card ; -- fifty-one -- The construction of numerals is defined in [Numeral Numeral.html]. diff --git a/src/afrikaans/NounAfr.gf b/src/afrikaans/NounAfr.gf index 84c73d22f..147672be4 100644 --- a/src/afrikaans/NounAfr.gf +++ b/src/afrikaans/NounAfr.gf @@ -77,6 +77,8 @@ concrete NounAfr of Noun = CatAfr ** open ResAfr, Prelude in { NumDigits numeral = {s = \\g,c => numeral.s ! NCard g c; n = numeral.n } ; OrdDigits numeral = {s = \\af => numeral.s ! NOrd af} ; + NumFloat n1 n2 = {s = \\g,c => n1.s ! NCard Neutr Nom ++ BIND ++ "." ++ BIND ++ n1.s ! NCard g c; n = Pl } ; + NumNumeral numeral = {s = \\g,c => numeral.s ! NCard g c; n = numeral.n } ; OrdNumeral numeral = {s = \\af => numeral.s ! NOrd af} ; diff --git a/src/bulgarian/NounBul.gf b/src/bulgarian/NounBul.gf index 2fd91ca14..99476be6f 100644 --- a/src/bulgarian/NounBul.gf +++ b/src/bulgarian/NounBul.gf @@ -118,6 +118,8 @@ concrete NounBul of Noun = CatBul ** open ResBul, Prelude in { NumDigits n = {s = \\gspec => n.s ! NCard gspec; nn = case n.n of {Sg => NNum Sg; Pl => NCountable}} ; OrdDigits n = {s = \\aform => n.s ! NOrd aform} ; + NumFloat n1 n2 = {s = \\gspec => n1.s ! NCard (CFMasc Indef NonHuman) ++ BIND ++ "." ++ BIND ++ n2.s ! NCard gspec ; nn = NCountable} ; + NumNumeral numeral = {s = \\gspec => numeral.s ! NCard gspec; nn = case numeral.n of {Sg => NNum Sg; Pl => NCountable}} ; OrdNumeral numeral = {s = \\aform => numeral.s ! NOrd aform} ; diff --git a/src/chinese/NamesChi.gf b/src/chinese/NamesChi.gf index ccb35fa80..f0dc95b9c 100644 --- a/src/chinese/NamesChi.gf +++ b/src/chinese/NamesChi.gf @@ -1,8 +1,9 @@ concrete NamesChi of Names = CatChi ** { -lin GivenName, MaleSurname, FemaleSurname, PlSurname = \n -> n ; +lin GivenName, MaleSurname, FemaleSurname, PlSurname = \n -> n ** {det = []} ; lin FullName gn sn = { - s = gn.s ++ sn.s + s = gn.s ++ sn.s ; + det = [] } ; } diff --git a/src/dutch/NounDut.gf b/src/dutch/NounDut.gf index 18e522914..3abcab0e8 100644 --- a/src/dutch/NounDut.gf +++ b/src/dutch/NounDut.gf @@ -85,6 +85,8 @@ concrete NounDut of Noun = CatDut ** open ResDut, Prelude in { NumDigits numeral = {s = \\g,c => numeral.s ! NCard g c; n = numeral.n } ; OrdDigits numeral = {s = \\af => numeral.s ! NOrd af} ; + NumFloat n1 n2 = {s = \\g,c => n1.s ! NCard Utr Nom ++ BIND ++ "." ++ BIND ++ n2.s ! NCard g c; n = Pl } ; + NumNumeral numeral = {s = \\g,c => numeral.s ! NCard g c; n = numeral.n } ; OrdNumeral numeral = {s = let tiende : AForm => Str = \\af => numeral.s ! NOrd af in table {APred => tiende ! AAttr Utr ; diff --git a/src/english/NounEng.gf b/src/english/NounEng.gf index af3cd446b..2e0b03fe4 100644 --- a/src/english/NounEng.gf +++ b/src/english/NounEng.gf @@ -77,6 +77,8 @@ concrete NounEng of Noun = CatEng ** open MorphoEng, ResEng, Prelude in { NumDigits n = {s,sp = \\_ => n.s ! NCard ; n = n.n} ; OrdDigits n = {s = n.s ! NOrd} ; + NumFloat n1 n2 = {s,sp = \\_,c => n1.s ! NCard ! Nom ++ BIND ++ "." ++ BIND ++ n2.s ! NCard ! c ; n = Pl} ; + NumNumeral numeral = {s,sp = \\d => numeral.s ! d ! NCard; n = numeral.n} ; OrdNumeral numeral = {s = numeral.s ! True ! NOrd} ; diff --git a/src/estonian/NounEst.gf b/src/estonian/NounEst.gf index 290a798a6..fc1219e6f 100644 --- a/src/estonian/NounEst.gf +++ b/src/estonian/NounEst.gf @@ -120,6 +120,11 @@ concrete NounEst of Noun = CatEst ** open ResEst, HjkEst, MorphoEst, Prelude in } ; OrdDigits numeral = {s = \\nc => numeral.s ! NOrd nc} ; + NumFloat n1 n2 = { + s = \\n,c => n1.s ! NCard (NCase Sg Nom) ++ BIND ++ "." ++ BIND ++ n2.s ! NCard (NCase n c) ; + n = Pl + } ; + NumNumeral numeral = { s = \\n,c => numeral.s ! NCard (NCase n c) ; n = numeral.n diff --git a/src/finnish/NounFin.gf b/src/finnish/NounFin.gf index fa9857fb0..bbb9bf0d0 100644 --- a/src/finnish/NounFin.gf +++ b/src/finnish/NounFin.gf @@ -143,6 +143,11 @@ concrete NounFin of Noun = CatFin ** open ResFin, MorphoFin, StemFin, Prelude in } ; OrdDigits numeral = {s = \\f => numeral.s ! NOrd f} ; + NumFloat n1 n2 = { + s = \\n,c => n1.s ! NCard (NCase Sg Nom) ++ BIND ++ "." ++ BIND ++ n2.s ! NCard (NCase n c) ; + n = Pl + } ; + NumNumeral numeral = { s = \\n,c => numeral.s ! NCard (NCase n c) ; n = numeral.n diff --git a/src/german/NounGer.gf b/src/german/NounGer.gf index 848fd6de9..a29cafbb9 100644 --- a/src/german/NounGer.gf +++ b/src/german/NounGer.gf @@ -122,6 +122,8 @@ concrete NounGer of Noun = CatGer ** open ResGer, MorphoGer, Prelude in { NumDigits numeral = {s = \\g,c => numeral.s ! NCard g c; n = numeral.n } ; OrdDigits numeral = {s = \\af => numeral.s ! NOrd af} ; + NumFloat dig1 dig2 = {s = \\g,c => dig1.s ! invNum ++ BIND ++ "." ++ BIND ++ dig2.s ! NCard g c ; n = Pl } ; + NumNumeral numeral = {s = \\g,c => numeral.s ! NCard g c; n = numeral.n } ; OrdNumeral numeral = {s = \\af => numeral.s ! NOrd af} ; diff --git a/src/korean/NounKor.gf b/src/korean/NounKor.gf index 327cc8ded..4fdb87878 100644 --- a/src/korean/NounKor.gf +++ b/src/korean/NounKor.gf @@ -107,6 +107,12 @@ concrete NounKor of Noun = CatKor ** open ResKor, Prelude in { numtype = IsDig } ; + NumFloat dig1 dig2 = baseNum ** { + s = \\_,_ => dig1.s ! NCard ++ BIND ++ "." ++ BIND ++ dig2.s ! NCard ; + n = Pl ; + numtype = IsDig + } ; + -- : Numeral -> Card ; NumNumeral num = num ; diff --git a/src/maltese/NounMlt.gf b/src/maltese/NounMlt.gf index c4b388663..5ca053708 100644 --- a/src/maltese/NounMlt.gf +++ b/src/maltese/NounMlt.gf @@ -189,6 +189,10 @@ concrete NounMlt of Noun = CatMlt ** open ResMlt, Prelude, Maybe in { -- 51 NumDigits d = {s = d.s ; n = d.n} ; + -- Digits -> Digits -> Card + -- 3.14 + NumFloat d1 d2 = {s = \\c => d1.s ! NumNom ++ BIND ++ "." ++ BIND ++ d2.s ! c ; n = d1.n} ; + -- Digits -> Ord -- 51st OrdDigits d = {s = d.s} ; diff --git a/src/polish/NounPol.gf b/src/polish/NounPol.gf index e6678b236..edeeed02b 100644 --- a/src/polish/NounPol.gf +++ b/src/polish/NounPol.gf @@ -163,6 +163,8 @@ concrete NounPol of Noun = CatPol ** open ResPol, Prelude, PronounMorphoPol, Mor -- NumDigits : Digits -> Card ; -- 51 NumDigits n = { s=\\_,_ => n.s; a=n.a; n=n.n }; + + NumFloat n1 n2 = { s=\\_,_ => n1.s ++ BIND ++ "." ++ BIND ++ n2.s; a=n1.a; n=Pl }; -- NumCard : Card -> Num ; NumCard c = c ** { hasCard = True }; diff --git a/src/romance/NounRomance.gf b/src/romance/NounRomance.gf index 5b2c3cc11..e70a5a204 100644 --- a/src/romance/NounRomance.gf +++ b/src/romance/NounRomance.gf @@ -96,6 +96,8 @@ incomplete concrete NounRomance of Noun = NumDigits nu = {s = \\g => nu.s ! NCard g ; n = nu.n} ; OrdDigits nu = {s = \\a => nu.s ! NOrd a.g a.n} ; + NumFloat n1 n2 = {s = \\g => n1.s ! NCard Masc ++ BIND ++ "." ++ BIND ++ n2.s ! NCard g ; n = Pl} ; + NumNumeral nu = {s = \\g => nu.s ! NCard g ; n = nu.n} ; OrdNumeral nu = {s = \\a => nu.s ! NOrd a.g a.n} ; diff --git a/src/romanian/NounRon.gf b/src/romanian/NounRon.gf index c812610da..67a59e840 100644 --- a/src/romanian/NounRon.gf +++ b/src/romanian/NounRon.gf @@ -172,6 +172,9 @@ in { isPre = True }; + NumFloat n1 n2 = {s,sp = \\g => n1.s ! NCard g ++ BIND ++ "." ++ BIND ++ n2.s ! NCard g ; + size = n1.n; n = Pl }; + NumNumeral nu = {s = \\g => nu.s ! ANomAcc ! (NCard g) ! Formal ; sp = \\g => nu.sp ! ANomAcc ! (NCard g) ! Formal ; n = getNumber nu.size ; size = nu.size }; @@ -306,4 +309,4 @@ in { } ; -}; \ No newline at end of file +}; diff --git a/src/russian/NounRus.gf b/src/russian/NounRus.gf index a704a0d35..2e00e4a1c 100644 --- a/src/russian/NounRus.gf +++ b/src/russian/NounRus.gf @@ -87,6 +87,8 @@ lin -- : Digits -> Card ; -- 51 NumDigits n = {s = \\_,_,_ => n.s ; size = n.size } ; + NumFloat n1 n2 = {s = \\_,_,_ => n1.s ++ BIND ++ "." ++ BIND ++ n2.s ; size = n1.size } ; + -- : Quant -> Num -> Det ; -- these five DetQuant quant num = { s=\\g,anim,cas => quant.s ! (gennum g (numSizeNumber num.size)) ! anim ! cas ++ num.s ! g ! anim ! cas ; diff --git a/src/scandinavian/NounScand.gf b/src/scandinavian/NounScand.gf index 450afbbce..ace0b2825 100644 --- a/src/scandinavian/NounScand.gf +++ b/src/scandinavian/NounScand.gf @@ -110,6 +110,8 @@ incomplete concrete NounScand of Noun = NumDigits nu = {s = \\g => nu.s ! NCard g ; n = nu.n} ; OrdDigits nu = {s = nu.s ! NOrd SupWeak} ; + NumFloat n1 n2 = {s = \\g => n1.s ! NCard neutrum ++ BIND ++ "." ++ BIND ++ n2.s ! NCard g ; n = Pl} ; + NumNumeral nu = {s = \\g => nu.s ! NCard g ; n = nu.n} ; OrdNumeral nu = {s = nu.s ! NOrd SupWeak} ; diff --git a/src/turkish/NounTur.gf b/src/turkish/NounTur.gf index 92ce1db8e..7aba93fec 100644 --- a/src/turkish/NounTur.gf +++ b/src/turkish/NounTur.gf @@ -176,6 +176,10 @@ concrete NounTur of Noun = CatTur ** open ResTur, SuffixTur, HarmonyTur, Prelude s = n.s ! NCard ; n = n.n } ; + NumFloat n1 n2 = { + s = \\n,c => n1.s ! NCard ! Sg ! Nom ++ BIND ++ "." ++ BIND ++ n2.s ! NCard ! n ! c ; n = Pl + } ; + OrdNumeralSuperl n a = { s = \\num,cs => (n.s ! NOrd ! Sg ! cs) ++ a.s ! Sg ! cs } ;