Add regression test for previous commit
[xapian.git] / xapian-core / languages / dutch.sbl
blob1cc79f3f07df043afc14ef2bac8ac7603beb4281
1 // Alias: nl
3 routines (
4            prelude postlude
5            e_ending
6            en_ending
7            mark_regions
8            R1 R2
9            undouble
10            standard_suffix
13 externals ( stem )
15 booleans ( e_found )
17 integers ( p1 p2 )
19 groupings ( v v_I v_j )
21 stringescapes {}
23 /* special characters */
25 stringdef a"   '{U+00E4}'
26 stringdef e"   '{U+00EB}'
27 stringdef i"   '{U+00EF}'
28 stringdef o"   '{U+00F6}'
29 stringdef u"   '{U+00FC}'
31 stringdef a'   '{U+00E1}'
32 stringdef e'   '{U+00E9}'
33 stringdef i'   '{U+00ED}'
34 stringdef o'   '{U+00F3}'
35 stringdef u'   '{U+00FA}'
37 stringdef e`   '{U+00E8}'
39 define v       'aeiouy{e`}'
40 define v_I     v + 'I'
41 define v_j     v + 'j'
43 define prelude as (
44     test repeat (
45         [substring] among(
46             '{a"}' '{a'}'
47                 (<- 'a')
48             '{e"}' '{e'}'
49                 (<- 'e')
50             '{i"}' '{i'}'
51                 (<- 'i')
52             '{o"}' '{o'}'
53                 (<- 'o')
54             '{u"}' '{u'}'
55                 (<- 'u')
56             ''  (next)
57         ) //or next
58     )
59     try(['y'] <- 'Y')
60     repeat goto (
61         v [('i'] v <- 'I') or
62            ('y']   <- 'Y')
63     )
66 define mark_regions as (
68     $p1 = limit
69     $p2 = limit
71     gopast v  gopast non-v  setmark p1
72     try($p1 < 3  $p1 = 3)  // at least 3
73     gopast v  gopast non-v  setmark p2
77 define postlude as repeat (
79     [substring] among(
80         'Y'  (<- 'y')
81         'I'  (<- 'i')
82         ''   (next)
83     ) //or next
87 backwardmode (
89     define R1 as $p1 <= cursor
90     define R2 as $p2 <= cursor
92     define undouble as (
93         test among('kk' 'dd' 'tt') [next] delete
94     )
96     define e_ending as (
97         unset e_found
98         ['e'] R1 test non-v delete
99         set e_found
100         undouble
101     )
103     define en_ending as (
104         R1 non-v and not 'gem' delete
105         undouble
106     )
108     define standard_suffix as (
109         do (
110             [substring] among(
111                 'heden'
112                 (   R1 <- 'heid'
113                 )
114                 'en' 'ene'
115                 (   en_ending
116                 )
117                 's' 'se'
118                 (   R1 non-v_j delete
119                 )
120             )
121         )
122         do e_ending
124         do ( ['heid'] R2 not 'c' delete
125              ['en'] en_ending
126            )
128         do (
129             [substring] among(
130                 'end' 'ing'
131                 (   R2 delete
132                     (['ig'] R2 not 'e' delete) or undouble
133                 )
134                 'ig'
135                 (   R2 not 'e' delete
136                 )
137                 'lijk'
138                 (   R2 delete e_ending
139                 )
140                 'baar'
141                 (   R2 delete
142                 )
143                 'bar'
144                 (   R2 e_found delete
145                 )
146             )
147         )
148         do (
149             non-v_I
150             test (
151                 among ('aa' 'ee' 'oo' 'uu')
152                 non-v
153             )
154             [next] delete
155         )
156     )
159 define stem as (
161         do prelude
162         do mark_regions
163         backwards
164             do standard_suffix
165         do postlude