1 /* Generated by Snowball 2.0.0 - https://snowballstem.org/ */
2 
3 
4 #include <config.h>
5 #include <limits.h>
6 #include "irish.h"
7 
8 static const symbol s_pool[] = {
9 #define s_0_0 0
10 'b', '\'',
11 #define s_0_1 s_0_2
12 #define s_0_2 2
13 'b', 'h', 'f',
14 #define s_0_3 5
15 'b', 'p',
16 #define s_0_4 7
17 'c', 'h',
18 #define s_0_5 s_0_6
19 #define s_0_6 9
20 'd', '\'', 'f', 'h',
21 #define s_0_7 13
22 'd', 'h',
23 #define s_0_8 15
24 'd', 't',
25 #define s_0_9 (s_0_6 + 2)
26 #define s_0_10 17
27 'g', 'c',
28 #define s_0_11 19
29 'g', 'h',
30 #define s_0_12 21
31 'h', '-',
32 #define s_0_13 23
33 'm', '\'',
34 #define s_0_14 25
35 'm', 'b',
36 #define s_0_15 27
37 'm', 'h',
38 #define s_0_16 29
39 'n', '-',
40 #define s_0_17 31
41 'n', 'd',
42 #define s_0_18 33
43 'n', 'g',
44 #define s_0_19 35
45 'p', 'h',
46 #define s_0_20 37
47 's', 'h',
48 #define s_0_21 39
49 't', '-',
50 #define s_0_22 41
51 't', 'h',
52 #define s_0_23 43
53 't', 's',
54 #define s_1_0 (s_1_1 + 1)
55 #define s_1_1 45
56 'a', 0xC3, 0xAD, 'o', 'c', 'h', 't', 'a',
57 #define s_1_2 (s_1_3 + 1)
58 #define s_1_3 53
59 'a', 'i', 'r', 'e',
60 #define s_1_4 (s_1_5 + 1)
61 #define s_1_5 57
62 'e', 'a', 'b', 'h',
63 #define s_1_6 (s_1_7 + 1)
64 #define s_1_7 61
65 'a', 'i', 'b', 'h',
66 #define s_1_8 (s_1_9 + 1)
67 #define s_1_9 65
68 'e', 'a', 'm', 'h',
69 #define s_1_10 (s_1_11 + 1)
70 #define s_1_11 69
71 'a', 'i', 'm', 'h',
72 #define s_1_12 s_1_0
73 #define s_1_13 s_1_1
74 #define s_1_14 (s_1_15 + 1)
75 #define s_1_15 73
76 'a', 'i', 'r', 0xC3, 0xAD,
77 #define s_2_0 78
78 0xC3, 0xB3, 'i', 'd', 'e', 'a', 'c', 'h', 'a',
79 #define s_2_1 87
80 'p', 'a', 't', 'a', 'c', 'h', 'a',
81 #define s_2_2 (s_2_3 + 3)
82 #define s_2_3 s_2_23
83 #define s_2_4 94
84 'e', 'a', 'c', 'h', 't', 'a',
85 #define s_2_5 s_2_24
86 #define s_2_6 100
87 'p', 'a', 'i', 't', 'e',
88 #define s_2_7 (s_2_0 + 5)
89 #define s_2_8 (s_2_0 + 4)
90 #define s_2_9 s_2_0
91 #define s_2_10 105
92 'g', 'i', 'n', 'e', 'a', 'c', 'h',
93 #define s_2_11 s_2_1
94 #define s_2_12 s_2_5
95 #define s_2_13 112
96 'p', 'a', 't', 'a', 'i', 'g', 'h',
97 #define s_2_14 119
98 0xC3, 0xB3, 'i', 'd', 'i', 'g', 'h',
99 #define s_2_15 (s_2_16 + 1)
100 #define s_2_16 126
101 'e', 'a', 'c', 'h', 't', 0xC3, 0xBA, 'i', 'l',
102 #define s_2_17 135
103 'g', 'i', 'n', 'e', 'a', 's',
104 #define s_2_18 141
105 'g', 'i', 'n', 'i', 's',
106 #define s_2_19 s_2_2
107 #define s_2_20 s_2_3
108 #define s_2_21 s_2_4
109 #define s_2_22 s_2_5
110 #define s_2_23 146
111 'a', 'r', 'c', 'a', 'c', 'h', 't', 'a', 0xC3, 0xAD,
112 #define s_2_24 156
113 'g', 'r', 'a', 'f', 'a', 0xC3, 0xAD, 'o', 'c', 'h', 't', 'a', 0xC3, 0xAD,
114 #define s_3_0 (s_3_1 + 1)
115 #define s_3_1 170
116 'a', 'i', 'm', 'i', 'd',
117 #define s_3_2 (s_3_3 + 1)
118 #define s_3_3 175
119 'a', 0xC3, 0xAD, 'm', 'i', 'd',
120 #define s_3_4 (s_3_5 + 1)
121 #define s_3_5 181
122 'e', 'a', 'd', 'h',
123 #define s_3_6 185
124 'f', 'a', 'i', 'd', 'h',
125 #define s_3_7 190
126 'f', 'i', 'd', 'h',
127 #define s_3_8 194
128 0xC3, 0xA1, 'i', 'l',
129 #define s_3_9 198
130 'a', 'i', 'n',
131 #define s_3_10 201
132 't', 'e', 'a', 'r',
133 #define s_3_11 205
134 't', 'a', 'r',
135 };
136 
137 
138 static const struct among a_0[24] =
139 {
140 /*  0 */ { 2, s_0_0, -1, 1},
141 /*  1 */ { 2, s_0_1, -1, 4},
142 /*  2 */ { 3, s_0_2, 1, 2},
143 /*  3 */ { 2, s_0_3, -1, 8},
144 /*  4 */ { 2, s_0_4, -1, 5},
145 /*  5 */ { 2, s_0_5, -1, 1},
146 /*  6 */ { 4, s_0_6, 5, 2},
147 /*  7 */ { 2, s_0_7, -1, 6},
148 /*  8 */ { 2, s_0_8, -1, 9},
149 /*  9 */ { 2, s_0_9, -1, 2},
150 /* 10 */ { 2, s_0_10, -1, 5},
151 /* 11 */ { 2, s_0_11, -1, 7},
152 /* 12 */ { 2, s_0_12, -1, 1},
153 /* 13 */ { 2, s_0_13, -1, 1},
154 /* 14 */ { 2, s_0_14, -1, 4},
155 /* 15 */ { 2, s_0_15, -1, 10},
156 /* 16 */ { 2, s_0_16, -1, 1},
157 /* 17 */ { 2, s_0_17, -1, 6},
158 /* 18 */ { 2, s_0_18, -1, 7},
159 /* 19 */ { 2, s_0_19, -1, 8},
160 /* 20 */ { 2, s_0_20, -1, 3},
161 /* 21 */ { 2, s_0_21, -1, 1},
162 /* 22 */ { 2, s_0_22, -1, 9},
163 /* 23 */ { 2, s_0_23, -1, 3}
164 };
165 
166 
167 static const struct among a_1[16] =
168 {
169 /*  0 */ { 7, s_1_0, -1, 1},
170 /*  1 */ { 8, s_1_1, 0, 1},
171 /*  2 */ { 3, s_1_2, -1, 2},
172 /*  3 */ { 4, s_1_3, 2, 2},
173 /*  4 */ { 3, s_1_4, -1, 1},
174 /*  5 */ { 4, s_1_5, 4, 1},
175 /*  6 */ { 3, s_1_6, -1, 1},
176 /*  7 */ { 4, s_1_7, 6, 1},
177 /*  8 */ { 3, s_1_8, -1, 1},
178 /*  9 */ { 4, s_1_9, 8, 1},
179 /* 10 */ { 3, s_1_10, -1, 1},
180 /* 11 */ { 4, s_1_11, 10, 1},
181 /* 12 */ { 6, s_1_12, -1, 1},
182 /* 13 */ { 7, s_1_13, 12, 1},
183 /* 14 */ { 4, s_1_14, -1, 2},
184 /* 15 */ { 5, s_1_15, 14, 2}
185 };
186 
187 
188 static const struct among a_2[25] =
189 {
190 /*  0 */ { 9, s_2_0, -1, 6},
191 /*  1 */ { 7, s_2_1, -1, 5},
192 /*  2 */ { 5, s_2_2, -1, 1},
193 /*  3 */ { 8, s_2_3, 2, 2},
194 /*  4 */ { 6, s_2_4, 2, 1},
195 /*  5 */ { 12, s_2_5, -1, 4},
196 /*  6 */ { 5, s_2_6, -1, 5},
197 /*  7 */ { 3, s_2_7, -1, 1},
198 /*  8 */ { 4, s_2_8, 7, 1},
199 /*  9 */ { 8, s_2_9, 8, 6},
200 /* 10 */ { 7, s_2_10, 8, 3},
201 /* 11 */ { 6, s_2_11, 7, 5},
202 /* 12 */ { 10, s_2_12, -1, 4},
203 /* 13 */ { 7, s_2_13, -1, 5},
204 /* 14 */ { 7, s_2_14, -1, 6},
205 /* 15 */ { 8, s_2_15, -1, 1},
206 /* 16 */ { 9, s_2_16, 15, 1},
207 /* 17 */ { 6, s_2_17, -1, 3},
208 /* 18 */ { 5, s_2_18, -1, 3},
209 /* 19 */ { 4, s_2_19, -1, 1},
210 /* 20 */ { 7, s_2_20, 19, 2},
211 /* 21 */ { 5, s_2_21, 19, 1},
212 /* 22 */ { 11, s_2_22, -1, 4},
213 /* 23 */ { 10, s_2_23, -1, 2},
214 /* 24 */ { 14, s_2_24, -1, 4}
215 };
216 
217 
218 static const struct among a_3[12] =
219 {
220 /*  0 */ { 4, s_3_0, -1, 1},
221 /*  1 */ { 5, s_3_1, 0, 1},
222 /*  2 */ { 5, s_3_2, -1, 1},
223 /*  3 */ { 6, s_3_3, 2, 1},
224 /*  4 */ { 3, s_3_4, -1, 2},
225 /*  5 */ { 4, s_3_5, 4, 2},
226 /*  6 */ { 5, s_3_6, -1, 1},
227 /*  7 */ { 4, s_3_7, -1, 1},
228 /*  8 */ { 4, s_3_8, -1, 2},
229 /*  9 */ { 3, s_3_9, -1, 2},
230 /* 10 */ { 4, s_3_10, -1, 2},
231 /* 11 */ { 3, s_3_11, -1, 2}
232 };
233 
234 static const unsigned char g_v[] = { 17, 65, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 4, 2 };
235 
236 static const symbol s_0[] = { 'f' };
237 static const symbol s_1[] = { 's' };
238 static const symbol s_2[] = { 'b' };
239 static const symbol s_3[] = { 'c' };
240 static const symbol s_4[] = { 'd' };
241 static const symbol s_5[] = { 'g' };
242 static const symbol s_6[] = { 'p' };
243 static const symbol s_7[] = { 't' };
244 static const symbol s_8[] = { 'm' };
245 static const symbol s_9[] = { 'a', 'r', 'c' };
246 static const symbol s_10[] = { 'g', 'i', 'n' };
247 static const symbol s_11[] = { 'g', 'r', 'a', 'f' };
248 static const symbol s_12[] = { 'p', 'a', 'i', 't', 'e' };
249 static const symbol s_13[] = { 0xC3, 0xB3, 'i', 'd' };
250 
r_mark_regions()251 int Xapian::InternalStemIrish::r_mark_regions() {
252     I_pV = l;
253     I_p1 = l;
254     I_p2 = l;
255     {   int c1 = c;
256         {
257             int ret = out_grouping_U(g_v, 97, 250, 1);
258             if (ret < 0) goto lab0;
259             c += ret;
260         }
261         I_pV = c;
262     lab0:
263         c = c1;
264     }
265     {   int c2 = c;
266         {
267             int ret = out_grouping_U(g_v, 97, 250, 1);
268             if (ret < 0) goto lab1;
269             c += ret;
270         }
271         {
272             int ret = in_grouping_U(g_v, 97, 250, 1);
273             if (ret < 0) goto lab1;
274             c += ret;
275         }
276         I_p1 = c;
277         {
278             int ret = out_grouping_U(g_v, 97, 250, 1);
279             if (ret < 0) goto lab1;
280             c += ret;
281         }
282         {
283             int ret = in_grouping_U(g_v, 97, 250, 1);
284             if (ret < 0) goto lab1;
285             c += ret;
286         }
287         I_p2 = c;
288     lab1:
289         c = c2;
290     }
291     return 1;
292 }
293 
r_initial_morph()294 int Xapian::InternalStemIrish::r_initial_morph() {
295     int among_var;
296     bra = c;
297     among_var = find_among(s_pool, a_0, 24, 0, 0);
298     if (!(among_var)) return 0;
299     ket = c;
300     switch (among_var) {
301         case 1:
302             {   int ret = slice_del();
303                 if (ret < 0) return ret;
304             }
305             break;
306         case 2:
307             {   int ret = slice_from_s(1, s_0);
308                 if (ret < 0) return ret;
309             }
310             break;
311         case 3:
312             {   int ret = slice_from_s(1, s_1);
313                 if (ret < 0) return ret;
314             }
315             break;
316         case 4:
317             {   int ret = slice_from_s(1, s_2);
318                 if (ret < 0) return ret;
319             }
320             break;
321         case 5:
322             {   int ret = slice_from_s(1, s_3);
323                 if (ret < 0) return ret;
324             }
325             break;
326         case 6:
327             {   int ret = slice_from_s(1, s_4);
328                 if (ret < 0) return ret;
329             }
330             break;
331         case 7:
332             {   int ret = slice_from_s(1, s_5);
333                 if (ret < 0) return ret;
334             }
335             break;
336         case 8:
337             {   int ret = slice_from_s(1, s_6);
338                 if (ret < 0) return ret;
339             }
340             break;
341         case 9:
342             {   int ret = slice_from_s(1, s_7);
343                 if (ret < 0) return ret;
344             }
345             break;
346         case 10:
347             {   int ret = slice_from_s(1, s_8);
348                 if (ret < 0) return ret;
349             }
350             break;
351     }
352     return 1;
353 }
354 
r_RV()355 int Xapian::InternalStemIrish::r_RV() {
356     if (!(I_pV <= c)) return 0;
357     return 1;
358 }
359 
r_R1()360 int Xapian::InternalStemIrish::r_R1() {
361     if (!(I_p1 <= c)) return 0;
362     return 1;
363 }
364 
r_R2()365 int Xapian::InternalStemIrish::r_R2() {
366     if (!(I_p2 <= c)) return 0;
367     return 1;
368 }
369 
r_noun_sfx()370 int Xapian::InternalStemIrish::r_noun_sfx() {
371     int among_var;
372     ket = c;
373     among_var = find_among_b(s_pool, a_1, 16, 0, 0);
374     if (!(among_var)) return 0;
375     bra = c;
376     switch (among_var) {
377         case 1:
378             {   int ret = r_R1();
379                 if (ret <= 0) return ret;
380             }
381             {   int ret = slice_del();
382                 if (ret < 0) return ret;
383             }
384             break;
385         case 2:
386             {   int ret = r_R2();
387                 if (ret <= 0) return ret;
388             }
389             {   int ret = slice_del();
390                 if (ret < 0) return ret;
391             }
392             break;
393     }
394     return 1;
395 }
396 
r_deriv()397 int Xapian::InternalStemIrish::r_deriv() {
398     int among_var;
399     ket = c;
400     among_var = find_among_b(s_pool, a_2, 25, 0, 0);
401     if (!(among_var)) return 0;
402     bra = c;
403     switch (among_var) {
404         case 1:
405             {   int ret = r_R2();
406                 if (ret <= 0) return ret;
407             }
408             {   int ret = slice_del();
409                 if (ret < 0) return ret;
410             }
411             break;
412         case 2:
413             {   int ret = slice_from_s(3, s_9);
414                 if (ret < 0) return ret;
415             }
416             break;
417         case 3:
418             {   int ret = slice_from_s(3, s_10);
419                 if (ret < 0) return ret;
420             }
421             break;
422         case 4:
423             {   int ret = slice_from_s(4, s_11);
424                 if (ret < 0) return ret;
425             }
426             break;
427         case 5:
428             {   int ret = slice_from_s(5, s_12);
429                 if (ret < 0) return ret;
430             }
431             break;
432         case 6:
433             {   int ret = slice_from_s(4, s_13);
434                 if (ret < 0) return ret;
435             }
436             break;
437     }
438     return 1;
439 }
440 
r_verb_sfx()441 int Xapian::InternalStemIrish::r_verb_sfx() {
442     int among_var;
443     ket = c;
444     if (c - 2 <= lb || p[c - 1] >> 5 != 3 || !((282896 >> (p[c - 1] & 0x1f)) & 1)) return 0;
445     among_var = find_among_b(s_pool, a_3, 12, 0, 0);
446     if (!(among_var)) return 0;
447     bra = c;
448     switch (among_var) {
449         case 1:
450             {   int ret = r_RV();
451                 if (ret <= 0) return ret;
452             }
453             {   int ret = slice_del();
454                 if (ret < 0) return ret;
455             }
456             break;
457         case 2:
458             {   int ret = r_R1();
459                 if (ret <= 0) return ret;
460             }
461             {   int ret = slice_del();
462                 if (ret < 0) return ret;
463             }
464             break;
465     }
466     return 1;
467 }
468 
stem()469 int Xapian::InternalStemIrish::stem() {
470     {   int c1 = c;
471         {   int ret = r_initial_morph();
472             if (ret < 0) return ret;
473         }
474         c = c1;
475     }
476 
477     {   int ret = r_mark_regions();
478         if (ret < 0) return ret;
479     }
480     lb = c; c = l;
481 
482     {   int m2 = l - c; (void)m2;
483         {   int ret = r_noun_sfx();
484             if (ret < 0) return ret;
485         }
486         c = l - m2;
487     }
488     {   int m3 = l - c; (void)m3;
489         {   int ret = r_deriv();
490             if (ret < 0) return ret;
491         }
492         c = l - m3;
493     }
494     {   int m4 = l - c; (void)m4;
495         {   int ret = r_verb_sfx();
496             if (ret < 0) return ret;
497         }
498         c = l - m4;
499     }
500     c = lb;
501     return 1;
502 }
503 
InternalStemIrish()504 Xapian::InternalStemIrish::InternalStemIrish()
505     : I_p2(0), I_p1(0), I_pV(0)
506 {
507 }
508 
~InternalStemIrish()509 Xapian::InternalStemIrish::~InternalStemIrish()
510 {
511 }
512 
513 std::string
get_description() const514 Xapian::InternalStemIrish::get_description() const
515 {
516     return "irish";
517 }
518