TraceLab Component Library
 All Classes Namespaces Files Functions Variables Enumerations Enumerator Properties
HungarianStemmer.cs
Go to the documentation of this file.
1 /*
2  * Port of Snowball stemmers on C#
3  * Original stemmers can be found on http://snowball.tartarus.org
4  * Licence still BSD: http://snowball.tartarus.org/license.php
5  *
6  * Most of stemmers are ported from Java by Iveonik Systems ltd. (www.iveonik.com)
7  */
8 using System;
9 using System.Collections.Generic;
10 using System.Text;
11 
12 namespace TraceLab.Components.DevelopmentKit.Preprocessors.Stemmers.Snowball.Languages
13 {
18  {
19  //private readonly static HungarianStemmer methodObject = new HungarianStemmer();
20 
21  private readonly static Among[] a_0 =
22  {
23  new Among ( "cs", -1, -1, null ),
24  new Among ( "dzs", -1, -1, null ),
25  new Among ( "gy", -1, -1, null ),
26  new Among ( "ly", -1, -1, null ),
27  new Among ( "ny", -1, -1, null ),
28  new Among ( "sz", -1, -1, null ),
29  new Among ( "ty", -1, -1, null ),
30  new Among ( "zs", -1, -1, null )
31  };
32 
33 
34  private readonly static Among[] a_1 =
35  {
36  new Among ( "\u00E1", -1, 1, null ),
37  new Among ( "\u00E9", -1, 2, null )
38  };
39 
40 
41  private readonly static Among[] a_2 =
42  {
43  new Among ( "bb", -1, -1, null ),
44  new Among ( "cc", -1, -1, null ),
45  new Among ( "dd", -1, -1, null ),
46  new Among ( "ff", -1, -1, null ),
47  new Among ( "gg", -1, -1, null ),
48  new Among ( "jj", -1, -1, null ),
49  new Among ( "kk", -1, -1, null ),
50  new Among ( "ll", -1, -1, null ),
51  new Among ( "mm", -1, -1, null ),
52  new Among ( "nn", -1, -1, null ),
53  new Among ( "pp", -1, -1, null ),
54  new Among ( "rr", -1, -1, null ),
55  new Among ( "ccs", -1, -1, null ),
56  new Among ( "ss", -1, -1, null ),
57  new Among ( "zzs", -1, -1, null ),
58  new Among ( "tt", -1, -1, null ),
59  new Among ( "vv", -1, -1, null ),
60  new Among ( "ggy", -1, -1, null ),
61  new Among ( "lly", -1, -1, null ),
62  new Among ( "nny", -1, -1, null ),
63  new Among ( "tty", -1, -1, null ),
64  new Among ( "ssz", -1, -1, null ),
65  new Among ( "zz", -1, -1, null )
66  };
67 
68 
69  private readonly static Among[] a_3 =
70  {
71  new Among ( "al", -1, 1, null ),
72  new Among ( "el", -1, 2, null )
73  };
74 
75 
76  private readonly static Among[] a_4 =
77  {
78  new Among ( "ba", -1, -1, null ),
79  new Among ( "ra", -1, -1, null ),
80  new Among ( "be", -1, -1, null ),
81  new Among ( "re", -1, -1, null ),
82  new Among ( "ig", -1, -1, null ),
83  new Among ( "nak", -1, -1, null ),
84  new Among ( "nek", -1, -1, null ),
85  new Among ( "val", -1, -1, null ),
86  new Among ( "vel", -1, -1, null ),
87  new Among ( "ul", -1, -1, null ),
88  new Among ( "n\u00E1l", -1, -1, null ),
89  new Among ( "n\u00E9l", -1, -1, null ),
90  new Among ( "b\u00F3l", -1, -1, null ),
91  new Among ( "r\u00F3l", -1, -1, null ),
92  new Among ( "t\u00F3l", -1, -1, null ),
93  new Among ( "b\u00F5l", -1, -1, null ),
94  new Among ( "r\u00F5l", -1, -1, null ),
95  new Among ( "t\u00F5l", -1, -1, null ),
96  new Among ( "\u00FCl", -1, -1, null ),
97  new Among ( "n", -1, -1, null ),
98  new Among ( "an", 19, -1, null ),
99  new Among ( "ban", 20, -1, null ),
100  new Among ( "en", 19, -1, null ),
101  new Among ( "ben", 22, -1, null ),
102  new Among ( "k\u00E9ppen", 22, -1, null ),
103  new Among ( "on", 19, -1, null ),
104  new Among ( "\u00F6n", 19, -1, null ),
105  new Among ( "k\u00E9pp", -1, -1, null ),
106  new Among ( "kor", -1, -1, null ),
107  new Among ( "t", -1, -1, null ),
108  new Among ( "at", 29, -1, null ),
109  new Among ( "et", 29, -1, null ),
110  new Among ( "k\u00E9nt", 29, -1, null ),
111  new Among ( "ank\u00E9nt", 32, -1, null ),
112  new Among ( "enk\u00E9nt", 32, -1, null ),
113  new Among ( "onk\u00E9nt", 32, -1, null ),
114  new Among ( "ot", 29, -1, null ),
115  new Among ( "\u00E9rt", 29, -1, null ),
116  new Among ( "\u00F6t", 29, -1, null ),
117  new Among ( "hez", -1, -1, null ),
118  new Among ( "hoz", -1, -1, null ),
119  new Among ( "h\u00F6z", -1, -1, null ),
120  new Among ( "v\u00E1", -1, -1, null ),
121  new Among ( "v\u00E9", -1, -1, null )
122  };
123 
124 
125  private readonly static Among[] a_5 =
126  {
127  new Among ( "\u00E1n", -1, 2, null ),
128  new Among ( "\u00E9n", -1, 1, null ),
129  new Among ( "\u00E1nk\u00E9nt", -1, 3, null )
130  };
131 
132 
133  private readonly static Among[] a_6 =
134  {
135  new Among ( "stul", -1, 2, null ),
136  new Among ( "astul", 0, 1, null ),
137  new Among ( "\u00E1stul", 0, 3, null ),
138  new Among ( "st\u00FCl", -1, 2, null ),
139  new Among ( "est\u00FCl", 3, 1, null ),
140  new Among ( "\u00E9st\u00FCl", 3, 4, null )
141  };
142 
143 
144 
145  private readonly static Among[] a_7 =
146  {
147  new Among ( "\u00E1", -1, 1, null ),
148  new Among ( "\u00E9", -1, 2, null )
149  };
150 
151 
152  private readonly static Among[] a_8 =
153  {
154  new Among ( "k", -1, 7, null ),
155  new Among ( "ak", 0, 4, null ),
156  new Among ( "ek", 0, 6, null ),
157  new Among ( "ok", 0, 5, null ),
158  new Among ( "\u00E1k", 0, 1, null ),
159  new Among ( "\u00E9k", 0, 2, null ),
160  new Among ( "\u00F6k", 0, 3, null )
161  };
162 
163 
164  private readonly static Among[] a_9 =
165  {
166  new Among ( "\u00E9i", -1, 7, null ),
167  new Among ( "\u00E1\u00E9i", 0, 6, null ),
168  new Among ( "\u00E9\u00E9i", 0, 5, null ),
169  new Among ( "\u00E9", -1, 9, null ),
170  new Among ( "k\u00E9", 3, 4, null ),
171  new Among ( "ak\u00E9", 4, 1, null ),
172  new Among ( "ek\u00E9", 4, 1, null ),
173  new Among ( "ok\u00E9", 4, 1, null ),
174  new Among ( "\u00E1k\u00E9", 4, 3, null ),
175  new Among ( "\u00E9k\u00E9", 4, 2, null ),
176  new Among ( "\u00F6k\u00E9", 4, 1, null ),
177  new Among ( "\u00E9\u00E9", 3, 8, null )
178  };
179 
180 
181  private readonly static Among[] a_10 =
182  {
183  new Among ( "a", -1, 18, null ),
184  new Among ( "ja", 0, 17, null ),
185  new Among ( "d", -1, 16, null ),
186  new Among ( "ad", 2, 13, null ),
187  new Among ( "ed", 2, 13, null ),
188  new Among ( "od", 2, 13, null ),
189  new Among ( "\u00E1d", 2, 14, null ),
190  new Among ( "\u00E9d", 2, 15, null ),
191  new Among ( "\u00F6d", 2, 13, null ),
192  new Among ( "e", -1, 18, null ),
193  new Among ( "je", 9, 17, null ),
194  new Among ( "nk", -1, 4, null ),
195  new Among ( "unk", 11, 1, null ),
196  new Among ( "\u00E1nk", 11, 2, null ),
197  new Among ( "\u00E9nk", 11, 3, null ),
198  new Among ( "\u00FCnk", 11, 1, null ),
199  new Among ( "uk", -1, 8, null ),
200  new Among ( "juk", 16, 7, null ),
201  new Among ( "\u00E1juk", 17, 5, null ),
202  new Among ( "\u00FCk", -1, 8, null ),
203  new Among ( "j\u00FCk", 19, 7, null ),
204  new Among ( "\u00E9j\u00FCk", 20, 6, null ),
205  new Among ( "m", -1, 12, null ),
206  new Among ( "am", 22, 9, null ),
207  new Among ( "em", 22, 9, null ),
208  new Among ( "om", 22, 9, null ),
209  new Among ( "\u00E1m", 22, 10, null ),
210  new Among ( "\u00E9m", 22, 11, null ),
211  new Among ( "o", -1, 18, null ),
212  new Among ( "\u00E1", -1, 19, null ),
213  new Among ( "\u00E9", -1, 20, null )
214  };
215 
216 
217  private readonly static Among[] a_11 =
218  {
219  new Among ( "id", -1, 10, null ),
220  new Among ( "aid", 0, 9, null ),
221  new Among ( "jaid", 1, 6, null ),
222  new Among ( "eid", 0, 9, null ),
223  new Among ( "jeid", 3, 6, null ),
224  new Among ( "\u00E1id", 0, 7, null ),
225  new Among ( "\u00E9id", 0, 8, null ),
226  new Among ( "i", -1, 15, null ),
227  new Among ( "ai", 7, 14, null ),
228  new Among ( "jai", 8, 11, null ),
229  new Among ( "ei", 7, 14, null ),
230  new Among ( "jei", 10, 11, null ),
231  new Among ( "\u00E1i", 7, 12, null ),
232  new Among ( "\u00E9i", 7, 13, null ),
233  new Among ( "itek", -1, 24, null ),
234  new Among ( "eitek", 14, 21, null ),
235  new Among ( "jeitek", 15, 20, null ),
236  new Among ( "\u00E9itek", 14, 23, null ),
237  new Among ( "ik", -1, 29, null ),
238  new Among ( "aik", 18, 26, null ),
239  new Among ( "jaik", 19, 25, null ),
240  new Among ( "eik", 18, 26, null ),
241  new Among ( "jeik", 21, 25, null ),
242  new Among ( "\u00E1ik", 18, 27, null ),
243  new Among ( "\u00E9ik", 18, 28, null ),
244  new Among ( "ink", -1, 20, null ),
245  new Among ( "aink", 25, 17, null ),
246  new Among ( "jaink", 26, 16, null ),
247  new Among ( "eink", 25, 17, null ),
248  new Among ( "jeink", 28, 16, null ),
249  new Among ( "\u00E1ink", 25, 18, null ),
250  new Among ( "\u00E9ink", 25, 19, null ),
251  new Among ( "aitok", -1, 21, null ),
252  new Among ( "jaitok", 32, 20, null ),
253  new Among ( "\u00E1itok", -1, 22, null ),
254  new Among ( "im", -1, 5, null ),
255  new Among ( "aim", 35, 4, null ),
256  new Among ( "jaim", 36, 1, null ),
257  new Among ( "eim", 35, 4, null ),
258  new Among ( "jeim", 38, 1, null ),
259  new Among ( "\u00E1im", 35, 2, null ),
260  new Among ( "\u00E9im", 35, 3, null )
261  };
262 
263 
264 
265  private static readonly char[] g_v = {(char)17, (char)65, (char)16, (char)0, (char)0, (char)0, (char)0,
266  (char)0, (char)0, (char)0, (char)0, (char)0, (char)0, (char)0,
267  (char)0, (char)0, (char)1, (char)17, (char)52, (char)14 };
268 
269  private int I_p1;
270 
271 
272  private void copy_from(HungarianStemmer other)
273  {
274  I_p1 = other.I_p1;
275  base.copy_from(other);
276  }
277 
278 
279  private bool r_mark_regions()
280  {
281  bool subroot = false;
282  int v_1;
283  int v_2;
284  int v_3;
285  // (, line 44
286  I_p1 = limit;
287  // or, line 51
288  do
289  {
290  v_1 = cursor;
291  do
292  {
293  // (, line 48
294  if (!(in_grouping(g_v, 97, 252)))
295  {
296  break;
297  }
298  // goto, line 48
299  while (true)
300  {
301  v_2 = cursor;
302  do
303  {
304  if (!(out_grouping(g_v, 97, 252)))
305  {
306  break;
307  }
308  cursor = v_2;
309  subroot = true;
310  if (subroot) break;
311  } while (false);
312  if (subroot) { subroot = false; break; }
313  cursor = v_2;
314  if (cursor >= limit)
315  {
316  subroot = true;
317  break;
318  }
319  cursor++;
320  }
321  if (subroot) { subroot = false; break; }
322  // or, line 49
323  do
324  {
325  v_3 = cursor;
326  do
327  {
328  // among, line 49
329  if (find_among(a_0, 8) == 0)
330  {
331  break;
332  }
333  subroot = true;
334  if (subroot) break;
335  } while (false);
336  if (subroot) { subroot = false; break; }
337  cursor = v_3;
338  // next, line 49
339  if (cursor >= limit)
340  {
341  subroot = true;
342  break;
343  }
344  cursor++;
345  } while (false);
346  if (subroot) { subroot = false; break; }
347  // setmark p1, line 50
348  I_p1 = cursor;
349  subroot = true;
350  if (subroot) break;
351  } while (false);
352  if (subroot) { subroot = false; break; }
353  cursor = v_1;
354  // (, line 53
355  if (!(out_grouping(g_v, 97, 252)))
356  {
357  return false;
358  }
359  // gopast, line 53
360  while (true)
361  {
362  do
363  {
364  if (!(in_grouping(g_v, 97, 252)))
365  {
366  break;
367  }
368  subroot = true;
369  if (subroot) break;
370  } while (false);
371  if (subroot) { subroot = false; break; }
372  if (cursor >= limit)
373  {
374  return false;
375  }
376  cursor++;
377  }
378  // setmark p1, line 53
379  I_p1 = cursor;
380  } while (false);
381  return true;
382  }
383 
384  private bool r_R1()
385  {
386  if (!(I_p1 <= cursor))
387  {
388  return false;
389  }
390  return true;
391  }
392 
393  private bool r_v_ending()
394  {
395  int among_var;
396  // (, line 60
397  // [, line 61
398  ket = cursor;
399  // substring, line 61
400  among_var = find_among_b(a_1, 2);
401  if (among_var == 0)
402  {
403  return false;
404  }
405  // ], line 61
406  bra = cursor;
407  // call R1, line 61
408  if (!r_R1())
409  {
410  return false;
411  }
412  switch (among_var)
413  {
414  case 0:
415  return false;
416  case 1:
417  // (, line 62
418  // <-, line 62
419  slice_from("a");
420  break;
421  case 2:
422  // (, line 63
423  // <-, line 63
424  slice_from("e");
425  break;
426  }
427  return true;
428  }
429 
430  private bool r_double()
431  {
432  int v_1;
433  // (, line 67
434  // test, line 68
435  v_1 = limit - cursor;
436  // among, line 68
437  if (find_among_b(a_2, 23) == 0)
438  {
439  return false;
440  }
441  cursor = limit - v_1;
442  return true;
443  }
444 
445  private bool r_undouble()
446  {
447  // (, line 72
448  // next, line 73
449  if (cursor <= limit_backward)
450  {
451  return false;
452  }
453  cursor--;
454  // [, line 73
455  ket = cursor;
456  // hop, line 73
457  {
458  int c = cursor - 1;
459  if (limit_backward > c || c > limit)
460  {
461  return false;
462  }
463  cursor = c;
464  }
465  // ], line 73
466  bra = cursor;
467  // delete, line 73
468  slice_del();
469  return true;
470  }
471 
472  private bool r_instrum()
473  {
474  int among_var;
475  // (, line 76
476  // [, line 77
477  ket = cursor;
478  // substring, line 77
479  among_var = find_among_b(a_3, 2);
480  if (among_var == 0)
481  {
482  return false;
483  }
484  // ], line 77
485  bra = cursor;
486  // call R1, line 77
487  if (!r_R1())
488  {
489  return false;
490  }
491  switch (among_var)
492  {
493  case 0:
494  return false;
495  case 1:
496  // (, line 78
497  // call double, line 78
498  if (!r_double())
499  {
500  return false;
501  }
502  break;
503  case 2:
504  // (, line 79
505  // call double, line 79
506  if (!r_double())
507  {
508  return false;
509  }
510  break;
511  }
512  // delete, line 81
513  slice_del();
514  // call undouble, line 82
515  if (!r_undouble())
516  {
517  return false;
518  }
519  return true;
520  }
521 
522  private bool r_case()
523  {
524  // (, line 86
525  // [, line 87
526  ket = cursor;
527  // substring, line 87
528  if (find_among_b(a_4, 44) == 0)
529  {
530  return false;
531  }
532  // ], line 87
533  bra = cursor;
534  // call R1, line 87
535  if (!r_R1())
536  {
537  return false;
538  }
539  // delete, line 111
540  slice_del();
541  // call v_ending, line 112
542  if (!r_v_ending())
543  {
544  return false;
545  }
546  return true;
547  }
548 
549  private bool r_case_special()
550  {
551  int among_var;
552  // (, line 115
553  // [, line 116
554  ket = cursor;
555  // substring, line 116
556  among_var = find_among_b(a_5, 3);
557  if (among_var == 0)
558  {
559  return false;
560  }
561  // ], line 116
562  bra = cursor;
563  // call R1, line 116
564  if (!r_R1())
565  {
566  return false;
567  }
568  switch (among_var)
569  {
570  case 0:
571  return false;
572  case 1:
573  // (, line 117
574  // <-, line 117
575  slice_from("e");
576  break;
577  case 2:
578  // (, line 118
579  // <-, line 118
580  slice_from("a");
581  break;
582  case 3:
583  // (, line 119
584  // <-, line 119
585  slice_from("a");
586  break;
587  }
588  return true;
589  }
590 
591  private bool r_case_other()
592  {
593  int among_var;
594  // (, line 123
595  // [, line 124
596  ket = cursor;
597  // substring, line 124
598  among_var = find_among_b(a_6, 6);
599  if (among_var == 0)
600  {
601  return false;
602  }
603  // ], line 124
604  bra = cursor;
605  // call R1, line 124
606  if (!r_R1())
607  {
608  return false;
609  }
610  switch (among_var)
611  {
612  case 0:
613  return false;
614  case 1:
615  // (, line 125
616  // delete, line 125
617  slice_del();
618  break;
619  case 2:
620  // (, line 126
621  // delete, line 126
622  slice_del();
623  break;
624  case 3:
625  // (, line 127
626  // <-, line 127
627  slice_from("a");
628  break;
629  case 4:
630  // (, line 128
631  // <-, line 128
632  slice_from("e");
633  break;
634  }
635  return true;
636  }
637 
638  private bool r_factive()
639  {
640  int among_var;
641  // (, line 132
642  // [, line 133
643  ket = cursor;
644  // substring, line 133
645  among_var = find_among_b(a_7, 2);
646  if (among_var == 0)
647  {
648  return false;
649  }
650  // ], line 133
651  bra = cursor;
652  // call R1, line 133
653  if (!r_R1())
654  {
655  return false;
656  }
657  switch (among_var)
658  {
659  case 0:
660  return false;
661  case 1:
662  // (, line 134
663  // call double, line 134
664  if (!r_double())
665  {
666  return false;
667  }
668  break;
669  case 2:
670  // (, line 135
671  // call double, line 135
672  if (!r_double())
673  {
674  return false;
675  }
676  break;
677  }
678  // delete, line 137
679  slice_del();
680  // call undouble, line 138
681  if (!r_undouble())
682  {
683  return false;
684  }
685  return true;
686  }
687 
688  private bool r_plural()
689  {
690  int among_var;
691  // (, line 141
692  // [, line 142
693  ket = cursor;
694  // substring, line 142
695  among_var = find_among_b(a_8, 7);
696  if (among_var == 0)
697  {
698  return false;
699  }
700  // ], line 142
701  bra = cursor;
702  // call R1, line 142
703  if (!r_R1())
704  {
705  return false;
706  }
707  switch (among_var)
708  {
709  case 0:
710  return false;
711  case 1:
712  // (, line 143
713  // <-, line 143
714  slice_from("a");
715  break;
716  case 2:
717  // (, line 144
718  // <-, line 144
719  slice_from("e");
720  break;
721  case 3:
722  // (, line 145
723  // delete, line 145
724  slice_del();
725  break;
726  case 4:
727  // (, line 146
728  // delete, line 146
729  slice_del();
730  break;
731  case 5:
732  // (, line 147
733  // delete, line 147
734  slice_del();
735  break;
736  case 6:
737  // (, line 148
738  // delete, line 148
739  slice_del();
740  break;
741  case 7:
742  // (, line 149
743  // delete, line 149
744  slice_del();
745  break;
746  }
747  return true;
748  }
749 
750  private bool r_owned()
751  {
752  int among_var;
753  // (, line 153
754  // [, line 154
755  ket = cursor;
756  // substring, line 154
757  among_var = find_among_b(a_9, 12);
758  if (among_var == 0)
759  {
760  return false;
761  }
762  // ], line 154
763  bra = cursor;
764  // call R1, line 154
765  if (!r_R1())
766  {
767  return false;
768  }
769  switch (among_var)
770  {
771  case 0:
772  return false;
773  case 1:
774  // (, line 155
775  // delete, line 155
776  slice_del();
777  break;
778  case 2:
779  // (, line 156
780  // <-, line 156
781  slice_from("e");
782  break;
783  case 3:
784  // (, line 157
785  // <-, line 157
786  slice_from("a");
787  break;
788  case 4:
789  // (, line 158
790  // delete, line 158
791  slice_del();
792  break;
793  case 5:
794  // (, line 159
795  // <-, line 159
796  slice_from("e");
797  break;
798  case 6:
799  // (, line 160
800  // <-, line 160
801  slice_from("a");
802  break;
803  case 7:
804  // (, line 161
805  // delete, line 161
806  slice_del();
807  break;
808  case 8:
809  // (, line 162
810  // <-, line 162
811  slice_from("e");
812  break;
813  case 9:
814  // (, line 163
815  // delete, line 163
816  slice_del();
817  break;
818  }
819  return true;
820  }
821 
822  private bool r_sing_owner()
823  {
824  int among_var;
825  // (, line 167
826  // [, line 168
827  ket = cursor;
828  // substring, line 168
829  among_var = find_among_b(a_10, 31);
830  if (among_var == 0)
831  {
832  return false;
833  }
834  // ], line 168
835  bra = cursor;
836  // call R1, line 168
837  if (!r_R1())
838  {
839  return false;
840  }
841  switch (among_var)
842  {
843  case 0:
844  return false;
845  case 1:
846  // (, line 169
847  // delete, line 169
848  slice_del();
849  break;
850  case 2:
851  // (, line 170
852  // <-, line 170
853  slice_from("a");
854  break;
855  case 3:
856  // (, line 171
857  // <-, line 171
858  slice_from("e");
859  break;
860  case 4:
861  // (, line 172
862  // delete, line 172
863  slice_del();
864  break;
865  case 5:
866  // (, line 173
867  // <-, line 173
868  slice_from("a");
869  break;
870  case 6:
871  // (, line 174
872  // <-, line 174
873  slice_from("e");
874  break;
875  case 7:
876  // (, line 175
877  // delete, line 175
878  slice_del();
879  break;
880  case 8:
881  // (, line 176
882  // delete, line 176
883  slice_del();
884  break;
885  case 9:
886  // (, line 177
887  // delete, line 177
888  slice_del();
889  break;
890  case 10:
891  // (, line 178
892  // <-, line 178
893  slice_from("a");
894  break;
895  case 11:
896  // (, line 179
897  // <-, line 179
898  slice_from("e");
899  break;
900  case 12:
901  // (, line 180
902  // delete, line 180
903  slice_del();
904  break;
905  case 13:
906  // (, line 181
907  // delete, line 181
908  slice_del();
909  break;
910  case 14:
911  // (, line 182
912  // <-, line 182
913  slice_from("a");
914  break;
915  case 15:
916  // (, line 183
917  // <-, line 183
918  slice_from("e");
919  break;
920  case 16:
921  // (, line 184
922  // delete, line 184
923  slice_del();
924  break;
925  case 17:
926  // (, line 185
927  // delete, line 185
928  slice_del();
929  break;
930  case 18:
931  // (, line 186
932  // delete, line 186
933  slice_del();
934  break;
935  case 19:
936  // (, line 187
937  // <-, line 187
938  slice_from("a");
939  break;
940  case 20:
941  // (, line 188
942  // <-, line 188
943  slice_from("e");
944  break;
945  }
946  return true;
947  }
948 
949  private bool r_plur_owner()
950  {
951  int among_var;
952  // (, line 192
953  // [, line 193
954  ket = cursor;
955  // substring, line 193
956  among_var = find_among_b(a_11, 42);
957  if (among_var == 0)
958  {
959  return false;
960  }
961  // ], line 193
962  bra = cursor;
963  // call R1, line 193
964  if (!r_R1())
965  {
966  return false;
967  }
968  switch (among_var)
969  {
970  case 0:
971  return false;
972  case 1:
973  // (, line 194
974  // delete, line 194
975  slice_del();
976  break;
977  case 2:
978  // (, line 195
979  // <-, line 195
980  slice_from("a");
981  break;
982  case 3:
983  // (, line 196
984  // <-, line 196
985  slice_from("e");
986  break;
987  case 4:
988  // (, line 197
989  // delete, line 197
990  slice_del();
991  break;
992  case 5:
993  // (, line 198
994  // delete, line 198
995  slice_del();
996  break;
997  case 6:
998  // (, line 199
999  // delete, line 199
1000  slice_del();
1001  break;
1002  case 7:
1003  // (, line 200
1004  // <-, line 200
1005  slice_from("a");
1006  break;
1007  case 8:
1008  // (, line 201
1009  // <-, line 201
1010  slice_from("e");
1011  break;
1012  case 9:
1013  // (, line 202
1014  // delete, line 202
1015  slice_del();
1016  break;
1017  case 10:
1018  // (, line 203
1019  // delete, line 203
1020  slice_del();
1021  break;
1022  case 11:
1023  // (, line 204
1024  // delete, line 204
1025  slice_del();
1026  break;
1027  case 12:
1028  // (, line 205
1029  // <-, line 205
1030  slice_from("a");
1031  break;
1032  case 13:
1033  // (, line 206
1034  // <-, line 206
1035  slice_from("e");
1036  break;
1037  case 14:
1038  // (, line 207
1039  // delete, line 207
1040  slice_del();
1041  break;
1042  case 15:
1043  // (, line 208
1044  // delete, line 208
1045  slice_del();
1046  break;
1047  case 16:
1048  // (, line 209
1049  // delete, line 209
1050  slice_del();
1051  break;
1052  case 17:
1053  // (, line 210
1054  // delete, line 210
1055  slice_del();
1056  break;
1057  case 18:
1058  // (, line 211
1059  // <-, line 211
1060  slice_from("a");
1061  break;
1062  case 19:
1063  // (, line 212
1064  // <-, line 212
1065  slice_from("e");
1066  break;
1067  case 20:
1068  // (, line 214
1069  // delete, line 214
1070  slice_del();
1071  break;
1072  case 21:
1073  // (, line 215
1074  // delete, line 215
1075  slice_del();
1076  break;
1077  case 22:
1078  // (, line 216
1079  // <-, line 216
1080  slice_from("a");
1081  break;
1082  case 23:
1083  // (, line 217
1084  // <-, line 217
1085  slice_from("e");
1086  break;
1087  case 24:
1088  // (, line 218
1089  // delete, line 218
1090  slice_del();
1091  break;
1092  case 25:
1093  // (, line 219
1094  // delete, line 219
1095  slice_del();
1096  break;
1097  case 26:
1098  // (, line 220
1099  // delete, line 220
1100  slice_del();
1101  break;
1102  case 27:
1103  // (, line 221
1104  // <-, line 221
1105  slice_from("a");
1106  break;
1107  case 28:
1108  // (, line 222
1109  // <-, line 222
1110  slice_from("e");
1111  break;
1112  case 29:
1113  // (, line 223
1114  // delete, line 223
1115  slice_del();
1116  break;
1117  }
1118  return true;
1119  }
1120 
1125  public bool CanStem()
1126  {
1127  int v_1;
1128  int v_2;
1129  int v_3;
1130  int v_4;
1131  int v_5;
1132  int v_6;
1133  int v_7;
1134  int v_8;
1135  int v_9;
1136  int v_10;
1137  // (, line 228
1138  // do, line 229
1139  v_1 = cursor;
1140  do
1141  {
1142  // call mark_regions, line 229
1143  if (!r_mark_regions())
1144  {
1145  break;
1146  }
1147  } while (false);
1148  cursor = v_1;
1149  // backwards, line 230
1150  limit_backward = cursor; cursor = limit;
1151  // (, line 230
1152  // do, line 231
1153  v_2 = limit - cursor;
1154  do
1155  {
1156  // call instrum, line 231
1157  if (!r_instrum())
1158  {
1159  break;
1160  }
1161  } while (false);
1162  cursor = limit - v_2;
1163  // do, line 232
1164  v_3 = limit - cursor;
1165  do
1166  {
1167  // call case, line 232
1168  if (!r_case())
1169  {
1170  // break lab2;
1171  break;
1172  }
1173  } while (false);
1174  cursor = limit - v_3;
1175  // do, line 233
1176  v_4 = limit - cursor;
1177  do
1178  {
1179  // call case_special, line 233
1180  if (!r_case_special())
1181  {
1182  // break lab3;
1183  break;
1184  }
1185  } while (false);
1186  cursor = limit - v_4;
1187  // do, line 234
1188  v_5 = limit - cursor;
1189  do
1190  {
1191  // call case_other, line 234
1192  if (!r_case_other())
1193  {
1194  break;
1195  }
1196  } while (false);
1197  cursor = limit - v_5;
1198  // do, line 235
1199  v_6 = limit - cursor;
1200  do
1201  {
1202  // call factive, line 235
1203  if (!r_factive())
1204  {
1205  break;
1206  }
1207  } while (false);
1208  cursor = limit - v_6;
1209  // do, line 236
1210  v_7 = limit - cursor;
1211  do
1212  {
1213  // call owned, line 236
1214  if (!r_owned())
1215  {
1216  break;
1217  }
1218  } while (false);
1219  cursor = limit - v_7;
1220  // do, line 237
1221  v_8 = limit - cursor;
1222  do
1223  {
1224  // call sing_owner, line 237
1225  if (!r_sing_owner())
1226  {
1227  break;
1228  }
1229  } while (false);
1230  cursor = limit - v_8;
1231  // do, line 238
1232  v_9 = limit - cursor;
1233  do
1234  {
1235  // call plur_owner, line 238
1236  if (!r_plur_owner())
1237  {
1238  break;
1239  }
1240  } while (false);
1241  cursor = limit - v_9;
1242  // do, line 239
1243  v_10 = limit - cursor;
1244  do
1245  {
1246  // call plural, line 239
1247  if (!r_plural())
1248  {
1249  break;
1250  }
1251  } while (false);
1252  cursor = limit - v_10;
1253  cursor = limit_backward; return true;
1254  }
1255 
1261  public string Stem(string s)
1262  {
1263  this.setCurrent(s.ToLowerInvariant());
1264  this.CanStem();
1265  return this.getCurrent();
1266  }
1267 
1268  }
1269 }