biodiversity19 3.1.4 → 3.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.ruby-version +1 -1
- data/.travis.yml +1 -1
- data/CHANGELOG +2 -0
- data/LICENSE +1 -1
- data/README.md +1 -1
- data/biodiversity.gemspec +6 -5
- data/lib/biodiversity/parser/scientific_name_canonical.rb +21 -10
- data/lib/biodiversity/parser/scientific_name_clean.rb +911 -623
- data/lib/biodiversity/parser/scientific_name_dirty.rb +82 -54
- data/lib/biodiversity/version.rb +1 -1
- data/spec/biodiversity_spec.rb +8 -4
- data/spec/{parser → files}/test_data.txt +0 -0
- data/spec/{parser → files}/todo.txt +0 -0
- data/spec/guid/lsid.spec.rb +12 -4
- data/spec/parser/scientific_name_canonical_spec.rb +6 -6
- data/spec/parser/scientific_name_clean_spec.rb +589 -373
- data/spec/parser/scientific_name_dirty_spec.rb +126 -70
- data/spec/parser/scientific_name_spec.rb +32 -30
- data/spec/spec_helper.rb +2 -2
- metadata +52 -37
@@ -56,7 +56,7 @@ module ScientificNameDirty
|
|
56
56
|
if node_cache[:root].has_key?(index)
|
57
57
|
cached = node_cache[:root][index]
|
58
58
|
if cached
|
59
|
-
cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
|
59
|
+
node_cache[:root][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
|
60
60
|
@index = cached.interval.end
|
61
61
|
end
|
62
62
|
return cached
|
@@ -120,7 +120,7 @@ module ScientificNameDirty
|
|
120
120
|
if node_cache[:scientific_name_5].has_key?(index)
|
121
121
|
cached = node_cache[:scientific_name_5][index]
|
122
122
|
if cached
|
123
|
-
cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
|
123
|
+
node_cache[:scientific_name_5][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
|
124
124
|
@index = cached.interval.end
|
125
125
|
end
|
126
126
|
return cached
|
@@ -143,10 +143,12 @@ module ScientificNameDirty
|
|
143
143
|
r1 = nil
|
144
144
|
end
|
145
145
|
if r1
|
146
|
+
r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
|
146
147
|
r0 = r1
|
147
148
|
else
|
148
149
|
r4 = super
|
149
150
|
if r4
|
151
|
+
r4 = SyntaxNode.new(input, (index-1)...index) if r4 == true
|
150
152
|
r0 = r4
|
151
153
|
else
|
152
154
|
@index = i0
|
@@ -236,7 +238,7 @@ module ScientificNameDirty
|
|
236
238
|
if node_cache[:infraspecies].has_key?(index)
|
237
239
|
cached = node_cache[:infraspecies][index]
|
238
240
|
if cached
|
239
|
-
cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
|
241
|
+
node_cache[:infraspecies][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
|
240
242
|
@index = cached.interval.end
|
241
243
|
end
|
242
244
|
return cached
|
@@ -263,6 +265,7 @@ module ScientificNameDirty
|
|
263
265
|
r1 = nil
|
264
266
|
end
|
265
267
|
if r1
|
268
|
+
r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
|
266
269
|
r0 = r1
|
267
270
|
else
|
268
271
|
i5, s5 = index, []
|
@@ -293,10 +296,12 @@ module ScientificNameDirty
|
|
293
296
|
r5 = nil
|
294
297
|
end
|
295
298
|
if r5
|
299
|
+
r5 = SyntaxNode.new(input, (index-1)...index) if r5 == true
|
296
300
|
r0 = r5
|
297
301
|
else
|
298
302
|
r11 = super
|
299
303
|
if r11
|
304
|
+
r11 = SyntaxNode.new(input, (index-1)...index) if r11 == true
|
300
305
|
r0 = r11
|
301
306
|
else
|
302
307
|
@index = i0
|
@@ -347,7 +352,7 @@ module ScientificNameDirty
|
|
347
352
|
if node_cache[:species].has_key?(index)
|
348
353
|
cached = node_cache[:species][index]
|
349
354
|
if cached
|
350
|
-
cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
|
355
|
+
node_cache[:species][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
|
351
356
|
@index = cached.interval.end
|
352
357
|
end
|
353
358
|
return cached
|
@@ -374,10 +379,12 @@ module ScientificNameDirty
|
|
374
379
|
r1 = nil
|
375
380
|
end
|
376
381
|
if r1
|
382
|
+
r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
|
377
383
|
r0 = r1
|
378
384
|
else
|
379
385
|
r5 = super
|
380
386
|
if r5
|
387
|
+
r5 = SyntaxNode.new(input, (index-1)...index) if r5 == true
|
381
388
|
r0 = r5
|
382
389
|
else
|
383
390
|
@index = i0
|
@@ -418,17 +425,18 @@ module ScientificNameDirty
|
|
418
425
|
if node_cache[:latin_word].has_key?(index)
|
419
426
|
cached = node_cache[:latin_word][index]
|
420
427
|
if cached
|
421
|
-
cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
|
428
|
+
node_cache[:latin_word][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
|
422
429
|
@index = cached.interval.end
|
423
430
|
end
|
424
431
|
return cached
|
425
432
|
end
|
426
433
|
|
427
434
|
i0, s0 = index, []
|
428
|
-
if has_terminal?('\
|
435
|
+
if has_terminal?(@regexps[gr = '\A[a-z\\-æœàâåãäáçčëéèíìïňññóòôøõöúùüŕřŗššşž]'] ||= Regexp.new(gr), :regexp, index)
|
429
436
|
r1 = true
|
430
437
|
@index += 1
|
431
438
|
else
|
439
|
+
terminal_parse_failure('[a-z\\-æœàâåãäáçčëéèíìïňññóòôøõöúùüŕřŗššşž]')
|
432
440
|
r1 = nil
|
433
441
|
end
|
434
442
|
s0 << r1
|
@@ -469,7 +477,7 @@ module ScientificNameDirty
|
|
469
477
|
if node_cache[:valid_name_letters].has_key?(index)
|
470
478
|
cached = node_cache[:valid_name_letters][index]
|
471
479
|
if cached
|
472
|
-
cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
|
480
|
+
node_cache[:valid_name_letters][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
|
473
481
|
@index = cached.interval.end
|
474
482
|
end
|
475
483
|
return cached
|
@@ -477,10 +485,11 @@ module ScientificNameDirty
|
|
477
485
|
|
478
486
|
s0, i0 = [], index
|
479
487
|
loop do
|
480
|
-
if has_terminal?('\
|
488
|
+
if has_terminal?(@regexps[gr = '\A[a-z\\-æœàâåãäáçčëéèíìïňññóòôøõöúùüŕřŗššşž]'] ||= Regexp.new(gr), :regexp, index)
|
481
489
|
r1 = true
|
482
490
|
@index += 1
|
483
491
|
else
|
492
|
+
terminal_parse_failure('[a-z\\-æœàâåãäáçčëéèíìïňññóòôøõöúùüŕřŗššşž]')
|
484
493
|
r1 = nil
|
485
494
|
end
|
486
495
|
if r1
|
@@ -514,7 +523,7 @@ module ScientificNameDirty
|
|
514
523
|
if node_cache[:right_paren].has_key?(index)
|
515
524
|
cached = node_cache[:right_paren][index]
|
516
525
|
if cached
|
517
|
-
cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
|
526
|
+
node_cache[:right_paren][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
|
518
527
|
@index = cached.interval.end
|
519
528
|
end
|
520
529
|
return cached
|
@@ -522,9 +531,9 @@ module ScientificNameDirty
|
|
522
531
|
|
523
532
|
i0 = index
|
524
533
|
i1, s1 = index, []
|
525
|
-
if has_terminal?(")", false, index)
|
526
|
-
r2 =
|
527
|
-
@index +=
|
534
|
+
if (match_len = has_terminal?(")", false, index))
|
535
|
+
r2 = true
|
536
|
+
@index += match_len
|
528
537
|
else
|
529
538
|
terminal_parse_failure(")")
|
530
539
|
r2 = nil
|
@@ -534,9 +543,9 @@ module ScientificNameDirty
|
|
534
543
|
r3 = _nt_space
|
535
544
|
s1 << r3
|
536
545
|
if r3
|
537
|
-
if has_terminal?(")", false, index)
|
538
|
-
r4 =
|
539
|
-
@index +=
|
546
|
+
if (match_len = has_terminal?(")", false, index))
|
547
|
+
r4 = true
|
548
|
+
@index += match_len
|
540
549
|
else
|
541
550
|
terminal_parse_failure(")")
|
542
551
|
r4 = nil
|
@@ -552,10 +561,12 @@ module ScientificNameDirty
|
|
552
561
|
r1 = nil
|
553
562
|
end
|
554
563
|
if r1
|
564
|
+
r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
|
555
565
|
r0 = r1
|
556
566
|
else
|
557
567
|
r5 = super
|
558
568
|
if r5
|
569
|
+
r5 = SyntaxNode.new(input, (index-1)...index) if r5 == true
|
559
570
|
r0 = r5
|
560
571
|
else
|
561
572
|
@index = i0
|
@@ -580,7 +591,7 @@ module ScientificNameDirty
|
|
580
591
|
if node_cache[:left_paren].has_key?(index)
|
581
592
|
cached = node_cache[:left_paren][index]
|
582
593
|
if cached
|
583
|
-
cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
|
594
|
+
node_cache[:left_paren][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
|
584
595
|
@index = cached.interval.end
|
585
596
|
end
|
586
597
|
return cached
|
@@ -588,9 +599,9 @@ module ScientificNameDirty
|
|
588
599
|
|
589
600
|
i0 = index
|
590
601
|
i1, s1 = index, []
|
591
|
-
if has_terminal?("(", false, index)
|
592
|
-
r2 =
|
593
|
-
@index +=
|
602
|
+
if (match_len = has_terminal?("(", false, index))
|
603
|
+
r2 = true
|
604
|
+
@index += match_len
|
594
605
|
else
|
595
606
|
terminal_parse_failure("(")
|
596
607
|
r2 = nil
|
@@ -600,9 +611,9 @@ module ScientificNameDirty
|
|
600
611
|
r3 = _nt_space
|
601
612
|
s1 << r3
|
602
613
|
if r3
|
603
|
-
if has_terminal?("(", false, index)
|
604
|
-
r4 =
|
605
|
-
@index +=
|
614
|
+
if (match_len = has_terminal?("(", false, index))
|
615
|
+
r4 = true
|
616
|
+
@index += match_len
|
606
617
|
else
|
607
618
|
terminal_parse_failure("(")
|
608
619
|
r4 = nil
|
@@ -618,10 +629,12 @@ module ScientificNameDirty
|
|
618
629
|
r1 = nil
|
619
630
|
end
|
620
631
|
if r1
|
632
|
+
r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
|
621
633
|
r0 = r1
|
622
634
|
else
|
623
635
|
r5 = super
|
624
636
|
if r5
|
637
|
+
r5 = SyntaxNode.new(input, (index-1)...index) if r5 == true
|
625
638
|
r0 = r5
|
626
639
|
else
|
627
640
|
@index = i0
|
@@ -695,7 +708,7 @@ module ScientificNameDirty
|
|
695
708
|
if node_cache[:year].has_key?(index)
|
696
709
|
cached = node_cache[:year][index]
|
697
710
|
if cached
|
698
|
-
cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
|
711
|
+
node_cache[:year][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
|
699
712
|
@index = cached.interval.end
|
700
713
|
end
|
701
714
|
return cached
|
@@ -722,6 +735,7 @@ module ScientificNameDirty
|
|
722
735
|
r1 = nil
|
723
736
|
end
|
724
737
|
if r1
|
738
|
+
r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
|
725
739
|
r0 = r1
|
726
740
|
else
|
727
741
|
i5, s5 = index, []
|
@@ -744,22 +758,27 @@ module ScientificNameDirty
|
|
744
758
|
r5 = nil
|
745
759
|
end
|
746
760
|
if r5
|
761
|
+
r5 = SyntaxNode.new(input, (index-1)...index) if r5 == true
|
747
762
|
r0 = r5
|
748
763
|
else
|
749
764
|
r9 = _nt_year_number_with_punctuation
|
750
765
|
if r9
|
766
|
+
r9 = SyntaxNode.new(input, (index-1)...index) if r9 == true
|
751
767
|
r0 = r9
|
752
768
|
else
|
753
769
|
r10 = _nt_approximate_year
|
754
770
|
if r10
|
771
|
+
r10 = SyntaxNode.new(input, (index-1)...index) if r10 == true
|
755
772
|
r0 = r10
|
756
773
|
else
|
757
774
|
r11 = _nt_double_year
|
758
775
|
if r11
|
776
|
+
r11 = SyntaxNode.new(input, (index-1)...index) if r11 == true
|
759
777
|
r0 = r11
|
760
778
|
else
|
761
779
|
r12 = super
|
762
780
|
if r12
|
781
|
+
r12 = SyntaxNode.new(input, (index-1)...index) if r12 == true
|
763
782
|
r0 = r12
|
764
783
|
else
|
765
784
|
@index = i0
|
@@ -810,16 +829,16 @@ module ScientificNameDirty
|
|
810
829
|
if node_cache[:approximate_year].has_key?(index)
|
811
830
|
cached = node_cache[:approximate_year][index]
|
812
831
|
if cached
|
813
|
-
cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
|
832
|
+
node_cache[:approximate_year][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
|
814
833
|
@index = cached.interval.end
|
815
834
|
end
|
816
835
|
return cached
|
817
836
|
end
|
818
837
|
|
819
838
|
i0, s0 = index, []
|
820
|
-
if has_terminal?("[", false, index)
|
821
|
-
r1 =
|
822
|
-
@index +=
|
839
|
+
if (match_len = has_terminal?("[", false, index))
|
840
|
+
r1 = true
|
841
|
+
@index += match_len
|
823
842
|
else
|
824
843
|
terminal_parse_failure("[")
|
825
844
|
r1 = nil
|
@@ -837,9 +856,9 @@ module ScientificNameDirty
|
|
837
856
|
if r4
|
838
857
|
s5, i5 = [], index
|
839
858
|
loop do
|
840
|
-
if has_terminal?("]", false, index)
|
841
|
-
r6 =
|
842
|
-
@index +=
|
859
|
+
if (match_len = has_terminal?("]", false, index))
|
860
|
+
r6 = true
|
861
|
+
@index += match_len
|
843
862
|
else
|
844
863
|
terminal_parse_failure("]")
|
845
864
|
r6 = nil
|
@@ -901,7 +920,7 @@ module ScientificNameDirty
|
|
901
920
|
if node_cache[:double_year].has_key?(index)
|
902
921
|
cached = node_cache[:double_year][index]
|
903
922
|
if cached
|
904
|
-
cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
|
923
|
+
node_cache[:double_year][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
|
905
924
|
@index = cached.interval.end
|
906
925
|
end
|
907
926
|
return cached
|
@@ -911,9 +930,9 @@ module ScientificNameDirty
|
|
911
930
|
r1 = _nt_year_number
|
912
931
|
s0 << r1
|
913
932
|
if r1
|
914
|
-
if has_terminal?("-", false, index)
|
915
|
-
r2 =
|
916
|
-
@index +=
|
933
|
+
if (match_len = has_terminal?("-", false, index))
|
934
|
+
r2 = true
|
935
|
+
@index += match_len
|
917
936
|
else
|
918
937
|
terminal_parse_failure("-")
|
919
938
|
r2 = nil
|
@@ -922,10 +941,11 @@ module ScientificNameDirty
|
|
922
941
|
if r2
|
923
942
|
s3, i3 = [], index
|
924
943
|
loop do
|
925
|
-
if has_terminal?('\
|
944
|
+
if has_terminal?(@regexps[gr = '\A[0-9]'] ||= Regexp.new(gr), :regexp, index)
|
926
945
|
r4 = true
|
927
946
|
@index += 1
|
928
947
|
else
|
948
|
+
terminal_parse_failure('[0-9]')
|
929
949
|
r4 = nil
|
930
950
|
end
|
931
951
|
if r4
|
@@ -942,10 +962,11 @@ module ScientificNameDirty
|
|
942
962
|
end
|
943
963
|
s0 << r3
|
944
964
|
if r3
|
945
|
-
if has_terminal?('\
|
965
|
+
if has_terminal?(@regexps[gr = '\A[A-Za-z]'] ||= Regexp.new(gr), :regexp, index)
|
946
966
|
r6 = true
|
947
967
|
@index += 1
|
948
968
|
else
|
969
|
+
terminal_parse_failure('[A-Za-z]')
|
949
970
|
r6 = nil
|
950
971
|
end
|
951
972
|
if r6
|
@@ -955,10 +976,11 @@ module ScientificNameDirty
|
|
955
976
|
end
|
956
977
|
s0 << r5
|
957
978
|
if r5
|
958
|
-
if has_terminal?('\
|
979
|
+
if has_terminal?(@regexps[gr = '\A[\\?]'] ||= Regexp.new(gr), :regexp, index)
|
959
980
|
r8 = true
|
960
981
|
@index += 1
|
961
982
|
else
|
983
|
+
terminal_parse_failure('[\\?]')
|
962
984
|
r8 = nil
|
963
985
|
end
|
964
986
|
if r8
|
@@ -1011,7 +1033,7 @@ module ScientificNameDirty
|
|
1011
1033
|
if node_cache[:year_number_with_punctuation].has_key?(index)
|
1012
1034
|
cached = node_cache[:year_number_with_punctuation][index]
|
1013
1035
|
if cached
|
1014
|
-
cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
|
1036
|
+
node_cache[:year_number_with_punctuation][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
|
1015
1037
|
@index = cached.interval.end
|
1016
1038
|
end
|
1017
1039
|
return cached
|
@@ -1021,9 +1043,9 @@ module ScientificNameDirty
|
|
1021
1043
|
r1 = _nt_year_number
|
1022
1044
|
s0 << r1
|
1023
1045
|
if r1
|
1024
|
-
if has_terminal?(".", false, index)
|
1025
|
-
r2 =
|
1026
|
-
@index +=
|
1046
|
+
if (match_len = has_terminal?(".", false, index))
|
1047
|
+
r2 = true
|
1048
|
+
@index += match_len
|
1027
1049
|
else
|
1028
1050
|
terminal_parse_failure(".")
|
1029
1051
|
r2 = nil
|
@@ -1061,16 +1083,16 @@ module ScientificNameDirty
|
|
1061
1083
|
if node_cache[:page_number].has_key?(index)
|
1062
1084
|
cached = node_cache[:page_number][index]
|
1063
1085
|
if cached
|
1064
|
-
cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
|
1086
|
+
node_cache[:page_number][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
|
1065
1087
|
@index = cached.interval.end
|
1066
1088
|
end
|
1067
1089
|
return cached
|
1068
1090
|
end
|
1069
1091
|
|
1070
1092
|
i0, s0 = index, []
|
1071
|
-
if has_terminal?(":", false, index)
|
1072
|
-
r1 =
|
1073
|
-
@index +=
|
1093
|
+
if (match_len = has_terminal?(":", false, index))
|
1094
|
+
r1 = true
|
1095
|
+
@index += match_len
|
1074
1096
|
else
|
1075
1097
|
terminal_parse_failure(":")
|
1076
1098
|
r1 = nil
|
@@ -1082,10 +1104,11 @@ module ScientificNameDirty
|
|
1082
1104
|
if r2
|
1083
1105
|
s3, i3 = [], index
|
1084
1106
|
loop do
|
1085
|
-
if has_terminal?('\
|
1107
|
+
if has_terminal?(@regexps[gr = '\A[\\d]'] ||= Regexp.new(gr), :regexp, index)
|
1086
1108
|
r4 = true
|
1087
1109
|
@index += 1
|
1088
1110
|
else
|
1111
|
+
terminal_parse_failure('[\\d]')
|
1089
1112
|
r4 = nil
|
1090
1113
|
end
|
1091
1114
|
if r4
|
@@ -1122,15 +1145,15 @@ module ScientificNameDirty
|
|
1122
1145
|
if node_cache[:string_authorship_inconsistencies].has_key?(index)
|
1123
1146
|
cached = node_cache[:string_authorship_inconsistencies][index]
|
1124
1147
|
if cached
|
1125
|
-
cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
|
1148
|
+
node_cache[:string_authorship_inconsistencies][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
|
1126
1149
|
@index = cached.interval.end
|
1127
1150
|
end
|
1128
1151
|
return cached
|
1129
1152
|
end
|
1130
1153
|
|
1131
|
-
if has_terminal?("corrig.", false, index)
|
1132
|
-
r0 = instantiate_node(SyntaxNode,input, index...(index +
|
1133
|
-
@index +=
|
1154
|
+
if (match_len = has_terminal?("corrig.", false, index))
|
1155
|
+
r0 = instantiate_node(SyntaxNode,input, index...(index + match_len))
|
1156
|
+
@index += match_len
|
1134
1157
|
else
|
1135
1158
|
terminal_parse_failure("corrig.")
|
1136
1159
|
r0 = nil
|
@@ -1164,7 +1187,7 @@ module ScientificNameDirty
|
|
1164
1187
|
if node_cache[:garbage].has_key?(index)
|
1165
1188
|
cached = node_cache[:garbage][index]
|
1166
1189
|
if cached
|
1167
|
-
cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
|
1190
|
+
node_cache[:garbage][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
|
1168
1191
|
@index = cached.interval.end
|
1169
1192
|
end
|
1170
1193
|
return cached
|
@@ -1175,10 +1198,11 @@ module ScientificNameDirty
|
|
1175
1198
|
r2 = _nt_space
|
1176
1199
|
s1 << r2
|
1177
1200
|
if r2
|
1178
|
-
if has_terminal?('\
|
1201
|
+
if has_terminal?(@regexps[gr = '\A["\',]'] ||= Regexp.new(gr), :regexp, index)
|
1179
1202
|
r3 = true
|
1180
1203
|
@index += 1
|
1181
1204
|
else
|
1205
|
+
terminal_parse_failure('["\',]')
|
1182
1206
|
r3 = nil
|
1183
1207
|
end
|
1184
1208
|
s1 << r3
|
@@ -1188,10 +1212,11 @@ module ScientificNameDirty
|
|
1188
1212
|
if r4
|
1189
1213
|
s5, i5 = [], index
|
1190
1214
|
loop do
|
1191
|
-
if has_terminal?('\
|
1215
|
+
if has_terminal?(@regexps[gr = '\A[^щ]'] ||= Regexp.new(gr), :regexp, index)
|
1192
1216
|
r6 = true
|
1193
1217
|
@index += 1
|
1194
1218
|
else
|
1219
|
+
terminal_parse_failure('[^щ]')
|
1195
1220
|
r6 = nil
|
1196
1221
|
end
|
1197
1222
|
if r6
|
@@ -1213,6 +1238,7 @@ module ScientificNameDirty
|
|
1213
1238
|
r1 = nil
|
1214
1239
|
end
|
1215
1240
|
if r1
|
1241
|
+
r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
|
1216
1242
|
r0 = r1
|
1217
1243
|
else
|
1218
1244
|
i7, s7 = index, []
|
@@ -1221,10 +1247,11 @@ module ScientificNameDirty
|
|
1221
1247
|
if r8
|
1222
1248
|
s9, i9 = [], index
|
1223
1249
|
loop do
|
1224
|
-
if has_terminal?('\
|
1250
|
+
if has_terminal?(@regexps[gr = '\A[^ш]'] ||= Regexp.new(gr), :regexp, index)
|
1225
1251
|
r10 = true
|
1226
1252
|
@index += 1
|
1227
1253
|
else
|
1254
|
+
terminal_parse_failure('[^ш]')
|
1228
1255
|
r10 = nil
|
1229
1256
|
end
|
1230
1257
|
if r10
|
@@ -1249,6 +1276,7 @@ module ScientificNameDirty
|
|
1249
1276
|
r7 = nil
|
1250
1277
|
end
|
1251
1278
|
if r7
|
1279
|
+
r7 = SyntaxNode.new(input, (index-1)...index) if r7 == true
|
1252
1280
|
r0 = r7
|
1253
1281
|
else
|
1254
1282
|
@index = i0
|