summaryrefslogtreecommitdiff
path: root/next-lib/src/catalan/MorphoCat.gf
diff options
context:
space:
mode:
Diffstat (limited to 'next-lib/src/catalan/MorphoCat.gf')
-rw-r--r--next-lib/src/catalan/MorphoCat.gf130
1 files changed, 130 insertions, 0 deletions
diff --git a/next-lib/src/catalan/MorphoCat.gf b/next-lib/src/catalan/MorphoCat.gf
new file mode 100644
index 000000000..abcb757cf
--- /dev/null
+++ b/next-lib/src/catalan/MorphoCat.gf
@@ -0,0 +1,130 @@
+--# -path=.:../romance:../common:../../prelude
+
+----1 A Simple Catalan Resource Morphology
+----
+---- Aarne Ranta 2002 -- 2005
+----
+---- This resource morphology contains definitions needed in the resource
+---- syntax. To build a lexicon, it is better to use $ParadigmsCat$, which
+---- gives a higher-level access to this module.
+--
+resource MorphoCat = CommonRomance, ResCat **
+ open PhonoCat, Prelude, Predef in {
+--
+-- flags optimize=all ;
+--
+--
+----2 Nouns
+----
+---- The following macro is useful for creating the forms of number-dependent
+---- tables, such as common nouns.
+--
+oper
+ numForms : (_,_ : Str) -> Number => Str = \vi, vins ->
+ table {Sg => vi ; Pl => vins} ;
+
+-- For example:
+
+ nomHome : Str -> Number => Str = \home ->
+ numForms home (home + "s") ;
+
+ nomDona : Str -> Number => Str = \dona ->
+ numForms dona (init dona + "es") ;
+
+ nomDisc : Str -> Number => Str = \disc ->
+ numForms disc (variants {disc + "s"; disc + "os"}) ;
+
+-- nomPilar : Str -> Number => Str = \pilar ->
+-- numForms pilar (pilar + "es") ;
+--
+-- nomTram : Str -> Number => Str = \tram ->
+-- numForms tram tram ;
+--
+-- Common nouns are inflected in number and have an inherent gender.
+
+ mkNoun : (Number => Str) -> Gender -> Noun = \noinois,gen ->
+ {s = noinois ; g = gen} ;
+
+ mkNounIrreg : Str -> Str -> Gender -> Noun = \vi,vins ->
+ mkNoun (numForms vi vins) ;
+
+ mkNomReg : Str -> Noun = \noi ->
+ case last noi of {
+ "o" | "e" => mkNoun (nomHome noi) Masc ;
+ "a" => mkNoun (nomDona noi) Fem ;
+ "c" => mkNoun (nomDisc noi) Masc ;
+ --- "u" => mkNounIrreg mec (init mec + "ces") Fem ;
+ _ => mkNoun (nomHome noi) Masc
+ } ;
+
+----2 Adjectives
+----
+-- Adjectives are conveniently seen as gender-dependent nouns.
+-- Here are some patterns. First one that describes the worst case.
+
+ mkAdj : (_,_,_,_,_ : Str) -> Adj = \petit,petita,petits,petites,petitament ->
+ {s = table {
+ AF Masc n => numForms petit petits ! n ;
+ AF Fem n => numForms petita petites ! n ;
+ AA => petitament
+ }
+ } ;
+
+---- Then the regular and invariant patterns.
+--
+-- adjfort : Str -> Adj = \solo ->
+-- let
+-- sol = Predef.tk 1 solo
+-- in
+-- mkAdj solo (sol + "a") (sol + "os") (sol + "as") (sol + "amente") ;
+--
+ adjFort : Str -> Adj = \fort ->
+ mkAdj fort (fort + "a") (fort + "s") (fort + "es") (fort + "ament") ;
+--
+-- adjBlu : Str -> Adj = \blu ->
+-- mkAdj blu blu blu blu blu ; ---
+--
+ mkAdjReg : Str -> Adj = \fort -> adjFort fort ;
+{-
+ case last solo of {
+ "o" => adjSolo solo ;
+ --- "e" => adjUtil solo (solo + "s") ;
+ "a" =>
+ _ => adjUtil solo (solo + "es")
+ } ;
+-}
+--
+----2 Personal pronouns
+----
+---- All the eight personal pronouns can be built by the following macro.
+---- The use of "ne" as atonic genitive is debatable.
+---- We follow the rule that the atonic nominative is empty.
+--
+ mkPronoun : (_,_,_,_,_,_,_,_ : Str) ->
+ Gender -> Number -> Person -> Pronoun =
+ \il,le,lui,Lui,son,sa,ses,see,g,n,p ->
+ {s = table {
+ Ton Nom => il ;
+ Ton x => prepCase x ++ Lui ;
+ Aton Nom => strOpt il ; ---- [] ;
+ Aton Acc => le ;
+ Aton (CPrep P_a) => lui ;
+ Aton q => prepCase q ++ Lui ; ---- GF bug with c or p!
+ Poss {n = Sg ; g = Masc} => son ;
+ Poss {n = Sg ; g = Fem} => sa ;
+ Poss {n = Pl ; g = Masc} => ses ;
+ Poss {n = Pl ; g = Fem} => see
+ } ;
+ a = {g = g ; n = n ; p = p} ;
+ hasClit = True
+ } ;
+--
+--
+----2 Determiners
+----
+---- Determiners, traditionally called indefinite pronouns, are inflected
+---- in gender and number, like adjectives.
+--
+ pronForms : Adj -> Gender -> Number -> Str = \tale,g,n -> tale.s ! AF g n ;
+--
+}