diff --git a/lib/src/catalan/ExtraCat.gf b/lib/src/catalan/ExtraCat.gf index 5eab3676e..383187163 100644 --- a/lib/src/catalan/ExtraCat.gf +++ b/lib/src/catalan/ExtraCat.gf @@ -1,13 +1,16 @@ concrete ExtraCat of ExtraCatAbs = ExtraRomanceCat ** - open CommonRomance, ParadigmsCat, PhonoCat, MorphoCat, ParamX, ResCat in { +open CommonRomance, ParadigmsCat, PhonoCat, MorphoCat, ParamX, ResCat, + Prelude in { +flags coding = utf8 ; lin - i8fem_Pron = mkPronoun - "jo" "em" "em" "mi" ["el meu"] ["la meva"] ["els meus"] ["les meves"] - Fem Sg P1 ; + i8fem_Pron = mkPronoun + "jo" "em" "em" "mi" + ["el meu"] ["la meva"] ["els meus"] ["les meves"] + Fem Sg P1 ; - these8fem_NP = makeNP "aquestes" Fem Pl ; - they8fem_Pron = mkPronoun + these8fem_NP = makeNP "aquestes" Fem Pl ; + they8fem_Pron = mkPronoun "elles" "les" "les" "elles" "llur" "llur" "llurs" "llurs" Fem Pl P3 ; @@ -15,30 +18,36 @@ lin those8fem_NP = makeNP ["aquestes"] Fem Pl ; we8fem_Pron = - mkPronoun - "nosaltres" "ens" "ens" "nosaltres" - ["el nostre"] ["la nostra"] ["els nostres"] ["les nostres"] - Fem Pl P1 ; + mkPronoun + "nosaltres" "ens" "ens" "nosaltres" + ["el nostre"] ["la nostra"] ["els nostres"] ["les nostres"] + Fem Pl P1 ; whoPl8fem_IP = {s = \\c => prepCase c ++ "qui" ; a = aagr Fem Pl} ; whoSg8fem_IP = {s = \\c => prepCase c ++ "qui" ; a = aagr Fem Sg} ; youSg8fem_Pron = mkPronoun - "tu" "et" "et" "tu" - ["el teu"] ["la teva"] ["els teus"] ["les teves"] - Fem Sg P2 ; + "tu" "et" "et" "tu" + ["el teu"] ["la teva"] ["els teus"] ["les teves"] + Fem Sg P2 ; youPl8fem_Pron = mkPronoun "vosaltres" "us" "us" "vosaltres" ["el vostre"] ["la vostra"] ["els vostres"] ["les vostres"] Fem Pl P2 ; youPol8fem_Pron = mkPronoun - "vosté" "la" "li" "vosté" + "vostè" "la" "li" "vostè" ["el seu"] ["la seva"] ["els seus"] ["les seves"] Fem Sg P3 ; + --IL 2012-10-12 + ImpNeg np vp = lin Utt{ + s = (mkClause (np.s ! Nom).comp np.hasClit False np.a vp).s + ! DInv ! RPres ! Simul ! RNeg False ! Conjunct + } ; + oper - vostePl : ParadigmsCat.Gender -> Pron = \g -> lin Pron (mkPronoun - "vostés" "els" "li" "vostés" + vostePl : ParadigmsCat.Gender -> Pron = \g -> lin Pron (mkPronoun + "vostès" "els" "li" "vostès" "llur" "llur" "llurs" "llurs" g Pl P3) ; lin diff --git a/lib/src/catalan/ExtraCatAbs.gf b/lib/src/catalan/ExtraCatAbs.gf index e11aff18a..8c1a1f836 100644 --- a/lib/src/catalan/ExtraCatAbs.gf +++ b/lib/src/catalan/ExtraCatAbs.gf @@ -25,4 +25,5 @@ fun youPolPl_Pron : Pron ; -- vostés youPolPl8fem_Pron : Pron ; + ImpNeg : NP -> VP -> Utt ; --IL 2012-10-12 } diff --git a/lib/src/catalan/MorphoCat.gf b/lib/src/catalan/MorphoCat.gf index b8418979b..6e9720db4 100644 --- a/lib/src/catalan/MorphoCat.gf +++ b/lib/src/catalan/MorphoCat.gf @@ -28,31 +28,31 @@ oper nomCasa : Str -> Str -> Number => Str = \es,casa -> - numForms casa (init casa + es) ; + numForms casa (init casa + es) ; nomFre : Str -> Number => Str = \fre -> - numForms fre (fre + "ns") ; - + numForms fre (fre + "ns") ; + nomCas : Str -> Number => Str = \cas -> - numForms cas (cas + "os") ; - + numForms cas (cas + "os") ; + nomTest : Str -> Number => Str = \test -> - numForms test (variants {test + "s"; test + "os"}) ; + numForms test (variants {test + "s"; test + "os"}) ; nomFaig : Str -> Number => Str = \faig -> - let - fa = Predef.tk 2 faig - in - numForms faig (variants {fa + "jos" ; faig + "s"}) ; - + let + fa = Predef.tk 2 faig + in + numForms faig (variants {fa + "jos" ; faig + "s"}) ; + nomDesig : Str -> Number => Str = \desig -> - let - desi = Predef.tk 1 desig - in - numForms desig (variants {desi + "tjos" ; desi + "gs"}) ; - + let + desi = Predef.tk 1 desig + in + numForms desig (variants {desi + "tjos" ; desi + "gs"}) ; + nomTemps : Str -> Number => Str = \temps -> - numForms temps temps ; + numForms temps temps ; -- Common nouns are inflected in number and have an inherent gender. @@ -63,18 +63,18 @@ oper mkNoun (numForms vi vins) ; mkNomReg : Str -> Noun = \noi -> - let - mkNounMas : (Str -> Number => Str) -> Noun = \rule -> mkNoun (rule noi) Masc - in + let + mkNounMas : (Str -> Number => Str) -> Noun = \rule -> mkNoun (rule noi) Masc + in case last noi of { - "a" => mkNoun (nomCasa "es" noi) Fem ; - "s"|"x"|"ç" => mkNounMas nomCas ; - "i" => mkNounMas nomFre ; - "í" => mkNounMas (nomCasa "ins") ; - "à" => mkNounMas (nomCasa "ans") ; - "ó" => mkNounMas (nomCasa "ons") ; - "g" => mkNounMas nomFaig ; - _ => mkNounMas nomCep + "a" => mkNoun (nomCasa "es" noi) Fem ; + "s"|"x"|"ç" => mkNounMas nomCas ; + "i" => mkNounMas nomFre ; + "í" => mkNounMas (nomCasa "ins") ; + "à" => mkNounMas (nomCasa "ans") ; + "ó" => mkNounMas (nomCasa "ons") ; + "g" => mkNounMas nomFaig ; + _ => mkNounMas nomCep } ; --2 Adjectives @@ -97,33 +97,155 @@ oper mkAdj prim (prim + "a") (prim + "s") (prim + "es") (prim + "ament") ; adjBlau : Str -> Str -> Adj = \blau,blava -> - let - blav = Predef.tk 1 blava - in - mkAdj blau blava (blau + "s") (blav + "es") (blava + "ment") ; - + let blav = Predef.tk 1 blava + in mkAdj blau blava (blau + "s") (blav + "es") + (blava + "ment") ; + adjFondo : Str -> Adj = \fondo -> - let - fond = Predef.tk 1 fondo - in - adjBlau fondo (fond + "a") ; - + let fond = Predef.tk 1 fondo + in adjBlau fondo (fond + "a") ; + adjBo : Str -> Adj = \bo -> - mkAdj bo (bo + "na") (bo + "ns") (bo + "nes") (bo + "nament") ; + mkAdj bo (bo + "na") (bo + "ns") (bo + "nes") (bo + "nament") ; adjFidel : Str -> Adj = \fidel -> - let - fidels = fidel + "s" - in - mkAdj fidel fidel fidels fidels (fidel + "ment") ; + let fidels : Str = case (last fidel) of { + _ + ("s"|"ç"|"x") => fidel + "os" ; --feliç; capaç + _ => fidel + "s" + } ; + in mkAdj fidel fidel fidels fidels + (fidel + "ment") ; + + --boig, boja, bojos, boges + --lleig, lletja, lletjos, lletges + adjIg : Str -> Str -> Adj = \boig,boja -> + let boj : Str = tk 1 boja ; + llet : Str = tk 1 boj + in mkAdj boig (boj + "a") (boj + "os") (llet + "ges") + (boj + "ament") ; + + --públic pública públics públiques + --llarg llarga llargs llargues + adjXc : Str -> Adj = \blanc -> + let blan : Str = init blanc ; + blanqu : Str = case last blanc of { + "c" => blan + "qu" ; + "g" => blan + "gu" --llarg, not boig. + } ; + in mkAdj blanc (blanc + "a") + (blanc + "s") (blanqu + "es") + (blanc + "ament") ; + --sibilant endings + adjXs : Str -> Str -> Adj = \famos,famosa -> + let russ : Str = tk 1 famosa ; + in mkAdj famos famosa (russ + "os") (russ + "es") + (russ + "ament") ; + + -- català catalana catalans catalanes + adjVn : Str -> Adj = \catalA -> + let catal : Str = init catalA ; + v : Str = unaccent (last catalA) ; + catalVn : Str = catal + v + "n" ; + in mkAdj catalA (catalVn + "a") + (catalVn + "s") (catalVn + "es") + (catalVn + "ament") ; + + --casat casada ; groc groga + adjCasat : Str -> Adj = \casat -> + let casa : Str = init casat ; + casad : Str = case last casat of { + "t" => casa + "d" ; + "c" => casa + "g" + } ; + grogu : Str = case last casad of { + "g" => casa + "gu" ; + _ => casad + } ; + in mkAdj casat (casad + "a") + (casat + "s") (grogu + "es") + (casad + "ament") ; + + -- francès francesa francesos franceses + adjFrances : Str -> Adj = \francEs -> + let franc : Str = tk 2 francEs ; + e : Str = last (tk 1 francEs) ; + v : Str = unaccent e ; + francVs : Str = franc + v + "s" + in mkAdj francEs (francVs + "a") + (francVs + "os") (francVs + "es") + (francVs + "ament") ; + + --europeu europea europeus europees + adjEuropeu : Str -> Adj = \europeu -> + let europe : Str = tk 1 europeu ; + in mkAdj europeu (europe + "a") + (europeu + "s") (europe + "es") + (europe + "ament") ; + + --belga belga belgues belgues + adjBelga : Str -> Adj = \belga -> + let belg : Str = init belga ; + belgu : Str = case last belg of { + ("g"|"c") => belg + "u" ; + _ => belg + } ; + belgues : Str = belgu + "es" + in mkAdj belga belga belgues belgues (belga + "ment") ; + + mkAdjReg : Str -> Adj = \prim -> - case prim of { - -- _ + "e" + ("r"|"l") => adjPrim prim ; - _ + "l" => adjFidel prim ; - _ + ("e"|"u"|"o") => adjFondo prim ; - _ => adjPrim prim - } ; + case prim of { + _ + "ll" => adjPrim prim ; --vell~vella + _ + "rn" => adjPrim prim ; --modern~moderna + _ + ("l"|"n"|"ç") => adjFidel prim ; --local; gran; capaç. For espanyol~espanyola mk2A. + _ + "a" => adjBelga prim ; --invariable, -es in plural + _ + ("eu") => adjFidel prim ; --greu; breu. most "eu" are invariable, europeu and jueu with mk2A. + _ + ("au"|"ou"|"iu") => adjBlau prim (tk 1 prim + "va"); --blau; nou; viu + _ + ("e"|"o") => adjFondo prim ; + _ + "ig" => adjIg prim (tk 2 prim + "ja") ; --boig~boja. lleig~lletja with mk2A. + _ + ("c"|"g") => adjXc prim ; --públic; llarg. cec~cega with mk2A + _ + ("n"|"l"|"r"|"s") + "t" => adjPrim prim ; --mort,llest,distint + _ + "t" => adjCasat prim ; --tancat~tancada. petit~petita with mk2A. + _ + ("à"|"é"|"è"|"í"|"ó"|"ò"|"ú") => adjVn prim ; --comú~comuna + _ + ("à"|"é"|"è"|"í"|"ó"|"ò"|"ú") + "s" => adjFrances prim ; + _ + ("s"|"x") => adjXs prim (prim + "a") ; --divers~diversa + _ => adjPrim prim + } ; + + --Used for the following: + --diferent diferent : doesn't end in l/n/ç/eu but has invariant feminine + --petit petita petits petites : voiceless plosive in the stem. + --ridícul ridícula : ends in l/n/ç but is not invariant. + --lleig lletja : the geminated variant of boig boja + --bo bona ; pla plana : like adjVn, but for one syllable words + --diari diària ; ingenu ingènua : in feminine, stress in antepenultimate + --jueu jueva ; europeu europea : exceptional paradigms for "eu" ending + --rus russa : voiceless s in the stem + --groc groga : voiced g in the stem + mkAdj2Reg : Str -> Str -> Adj = \petit,petita -> + case of { + <_, _ + ("b"|"c"|"d"|"e"|"f"|"g"|"h"|"i"|"j"|"k"|"l"|"m"|"n"|"o"|"p"|"q"|"r"|"s"|"t"|"u"|"v"|"x"|"y"|"z")> => adjFidel petit ; --feminine doesn't end in "a" + => adjPrim petit ; --1) petit~petita 2) ridícul~ridícula, dolç~dolça + <_ + "ig", _> => adjIg petit petita ; --lleig~letja + <_, _+ "na"> => adjVn petit ; --pla~plana + <_, _ + ("à"|"é"|"è"|"í"|"ó"|"ò"|"ú") + _> => adjBlau petit petita ; --diari~diària + <_ + "u" , _ + "va"> => adjBlau petit petita ; --jueu~jueva + <_ + "eu", _ + "ea"> => adjEuropeu petit ; --europeu~europea + <_ + "s" , _> => adjXs petit petita ; --rus~russa + <_ + "c" , _ + "ga"> => adjCasat petit ; --groc~groga + _ => mkAdjReg petit + } ; + +oper unaccent : Str -> Str = \vocal -> + case vocal of { + ("é"|"è") => "e" ; + ("ó"|"ò") => "o" ; + "à" => "a" ; + "í" => "i" ; + "ú" => "u" ; + _ => vocal + } ; --2 Personal pronouns @@ -146,7 +268,7 @@ oper poss = \\n,g => case of { => son ; => sa ; - => elsSeus ; + => elsSeus ; => lesSeves } ; a = Ag g n p ; diff --git a/lib/src/catalan/ParadigmsCat.gf b/lib/src/catalan/ParadigmsCat.gf index 0bc026e70..3fe58d2c8 100644 --- a/lib/src/catalan/ParadigmsCat.gf +++ b/lib/src/catalan/ParadigmsCat.gf @@ -160,7 +160,7 @@ oper -- them to prefix ones (i.e. ones placed before the noun in -- modification, as in "gran casa"), the following function is -- provided. --- JS: What about vi bÛ -> bon vi ? +-- JS: What about vi bo -> bon vi ? prefixA : A -> A ; -- adjective before noun (default: after) @@ -320,6 +320,7 @@ oper mk5A a b c d e = compADeg {s = \\_ => (mkAdj a b c d e).s ; isPre = False ; lock_A = <>} ; + mk2A a b = compADeg {s = \\_ => (mkAdj2Reg a b).s ; isPre = False ; lock_A = <>} ; regA a = compADeg {s = \\_ => (mkAdjReg a).s ; isPre = False ; lock_A = <>} ; prefA a = {s = a.s ; isPre = True ; lock_A = <>} ; @@ -422,11 +423,13 @@ oper mkA = overload { mkA : (util : Str) -> A = regA ; + mkA : (lleig,lletja : Str) -> A = mk2A ; mkA : (fort,forta,forts,fortes,fortament : Str) -> A = mk5A ; mkA : (bo : A) -> (millor : A) -> A = mkADeg ; } ; mk5A : (fort,forta,forts,fortes,fortament : Str) -> A ; + mk2A : (lleig,lletja : Str) -> A ; regA : Str -> A ; mkADeg : A -> A -> A ; compADeg : A -> A ;