9 using System.Collections.Generic;
12 namespace TraceLab.Components.DevelopmentKit.Preprocessors.Stemmers.Snowball.Languages
22 private readonly
static Among[] a_0 =
24 new Among (
"hed", -1, 1, null ),
25 new Among (
"ethed", 0, 1, null ),
26 new Among (
"ered", -1, 1, null ),
27 new Among (
"e", -1, 1, null ),
28 new Among (
"erede", 3, 1, null ),
29 new Among (
"ende", 3, 1, null ),
30 new Among (
"erende", 5, 1, null ),
31 new Among (
"ene", 3, 1, null ),
32 new Among (
"erne", 3, 1, null ),
33 new Among (
"ere", 3, 1, null ),
34 new Among (
"en", -1, 1, null ),
35 new Among (
"heden", 10, 1, null ),
36 new Among (
"eren", 10, 1, null ),
37 new Among (
"er", -1, 1, null ),
38 new Among (
"heder", 13, 1, null ),
39 new Among (
"erer", 13, 1, null ),
40 new Among (
"s", -1, 2, null ),
41 new Among (
"heds", 16, 1, null ),
42 new Among (
"es", 16, 1, null ),
43 new Among (
"endes", 18, 1, null ),
44 new Among (
"erendes", 19, 1, null ),
45 new Among (
"enes", 18, 1, null ),
46 new Among (
"ernes", 18, 1, null ),
47 new Among (
"eres", 18, 1, null ),
48 new Among (
"ens", 16, 1, null ),
49 new Among (
"hedens", 24, 1, null ),
50 new Among (
"erens", 24, 1, null ),
51 new Among (
"ers", 16, 1, null ),
52 new Among (
"ets", 16, 1, null ),
53 new Among (
"erets", 28, 1, null ),
54 new Among (
"et", -1, 1, null ),
55 new Among (
"eret", 30, 1, null )
61 private readonly
static Among[] a_1 =
63 new Among (
"gd", -1, -1, null ),
64 new Among (
"dt", -1, -1, null ),
65 new Among (
"gt", -1, -1, null ),
66 new Among (
"kt", -1, -1, null )
70 private readonly
static Among[] a_2 =
72 new Among (
"ig", -1, 1, null ),
73 new Among (
"lig", 0, 1, null ),
74 new Among (
"elig", 1, 1, null ),
75 new Among (
"els", -1, 1, null ),
76 new Among (
"l\u00F8st", -1, 2, 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)239, (
char)254, (char)42, (
char)3, (char)0, (
char)0,
85 (char)0, (
char)0, (char)0, (
char)0, (char)0, (
char)0,
86 (char)0, (
char)0, (char)0, (
char)0, (char)16 };
91 private StringBuilder S_ch =
new StringBuilder();
99 base.copy_from(other);
103 private bool r_mark_regions()
105 bool subroot =
false;
116 if (0 > c || c > limit)
131 if (!(in_grouping(g_v, 97, 248)))
139 if (subroot) { subroot =
false;
break; }
152 if (!(out_grouping(g_v, 97, 248)))
159 if (subroot) { subroot =
false;
break; }
182 private bool r_main_suffix()
189 v_1 = limit - cursor;
196 v_2 = limit_backward;
197 limit_backward = cursor;
198 cursor = limit - v_1;
203 among_var = find_among_b(a_0, 32);
206 limit_backward = v_2;
211 limit_backward = v_2;
223 if (!(in_grouping_b(g_s_ending, 97, 229)))
235 private bool r_consonant_pair()
242 v_1 = limit - cursor;
245 v_2 = limit - cursor;
252 v_3 = limit_backward;
253 limit_backward = cursor;
254 cursor = limit - v_2;
259 if (find_among_b(a_1, 4) == 0)
261 limit_backward = v_3;
266 limit_backward = v_3;
267 cursor = limit - v_1;
269 if (cursor <= limit_backward)
282 private bool r_other_suffix()
291 v_1 = limit - cursor;
298 if (!(eq_s_b(2,
"st")))
305 if (!(eq_s_b(2,
"ig")))
312 cursor = limit - v_1;
314 v_2 = limit - cursor;
321 v_3 = limit_backward;
322 limit_backward = cursor;
323 cursor = limit - v_2;
328 among_var = find_among_b(a_2, 5);
331 limit_backward = v_3;
336 limit_backward = v_3;
346 v_4 = limit - cursor;
350 if (!r_consonant_pair())
355 cursor = limit - v_4;
360 slice_from(
"l\u00F8s");
367 private bool r_undouble()
373 v_1 = limit - cursor;
380 v_2 = limit_backward;
381 limit_backward = cursor;
382 cursor = limit - v_1;
386 if (!(out_grouping_b(g_v, 97, 248)))
388 limit_backward = v_2;
394 S_ch = slice_to(S_ch);
395 limit_backward = v_2;
407 private bool CanStem()
420 if (!r_mark_regions())
427 limit_backward = cursor; cursor = limit;
430 v_2 = limit - cursor;
434 if (!r_main_suffix())
439 cursor = limit - v_2;
441 v_3 = limit - cursor;
445 if (!r_consonant_pair())
450 cursor = limit - v_3;
452 v_4 = limit - cursor;
456 if (!r_other_suffix())
461 cursor = limit - v_4;
463 v_5 = limit - cursor;
472 cursor = limit - v_5;
473 cursor = limit_backward;
484 this.setCurrent(s.ToLowerInvariant());
486 return this.getCurrent();