TraceLab Component Library
 All Classes Namespaces Files Functions Variables Enumerations Enumerator Properties
FrenchStemmer.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 FrenchStemmer methodObject = new FrenchStemmer();
20 
21 
22  private readonly static Among[] a_0 =
23  {
24  new Among ( "col", -1, -1, null ),
25  new Among ( "par", -1, -1, null ),
26  new Among ( "tap", -1, -1, null )
27  };
28 
29 
30  private readonly static Among[] a_1 =
31  {
32  new Among ( "", -1, 4, null ),
33  new Among ( "I", 0, 1, null ),
34  new Among ( "U", 0, 2, null ),
35  new Among ( "Y", 0, 3, null )
36  };
37 
38 
39  private readonly static Among[] a_2 =
40  {
41  new Among ( "iqU", -1, 3, null ),
42  new Among ( "abl", -1, 3, null ),
43  new Among ( "I\u00E8r", -1, 4, null ),
44  new Among ( "i\u00E8r", -1, 4, null ),
45  new Among ( "eus", -1, 2, null ),
46  new Among ( "iv", -1, 1, null )
47  };
48 
49 
50  private readonly static Among[] a_3 =
51  {
52  new Among ( "ic", -1, 2, null ),
53  new Among ( "abil", -1, 1, null ),
54  new Among ( "iv", -1, 3, null )
55  };
56 
57 
58  private readonly static Among[] a_4 =
59  {
60  new Among ( "iqUe", -1, 1, null ),
61  new Among ( "atrice", -1, 2, null ),
62  new Among ( "ance", -1, 1, null ),
63  new Among ( "ence", -1, 5, null ),
64  new Among ( "logie", -1, 3, null ),
65  new Among ( "able", -1, 1, null ),
66  new Among ( "isme", -1, 1, null ),
67  new Among ( "euse", -1, 11, null ),
68  new Among ( "iste", -1, 1, null ),
69  new Among ( "ive", -1, 8, null ),
70  new Among ( "if", -1, 8, null ),
71  new Among ( "usion", -1, 4, null ),
72  new Among ( "ation", -1, 2, null ),
73  new Among ( "ution", -1, 4, null ),
74  new Among ( "ateur", -1, 2, null ),
75  new Among ( "iqUes", -1, 1, null ),
76  new Among ( "atrices", -1, 2, null ),
77  new Among ( "ances", -1, 1, null ),
78  new Among ( "ences", -1, 5, null ),
79  new Among ( "logies", -1, 3, null ),
80  new Among ( "ables", -1, 1, null ),
81  new Among ( "ismes", -1, 1, null ),
82  new Among ( "euses", -1, 11, null ),
83  new Among ( "istes", -1, 1, null ),
84  new Among ( "ives", -1, 8, null ),
85  new Among ( "ifs", -1, 8, null ),
86  new Among ( "usions", -1, 4, null ),
87  new Among ( "ations", -1, 2, null ),
88  new Among ( "utions", -1, 4, null ),
89  new Among ( "ateurs", -1, 2, null ),
90  new Among ( "ments", -1, 15, null ),
91  new Among ( "ements", 30, 6, null ),
92  new Among ( "issements", 31, 12, null ),
93  new Among ( "it\u00E9s", -1, 7, null ),
94  new Among ( "ment", -1, 15, null ),
95  new Among ( "ement", 34, 6, null ),
96  new Among ( "issement", 35, 12, null ),
97  new Among ( "amment", 34, 13, null ),
98  new Among ( "emment", 34, 14, null ),
99  new Among ( "aux", -1, 10, null ),
100  new Among ( "eaux", 39, 9, null ),
101  new Among ( "eux", -1, 1, null ),
102  new Among ( "it\u00E9", -1, 7, null )
103  };
104 
105 
106  private readonly static Among[] a_5 =
107  {
108  new Among ( "ira", -1, 1, null ),
109  new Among ( "ie", -1, 1, null ),
110  new Among ( "isse", -1, 1, null ),
111  new Among ( "issante", -1, 1, null ),
112  new Among ( "i", -1, 1, null ),
113  new Among ( "irai", 4, 1, null ),
114  new Among ( "ir", -1, 1, null ),
115  new Among ( "iras", -1, 1, null ),
116  new Among ( "ies", -1, 1, null ),
117  new Among ( "\u00EEmes", -1, 1, null ),
118  new Among ( "isses", -1, 1, null ),
119  new Among ( "issantes", -1, 1, null ),
120  new Among ( "\u00EEtes", -1, 1, null ),
121  new Among ( "is", -1, 1, null ),
122  new Among ( "irais", 13, 1, null ),
123  new Among ( "issais", 13, 1, null ),
124  new Among ( "irions", -1, 1, null ),
125  new Among ( "issions", -1, 1, null ),
126  new Among ( "irons", -1, 1, null ),
127  new Among ( "issons", -1, 1, null ),
128  new Among ( "issants", -1, 1, null ),
129  new Among ( "it", -1, 1, null ),
130  new Among ( "irait", 21, 1, null ),
131  new Among ( "issait", 21, 1, null ),
132  new Among ( "issant", -1, 1, null ),
133  new Among ( "iraIent", -1, 1, null ),
134  new Among ( "issaIent", -1, 1, null ),
135  new Among ( "irent", -1, 1, null ),
136  new Among ( "issent", -1, 1, null ),
137  new Among ( "iront", -1, 1, null ),
138  new Among ( "\u00EEt", -1, 1, null ),
139  new Among ( "iriez", -1, 1, null ),
140  new Among ( "issiez", -1, 1, null ),
141  new Among ( "irez", -1, 1, null ),
142  new Among ( "issez", -1, 1, null )
143  };
144 
145 
146  private readonly static Among[] a_6 =
147  {
148  new Among ( "a", -1, 3, null ),
149  new Among ( "era", 0, 2, null ),
150  new Among ( "asse", -1, 3, null ),
151  new Among ( "ante", -1, 3, null ),
152  new Among ( "\u00E9e", -1, 2, null ),
153  new Among ( "ai", -1, 3, null ),
154  new Among ( "erai", 5, 2, null ),
155  new Among ( "er", -1, 2, null ),
156  new Among ( "as", -1, 3, null ),
157  new Among ( "eras", 8, 2, null ),
158  new Among ( "\u00E2mes", -1, 3, null ),
159  new Among ( "asses", -1, 3, null ),
160  new Among ( "antes", -1, 3, null ),
161  new Among ( "\u00E2tes", -1, 3, null ),
162  new Among ( "\u00E9es", -1, 2, null ),
163  new Among ( "ais", -1, 3, null ),
164  new Among ( "erais", 15, 2, null ),
165  new Among ( "ions", -1, 1, null ),
166  new Among ( "erions", 17, 2, null ),
167  new Among ( "assions", 17, 3, null ),
168  new Among ( "erons", -1, 2, null ),
169  new Among ( "ants", -1, 3, null ),
170  new Among ( "\u00E9s", -1, 2, null ),
171  new Among ( "ait", -1, 3, null ),
172  new Among ( "erait", 23, 2, null ),
173  new Among ( "ant", -1, 3, null ),
174  new Among ( "aIent", -1, 3, null ),
175  new Among ( "eraIent", 26, 2, null ),
176  new Among ( "\u00E8rent", -1, 2, null ),
177  new Among ( "assent", -1, 3, null ),
178  new Among ( "eront", -1, 2, null ),
179  new Among ( "\u00E2t", -1, 3, null ),
180  new Among ( "ez", -1, 2, null ),
181  new Among ( "iez", 32, 2, null ),
182  new Among ( "eriez", 33, 2, null ),
183  new Among ( "assiez", 33, 3, null ),
184  new Among ( "erez", 32, 2, null ),
185  new Among ( "\u00E9", -1, 2, null )
186  };
187 
188 
189  private readonly static Among[] a_7 =
190  {
191  new Among ( "e", -1, 3, null ),
192  new Among ( "I\u00E8re", 0, 2, null ),
193  new Among ( "i\u00E8re", 0, 2, null ),
194  new Among ( "ion", -1, 1, null ),
195  new Among ( "Ier", -1, 2, null ),
196  new Among ( "ier", -1, 2, null ),
197  new Among ( "\u00EB", -1, 4, null )
198 
199  };
200 
201 
202  private readonly static Among[] a_8 =
203  {
204  new Among ( "ell", -1, -1, null ),
205  new Among ( "eill", -1, -1, null ),
206  new Among ( "enn", -1, -1, null ),
207  new Among ( "onn", -1, -1, null ),
208  new Among ( "ett", -1, -1, null )
209  };
210 
211 
212  private static readonly char[] g_v = {(char)17, (char)65, (char)16, (char)1, (char)0,
213  (char)0,(char)0, (char)0, (char)0, (char)0, (char)0,
214  (char)0, (char)0, (char)0,(char)0, (char)128, (char)130,
215  (char)103, (char)8, (char)5 };
216  private static readonly char[] g_keep_with_s = {(char)1, (char)65, (char)20, (char)0, (char)0, (char)0,
217  (char)0, (char)0, (char)0, (char)0, (char)0, (char)0,
218  (char)0, (char)0, (char)0, (char)0, (char)128 };
219 
220  private int I_p2;
221  private int I_p1;
222  private int I_pV;
223 
224 
225  private void copy_from(FrenchStemmer other)
226  {
227  I_p2 = other.I_p2;
228  I_p1 = other.I_p1;
229  I_pV = other.I_pV;
230  base.copy_from(other);
231  }
232 
233 
234  private bool r_prelude()
235  {
236  bool subroot = false;
237  int v_1;
238  int v_2;
239  int v_3;
240  int v_4;
241  // repeat, line 38
242  replab0: while (true)
243  {
244  v_1 = cursor;
245  do
246  {
247  // goto, line 38
248  while (true)
249  {
250  v_2 = cursor;
251  do
252  {
253  // (, line 38
254  // or, line 44
255  do
256  {
257  v_3 = cursor;
258  do
259  {
260  // (, line 40
261  if (!(in_grouping(g_v, 97, 251)))
262  {
263  break;
264  }
265  // [, line 40
266  bra = cursor;
267  // or, line 40
268  do
269  {
270  v_4 = cursor;
271  do
272  {
273  // (, line 40
274  // literal, line 40
275  if (!(eq_s(1, "u")))
276  {
277  break;
278  }
279  // ], line 40
280  ket = cursor;
281  if (!(in_grouping(g_v, 97, 251)))
282  {
283  break;
284  }
285  // <-, line 40
286  slice_from("U");
287  subroot = true;
288  if (subroot) break;
289  } while (false);
290  if (subroot) { subroot = false; break; }
291  cursor = v_4;
292  do
293  {
294  // (, line 41
295  // literal, line 41
296  if (!(eq_s(1, "i")))
297  {
298  break;
299  }
300  // ], line 41
301  ket = cursor;
302  if (!(in_grouping(g_v, 97, 251)))
303  {
304  break;
305  }
306  // <-, line 41
307  slice_from("I");
308  subroot = true;
309  if (subroot) break;
310  } while (false);
311  if (subroot) { subroot = false; break; }
312  cursor = v_4;
313  // (, line 42
314  // literal, line 42
315  if (!(eq_s(1, "y")))
316  {
317  subroot = true;
318  break;
319  }
320  // ], line 42
321  ket = cursor;
322  // <-, line 42
323  slice_from("Y");
324  } while (false);
325  if (subroot) { subroot = false; break; }
326  subroot = true;
327  if (subroot) break;
328  } while (false);
329  if (subroot) { subroot = false; break; }
330  cursor = v_3;
331  do
332  {
333  // (, line 45
334  // [, line 45
335  bra = cursor;
336  // literal, line 45
337  if (!(eq_s(1, "y")))
338  {
339  break;
340  }
341  // ], line 45
342  ket = cursor;
343  if (!(in_grouping(g_v, 97, 251)))
344  {
345  break;
346  }
347  // <-, line 45
348  slice_from("Y");
349  subroot = true;
350  if (subroot) break;
351  } while (false);
352  if (subroot) { subroot = false; break; }
353  cursor = v_3;
354  // (, line 47
355  // literal, line 47
356  if (!(eq_s(1, "q")))
357  {
358  subroot = true;
359  break;
360  }
361  // [, line 47
362  bra = cursor;
363  // literal, line 47
364  if (!(eq_s(1, "u")))
365  {
366  subroot = true;
367  break;
368  }
369  // ], line 47
370  ket = cursor;
371  // <-, line 47
372  slice_from("U");
373  } while (false);
374  if (subroot) { subroot = false; break; }
375  cursor = v_2;
376  subroot = true;
377  if (subroot) break;
378  } while (false);
379  if (subroot) { subroot = false; break; }
380  cursor = v_2;
381  if (cursor >= limit)
382  {
383  subroot = true;
384  break;
385  }
386  cursor++;
387  }
388  if (subroot)
389  {
390  subroot = false;
391  break;
392  }
393  else if (!subroot)
394  { goto replab0; }
395  } while (false);
396  cursor = v_1;
397  break;
398  }
399  return true;
400  }
401 
402 
403  private bool r_mark_regions()
404  {
405 
406  bool subroot = false;
407  bool root = false;
408  int v_1;
409  int v_2;
410  int v_4;
411  // (, line 50
412  I_pV = limit;
413  I_p1 = limit;
414  I_p2 = limit;
415  // do, line 56
416  v_1 = cursor;
417  do
418  {
419  // (, line 56
420  // or, line 58
421  do
422  {
423  v_2 = cursor;
424  do
425  {
426  // (, line 57
427  if (!(in_grouping(g_v, 97, 251)))
428  {
429  break;
430  }
431  if (!(in_grouping(g_v, 97, 251)))
432  {
433  break;
434  }
435  // next, line 57
436  if (cursor >= limit)
437  {
438  break;
439  }
440  cursor++;
441  subroot = true;
442  if (subroot) break;
443  } while (false);
444  if (subroot) { subroot = false; break; }
445  cursor = v_2;
446  do
447  {
448  // among, line 59
449  if (find_among(a_0, 3) == 0)
450  {
451  break;
452  }
453  subroot = true;
454  if (subroot) break;
455  } while (false);
456  if (subroot) { subroot = false; break; }
457  cursor = v_2;
458  // (, line 66
459  // next, line 66
460  if (cursor >= limit)
461  {
462  root = true;
463  break;
464  }
465  cursor++;
466  // gopast, line 66
467  while (true)
468  {
469  do
470  {
471  if (!(in_grouping(g_v, 97, 251)))
472  {
473  break;
474  }
475  subroot = true;
476  if (subroot) break;
477  } while (false);
478  if (subroot) { subroot = false; break; }
479  if (cursor >= limit)
480  {
481  root = true;
482  break;
483  }
484  cursor++;
485  }
486  } while (false);
487  if (root) { root = false; break; }
488  if (subroot) { subroot = false; break; }
489  // setmark pV, line 67
490  I_pV = cursor;
491  } while (false);
492  cursor = v_1;
493  // do, line 69
494  subroot = false;
495  v_4 = cursor;
496  do
497  {
498  // (, line 69
499  // gopast, line 70
500  while (true)
501  {
502  do
503  {
504  if (!(in_grouping(g_v, 97, 251)))
505  {
506  break;
507  }
508  subroot = true;
509  if (subroot) break;
510  } while (false);
511  if (subroot) { subroot = false; break; }
512  if (cursor >= limit)
513  {
514  subroot = true;
515  break;
516  }
517  cursor++;
518  }
519  if (subroot) { subroot = false; break; }
520  // gopast, line 70
521  while (true)
522  {
523  do
524  {
525  if (!(out_grouping(g_v, 97, 251)))
526  {
527  break;
528  }
529  subroot = true;
530  if (subroot) break;
531  } while (false);
532  if (subroot) { subroot = false; break; }
533 
534  if (cursor >= limit)
535  {
536  subroot = true;
537  break;
538  }
539  cursor++;
540  }
541  if (subroot) { subroot = false; break; }
542  // setmark p1, line 70
543  I_p1 = cursor;
544  // gopast, line 71
545  while (true)
546  {
547  do
548  {
549  if (!(in_grouping(g_v, 97, 251)))
550  {
551  break;
552  }
553  subroot = true;
554  if (subroot) break;
555  } while (false);
556  if (subroot) { subroot = false; break; }
557 
558  if (cursor >= limit)
559  {
560  subroot = true;
561  break;
562  }
563  cursor++;
564  }
565  if (subroot) { subroot = false; break; }
566  // gopast, line 71
567  while (true)
568  {
569  do
570  {
571  if (!(out_grouping(g_v, 97, 251)))
572  {
573  break;
574  }
575  subroot = true;
576  if (subroot) break;
577  } while (false);
578  if (subroot) { subroot = false; break; }
579 
580  if (cursor >= limit)
581  {
582  subroot = true;
583  break;
584  }
585  cursor++;
586  }
587  if (subroot) { subroot = false; break; }
588  // setmark p2, line 71
589  I_p2 = cursor;
590  } while (false);
591  cursor = v_4;
592  return true;
593  }
594 
595  private bool r_postlude()
596  {
597  bool subroot = false;
598  int among_var;
599  int v_1;
600  // repeat, line 75
601  replab0: while (true)
602  {
603  v_1 = cursor;
604  do
605  {
606  // (, line 75
607  // [, line 77
608  bra = cursor;
609  // substring, line 77
610  among_var = find_among(a_1, 4);
611  if (among_var == 0)
612  {
613  break;
614  }
615  // ], line 77
616  ket = cursor;
617  switch (among_var)
618  {
619  case 0:
620  subroot = true;
621  break;
622  case 1:
623  // (, line 78
624  // <-, line 78
625  slice_from("i");
626  break;
627  case 2:
628  // (, line 79
629  // <-, line 79
630  slice_from("u");
631  break;
632  case 3:
633  // (, line 80
634  // <-, line 80
635  slice_from("y");
636  break;
637  case 4:
638  // (, line 81
639  // next, line 81
640  if (cursor >= limit)
641  {
642  subroot = true;
643  break;
644  }
645  cursor++;
646  break;
647  }
648  if (subroot) { subroot = false; break; }
649  else if (!subroot)
650  {
651  goto replab0;
652  }
653  } while (false);
654  cursor = v_1;
655  break;
656  }
657  return true;
658  }
659 
660  private bool r_RV()
661  {
662  if (!(I_pV <= cursor))
663  {
664  return false;
665  }
666  return true;
667  }
668 
669  private bool r_R1()
670  {
671  if (!(I_p1 <= cursor))
672  {
673  return false;
674  }
675  return true;
676  }
677 
678  private bool r_R2()
679  {
680  if (!(I_p2 <= cursor))
681  {
682  return false;
683  }
684  return true;
685  }
686 
687  private bool r_standard_suffix()
688  {
689  bool subroot = false;
690  int among_var;
691  int v_1;
692  int v_2;
693  int v_3;
694  int v_4;
695  int v_5;
696  int v_6;
697  int v_7;
698  int v_8;
699  int v_9;
700  int v_10;
701  int v_11;
702  // (, line 91
703  // [, line 92
704  ket = cursor;
705  // substring, line 92
706  among_var = find_among_b(a_4, 43);
707  if (among_var == 0)
708  {
709  return false;
710  }
711  // ], line 92
712  bra = cursor;
713  switch (among_var)
714  {
715  case 0:
716  return false;
717  case 1:
718  // (, line 96
719  // call R2, line 96
720  if (!r_R2())
721  {
722  return false;
723  }
724  // delete, line 96
725  slice_del();
726  break;
727  case 2:
728  // (, line 99
729  // call R2, line 99
730  if (!r_R2())
731  {
732  return false;
733  }
734  // delete, line 99
735  slice_del();
736  // try, line 100
737  v_1 = limit - cursor;
738  do
739  {
740  // (, line 100
741  // [, line 100
742  ket = cursor;
743  // literal, line 100
744  if (!(eq_s_b(2, "ic")))
745  {
746  cursor = limit - v_1;
747  break;
748  }
749  // ], line 100
750  bra = cursor;
751  // or, line 100
752  do
753  {
754  v_2 = limit - cursor;
755  do
756  {
757  // (, line 100
758  // call R2, line 100
759  if (!r_R2())
760  {
761  break;
762  }
763  // delete, line 100
764  slice_del();
765  subroot = true;
766  if (subroot) break;
767  } while (false);
768 
769  if (subroot) { subroot = false; break; }
770 
771  cursor = limit - v_2;
772  // <-, line 100
773  slice_from("iqU");
774  } while (false);
775  } while (false);
776  break;
777  case 3:
778  // (, line 104
779  // call R2, line 104
780  if (!r_R2())
781  {
782  return false;
783  }
784  // <-, line 104
785  slice_from("log");
786  break;
787  case 4:
788  // (, line 107
789  // call R2, line 107
790  if (!r_R2())
791  {
792  return false;
793  }
794  // <-, line 107
795  slice_from("u");
796  break;
797  case 5:
798  // (, line 110
799  // call R2, line 110
800  if (!r_R2())
801  {
802  return false;
803  }
804  // <-, line 110
805  slice_from("ent");
806  break;
807  case 6:
808  // (, line 113
809  // call RV, line 114
810  if (!r_RV())
811  {
812  return false;
813  }
814  // delete, line 114
815  slice_del();
816  // try, line 115
817  v_3 = limit - cursor;
818  do
819  {
820  // (, line 115
821  // [, line 116
822  ket = cursor;
823  // substring, line 116
824  among_var = find_among_b(a_2, 6);
825  if (among_var == 0)
826  {
827  cursor = limit - v_3;
828  break;
829  }
830  // ], line 116
831  bra = cursor;
832  switch (among_var)
833  {
834  case 0:
835  cursor = limit - v_3;
836  subroot = true;
837  goto exitLab3;
838  case 1:
839  // (, line 117
840  // call R2, line 117
841  if (!r_R2())
842  {
843  cursor = limit - v_3;
844  subroot = true;
845  goto exitLab3;
846  }
847  // delete, line 117
848  slice_del();
849  // [, line 117
850  ket = cursor;
851  // literal, line 117
852  if (!(eq_s_b(2, "at")))
853  {
854  cursor = limit - v_3;
855  subroot = true;
856  goto exitLab3;
857  }
858  // ], line 117
859  bra = cursor;
860  // call R2, line 117
861  if (!r_R2())
862  {
863  cursor = limit - v_3;
864  subroot = true;
865  goto exitLab3;
866  }
867  // delete, line 117
868  slice_del();
869  break;
870  case 2:
871  // (, line 118
872  // or, line 118
873  do
874  {
875  v_4 = limit - cursor;
876  do
877  {
878  // (, line 118
879  // call R2, line 118
880  if (!r_R2())
881  {
882  break;
883  }
884  // delete, line 118
885  slice_del();
886  subroot = true;
887  if (subroot) break;
888  } while (false);
889 
890  if (subroot) { subroot = false; break; }
891 
892  cursor = limit - v_4;
893  // (, line 118
894  // call R1, line 118
895  if (!r_R1())
896  {
897  cursor = limit - v_3;
898  subroot = true;
899  goto exitLab3;
900  }
901  // <-, line 118
902  slice_from("eux");
903  } while (false);
904  break;
905  case 3:
906  // (, line 120
907  // call R2, line 120
908  if (!r_R2())
909  {
910  cursor = limit - v_3;
911  subroot = true;
912  goto exitLab3;
913  }
914  // delete, line 120
915  slice_del();
916  break;
917  case 4:
918  // (, line 122
919  // call RV, line 122
920  if (!r_RV())
921  {
922  cursor = limit - v_3;
923  subroot = true;
924  goto exitLab3;
925  }
926  // <-, line 122
927  slice_from("i");
928  break;
929  }
930  exitLab3: if (subroot) { subroot = false; break; }
931  } while (false);
932  break;
933  case 7:
934  // (, line 128
935  // call R2, line 129
936  if (!r_R2())
937  {
938  return false;
939  }
940  // delete, line 129
941  slice_del();
942  // try, line 130
943  v_5 = limit - cursor;
944  do
945  {
946  // (, line 130
947  // [, line 131
948  ket = cursor;
949  // substring, line 131
950  among_var = find_among_b(a_3, 3);
951  if (among_var == 0)
952  {
953  cursor = limit - v_5;
954  break;
955  }
956  // ], line 131
957  bra = cursor;
958  switch (among_var)
959  {
960  case 0:
961  cursor = limit - v_5;
962  subroot = true;
963  break;
964  case 1:
965  // (, line 132
966  // or, line 132
967  do
968  {
969  v_6 = limit - cursor;
970  do
971  {
972  // (, line 132
973  // call R2, line 132
974  if (!r_R2())
975  {
976  break;
977  }
978  // delete, line 132
979  slice_del();
980  subroot = true;
981  if (subroot) break;
982  } while (false);
983 
984  if (subroot) { subroot = false; break; }
985 
986  cursor = limit - v_6;
987  // <-, line 132
988  slice_from("abl");
989  } while (false);
990  break;
991  case 2:
992  // (, line 133
993  // or, line 133
994  do
995  {
996  v_7 = limit - cursor;
997  do
998  {
999  // (, line 133
1000  // call R2, line 133
1001  if (!r_R2())
1002  {
1003  break;
1004  }
1005  // delete, line 133
1006  slice_del();
1007  subroot = true;
1008  if (subroot) break;
1009  } while (false);
1010 
1011  if (subroot) { subroot = false; break; }
1012 
1013  cursor = limit - v_7;
1014  // <-, line 133
1015  slice_from("iqU");
1016  } while (false);
1017  break;
1018  case 3:
1019  // (, line 134
1020  // call R2, line 134
1021  if (!r_R2())
1022  {
1023  cursor = limit - v_5;
1024  subroot = true;
1025  break;
1026  }
1027  // delete, line 134
1028  slice_del();
1029  break;
1030  }
1031  if (subroot) { subroot = false; break; }
1032  } while (false);
1033  break;
1034  case 8:
1035  // (, line 140
1036  // call R2, line 141
1037  if (!r_R2())
1038  {
1039  return false;
1040  }
1041  // delete, line 141
1042  slice_del();
1043  // try, line 142
1044  v_8 = limit - cursor;
1045  do
1046  {
1047  // (, line 142
1048  // [, line 142
1049  ket = cursor;
1050  // literal, line 142
1051  if (!(eq_s_b(2, "at")))
1052  {
1053  cursor = limit - v_8;
1054  break;
1055  }
1056  // ], line 142
1057  bra = cursor;
1058  // call R2, line 142
1059  if (!r_R2())
1060  {
1061  cursor = limit - v_8;
1062  break;
1063  }
1064  // delete, line 142
1065  slice_del();
1066  // [, line 142
1067  ket = cursor;
1068  // literal, line 142
1069  if (!(eq_s_b(2, "ic")))
1070  {
1071  cursor = limit - v_8;
1072  break;
1073  }
1074  // ], line 142
1075  bra = cursor;
1076  // or, line 142
1077  do
1078  {
1079  v_9 = limit - cursor;
1080  do
1081  {
1082  // (, line 142
1083  // call R2, line 142
1084  if (!r_R2())
1085  {
1086  break;
1087  }
1088  // delete, line 142
1089  slice_del();
1090  subroot = true;
1091  if (subroot) break;
1092  } while (false);
1093 
1094  if (subroot) { subroot = false; break; }
1095 
1096  cursor = limit - v_9;
1097  // <-, line 142
1098  slice_from("iqU");
1099  } while (false);
1100  } while (false);
1101  break;
1102  case 9:
1103  // (, line 144
1104  // <-, line 144
1105  slice_from("eau");
1106  break;
1107  case 10:
1108  // (, line 145
1109  // call R1, line 145
1110  if (!r_R1())
1111  {
1112  return false;
1113  }
1114  // <-, line 145
1115  slice_from("al");
1116  break;
1117  case 11:
1118  // (, line 147
1119  // or, line 147
1120  do
1121  {
1122  v_10 = limit - cursor;
1123  do
1124  {
1125  // (, line 147
1126  // call R2, line 147
1127  if (!r_R2())
1128  {
1129  break;
1130  }
1131  // delete, line 147
1132  slice_del();
1133  subroot = true;
1134  if (subroot) break;
1135  } while (false);
1136 
1137  if (subroot) { subroot = false; break; }
1138 
1139  cursor = limit - v_10;
1140  // (, line 147
1141  // call R1, line 147
1142  if (!r_R1())
1143  {
1144  return false;
1145  }
1146  // <-, line 147
1147  slice_from("eux");
1148  } while (false);
1149  break;
1150  case 12:
1151  // (, line 150
1152  // call R1, line 150
1153  if (!r_R1())
1154  {
1155  return false;
1156  }
1157  if (!(out_grouping_b(g_v, 97, 251)))
1158  {
1159  return false;
1160  }
1161  // delete, line 150
1162  slice_del();
1163  break;
1164  case 13:
1165  // (, line 155
1166  // call RV, line 155
1167  if (!r_RV())
1168  {
1169  return false;
1170  }
1171  // fail, line 155
1172  // (, line 155
1173  // <-, line 155
1174  slice_from("ant");
1175  return false;
1176  case 14:
1177  // (, line 156
1178  // call RV, line 156
1179  if (!r_RV())
1180  {
1181  return false;
1182  }
1183  // fail, line 156
1184  // (, line 156
1185  // <-, line 156
1186  slice_from("ent");
1187  return false;
1188  case 15:
1189  // (, line 158
1190  // test, line 158
1191  v_11 = limit - cursor;
1192  // (, line 158
1193  if (!(in_grouping_b(g_v, 97, 251)))
1194  {
1195  return false;
1196  }
1197  // call RV, line 158
1198  if (!r_RV())
1199  {
1200  return false;
1201  }
1202  cursor = limit - v_11;
1203  // fail, line 158
1204  // (, line 158
1205  // delete, line 158
1206  slice_del();
1207  return false;
1208  }
1209  return true;
1210  }
1211 
1212  private bool r_i_verb_suffix()
1213  {
1214  int among_var;
1215  int v_1;
1216  int v_2;
1217  // setlimit, line 163
1218  v_1 = limit - cursor;
1219  // tomark, line 163
1220  if (cursor < I_pV)
1221  {
1222  return false;
1223  }
1224  cursor = I_pV;
1225  v_2 = limit_backward;
1226  limit_backward = cursor;
1227  cursor = limit - v_1;
1228  // (, line 163
1229  // [, line 164
1230  ket = cursor;
1231  // substring, line 164
1232  among_var = find_among_b(a_5, 35);
1233  if (among_var == 0)
1234  {
1235  limit_backward = v_2;
1236  return false;
1237  }
1238  // ], line 164
1239  bra = cursor;
1240  switch (among_var)
1241  {
1242  case 0:
1243  limit_backward = v_2;
1244  return false;
1245  case 1:
1246  // (, line 170
1247  if (!(out_grouping_b(g_v, 97, 251)))
1248  {
1249  limit_backward = v_2;
1250  return false;
1251  }
1252  // delete, line 170
1253  slice_del();
1254  break;
1255  }
1256  limit_backward = v_2;
1257  return true;
1258  }
1259 
1260  private bool r_verb_suffix()
1261  {
1262  int among_var;
1263  int v_1;
1264  int v_2;
1265  int v_3;
1266  // setlimit, line 174
1267  v_1 = limit - cursor;
1268  // tomark, line 174
1269  if (cursor < I_pV)
1270  {
1271  return false;
1272  }
1273  cursor = I_pV;
1274  v_2 = limit_backward;
1275  limit_backward = cursor;
1276  cursor = limit - v_1;
1277  // (, line 174
1278  // [, line 175
1279  ket = cursor;
1280  // substring, line 175
1281  among_var = find_among_b(a_6, 38);
1282  if (among_var == 0)
1283  {
1284  limit_backward = v_2;
1285  return false;
1286  }
1287  // ], line 175
1288  bra = cursor;
1289  switch (among_var)
1290  {
1291  case 0:
1292  limit_backward = v_2;
1293  return false;
1294  case 1:
1295  // (, line 177
1296  // call R2, line 177
1297  if (!r_R2())
1298  {
1299  limit_backward = v_2;
1300  return false;
1301  }
1302  // delete, line 177
1303  slice_del();
1304  break;
1305  case 2:
1306  // (, line 185
1307  // delete, line 185
1308  slice_del();
1309  break;
1310  case 3:
1311  // (, line 190
1312  // delete, line 190
1313  slice_del();
1314  // try, line 191
1315  v_3 = limit - cursor;
1316  // lab0:
1317  do
1318  {
1319  // (, line 191
1320  // [, line 191
1321  ket = cursor;
1322  // literal, line 191
1323  if (!(eq_s_b(1, "e")))
1324  {
1325  cursor = limit - v_3;
1326  // break lab0;
1327  break;
1328  }
1329  // ], line 191
1330  bra = cursor;
1331  // delete, line 191
1332  slice_del();
1333  } while (false);
1334  break;
1335  }
1336  limit_backward = v_2;
1337  return true;
1338  }
1339 
1340  private bool r_residual_suffix()
1341  {
1342  bool subroot = false;
1343  int among_var;
1344  int v_1;
1345  int v_2;
1346  int v_3;
1347  int v_4;
1348  int v_5;
1349  // (, line 198
1350  // try, line 199
1351  v_1 = limit - cursor;
1352  do
1353  {
1354  // (, line 199
1355  // [, line 199
1356  ket = cursor;
1357  // literal, line 199
1358  if (!(eq_s_b(1, "s")))
1359  {
1360  cursor = limit - v_1;
1361  break;
1362  }
1363  // ], line 199
1364  bra = cursor;
1365  // test, line 199
1366  v_2 = limit - cursor;
1367  if (!(out_grouping_b(g_keep_with_s, 97, 232)))
1368  {
1369  cursor = limit - v_1;
1370  break;
1371  }
1372  cursor = limit - v_2;
1373  // delete, line 199
1374  slice_del();
1375  } while (false);
1376  // setlimit, line 200
1377  v_3 = limit - cursor;
1378  // tomark, line 200
1379  if (cursor < I_pV)
1380  {
1381  return false;
1382  }
1383  cursor = I_pV;
1384  v_4 = limit_backward;
1385  limit_backward = cursor;
1386  cursor = limit - v_3;
1387  // (, line 200
1388  // [, line 201
1389  ket = cursor;
1390  // substring, line 201
1391  among_var = find_among_b(a_7, 7);
1392  if (among_var == 0)
1393  {
1394  limit_backward = v_4;
1395  return false;
1396  }
1397  // ], line 201
1398  bra = cursor;
1399  switch (among_var)
1400  {
1401  case 0:
1402  limit_backward = v_4;
1403  return false;
1404  case 1:
1405  // (, line 202
1406  // call R2, line 202
1407  if (!r_R2())
1408  {
1409  limit_backward = v_4;
1410  return false;
1411  }
1412  // or, line 202
1413  do
1414  {
1415  v_5 = limit - cursor;
1416  do
1417  {
1418  // literal, line 202
1419  if (!(eq_s_b(1, "s")))
1420  {
1421  break;
1422  }
1423  subroot = true;
1424  if (subroot) break;
1425 
1426  } while (false);
1427 
1428  if (subroot) { subroot = false; break; }
1429 
1430  cursor = limit - v_5;
1431  // literal, line 202
1432  if (!(eq_s_b(1, "t")))
1433  {
1434  limit_backward = v_4;
1435  return false;
1436  }
1437  } while (false);
1438  // delete, line 202
1439  slice_del();
1440  break;
1441  case 2:
1442  // (, line 204
1443  // <-, line 204
1444  slice_from("i");
1445  break;
1446  case 3:
1447  // (, line 205
1448  // delete, line 205
1449  slice_del();
1450  break;
1451  case 4:
1452  // (, line 206
1453  // literal, line 206
1454  if (!(eq_s_b(2, "gu")))
1455  {
1456  limit_backward = v_4;
1457  return false;
1458  }
1459  // delete, line 206
1460  slice_del();
1461  break;
1462  }
1463  limit_backward = v_4;
1464  return true;
1465  }
1466 
1467  private bool r_un_double()
1468  {
1469  int v_1;
1470  // (, line 211
1471  // test, line 212
1472  v_1 = limit - cursor;
1473  // among, line 212
1474  if (find_among_b(a_8, 5) == 0)
1475  {
1476  return false;
1477  }
1478  cursor = limit - v_1;
1479  // [, line 212
1480  ket = cursor;
1481  // next, line 212
1482  if (cursor <= limit_backward)
1483  {
1484  return false;
1485  }
1486  cursor--;
1487  // ], line 212
1488  bra = cursor;
1489  // delete, line 212
1490  slice_del();
1491  return true;
1492  }
1493 
1494  private bool r_un_accent()
1495  {
1496  bool subroot = false;
1497  int v_3;
1498  // (, line 215
1499  // atleast, line 216
1500  {
1501  int v_1 = 1;
1502  // atleast, line 216
1503  replab0: while (true)
1504  {
1505  //lab1:
1506  do
1507  {
1508  if (!(out_grouping_b(g_v, 97, 251)))
1509  {
1510  break;
1511  }
1512  v_1--;
1513  if (!subroot)
1514  {
1515  goto replab0;
1516  }
1517  } while (false);
1518  break;
1519  }
1520  if (v_1 > 0)
1521  {
1522  return false;
1523  }
1524  }
1525  // [, line 217
1526  ket = cursor;
1527  // or, line 217
1528  do
1529  {
1530  v_3 = limit - cursor;
1531  do
1532  {
1533  // literal, line 217
1534  if (!(eq_s_b(1, "\u00E9")))
1535  {
1536  break;
1537  }
1538  subroot = true;
1539  if (subroot) break;
1540  } while (false);
1541 
1542  if (subroot) { subroot = false; break; }
1543 
1544  cursor = limit - v_3;
1545  // literal, line 217
1546  if (!(eq_s_b(1, "\u00E8")))
1547  {
1548  return false;
1549  }
1550  } while (false);
1551  // ], line 217
1552  bra = cursor;
1553  // <-, line 217
1554  slice_from("e");
1555  return true;
1556  }
1557 
1558  private bool CanStem()
1559  {
1560  bool subroot = false;
1561  int v_1;
1562  int v_2;
1563  int v_3;
1564  int v_4;
1565  int v_5;
1566  int v_6;
1567  int v_7;
1568  int v_8;
1569  int v_9;
1570  int v_10;
1571  int v_11;
1572  // (, line 221
1573  // do, line 223
1574  v_1 = cursor;
1575  do
1576  {
1577  // call prelude, line 223
1578  if (!r_prelude())
1579  {
1580  break;
1581  }
1582  } while (false);
1583  cursor = v_1;
1584  // do, line 224
1585  v_2 = cursor;
1586  do
1587  {
1588  // call mark_regions, line 224
1589  if (!r_mark_regions())
1590  {
1591  break;
1592  }
1593  } while (false);
1594  cursor = v_2;
1595  // backwards, line 225
1596  limit_backward = cursor; cursor = limit;
1597  // (, line 225
1598  // do, line 227
1599  v_3 = limit - cursor;
1600  do
1601  {
1602  // (, line 227
1603  // or, line 237
1604  do
1605  {
1606  v_4 = limit - cursor;
1607  do
1608  {
1609  // (, line 228
1610  // and, line 233
1611  v_5 = limit - cursor;
1612  // (, line 229
1613  // or, line 229
1614  do
1615  {
1616  v_6 = limit - cursor;
1617  do
1618  {
1619  // call standard_suffix, line 229
1620  if (!r_standard_suffix())
1621  {
1622  break;
1623  }
1624  subroot = true;
1625  if (subroot) break;
1626  } while (false);
1627 
1628  if (subroot) { subroot = false; break; }
1629 
1630  cursor = limit - v_6;
1631  do
1632  {
1633  // call i_verb_suffix, line 230
1634  if (!r_i_verb_suffix())
1635  {
1636  break;
1637  }
1638  subroot = true;
1639  if (subroot) break;
1640  } while (false);
1641 
1642  if (subroot) { subroot = false; break; }
1643 
1644  cursor = limit - v_6;
1645  // call verb_suffix, line 231
1646  if (!r_verb_suffix())
1647  {
1648  subroot = true;
1649  break;
1650  }
1651  } while (false);
1652 
1653  if (subroot) { subroot = false; break; }
1654 
1655  cursor = limit - v_5;
1656  // try, line 234
1657  v_7 = limit - cursor;
1658  do
1659  {
1660  // (, line 234
1661  // [, line 234
1662  ket = cursor;
1663  // or, line 234
1664  do
1665  {
1666  v_8 = limit - cursor;
1667  do
1668  {
1669  // (, line 234
1670  // literal, line 234
1671  if (!(eq_s_b(1, "Y")))
1672  {
1673  break;
1674  }
1675  // ], line 234
1676  bra = cursor;
1677  // <-, line 234
1678  slice_from("i");
1679  subroot = true;
1680  if (subroot) break;
1681  } while (false);
1682 
1683  if (subroot) { subroot = false; break; }
1684 
1685  cursor = limit - v_8;
1686  // (, line 235
1687  // literal, line 235
1688  if (!(eq_s_b(1, "\u00E7")))
1689  {
1690  cursor = limit - v_7;
1691  subroot = true;
1692  break;
1693  }
1694  // ], line 235
1695  bra = cursor;
1696  // <-, line 235
1697  slice_from("c");
1698  } while (false);
1699  if (subroot) { subroot = false; break; }
1700  } while (false);
1701  subroot = true;
1702  if (subroot) break;
1703  } while (false);
1704  if (subroot) { subroot = false; break; }
1705  cursor = limit - v_4;
1706  // call residual_suffix, line 238
1707  if (!r_residual_suffix())
1708  {
1709  subroot = true;
1710  break;
1711  }
1712  } while (false);
1713 
1714  if (subroot) { subroot = false; break; }
1715 
1716  } while (false);
1717  cursor = limit - v_3;
1718  // do, line 243
1719  v_9 = limit - cursor;
1720  // lab11:
1721  do
1722  {
1723  // call un_double, line 243
1724  if (!r_un_double())
1725  {
1726  break;
1727  }
1728  } while (false);
1729  cursor = limit - v_9;
1730  // do, line 244
1731  v_10 = limit - cursor;
1732  do
1733  {
1734  // call un_accent, line 244
1735  if (!r_un_accent())
1736  {
1737  break;
1738  }
1739  } while (false);
1740  cursor = limit - v_10;
1741  cursor = limit_backward; // do, line 246
1742  v_11 = cursor;
1743  do
1744  {
1745  // call postlude, line 246
1746  if (!r_postlude())
1747  {
1748  break;
1749  }
1750  } while (false);
1751  cursor = v_11;
1752  return true;
1753  }
1754 
1760  public string Stem(string s)
1761  {
1762  this.setCurrent(s.ToLowerInvariant());
1763  this.CanStem();
1764  return this.getCurrent();
1765  }
1766 
1767  }
1768 }