TraceLab Component Library
 All Classes Namespaces Files Functions Variables Enumerations Enumerator Properties
SpanishStemmer.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 SpanishStemmer methodObject = new SpanishStemmer();
20 
21 
22  private readonly static Among[] a_0 =
23  {
24  new Among ( "", -1, 6, null ),
25  new Among ( "\u00E1", 0, 1, null ),
26  new Among ( "\u00E9", 0, 2, null ),
27  new Among ( "\u00ED", 0, 3, null ),
28  new Among ( "\u00F3", 0, 4, null ),
29  new Among ( "\u00FA", 0, 5, null )
30  };
31 
32 
33  private readonly static Among[] a_1 =
34  {
35  new Among ( "la", -1, -1, null ),
36  new Among ( "sela", 0, -1, null ),
37  new Among ( "le", -1, -1, null ),
38  new Among ( "me", -1, -1, null ),
39  new Among ( "se", -1, -1, null ),
40  new Among ( "lo", -1, -1, null ),
41  new Among ( "selo", 5, -1, null ),
42  new Among ( "las", -1, -1, null ),
43  new Among ( "selas", 7, -1, null ),
44  new Among ( "les", -1, -1, null ),
45  new Among ( "los", -1, -1, null ),
46  new Among ( "selos", 10, -1, null ),
47  new Among ( "nos", -1, -1, null )
48  };
49 
50 
51  private readonly static Among[] a_2 =
52  {
53  new Among ( "ando", -1, 6, null ),
54  new Among ( "iendo", -1, 6, null ),
55  new Among ( "yendo", -1, 7, null ),
56  new Among ( "\u00E1ndo", -1, 2, null ),
57  new Among ( "i\u00E9ndo", -1, 1, null ),
58  new Among ( "ar", -1, 6, null ),
59  new Among ( "er", -1, 6, null ),
60  new Among ( "ir", -1, 6, null ),
61  new Among ( "\u00E1r", -1, 3, null ),
62  new Among ( "\u00E9r", -1, 4, null ),
63  new Among ( "\u00EDr", -1, 5, null )
64  };
65 
66 
67  private readonly static Among[] a_3 =
68  {
69  new Among ( "ic", -1, -1, null ),
70  new Among ( "ad", -1, -1, null ),
71  new Among ( "os", -1, -1, null ),
72  new Among ( "iv", -1, 1, null )
73  };
74 
75 
76  private readonly static Among[] a_4 =
77  {
78  new Among ( "able", -1, 1, null ),
79  new Among ( "ible", -1, 1, null ),
80  new Among ( "ante", -1, 1, null )
81  };
82 
83 
84  private readonly static Among[] a_5 =
85  {
86  new Among ( "ic", -1, 1, null ),
87  new Among ( "abil", -1, 1, null ),
88  new Among ( "iv", -1, 1, null )
89  };
90 
91 
92  private readonly static Among[] a_6 =
93  {
94  new Among ( "ica", -1, 1, null ),
95  new Among ( "ancia", -1, 2, null ),
96  new Among ( "encia", -1, 5, null ),
97  new Among ( "adora", -1, 2, null ),
98  new Among ( "osa", -1, 1, null ),
99  new Among ( "ista", -1, 1, null ),
100  new Among ( "iva", -1, 9, null ),
101  new Among ( "anza", -1, 1, null ),
102  new Among ( "log\u00EDa", -1, 3, null ),
103  new Among ( "idad", -1, 8, null ),
104  new Among ( "able", -1, 1, null ),
105  new Among ( "ible", -1, 1, null ),
106  new Among ( "ante", -1, 2, null ),
107  new Among ( "mente", -1, 7, null ),
108  new Among ( "amente", 13, 6, null ),
109  new Among ( "aci\u00F3n", -1, 2, null ),
110  new Among ( "uci\u00F3n", -1, 4, null ),
111  new Among ( "ico", -1, 1, null ),
112  new Among ( "ismo", -1, 1, null ),
113  new Among ( "oso", -1, 1, null ),
114  new Among ( "amiento", -1, 1, null ),
115  new Among ( "imiento", -1, 1, null ),
116  new Among ( "ivo", -1, 9, null ),
117  new Among ( "ador", -1, 2, null ),
118  new Among ( "icas", -1, 1, null ),
119  new Among ( "ancias", -1, 2, null ),
120  new Among ( "encias", -1, 5, null ),
121  new Among ( "adoras", -1, 2, null ),
122  new Among ( "osas", -1, 1, null ),
123  new Among ( "istas", -1, 1, null ),
124  new Among ( "ivas", -1, 9, null ),
125  new Among ( "anzas", -1, 1, null ),
126  new Among ( "log\u00EDas", -1, 3, null ),
127  new Among ( "idades", -1, 8, null ),
128  new Among ( "ables", -1, 1, null ),
129  new Among ( "ibles", -1, 1, null ),
130  new Among ( "aciones", -1, 2, null ),
131  new Among ( "uciones", -1, 4, null ),
132  new Among ( "adores", -1, 2, null ),
133  new Among ( "antes", -1, 2, null ),
134  new Among ( "icos", -1, 1, null ),
135  new Among ( "ismos", -1, 1, null ),
136  new Among ( "osos", -1, 1, null ),
137  new Among ( "amientos", -1, 1, null ),
138  new Among ( "imientos", -1, 1, null ),
139  new Among ( "ivos", -1, 9, null )
140  };
141 
142 
143 
144  private readonly static Among[] a_7 =
145  {
146  new Among ( "ya", -1, 1, null ),
147  new Among ( "ye", -1, 1, null ),
148  new Among ( "yan", -1, 1, null ),
149  new Among ( "yen", -1, 1, null ),
150  new Among ( "yeron", -1, 1, null ),
151  new Among ( "yendo", -1, 1, null ),
152  new Among ( "yo", -1, 1, null ),
153  new Among ( "yas", -1, 1, null ),
154  new Among ( "yes", -1, 1, null ),
155  new Among ( "yais", -1, 1, null ),
156  new Among ( "yamos", -1, 1, null ),
157  new Among ( "y\u00F3", -1, 1, null )
158  };
159 
160 
161 
162  private readonly static Among[] a_8 =
163  {
164  new Among ( "aba", -1, 2, null ),
165  new Among ( "ada", -1, 2, null ),
166  new Among ( "ida", -1, 2, null ),
167  new Among ( "ara", -1, 2, null ),
168  new Among ( "iera", -1, 2, null ),
169  new Among ( "\u00EDa", -1, 2, null ),
170  new Among ( "ar\u00EDa", 5, 2, null ),
171  new Among ( "er\u00EDa", 5, 2, null ),
172  new Among ( "ir\u00EDa", 5, 2, null ),
173  new Among ( "ad", -1, 2, null ),
174  new Among ( "ed", -1, 2, null ),
175  new Among ( "id", -1, 2, null ),
176  new Among ( "ase", -1, 2, null ),
177  new Among ( "iese", -1, 2, null ),
178  new Among ( "aste", -1, 2, null ),
179  new Among ( "iste", -1, 2, null ),
180  new Among ( "an", -1, 2, null ),
181  new Among ( "aban", 16, 2, null ),
182  new Among ( "aran", 16, 2, null ),
183  new Among ( "ieran", 16, 2, null ),
184  new Among ( "\u00EDan", 16, 2, null ),
185  new Among ( "ar\u00EDan", 20, 2, null ),
186  new Among ( "er\u00EDan", 20, 2, null ),
187  new Among ( "ir\u00EDan", 20, 2, null ),
188  new Among ( "en", -1, 1, null ),
189  new Among ( "asen", 24, 2, null ),
190  new Among ( "iesen", 24, 2, null ),
191  new Among ( "aron", -1, 2, null ),
192  new Among ( "ieron", -1, 2, null ),
193  new Among ( "ar\u00E1n", -1, 2, null ),
194  new Among ( "er\u00E1n", -1, 2, null ),
195  new Among ( "ir\u00E1n", -1, 2, null ),
196  new Among ( "ado", -1, 2, null ),
197  new Among ( "ido", -1, 2, null ),
198  new Among ( "ando", -1, 2, null ),
199  new Among ( "iendo", -1, 2, null ),
200  new Among ( "ar", -1, 2, null ),
201  new Among ( "er", -1, 2, null ),
202  new Among ( "ir", -1, 2, null ),
203  new Among ( "as", -1, 2, null ),
204  new Among ( "abas", 39, 2, null ),
205  new Among ( "adas", 39, 2, null ),
206  new Among ( "idas", 39, 2, null ),
207  new Among ( "aras", 39, 2, null ),
208  new Among ( "ieras", 39, 2, null ),
209  new Among ( "\u00EDas", 39, 2, null ),
210  new Among ( "ar\u00EDas", 45, 2, null ),
211  new Among ( "er\u00EDas", 45, 2, null ),
212  new Among ( "ir\u00EDas", 45, 2, null ),
213  new Among ( "es", -1, 1, null ),
214  new Among ( "ases", 49, 2, null ),
215  new Among ( "ieses", 49, 2, null ),
216  new Among ( "abais", -1, 2, null ),
217  new Among ( "arais", -1, 2, null ),
218  new Among ( "ierais", -1, 2, null ),
219  new Among ( "\u00EDais", -1, 2, null ),
220  new Among ( "ar\u00EDais", 55, 2, null ),
221  new Among ( "er\u00EDais", 55, 2, null ),
222  new Among ( "ir\u00EDais", 55, 2, null ),
223  new Among ( "aseis", -1, 2, null ),
224  new Among ( "ieseis", -1, 2, null ),
225  new Among ( "asteis", -1, 2, null ),
226  new Among ( "isteis", -1, 2, null ),
227  new Among ( "\u00E1is", -1, 2, null ),
228  new Among ( "\u00E9is", -1, 1, null ),
229  new Among ( "ar\u00E9is", 64, 2, null ),
230  new Among ( "er\u00E9is", 64, 2, null ),
231  new Among ( "ir\u00E9is", 64, 2, null ),
232  new Among ( "ados", -1, 2, null ),
233  new Among ( "idos", -1, 2, null ),
234  new Among ( "amos", -1, 2, null ),
235  new Among ( "\u00E1bamos", 70, 2, null ),
236  new Among ( "\u00E1ramos", 70, 2, null ),
237  new Among ( "i\u00E9ramos", 70, 2, null ),
238  new Among ( "\u00EDamos", 70, 2, null ),
239  new Among ( "ar\u00EDamos", 74, 2, null ),
240  new Among ( "er\u00EDamos", 74, 2, null ),
241  new Among ( "ir\u00EDamos", 74, 2, null ),
242  new Among ( "emos", -1, 1, null ),
243  new Among ( "aremos", 78, 2, null ),
244  new Among ( "eremos", 78, 2, null ),
245  new Among ( "iremos", 78, 2, null ),
246  new Among ( "\u00E1semos", 78, 2, null ),
247  new Among ( "i\u00E9semos", 78, 2, null ),
248  new Among ( "imos", -1, 2, null ),
249  new Among ( "ar\u00E1s", -1, 2, null ),
250  new Among ( "er\u00E1s", -1, 2, null ),
251  new Among ( "ir\u00E1s", -1, 2, null ),
252  new Among ( "\u00EDs", -1, 2, null ),
253  new Among ( "ar\u00E1", -1, 2, null ),
254  new Among ( "er\u00E1", -1, 2, null ),
255  new Among ( "ir\u00E1", -1, 2, null ),
256  new Among ( "ar\u00E9", -1, 2, null ),
257  new Among ( "er\u00E9", -1, 2, null ),
258  new Among ( "ir\u00E9", -1, 2, null ),
259  new Among ( "i\u00F3", -1, 2, null )
260  };
261 
262 
263 
264  private readonly static Among[] a_9 =
265  {
266  new Among ( "a", -1, 1, null ),
267  new Among ( "e", -1, 2, null ),
268  new Among ( "o", -1, 1, null ),
269  new Among ( "os", -1, 1, null ),
270  new Among ( "\u00E1", -1, 1, null ),
271  new Among ( "\u00E9", -1, 2, null ),
272  new Among ( "\u00ED", -1, 1, null ),
273  new Among ( "\u00F3", -1, 1, null )
274  };
275 
276 
277  private static readonly char[] g_v = { (char)17, (char)65, (char)16, (char)0, (char)0, (char)0, (char)0,
278  (char)0, (char)0, (char)0, (char)0, (char)0, (char)0, (char)0,
279  (char)0,(char)0, (char)1, (char)17, (char)4, (char)10 };
280 
281  private int I_p2;
282  private int I_p1;
283  private int I_pV;
284 
285 
286  private void copy_from(SpanishStemmer other)
287  {
288  I_p2 = other.I_p2;
289  I_p1 = other.I_p1;
290  I_pV = other.I_pV;
291  base.copy_from(other);
292  }
293 
294 
295  private bool r_mark_regions()
296  {
297 
298  bool subroot = false;
299  int v_1;
300  int v_2;
301  int v_3;
302  int v_6;
303  int v_8;
304  // (, line 31
305  I_pV = limit;
306  I_p1 = limit;
307  I_p2 = limit;
308  // do, line 37
309  v_1 = cursor;
310  do
311  {
312  // (, line 37
313  // or, line 39
314  do
315  {
316  v_2 = cursor;
317  do
318  {
319  // (, line 38
320  if (!(in_grouping(g_v, 97, 252)))
321  {
322  break;
323  }
324  // or, line 38
325  do
326  {
327  v_3 = cursor;
328  do
329  {
330  // (, line 38
331  if (!(out_grouping(g_v, 97, 252)))
332  {
333  break;
334  }
335  // gopast, line 38
336  while (true)
337  {
338  do
339  {
340  if (!(in_grouping(g_v, 97, 252)))
341  {
342  break;
343  }
344  subroot = true;
345  if (subroot) break;
346  } while (false);
347  if (subroot) { subroot = false; break; }
348  if (cursor >= limit)
349  {
350  subroot = true;
351  break;
352  }
353  cursor++;
354  }
355  if (subroot) { subroot = false; break; }
356  subroot = true;
357  if (subroot) break;
358  } while (false);
359  if (subroot) { subroot = false; break; }
360  cursor = v_3;
361  // (, line 38
362  if (!(in_grouping(g_v, 97, 252)))
363  {
364  subroot = true;
365  goto breaklab2;
366  }
367  // gopast, line 38
368  while (true)
369  {
370  do
371  {
372  if (!(out_grouping(g_v, 97, 252)))
373  {
374  break;
375  }
376  subroot = true;
377  if (subroot) break;
378  } while (false);
379  if (subroot) { subroot = false; break; }
380  if (cursor >= limit)
381  {
382  subroot = true;
383  goto breaklab2;
384  }
385  cursor++;
386  }
387  } while (false);
388  breaklab2: if (subroot) { subroot = false; break; }
389  subroot = true;
390  if (subroot) break;
391  } while (false);
392  if (subroot) { subroot = false; break; }
393  cursor = v_2;
394  // (, line 40
395  if (!(out_grouping(g_v, 97, 252)))
396  {
397  subroot = true;
398  goto breaklab0;
399  }
400  // or, line 40
401  do
402  {
403  v_6 = cursor;
404  do
405  {
406  // (, line 40
407  if (!(out_grouping(g_v, 97, 252)))
408  {
409  break;
410  }
411  // gopast, line 40
412  while (true)
413  {
414  do
415  {
416  if (!(in_grouping(g_v, 97, 252)))
417  {
418  break;
419  }
420  subroot = true;
421  if (subroot) break;
422  } while (false);
423  if (subroot) { subroot = false; break; }
424  if (cursor >= limit)
425  {
426  subroot = true;
427  break;
428  }
429  cursor++;
430  }
431  if (subroot) { subroot = false; break; }
432  subroot = true;
433  if (subroot) break;
434  } while (false);
435  if (subroot) { subroot = false; break; }
436  cursor = v_6;
437  // (, line 40
438  if (!(in_grouping(g_v, 97, 252)))
439  {
440  subroot = true;
441  goto breaklab0;
442  }
443  // next, line 40
444  if (cursor >= limit)
445  {
446  subroot = true;
447  goto breaklab0;
448  }
449  cursor++;
450  } while (false);
451  } while (false);
452  breaklab0: if (subroot) { subroot = false; break; }
453  // setmark pV, line 41
454  I_pV = cursor;
455  } while (false);
456  cursor = v_1;
457  // do, line 43
458  v_8 = cursor;
459  do
460  {
461  // (, line 43
462  // gopast, line 44
463  while (true)
464  {
465  do
466  {
467  if (!(in_grouping(g_v, 97, 252)))
468  {
469  break;
470  }
471  subroot = true;
472  if (subroot) break;
473  } while (false);
474  if (subroot) { subroot = false; break; }
475  if (cursor >= limit)
476  {
477  subroot = true;
478  break;
479  }
480  cursor++;
481  }
482  if (subroot) { subroot = false; break; }
483  // gopast, line 44
484  while (true)
485  {
486  do
487  {
488  if (!(out_grouping(g_v, 97, 252)))
489  {
490  break;
491  }
492  subroot = true;
493  if (subroot) break;
494  } while (false);
495  if (subroot) { subroot = false; break; }
496  if (cursor >= limit)
497  {
498  subroot = true;
499  break;
500  }
501  cursor++;
502  }
503  if (subroot) { subroot = false; break; }
504  // setmark p1, line 44
505  I_p1 = cursor;
506  // gopast, line 45
507  while (true)
508  {
509  do
510  {
511  if (!(in_grouping(g_v, 97, 252)))
512  {
513  break;
514  }
515  subroot = true;
516  if (subroot) break;
517  } while (false);
518  if (subroot) { subroot = false; break; }
519  if (cursor >= limit)
520  {
521  subroot = true;
522  break;
523  }
524  cursor++;
525  }
526  if (subroot) { subroot = false; break; }
527  // gopast, line 45
528  while (true)
529  {
530  do
531  {
532  if (!(out_grouping(g_v, 97, 252)))
533  {
534  break;
535  }
536  subroot = true;
537  if (subroot) break;
538  } while (false);
539  if (subroot) { subroot = false; break; }
540  if (cursor >= limit)
541  {
542  subroot = true;
543  break;
544  }
545  cursor++;
546  }
547  if (subroot) { subroot = false; break; }
548  // setmark p2, line 45
549  I_p2 = cursor;
550  } while (false);
551  cursor = v_8;
552  return true;
553  }
554 
555 
556  private bool r_postlude()
557  {
558  bool subroot = false;
559  int among_var;
560  int v_1;
561  // repeat, line 49
562  replab0: while (true)
563  {
564  v_1 = cursor;
565  do
566  {
567  // (, line 49
568  // [, line 50
569  bra = cursor;
570  // substring, line 50
571  among_var = find_among(a_0, 6);
572  if (among_var == 0)
573  {
574  break;
575  }
576  // ], line 50
577  ket = cursor;
578  switch (among_var)
579  {
580  case 0:
581  subroot = true;
582  break;
583  case 1:
584  // (, line 51
585  // <-, line 51
586  slice_from("a");
587  break;
588  case 2:
589  // (, line 52
590  // <-, line 52
591  slice_from("e");
592  break;
593  case 3:
594  // (, line 53
595  // <-, line 53
596  slice_from("i");
597  break;
598  case 4:
599  // (, line 54
600  // <-, line 54
601  slice_from("o");
602  break;
603  case 5:
604  // (, line 55
605  // <-, line 55
606  slice_from("u");
607  break;
608  case 6:
609  // (, line 57
610  // next, line 57
611  if (cursor >= limit)
612  {
613  subroot = true;
614  break;
615  }
616  cursor++;
617  break;
618  }
619  if (subroot) { subroot = false; break; }
620  else if (!subroot)
621  {
622  goto replab0;
623  }
624  } while (false);
625  cursor = v_1;
626  break;
627  }
628  return true;
629  }
630 
631 
632  private bool r_RV()
633  {
634  if (!(I_pV <= cursor))
635  {
636  return false;
637  }
638  return true;
639  }
640 
641 
642  private bool r_R1()
643  {
644  if (!(I_p1 <= cursor))
645  {
646  return false;
647  }
648  return true;
649  }
650 
651 
652  private bool r_R2()
653  {
654  if (!(I_p2 <= cursor))
655  {
656  return false;
657  }
658  return true;
659  }
660 
661 
662  private bool r_attached_pronoun()
663  {
664 
665  int among_var;
666  // (, line 67
667  // [, line 68
668  ket = cursor;
669  // substring, line 68
670  if (find_among_b(a_1, 13) == 0)
671  {
672  return false;
673  }
674  // ], line 68
675  bra = cursor;
676  // substring, line 72
677  among_var = find_among_b(a_2, 11);
678  if (among_var == 0)
679  {
680  return false;
681  }
682  // call RV, line 72
683  if (!r_RV())
684  {
685  return false;
686  }
687  switch (among_var)
688  {
689  case 0:
690  return false;
691  case 1:
692  // (, line 73
693  // ], line 73
694  bra = cursor;
695  // <-, line 73
696  slice_from("iendo");
697  break;
698  case 2:
699  // (, line 74
700  // ], line 74
701  bra = cursor;
702  // <-, line 74
703  slice_from("ando");
704  break;
705  case 3:
706  // (, line 75
707  // ], line 75
708  bra = cursor;
709  // <-, line 75
710  slice_from("ar");
711  break;
712  case 4:
713  // (, line 76
714  // ], line 76
715  bra = cursor;
716  // <-, line 76
717  slice_from("er");
718  break;
719  case 5:
720  // (, line 77
721  // ], line 77
722  bra = cursor;
723  // <-, line 77
724  slice_from("ir");
725  break;
726  case 6:
727  // (, line 81
728  // delete, line 81
729  slice_del();
730  break;
731  case 7:
732  // (, line 82
733  // literal, line 82
734  if (!(eq_s_b(1, "u")))
735  {
736  return false;
737  }
738  // delete, line 82
739  slice_del();
740  break;
741  }
742  return true;
743  }
744 
745 
746  private bool r_standard_suffix()
747  {
748  bool subroot = false;
749  int among_var;
750  int v_1;
751  int v_2;
752  int v_3;
753  int v_4;
754  int v_5;
755  // (, line 86
756  // [, line 87
757  ket = cursor;
758  // substring, line 87
759  among_var = find_among_b(a_6, 46);
760  if (among_var == 0)
761  {
762  return false;
763  }
764  // ], line 87
765  bra = cursor;
766  switch (among_var)
767  {
768  case 0:
769  return false;
770  case 1:
771  // (, line 98
772  // call R2, line 99
773  if (!r_R2())
774  {
775  return false;
776  }
777  // delete, line 99
778  slice_del();
779  break;
780  case 2:
781  // (, line 104
782  // call R2, line 105
783  if (!r_R2())
784  {
785  return false;
786  }
787  // delete, line 105
788  slice_del();
789  // try, line 106
790  v_1 = limit - cursor;
791  do
792  {
793  // (, line 106
794  // [, line 106
795  ket = cursor;
796  // literal, line 106
797  if (!(eq_s_b(2, "ic")))
798  {
799  cursor = limit - v_1;
800  break;
801  }
802  // ], line 106
803  bra = cursor;
804  // call R2, line 106
805  if (!r_R2())
806  {
807  cursor = limit - v_1;
808  break;
809  }
810  // delete, line 106
811  slice_del();
812  } while (false);
813  break;
814  case 3:
815  // (, line 110
816  // call R2, line 111
817  if (!r_R2())
818  {
819  return false;
820  }
821  // <-, line 111
822  slice_from("log");
823  break;
824  case 4:
825  // (, line 114
826  // call R2, line 115
827  if (!r_R2())
828  {
829  return false;
830  }
831  // <-, line 115
832  slice_from("u");
833  break;
834  case 5:
835  // (, line 118
836  // call R2, line 119
837  if (!r_R2())
838  {
839  return false;
840  }
841  // <-, line 119
842  slice_from("ente");
843  break;
844  case 6:
845  // (, line 122
846  // call R1, line 123
847  if (!r_R1())
848  {
849  return false;
850  }
851  // delete, line 123
852  slice_del();
853  // try, line 124
854  v_2 = limit - cursor;
855  do
856  {
857  // (, line 124
858  // [, line 125
859  ket = cursor;
860  // substring, line 125
861  among_var = find_among_b(a_3, 4);
862  if (among_var == 0)
863  {
864  cursor = limit - v_2;
865  break;
866  }
867  // ], line 125
868  bra = cursor;
869  // call R2, line 125
870  if (!r_R2())
871  {
872  cursor = limit - v_2;
873  break;
874  }
875  // delete, line 125
876  slice_del();
877  switch (among_var)
878  {
879  case 0:
880  cursor = limit - v_2;
881  subroot = true;
882  break;
883  case 1:
884  // (, line 126
885  // [, line 126
886  ket = cursor;
887  // literal, line 126
888  if (!(eq_s_b(2, "at")))
889  {
890  cursor = limit - v_2;
891  subroot = true;
892  break;
893  }
894  // ], line 126
895  bra = cursor;
896  // call R2, line 126
897  if (!r_R2())
898  {
899  cursor = limit - v_2;
900  subroot = true;
901  break;
902  }
903  // delete, line 126
904  slice_del();
905  break;
906  }
907  if (subroot) { subroot = false; break; }
908  } while (false);
909  break;
910  case 7:
911  // (, line 134
912  // call R2, line 135
913  if (!r_R2())
914  {
915  return false;
916  }
917  // delete, line 135
918  slice_del();
919  // try, line 136
920  v_3 = limit - cursor;
921  do
922  {
923  // (, line 136
924  // [, line 137
925  ket = cursor;
926  // substring, line 137
927  among_var = find_among_b(a_4, 3);
928  if (among_var == 0)
929  {
930  cursor = limit - v_3;
931  break;
932  }
933  // ], line 137
934  bra = cursor;
935  switch (among_var)
936  {
937  case 0:
938  cursor = limit - v_3;
939  subroot = true;
940  break;
941  case 1:
942  // (, line 140
943  // call R2, line 140
944  if (!r_R2())
945  {
946  cursor = limit - v_3;
947  subroot = true;
948  break;
949  }
950  // delete, line 140
951  slice_del();
952  break;
953  }
954  if (subroot) { subroot = false; break; }
955  } while (false);
956  break;
957  case 8:
958  // (, line 146
959  // call R2, line 147
960  if (!r_R2())
961  {
962  return false;
963  }
964  // delete, line 147
965  slice_del();
966  // try, line 148
967  v_4 = limit - cursor;
968  do
969  {
970  // (, line 148
971  // [, line 149
972  ket = cursor;
973  // substring, line 149
974  among_var = find_among_b(a_5, 3);
975  if (among_var == 0)
976  {
977  cursor = limit - v_4;
978  break;
979  }
980  // ], line 149
981  bra = cursor;
982  switch (among_var)
983  {
984  case 0:
985  cursor = limit - v_4;
986  subroot = true;
987  break;
988  case 1:
989  // (, line 152
990  // call R2, line 152
991  if (!r_R2())
992  {
993  cursor = limit - v_4;
994  subroot = true;
995  break;
996  }
997  // delete, line 152
998  slice_del();
999  break;
1000  }
1001  if (subroot) { subroot = false; break; }
1002  } while (false);
1003  break;
1004  case 9:
1005  // (, line 158
1006  // call R2, line 159
1007  if (!r_R2())
1008  {
1009  return false;
1010  }
1011  // delete, line 159
1012  slice_del();
1013  // try, line 160
1014  v_5 = limit - cursor;
1015  do
1016  {
1017  // (, line 160
1018  // [, line 161
1019  ket = cursor;
1020  // literal, line 161
1021  if (!(eq_s_b(2, "at")))
1022  {
1023  cursor = limit - v_5;
1024  break;
1025  }
1026  // ], line 161
1027  bra = cursor;
1028  // call R2, line 161
1029  if (!r_R2())
1030  {
1031  cursor = limit - v_5;
1032  break;
1033  }
1034  // delete, line 161
1035  slice_del();
1036  } while (false);
1037  break;
1038  }
1039  return true;
1040  }
1041 
1042 
1043  private bool r_y_verb_suffix()
1044  {
1045  int among_var;
1046  int v_1;
1047  int v_2;
1048  // (, line 167
1049  // setlimit, line 168
1050  v_1 = limit - cursor;
1051  // tomark, line 168
1052  if (cursor < I_pV)
1053  {
1054  return false;
1055  }
1056  cursor = I_pV;
1057  v_2 = limit_backward;
1058  limit_backward = cursor;
1059  cursor = limit - v_1;
1060  // (, line 168
1061  // [, line 168
1062  ket = cursor;
1063  // substring, line 168
1064  among_var = find_among_b(a_7, 12);
1065  if (among_var == 0)
1066  {
1067  limit_backward = v_2;
1068  return false;
1069  }
1070  // ], line 168
1071  bra = cursor;
1072  limit_backward = v_2;
1073  switch (among_var)
1074  {
1075  case 0:
1076  return false;
1077  case 1:
1078  // (, line 171
1079  // literal, line 171
1080  if (!(eq_s_b(1, "u")))
1081  {
1082  return false;
1083  }
1084  // delete, line 171
1085  slice_del();
1086  break;
1087  }
1088  return true;
1089  }
1090 
1091 
1092  private bool r_verb_suffix()
1093  {
1094  int among_var;
1095  int v_1;
1096  int v_2;
1097  int v_3;
1098  int v_4;
1099  // (, line 175
1100  // setlimit, line 176
1101  v_1 = limit - cursor;
1102  // tomark, line 176
1103  if (cursor < I_pV)
1104  {
1105  return false;
1106  }
1107  cursor = I_pV;
1108  v_2 = limit_backward;
1109  limit_backward = cursor;
1110  cursor = limit - v_1;
1111  // (, line 176
1112  // [, line 176
1113  ket = cursor;
1114  // substring, line 176
1115  among_var = find_among_b(a_8, 96);
1116  if (among_var == 0)
1117  {
1118  limit_backward = v_2;
1119  return false;
1120  }
1121  // ], line 176
1122  bra = cursor;
1123  limit_backward = v_2;
1124  switch (among_var)
1125  {
1126  case 0:
1127  return false;
1128  case 1:
1129  // (, line 179
1130  // try, line 179
1131  v_3 = limit - cursor;
1132  do
1133  {
1134  // (, line 179
1135  // literal, line 179
1136  if (!(eq_s_b(1, "u")))
1137  {
1138  cursor = limit - v_3;
1139  break;
1140  }
1141  // test, line 179
1142  v_4 = limit - cursor;
1143  // literal, line 179
1144  if (!(eq_s_b(1, "g")))
1145  {
1146  cursor = limit - v_3;
1147  break;
1148  }
1149  cursor = limit - v_4;
1150  } while (false);
1151  // ], line 179
1152  bra = cursor;
1153  // delete, line 179
1154  slice_del();
1155  break;
1156  case 2:
1157  // (, line 200
1158  // delete, line 200
1159  slice_del();
1160  break;
1161  }
1162  return true;
1163  }
1164 
1165 
1166  private bool r_residual_suffix()
1167  {
1168  int among_var;
1169  int v_1;
1170  int v_2;
1171  // (, line 204
1172  // [, line 205
1173  ket = cursor;
1174  // substring, line 205
1175  among_var = find_among_b(a_9, 8);
1176  if (among_var == 0)
1177  {
1178  return false;
1179  }
1180  // ], line 205
1181  bra = cursor;
1182  switch (among_var)
1183  {
1184  case 0:
1185  return false;
1186  case 1:
1187  // (, line 208
1188  // call RV, line 208
1189  if (!r_RV())
1190  {
1191  return false;
1192  }
1193  // delete, line 208
1194  slice_del();
1195  break;
1196  case 2:
1197  // (, line 210
1198  // call RV, line 210
1199  if (!r_RV())
1200  {
1201  return false;
1202  }
1203  // delete, line 210
1204  slice_del();
1205  // try, line 210
1206  v_1 = limit - cursor;
1207  do
1208  {
1209  // (, line 210
1210  // [, line 210
1211  ket = cursor;
1212  // literal, line 210
1213  if (!(eq_s_b(1, "u")))
1214  {
1215  cursor = limit - v_1;
1216  break;
1217  }
1218  // ], line 210
1219  bra = cursor;
1220  // test, line 210
1221  v_2 = limit - cursor;
1222  // literal, line 210
1223  if (!(eq_s_b(1, "g")))
1224  {
1225  cursor = limit - v_1;
1226  break;
1227  }
1228  cursor = limit - v_2;
1229  // call RV, line 210
1230  if (!r_RV())
1231  {
1232  cursor = limit - v_1;
1233  break;
1234  }
1235  // delete, line 210
1236  slice_del();
1237  } while (false);
1238  break;
1239  }
1240  return true;
1241  }
1242 
1243 
1244  private bool CanStem()
1245  {
1246  bool subroot = false;
1247  int v_1;
1248  int v_2;
1249  int v_3;
1250  int v_4;
1251  int v_5;
1252  int v_6;
1253  // (, line 215
1254  // do, line 216
1255  v_1 = cursor;
1256  do
1257  {
1258  // call mark_regions, line 216
1259  if (!r_mark_regions())
1260  {
1261  break;
1262  }
1263  } while (false);
1264  cursor = v_1;
1265  // backwards, line 217
1266  limit_backward = cursor; cursor = limit;
1267  // (, line 217
1268  // do, line 218
1269  v_2 = limit - cursor;
1270  do
1271  {
1272  // call attached_pronoun, line 218
1273  if (!r_attached_pronoun())
1274  {
1275  break;
1276  }
1277  } while (false);
1278  cursor = limit - v_2;
1279  // do, line 219
1280  v_3 = limit - cursor;
1281  do
1282  {
1283  // (, line 219
1284  // or, line 219
1285  do
1286  {
1287  v_4 = limit - cursor;
1288  do
1289  {
1290  // call standard_suffix, line 219
1291  if (!r_standard_suffix())
1292  {
1293  break;
1294  }
1295  subroot = true;
1296  if (subroot) break;
1297  } while (false);
1298  if (subroot) { subroot = false; break; }
1299  cursor = limit - v_4;
1300  do
1301  {
1302  // call y_verb_suffix, line 220
1303  if (!r_y_verb_suffix())
1304  {
1305  break;
1306  }
1307  subroot = true;
1308  if (subroot) break;
1309  } while (false);
1310  if (subroot) { subroot = false; break; }
1311  cursor = limit - v_4;
1312  // call verb_suffix, line 221
1313  if (!r_verb_suffix())
1314  {
1315  subroot = true;
1316  break;
1317  }
1318  } while (false);
1319  if (subroot) { subroot = false; break; }
1320  } while (false);
1321  cursor = limit - v_3;
1322  // do, line 223
1323  v_5 = limit - cursor;
1324  do
1325  {
1326  // call residual_suffix, line 223
1327  if (!r_residual_suffix())
1328  {
1329  break;
1330  }
1331  } while (false);
1332  cursor = limit - v_5;
1333  cursor = limit_backward; // do, line 225
1334  v_6 = cursor;
1335  do
1336  {
1337  // call postlude, line 225
1338  if (!r_postlude())
1339  {
1340  break;
1341  }
1342  } while (false);
1343  cursor = v_6;
1344  return true;
1345  }
1346 
1352  public string Stem(string s)
1353  {
1354  this.setCurrent(s.ToLowerInvariant());
1355  this.CanStem();
1356  return this.getCurrent();
1357  }
1358 
1359 
1360  }
1361 }