summaryrefslogtreecommitdiff
path: root/deprecated/old-lib/resource/turkish/ResTur.gf
blob: 1fc1a8157ab14bfa306b32b145a755d99bdde9cb (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
--# -path=.:../abstract:../common:../../prelude

resource ResTur = ParamX ** open Prelude, Predef in {

--2 For $Noun$

  param
    Case = Nom | Acc | Dat | Gen | Loc | Ablat | Abess ;

    Species = Indef | Def ;

    VForm = 
       VPres      Number Person
     | VPast      Number Person
     | VFuture    Number Person
     | VAorist    Number Person
     | VImperative
     | VInfinitive
     ;

  oper
    Agr = {n : Number ; p : Person} ;

-- For $Verb$.

    Verb : Type = {
      s : VForm => Str
      } ;

--2 For $Numeral$
  param
    DForm = unit | ten ;

-- For $Numeral$.
  oper
    mkNum : Str -> Str -> {s : DForm => Str} = 
      \two, twenty ->
      {s = table {
         unit => two ; 
         ten  => twenty
         }
      } ;
      
    mkNP : (ben,beni,bana,banin,bende,benden:Str) -> Number -> Person ->
     {s : Case => Str ; a : Agr} =
     \ben,beni,bana,banin,bende,benden,n,p -> {
     s = table {
       Nom => ben ;
       Acc => beni ;
       Dat => bana ;
       Gen => banin ;
       Loc => bende ;
       Abl => benden
       } ;
     a = {n=n; p=p} ;
     } ;

  oper
    harmony4 : Str -> Str -> Str
      = \base,suffix0 ->
          let c : Str = 
               case base of {
                 _+c@("ı"|"a"|"i"|"e"|"u"|"o"|"ü"|"ö")+
                 ("b"|"v"|"d"|"z"|"j"|"c"|"g"|"ğ"|"l"|"r"|"m"|"n"|"y"|"p"|"f"|"t"|"s"|"ş"|"ç"|"k"|"h")* => c ;
                 _ => error "harmony4"
               } ;
              h : Str =
               case c of {
                 ("ı"|"a") => "ı" ;
                 ("i"|"e") => "i" ;
                 ("u"|"o") => "u" ;
                 ("ü"|"ö") => "ü"
               } ;
              suffix : Str = 
               case suffix0 of {
                  s1@(("b"|"v"|"d"|"z"|"j"|"c"|"g"|"ğ"|"l"|"r"|"m"|"n"|"y"|"p"|"f"|"t"|"s"|"ş"|"ç"|"k"|"h")*)
                 +   ("ı"|"a"|"i"|"e"|"u"|"o"|"ü"|"ö")
                 +s2 => s1+h+s2 ;
                 s => s
               }
          in base + suffix ;

    harmony2 : Str -> Str -> Str
      = \base,suffix0 ->
          let c : Str = 
               case base of {
                 _+c@("ı"|"a"|"i"|"e"|"u"|"o"|"ü"|"ö")+
                 ("b"|"v"|"d"|"z"|"j"|"c"|"g"|"ğ"|"l"|"r"|"m"|"n"|"y"|"p"|"f"|"t"|"s"|"ş"|"ç"|"k"|"h")* => c ;
                 _ => error "harmony4"
               } ;
              h : Str =
               case c of {
                 ("ı"|"a") => "ı" ;
                 ("i"|"e") => "i" ;
                 ("u"|"o") => "u" ;
                 ("ü"|"ö") => "ü"
               } ;
              suffix : Str = 
               case suffix0 of {
                  s1@(("b"|"v"|"d"|"z"|"j"|"c"|"g"|"ğ"|"l"|"r"|"m"|"n"|"y"|"p"|"f"|"t"|"s"|"ş"|"ç"|"k"|"h")*)
                 +   ("ı"|"a"|"i"|"e"|"u"|"o"|"ü"|"ö")
                 +s2 => s1+h+s2 ;
                 s => s
               }
          in base + suffix ;
}