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
German2Stemmer.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 German2Stemmer()
30  {
31  InitBlock();
32  }
33  private void InitBlock()
34  {
35  a_0 = new Among[]{new Among("", - 1, 6, "", this), new Among("ae", 0, 2, "", this), new Among("oe", 0, 3, "", this), new Among("qu", 0, 5, "", this), new Among("ue", 0, 4, "", this), new Among("\u00DF", 0, 1, "", this)};
36  a_1 = new Among[]{new Among("", - 1, 6, "", this), new Among("U", 0, 2, "", this), new Among("Y", 0, 1, "", this), new Among("\u00E4", 0, 3, "", this), new Among("\u00F6", 0, 4, "", this), new Among("\u00FC", 0, 5, "", this)};
37  a_2 = new Among[]{new Among("e", - 1, 1, "", this), new Among("em", - 1, 1, "", this), new Among("en", - 1, 1, "", this), new Among("ern", - 1, 1, "", this), new Among("er", - 1, 1, "", this), new Among("s", - 1, 2, "", this), new Among("es", 5, 1, "", this)};
38  a_3 = new Among[]{new Among("en", - 1, 1, "", this), new Among("er", - 1, 1, "", this), new Among("st", - 1, 2, "", this), new Among("est", 2, 1, "", this)};
39  a_4 = new Among[]{new Among("ig", - 1, 1, "", this), new Among("lich", - 1, 1, "", this)};
40  a_5 = new Among[]{new Among("end", - 1, 1, "", this), new Among("ig", - 1, 2, "", this), new Among("ung", - 1, 1, "", this), new Among("lich", - 1, 3, "", this), new Among("isch", - 1, 2, "", this), new Among("ik", - 1, 2, "", this), new Among("heit", - 1, 3, "", this), new Among("keit", - 1, 4, "", this)};
41  }
42 
43  private Among[] a_0;
44  private Among[] a_1;
45  private Among[] a_2;
46  private Among[] a_3;
47  private Among[] a_4;
48  private Among[] a_5;
49  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), (char) (8)};
50  private static readonly char[] g_s_ending = new char[]{(char) (117), (char) (30), (char) (5)};
51  private static readonly char[] g_st_ending = new char[]{(char) (117), (char) (30), (char) (4)};
52 
53  private int I_p2;
54  private int I_p1;
55 
56  protected internal virtual void copy_from(German2Stemmer other)
57  {
58  I_p2 = other.I_p2;
59  I_p1 = other.I_p1;
60  base.copy_from(other);
61  }
62 
63  private bool r_prelude()
64  {
65  int among_var;
66  int v_1;
67  int v_2;
68  int v_3;
69  int v_4;
70  int v_5;
71  // (, line 28
72  // test, line 30
73  v_1 = cursor;
74  // repeat, line 30
75  while (true)
76  {
77  v_2 = cursor;
78  do
79  {
80  // goto, line 30
81  while (true)
82  {
83  v_3 = cursor;
84  do
85  {
86  // (, line 30
87  if (!(in_grouping(g_v, 97, 252)))
88  {
89  goto lab3_brk;
90  }
91  // [, line 31
92  bra = cursor;
93  // or, line 31
94  do
95  {
96  v_4 = cursor;
97  do
98  {
99  // (, line 31
100  // literal, line 31
101  if (!(eq_s(1, "u")))
102  {
103  goto lab5_brk;
104  }
105  // ], line 31
106  ket = cursor;
107  if (!(in_grouping(g_v, 97, 252)))
108  {
109  goto lab5_brk;
110  }
111  // <-, line 31
112  slice_from("U");
113  goto lab4_brk;
114  }
115  while (false);
116 
117 lab5_brk: ;
118 
119  cursor = v_4;
120  // (, line 32
121  // literal, line 32
122  if (!(eq_s(1, "y")))
123  {
124  goto lab3_brk;
125  }
126  // ], line 32
127  ket = cursor;
128  if (!(in_grouping(g_v, 97, 252)))
129  {
130  goto lab3_brk;
131  }
132  // <-, line 32
133  slice_from("Y");
134  }
135  while (false);
136 
137 lab4_brk: ;
138 
139  cursor = v_3;
140  goto golab2_brk;
141  }
142  while (false);
143 
144 lab3_brk: ;
145 
146  cursor = v_3;
147  if (cursor >= limit)
148  {
149  goto lab1_brk;
150  }
151  cursor++;
152  }
153 
154 golab2_brk: ;
155 
156  goto replab0;
157  }
158  while (false);
159 
160 lab1_brk: ;
161 
162  cursor = v_2;
163  goto replab0_brk;
164 
165 replab0: ;
166  }
167 
168 replab0_brk: ;
169 
170  cursor = v_1;
171  // repeat, line 35
172  while (true)
173  {
174  v_5 = cursor;
175  do
176  {
177  // (, line 35
178  // [, line 36
179  bra = cursor;
180  // substring, line 36
181  among_var = find_among(a_0, 6);
182  if (among_var == 0)
183  {
184  goto lab7_brk;
185  }
186  // ], line 36
187  ket = cursor;
188  switch (among_var)
189  {
190 
191  case 0:
192  goto lab7_brk;
193 
194  case 1:
195  // (, line 37
196  // <-, line 37
197  slice_from("ss");
198  break;
199 
200  case 2:
201  // (, line 38
202  // <-, line 38
203  slice_from("\u00E4");
204  break;
205 
206  case 3:
207  // (, line 39
208  // <-, line 39
209  slice_from("\u00F6");
210  break;
211 
212  case 4:
213  // (, line 40
214  // <-, line 40
215  slice_from("\u00FC");
216  break;
217 
218  case 5:
219  // (, line 41
220  // hop, line 41
221  {
222  int c = cursor + 2;
223  if (0 > c || c > limit)
224  {
225  goto lab7_brk;
226  }
227  cursor = c;
228  }
229  break;
230 
231  case 6:
232  // (, line 42
233  // next, line 42
234  if (cursor >= limit)
235  {
236  goto lab7_brk;
237  }
238  cursor++;
239  break;
240  }
241  goto replab6;
242  }
243  while (false);
244 
245 lab7_brk: ;
246 
247  cursor = v_5;
248  goto replab6_brk;
249 
250 replab6: ;
251  }
252 
253 replab6_brk: ;
254 
255  return true;
256  }
257 
258  private bool r_mark_regions()
259  {
260  // (, line 48
261  I_p1 = limit;
262  I_p2 = limit;
263  // gopast, line 53
264  while (true)
265  {
266  do
267  {
268  if (!(in_grouping(g_v, 97, 252)))
269  {
270  goto lab1_brk;
271  }
272  goto golab0_brk;
273  }
274  while (false);
275 
276 lab1_brk: ;
277 
278  if (cursor >= limit)
279  {
280  return false;
281  }
282  cursor++;
283  }
284 
285 golab0_brk: ;
286 
287  // gopast, line 53
288  while (true)
289  {
290  do
291  {
292  if (!(out_grouping(g_v, 97, 252)))
293  {
294  goto lab3_brk;
295  }
296  goto golab2_brk;
297  }
298  while (false);
299 
300 lab3_brk: ;
301 
302  if (cursor >= limit)
303  {
304  return false;
305  }
306  cursor++;
307  }
308 
309 golab2_brk: ;
310 
311  // setmark p1, line 53
312  I_p1 = cursor;
313  // try, line 54
314  do
315  {
316  // (, line 54
317  if (!(I_p1 < 3))
318  {
319  goto lab4_brk;
320  }
321  I_p1 = 3;
322  }
323  while (false);
324 
325 lab4_brk: ;
326 
327  // gopast, line 55
328  while (true)
329  {
330  do
331  {
332  if (!(in_grouping(g_v, 97, 252)))
333  {
334  goto lab6_brk;
335  }
336  goto golab5_brk;
337  }
338  while (false);
339 
340 lab6_brk: ;
341 
342  if (cursor >= limit)
343  {
344  return false;
345  }
346  cursor++;
347  }
348 
349 golab5_brk: ;
350 
351  // gopast, line 55
352  while (true)
353  {
354  do
355  {
356  if (!(out_grouping(g_v, 97, 252)))
357  {
358  goto lab8_brk;
359  }
360  goto golab7_brk;
361  }
362  while (false);
363 
364 lab8_brk: ;
365 
366  if (cursor >= limit)
367  {
368  return false;
369  }
370  cursor++;
371  }
372 
373 golab7_brk: ;
374 
375  // setmark p2, line 55
376  I_p2 = cursor;
377  return true;
378  }
379 
380  private bool r_postlude()
381  {
382  int among_var;
383  int v_1;
384  // repeat, line 59
385  while (true)
386  {
387  v_1 = cursor;
388  do
389  {
390  // (, line 59
391  // [, line 61
392  bra = cursor;
393  // substring, line 61
394  among_var = find_among(a_1, 6);
395  if (among_var == 0)
396  {
397  goto lab2_brk;
398  }
399  // ], line 61
400  ket = cursor;
401  switch (among_var)
402  {
403 
404  case 0:
405  goto lab2_brk;
406 
407  case 1:
408  // (, line 62
409  // <-, line 62
410  slice_from("y");
411  break;
412 
413  case 2:
414  // (, line 63
415  // <-, line 63
416  slice_from("u");
417  break;
418 
419  case 3:
420  // (, line 64
421  // <-, line 64
422  slice_from("a");
423  break;
424 
425  case 4:
426  // (, line 65
427  // <-, line 65
428  slice_from("o");
429  break;
430 
431  case 5:
432  // (, line 66
433  // <-, line 66
434  slice_from("u");
435  break;
436 
437  case 6:
438  // (, line 67
439  // next, line 67
440  if (cursor >= limit)
441  {
442  goto lab2_brk;
443  }
444  cursor++;
445  break;
446  }
447  goto replab1;
448  }
449  while (false);
450 
451 lab2_brk: ;
452 
453  cursor = v_1;
454  goto replab1_brk;
455 
456 replab1: ;
457  }
458 
459 replab1_brk: ;
460 
461  return true;
462  }
463 
464  private bool r_R1()
465  {
466  if (!(I_p1 <= cursor))
467  {
468  return false;
469  }
470  return true;
471  }
472 
473  private bool r_R2()
474  {
475  if (!(I_p2 <= cursor))
476  {
477  return false;
478  }
479  return true;
480  }
481 
482  private bool r_standard_suffix()
483  {
484  int among_var;
485  int v_1;
486  int v_2;
487  int v_3;
488  int v_4;
489  int v_5;
490  int v_6;
491  int v_7;
492  int v_8;
493  int v_9;
494  // (, line 77
495  // do, line 78
496  v_1 = limit - cursor;
497  do
498  {
499  // (, line 78
500  // [, line 79
501  ket = cursor;
502  // substring, line 79
503  among_var = find_among_b(a_2, 7);
504  if (among_var == 0)
505  {
506  goto lab0_brk;
507  }
508  // ], line 79
509  bra = cursor;
510  // call R1, line 79
511  if (!r_R1())
512  {
513  goto lab0_brk;
514  }
515  switch (among_var)
516  {
517 
518  case 0:
519  goto lab0_brk;
520 
521  case 1:
522  // (, line 81
523  // delete, line 81
524  slice_del();
525  break;
526 
527  case 2:
528  // (, line 84
529  if (!(in_grouping_b(g_s_ending, 98, 116)))
530  {
531  goto lab0_brk;
532  }
533  // delete, line 84
534  slice_del();
535  break;
536  }
537  }
538  while (false);
539 
540 lab0_brk: ;
541 
542  cursor = limit - v_1;
543  // do, line 88
544  v_2 = limit - cursor;
545  do
546  {
547  // (, line 88
548  // [, line 89
549  ket = cursor;
550  // substring, line 89
551  among_var = find_among_b(a_3, 4);
552  if (among_var == 0)
553  {
554  goto lab1_brk;
555  }
556  // ], line 89
557  bra = cursor;
558  // call R1, line 89
559  if (!r_R1())
560  {
561  goto lab1_brk;
562  }
563  switch (among_var)
564  {
565 
566  case 0:
567  goto lab1_brk;
568 
569  case 1:
570  // (, line 91
571  // delete, line 91
572  slice_del();
573  break;
574 
575  case 2:
576  // (, line 94
577  if (!(in_grouping_b(g_st_ending, 98, 116)))
578  {
579  goto lab1_brk;
580  }
581  // hop, line 94
582  {
583  int c = cursor - 3;
584  if (limit_backward > c || c > limit)
585  {
586  goto lab1_brk;
587  }
588  cursor = c;
589  }
590  // delete, line 94
591  slice_del();
592  break;
593  }
594  }
595  while (false);
596 
597 lab1_brk: ;
598 
599  cursor = limit - v_2;
600  // do, line 98
601  v_3 = limit - cursor;
602  do
603  {
604  // (, line 98
605  // [, line 99
606  ket = cursor;
607  // substring, line 99
608  among_var = find_among_b(a_5, 8);
609  if (among_var == 0)
610  {
611  goto lab2_brk;
612  }
613  // ], line 99
614  bra = cursor;
615  // call R2, line 99
616  if (!r_R2())
617  {
618  goto lab2_brk;
619  }
620  switch (among_var)
621  {
622 
623  case 0:
624  goto lab2_brk;
625 
626  case 1:
627  // (, line 101
628  // delete, line 101
629  slice_del();
630  // try, line 102
631  v_4 = limit - cursor;
632  do
633  {
634  // (, line 102
635  // [, line 102
636  ket = cursor;
637  // literal, line 102
638  if (!(eq_s_b(2, "ig")))
639  {
640  cursor = limit - v_4;
641  goto lab3_brk;
642  }
643  // ], line 102
644  bra = cursor;
645  // not, line 102
646  {
647  v_5 = limit - cursor;
648  do
649  {
650  // literal, line 102
651  if (!(eq_s_b(1, "e")))
652  {
653  goto lab4_brk;
654  }
655  cursor = limit - v_4;
656  goto lab3_brk;
657  }
658  while (false);
659 
660 lab4_brk: ;
661 
662  cursor = limit - v_5;
663  }
664  // call R2, line 102
665  if (!r_R2())
666  {
667  cursor = limit - v_4;
668  goto lab3_brk;
669  }
670  // delete, line 102
671  slice_del();
672  }
673  while (false);
674 
675 lab3_brk: ;
676 
677  break;
678 
679  case 2:
680  // (, line 105
681  // not, line 105
682  {
683  v_6 = limit - cursor;
684  do
685  {
686  // literal, line 105
687  if (!(eq_s_b(1, "e")))
688  {
689  goto lab5_brk;
690  }
691  goto lab2_brk;
692  }
693  while (false);
694 
695 lab5_brk: ;
696 
697  cursor = limit - v_6;
698  }
699  // delete, line 105
700  slice_del();
701  break;
702 
703  case 3:
704  // (, line 108
705  // delete, line 108
706  slice_del();
707  // try, line 109
708  v_7 = limit - cursor;
709  do
710  {
711  // (, line 109
712  // [, line 110
713  ket = cursor;
714  // or, line 110
715  do
716  {
717  v_8 = limit - cursor;
718  do
719  {
720  // literal, line 110
721  if (!(eq_s_b(2, "er")))
722  {
723  goto lab8_brk;
724  }
725  goto lab7_brk;
726  }
727  while (false);
728 
729 lab8_brk: ;
730 
731  cursor = limit - v_8;
732  // literal, line 110
733  if (!(eq_s_b(2, "en")))
734  {
735  cursor = limit - v_7;
736  goto lab6_brk;
737  }
738  }
739  while (false);
740 
741 lab7_brk: ;
742 
743  // ], line 110
744  bra = cursor;
745  // call R1, line 110
746  if (!r_R1())
747  {
748  cursor = limit - v_7;
749  goto lab6_brk;
750  }
751  // delete, line 110
752  slice_del();
753  }
754  while (false);
755 
756 lab6_brk: ;
757 
758  break;
759 
760  case 4:
761  // (, line 114
762  // delete, line 114
763  slice_del();
764  // try, line 115
765  v_9 = limit - cursor;
766  do
767  {
768  // (, line 115
769  // [, line 116
770  ket = cursor;
771  // substring, line 116
772  among_var = find_among_b(a_4, 2);
773  if (among_var == 0)
774  {
775  cursor = limit - v_9;
776  goto lab9_brk;
777  }
778  // ], line 116
779  bra = cursor;
780  // call R2, line 116
781  if (!r_R2())
782  {
783  cursor = limit - v_9;
784  goto lab9_brk;
785  }
786  switch (among_var)
787  {
788 
789  case 0:
790  cursor = limit - v_9;
791  goto lab9_brk;
792 
793  case 1:
794  // (, line 118
795  // delete, line 118
796  slice_del();
797  break;
798  }
799  }
800  while (false);
801 
802 lab9_brk: ;
803 
804  break;
805  }
806  }
807  while (false);
808 
809 lab2_brk: ;
810 
811  cursor = limit - v_3;
812  return true;
813  }
814 
815  public override bool Stem()
816  {
817  int v_1;
818  int v_2;
819  int v_3;
820  int v_4;
821  // (, line 128
822  // do, line 129
823  v_1 = cursor;
824  do
825  {
826  // call prelude, line 129
827  if (!r_prelude())
828  {
829  goto lab0_brk;
830  }
831  }
832  while (false);
833 
834 lab0_brk: ;
835 
836  cursor = v_1;
837  // do, line 130
838  v_2 = cursor;
839  do
840  {
841  // call mark_regions, line 130
842  if (!r_mark_regions())
843  {
844  goto lab1_brk;
845  }
846  }
847  while (false);
848 
849 lab1_brk: ;
850 
851  cursor = v_2;
852  // backwards, line 131
853  limit_backward = cursor; cursor = limit;
854  // do, line 132
855  v_3 = limit - cursor;
856  do
857  {
858  // call standard_suffix, line 132
859  if (!r_standard_suffix())
860  {
861  goto lab2_brk;
862  }
863  }
864  while (false);
865 
866 lab2_brk: ;
867 
868  cursor = limit - v_3;
869  cursor = limit_backward; // do, line 133
870  v_4 = cursor;
871  do
872  {
873  // call postlude, line 133
874  if (!r_postlude())
875  {
876  goto lab3_brk;
877  }
878  }
879  while (false);
880 
881 lab3_brk: ;
882 
883  cursor = v_4;
884  return true;
885  }
886  }
887 }