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