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
PorterStemmer.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 PorterStemmer()
30  {
31  InitBlock();
32  }
33  private void InitBlock()
34  {
35  a_0 = new Among[]{new Among("s", - 1, 3, "", this), new Among("ies", 0, 2, "", this), new Among("sses", 0, 1, "", this), new Among("ss", 0, - 1, "", this)};
36  a_1 = new Among[]{new Among("", - 1, 3, "", this), new Among("bb", 0, 2, "", this), new Among("dd", 0, 2, "", this), new Among("ff", 0, 2, "", this), new Among("gg", 0, 2, "", this), new Among("bl", 0, 1, "", this), new Among("mm", 0, 2, "", this), new Among("nn", 0, 2, "", this), new Among("pp", 0, 2, "", this), new Among("rr", 0, 2, "", this), new Among("at", 0, 1, "", this), new Among("tt", 0, 2, "", this), new Among("iz", 0, 1, "", this)};
37  a_2 = new Among[]{new Among("ed", - 1, 2, "", this), new Among("eed", 0, 1, "", this), new Among("ing", - 1, 2, "", this)};
38  a_3 = new Among[]{new Among("anci", - 1, 3, "", this), new Among("enci", - 1, 2, "", this), new Among("abli", - 1, 4, "", this), new Among("eli", - 1, 6, "", this), new Among("alli", - 1, 9, "", this), new Among("ousli", - 1, 12, "", this), new Among("entli", - 1, 5, "", this), new Among("aliti", - 1, 10, "", this), new Among("biliti", - 1, 14, "", this), new Among("iviti", - 1, 13, "", this), new Among("tional", - 1, 1, "", this), new Among("ational", 10, 8, "", this), new Among("alism", - 1, 10, "", this), new Among("ation", - 1, 8, "", this), new Among("ization", 13, 7, "", this), new Among("izer", - 1, 7, "", this), new Among("ator", - 1, 8, "", this), new Among("iveness", - 1, 13, "", this), new Among("fulness", - 1, 11, "", this), new Among("ousness", - 1, 12, "", this)};
39  a_4 = new Among[]{new Among("icate", - 1, 2, "", this), new Among("ative", - 1, 3, "", this), new Among("alize", - 1, 1, "", this), new Among("iciti", - 1, 2, "", this), new Among("ical", - 1, 2, "", this), new Among("ful", - 1, 3, "", this), new Among("ness", - 1, 3, "", this)};
40  a_5 = new Among[]{new Among("ic", - 1, 1, "", this), new Among("ance", - 1, 1, "", this), new Among("ence", - 1, 1, "", this), new Among("able", - 1, 1, "", this), new Among("ible", - 1, 1, "", this), new Among("ate", - 1, 1, "", this), new Among("ive", - 1, 1, "", this), new Among("ize", - 1, 1, "", this), new Among("iti", - 1, 1, "", this), new Among("al", - 1, 1, "", this), new Among("ism", - 1, 1, "", this), new Among("ion", - 1, 2, "", this), new Among("er", - 1, 1, "", this), new Among("ous", - 1, 1, "", this), new Among("ant", - 1, 1, "", this), new Among("ent", - 1, 1, "", this), new Among("ment", 15, 1, "", this), new Among("ement", 16, 1, "", this), new Among("ou", - 1, 1, "", 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)};
50  private static readonly char[] g_v_WXY = new char[]{(char) (1), (char) (17), (char) (65), (char) (208), (char) (1)};
51 
52  private bool B_Y_found;
53  private int I_p2;
54  private int I_p1;
55 
56  protected internal virtual void copy_from(PorterStemmer other)
57  {
58  B_Y_found = other.B_Y_found;
59  I_p2 = other.I_p2;
60  I_p1 = other.I_p1;
61  base.copy_from(other);
62  }
63 
64  private bool r_shortv()
65  {
66  // (, line 19
67  if (!(out_grouping_b(g_v_WXY, 89, 121)))
68  {
69  return false;
70  }
71  if (!(in_grouping_b(g_v, 97, 121)))
72  {
73  return false;
74  }
75  if (!(out_grouping_b(g_v, 97, 121)))
76  {
77  return false;
78  }
79  return true;
80  }
81 
82  private bool r_R1()
83  {
84  if (!(I_p1 <= cursor))
85  {
86  return false;
87  }
88  return true;
89  }
90 
91  private bool r_R2()
92  {
93  if (!(I_p2 <= cursor))
94  {
95  return false;
96  }
97  return true;
98  }
99 
100  private bool r_Step_1a()
101  {
102  int among_var;
103  // (, line 24
104  // [, line 25
105  ket = cursor;
106  // substring, line 25
107  among_var = find_among_b(a_0, 4);
108  if (among_var == 0)
109  {
110  return false;
111  }
112  // ], line 25
113  bra = cursor;
114  switch (among_var)
115  {
116 
117  case 0:
118  return false;
119 
120  case 1:
121  // (, line 26
122  // <-, line 26
123  slice_from("ss");
124  break;
125 
126  case 2:
127  // (, line 27
128  // <-, line 27
129  slice_from("i");
130  break;
131 
132  case 3:
133  // (, line 29
134  // delete, line 29
135  slice_del();
136  break;
137  }
138  return true;
139  }
140 
141  private bool r_Step_1b()
142  {
143  int among_var;
144  int v_1;
145  int v_3;
146  int v_4;
147  // (, line 33
148  // [, line 34
149  ket = cursor;
150  // substring, line 34
151  among_var = find_among_b(a_2, 3);
152  if (among_var == 0)
153  {
154  return false;
155  }
156  // ], line 34
157  bra = cursor;
158  switch (among_var)
159  {
160 
161  case 0:
162  return false;
163 
164  case 1:
165  // (, line 35
166  // call R1, line 35
167  if (!r_R1())
168  {
169  return false;
170  }
171  // <-, line 35
172  slice_from("ee");
173  break;
174 
175  case 2:
176  // (, line 37
177  // test, line 38
178  v_1 = limit - cursor;
179  // gopast, line 38
180  while (true)
181  {
182  do
183  {
184  if (!(in_grouping_b(g_v, 97, 121)))
185  {
186  goto lab1_brk;
187  }
188  goto golab0_brk;
189  }
190  while (false);
191 
192 lab1_brk: ;
193 
194  if (cursor <= limit_backward)
195  {
196  return false;
197  }
198  cursor--;
199  }
200 
201 golab0_brk: ;
202 
203  cursor = limit - v_1;
204  // delete, line 38
205  slice_del();
206  // test, line 39
207  v_3 = limit - cursor;
208  // substring, line 39
209  among_var = find_among_b(a_1, 13);
210  if (among_var == 0)
211  {
212  return false;
213  }
214  cursor = limit - v_3;
215  switch (among_var)
216  {
217 
218  case 0:
219  return false;
220 
221  case 1:
222  // (, line 41
223  // <+, line 41
224  {
225  int c = cursor;
226  insert(cursor, cursor, "e");
227  cursor = c;
228  }
229  break;
230 
231  case 2:
232  // (, line 44
233  // [, line 44
234  ket = cursor;
235  // next, line 44
236  if (cursor <= limit_backward)
237  {
238  return false;
239  }
240  cursor--;
241  // ], line 44
242  bra = cursor;
243  // delete, line 44
244  slice_del();
245  break;
246 
247  case 3:
248  // (, line 45
249  // atmark, line 45
250  if (cursor != I_p1)
251  {
252  return false;
253  }
254  // test, line 45
255  v_4 = limit - cursor;
256  // call shortv, line 45
257  if (!r_shortv())
258  {
259  return false;
260  }
261  cursor = limit - v_4;
262  // <+, line 45
263  {
264  int c = cursor;
265  insert(cursor, cursor, "e");
266  cursor = c;
267  }
268  break;
269  }
270  break;
271  }
272  return true;
273  }
274 
275  private bool r_Step_1c()
276  {
277  int v_1;
278  // (, line 51
279  // [, line 52
280  ket = cursor;
281  // or, line 52
282  do
283  {
284  v_1 = limit - cursor;
285  do
286  {
287  // literal, line 52
288  if (!(eq_s_b(1, "y")))
289  {
290  goto lab2_brk;
291  }
292  goto lab0_brk;
293  }
294  while (false);
295 
296 lab2_brk: ;
297 
298  cursor = limit - v_1;
299  // literal, line 52
300  if (!(eq_s_b(1, "Y")))
301  {
302  return false;
303  }
304  }
305  while (false);
306 
307 lab0_brk: ;
308 
309  // ], line 52
310  bra = cursor;
311  // gopast, line 53
312  while (true)
313  {
314  do
315  {
316  if (!(in_grouping_b(g_v, 97, 121)))
317  {
318  goto lab3_brk;
319  }
320  goto golab2_brk;
321  }
322  while (false);
323 
324 lab3_brk: ;
325 
326  if (cursor <= limit_backward)
327  {
328  return false;
329  }
330  cursor--;
331  }
332 
333 golab2_brk: ;
334 
335  // <-, line 54
336  slice_from("i");
337  return true;
338  }
339 
340  private bool r_Step_2()
341  {
342  int among_var;
343  // (, line 57
344  // [, line 58
345  ket = cursor;
346  // substring, line 58
347  among_var = find_among_b(a_3, 20);
348  if (among_var == 0)
349  {
350  return false;
351  }
352  // ], line 58
353  bra = cursor;
354  // call R1, line 58
355  if (!r_R1())
356  {
357  return false;
358  }
359  switch (among_var)
360  {
361 
362  case 0:
363  return false;
364 
365  case 1:
366  // (, line 59
367  // <-, line 59
368  slice_from("tion");
369  break;
370 
371  case 2:
372  // (, line 60
373  // <-, line 60
374  slice_from("ence");
375  break;
376 
377  case 3:
378  // (, line 61
379  // <-, line 61
380  slice_from("ance");
381  break;
382 
383  case 4:
384  // (, line 62
385  // <-, line 62
386  slice_from("able");
387  break;
388 
389  case 5:
390  // (, line 63
391  // <-, line 63
392  slice_from("ent");
393  break;
394 
395  case 6:
396  // (, line 64
397  // <-, line 64
398  slice_from("e");
399  break;
400 
401  case 7:
402  // (, line 66
403  // <-, line 66
404  slice_from("ize");
405  break;
406 
407  case 8:
408  // (, line 68
409  // <-, line 68
410  slice_from("ate");
411  break;
412 
413  case 9:
414  // (, line 69
415  // <-, line 69
416  slice_from("al");
417  break;
418 
419  case 10:
420  // (, line 71
421  // <-, line 71
422  slice_from("al");
423  break;
424 
425  case 11:
426  // (, line 72
427  // <-, line 72
428  slice_from("ful");
429  break;
430 
431  case 12:
432  // (, line 74
433  // <-, line 74
434  slice_from("ous");
435  break;
436 
437  case 13:
438  // (, line 76
439  // <-, line 76
440  slice_from("ive");
441  break;
442 
443  case 14:
444  // (, line 77
445  // <-, line 77
446  slice_from("ble");
447  break;
448  }
449  return true;
450  }
451 
452  private bool r_Step_3()
453  {
454  int among_var;
455  // (, line 81
456  // [, line 82
457  ket = cursor;
458  // substring, line 82
459  among_var = find_among_b(a_4, 7);
460  if (among_var == 0)
461  {
462  return false;
463  }
464  // ], line 82
465  bra = cursor;
466  // call R1, line 82
467  if (!r_R1())
468  {
469  return false;
470  }
471  switch (among_var)
472  {
473 
474  case 0:
475  return false;
476 
477  case 1:
478  // (, line 83
479  // <-, line 83
480  slice_from("al");
481  break;
482 
483  case 2:
484  // (, line 85
485  // <-, line 85
486  slice_from("ic");
487  break;
488 
489  case 3:
490  // (, line 87
491  // delete, line 87
492  slice_del();
493  break;
494  }
495  return true;
496  }
497 
498  private bool r_Step_4()
499  {
500  int among_var;
501  int v_1;
502  // (, line 91
503  // [, line 92
504  ket = cursor;
505  // substring, line 92
506  among_var = find_among_b(a_5, 19);
507  if (among_var == 0)
508  {
509  return false;
510  }
511  // ], line 92
512  bra = cursor;
513  // call R2, line 92
514  if (!r_R2())
515  {
516  return false;
517  }
518  switch (among_var)
519  {
520 
521  case 0:
522  return false;
523 
524  case 1:
525  // (, line 95
526  // delete, line 95
527  slice_del();
528  break;
529 
530  case 2:
531  // (, line 96
532  // or, line 96
533 lab2:
534  do
535  {
536  v_1 = limit - cursor;
537  do
538  {
539  // literal, line 96
540  if (!(eq_s_b(1, "s")))
541  {
542  goto lab2_brk;
543  }
544  goto lab2_brk;
545  }
546  while (false);
547 
548 lab2_brk: ;
549 
550  cursor = limit - v_1;
551  // literal, line 96
552  if (!(eq_s_b(1, "t")))
553  {
554  return false;
555  }
556  }
557  while (false);
558  // delete, line 96
559  slice_del();
560  break;
561  }
562  return true;
563  }
564 
565  private bool r_Step_5a()
566  {
567  int v_1;
568  int v_2;
569  // (, line 100
570  // [, line 101
571  ket = cursor;
572  // literal, line 101
573  if (!(eq_s_b(1, "e")))
574  {
575  return false;
576  }
577  // ], line 101
578  bra = cursor;
579  // or, line 102
580  do
581  {
582  v_1 = limit - cursor;
583  do
584  {
585  // call R2, line 102
586  if (!r_R2())
587  {
588  goto lab1_brk;
589  }
590  goto lab0_brk;
591  }
592  while (false);
593 
594 lab1_brk: ;
595 
596  cursor = limit - v_1;
597  // (, line 102
598  // call R1, line 102
599  if (!r_R1())
600  {
601  return false;
602  }
603  // not, line 102
604  {
605  v_2 = limit - cursor;
606  do
607  {
608  // call shortv, line 102
609  if (!r_shortv())
610  {
611  goto lab2_brk;
612  }
613  return false;
614  }
615  while (false);
616 
617 lab2_brk: ;
618 
619  cursor = limit - v_2;
620  }
621  }
622  while (false);
623 
624 lab0_brk: ;
625 
626  // delete, line 103
627  slice_del();
628  return true;
629  }
630 
631  private bool r_Step_5b()
632  {
633  // (, line 106
634  // [, line 107
635  ket = cursor;
636  // literal, line 107
637  if (!(eq_s_b(1, "l")))
638  {
639  return false;
640  }
641  // ], line 107
642  bra = cursor;
643  // call R2, line 108
644  if (!r_R2())
645  {
646  return false;
647  }
648  // literal, line 108
649  if (!(eq_s_b(1, "l")))
650  {
651  return false;
652  }
653  // delete, line 109
654  slice_del();
655  return true;
656  }
657 
658  public override bool Stem()
659  {
660  int v_1;
661  int v_2;
662  int v_3;
663  int v_4;
664  int v_5;
665  int v_10;
666  int v_11;
667  int v_12;
668  int v_13;
669  int v_14;
670  int v_15;
671  int v_16;
672  int v_17;
673  int v_18;
674  int v_19;
675  int v_20;
676  // (, line 113
677  // unset Y_found, line 115
678  B_Y_found = false;
679  // do, line 116
680  v_1 = cursor;
681  do
682  {
683  // (, line 116
684  // [, line 116
685  bra = cursor;
686  // literal, line 116
687  if (!(eq_s(1, "y")))
688  {
689  goto lab0_brk;
690  }
691  // ], line 116
692  ket = cursor;
693  // <-, line 116
694  slice_from("Y");
695  // set Y_found, line 116
696  B_Y_found = true;
697  }
698  while (false);
699 
700 lab0_brk: ;
701 
702  cursor = v_1;
703  // do, line 117
704  v_2 = cursor;
705  do
706  {
707  // repeat, line 117
708  while (true)
709  {
710  v_3 = cursor;
711  do
712  {
713  // (, line 117
714  // goto, line 117
715  while (true)
716  {
717  v_4 = cursor;
718  do
719  {
720  // (, line 117
721  if (!(in_grouping(g_v, 97, 121)))
722  {
723  goto lab5_brk;
724  }
725  // [, line 117
726  bra = cursor;
727  // literal, line 117
728  if (!(eq_s(1, "y")))
729  {
730  goto lab5_brk;
731  }
732  // ], line 117
733  ket = cursor;
734  cursor = v_4;
735  goto golab4_brk;
736  }
737  while (false);
738 
739 lab5_brk: ;
740 
741  cursor = v_4;
742  if (cursor >= limit)
743  {
744  goto lab3_brk;
745  }
746  cursor++;
747  }
748 
749 golab4_brk: ;
750 
751  // <-, line 117
752  slice_from("Y");
753  // set Y_found, line 117
754  B_Y_found = true;
755  goto replab2;
756  }
757  while (false);
758 
759 lab3_brk: ;
760 
761  cursor = v_3;
762  goto replab2_brk;
763 
764 replab2: ;
765  }
766 
767 replab2_brk: ;
768 
769  }
770  while (false);
771 
772 lab1_brk: ;
773 
774  cursor = v_2;
775  I_p1 = limit;
776  I_p2 = limit;
777  // do, line 121
778  v_5 = cursor;
779  do
780  {
781  // (, line 121
782  // gopast, line 122
783  while (true)
784  {
785  do
786  {
787  if (!(in_grouping(g_v, 97, 121)))
788  {
789  goto lab8_brk;
790  }
791  goto golab7_brk;
792  }
793  while (false);
794 
795 lab8_brk: ;
796 
797  if (cursor >= limit)
798  {
799  goto lab6_brk;
800  }
801  cursor++;
802  }
803 
804 golab7_brk: ;
805 
806  // gopast, line 122
807  while (true)
808  {
809  do
810  {
811  if (!(out_grouping(g_v, 97, 121)))
812  {
813  goto lab10_brk;
814  }
815  goto golab9_brk;
816  }
817  while (false);
818 
819 lab10_brk: ;
820 
821  if (cursor >= limit)
822  {
823  goto lab6_brk;
824  }
825  cursor++;
826  }
827 
828 golab9_brk: ;
829 
830  // setmark p1, line 122
831  I_p1 = cursor;
832  // gopast, line 123
833  while (true)
834  {
835  do
836  {
837  if (!(in_grouping(g_v, 97, 121)))
838  {
839  goto lab12_brk;
840  }
841  goto golab11_brk;
842  }
843  while (false);
844 
845 lab12_brk: ;
846 
847  if (cursor >= limit)
848  {
849  goto lab6_brk;
850  }
851  cursor++;
852  }
853 
854 golab11_brk: ;
855 
856  // gopast, line 123
857  while (true)
858  {
859  do
860  {
861  if (!(out_grouping(g_v, 97, 121)))
862  {
863  goto lab14_brk;
864  }
865  goto golab13_brk;
866  }
867  while (false);
868 
869 lab14_brk: ;
870 
871  if (cursor >= limit)
872  {
873  goto lab6_brk;
874  }
875  cursor++;
876  }
877 
878 golab13_brk: ;
879 
880  // setmark p2, line 123
881  I_p2 = cursor;
882  }
883  while (false);
884 
885 lab6_brk: ;
886 
887  cursor = v_5;
888  // backwards, line 126
889  limit_backward = cursor; cursor = limit;
890  // (, line 126
891  // do, line 127
892  v_10 = limit - cursor;
893  do
894  {
895  // call Step_1a, line 127
896  if (!r_Step_1a())
897  {
898  goto lab15_brk;
899  }
900  }
901  while (false);
902 
903 lab15_brk: ;
904 
905  cursor = limit - v_10;
906  // do, line 128
907  v_11 = limit - cursor;
908  do
909  {
910  // call Step_1b, line 128
911  if (!r_Step_1b())
912  {
913  goto lab16_brk;
914  }
915  }
916  while (false);
917 
918 lab16_brk: ;
919 
920  cursor = limit - v_11;
921  // do, line 129
922  v_12 = limit - cursor;
923  do
924  {
925  // call Step_1c, line 129
926  if (!r_Step_1c())
927  {
928  goto lab17_brk;
929  }
930  }
931  while (false);
932 
933 lab17_brk: ;
934 
935  cursor = limit - v_12;
936  // do, line 130
937  v_13 = limit - cursor;
938  do
939  {
940  // call Step_2, line 130
941  if (!r_Step_2())
942  {
943  goto lab18_brk;
944  }
945  }
946  while (false);
947 
948 lab18_brk: ;
949 
950  cursor = limit - v_13;
951  // do, line 131
952  v_14 = limit - cursor;
953  do
954  {
955  // call Step_3, line 131
956  if (!r_Step_3())
957  {
958  goto lab19_brk;
959  }
960  }
961  while (false);
962 
963 lab19_brk: ;
964 
965  cursor = limit - v_14;
966  // do, line 132
967  v_15 = limit - cursor;
968  do
969  {
970  // call Step_4, line 132
971  if (!r_Step_4())
972  {
973  goto lab20_brk;
974  }
975  }
976  while (false);
977 
978 lab20_brk: ;
979 
980  cursor = limit - v_15;
981  // do, line 133
982  v_16 = limit - cursor;
983  do
984  {
985  // call Step_5a, line 133
986  if (!r_Step_5a())
987  {
988  goto lab21_brk;
989  }
990  }
991  while (false);
992 
993 lab21_brk: ;
994 
995  cursor = limit - v_16;
996  // do, line 134
997  v_17 = limit - cursor;
998  do
999  {
1000  // call Step_5b, line 134
1001  if (!r_Step_5b())
1002  {
1003  goto lab22_brk;
1004  }
1005  }
1006  while (false);
1007 
1008 lab22_brk: ;
1009 
1010  cursor = limit - v_17;
1011  cursor = limit_backward; // do, line 137
1012  v_18 = cursor;
1013  do
1014  {
1015  // (, line 137
1016  // Boolean test Y_found, line 137
1017  if (!(B_Y_found))
1018  {
1019  goto lab23_brk;
1020  }
1021  // repeat, line 137
1022  while (true)
1023  {
1024  v_19 = cursor;
1025  do
1026  {
1027  // (, line 137
1028  // goto, line 137
1029  while (true)
1030  {
1031  v_20 = cursor;
1032  do
1033  {
1034  // (, line 137
1035  // [, line 137
1036  bra = cursor;
1037  // literal, line 137
1038  if (!(eq_s(1, "Y")))
1039  {
1040  goto lab27_brk;
1041  }
1042  // ], line 137
1043  ket = cursor;
1044  cursor = v_20;
1045  goto golab26_brk;
1046  }
1047  while (false);
1048 
1049 lab27_brk: ;
1050 
1051  cursor = v_20;
1052  if (cursor >= limit)
1053  {
1054  goto lab25_brk;
1055  }
1056  cursor++;
1057  }
1058 
1059 golab26_brk: ;
1060 
1061  // <-, line 137
1062  slice_from("y");
1063  goto replab24;
1064  }
1065  while (false);
1066 
1067 lab25_brk: ;
1068 
1069  cursor = v_19;
1070  goto replab24_brk;
1071 
1072 replab24: ;
1073  }
1074 
1075 replab24_brk: ;
1076 
1077  }
1078  while (false);
1079 
1080 lab23_brk: ;
1081 
1082  cursor = v_18;
1083  return true;
1084  }
1085  }
1086 }