summaryrefslogtreecommitdiff
path: root/next-lib/src/swedish/MorphoSwe.gf
blob: 48180b7818c080a242a2914aa4deefdb28b8c25c (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
--# -path=.:../scandinavian:../common:../../prelude

--1 A Simple Swedish 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 $ParadigmsSwe$, which
-- gives a higher-level access to this module.

resource MorphoSwe = CommonScand, ResSwe ** open Prelude, (Predef=Predef) in {


-- Verbs

-- Heuristic to infer all participle forms from one.  

oper
  ptPretAll : Str -> Str * Str = \funnen -> 
    case funnen of {
      ko  +"mmen" => <ko  +"mmet", ko  + "mna"> ; 
      vun  +"nen" => <vun  +"net", vun  + "na"> ; 
      bjud + "en" => <bjud + "et", bjud + "na"> ; 
      se   + "dd" => <se   + "tt", se   +"dda"> ;
      tal  + "ad" => <tal  + "at", tal  +"ade"> ;
      kaen +  "d" => <kaen +  "t", kaen + "da"> ;
      lekt        => <lekt,        lekt +  "a">
      } ;

  ptPretForms : Str -> AFormPos => Case => Str = \funnen -> \\a,c =>  
    let 
      funfun = ptPretAll funnen 
    in
    mkCase c (case a of {
      (Strong (SgUtr)) => funnen ;
      (Strong (SgNeutr)) => funfun.p1 ;
      _ => funfun.p2
      }
     ) ;

-- For $Numeral$.

param DForm = ental  | ton  | tiotal  ;

oper 
  LinDigit = {s : DForm => CardOrd => Str} ;

  cardOrd : Str -> Str -> CardOrd => Str = \tre,tredje ->
    table {
      NCard _ => tre ;
      NOrd a  => tredje ---- a
      } ;

  cardReg : Str -> CardOrd => Str = \tio ->
    cardOrd tio (tio + "nde") ;

  mkTal : (x1,_,_,_,x5 : Str) -> LinDigit = 
    \två, tolv, tjugo, andra, tolfte -> 
    {s = table {
           ental  => cardOrd två andra ; 
           ton    => cardOrd tolv tolfte ;
           tiotal => cardReg tjugo
           }
     } ;

  numPl : (CardOrd => Str) -> {s : CardOrd => Str ; n : Number} = \n ->
    {s = n ; n = Pl} ;

  invNum : CardOrd = NCard Neutr ;


} ;