9 using System.Collections.Generic;
12 namespace TraceLab.Components.DevelopmentKit.Preprocessors.Stemmers.Snowball.Languages
23 private readonly
static Among[] a_0 =
25 new Among (
"a", -1, 1, null ),
26 new Among (
"e", -1, 1, null ),
27 new Among (
"ede", 1, 1, null ),
28 new Among (
"ande", 1, 1, null ),
29 new Among (
"ende", 1, 1, null ),
30 new Among (
"ane", 1, 1, null ),
31 new Among (
"ene", 1, 1, null ),
32 new Among (
"hetene", 6, 1, null ),
33 new Among (
"erte", 1, 3, null ),
34 new Among (
"en", -1, 1, null ),
35 new Among (
"heten", 9, 1, null ),
36 new Among (
"ar", -1, 1, null ),
37 new Among (
"er", -1, 1, null ),
38 new Among (
"heter", 12, 1, null ),
39 new Among (
"s", -1, 2, null ),
40 new Among (
"as", 14, 1, null ),
41 new Among (
"es", 14, 1, null ),
42 new Among (
"edes", 16, 1, null ),
43 new Among (
"endes", 16, 1, null ),
44 new Among (
"enes", 16, 1, null ),
45 new Among (
"hetenes", 19, 1, null ),
46 new Among (
"ens", 14, 1, null ),
47 new Among (
"hetens", 21, 1, null ),
48 new Among (
"ers", 14, 1, null ),
49 new Among (
"ets", 14, 1, null ),
50 new Among (
"et", -1, 1, null ),
51 new Among (
"het", 25, 1, null ),
52 new Among (
"ert", -1, 3, null ),
53 new Among (
"ast", -1, 1, null )
58 private readonly
static Among[] a_1 =
60 new Among (
"dt", -1, -1, null ),
61 new Among (
"vt", -1, -1, null )
65 private readonly
static Among[] a_2 =
67 new Among (
"leg", -1, 1, null ),
68 new Among (
"eleg", 0, 1, null ),
69 new Among (
"ig", -1, 1, null ),
70 new Among (
"eig", 2, 1, null ),
71 new Among (
"lig", 2, 1, null ),
72 new Among (
"elig", 4, 1, null ),
73 new Among (
"els", -1, 1, null ),
74 new Among (
"lov", -1, 1, null ),
75 new Among (
"elov", 7, 1, null ),
76 new Among (
"slov", 7, 1, null ),
77 new Among (
"hetslov", 9, 1, null )
80 private static readonly
char[] g_v = {(char)17, (
char)65, (char)16, (
char)1, (char)0, (
char)0, (char)0,
81 (
char)0, (char)0, (
char)0, (char)0, (
char)0, (char)0, (
char)0,
82 (char)0, (
char)0, (char)48, (
char)0, (char)128 };
84 private static readonly
char[] g_s_ending = { (char)119, (
char)125, (char)149, (
char)1 };
95 base.copy_from(other);
99 private bool r_mark_regions()
101 bool subroot =
false;
112 if (0 > c || c > limit)
127 if (!(in_grouping(g_v, 97, 248)))
135 if (subroot) { subroot =
false;
break; }
148 if (!(out_grouping(g_v, 97, 248)))
155 if (subroot) { subroot =
false;
break; }
178 private bool r_main_suffix()
180 bool subroot =
false;
187 v_1 = limit - cursor;
194 v_2 = limit_backward;
195 limit_backward = cursor;
196 cursor = limit - v_1;
201 among_var = find_among_b(a_0, 29);
204 limit_backward = v_2;
209 limit_backward = v_2;
224 v_3 = limit - cursor;
227 if (!(in_grouping_b(g_s_ending, 98, 122)))
234 if (subroot) { subroot =
false;
break; }
235 cursor = limit - v_3;
238 if (!(eq_s_b(1,
"k")))
242 if (!(out_grouping_b(g_v, 97, 248)))
260 private bool r_consonant_pair()
267 v_1 = limit - cursor;
270 v_2 = limit - cursor;
277 v_3 = limit_backward;
278 limit_backward = cursor;
279 cursor = limit - v_2;
284 if (find_among_b(a_1, 2) == 0)
286 limit_backward = v_3;
291 limit_backward = v_3;
292 cursor = limit - v_1;
294 if (cursor <= limit_backward)
307 private bool r_other_suffix()
314 v_1 = limit - cursor;
321 v_2 = limit_backward;
322 limit_backward = cursor;
323 cursor = limit - v_1;
328 among_var = find_among_b(a_2, 11);
331 limit_backward = v_2;
336 limit_backward = v_2;
351 private bool CanStem()
363 if (!r_mark_regions())
370 limit_backward = cursor; cursor = limit;
373 v_2 = limit - cursor;
377 if (!r_main_suffix())
382 cursor = limit - v_2;
384 v_3 = limit - cursor;
388 if (!r_consonant_pair())
393 cursor = limit - v_3;
395 v_4 = limit - cursor;
399 if (!r_other_suffix())
404 cursor = limit - v_4;
405 cursor = limit_backward;
416 this.setCurrent(s.ToLowerInvariant());
418 return this.getCurrent();