summaryrefslogtreecommitdiff
path: root/contrib/summerschool/foods/FoodsHeb.gf
blob: 61710759c42a43fd5766d968ea7ea410df0c984c (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
--# -path=alltenses

-- (c) 2009 Dana Dannells under LGPL

concrete FoodsHeb of Foods = open Prelude in {
  
	flags coding=utf8 ;

    lincat
      Comment = SS ;
      Quality = {s: Gender => Number => Str} ;  
      Kind = {s : Number => Str ; g : Gender} ; 
      Item = {s : Str ; g : Gender ; n : Number} ; 
  
    lin
      Pred item quality = ss (item.s ++ quality.s ! item.g ! item.n) ; 
      This  = det Sg "זה" "זאת"; 
      That  = det Sg "הוא" "היא" ; 
      These = det Pl  "אלה" "אלה" ; 
      Those = det Pl "הם" "הן" ; 
      Mod quality kind = {
	s = \\n => kind.s ! n ++ quality.s ! kind.g ! n ;
	g = kind.g 
	} ;     
      Wine = regNoun "יין" "יינות"Fem ; 
      Cheese = regNoun "גבינה" "גבינות" Fem ;  
      Fish = regNoun "דג" "דגים" Masc ; 
      Pizza = regNoun "פיצה" "פיצוי" Fem ; 
      Very qual = {s = \\g,n => "מאוד" ++  qual.s ! g ! n} ;
      Fresh = regAdj "טרי" ; 
      Warm = regAdj "חם" ;
      Italian = irregAdj "איטלקי" ;
      Expensive = regAdj "יקר" ; 
      Delicious = irregAdj "נהדר" ; 
      Boring = regAdj "משעמם"; 

    param 
      Number = Sg | Pl ;
      Gender = Masc | Fem ;
 
    oper
      det : Number -> Str -> Str -> {s : Number => Str ; g :Gender} -> 
	{s : Str ; g :Gender ; n : Number} = 
        \n,m,f,cn -> {
          s =  cn.s ! n ++ case cn.g of {Masc => m ; Fem => f} ;
	  g = cn.g ; 
          n = n
        } ;
      
     regNoun : Str -> Str -> Gender -> {s : Number => Str ; g : Gender} = 
        \gvina,gvinot,g -> {s = table {
          Sg => gvina ;
          Pl => gvinot 
          };
       	g=g
        } ;

      replaceLastLetter : Str -> Str = \s -> 
	init s + case last s of  {
          "מ" => "ם" ; "ן" => "נ" ; "פ" => "ף" ; "ץ" => "צ" ; "כ" => "ך" ; c => c
          } ;
	      
      adjective : (_,_,_,_ : Str) -> {s : Gender => Number => Str} = 
       \tov,tova,tovim,tovot -> {
        s = table {
          Masc => table {
            Sg => tov ;
            Pl => tovim
            } ; 
          Fem => table {
            Sg => tova ;
            Pl => tovot
            }
          }
      } ;
    
    regAdj : Str -> {s : Gender => Number => Str} = \tov ->
	case tov of { to + c@? =>
 	adjective tov (replaceLastLetter (to + c + "ה" )) (replaceLastLetter (to + c +"ים" )) (replaceLastLetter (to + c + "ות" ))};	 
     
    irregAdj : Str -> {s : Gender => Number => Str} = \italki ->
 	case italki of { italk+ c@? => 
 	adjective italki (replaceLastLetter (italk + c +"ת" ))  (replaceLastLetter (italk + c+ "ים" )) (replaceLastLetter (italk + c+ "ות" ))};
    
}  -- FoodsHeb