diff --git a/lib/src/spanish/ExtraSpa.gf b/lib/src/spanish/ExtraSpa.gf index 995cb5260..5a6a9647e 100644 --- a/lib/src/spanish/ExtraSpa.gf +++ b/lib/src/spanish/ExtraSpa.gf @@ -36,7 +36,7 @@ concrete ExtraSpa of ExtraSpaAbs = ExtraRomanceSpa ** Fem Sg P3 ; youPolPl_Pron = mkPronoun - "ustedes" "las" "les" "usted" + "ustedes" "los" "les" "usted" "su" "su" "sus" "sus" Masc Pl P3 ; youPolPl8fem_Pron = mkPronoun diff --git a/lib/src/spanish/MorphoSpa.gf b/lib/src/spanish/MorphoSpa.gf index 071384443..aa318220d 100644 --- a/lib/src/spanish/MorphoSpa.gf +++ b/lib/src/spanish/MorphoSpa.gf @@ -9,7 +9,8 @@ -- gives a higher-level access to this module. resource MorphoSpa = CommonRomance, ResSpa ** - open PhonoSpa, Prelude, Predef in { + open PhonoSpa, Prelude, Predef, + CatSpa in { flags optimize=all ; @@ -101,7 +102,8 @@ oper "á" => "a" ; "é" => "e" ; "í­" => "i" ; - "ó" => "o" + "ó" => "o" ; + "ú" => "u" } ; alemVn : Str = alem + V + "n" ; in mkAdj alemAn (alemVn + "a") (alemVn + "es") @@ -114,7 +116,6 @@ oper _ + "és" => adjEs solo ; _ + ("á" | "é­" | "í" | "ó") + "n" => adjVn solo ; _ => adjUtil solo (solo + "es") ----- _ => adjBlu solo } ; --2 Personal pronouns @@ -154,4 +155,42 @@ oper pronForms : Adj -> Gender -> Number -> Str = \tale,g,n -> tale.s ! AF g n ; + mkOrdinal : A -> Ord = \adj-> + lin Ord { + s = \\ag => adj.s ! Posit ! AF ag.g ag.n ; + } ; + + mkQuantifier : (ese,esa,esos,esas : Str) -> Quant = \ese,esa,esos,esas-> + let + se : Str = Predef.drop 1 ese ; + sa : Str = Predef.drop 1 esa ; + sos : Str = Predef.drop 1 esos ; + sas : Str = Predef.drop 1 esas ; + E : Str = "é" ; + attrforms : Number => Gender => Case => Str = table { + Sg => \\g,c => prepCase c ++ genForms ese esa ! g ; + Pl => \\g,c => prepCase c ++ genForms esos esas ! g ---- + } ; + npforms : Number => Gender => Case => Str = table { + Sg => \\g,c => prepCase c ++ genForms (E + se) (E + sa) ! g ; + Pl => \\g,c => prepCase c ++ genForms (E + sos) (E + sas) ! g } + in lin Quant { + s = \\_ => attrforms ; + s2 = [] ; + sp = npforms ; isNeg = False + } ; + + mkDeterminer : (mucho,mucha : Str) -> Number -> Bool -> Det = \mucho,mucha,number,neg -> + lin Det { + s,sp = \\g,c => prepCase c ++ genForms mucho mucha ! g ; + n = number; + s2 = [] ; + isNeg = neg + } ; + + mkIDet : (cuantos, cuantas : Str) -> Number -> IDet = \cuantos,cuantas,number -> + lin IDet { + s = \\g,c => prepCase c ++ genForms cuantos cuantas ! g ; + n = number + } ; } diff --git a/lib/src/spanish/ParadigmsSpa.gf b/lib/src/spanish/ParadigmsSpa.gf index 0702a427c..b57e2b2b1 100644 --- a/lib/src/spanish/ParadigmsSpa.gf +++ b/lib/src/spanish/ParadigmsSpa.gf @@ -172,15 +172,6 @@ oper mkA2 : A -> Prep -> A2 ; -- e.g. "casado" + dative --- Quantifiers - - mkQuant : (ese,esa,esos,esas : Str) -> Quant ; - - mkDet : (mucho,mucha : Str) -> Number -> Det ; - - mkOrd : A -> Ord ; - - --2 Adverbs -- Adverbs are not inflected. Most lexical ones have position @@ -355,36 +346,6 @@ oper mkAdA x = ss x ** {lock_AdA = <>} ; mkAdN x = ss x ** {lock_AdN = <>} ; - mkOrd adj = lin Ord { - s = \\ag => adj.s ! Posit ! AF ag.g ag.n ; - } ; - - mkQuant ese esa esos esas = - let - se : Str = Predef.drop 1 ese ; - sa : Str = Predef.drop 1 esa ; - sos : Str = Predef.drop 1 esos ; - sas : Str = Predef.drop 1 esas ; - E : Str = "é" ; - attrforms : Number => Gender => Case => Str = table { - Sg => \\g,c => prepCase c ++ genForms ese esa ! g ; - Pl => \\g,c => prepCase c ++ genForms esos esas ! g ---- - } ; - npforms : Number => Gender => Case => Str = table { - Sg => \\g,c => prepCase c ++ genForms (E + se) (E + sa) ! g ; - Pl => \\g,c => prepCase c ++ genForms (E + sos) (E + sas) ! g } - in lin Quant { - s = \\_ => attrforms ; - s2 = [] ; - sp = npforms ; isNeg = False - } ; - - mkDet mucho mucha number = - lin Det { - s,sp = \\g,c => prepCase c ++ genForms mucho mucha ! g ; - n = number; - s2 = [] ; isNeg = False - } ; regV x = -- cortar actuar cazar guiar pagar sacar let diff --git a/lib/src/spanish/StructuralSpa.gf b/lib/src/spanish/StructuralSpa.gf index 06bf35f2b..a795a0c56 100644 --- a/lib/src/spanish/StructuralSpa.gf +++ b/lib/src/spanish/StructuralSpa.gf @@ -5,33 +5,8 @@ concrete StructuralSpa of Structural = CatSpa ** flags optimize=all ; lin - - -- Added by John J. Camilleri 2012-05-23 - -- These were all missing from the Spanish RG. - -- Implementations copied from catalan/StructuralCat.gf, but likely buggy. - at_least_AdN = ss "al menos" ; - at_most_AdN = ss "a lo más" ; - except_Prep = mkPrep "excepto" ; -- have_V3 -- have_not_V3 - how8much_IAdv = ss "cuanto" ; - if_then_Conj = {s1 = "si" ; s2 = "entonces" ; n = Sg ; lock_Conj = <>} ; - no_Quant = - let - capS : Str = "hacia" ; - cap : ParadigmsSpa.Number => ParadigmsSpa.Gender => Case => Str = table { - Sg => \\g,c => prepCase c ++ genForms capS capS ! g ; - Pl => \\g,c => prepCase c ++ genForms capS capS ! g - } - in { - s = \\_ => cap ; - sp = cap ; - s2 = [] ; isNeg = True - } ; - not_Predet = {s = \\a,c => prepCase c ++ "no" ; c = Nom ; a = PNoAg} ; - nobody_NP = pn2npNeg (mkPN "nadie") ; - nothing_NP = pn2npNeg (mkPN "nada") ; - -- above_Prep = mkPrep "sobre" ; after_Prep = {s = ["despues"] ; c = MorphoSpa.genitive ; isDir = False} ; @@ -42,8 +17,10 @@ lin } ; almost_AdA, almost_AdN = ss "casi" ; always_AdV = ss "siempre" ; - although_Subj = ss "benché" ** {m = Conjunct} ; + although_Subj = ss "aunque" ** {m = Conjunct} ; and_Conj = {s1 = [] ; s2 = etConj.s ; n = Pl} ; + at_least_AdN = ss "al menos" ; + at_most_AdN = ss "a lo más" ; because_Subj = ss "porque" ** {m = Indic} ; before_Prep = {s = "antes" ; c = MorphoSpa.genitive ; isDir = False} ; behind_Prep = {s = "detrás" ; c = MorphoSpa.genitive ; isDir = False} ; @@ -54,29 +31,30 @@ lin by8means_Prep = mkPrep "por" ; can8know_VV = mkVV (verboV (saber_71 "saber")) ; can_VV = mkVV (verboV (poder_58 "poder")) ; - during_Prep = mkPrep "durante" ; ---- + during_Prep = mkPrep "durante" ; either7or_DConj = {s1,s2 = "o" ; n = Sg} ; everybody_NP = makeNP ["todos"] Masc Pl ; - every_Det = {s,sp = \\_,_ => "cada" ; n = Sg ; s2 = [] ; isNeg = False} ; + every_Det = mkDeterminer "cada" "cada" Sg False ; everything_NP = pn2np (mkPN ["todo"] Masc) ; everywhere_Adv = ss ["en todas partes"] ; - few_Det = { - s,sp = \\g,c => prepCase c ++ genForms "pocos" "pocas" ! g ; n = Pl ; s2 = [] ; isNeg = False} ; + except_Prep = mkPrep "excepto" ; + few_Det = mkDeterminer "pocos" "pocas" Pl False ; --- first_Ord = {s = \\ag => (regA "primero").s ! Posit ! AF ag.g ag.n} ; for_Prep = mkPrep "para" ; from_Prep = complGen ; --- he_Pron = mkPronoun - "el" "lo" "le" "él" + "él" "lo" "le" "él" "su" "su" "sus" "sus" Masc Sg P3 ; - here_Adv = mkAdv "aquí" ; -- acá - here7to_Adv = mkAdv ["para acá"] ; - here7from_Adv = mkAdv ["de acá"] ; + here_Adv = mkAdv "aquí" ; + here7to_Adv = mkAdv ["para aquí"] ; + here7from_Adv = mkAdv ["de aquí"] ; how_IAdv = ss "como" ; - how8many_IDet = - {s = \\g,c => prepCase c ++ genForms "cuantos" "cuantas" ! g ; n = Pl} ; + how8many_IDet = mkIDet "cuantos" "cuantas" Pl ; + how8much_IAdv = ss "cuanto" ; if_Subj = ss "si" ** {m = Indic} ; + if_then_Conj = {s1 = "si" ; s2 = "entonces" ; n = Sg ; lock_Conj = <>} ; in8front_Prep = {s = "delante" ; c = MorphoSpa.genitive ; isDir = False} ; i_Pron = mkPronoun @@ -86,19 +64,32 @@ lin in_Prep = mkPrep "en" ; it_Pron = mkPronoun - "el" "lo" "le" "él" + "él" "lo" "le" "él" "su" "su" "sus" "sus" Masc Sg P3 ; less_CAdv = X.mkCAdv "menos" conjThan ; ---- - many_Det = { - s,sp = \\g,c => prepCase c ++ genForms "muchos" "muchas" ! g ; n = Pl ; s2 = [] ; isNeg = False} ; + many_Det = mkDeterminer "muchos" "muchas" Pl False ; more_CAdv = X.mkCAdv "más" conjThan ; most_Predet = {s = \\_,c => prepCase c ++ ["la mayor parte"] ; c = CPrep P_de ; a = PNoAg} ; - much_Det = { - s,sp = \\g,c => prepCase c ++ genForms "mucho" "mucha" ! g ; n = Sg ; s2 = [] ; isNeg = False} ; + much_Det = mkDeterminer "mucho" "mucha" Sg False ; must_VV = mkVV (verboV (deber_6 "deber")) ; + no_Quant = + let + ningun : ParadigmsSpa.Number => ParadigmsSpa.Gender => Case => Str = table { + Sg => \\g,c => prepCase c ++ genForms "ningún" "ninguna" ! g ; + Pl => \\g,c => prepCase c ++ genForms "ningunos" "ningunas" ! g + } + in { + s = \\_ => ningun ; + sp = ningun ; + s2 = [] ; isNeg = True + } ; no_Utt = ss "no" ; + not_Predet = {s = \\a,c => prepCase c ++ "no" ; c = Nom ; a = PNoAg} ; + nobody_NP = pn2npNeg (mkPN "nadie") ; + nothing_NP = pn2npNeg (mkPN "nada") ; + on_Prep = mkPrep "sobre" ; --- one_Quant = {s = \\g,c => prepCase c ++ genForms "uno" "una" ! g} ; only_Predet = {s = \\_,c => prepCase c ++ "solamente" ; c = Nom ; @@ -115,42 +106,21 @@ lin "su" "su" "sus" "sus" Fem Sg P3 ; so_AdA = ss "tanto" ; - somebody_NP = pn2np (mkPN ["algún"] Masc) ; - somePl_Det = { - s,sp = \\g,c => prepCase c ++ genForms "algunos" "algunas" ! g ; n = Pl ; s2 = [] ; isNeg = False} ; - someSg_Det = { - s,sp = \\g,c => prepCase c ++ genForms "algun" "alguna" ! g ; n = Sg ; s2 = [] ; isNeg = False} ; + somebody_NP = pn2np (mkPN "alguien" Masc) ; + somePl_Det = mkDeterminer "algunos" "algunas" Pl False ; + someSg_Det = mkDeterminer "algún" "alguna" Sg False ; something_NP = pn2np (mkPN ["algo"] Masc) ; - somewhere_Adv = ss ["en ninguna parte"] ; - that_Quant = - let ese : ParadigmsSpa.Number => ParadigmsSpa.Gender => Case => Str = table { - Sg => \\g,c => prepCase c ++ genForms "ese" "esa" ! g ; - Pl => \\g,c => prepCase c ++ genForms "esos" "esas" ! g - } - in { - s = \\_ => ese ; - sp = ese ; - s2 = [] ; isNeg = False - } ; - there_Adv = mkAdv "allí" ; -- allá - there7to_Adv = mkAdv ["para allá"] ; - there7from_Adv = mkAdv ["de allá"] ; + somewhere_Adv = ss ["en alguna parte"] ; + that_Quant = mkQuantifier "ese" "esa" "esos" "esas" ; + there_Adv = mkAdv "allí" ; -- allá + there7to_Adv = mkAdv ["para allí"] ; + there7from_Adv = mkAdv ["de allí"] ; therefore_PConj = ss ["por eso"] ; they_Pron = mkPronoun "ellos" "los" "les" "ellos" "su" "su" "sus" "sus" Masc Pl P3 ; - this_Quant = - let este : ParadigmsSpa.Number => ParadigmsSpa.Gender => Case => Str = table { - Sg => \\g,c => prepCase c ++ genForms "este" "esta" ! g ; - Pl => \\g,c => prepCase c ++ genForms "estos" "estas" ! g - } - in { - s = \\_ => este ; - sp = este ; - s2 = [] ; isNeg = False - } ; - + this_Quant = mkQuantifier "este" "esta" "estos" "estas" ; through_Prep = mkPrep "por" ; too_AdA = ss "demasiado" ; to_Prep = complDat ; @@ -174,22 +144,22 @@ lin } ; whoPl_IP = {s = \\c => prepCase c ++ "quién" ; a = aagr Masc Pl} ; whoSg_IP = {s = \\c => prepCase c ++ "quién" ; a = aagr Masc Sg} ; - why_IAdv = ss "porqué" ; + why_IAdv = ss ["por qué"] ; without_Prep = mkPrep "sin" ; with_Prep = mkPrep "con" ; yes_Utt = ss "sí" ; youSg_Pron = mkPronoun - "tu" "te" "te" "tí" + "tú" "te" "te" "ti" "tu" "tu" "tus" "tus" Masc Sg P2 ; youPl_Pron = mkPronoun - "vosotros" "vos" "vos" "vosotros" + "vosotros" "os" "os" "vosotros" "vuestro" "vuestra" "vuestros" "vuestras" Masc Pl P2 ; youPol_Pron = mkPronoun - "usted" "la" "le" "usted" + "usted" "lo" "le" "usted" "su" "su" "sus" "sus" Masc Sg P3 ;