Branch data Line data Source code
1 : : /* This file was generated automatically by the Snowball to ISO C++ compiler */
2 : :
3 : : #include <limits.h>
4 : : #include "porter.h"
5 : :
6 : : #define s_0_0 (s_0_1 + 2)
7 : : static const symbol s_pool[] = {
8 : : #define s_0_1 0
9 : : 'i', 'e', 's',
10 : : #define s_0_2 3
11 : : 's', 's', 'e', 's',
12 : : #define s_0_3 s_0_2
13 : : #define s_1_1 7
14 : : 'b', 'b',
15 : : #define s_1_2 9
16 : : 'd', 'd',
17 : : #define s_1_3 11
18 : : 'f', 'f',
19 : : #define s_1_4 13
20 : : 'g', 'g',
21 : : #define s_1_5 15
22 : : 'b', 'l',
23 : : #define s_1_6 17
24 : : 'm', 'm',
25 : : #define s_1_7 19
26 : : 'n', 'n',
27 : : #define s_1_8 21
28 : : 'p', 'p',
29 : : #define s_1_9 23
30 : : 'r', 'r',
31 : : #define s_1_10 25
32 : : 'a', 't',
33 : : #define s_1_11 27
34 : : 't', 't',
35 : : #define s_1_12 29
36 : : 'i', 'z',
37 : : #define s_2_0 (s_2_1 + 1)
38 : : #define s_2_1 31
39 : : 'e', 'e', 'd',
40 : : #define s_2_2 34
41 : : 'i', 'n', 'g',
42 : : #define s_3_0 37
43 : : 'a', 'n', 'c', 'i',
44 : : #define s_3_1 41
45 : : 'e', 'n', 'c', 'i',
46 : : #define s_3_2 45
47 : : 'a', 'b', 'l', 'i',
48 : : #define s_3_3 49
49 : : 'e', 'l', 'i',
50 : : #define s_3_4 52
51 : : 'a', 'l', 'l', 'i',
52 : : #define s_3_5 56
53 : : 'o', 'u', 's', 'l', 'i',
54 : : #define s_3_6 61
55 : : 'e', 'n', 't', 'l', 'i',
56 : : #define s_3_7 66
57 : : 'a', 'l', 'i', 't', 'i',
58 : : #define s_3_8 71
59 : : 'b', 'i', 'l', 'i', 't', 'i',
60 : : #define s_3_9 77
61 : : 'i', 'v', 'i', 't', 'i',
62 : : #define s_3_10 (s_3_11 + 1)
63 : : #define s_3_11 82
64 : : 'a', 't', 'i', 'o', 'n', 'a', 'l',
65 : : #define s_3_12 89
66 : : 'a', 'l', 'i', 's', 'm',
67 : : #define s_3_13 s_3_11
68 : : #define s_3_14 94
69 : : 'i', 'z', 'a', 't', 'i', 'o', 'n',
70 : : #define s_3_15 101
71 : : 'i', 'z', 'e', 'r',
72 : : #define s_3_16 105
73 : : 'a', 't', 'o', 'r',
74 : : #define s_3_17 109
75 : : 'i', 'v', 'e', 'n', 'e', 's', 's',
76 : : #define s_3_18 116
77 : : 'f', 'u', 'l', 'n', 'e', 's', 's',
78 : : #define s_3_19 123
79 : : 'o', 'u', 's', 'n', 'e', 's', 's',
80 : : #define s_4_0 130
81 : : 'i', 'c', 'a', 't', 'e',
82 : : #define s_4_1 135
83 : : 'a', 't', 'i', 'v', 'e',
84 : : #define s_4_2 140
85 : : 'a', 'l', 'i', 'z', 'e',
86 : : #define s_4_3 145
87 : : 'i', 'c', 'i', 't', 'i',
88 : : #define s_4_4 150
89 : : 'i', 'c', 'a', 'l',
90 : : #define s_4_5 154
91 : : 'f', 'u', 'l',
92 : : #define s_4_6 157
93 : : 'n', 'e', 's', 's',
94 : : #define s_5_0 161
95 : : 'i', 'c',
96 : : #define s_5_1 163
97 : : 'a', 'n', 'c', 'e',
98 : : #define s_5_2 167
99 : : 'e', 'n', 'c', 'e',
100 : : #define s_5_3 171
101 : : 'a', 'b', 'l', 'e',
102 : : #define s_5_4 175
103 : : 'i', 'b', 'l', 'e',
104 : : #define s_5_5 179
105 : : 'a', 't', 'e',
106 : : #define s_5_6 182
107 : : 'i', 'v', 'e',
108 : : #define s_5_7 185
109 : : 'i', 'z', 'e',
110 : : #define s_5_8 188
111 : : 'i', 't', 'i',
112 : : #define s_5_9 191
113 : : 'a', 'l',
114 : : #define s_5_10 193
115 : : 'i', 's', 'm',
116 : : #define s_5_11 196
117 : : 'i', 'o', 'n',
118 : : #define s_5_12 199
119 : : 'e', 'r',
120 : : #define s_5_13 201
121 : : 'o', 'u', 's',
122 : : #define s_5_14 204
123 : : 'a', 'n', 't',
124 : : #define s_5_15 (s_5_16 + 1)
125 : : #define s_5_16 (s_5_17 + 1)
126 : : #define s_5_17 207
127 : : 'e', 'm', 'e', 'n', 't',
128 : : #define s_5_18 s_5_13
129 : : };
130 : :
131 : :
132 : : static const struct among a_0[4] =
133 : : {
134 : : /* 0 */ { 1, s_0_0, -1, 3},
135 : : /* 1 */ { 3, s_0_1, 0, 2},
136 : : /* 2 */ { 4, s_0_2, 0, 1},
137 : : /* 3 */ { 2, s_0_3, 0, -1}
138 : : };
139 : :
140 : :
141 : : static const struct among a_1[13] =
142 : : {
143 : : /* 0 */ { 0, 0, -1, 3},
144 : : /* 1 */ { 2, s_1_1, 0, 2},
145 : : /* 2 */ { 2, s_1_2, 0, 2},
146 : : /* 3 */ { 2, s_1_3, 0, 2},
147 : : /* 4 */ { 2, s_1_4, 0, 2},
148 : : /* 5 */ { 2, s_1_5, 0, 1},
149 : : /* 6 */ { 2, s_1_6, 0, 2},
150 : : /* 7 */ { 2, s_1_7, 0, 2},
151 : : /* 8 */ { 2, s_1_8, 0, 2},
152 : : /* 9 */ { 2, s_1_9, 0, 2},
153 : : /* 10 */ { 2, s_1_10, 0, 1},
154 : : /* 11 */ { 2, s_1_11, 0, 2},
155 : : /* 12 */ { 2, s_1_12, 0, 1}
156 : : };
157 : :
158 : :
159 : : static const struct among a_2[3] =
160 : : {
161 : : /* 0 */ { 2, s_2_0, -1, 2},
162 : : /* 1 */ { 3, s_2_1, 0, 1},
163 : : /* 2 */ { 3, s_2_2, -1, 2}
164 : : };
165 : :
166 : :
167 : : static const struct among a_3[20] =
168 : : {
169 : : /* 0 */ { 4, s_3_0, -1, 3},
170 : : /* 1 */ { 4, s_3_1, -1, 2},
171 : : /* 2 */ { 4, s_3_2, -1, 4},
172 : : /* 3 */ { 3, s_3_3, -1, 6},
173 : : /* 4 */ { 4, s_3_4, -1, 9},
174 : : /* 5 */ { 5, s_3_5, -1, 12},
175 : : /* 6 */ { 5, s_3_6, -1, 5},
176 : : /* 7 */ { 5, s_3_7, -1, 10},
177 : : /* 8 */ { 6, s_3_8, -1, 14},
178 : : /* 9 */ { 5, s_3_9, -1, 13},
179 : : /* 10 */ { 6, s_3_10, -1, 1},
180 : : /* 11 */ { 7, s_3_11, 10, 8},
181 : : /* 12 */ { 5, s_3_12, -1, 10},
182 : : /* 13 */ { 5, s_3_13, -1, 8},
183 : : /* 14 */ { 7, s_3_14, 13, 7},
184 : : /* 15 */ { 4, s_3_15, -1, 7},
185 : : /* 16 */ { 4, s_3_16, -1, 8},
186 : : /* 17 */ { 7, s_3_17, -1, 13},
187 : : /* 18 */ { 7, s_3_18, -1, 11},
188 : : /* 19 */ { 7, s_3_19, -1, 12}
189 : : };
190 : :
191 : :
192 : : static const struct among a_4[7] =
193 : : {
194 : : /* 0 */ { 5, s_4_0, -1, 2},
195 : : /* 1 */ { 5, s_4_1, -1, 3},
196 : : /* 2 */ { 5, s_4_2, -1, 1},
197 : : /* 3 */ { 5, s_4_3, -1, 2},
198 : : /* 4 */ { 4, s_4_4, -1, 2},
199 : : /* 5 */ { 3, s_4_5, -1, 3},
200 : : /* 6 */ { 4, s_4_6, -1, 3}
201 : : };
202 : :
203 : :
204 : : static const struct among a_5[19] =
205 : : {
206 : : /* 0 */ { 2, s_5_0, -1, 1},
207 : : /* 1 */ { 4, s_5_1, -1, 1},
208 : : /* 2 */ { 4, s_5_2, -1, 1},
209 : : /* 3 */ { 4, s_5_3, -1, 1},
210 : : /* 4 */ { 4, s_5_4, -1, 1},
211 : : /* 5 */ { 3, s_5_5, -1, 1},
212 : : /* 6 */ { 3, s_5_6, -1, 1},
213 : : /* 7 */ { 3, s_5_7, -1, 1},
214 : : /* 8 */ { 3, s_5_8, -1, 1},
215 : : /* 9 */ { 2, s_5_9, -1, 1},
216 : : /* 10 */ { 3, s_5_10, -1, 1},
217 : : /* 11 */ { 3, s_5_11, -1, 2},
218 : : /* 12 */ { 2, s_5_12, -1, 1},
219 : : /* 13 */ { 3, s_5_13, -1, 1},
220 : : /* 14 */ { 3, s_5_14, -1, 1},
221 : : /* 15 */ { 3, s_5_15, -1, 1},
222 : : /* 16 */ { 4, s_5_16, 15, 1},
223 : : /* 17 */ { 5, s_5_17, 16, 1},
224 : : /* 18 */ { 2, s_5_18, -1, 1}
225 : : };
226 : :
227 : : static const unsigned char g_v[] = { 17, 65, 16, 1 };
228 : :
229 : : static const unsigned char g_v_WXY[] = { 1, 17, 65, 208, 1 };
230 : :
231 : : static const symbol s_0[] = { 's', 's' };
232 : : static const symbol s_1[] = { 'i' };
233 : : static const symbol s_2[] = { 'e', 'e' };
234 : : static const symbol s_3[] = { 'e' };
235 : : static const symbol s_4[] = { 'e' };
236 : : static const symbol s_5[] = { 'i' };
237 : : static const symbol s_6[] = { 't', 'i', 'o', 'n' };
238 : : static const symbol s_7[] = { 'e', 'n', 'c', 'e' };
239 : : static const symbol s_8[] = { 'a', 'n', 'c', 'e' };
240 : : static const symbol s_9[] = { 'a', 'b', 'l', 'e' };
241 : : static const symbol s_10[] = { 'e', 'n', 't' };
242 : : static const symbol s_11[] = { 'e' };
243 : : static const symbol s_12[] = { 'i', 'z', 'e' };
244 : : static const symbol s_13[] = { 'a', 't', 'e' };
245 : : static const symbol s_14[] = { 'a', 'l' };
246 : : static const symbol s_15[] = { 'a', 'l' };
247 : : static const symbol s_16[] = { 'f', 'u', 'l' };
248 : : static const symbol s_17[] = { 'o', 'u', 's' };
249 : : static const symbol s_18[] = { 'i', 'v', 'e' };
250 : : static const symbol s_19[] = { 'b', 'l', 'e' };
251 : : static const symbol s_20[] = { 'a', 'l' };
252 : : static const symbol s_21[] = { 'i', 'c' };
253 : : static const symbol s_22[] = { 'Y' };
254 : : static const symbol s_23[] = { 'Y' };
255 : : static const symbol s_24[] = { 'y' };
256 : :
257 : 3431 : int Xapian::InternalStemPorter::r_shortv() { /* backwardmode */
258 [ + + ]: 3431 : if (out_grouping_b_U(g_v_WXY, 89, 121, 0)) return 0; /* non v_WXY, line 19 */
259 [ + + ]: 3101 : if (in_grouping_b_U(g_v, 97, 121, 0)) return 0; /* grouping v, line 19 */
260 [ + + ]: 2081 : if (out_grouping_b_U(g_v, 97, 121, 0)) return 0; /* non v, line 19 */
261 : 3431 : return 1;
262 : : }
263 : :
264 : 4894 : int Xapian::InternalStemPorter::r_R1() { /* backwardmode */
265 [ + + ]: 4894 : if (!(I_p1 <= c)) return 0; /* p1 <= <integer expression>, line 21 */
266 : 4894 : return 1;
267 : : }
268 : :
269 : 19006 : int Xapian::InternalStemPorter::r_R2() { /* backwardmode */
270 [ + + ]: 19006 : if (!(I_p2 <= c)) return 0; /* p2 <= <integer expression>, line 22 */
271 : 19006 : return 1;
272 : : }
273 : :
274 : 101044 : int Xapian::InternalStemPorter::r_Step_1a() { /* backwardmode */
275 : : int among_var;
276 : 101044 : ket = c; /* [, line 25 */
277 [ + - ][ + + ]: 101044 : if (c <= lb || p[c - 1] != 115) return 0; /* substring, line 25 */
278 : 9326 : among_var = find_among_b(s_pool, a_0, 4, 0, 0);
279 [ - + ]: 9326 : if (!(among_var)) return 0;
280 : 9326 : bra = c; /* ], line 25 */
281 [ - + + + : 9326 : switch(among_var) { /* among, line 25 */
+ ]
282 : 0 : case 0: return 0;
283 : : case 1:
284 : 69 : { int ret = slice_from_s(2, s_0); /* <-, line 26 */
285 [ - + ]: 69 : if (ret < 0) return ret;
286 : : }
287 : 69 : break;
288 : : case 2:
289 : 374 : { int ret = slice_from_s(1, s_1); /* <-, line 27 */
290 [ - + ]: 374 : if (ret < 0) return ret;
291 : : }
292 : 374 : break;
293 : : case 3:
294 [ - + ]: 8197 : if (slice_del() == -1) return -1; /* delete, line 29 */
295 : : break;
296 : : }
297 : 101044 : return 1;
298 : : }
299 : :
300 : 101044 : int Xapian::InternalStemPorter::r_Step_1b() { /* backwardmode */
301 : : int among_var;
302 : 101044 : ket = c; /* [, line 34 */
303 [ + + ][ + + ]: 101044 : if (c - 1 <= lb || (p[c - 1] != 100 && p[c - 1] != 103)) return 0; /* substring, line 34 */
[ + + ]
304 : 10482 : among_var = find_among_b(s_pool, a_2, 3, 0, 0);
305 [ + + ]: 10482 : if (!(among_var)) return 0;
306 : 5131 : bra = c; /* ], line 34 */
307 [ - + + - ]: 5131 : switch(among_var) { /* among, line 34 */
308 : 0 : case 0: return 0;
309 : : case 1:
310 : 45 : { int ret = r_R1(); /* call R1, line 35 */
311 [ + + ]: 45 : if (ret <= 0) return ret;
312 : : }
313 : 17 : { int ret = slice_from_s(2, s_2); /* <-, line 35 */
314 [ - + ]: 17 : if (ret < 0) return ret;
315 : : }
316 : 17 : break;
317 : : case 2:
318 : 5086 : { int m_test1 = l - c; /* test, line 38 */
319 : 5086 : { int ret = out_grouping_b_U(g_v, 97, 121, 1); /* gopast */ /* grouping v, line 38 */
320 [ + + ]: 5086 : if (ret < 0) return 0;
321 : 5026 : c -= ret;
322 : : }
323 : 5026 : c = l - m_test1;
324 : : }
325 [ - + ]: 5026 : if (slice_del() == -1) return -1; /* delete, line 38 */
326 : 5026 : { int m_test2 = l - c; /* test, line 39 */
327 [ + + ][ + + ]: 5026 : if (c - 1 <= lb || p[c - 1] >> 5 != 3 || !((68514004 >> (p[c - 1] & 0x1f)) & 1)) among_var = 3; else /* substring, line 39 */
[ + + ]
328 : 3514 : among_var = find_among_b(s_pool, a_1, 13, 0, 0);
329 [ - + ]: 5026 : if (!(among_var)) return 0;
330 : 5026 : c = l - m_test2;
331 : : }
332 [ - + + + : 5026 : switch(among_var) { /* among, line 39 */
- ]
333 : 0 : case 0: return 0;
334 : : case 1:
335 : 319 : { int saved_c = c;
336 : 319 : insert_s(c, c, 1, s_3); /* <+, line 41 */
337 : 319 : c = saved_c;
338 : : }
339 : 319 : break;
340 : : case 2:
341 : 341 : ket = c; /* [, line 44 */
342 : 341 : { int ret = skip_utf8(p, c, lb, 0, -1);
343 [ - + ]: 341 : if (ret < 0) return 0;
344 : 341 : c = ret; /* next, line 44 */
345 : : }
346 : 341 : bra = c; /* ], line 44 */
347 [ - + ]: 341 : if (slice_del() == -1) return -1; /* delete, line 44 */
348 : 341 : break;
349 : : case 3:
350 [ + + ]: 4366 : if (c != I_p1) return 0; /* atmark, line 45 */
351 : 748 : { int m_test3 = l - c; /* test, line 45 */
352 : 748 : { int ret = r_shortv(); /* call shortv, line 45 */
353 [ + + ]: 748 : if (ret <= 0) return ret;
354 : : }
355 : 279 : c = l - m_test3;
356 : : }
357 : 279 : { int saved_c = c;
358 : 279 : insert_s(c, c, 1, s_4); /* <+, line 45 */
359 : 279 : c = saved_c;
360 : : }
361 : : break;
362 : : }
363 : : break;
364 : : }
365 : 101044 : return 1;
366 : : }
367 : :
368 : 101044 : int Xapian::InternalStemPorter::r_Step_1c() { /* backwardmode */
369 : 101044 : ket = c; /* [, line 52 */
370 : 101044 : { int m1 = l - c; (void)m1; /* or, line 52 */
371 [ + + ][ + + ]: 101044 : if (c <= lb || p[c - 1] != 'y') goto lab1;
372 : 4041 : c--;
373 : 4041 : goto lab0;
374 : : lab1:
375 : 97003 : c = l - m1;
376 [ + + ][ + + ]: 97003 : if (c <= lb || p[c - 1] != 'Y') return 0;
377 : 877 : c--;
378 : : }
379 : : lab0:
380 : 4918 : bra = c; /* ], line 52 */
381 : 4918 : { int ret = out_grouping_b_U(g_v, 97, 121, 1); /* gopast */ /* grouping v, line 53 */
382 [ + + ]: 4918 : if (ret < 0) return 0;
383 : 4569 : c -= ret;
384 : : }
385 : 4569 : { int ret = slice_from_s(1, s_5); /* <-, line 54 */
386 [ - + ]: 4569 : if (ret < 0) return ret;
387 : : }
388 : 101044 : return 1;
389 : : }
390 : :
391 : 101044 : int Xapian::InternalStemPorter::r_Step_2() { /* backwardmode */
392 : : int among_var;
393 : 101044 : ket = c; /* [, line 58 */
394 [ + + ][ + + ]: 101044 : if (c - 2 <= lb || p[c - 1] >> 5 != 3 || !((815616 >> (p[c - 1] & 0x1f)) & 1)) return 0; /* substring, line 58 */
[ + + ]
395 : 24995 : among_var = find_among_b(s_pool, a_3, 20, 0, 0);
396 [ + + ]: 24995 : if (!(among_var)) return 0;
397 : 1016 : bra = c; /* ], line 58 */
398 : 1016 : { int ret = r_R1(); /* call R1, line 58 */
399 [ + + ]: 1016 : if (ret <= 0) return ret;
400 : : }
401 [ - + + + + : 956 : switch(among_var) { /* among, line 58 */
+ + + + +
+ + + + +
- ]
402 : 0 : case 0: return 0;
403 : : case 1:
404 : 5 : { int ret = slice_from_s(4, s_6); /* <-, line 59 */
405 [ - + ]: 5 : if (ret < 0) return ret;
406 : : }
407 : 5 : break;
408 : : case 2:
409 : 44 : { int ret = slice_from_s(4, s_7); /* <-, line 60 */
410 [ - + ]: 44 : if (ret < 0) return ret;
411 : : }
412 : 44 : break;
413 : : case 3:
414 : 23 : { int ret = slice_from_s(4, s_8); /* <-, line 61 */
415 [ - + ]: 23 : if (ret < 0) return ret;
416 : : }
417 : 23 : break;
418 : : case 4:
419 : 38 : { int ret = slice_from_s(4, s_9); /* <-, line 62 */
420 [ - + ]: 38 : if (ret < 0) return ret;
421 : : }
422 : 38 : break;
423 : : case 5:
424 : 40 : { int ret = slice_from_s(3, s_10); /* <-, line 63 */
425 [ - + ]: 40 : if (ret < 0) return ret;
426 : : }
427 : 40 : break;
428 : : case 6:
429 : 134 : { int ret = slice_from_s(1, s_11); /* <-, line 64 */
430 [ - + ]: 134 : if (ret < 0) return ret;
431 : : }
432 : 134 : break;
433 : : case 7:
434 : 4 : { int ret = slice_from_s(3, s_12); /* <-, line 66 */
435 [ - + ]: 4 : if (ret < 0) return ret;
436 : : }
437 : 4 : break;
438 : : case 8:
439 : 393 : { int ret = slice_from_s(3, s_13); /* <-, line 68 */
440 [ - + ]: 393 : if (ret < 0) return ret;
441 : : }
442 : 393 : break;
443 : : case 9:
444 : 93 : { int ret = slice_from_s(2, s_14); /* <-, line 69 */
445 [ - + ]: 93 : if (ret < 0) return ret;
446 : : }
447 : 93 : break;
448 : : case 10:
449 : 26 : { int ret = slice_from_s(2, s_15); /* <-, line 71 */
450 [ - + ]: 26 : if (ret < 0) return ret;
451 : : }
452 : 26 : break;
453 : : case 11:
454 : 12 : { int ret = slice_from_s(3, s_16); /* <-, line 72 */
455 [ - + ]: 12 : if (ret < 0) return ret;
456 : : }
457 : 12 : break;
458 : : case 12:
459 : 120 : { int ret = slice_from_s(3, s_17); /* <-, line 74 */
460 [ - + ]: 120 : if (ret < 0) return ret;
461 : : }
462 : 120 : break;
463 : : case 13:
464 : 8 : { int ret = slice_from_s(3, s_18); /* <-, line 76 */
465 [ - + ]: 8 : if (ret < 0) return ret;
466 : : }
467 : 8 : break;
468 : : case 14:
469 : 16 : { int ret = slice_from_s(3, s_19); /* <-, line 77 */
470 [ - + ]: 16 : if (ret < 0) return ret;
471 : : }
472 : : break;
473 : : }
474 : 101044 : return 1;
475 : : }
476 : :
477 : 101044 : int Xapian::InternalStemPorter::r_Step_3() { /* backwardmode */
478 : : int among_var;
479 : 101044 : ket = c; /* [, line 82 */
480 [ + + ][ + + ]: 101044 : if (c - 2 <= lb || p[c - 1] >> 5 != 3 || !((528928 >> (p[c - 1] & 0x1f)) & 1)) return 0; /* substring, line 82 */
[ + + ]
481 : 20187 : among_var = find_among_b(s_pool, a_4, 7, 0, 0);
482 [ + + ]: 20187 : if (!(among_var)) return 0;
483 : 657 : bra = c; /* ], line 82 */
484 : 657 : { int ret = r_R1(); /* call R1, line 82 */
485 [ + + ]: 657 : if (ret <= 0) return ret;
486 : : }
487 [ - + + + : 642 : switch(among_var) { /* among, line 82 */
- ]
488 : 0 : case 0: return 0;
489 : : case 1:
490 : 8 : { int ret = slice_from_s(2, s_20); /* <-, line 83 */
491 [ - + ]: 8 : if (ret < 0) return ret;
492 : : }
493 : 8 : break;
494 : : case 2:
495 : 158 : { int ret = slice_from_s(2, s_21); /* <-, line 85 */
496 [ - + ]: 158 : if (ret < 0) return ret;
497 : : }
498 : 158 : break;
499 : : case 3:
500 [ - + ]: 476 : if (slice_del() == -1) return -1; /* delete, line 87 */
501 : : break;
502 : : }
503 : 101044 : return 1;
504 : : }
505 : :
506 : 101044 : int Xapian::InternalStemPorter::r_Step_4() { /* backwardmode */
507 : : int among_var;
508 : 101044 : ket = c; /* [, line 92 */
509 [ + + ][ + + ]: 101044 : if (c - 1 <= lb || p[c - 1] >> 5 != 3 || !((3961384 >> (p[c - 1] & 0x1f)) & 1)) return 0; /* substring, line 92 */
[ + + ]
510 : 43682 : among_var = find_among_b(s_pool, a_5, 19, 0, 0);
511 [ + + ]: 43682 : if (!(among_var)) return 0;
512 : 7113 : bra = c; /* ], line 92 */
513 : 7113 : { int ret = r_R2(); /* call R2, line 92 */
514 [ + + ]: 7113 : if (ret <= 0) return ret;
515 : : }
516 [ - + + - ]: 3800 : switch(among_var) { /* among, line 92 */
517 : 0 : case 0: return 0;
518 : : case 1:
519 [ - + ]: 3411 : if (slice_del() == -1) return -1; /* delete, line 95 */
520 : 3411 : break;
521 : : case 2:
522 : 389 : { int m1 = l - c; (void)m1; /* or, line 96 */
523 [ + - ][ + + ]: 389 : if (c <= lb || p[c - 1] != 's') goto lab1;
524 : 97 : c--;
525 : 97 : goto lab0;
526 : : lab1:
527 : 292 : c = l - m1;
528 [ + - ][ + + ]: 292 : if (c <= lb || p[c - 1] != 't') return 0;
529 : 254 : c--;
530 : : }
531 : : lab0:
532 [ - + ]: 351 : if (slice_del() == -1) return -1; /* delete, line 96 */
533 : : break;
534 : : }
535 : 101044 : return 1;
536 : : }
537 : :
538 : 101044 : int Xapian::InternalStemPorter::r_Step_5a() { /* backwardmode */
539 : 101044 : ket = c; /* [, line 101 */
540 [ + + ][ + + ]: 101044 : if (c <= lb || p[c - 1] != 'e') return 0;
541 : 7266 : c--;
542 : 7266 : bra = c; /* ], line 101 */
543 : 7266 : { int m1 = l - c; (void)m1; /* or, line 102 */
544 : 7266 : { int ret = r_R2(); /* call R2, line 102 */
545 [ + + ]: 7266 : if (ret == 0) goto lab1;
546 [ - + ]: 4090 : if (ret < 0) return ret;
547 : : }
548 : 4090 : goto lab0;
549 : : lab1:
550 : 3176 : c = l - m1;
551 : 3176 : { int ret = r_R1(); /* call R1, line 102 */
552 [ + + ]: 3176 : if (ret <= 0) return ret;
553 : : }
554 : 2683 : { int m2 = l - c; (void)m2; /* not, line 102 */
555 : 2683 : { int ret = r_shortv(); /* call shortv, line 102 */
556 [ + + ]: 2683 : if (ret == 0) goto lab2;
557 [ - + ]: 1178 : if (ret < 0) return ret;
558 : : }
559 : 1178 : return 0;
560 : : lab2:
561 : 1505 : c = l - m2;
562 : : }
563 : : }
564 : : lab0:
565 [ - + ]: 5595 : if (slice_del() == -1) return -1; /* delete, line 103 */
566 : 101044 : return 1;
567 : : }
568 : :
569 : 101044 : int Xapian::InternalStemPorter::r_Step_5b() { /* backwardmode */
570 : 101044 : ket = c; /* [, line 107 */
571 [ + + ][ + + ]: 101044 : if (c <= lb || p[c - 1] != 'l') return 0;
572 : 4627 : c--;
573 : 4627 : bra = c; /* ], line 107 */
574 : 4627 : { int ret = r_R2(); /* call R2, line 108 */
575 [ + + ]: 4627 : if (ret <= 0) return ret;
576 : : }
577 [ + - ][ + + ]: 2092 : if (c <= lb || p[c - 1] != 'l') return 0;
578 : 284 : c--;
579 [ - + ]: 284 : if (slice_del() == -1) return -1; /* delete, line 109 */
580 : 101044 : return 1;
581 : : }
582 : :
583 : 101044 : int Xapian::InternalStemPorter::stem() { /* forwardmode */
584 : 101044 : B_Y_found = 0; /* unset Y_found, line 115 */
585 : 101044 : { int c1 = c; /* do, line 116 */
586 : 101044 : bra = c; /* [, line 116 */
587 [ + - ][ + + ]: 101044 : if (c == l || p[c] != 'y') goto lab0;
588 : 2128 : c++;
589 : 2128 : ket = c; /* ], line 116 */
590 : 2128 : { int ret = slice_from_s(1, s_22); /* <-, line 116 */
591 [ - + ]: 2128 : if (ret < 0) return ret;
592 : : }
593 : 2128 : B_Y_found = 1; /* set Y_found, line 116 */
594 : : lab0:
595 : 101044 : c = c1;
596 : : }
597 : 101044 : { int c2 = c; /* do, line 117 */
598 : 12188 : while(1) { /* repeat, line 117 */
599 : 113232 : int c3 = c;
600 : 4169547 : while(1) { /* goto, line 117 */
601 : 4282779 : int c4 = c;
602 [ + + ]: 4282779 : if (in_grouping_U(g_v, 97, 121, 0)) goto lab3; /* grouping v, line 117 */
603 : 519529 : bra = c; /* [, line 117 */
604 [ + + ][ + + ]: 519529 : if (c == l || p[c] != 'y') goto lab3;
605 : 12188 : c++;
606 : 12188 : ket = c; /* ], line 117 */
607 : 12188 : c = c4;
608 : : break;
609 : : lab3:
610 : 4270591 : c = c4;
611 : 4270591 : { int ret = skip_utf8(p, c, 0, l, 1);
612 [ + + ]: 4270591 : if (ret < 0) goto lab2;
613 : 4169547 : c = ret; /* goto, line 117 */
614 : : }
615 : : }
616 : 12188 : { int ret = slice_from_s(1, s_23); /* <-, line 117 */
617 [ - + ]: 12188 : if (ret < 0) return ret;
618 : : }
619 : 12188 : B_Y_found = 1; /* set Y_found, line 117 */
620 : 12188 : continue;
621 : : lab2:
622 : 101044 : c = c3;
623 : : break;
624 : : }
625 : 101044 : c = c2;
626 : : }
627 : 101044 : I_p1 = l; /* p1 = <integer expression>, line 119 */
628 : 101044 : I_p2 = l; /* p2 = <integer expression>, line 120 */
629 : 101044 : { int c5 = c; /* do, line 121 */
630 : 101044 : { int ret = out_grouping_U(g_v, 97, 121, 1); /* gopast */ /* grouping v, line 122 */
631 [ + + ]: 101044 : if (ret < 0) goto lab4;
632 : 91936 : c += ret;
633 : : }
634 : 91936 : { int ret = in_grouping_U(g_v, 97, 121, 1); /* gopast */ /* non v, line 122 */
635 [ + + ]: 91936 : if (ret < 0) goto lab4;
636 : 89706 : c += ret;
637 : : }
638 : 89706 : I_p1 = c; /* setmark p1, line 122 */
639 : 89706 : { int ret = out_grouping_U(g_v, 97, 121, 1); /* gopast */ /* grouping v, line 123 */
640 [ + + ]: 89706 : if (ret < 0) goto lab4;
641 : 76421 : c += ret;
642 : : }
643 : 76421 : { int ret = in_grouping_U(g_v, 97, 121, 1); /* gopast */ /* non v, line 123 */
644 [ + + ]: 76421 : if (ret < 0) goto lab4;
645 : 72523 : c += ret;
646 : : }
647 : 72523 : I_p2 = c; /* setmark p2, line 123 */
648 : : lab4:
649 : 101044 : c = c5;
650 : : }
651 : 101044 : lb = c; c = l; /* backwards, line 126 */
652 : :
653 : 101044 : { int m6 = l - c; (void)m6; /* do, line 127 */
654 : 101044 : { int ret = r_Step_1a(); /* call Step_1a, line 127 */
655 [ + + ]: 101044 : if (ret == 0) goto lab5;
656 [ - + ]: 9326 : if (ret < 0) return ret;
657 : : }
658 : : lab5:
659 : 101044 : c = l - m6;
660 : : }
661 : 101044 : { int m7 = l - c; (void)m7; /* do, line 128 */
662 : 101044 : { int ret = r_Step_1b(); /* call Step_1b, line 128 */
663 [ + + ]: 101044 : if (ret == 0) goto lab6;
664 [ - + ]: 956 : if (ret < 0) return ret;
665 : : }
666 : : lab6:
667 : 101044 : c = l - m7;
668 : : }
669 : 101044 : { int m8 = l - c; (void)m8; /* do, line 129 */
670 : 101044 : { int ret = r_Step_1c(); /* call Step_1c, line 129 */
671 [ + + ]: 101044 : if (ret == 0) goto lab7;
672 [ - + ]: 4569 : if (ret < 0) return ret;
673 : : }
674 : : lab7:
675 : 101044 : c = l - m8;
676 : : }
677 : 101044 : { int m9 = l - c; (void)m9; /* do, line 130 */
678 : 101044 : { int ret = r_Step_2(); /* call Step_2, line 130 */
679 [ + + ]: 101044 : if (ret == 0) goto lab8;
680 [ - + ]: 956 : if (ret < 0) return ret;
681 : : }
682 : : lab8:
683 : 101044 : c = l - m9;
684 : : }
685 : 101044 : { int m10 = l - c; (void)m10; /* do, line 131 */
686 : 101044 : { int ret = r_Step_3(); /* call Step_3, line 131 */
687 [ + + ]: 101044 : if (ret == 0) goto lab9;
688 [ - + ]: 642 : if (ret < 0) return ret;
689 : : }
690 : : lab9:
691 : 101044 : c = l - m10;
692 : : }
693 : 101044 : { int m11 = l - c; (void)m11; /* do, line 132 */
694 : 101044 : { int ret = r_Step_4(); /* call Step_4, line 132 */
695 [ + + ]: 101044 : if (ret == 0) goto lab10;
696 [ - + ]: 3762 : if (ret < 0) return ret;
697 : : }
698 : : lab10:
699 : 101044 : c = l - m11;
700 : : }
701 : 101044 : { int m12 = l - c; (void)m12; /* do, line 133 */
702 : 101044 : { int ret = r_Step_5a(); /* call Step_5a, line 133 */
703 [ + + ]: 101044 : if (ret == 0) goto lab11;
704 [ - + ]: 5595 : if (ret < 0) return ret;
705 : : }
706 : : lab11:
707 : 101044 : c = l - m12;
708 : : }
709 : 101044 : { int m13 = l - c; (void)m13; /* do, line 134 */
710 : 101044 : { int ret = r_Step_5b(); /* call Step_5b, line 134 */
711 [ + + ]: 101044 : if (ret == 0) goto lab12;
712 [ - + ]: 284 : if (ret < 0) return ret;
713 : : }
714 : : lab12:
715 : 101044 : c = l - m13;
716 : : }
717 : 101044 : c = lb;
718 : 101044 : { int c14 = c; /* do, line 137 */
719 [ + + ]: 101044 : if (!(B_Y_found)) goto lab13; /* Boolean test Y_found, line 137 */
720 : 13904 : while(1) { /* repeat, line 137 */
721 : 26193 : int c15 = c;
722 : 726277 : while(1) { /* goto, line 137 */
723 : 752470 : int c16 = c;
724 : 752470 : bra = c; /* [, line 137 */
725 [ + + ][ + + ]: 752470 : if (c == l || p[c] != 'Y') goto lab15;
726 : 13904 : c++;
727 : 13904 : ket = c; /* ], line 137 */
728 : 13904 : c = c16;
729 : : break;
730 : : lab15:
731 : 738566 : c = c16;
732 : 738566 : { int ret = skip_utf8(p, c, 0, l, 1);
733 [ + + ]: 738566 : if (ret < 0) goto lab14;
734 : 726277 : c = ret; /* goto, line 137 */
735 : : }
736 : : }
737 : 13904 : { int ret = slice_from_s(1, s_24); /* <-, line 137 */
738 [ - + ]: 13904 : if (ret < 0) return ret;
739 : : }
740 : 13904 : continue;
741 : : lab14:
742 : 12289 : c = c15;
743 : 12289 : break;
744 : : }
745 : : lab13:
746 : 101044 : c = c14;
747 : : }
748 : 101044 : return 1;
749 : : }
750 : :
751 : 2 : Xapian::InternalStemPorter::InternalStemPorter()
752 : 2 : : B_Y_found(0), I_p2(0), I_p1(0)
753 : : {
754 : 2 : }
755 : :
756 : 2 : Xapian::InternalStemPorter::~InternalStemPorter()
757 : : {
758 [ + - ][ # # ]: 2 : }
[ # # ]
759 : :
760 : : std::string
761 : 1 : Xapian::InternalStemPorter::get_description() const
762 : : {
763 : 1 : return "porter";
764 : : }
|