Lucene.Net  3.0.3
Lucene.Net is a port of the Lucene search engine library, written in C# and targeted at .NET runtime users.
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Properties Pages
FinnishStemmer.cs
Go to the documentation of this file.
1 /*
2  * Licensed to the Apache Software Foundation (ASF) under one or more
3  * contributor license agreements. See the NOTICE file distributed with
4  * this work for additional information regarding copyright ownership.
5  * The ASF licenses this file to You under the Apache License, Version 2.0
6  * (the "License"); you may not use this file except in compliance with
7  * the License. You may obtain a copy of the License at
8  *
9  * http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  */
17 
18 // This file was generated automatically by the Snowball to Java compiler
19 using System;
20 using Among = SF.Snowball.Among;
21 using SnowballProgram = SF.Snowball.SnowballProgram;
22 namespace SF.Snowball.Ext
23 {
24 #pragma warning disable 162,164
25 
26  /// <summary> Generated class implementing code defined by a snowball script.</summary>
28  {
29  public FinnishStemmer()
30  {
31  InitBlock();
32  }
33  private void InitBlock()
34  {
35  a_0 = new Among[]{new Among("pa", - 1, 1, "", this), new Among("sti", - 1, 2, "", this), new Among("kaan", - 1, 1, "", this), new Among("han", - 1, 1, "", this), new Among("kin", - 1, 1, "", this), new Among("h\u00E4n", - 1, 1, "", this), new Among("k\u00E4\u00E4n", - 1, 1, "", this), new Among("ko", - 1, 1, "", this), new Among("p\u00E4", - 1, 1, "", this), new Among("k\u00F6", - 1, 1, "", this)};
36  a_1 = new Among[]{new Among("lla", - 1, - 1, "", this), new Among("na", - 1, - 1, "", this), new Among("ssa", - 1, - 1, "", this), new Among("ta", - 1, - 1, "", this), new Among("lta", 3, - 1, "", this), new Among("sta", 3, - 1, "", this)};
37  a_2 = new Among[]{new Among("ll\u00E4", - 1, - 1, "", this), new Among("n\u00E4", - 1, - 1, "", this), new Among("ss\u00E4", - 1, - 1, "", this), new Among("t\u00E4", - 1, - 1, "", this), new Among("lt\u00E4", 3, - 1, "", this), new Among("st\u00E4", 3, - 1, "", this)};
38  a_3 = new Among[]{new Among("lle", - 1, - 1, "", this), new Among("ine", - 1, - 1, "", this)};
39  a_4 = new Among[]{new Among("nsa", - 1, 3, "", this), new Among("mme", - 1, 3, "", this), new Among("nne", - 1, 3, "", this), new Among("ni", - 1, 2, "", this), new Among("si", - 1, 1, "", this), new Among("an", - 1, 4, "", this), new Among("en", - 1, 6, "", this), new Among("\u00E4n", - 1, 5, "", this), new Among("ns\u00E4", - 1, 3, "", this)};
40  a_5 = new Among[]{new Among("aa", - 1, - 1, "", this), new Among("ee", - 1, - 1, "", this), new Among("ii", - 1, - 1, "", this), new Among("oo", - 1, - 1, "", this), new Among("uu", - 1, - 1, "", this), new Among("\u00E4\u00E4", - 1, - 1, "", this), new Among("\u00F6\u00F6", - 1, - 1, "", this)};
41  a_6 = new Among[]{new Among("a", - 1, 8, "", this), new Among("lla", 0, - 1, "", this), new Among("na", 0, - 1, "", this), new Among("ssa", 0, - 1, "", this), new Among("ta", 0, - 1, "", this), new Among("lta", 4, - 1, "", this), new Among("sta", 4, - 1, "", this), new Among("tta", 4, 9, "", this), new Among("lle", - 1, - 1, "", this), new Among("ine", - 1, - 1, "", this), new Among("ksi", - 1, - 1, "", this), new Among("n", - 1, 7, "", this), new Among("han", 11, 1, "", this), new Among("den", 11, - 1, "r_VI", this), new Among("seen", 11, - 1, "r_LONG", this), new Among("hen", 11, 2, "", this), new Among("tten", 11, - 1, "r_VI", this), new Among("hin", 11, 3, "", this), new Among("siin", 11, - 1, "r_VI", this), new Among("hon", 11, 4, "", this), new Among("h\u00E4n", 11, 5, "", this), new Among("h\u00F6n", 11, 6, "", this), new Among("\u00E4", - 1, 8, "", this), new Among("ll\u00E4", 22, - 1, "", this), new Among("n\u00E4", 22, - 1, "", this), new Among("ss\u00E4", 22, - 1, "", this), new Among("t\u00E4", 22, - 1, "", this), new Among("lt\u00E4", 26, - 1, "", this), new Among("st\u00E4", 26, - 1, "", this), new Among("tt\u00E4", 26, 9, "", this)};
42  a_7 = new Among[]{new Among("eja", - 1, - 1, "", this), new Among("mma", - 1, 1, "", this), new Among("imma", 1, - 1, "", this), new Among("mpa", - 1, 1, "", this), new Among("impa", 3, - 1, "", this), new Among("mmi", - 1, 1, "", this), new Among("immi", 5, - 1, "", this), new Among("mpi", - 1, 1, "", this), new Among("impi", 7, - 1, "", this), new Among("ej\u00E4", - 1, - 1, "", this), new Among("mm\u00E4", - 1, 1, "", this), new Among("imm\u00E4", 10, - 1, "", this), new Among("mp\u00E4", - 1, 1, "", this), new Among("imp\u00E4", 12, - 1, "", this)};
43  a_8 = new Among[]{new Among("i", - 1, - 1, "", this), new Among("j", - 1, - 1, "", this)};
44  a_9 = new Among[]{new Among("mma", - 1, 1, "", this), new Among("imma", 0, - 1, "", this)};
45  }
46 
47  private Among[] a_0;
48  private Among[] a_1;
49  private Among[] a_2;
50  private Among[] a_3;
51  private Among[] a_4;
52  private Among[] a_5;
53  private Among[] a_6;
54  private Among[] a_7;
55  private Among[] a_8;
56  private Among[] a_9;
57 
58  private static readonly char[] g_AEI = new char[]{(char) (17), (char) (1), (char) (0), (char) (0), (char) (0), (char) (0), (char) (0), (char) (0), (char) (0), (char) (0), (char) (0), (char) (0), (char) (0), (char) (0), (char) (0), (char) (0), (char) (8)};
59  private static readonly char[] g_v = new char[]{(char) (17), (char) (65), (char) (16), (char) (1), (char) (0), (char) (0), (char) (0), (char) (0), (char) (0), (char) (0), (char) (0), (char) (0), (char) (0), (char) (0), (char) (0), (char) (0), (char) (8), (char) (0), (char) (32)};
60  private static readonly char[] g_V = new char[]{(char) (17), (char) (65), (char) (16), (char) (0), (char) (0), (char) (0), (char) (0), (char) (0), (char) (0), (char) (0), (char) (0), (char) (0), (char) (0), (char) (0), (char) (0), (char) (0), (char) (8), (char) (0), (char) (32)};
61  private static readonly char[] g_particle_end = new char[]{(char) (17), (char) (97), (char) (24), (char) (1), (char) (0), (char) (0), (char) (0), (char) (0), (char) (0), (char) (0), (char) (0), (char) (0), (char) (0), (char) (0), (char) (0), (char) (0), (char) (8), (char) (0), (char) (32)};
62 
63  private bool B_ending_removed;
64  private System.Text.StringBuilder S_x = new System.Text.StringBuilder();
65  private int I_p2;
66  private int I_p1;
67 
68  protected internal virtual void copy_from(FinnishStemmer other)
69  {
70  B_ending_removed = other.B_ending_removed;
71  S_x = other.S_x;
72  I_p2 = other.I_p2;
73  I_p1 = other.I_p1;
74  base.copy_from(other);
75  }
76 
77  private bool r_mark_regions()
78  {
79  int v_1;
80  int v_3;
81  // (, line 41
82  I_p1 = limit;
83  I_p2 = limit;
84  // goto, line 46
85  while (true)
86  {
87  v_1 = cursor;
88  do
89  {
90  if (!(in_grouping(g_v, 97, 246)))
91  {
92  goto lab1_brk;
93  }
94  cursor = v_1;
95  goto golab0_brk;
96  }
97  while (false);
98 
99 lab1_brk: ;
100 
101  cursor = v_1;
102  if (cursor >= limit)
103  {
104  return false;
105  }
106  cursor++;
107  }
108 
109 golab0_brk: ;
110 
111  // gopast, line 46
112  while (true)
113  {
114  do
115  {
116  if (!(out_grouping(g_v, 97, 246)))
117  {
118  goto lab3_brk;
119  }
120  goto golab2_brk;
121  }
122  while (false);
123 
124 lab3_brk: ;
125 
126  if (cursor >= limit)
127  {
128  return false;
129  }
130  cursor++;
131  }
132 
133 golab2_brk: ;
134 
135  // setmark p1, line 46
136  I_p1 = cursor;
137  // goto, line 47
138  while (true)
139  {
140  v_3 = cursor;
141  do
142  {
143  if (!(in_grouping(g_v, 97, 246)))
144  {
145  goto lab5_brk;
146  }
147  cursor = v_3;
148  goto golab4_brk;
149  }
150  while (false);
151 
152 lab5_brk: ;
153 
154  cursor = v_3;
155  if (cursor >= limit)
156  {
157  return false;
158  }
159  cursor++;
160  }
161 
162 golab4_brk: ;
163 
164  // gopast, line 47
165  while (true)
166  {
167  do
168  {
169  if (!(out_grouping(g_v, 97, 246)))
170  {
171  goto lab7_brk;
172  }
173  goto golab6_brk;
174  }
175  while (false);
176 
177 lab7_brk: ;
178 
179  if (cursor >= limit)
180  {
181  return false;
182  }
183  cursor++;
184  }
185 
186 golab6_brk: ;
187 
188  // setmark p2, line 47
189  I_p2 = cursor;
190  return true;
191  }
192 
193  private bool r_R2()
194  {
195  if (!(I_p2 <= cursor))
196  {
197  return false;
198  }
199  return true;
200  }
201 
202  private bool r_particle_etc()
203  {
204  int among_var;
205  int v_1;
206  int v_2;
207  // (, line 54
208  // setlimit, line 55
209  v_1 = limit - cursor;
210  // tomark, line 55
211  if (cursor < I_p1)
212  {
213  return false;
214  }
215  cursor = I_p1;
216  v_2 = limit_backward;
217  limit_backward = cursor;
218  cursor = limit - v_1;
219  // (, line 55
220  // [, line 55
221  ket = cursor;
222  // substring, line 55
223  among_var = find_among_b(a_0, 10);
224  if (among_var == 0)
225  {
226  limit_backward = v_2;
227  return false;
228  }
229  // ], line 55
230  bra = cursor;
231  limit_backward = v_2;
232  switch (among_var)
233  {
234 
235  case 0:
236  return false;
237 
238  case 1:
239  // (, line 62
240  if (!(in_grouping_b(g_particle_end, 97, 246)))
241  {
242  return false;
243  }
244  break;
245 
246  case 2:
247  // (, line 64
248  // call R2, line 64
249  if (!r_R2())
250  {
251  return false;
252  }
253  break;
254  }
255  // delete, line 66
256  slice_del();
257  return true;
258  }
259 
260  private bool r_possessive()
261  {
262  int among_var;
263  int v_1;
264  int v_2;
265  int v_3;
266  // (, line 68
267  // setlimit, line 69
268  v_1 = limit - cursor;
269  // tomark, line 69
270  if (cursor < I_p1)
271  {
272  return false;
273  }
274  cursor = I_p1;
275  v_2 = limit_backward;
276  limit_backward = cursor;
277  cursor = limit - v_1;
278  // (, line 69
279  // [, line 69
280  ket = cursor;
281  // substring, line 69
282  among_var = find_among_b(a_4, 9);
283  if (among_var == 0)
284  {
285  limit_backward = v_2;
286  return false;
287  }
288  // ], line 69
289  bra = cursor;
290  limit_backward = v_2;
291  switch (among_var)
292  {
293 
294  case 0:
295  return false;
296 
297  case 1:
298  // (, line 72
299  // not, line 72
300  {
301  v_3 = limit - cursor;
302  do
303  {
304  // literal, line 72
305  if (!(eq_s_b(1, "k")))
306  {
307  goto lab0_brk;
308  }
309  return false;
310  }
311  while (false);
312 
313 lab0_brk: ;
314 
315  cursor = limit - v_3;
316  }
317  // delete, line 72
318  slice_del();
319  break;
320 
321  case 2:
322  // (, line 74
323  // delete, line 74
324  slice_del();
325  // [, line 74
326  ket = cursor;
327  // literal, line 74
328  if (!(eq_s_b(3, "kse")))
329  {
330  return false;
331  }
332  // ], line 74
333  bra = cursor;
334  // <-, line 74
335  slice_from("ksi");
336  break;
337 
338  case 3:
339  // (, line 78
340  // delete, line 78
341  slice_del();
342  break;
343 
344  case 4:
345  // (, line 81
346  // among, line 81
347  if (find_among_b(a_1, 6) == 0)
348  {
349  return false;
350  }
351  // delete, line 81
352  slice_del();
353  break;
354 
355  case 5:
356  // (, line 83
357  // among, line 83
358  if (find_among_b(a_2, 6) == 0)
359  {
360  return false;
361  }
362  // delete, line 84
363  slice_del();
364  break;
365 
366  case 6:
367  // (, line 86
368  // among, line 86
369  if (find_among_b(a_3, 2) == 0)
370  {
371  return false;
372  }
373  // delete, line 86
374  slice_del();
375  break;
376  }
377  return true;
378  }
379 
380  private bool r_LONG()
381  {
382  // among, line 91
383  if (find_among_b(a_5, 7) == 0)
384  {
385  return false;
386  }
387  return true;
388  }
389 
390  private bool r_VI()
391  {
392  // (, line 93
393  // literal, line 93
394  if (!(eq_s_b(1, "i")))
395  {
396  return false;
397  }
398  if (!(in_grouping_b(g_V, 97, 246)))
399  {
400  return false;
401  }
402  return true;
403  }
404 
405  private bool r_case()
406  {
407  int among_var;
408  int v_1;
409  int v_2;
410  int v_3;
411  int v_4;
412  int v_5;
413  // (, line 95
414  // setlimit, line 96
415  v_1 = limit - cursor;
416  // tomark, line 96
417  if (cursor < I_p1)
418  {
419  return false;
420  }
421  cursor = I_p1;
422  v_2 = limit_backward;
423  limit_backward = cursor;
424  cursor = limit - v_1;
425  // (, line 96
426  // [, line 96
427  ket = cursor;
428  // substring, line 96
429  among_var = find_among_b(a_6, 30);
430  if (among_var == 0)
431  {
432  limit_backward = v_2;
433  return false;
434  }
435  // ], line 96
436  bra = cursor;
437  limit_backward = v_2;
438  switch (among_var)
439  {
440 
441  case 0:
442  return false;
443 
444  case 1:
445  // (, line 98
446  // literal, line 98
447  if (!(eq_s_b(1, "a")))
448  {
449  return false;
450  }
451  break;
452 
453  case 2:
454  // (, line 99
455  // literal, line 99
456  if (!(eq_s_b(1, "e")))
457  {
458  return false;
459  }
460  break;
461 
462  case 3:
463  // (, line 100
464  // literal, line 100
465  if (!(eq_s_b(1, "i")))
466  {
467  return false;
468  }
469  break;
470 
471  case 4:
472  // (, line 101
473  // literal, line 101
474  if (!(eq_s_b(1, "o")))
475  {
476  return false;
477  }
478  break;
479 
480  case 5:
481  // (, line 102
482  // literal, line 102
483  if (!(eq_s_b(1, "\u00E4")))
484  {
485  return false;
486  }
487  break;
488 
489  case 6:
490  // (, line 103
491  // literal, line 103
492  if (!(eq_s_b(1, "\u00F6")))
493  {
494  return false;
495  }
496  break;
497 
498  case 7:
499  // (, line 111
500  // try, line 111
501  v_3 = limit - cursor;
502  do
503  {
504  // (, line 111
505  // and, line 113
506  v_4 = limit - cursor;
507  // or, line 112
508  do
509  {
510  v_5 = limit - cursor;
511  do
512  {
513  // call LONG, line 111
514  if (!r_LONG())
515  {
516  goto lab2_brk;
517  }
518  goto lab1_brk;
519  }
520  while (false);
521 
522 lab2_brk: ;
523 
524  cursor = limit - v_5;
525  // literal, line 112
526  if (!(eq_s_b(2, "ie")))
527  {
528  cursor = limit - v_3;
529  goto lab0_brk;
530  }
531  }
532  while (false);
533 
534 lab1_brk: ;
535 
536  cursor = limit - v_4;
537  // next, line 113
538  if (cursor <= limit_backward)
539  {
540  cursor = limit - v_3;
541  goto lab0_brk;
542  }
543  cursor--;
544  // ], line 113
545  bra = cursor;
546  }
547  while (false);
548 
549 lab0_brk: ;
550 
551  break;
552 
553  case 8:
554  // (, line 119
555  if (!(in_grouping_b(g_v, 97, 246)))
556  {
557  return false;
558  }
559  if (!(out_grouping_b(g_v, 97, 246)))
560  {
561  return false;
562  }
563  break;
564 
565  case 9:
566  // (, line 121
567  // literal, line 121
568  if (!(eq_s_b(1, "e")))
569  {
570  return false;
571  }
572  break;
573  }
574  // delete, line 138
575  slice_del();
576  // set ending_removed, line 139
577  B_ending_removed = true;
578  return true;
579  }
580 
581  private bool r_other_endings()
582  {
583  int among_var;
584  int v_1;
585  int v_2;
586  int v_3;
587  // (, line 141
588  // setlimit, line 142
589  v_1 = limit - cursor;
590  // tomark, line 142
591  if (cursor < I_p2)
592  {
593  return false;
594  }
595  cursor = I_p2;
596  v_2 = limit_backward;
597  limit_backward = cursor;
598  cursor = limit - v_1;
599  // (, line 142
600  // [, line 142
601  ket = cursor;
602  // substring, line 142
603  among_var = find_among_b(a_7, 14);
604  if (among_var == 0)
605  {
606  limit_backward = v_2;
607  return false;
608  }
609  // ], line 142
610  bra = cursor;
611  limit_backward = v_2;
612  switch (among_var)
613  {
614 
615  case 0:
616  return false;
617 
618  case 1:
619  // (, line 146
620  // not, line 146
621  {
622  v_3 = limit - cursor;
623  do
624  {
625  // literal, line 146
626  if (!(eq_s_b(2, "po")))
627  {
628  goto lab4_brk;
629  }
630  return false;
631  }
632  while (false);
633 
634 lab4_brk: ;
635 
636  cursor = limit - v_3;
637  }
638  break;
639  }
640  // delete, line 151
641  slice_del();
642  return true;
643  }
644 
645  private bool r_i_plural()
646  {
647  int v_1;
648  int v_2;
649  // (, line 153
650  // setlimit, line 154
651  v_1 = limit - cursor;
652  // tomark, line 154
653  if (cursor < I_p1)
654  {
655  return false;
656  }
657  cursor = I_p1;
658  v_2 = limit_backward;
659  limit_backward = cursor;
660  cursor = limit - v_1;
661  // (, line 154
662  // [, line 154
663  ket = cursor;
664  // substring, line 154
665  if (find_among_b(a_8, 2) == 0)
666  {
667  limit_backward = v_2;
668  return false;
669  }
670  // ], line 154
671  bra = cursor;
672  limit_backward = v_2;
673  // delete, line 158
674  slice_del();
675  return true;
676  }
677 
678  private bool r_t_plural()
679  {
680  int among_var;
681  int v_1;
682  int v_2;
683  int v_3;
684  int v_4;
685  int v_5;
686  int v_6;
687  // (, line 160
688  // setlimit, line 161
689  v_1 = limit - cursor;
690  // tomark, line 161
691  if (cursor < I_p1)
692  {
693  return false;
694  }
695  cursor = I_p1;
696  v_2 = limit_backward;
697  limit_backward = cursor;
698  cursor = limit - v_1;
699  // (, line 161
700  // [, line 162
701  ket = cursor;
702  // literal, line 162
703  if (!(eq_s_b(1, "t")))
704  {
705  limit_backward = v_2;
706  return false;
707  }
708  // ], line 162
709  bra = cursor;
710  // test, line 162
711  v_3 = limit - cursor;
712  if (!(in_grouping_b(g_v, 97, 246)))
713  {
714  limit_backward = v_2;
715  return false;
716  }
717  cursor = limit - v_3;
718  // delete, line 163
719  slice_del();
720  limit_backward = v_2;
721  // setlimit, line 165
722  v_4 = limit - cursor;
723  // tomark, line 165
724  if (cursor < I_p2)
725  {
726  return false;
727  }
728  cursor = I_p2;
729  v_5 = limit_backward;
730  limit_backward = cursor;
731  cursor = limit - v_4;
732  // (, line 165
733  // [, line 165
734  ket = cursor;
735  // substring, line 165
736  among_var = find_among_b(a_9, 2);
737  if (among_var == 0)
738  {
739  limit_backward = v_5;
740  return false;
741  }
742  // ], line 165
743  bra = cursor;
744  limit_backward = v_5;
745  switch (among_var)
746  {
747 
748  case 0:
749  return false;
750 
751  case 1:
752  // (, line 167
753  // not, line 167
754  {
755  v_6 = limit - cursor;
756  do
757  {
758  // literal, line 167
759  if (!(eq_s_b(2, "po")))
760  {
761  goto lab4_brk;
762  }
763  return false;
764  }
765  while (false);
766 
767 lab4_brk: ;
768 
769  cursor = limit - v_6;
770  }
771  break;
772  }
773  // delete, line 170
774  slice_del();
775  return true;
776  }
777 
778  private bool r_tidy()
779  {
780  int v_1;
781  int v_2;
782  int v_3;
783  int v_4;
784  int v_5;
785  int v_6;
786  int v_7;
787  int v_8;
788  int v_9;
789  // (, line 172
790  // setlimit, line 173
791  v_1 = limit - cursor;
792  // tomark, line 173
793  if (cursor < I_p1)
794  {
795  return false;
796  }
797  cursor = I_p1;
798  v_2 = limit_backward;
799  limit_backward = cursor;
800  cursor = limit - v_1;
801  // (, line 173
802  // do, line 174
803  v_3 = limit - cursor;
804  do
805  {
806  // (, line 174
807  // and, line 174
808  v_4 = limit - cursor;
809  // call LONG, line 174
810  if (!r_LONG())
811  {
812  goto lab0_brk;
813  }
814  cursor = limit - v_4;
815  // (, line 174
816  // [, line 174
817  ket = cursor;
818  // next, line 174
819  if (cursor <= limit_backward)
820  {
821  goto lab0_brk;
822  }
823  cursor--;
824  // ], line 174
825  bra = cursor;
826  // delete, line 174
827  slice_del();
828  }
829  while (false);
830 
831 lab0_brk: ;
832 
833  cursor = limit - v_3;
834  // do, line 175
835  v_5 = limit - cursor;
836  do
837  {
838  // (, line 175
839  // [, line 175
840  ket = cursor;
841  if (!(in_grouping_b(g_AEI, 97, 228)))
842  {
843  goto lab1_brk;
844  }
845  // ], line 175
846  bra = cursor;
847  if (!(out_grouping_b(g_v, 97, 246)))
848  {
849  goto lab1_brk;
850  }
851  // delete, line 175
852  slice_del();
853  }
854  while (false);
855 
856 lab1_brk: ;
857 
858  cursor = limit - v_5;
859  // do, line 176
860  v_6 = limit - cursor;
861  do
862  {
863  // (, line 176
864  // [, line 176
865  ket = cursor;
866  // literal, line 176
867  if (!(eq_s_b(1, "j")))
868  {
869  goto lab2_brk;
870  }
871  // ], line 176
872  bra = cursor;
873  // or, line 176
874  do
875  {
876  v_7 = limit - cursor;
877  do
878  {
879  // literal, line 176
880  if (!(eq_s_b(1, "o")))
881  {
882  goto lab4_brk;
883  }
884  goto lab3_brk;
885  }
886  while (false);
887 
888 lab4_brk: ;
889 
890  cursor = limit - v_7;
891  // literal, line 176
892  if (!(eq_s_b(1, "u")))
893  {
894  goto lab2_brk;
895  }
896  }
897  while (false);
898 
899 lab3_brk: ;
900 
901  // delete, line 176
902  slice_del();
903  }
904  while (false);
905 
906 lab2_brk: ;
907 
908  cursor = limit - v_6;
909  // do, line 177
910  v_8 = limit - cursor;
911  do
912  {
913  // (, line 177
914  // [, line 177
915  ket = cursor;
916  // literal, line 177
917  if (!(eq_s_b(1, "o")))
918  {
919  goto lab5_brk;
920  }
921  // ], line 177
922  bra = cursor;
923  // literal, line 177
924  if (!(eq_s_b(1, "j")))
925  {
926  goto lab5_brk;
927  }
928  // delete, line 177
929  slice_del();
930  }
931  while (false);
932 
933 lab5_brk: ;
934 
935  cursor = limit - v_8;
936  limit_backward = v_2;
937  // goto, line 179
938  while (true)
939  {
940  v_9 = limit - cursor;
941  do
942  {
943  if (!(out_grouping_b(g_v, 97, 246)))
944  {
945  goto lab7_brk;
946  }
947  cursor = limit - v_9;
948  goto golab6_brk;
949  }
950  while (false);
951 
952 lab7_brk: ;
953 
954  cursor = limit - v_9;
955  if (cursor <= limit_backward)
956  {
957  return false;
958  }
959  cursor--;
960  }
961 
962 golab6_brk: ;
963 
964  // [, line 179
965  ket = cursor;
966  // next, line 179
967  if (cursor <= limit_backward)
968  {
969  return false;
970  }
971  cursor--;
972  // ], line 179
973  bra = cursor;
974  // -> x, line 179
975  S_x = slice_to(S_x);
976  // name x, line 179
977  if (!(eq_v_b(S_x)))
978  {
979  return false;
980  }
981  // delete, line 179
982  slice_del();
983  return true;
984  }
985 
986  public override bool Stem()
987  {
988  int v_1;
989  int v_2;
990  int v_3;
991  int v_4;
992  int v_5;
993  int v_6;
994  int v_7;
995  int v_8;
996  int v_9;
997  // (, line 183
998  // do, line 185
999  v_1 = cursor;
1000  do
1001  {
1002  // call mark_regions, line 185
1003  if (!r_mark_regions())
1004  {
1005  goto lab0_brk;
1006  }
1007  }
1008  while (false);
1009 
1010 lab0_brk: ;
1011 
1012  cursor = v_1;
1013  // unset ending_removed, line 186
1014  B_ending_removed = false;
1015  // backwards, line 187
1016  limit_backward = cursor; cursor = limit;
1017  // (, line 187
1018  // do, line 188
1019  v_2 = limit - cursor;
1020  do
1021  {
1022  // call particle_etc, line 188
1023  if (!r_particle_etc())
1024  {
1025  goto lab1_brk;
1026  }
1027  }
1028  while (false);
1029 
1030 lab1_brk: ;
1031 
1032  cursor = limit - v_2;
1033  // do, line 189
1034  v_3 = limit - cursor;
1035  do
1036  {
1037  // call possessive, line 189
1038  if (!r_possessive())
1039  {
1040  goto lab2_brk;
1041  }
1042  }
1043  while (false);
1044 
1045 lab2_brk: ;
1046 
1047  cursor = limit - v_3;
1048  // do, line 190
1049  v_4 = limit - cursor;
1050  do
1051  {
1052  // call case, line 190
1053  if (!r_case())
1054  {
1055  goto lab3_brk;
1056  }
1057  }
1058  while (false);
1059 
1060 lab3_brk: ;
1061 
1062  cursor = limit - v_4;
1063  // do, line 191
1064  v_5 = limit - cursor;
1065  do
1066  {
1067  // call other_endings, line 191
1068  if (!r_other_endings())
1069  {
1070  goto lab4_brk;
1071  }
1072  }
1073  while (false);
1074 
1075 lab4_brk: ;
1076 
1077  cursor = limit - v_5;
1078  // or, line 192
1079  do
1080  {
1081  v_6 = limit - cursor;
1082  do
1083  {
1084  // (, line 192
1085  // Boolean test ending_removed, line 192
1086  if (!(B_ending_removed))
1087  {
1088  goto lab6_brk;
1089  }
1090  // do, line 192
1091  v_7 = limit - cursor;
1092  do
1093  {
1094  // call i_plural, line 192
1095  if (!r_i_plural())
1096  {
1097  goto lab7_brk;
1098  }
1099  }
1100  while (false);
1101 
1102 lab7_brk: ;
1103 
1104  cursor = limit - v_7;
1105  goto lab6_brk;
1106  }
1107  while (false);
1108 
1109 lab6_brk: ;
1110 
1111  cursor = limit - v_6;
1112  // do, line 192
1113  v_8 = limit - cursor;
1114  do
1115  {
1116  // call t_plural, line 192
1117  if (!r_t_plural())
1118  {
1119  goto lab8_brk;
1120  }
1121  }
1122  while (false);
1123 
1124 lab8_brk: ;
1125 
1126  cursor = limit - v_8;
1127  }
1128  while (false);
1129 
1130 lab5_brk: ;
1131 
1132  // do, line 193
1133  v_9 = limit - cursor;
1134  do
1135  {
1136  // call tidy, line 193
1137  if (!r_tidy())
1138  {
1139  goto lab9_brk;
1140  }
1141  }
1142  while (false);
1143 
1144 lab9_brk: ;
1145 
1146  cursor = limit - v_9;
1147  cursor = limit_backward; return true;
1148  }
1149  }
1150 }