diff --git a/lib/src/italian/DiffIta.gf b/lib/src/italian/DiffIta.gf index cfe8304f9..3fa3f844b 100644 --- a/lib/src/italian/DiffIta.gf +++ b/lib/src/italian/DiffIta.gf @@ -128,7 +128,7 @@ instance DiffIta of DiffRomance = open CommonRomance, PhonoIta, BeschIta, Prelud Neg => <"non",[]> } ; - conjThan = "che" ; --- di + conjThan = "di" ; --- che conjThat = "che" ; subjIf = "se" ; diff --git a/lib/src/italian/LexiconIta.gf b/lib/src/italian/LexiconIta.gf index 31d2d43d1..7ed1e9d54 100644 --- a/lib/src/italian/LexiconIta.gf +++ b/lib/src/italian/LexiconIta.gf @@ -9,7 +9,7 @@ flags lin airplane_N = regN "aereo" ; answer_V2S = mkV2S (verboV (rispondere_76 "rispondere")) ParadigmsIta.dative ; - apartment_N = regN "apartamento" ; + apartment_N = regN "appartamento" ; apple_N = regN "mela" ; art_N = femN (regN "arte") ; ask_V2Q = mkV2Q (verboV (chiedere_29 "chiedere")) ParadigmsIta.dative ; @@ -19,7 +19,7 @@ lin beautiful_A = prefA (regADeg "bello") ; become_VA = essereV (regV "diventare") ; beer_N = regN "birra" ; - beg_V2V = mkV2V (regV "pregare") ParadigmsIta.accusative ParadigmsIta.dative ; + beg_V2V = mkV2V (regV "pregare") ParadigmsIta.accusative ParadigmsIta.genitive ; big_A = prefA (regADeg "grande") ; bike_N = regN "bicicletta" ; bird_N = regN "uccello" ; @@ -105,7 +105,7 @@ lin know_V2 = dirV2 (verboV (conoscere_37 "conoscere")) ; know_VS = mkVS (verboV (sapere_78 "sapere")) ; lake_N = regN "lago" ; - lamp_N = regN "lampa" ; + lamp_N = regN "lampada" ; learn_V2 = dirV2 (regV "imparare") ; leather_N = regN "cuoio" ; leave_V2 = dirV2 (regV "lasciare") ; @@ -117,7 +117,7 @@ lin love_N = regN "amore" ; love_V2 = dirV2 (regV "amare") ; man_N = mkN "uomo" "uomini" masculine ; - married_A2 = mkA2 (regA "sposato") ParadigmsIta.dative ; + married_A2 = mkA2 (regA "sposato") (mkPrep "con");--ParadigmsIta.dative meat_N = femN (regN "carne") ; milk_N = regN "latte" ; moon_N = regN "luna" ; @@ -131,7 +131,7 @@ lin old_A = prefA (regADeg "vecchio") ; open_V2 = dirV2 (verboV (aprire_102 "aprire")) ; paint_V2A = - mkV2A (verboV (cingere_31 "pingere")) ParadigmsIta.accusative (mkPrep "in") ; ---- + mkV2A (verboV (cingere_31 "dipingere")) ParadigmsIta.accusative ParadigmsIta.accusative; ---- has some other forms, but this is ok for most uses paper_N = regN "carta" ; paris_PN = mkPN "Parigi" masculine ; peace_N = femN (regN "pace") ; @@ -182,8 +182,8 @@ lin student_N = regN "studente" ; stupid_A = regADeg "stupido" ; sun_N = regN "sole" ; - switch8off_V2 = dirV2 (verboV (cingere_31 "spingere")) ; - switch8on_V2 = dirV2 (regV "allumare") ; ---- + switch8off_V2 = dirV2 (verboV (spegnere_86 "spegnere")) ; + switch8on_V2 = dirV2 (verboV (accendere_21 "accendere")) ; ---- table_N = regN "tavola" ; --- tavolo talk_V3 = mkV3 (regV "parlare") ParadigmsIta.dative ParadigmsIta.genitive ; teacher_N = regN "professore" ; @@ -345,7 +345,7 @@ lin think_V = regV "pensare" ; throw_V2 = dirV2 (regV "gettare") ; tie_V2 = dirV2 (regV "legare") ; - turn_V = regV "tornare" ; + turn_V = regV "girare" ; vomit_V = regV "vomitare" ; wash_V2 = dirV2 (regV "lavare") ; wipe_V2 = dirV2 (regV "asciugare") ; @@ -359,7 +359,7 @@ lin today_Adv = mkAdv "oggi" ; ready_A = mkA "pronto" ; - reason_N = mkN "raggione" feminine ; + reason_N = mkN "ragione" feminine ; uncertain_A = mkA "insicuro" ; } ; diff --git a/lib/src/italian/NumeralIta.gf b/lib/src/italian/NumeralIta.gf index 36a6e7553..f1e7bf14a 100644 --- a/lib/src/italian/NumeralIta.gf +++ b/lib/src/italian/NumeralIta.gf @@ -2,66 +2,100 @@ concrete NumeralIta of Numeral = CatIta ** open CommonRomance, ResRomance, MorphoIta, Prelude in { lincat - Digit = {s : DForm => CardOrd => Str} ; - Sub10 = {s : DForm => CardOrd => Str ; n : Number} ; + Digit = {s : DForm => CardOrd => Str ; isContr : Bool} ; + Sub10 = {s : DForm => CardOrd => Str ; n : Number ; isContr : Bool} ; Sub100 = {s : CardOrd => Str ; n : Number} ; Sub1000 = {s : CardOrd => Str ; n : Number} ; Sub1000000 = {s : CardOrd => Str ; n : Number} ; lin num x = x ; -lin n2 = mkTal "due" "dodici" "venti" "secondo" ; -lin n3 = mkTal "tre" "tredici" "trenta" "terzo" ; -lin n4 = mkTal "quattro" "quattordici" "quaranta" "quarto" ; -lin n5 = mkTal "cinque" "quindici" "cinquanta" "quinto" ; -lin n6 = mkTal "sei" "sedici" "sessanta" "sesto" ; -lin n7 = mkTal "sette" "diciassette" "settanta" "settimo" ; --- diciasettesimo? -lin n8 = mkTal "otto" "diciotto" "ottanta" "ottavo" ; -lin n9 = mkTal "nove" "diciannove" "novanta" "nono" ; +lin n2 = mkDigit (mkTal "due" "dodici" "venti" "secondo"); +lin n3 = mkDigit (mkTal "tre" "tredici" "trenta" "terzo") ; +lin n4 = mkDigit (mkTal "quattro" "quattordici" "quaranta" "quarto") ; +lin n5 = mkDigit (mkTal "cinque" "quindici" "cinquanta" "quinto") ; +lin n6 = mkDigit (mkTal "sei" "sedici" "sessanta" "sesto") ; +lin n7 = mkDigit (mkTal "sette" "diciassette" "settanta" "settimo") ; +lin n8 = {s = (mkTal "otto" "diciotto" "ottanta" "ottavo").s ; isContr = True } ; +lin n9 = mkDigit (mkTal "nove" "diciannove" "novanta" "nono") ; + +oper getRoot : Str -> Str = \due -> +case due of + { _ + ("ue" | "o" | "te"| "ve") => init due; + _ => due + }; +oper mkDigit : {s : DForm => CardOrd => Str} -> {s : DForm => CardOrd => Str ; isContr : Bool} = \ss-> +{s = ss.s; isContr = False}; lin pot01 = - let uno = (mkTal "uno" "undici" "dieci" "primo").s in + let uno = (mkTal "uno" "undici" "dieci" "primo" ).s in {s =\\f,g => case f of { - ental pred => [] ; - _ => case g of { - NCard Fem => "una" ; - _ => uno ! f ! g - } + ental t => case t of + {pred => case g of { + NCard Fem => "una" ; + _ => uno ! f ! g + }; + indep => case g of + { NCard _ => [] ; + _ => uno ! f ! g + } + }; + _ => uno ! f ! g } ; - n = Sg} ; + n = Sg; isContr = True +} ; -lin pot0 d = {s = d.s ; n = Pl} ; -lin pot110 = spl ((mkTal "dieci" [] [] "decimo").s ! ental indip) ; -lin pot111 = spl ((mkTal "undici" [] [] "undicesimo").s ! ental indip) ; +lin pot0 d = {s = d.s ; n = Pl; isContr = d.isContr} ; +lin pot110 = spl ((mkTall "dieci" [] [] "decimo" []).s ! ental pred) ; +lin pot111 = spl ((mkTall "undici" [] [] "undicesimo" []).s ! ental pred) ; lin pot1to19 d = spl (d.s ! ton) ; -lin pot0as1 n = {s = n.s ! ental indip ; n = n.n} ; +lin pot0as1 n = {s = n.s ! ental pred ; n = n.n} ; lin pot1 d = spl (d.s ! tiotal) ; lin pot1plus d e = - {s = \\g => d.s ! tiotal ! NCard Masc ++ e.s ! ental indip ! g ; n = Pl} ; + let ss = if_then_Str e.isContr (d.s ! tiouno ! NCard Masc) (d.s ! tiotal ! NCard Masc) + in + {s = table {NCard g => ss ++ "&+" ++(e.s ! ental pred ! NCard Masc) ; + NOrd g n => ss ++ "&+" ++e.s ! ental indip ! NOrd g n}; + n = Pl} ; + lin pot1as2 n = n ; -lin pot2 d = spl (\\co => d.s ! ental pred ! NCard Masc ++ - (mkTal "cento" [] [] "centesimo").s ! ental indip ! co) ; + +lin pot2 d = spl (\\co => d.s ! ental indip ! NCard Masc ++ "&+"++ + (mkTall "cento" [] [] [] "cent").s ! ental indip ! co) ; lin pot2plus d e = - {s = \\g => d.s ! ental pred ! NCard Masc ++ "cento" ++ e.s ! g ; n = Pl} ; + {s = table {NCard g => d.s ! ental indip ! NCard Masc ++ "&+" ++"cento" ++ "&+" ++e.s ! NCard Masc ; + NOrd g n => d.s ! ental indip ! NCard Masc ++ "&+" ++"cento" ++ "&+" ++ e.s ! NOrd g n}; + n = Pl} ; lin pot2as3 n = n ; -lin pot3 n = spl (\\co => n.s ! NCard Masc ++ - (mkTal (mille ! n.n) [] [] "millesimo").s ! ental indip ! co) ; -lin pot3plus n m = {s = \\g => n.s ! NCard Masc ++ mille ! n.n ++ m.s ! g ; n = Pl} ; +lin pot3 n = spl (\\co => n.s ! NCard Masc ++ "&+" ++ + (mkTall (mille ! n.n) [] [] [] "mill").s ! ental indip ! co ) ; + +lin pot3plus n m = {s = \\g => n.s ! NCard Masc ++ "&+" ++ mille ! n.n ++ "e" ++ m.s ! g ; n = Pl} ; oper - mkTal : (x1,_,_,x4 : Str) -> {s : DForm => CardOrd => Str} = - \due,dodici,venti,secondo -> {s = \\d,co => case of { + mkTall : (x1,_,_,_,x5 : Str) -> {s : DForm => CardOrd => Str} = + \due,dodici,venti,secondo,du -> + {s = \\d,co => case of { => due ; - => pronForms (adjSolo secondo) g n ; + => regOrdpred du g n ; + => pronForms (adjSolo secondo) g n ; => venti ; => regCard venti g n ; - => venti ; - => regCard venti g n - } + => dodici ; + => regCard dodici g n ; + => init venti + } } ; +mkTal : (x1,_,_,x4 : Str) -> {s : DForm => CardOrd => Str} = \due, dodici, venti, secondo -> +mkTall due dodici venti secondo (getRoot due) ; + regCard : Str -> Gender -> Number -> Str = \venti -> - pronForms (adjSolo (init venti + "esimo")) ; + regOrdpred (init venti) ; + + regOrdpred : Str -> Gender -> Number -> Str = \sei -> + pronForms (adjSolo (sei + "esimo")) ; + spl : (CardOrd => Str) -> {s : CardOrd => Str ; n : Number} = \s -> { s = s ; @@ -69,7 +103,7 @@ oper } ; oper mille : Number => Str = table {Sg => "mille" ; Pl => "mila"} ; -param DForm = ental Pred | ton | tiotal ; +param DForm = ental Pred | ton | tiotal | tiouno ; param Pred = pred | indip ; @@ -87,9 +121,9 @@ param Pred = pred | indip ; } ; D_0 = mkDig "0" ; - D_1 = mk3Dig "1" "1:o" Sg ; ---- gender - D_2 = mk2Dig "2" "2:o" ; - D_3 = mk2Dig "3" "3:o" ; + D_1 = mk2Dig "1" Sg ; ---- gender + D_2 = mkDig "2" ; + D_3 = mkDig "3" ; D_4 = mkDig "4" ; D_5 = mkDig "5" ; D_6 = mkDig "6" ; @@ -98,11 +132,13 @@ param Pred = pred | indip ; D_9 = mkDig "9" ; oper - mk2Dig : Str -> Str -> TDigit = \c,o -> mk3Dig c o Pl ; - mkDig : Str -> TDigit = \c -> mk2Dig c (c + ":o") ; - - mk3Dig : Str -> Str -> Number -> TDigit = \c,o,n -> { - s = table {NCard _ => c ; NOrd _ _ => o} ; ---- gender + mkDig : Str -> TDigit = \c -> mk2Dig c Pl ; + + mk2Dig : Str -> Number -> TDigit = \c,n -> { + s = table {NCard _ => c ; + NOrd Masc Sg => c + ":o" ; NOrd Fem Sg => c + ":a" ; + NOrd Masc Pl => c + ":i" ; NOrd Fem Pl => c + ":e" + } ; n = n } ; diff --git a/lib/src/romance/AdjectiveRomance.gf b/lib/src/romance/AdjectiveRomance.gf index d24d6dff0..521e9f45c 100644 --- a/lib/src/romance/AdjectiveRomance.gf +++ b/lib/src/romance/AdjectiveRomance.gf @@ -36,7 +36,7 @@ incomplete concrete AdjectiveRomance of Adjective = ReflA2 adj = { s = \\af => - adj.s ! Posit ! af ++ adj.c2.s ++ + adj.s ! Posit ! af ++ adj.c2.s ++ prepCase adj.c2.c ++ reflPron Sg P3 Nom ; --- agr isPre = False } ; diff --git a/lib/src/romance/VerbRomance.gf b/lib/src/romance/VerbRomance.gf index 691905d3b..06166cdc2 100644 --- a/lib/src/romance/VerbRomance.gf +++ b/lib/src/romance/VerbRomance.gf @@ -21,7 +21,7 @@ incomplete concrete VerbRomance of Verb = SlashV2V v vp = mkVPSlash v.c2 (insertComplement - (\\a => prepCase v.c2.c ++ infVP vp a) + (\\a => prepCase v.c3.c ++ infVP vp a) (predV v)) ; SlashV2S v s = @@ -68,7 +68,7 @@ incomplete concrete VerbRomance of Verb = SlashV2VNP v np vp = mkVPSlash vp.c2 (insertComplement - (\\a => prepCase v.c2.c ++ infVP vp a) + (\\a => prepCase v.c3.c ++ infVP vp a) (insertObject v.c2 np (predV v))) ; UseComp comp = insertComplement comp.s (predV copula) ;