summaryrefslogtreecommitdiff
path: root/next-lib/src/catalan/MorphoCat.gf
blob: abcb757cfc0c639189a4fef36fb2991ad8529bb1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
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 ;
--
}