diff --git a/src/abstract/Construction.gf b/src/abstract/Construction.gf index 5db329810..ca2b39d72 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 291b79b96..6ac58f8a6 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 c4c323920..1bdf87b5d 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