From 425f3c71e95e75b67e92f215cc22ee35133ac9d5 Mon Sep 17 00:00:00 2001 From: odanoburu Date: Wed, 24 Oct 2018 21:57:11 -0300 Subject: [PATCH 1/3] (Construction{Eng,Por}) add timeHour and timeHourMinute --- src/abstract/Construction.gf | 29 +++++++++++++++ src/english/ConstructionEng.gf | 51 +++++++++++++++++++++++--- src/portuguese/ConstructionPor.gf | 61 +++++++++++++++++++++++++++++-- 3 files changed, 133 insertions(+), 8 deletions(-) diff --git a/src/abstract/Construction.gf b/src/abstract/Construction.gf index 5db32981..ca2b39d7 100644 --- a/src/abstract/Construction.gf +++ b/src/abstract/Construction.gf @@ -71,6 +71,7 @@ fun cat Timeunit ; + Hour ; Weekday ; Month ; Monthday ; @@ -79,6 +80,34 @@ cat fun timeunitAdv : Card -> Timeunit -> Adv ; -- (for) three hours + oneHour : Hour ; + twoHour : Hour ; + threeHour : Hour ; + fourHour : Hour ; + fiveHour : Hour ; + sixHour : Hour ; + sevenHour : Hour ; + eightHour : Hour ; + nineHour : Hour ; + tenHour : Hour ; + elevenHour : Hour ; + twelveHour : Hour ; + thirteenHour : Hour ; + fourteenHour : Hour ; + fifteenHour : Hour ; + sixteenHour : Hour ; + seventeenHour : Hour ; + eighteenHour : Hour ; + nineteenHour : Hour ; + twentyHour : Hour ; + twentyOneHour : Hour ; + twentyTwoHour : Hour ; + twentyThreeHour : Hour ; + twentyFourHour : Hour ; + + timeHour : Hour -> Adv ; -- at three (o'clock / am / pm) + timeHourMinute : Hour -> Card -> Adv ; -- at forty past six + weekdayPunctualAdv : Weekday -> Adv ; -- on Monday weekdayHabitualAdv : Weekday -> Adv ; -- on Mondays weekdayLastAdv : Weekday -> Adv ; -- last Monday diff --git a/src/english/ConstructionEng.gf b/src/english/ConstructionEng.gf index 291b79b9..6ac58f8a 100644 --- a/src/english/ConstructionEng.gf +++ b/src/english/ConstructionEng.gf @@ -62,16 +62,57 @@ oper from_where_IAdv : IAdv = lin IAdv (ss "from where") ; lincat Timeunit = N ; + Hour = {s : Str ; am : Bool} ; Weekday = N ; Monthday = NP ; Month = N ; Year = NP ; -lin - timeunitAdv n time = - let n_card : Card = n ; - n_hours_NP : NP = mkNP n_card time ; - in SyntaxEng.mkAdv for_Prep n_hours_NP | mkAdv (n_hours_NP.s ! R.npNom) ; + lin + timeunitAdv n time = + let n_card : Card = n ; + n_hours_NP : NP = mkNP n_card time ; + in SyntaxEng.mkAdv for_Prep n_hours_NP | mkAdv (n_hours_NP.s ! R.npNom) ; + + oneHour = {s = "one" ; am = True} ; + twoHour = {s = "two" ; am = True} ; + threeHour = {s = "three" ; am = True} ; + fourHour = {s = "four" ; am = True} ; + fiveHour = {s = "five" ; am = True} ; + sixHour = {s = "six" ; am = True} ; + sevenHour = {s = "seven" ; am = True} ; + eightHour = {s = "eight" ; am = True} ; + nineHour = {s = "nine" ; am = True} ; + tenHour = {s = "ten" ; am = True} ; + elevenHour = {s = "eleven" ; am = True} ; + twelveHour = {s = "twelve" ; am = False} ; + thirteenHour = {s = "one" ; am = False} ; + fourteenHour = {s = "two" ; am = False} ; + fifteenHour = {s = "three" ; am = False} ; + sixteenHour = {s = "four" ; am = False} ; + seventeenHour = {s = "five" ; am = False} ; + eighteenHour = {s = "six" ; am = False} ; + nineteenHour = {s = "seven" ; am = False} ; + twentyHour = {s = "eight" ; am = False} ; + twentyOneHour = {s = "nine" ; am = False} ; + twentyTwoHour = {s = "ten" ; am = False} ; + twentyThreeHour = {s = "eleven" ; am = False} ; + twentyFourHour = {s = "twelve" ; am = True} ; + + timeHour h = SyntaxEng.mkAdv at_Prep (symb (hourStr h)) ; + timeHourMinute h m = let + min = m.s ! True ! R.Nom + in + mkAdv (variants {at_Prep.s ++ h.s ++ min ; at_Prep.s ++ min ++ "past" ++ h.s}) ; + + oper + at_Prep : Prep ; + at_Prep = mkPrep "at" ; + + hourStr : Hour -> Str ; + hourStr h = h.s ++ ("" | "o'clock" | if_then_Str h.am "AM" "PM") ; + + lin weekdayPunctualAdv w = SyntaxEng.mkAdv on_Prep (mkNP w) ; -- on Sunday weekdayHabitualAdv w = SyntaxEng.mkAdv on_Prep (mkNP aPl_Det w) ; -- on Sundays weekdayNextAdv w = SyntaxEng.mkAdv (mkPrep "next") (mkNP w) ; -- next Sunday diff --git a/src/portuguese/ConstructionPor.gf b/src/portuguese/ConstructionPor.gf index c4c32392..1bdf87b5 100644 --- a/src/portuguese/ConstructionPor.gf +++ b/src/portuguese/ConstructionPor.gf @@ -3,7 +3,7 @@ concrete ConstructionPor of Construction = CatPor ** open SyntaxPor, SymbolicPor, ParadigmsPor, BeschPor, (L = LexiconPor), (E = ExtraPor), (B = IrregBeschPor), (R = ResPor), - (S = SyntaxPor), (C = CommonRomance), + (S = SyntaxPor), (C = CommonRomance), CommonRomance, Prelude in { flags coding=utf8 ; @@ -52,12 +52,17 @@ lin lincat Timeunit = N ; + Hour = {s : Str ; pe : Period ; n : Number} ; Weekday = N ; Monthday = NP ; Month = N ; Year = NP ; -oper - noPrep : Prep = mkPrep [] ; + + param + Period = Manhã | Tarde | Noite ; + + oper + noPrep : Prep = mkPrep [] ; lin timeunitAdv n time = @@ -65,6 +70,56 @@ oper n_hours_NP : NP = mkNP n_card time ; in S.mkAdv for_Prep n_hours_NP | S.mkAdv to_Prep n_hours_NP ;--| S.mkAdv (n_hours_NP.s ! R.Nom) ; + oneHour = {s = "uma"; pe = Manhã ; n = Sg} ; + twoHour = {s = "duas" ; pe = Manhã ; n = Pl} ; + threeHour = {s = "três" ; pe = Manhã ; n = Pl} ; + fourHour = {s = "quatro" ; pe = Manhã ; n = Pl} ; + fiveHour = {s = "cinco" ; pe = Manhã ; n = Pl} ; + sixHour = {s = "seis" ; pe = Manhã ; n = Pl} ; + sevenHour = {s = "sete" ; pe = Manhã ; n = Pl} ; + eightHour = {s = "oito" ; pe = Manhã ; n = Pl} ; + nineHour = {s = "nove" ; pe = Manhã ; n = Pl} ; + tenHour = {s = "dez" ; pe = Manhã ; n = Pl} ; + elevenHour = {s = "onze" ; pe = Manhã ; n = Pl} ; + twelveHour = {s = "doze" ; pe = Tarde ; n = Pl} ; + thirteenHour = {s = "uma" ; pe = Tarde ; n = Sg } | {s = "treze" ; pe = Tarde ; n = Pl} ; + fourteenHour = {s = "duas" | "catorze" ; pe = Tarde ; n = Pl} ; + fifteenHour = {s = "três" | "quinze" ; pe = Tarde ; n = Pl} ; + sixteenHour = {s = "quatro" | "dezesseis" ; pe = Tarde ; n = Pl} ; + seventeenHour = {s = "cinco" | "dezessete" ; pe = Noite ; n = Pl} ; + eighteenHour = {s = "seis" | "dezoito" ; pe = Noite ; n = Pl} ; + nineteenHour = {s = "sete" | "dezenove" ; pe = Noite ; n = Pl} ; + twentyHour = {s = "oito" | "vinte" ; pe = Noite ; n = Pl} ; + twentyOneHour = {s = "nove" | "vinte e uma" ; pe = Noite ; n = Pl} ; + twentyTwoHour = {s = "dez" | "vinte e duas" ; pe = Noite ; n = Pl} ; + twentyThreeHour = {s = "onze" | "vinte e três" ; pe = Noite ; n = Pl} ; + twentyFourHour = {s = "zero" ; pe = Manhã ; n = Pl} | {s = "meia-noite" ; pe = Manhã ; n = Sg} ; + + timeHour h = mkAdv (hourStr h) ; + + timeHourMinute h m = let + min = m.s ! Masc ++ variants {"" ; numForms "minuto" "minutos" ! m.n} + in + mkAdv (a ! h.n ++ h.s ++ (hora ! h.n | "") ++ "e" ++ min ++ variants {"" ; period ! h.pe}) ; + + oper + period : Period => Str ; + period = table { + Manhã => "da manhã" ; + Tarde => "da tarde" ; + Noite => "da noite" + } ; + + a : Number => Str ; + a = numForms "à" "às" ; + + hora : Number => Str ; + hora = numForms "hora" "horas" ; + + hourStr : Hour -> Str ; + hourStr h = a ! h.n ++ h.s ++ variants {"" ; ("" | hora ! h.n) ++ period ! h.pe ; hora ! h.n} ; + + lin weekdayPunctualAdv w = lin Adv {s = w.s ! C.Sg} ; -- lundi weekdayHabitualAdv w = SyntaxPor.mkAdv noPrep (mkNP the_Det w) ; -- il lunedí ---- weekdayLastAdv w = SyntaxPor.mkAdv noPrep (mkNP the_Det (mkCN (mkA "passado") w)) ; -- il lunedí scorso From 7e60a931c8c531798b73c5f802a01803f62ae881 Mon Sep 17 00:00:00 2001 From: odanoburu Date: Thu, 25 Oct 2018 18:59:01 +0000 Subject: [PATCH 2/3] WIP: incorporate @aarneranta's comments --- src/english/ConstructionEng.gf | 63 ++++++++++---------- src/portuguese/ConstructionPor.gf | 97 ++++++++++++++++--------------- 2 files changed, 83 insertions(+), 77 deletions(-) diff --git a/src/english/ConstructionEng.gf b/src/english/ConstructionEng.gf index 6ac58f8a..d0e6b591 100644 --- a/src/english/ConstructionEng.gf +++ b/src/english/ConstructionEng.gf @@ -1,7 +1,7 @@ --# -path=.:../abstract concrete ConstructionEng of Construction = CatEng ** - open SyntaxEng, SymbolicEng, ParadigmsEng, (L = LexiconEng), (E = ExtendEng), (G = GrammarEng), (R = ResEng), (S = StructuralEng), Prelude in { + open SyntaxEng, SymbolicEng, ParadigmsEng, (L = LexiconEng), (E = ExtendEng), (G = GrammarEng), (R = ResEng), (Sy = SyntaxEng), (S = StructuralEng), Prelude in { lin @@ -72,45 +72,48 @@ lincat timeunitAdv n time = let n_card : Card = n ; n_hours_NP : NP = mkNP n_card time ; - in SyntaxEng.mkAdv for_Prep n_hours_NP | mkAdv (n_hours_NP.s ! R.npNom) ; + in Sy.mkAdv for_Prep n_hours_NP | mkAdv (n_hours_NP.s ! R.npNom) ; - oneHour = {s = "one" ; am = True} ; - twoHour = {s = "two" ; am = True} ; - threeHour = {s = "three" ; am = True} ; - fourHour = {s = "four" ; am = True} ; - fiveHour = {s = "five" ; am = True} ; - sixHour = {s = "six" ; am = True} ; - sevenHour = {s = "seven" ; am = True} ; - eightHour = {s = "eight" ; am = True} ; - nineHour = {s = "nine" ; am = True} ; - tenHour = {s = "ten" ; am = True} ; - elevenHour = {s = "eleven" ; am = True} ; - twelveHour = {s = "twelve" ; am = False} ; - thirteenHour = {s = "one" ; am = False} ; - fourteenHour = {s = "two" ; am = False} ; - fifteenHour = {s = "three" ; am = False} ; - sixteenHour = {s = "four" ; am = False} ; - seventeenHour = {s = "five" ; am = False} ; - eighteenHour = {s = "six" ; am = False} ; - nineteenHour = {s = "seven" ; am = False} ; - twentyHour = {s = "eight" ; am = False} ; - twentyOneHour = {s = "nine" ; am = False} ; - twentyTwoHour = {s = "ten" ; am = False} ; - twentyThreeHour = {s = "eleven" ; am = False} ; - twentyFourHour = {s = "twelve" ; am = True} ; + oneHour = mkHour "1" True ; + twoHour = mkHour "2" True ; + threeHour = mkHour "3" True ; + fourHour = mkHour "4" True ; + fiveHour = mkHour "5" True ; + sixHour = mkHour "6" True ; + sevenHour = mkHour "7" True ; + eightHour = mkHour "8" True ; + nineHour = mkHour "9" True ; + tenHour = mkHour "10" True ; + elevenHour = mkHour "11" True ; + twelveHour = mkHour "12" False ; + thirteenHour = mkHour "1" False ; + fourteenHour = mkHour "2" False ; + fifteenHour = mkHour "3" False ; + sixteenHour = mkHour "4" False ; + seventeenHour = mkHour "5" False ; + eighteenHour = mkHour "6" False ; + nineteenHour = mkHour "7" False ; + twentyHour = mkHour "8" False ; + twentyOneHour = mkHour "9" False ; + twentyTwoHour = mkHour "10" False ; + twentyThreeHour = mkHour "11" False ; + twentyFourHour = mkHour "12" True ; - timeHour h = SyntaxEng.mkAdv at_Prep (symb (hourStr h)) ; + timeHour h = Sy.mkAdv at_Prep (symb (h.s ++ ampm ! h.am)) ; timeHourMinute h m = let min = m.s ! True ! R.Nom in - mkAdv (variants {at_Prep.s ++ h.s ++ min ; at_Prep.s ++ min ++ "past" ++ h.s}) ; + Sy.mkAdv at_Prep (symb (h.s ++ min ++ ampm ! h.am)) ; oper + mkHour : Str -> Bool -> {s : Str ; am : Bool} ; + mkHour n am = Sy.mkUtt (Sy.mkCard n) ** {am = am} ; + at_Prep : Prep ; at_Prep = mkPrep "at" ; - hourStr : Hour -> Str ; - hourStr h = h.s ++ ("" | "o'clock" | if_then_Str h.am "AM" "PM") ; + ampm : Bool => Str ; + ampm = table {True => "a.m." ; False => "p.m."} ; lin weekdayPunctualAdv w = SyntaxEng.mkAdv on_Prep (mkNP w) ; -- on Sunday diff --git a/src/portuguese/ConstructionPor.gf b/src/portuguese/ConstructionPor.gf index 1bdf87b5..48ab43d0 100644 --- a/src/portuguese/ConstructionPor.gf +++ b/src/portuguese/ConstructionPor.gf @@ -64,60 +64,63 @@ lin oper noPrep : Prep = mkPrep [] ; - lin - timeunitAdv n time = - let n_card : Card = lin Card n; - n_hours_NP : NP = mkNP n_card time ; - in S.mkAdv for_Prep n_hours_NP | S.mkAdv to_Prep n_hours_NP ;--| S.mkAdv (n_hours_NP.s ! R.Nom) ; + -- lin + -- timeunitAdv n time = + -- let n_card : Card = lin Card n; + -- n_hours_NP : NP = mkNP n_card time ; + -- in S.mkAdv for_Prep n_hours_NP | S.mkAdv to_Prep n_hours_NP ;--| S.mkAdv (n_hours_NP.s ! R.Nom) ; - oneHour = {s = "uma"; pe = Manhã ; n = Sg} ; - twoHour = {s = "duas" ; pe = Manhã ; n = Pl} ; - threeHour = {s = "três" ; pe = Manhã ; n = Pl} ; - fourHour = {s = "quatro" ; pe = Manhã ; n = Pl} ; - fiveHour = {s = "cinco" ; pe = Manhã ; n = Pl} ; - sixHour = {s = "seis" ; pe = Manhã ; n = Pl} ; - sevenHour = {s = "sete" ; pe = Manhã ; n = Pl} ; - eightHour = {s = "oito" ; pe = Manhã ; n = Pl} ; - nineHour = {s = "nove" ; pe = Manhã ; n = Pl} ; - tenHour = {s = "dez" ; pe = Manhã ; n = Pl} ; - elevenHour = {s = "onze" ; pe = Manhã ; n = Pl} ; - twelveHour = {s = "doze" ; pe = Tarde ; n = Pl} ; - thirteenHour = {s = "uma" ; pe = Tarde ; n = Sg } | {s = "treze" ; pe = Tarde ; n = Pl} ; - fourteenHour = {s = "duas" | "catorze" ; pe = Tarde ; n = Pl} ; - fifteenHour = {s = "três" | "quinze" ; pe = Tarde ; n = Pl} ; - sixteenHour = {s = "quatro" | "dezesseis" ; pe = Tarde ; n = Pl} ; - seventeenHour = {s = "cinco" | "dezessete" ; pe = Noite ; n = Pl} ; - eighteenHour = {s = "seis" | "dezoito" ; pe = Noite ; n = Pl} ; - nineteenHour = {s = "sete" | "dezenove" ; pe = Noite ; n = Pl} ; - twentyHour = {s = "oito" | "vinte" ; pe = Noite ; n = Pl} ; - twentyOneHour = {s = "nove" | "vinte e uma" ; pe = Noite ; n = Pl} ; - twentyTwoHour = {s = "dez" | "vinte e duas" ; pe = Noite ; n = Pl} ; - twentyThreeHour = {s = "onze" | "vinte e três" ; pe = Noite ; n = Pl} ; - twentyFourHour = {s = "zero" ; pe = Manhã ; n = Pl} | {s = "meia-noite" ; pe = Manhã ; n = Sg} ; + -- oneHour = mkHour "1" Manhã Sg ; + -- twoHour = mkHour "2" Manhã Pl ; + -- threeHour = mkHour "3" Manhã Pl ; + -- fourHour = mkHour "4" Manhã Pl ; + -- fiveHour = mkHour "5" Manhã Pl ; + -- sixHour = mkHour "6" Manhã Pl ; + -- sevenHour = mkHour "7" Manhã Pl ; + -- eightHour = mkHour "8" Manhã Pl ; + -- nineHour = mkHour "9" Manhã Pl ; + -- tenHour = mkHour "10" Manhã Pl ; + -- elevenHour = mkHour "11" Manhã Pl ; + -- twelveHour = mkHour "12" Tarde Pl ; + -- thirteenHour = mkHour "13" Tarde Sg ; + -- fourteenHour = mkHour "14" Tarde Pl ; + -- fifteenHour = mkHour "15" Tarde Pl ; + -- sixteenHour = mkHour "16" Tarde Pl ; + -- seventeenHour = mkHour "17" Noite Pl ; + -- eighteenHour = mkHour "18" Noite Pl ; + -- nineteenHour = mkHour "19" Noite Pl ; + -- twentyHour = mkHour "20" Noite Pl ; + -- twentyOneHour = mkHour "21" Noite Pl ; + -- twentyTwoHour = mkHour "22" Noite Pl ; + -- twentyThreeHour = mkHour "23" Noite Pl ; + -- twentyFourHour = mkHour "meia-noite" ; pe = Manhã ; n = Sg} ; - timeHour h = mkAdv (hourStr h) ; + -- timeHour h = mkAdv (hourStr h) ; - timeHourMinute h m = let - min = m.s ! Masc ++ variants {"" ; numForms "minuto" "minutos" ! m.n} - in - mkAdv (a ! h.n ++ h.s ++ (hora ! h.n | "") ++ "e" ++ min ++ variants {"" ; period ! h.pe}) ; + -- timeHourMinute h m = let + -- min = m.s ! Masc ++ variants {"" ; numForms "minuto" "minutos" ! m.n} + -- in + -- mkAdv (a ! h.n ++ h.s ++ (hora ! h.n | "") ++ "e" ++ min ++ variants {"" ; period ! h.pe}) ; - oper - period : Period => Str ; - period = table { - Manhã => "da manhã" ; - Tarde => "da tarde" ; - Noite => "da noite" - } ; + -- oper + -- mkHour : Str -> Period -> Number ; + -- mkHour num p n = S.mkUtt (S.mkCard num) ** {p = p ; n = n} ; + + -- period : Period => Str ; + -- period = table { + -- Manhã => "da manhã" ; + -- Tarde => "da tarde" ; + -- Noite => "da noite" + -- } ; - a : Number => Str ; - a = numForms "à" "às" ; + -- a : Number => Str ; + -- a = numForms "à" "às" ; - hora : Number => Str ; - hora = numForms "hora" "horas" ; + -- hora : Number => Str ; + -- hora = numForms "hora" "horas" ; - hourStr : Hour -> Str ; - hourStr h = a ! h.n ++ h.s ++ variants {"" ; ("" | hora ! h.n) ++ period ! h.pe ; hora ! h.n} ; + -- hourStr : Hour -> Str ; + -- hourStr h = a ! h.n ++ h.s ++ variants {"" ; ("" | hora ! h.n) ++ period ! h.pe ; hora ! h.n} ; lin weekdayPunctualAdv w = lin Adv {s = w.s ! C.Sg} ; -- lundi From fa34877ea3166c17dd3cc4c6108da89ac0c4c5fb Mon Sep 17 00:00:00 2001 From: odanoburu Date: Fri, 26 Oct 2018 18:28:22 +0000 Subject: [PATCH 3/3] (Por) fix Portuguese time --- src/portuguese/ConstructionPor.gf | 99 +++++++++++++++---------------- 1 file changed, 47 insertions(+), 52 deletions(-) diff --git a/src/portuguese/ConstructionPor.gf b/src/portuguese/ConstructionPor.gf index 48ab43d0..f3409985 100644 --- a/src/portuguese/ConstructionPor.gf +++ b/src/portuguese/ConstructionPor.gf @@ -59,68 +59,63 @@ lin Year = NP ; param - Period = Manhã | Tarde | Noite ; + Period = Manha | Tarde | Noite | None ; oper noPrep : Prep = mkPrep [] ; - -- lin - -- timeunitAdv n time = - -- let n_card : Card = lin Card n; - -- n_hours_NP : NP = mkNP n_card time ; - -- in S.mkAdv for_Prep n_hours_NP | S.mkAdv to_Prep n_hours_NP ;--| S.mkAdv (n_hours_NP.s ! R.Nom) ; + lin + timeunitAdv n time = + let n_card : Card = lin Card n; + n_hours_NP : NP = mkNP n_card time ; + in S.mkAdv for_Prep n_hours_NP | S.mkAdv to_Prep n_hours_NP ;--| S.mkAdv (n_hours_NP.s ! R.Nom) ; - -- oneHour = mkHour "1" Manhã Sg ; - -- twoHour = mkHour "2" Manhã Pl ; - -- threeHour = mkHour "3" Manhã Pl ; - -- fourHour = mkHour "4" Manhã Pl ; - -- fiveHour = mkHour "5" Manhã Pl ; - -- sixHour = mkHour "6" Manhã Pl ; - -- sevenHour = mkHour "7" Manhã Pl ; - -- eightHour = mkHour "8" Manhã Pl ; - -- nineHour = mkHour "9" Manhã Pl ; - -- tenHour = mkHour "10" Manhã Pl ; - -- elevenHour = mkHour "11" Manhã Pl ; - -- twelveHour = mkHour "12" Tarde Pl ; - -- thirteenHour = mkHour "13" Tarde Sg ; - -- fourteenHour = mkHour "14" Tarde Pl ; - -- fifteenHour = mkHour "15" Tarde Pl ; - -- sixteenHour = mkHour "16" Tarde Pl ; - -- seventeenHour = mkHour "17" Noite Pl ; - -- eighteenHour = mkHour "18" Noite Pl ; - -- nineteenHour = mkHour "19" Noite Pl ; - -- twentyHour = mkHour "20" Noite Pl ; - -- twentyOneHour = mkHour "21" Noite Pl ; - -- twentyTwoHour = mkHour "22" Noite Pl ; - -- twentyThreeHour = mkHour "23" Noite Pl ; - -- twentyFourHour = mkHour "meia-noite" ; pe = Manhã ; n = Sg} ; + oneHour = mkHour "1" Manha Sg ; + twoHour = mkHour "2" Manha Pl ; + threeHour = mkHour "3" Manha Pl ; + fourHour = mkHour "4" Manha Pl ; + fiveHour = mkHour "5" Manha Pl ; + sixHour = mkHour "6" Manha Pl ; + sevenHour = mkHour "7" Manha Pl ; + eightHour = mkHour "8" Manha Pl ; + nineHour = mkHour "9" Manha Pl ; + tenHour = mkHour "10" Manha Pl ; + elevenHour = mkHour "11" Manha Pl ; + twelveHour = {s = "meio-dia" ; pe = None ; n = Sg} ; + thirteenHour = mkHour "13" Tarde Pl ; + fourteenHour = mkHour "14" Tarde Pl ; + fifteenHour = mkHour "15" Tarde Pl ; + sixteenHour = mkHour "16" Tarde Pl ; + seventeenHour = mkHour "17" Tarde Pl ; + eighteenHour = mkHour "18" Tarde Pl ; + nineteenHour = mkHour "19" Noite Pl ; + twentyHour = mkHour "20" Noite Pl ; + twentyOneHour = mkHour "21" Noite Pl ; + twentyTwoHour = mkHour "22" Noite Pl ; + twentyThreeHour = mkHour "23" Noite Pl ; + twentyFourHour = {s = "meia-noite" ; pe = None ; n = Sg} ; - -- timeHour h = mkAdv (hourStr h) ; + timeHour h = mkAdv (a ! h.n ++ h.s ++ period ! h.pe) ; - -- timeHourMinute h m = let - -- min = m.s ! Masc ++ variants {"" ; numForms "minuto" "minutos" ! m.n} - -- in - -- mkAdv (a ! h.n ++ h.s ++ (hora ! h.n | "") ++ "e" ++ min ++ variants {"" ; period ! h.pe}) ; + timeHourMinute h m = let + min = m.s ! Masc + in + mkAdv (a ! h.n ++ h.s ++ "e" ++ min ++ period ! h.pe) ; - -- oper - -- mkHour : Str -> Period -> Number ; - -- mkHour num p n = S.mkUtt (S.mkCard num) ** {p = p ; n = n} ; + oper + mkHour : Str -> Period -> Number -> {s : Str ; pe : Period ; n : Number} ; + mkHour num pe n = S.mkUtt (S.mkCard num) ** {pe = pe ; n = n} ; - -- period : Period => Str ; - -- period = table { - -- Manhã => "da manhã" ; - -- Tarde => "da tarde" ; - -- Noite => "da noite" - -- } ; + period : Period => Str ; + period = table { + Manha => "da manhã" ; + Tarde => "da tarde" ; + Noite => "da noite" ; + None => "" + } ; - -- a : Number => Str ; - -- a = numForms "à" "às" ; - - -- hora : Number => Str ; - -- hora = numForms "hora" "horas" ; - - -- hourStr : Hour -> Str ; - -- hourStr h = a ! h.n ++ h.s ++ variants {"" ; ("" | hora ! h.n) ++ period ! h.pe ; hora ! h.n} ; + a : Number => Str ; + a = numForms "à" "às" ; lin weekdayPunctualAdv w = lin Adv {s = w.s ! C.Sg} ; -- lundi