dimus-biodiversity 0.5.1 → 0.5.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -18,14 +18,13 @@ class ScientificNameParser
18
18
 
19
19
  def parse(a_string)
20
20
  @verbatim = a_string
21
- @parser = @clean.parse(a_string) || @dirty.parse(a_string) || @canonical.parse(a_string)
21
+ @parser = @clean.parse(a_string) || @dirty.parse(a_string) || @canonical.parse(a_string) || {:verbatim => a_string}
22
22
  def @parser.to_json
23
- parsed = !!self
24
- res = {
25
- :parsed => parsed,
26
- :verbatim => self.text_value }
23
+ parsed = self.class != Hash
24
+ res = {:parsed => parsed}
27
25
  if parsed
28
26
  res.merge!({
27
+ :verbatim => self.text_value,
29
28
  :normalized => self.value,
30
29
  :canonical => self.canonical
31
30
  })
@@ -35,6 +34,8 @@ class ScientificNameParser
35
34
  data = {:namedHybrid => data}
36
35
  end
37
36
  res.merge!(data)
37
+ else
38
+ res.merge!(self)
38
39
  end
39
40
  res = {:scientificName => res}
40
41
  JSON.generate res
@@ -58,12 +58,8 @@ module ScientificNameCanonical
58
58
  elements[4]
59
59
  end
60
60
 
61
- def space_hard
62
- elements[5]
63
- end
64
-
65
61
  def garbage
66
- elements[6]
62
+ elements[5]
67
63
  end
68
64
  end
69
65
 
@@ -98,12 +94,8 @@ module ScientificNameCanonical
98
94
  elements[2]
99
95
  end
100
96
 
101
- def space_hard
102
- elements[3]
103
- end
104
-
105
97
  def garbage
106
- elements[4]
98
+ elements[3]
107
99
  end
108
100
  end
109
101
 
@@ -138,12 +130,8 @@ module ScientificNameCanonical
138
130
  elements[2]
139
131
  end
140
132
 
141
- def space_hard
142
- elements[3]
143
- end
144
-
145
133
  def garbage
146
- elements[4]
134
+ elements[3]
147
135
  end
148
136
  end
149
137
 
@@ -190,12 +178,8 @@ module ScientificNameCanonical
190
178
  r6 = _nt_species
191
179
  s1 << r6
192
180
  if r6
193
- r7 = _nt_space_hard
181
+ r7 = _nt_garbage
194
182
  s1 << r7
195
- if r7
196
- r8 = _nt_garbage
197
- s1 << r8
198
- end
199
183
  end
200
184
  end
201
185
  end
@@ -212,65 +196,57 @@ module ScientificNameCanonical
212
196
  if r1
213
197
  r0 = r1
214
198
  else
215
- i9, s9 = index, []
216
- r10 = _nt_genus
217
- s9 << r10
218
- if r10
219
- r11 = _nt_space
220
- s9 << r11
221
- if r11
222
- r12 = _nt_subgenus
223
- s9 << r12
224
- if r12
225
- r13 = _nt_space_hard
226
- s9 << r13
227
- if r13
228
- r14 = _nt_garbage
229
- s9 << r14
230
- end
199
+ i8, s8 = index, []
200
+ r9 = _nt_genus
201
+ s8 << r9
202
+ if r9
203
+ r10 = _nt_space
204
+ s8 << r10
205
+ if r10
206
+ r11 = _nt_subgenus
207
+ s8 << r11
208
+ if r11
209
+ r12 = _nt_garbage
210
+ s8 << r12
231
211
  end
232
212
  end
233
213
  end
234
- if s9.last
235
- r9 = instantiate_node(SyntaxNode,input, i9...index, s9)
236
- r9.extend(MultinomialWithGarbage2)
237
- r9.extend(MultinomialWithGarbage3)
214
+ if s8.last
215
+ r8 = instantiate_node(SyntaxNode,input, i8...index, s8)
216
+ r8.extend(MultinomialWithGarbage2)
217
+ r8.extend(MultinomialWithGarbage3)
238
218
  else
239
- self.index = i9
240
- r9 = nil
219
+ self.index = i8
220
+ r8 = nil
241
221
  end
242
- if r9
243
- r0 = r9
222
+ if r8
223
+ r0 = r8
244
224
  else
245
- i15, s15 = index, []
246
- r16 = _nt_genus
247
- s15 << r16
248
- if r16
249
- r17 = _nt_space
250
- s15 << r17
251
- if r17
252
- r18 = _nt_species
253
- s15 << r18
254
- if r18
255
- r19 = _nt_space_hard
256
- s15 << r19
257
- if r19
258
- r20 = _nt_garbage
259
- s15 << r20
260
- end
225
+ i13, s13 = index, []
226
+ r14 = _nt_genus
227
+ s13 << r14
228
+ if r14
229
+ r15 = _nt_space
230
+ s13 << r15
231
+ if r15
232
+ r16 = _nt_species
233
+ s13 << r16
234
+ if r16
235
+ r17 = _nt_garbage
236
+ s13 << r17
261
237
  end
262
238
  end
263
239
  end
264
- if s15.last
265
- r15 = instantiate_node(SyntaxNode,input, i15...index, s15)
266
- r15.extend(MultinomialWithGarbage4)
267
- r15.extend(MultinomialWithGarbage5)
240
+ if s13.last
241
+ r13 = instantiate_node(SyntaxNode,input, i13...index, s13)
242
+ r13.extend(MultinomialWithGarbage4)
243
+ r13.extend(MultinomialWithGarbage5)
268
244
  else
269
- self.index = i15
270
- r15 = nil
245
+ self.index = i13
246
+ r13 = nil
271
247
  end
272
- if r15
273
- r0 = r15
248
+ if r13
249
+ r0 = r13
274
250
  else
275
251
  self.index = i0
276
252
  r0 = nil
@@ -288,12 +264,8 @@ module ScientificNameCanonical
288
264
  elements[0]
289
265
  end
290
266
 
291
- def space_hard
292
- elements[1]
293
- end
294
-
295
267
  def b
296
- elements[2]
268
+ elements[1]
297
269
  end
298
270
  end
299
271
 
@@ -327,12 +299,8 @@ module ScientificNameCanonical
327
299
  r1 = _nt_uninomial_epitheton
328
300
  s0 << r1
329
301
  if r1
330
- r2 = _nt_space_hard
302
+ r2 = _nt_garbage
331
303
  s0 << r2
332
- if r2
333
- r3 = _nt_garbage
334
- s0 << r3
335
- end
336
304
  end
337
305
  if s0.last
338
306
  r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
@@ -348,6 +316,24 @@ module ScientificNameCanonical
348
316
  return r0
349
317
  end
350
318
 
319
+ module Garbage0
320
+ def space
321
+ elements[0]
322
+ end
323
+
324
+ def space
325
+ elements[2]
326
+ end
327
+
328
+ end
329
+
330
+ module Garbage1
331
+ def space_hard
332
+ elements[0]
333
+ end
334
+
335
+ end
336
+
351
337
  def _nt_garbage
352
338
  start_index = index
353
339
  if node_cache[:garbage].has_key?(index)
@@ -356,25 +342,90 @@ module ScientificNameCanonical
356
342
  return cached
357
343
  end
358
344
 
359
- s0, i0 = [], index
360
- loop do
361
- if input.index(Regexp.new('[^ш]'), index) == index
362
- r1 = instantiate_node(SyntaxNode,input, index...(index + 1))
345
+ i0 = index
346
+ i1, s1 = index, []
347
+ r2 = _nt_space
348
+ s1 << r2
349
+ if r2
350
+ if input.index(Regexp.new('["\',.]'), index) == index
351
+ r3 = instantiate_node(SyntaxNode,input, index...(index + 1))
363
352
  @index += 1
364
353
  else
365
- r1 = nil
354
+ r3 = nil
366
355
  end
367
- if r1
368
- s0 << r1
369
- else
370
- break
356
+ s1 << r3
357
+ if r3
358
+ r4 = _nt_space
359
+ s1 << r4
360
+ if r4
361
+ s5, i5 = [], index
362
+ loop do
363
+ if input.index(Regexp.new('[^щ]'), index) == index
364
+ r6 = instantiate_node(SyntaxNode,input, index...(index + 1))
365
+ @index += 1
366
+ else
367
+ r6 = nil
368
+ end
369
+ if r6
370
+ s5 << r6
371
+ else
372
+ break
373
+ end
374
+ end
375
+ r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
376
+ s1 << r5
377
+ end
371
378
  end
372
379
  end
373
- if s0.empty?
374
- self.index = i0
375
- r0 = nil
380
+ if s1.last
381
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
382
+ r1.extend(Garbage0)
376
383
  else
377
- r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
384
+ self.index = i1
385
+ r1 = nil
386
+ end
387
+ if r1
388
+ r0 = r1
389
+ else
390
+ i7, s7 = index, []
391
+ r8 = _nt_space_hard
392
+ s7 << r8
393
+ if r8
394
+ s9, i9 = [], index
395
+ loop do
396
+ if input.index(Regexp.new('[^ш]'), index) == index
397
+ r10 = instantiate_node(SyntaxNode,input, index...(index + 1))
398
+ @index += 1
399
+ else
400
+ r10 = nil
401
+ end
402
+ if r10
403
+ s9 << r10
404
+ else
405
+ break
406
+ end
407
+ end
408
+ if s9.empty?
409
+ self.index = i9
410
+ r9 = nil
411
+ else
412
+ r9 = instantiate_node(SyntaxNode,input, i9...index, s9)
413
+ end
414
+ s7 << r9
415
+ end
416
+ if s7.last
417
+ r7 = instantiate_node(SyntaxNode,input, i7...index, s7)
418
+ r7.extend(Garbage1)
419
+ else
420
+ self.index = i7
421
+ r7 = nil
422
+ end
423
+ if r7
424
+ r0 = r7
425
+ else
426
+ self.index = i0
427
+ r0 = nil
428
+ end
378
429
  end
379
430
 
380
431
  node_cache[:garbage][start_index] = r0
@@ -10,7 +10,8 @@ grammar ScientificNameCanonical
10
10
  end
11
11
 
12
12
  rule multinomial_with_garbage
13
- a:genus space b:subgenus space c:species space_hard garbage {
13
+
14
+ a:genus space b:subgenus space c:species garbage {
14
15
  def value
15
16
  a.value + " " + b.value + " " + c.value
16
17
  end
@@ -28,7 +29,7 @@ grammar ScientificNameCanonical
28
29
  end
29
30
  }
30
31
  /
31
- a:genus space b:subgenus space_hard garbage {
32
+ a:genus space b:subgenus garbage {
32
33
  def value
33
34
  a.value + " " + b.value
34
35
  end
@@ -46,7 +47,7 @@ grammar ScientificNameCanonical
46
47
  end
47
48
  }
48
49
  /
49
- a:genus space b:species space_hard garbage {
50
+ a:genus space b:species garbage {
50
51
  def value
51
52
  a.value + " " + b.value
52
53
  end
@@ -66,7 +67,7 @@ grammar ScientificNameCanonical
66
67
  end
67
68
 
68
69
  rule uninomial_with_garbage
69
- a:uninomial_epitheton space_hard b:garbage {
70
+ a:uninomial_epitheton b:garbage {
70
71
  def value
71
72
  a.value
72
73
  end
@@ -84,10 +85,11 @@ grammar ScientificNameCanonical
84
85
  end
85
86
  }
86
87
  end
87
-
88
88
 
89
89
  rule garbage
90
- []+
90
+ space (["',.]) space [^щ]*
91
+ /
92
+ space_hard [^ш]+
91
93
  end
92
94
 
93
95
  end
@@ -651,16 +651,20 @@ module ScientificNameClean
651
651
  elements[3]
652
652
  end
653
653
 
654
+ def space
655
+ elements[5]
656
+ end
657
+
654
658
  def c
655
- elements[4]
659
+ elements[6]
656
660
  end
657
661
 
658
662
  def space_hard
659
- elements[5]
663
+ elements[7]
660
664
  end
661
665
 
662
666
  def d
663
- elements[6]
667
+ elements[8]
664
668
  end
665
669
  end
666
670
 
@@ -670,7 +674,7 @@ module ScientificNameClean
670
674
  end
671
675
 
672
676
  def canonical
673
- a.canonical + " " + c.canonical + " " + d.canonical
677
+ a.canonical + " " + b.canonical + " " + c.canonical + " " + d.canonical
674
678
  end
675
679
 
676
680
  def pos
@@ -699,8 +703,12 @@ module ScientificNameClean
699
703
  elements[3]
700
704
  end
701
705
 
706
+ def space
707
+ elements[5]
708
+ end
709
+
702
710
  def c
703
- elements[4]
711
+ elements[6]
704
712
  end
705
713
  end
706
714
 
@@ -727,20 +735,24 @@ module ScientificNameClean
727
735
  elements[0]
728
736
  end
729
737
 
730
- def space_hard
738
+ def space
731
739
  elements[1]
732
740
  end
733
741
 
742
+ def space
743
+ elements[3]
744
+ end
745
+
734
746
  def b
735
- elements[2]
747
+ elements[4]
736
748
  end
737
749
 
738
750
  def space_hard
739
- elements[3]
751
+ elements[5]
740
752
  end
741
753
 
742
754
  def c
743
- elements[4]
755
+ elements[6]
744
756
  end
745
757
  end
746
758
 
@@ -767,12 +779,16 @@ module ScientificNameClean
767
779
  elements[0]
768
780
  end
769
781
 
770
- def space_hard
782
+ def space
771
783
  elements[1]
772
784
  end
773
785
 
786
+ def space
787
+ elements[3]
788
+ end
789
+
774
790
  def b
775
- elements[2]
791
+ elements[4]
776
792
  end
777
793
  end
778
794
 
@@ -816,14 +832,27 @@ module ScientificNameClean
816
832
  r5 = _nt_space
817
833
  s1 << r5
818
834
  if r5
819
- r6 = _nt_species
835
+ r7 = _nt_species_prefix
836
+ if r7
837
+ r6 = r7
838
+ else
839
+ r6 = instantiate_node(SyntaxNode,input, index...index)
840
+ end
820
841
  s1 << r6
821
842
  if r6
822
- r7 = _nt_space_hard
823
- s1 << r7
824
- if r7
825
- r8 = _nt_infraspecies_mult
826
- s1 << r8
843
+ r8 = _nt_space
844
+ s1 << r8
845
+ if r8
846
+ r9 = _nt_species
847
+ s1 << r9
848
+ if r9
849
+ r10 = _nt_space_hard
850
+ s1 << r10
851
+ if r10
852
+ r11 = _nt_infraspecies_mult
853
+ s1 << r11
854
+ end
855
+ end
827
856
  end
828
857
  end
829
858
  end
@@ -841,87 +870,126 @@ module ScientificNameClean
841
870
  if r1
842
871
  r0 = r1
843
872
  else
844
- i9, s9 = index, []
845
- r10 = _nt_genus
846
- s9 << r10
847
- if r10
848
- r11 = _nt_space
849
- s9 << r11
850
- if r11
851
- r12 = _nt_subgenus
852
- s9 << r12
853
- if r12
854
- r13 = _nt_space
855
- s9 << r13
856
- if r13
857
- r14 = _nt_species
858
- s9 << r14
873
+ i12, s12 = index, []
874
+ r13 = _nt_genus
875
+ s12 << r13
876
+ if r13
877
+ r14 = _nt_space
878
+ s12 << r14
879
+ if r14
880
+ r15 = _nt_subgenus
881
+ s12 << r15
882
+ if r15
883
+ r16 = _nt_space
884
+ s12 << r16
885
+ if r16
886
+ r18 = _nt_species_prefix
887
+ if r18
888
+ r17 = r18
889
+ else
890
+ r17 = instantiate_node(SyntaxNode,input, index...index)
891
+ end
892
+ s12 << r17
893
+ if r17
894
+ r19 = _nt_space
895
+ s12 << r19
896
+ if r19
897
+ r20 = _nt_species
898
+ s12 << r20
899
+ end
900
+ end
859
901
  end
860
902
  end
861
903
  end
862
904
  end
863
- if s9.last
864
- r9 = instantiate_node(SyntaxNode,input, i9...index, s9)
865
- r9.extend(MultinomialName2)
866
- r9.extend(MultinomialName3)
905
+ if s12.last
906
+ r12 = instantiate_node(SyntaxNode,input, i12...index, s12)
907
+ r12.extend(MultinomialName2)
908
+ r12.extend(MultinomialName3)
867
909
  else
868
- self.index = i9
869
- r9 = nil
910
+ self.index = i12
911
+ r12 = nil
870
912
  end
871
- if r9
872
- r0 = r9
913
+ if r12
914
+ r0 = r12
873
915
  else
874
- i15, s15 = index, []
875
- r16 = _nt_genus
876
- s15 << r16
877
- if r16
878
- r17 = _nt_space_hard
879
- s15 << r17
880
- if r17
881
- r18 = _nt_species
882
- s15 << r18
883
- if r18
884
- r19 = _nt_space_hard
885
- s15 << r19
886
- if r19
887
- r20 = _nt_infraspecies_mult
888
- s15 << r20
916
+ i21, s21 = index, []
917
+ r22 = _nt_genus
918
+ s21 << r22
919
+ if r22
920
+ r23 = _nt_space
921
+ s21 << r23
922
+ if r23
923
+ r25 = _nt_species_prefix
924
+ if r25
925
+ r24 = r25
926
+ else
927
+ r24 = instantiate_node(SyntaxNode,input, index...index)
928
+ end
929
+ s21 << r24
930
+ if r24
931
+ r26 = _nt_space
932
+ s21 << r26
933
+ if r26
934
+ r27 = _nt_species
935
+ s21 << r27
936
+ if r27
937
+ r28 = _nt_space_hard
938
+ s21 << r28
939
+ if r28
940
+ r29 = _nt_infraspecies_mult
941
+ s21 << r29
942
+ end
943
+ end
889
944
  end
890
945
  end
891
946
  end
892
947
  end
893
- if s15.last
894
- r15 = instantiate_node(SyntaxNode,input, i15...index, s15)
895
- r15.extend(MultinomialName4)
896
- r15.extend(MultinomialName5)
948
+ if s21.last
949
+ r21 = instantiate_node(SyntaxNode,input, i21...index, s21)
950
+ r21.extend(MultinomialName4)
951
+ r21.extend(MultinomialName5)
897
952
  else
898
- self.index = i15
899
- r15 = nil
953
+ self.index = i21
954
+ r21 = nil
900
955
  end
901
- if r15
902
- r0 = r15
956
+ if r21
957
+ r0 = r21
903
958
  else
904
- i21, s21 = index, []
905
- r22 = _nt_genus
906
- s21 << r22
907
- if r22
908
- r23 = _nt_space_hard
909
- s21 << r23
910
- if r23
911
- r24 = _nt_species
912
- s21 << r24
959
+ i30, s30 = index, []
960
+ r31 = _nt_genus
961
+ s30 << r31
962
+ if r31
963
+ r32 = _nt_space
964
+ s30 << r32
965
+ if r32
966
+ r34 = _nt_species_prefix
967
+ if r34
968
+ r33 = r34
969
+ else
970
+ r33 = instantiate_node(SyntaxNode,input, index...index)
971
+ end
972
+ s30 << r33
973
+ if r33
974
+ r35 = _nt_space
975
+ s30 << r35
976
+ if r35
977
+ r36 = _nt_species
978
+ s30 << r36
979
+ end
980
+ end
913
981
  end
914
982
  end
915
- if s21.last
916
- r21 = instantiate_node(SyntaxNode,input, i21...index, s21)
917
- r21.extend(MultinomialName6)
918
- r21.extend(MultinomialName7)
983
+ if s30.last
984
+ r30 = instantiate_node(SyntaxNode,input, i30...index, s30)
985
+ r30.extend(MultinomialName6)
986
+ r30.extend(MultinomialName7)
919
987
  else
920
- self.index = i21
921
- r21 = nil
988
+ self.index = i30
989
+ r30 = nil
922
990
  end
923
- if r21
924
- r0 = r21
991
+ if r30
992
+ r0 = r30
925
993
  else
926
994
  self.index = i0
927
995
  r0 = nil
@@ -963,7 +1031,6 @@ module ScientificNameClean
963
1031
  end
964
1032
 
965
1033
  def details
966
- #{:infraspecies => a.details[:infraspceies] << b.details[:infraspecies]}
967
1034
  a_array = a.details[:infraspecies].class == Array ? a.details[:infraspecies] : [a.details[:infraspecies]]
968
1035
  b_array = b.details[:infraspecies].class == Array ? b.details[:infraspecies] : [b.details[:infraspecies]]
969
1036
  a.details.merge({:infraspecies => a_array + b_array})
@@ -1239,13 +1306,32 @@ module ScientificNameClean
1239
1306
  return cached
1240
1307
  end
1241
1308
 
1309
+ i0 = index
1242
1310
  if input.index("sec.", index) == index
1243
- r0 = instantiate_node(SyntaxNode,input, index...(index + 4))
1244
- r0.extend(TaxonConceptRank0)
1311
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 4))
1245
1312
  @index += 4
1246
1313
  else
1247
1314
  terminal_parse_failure("sec.")
1248
- r0 = nil
1315
+ r1 = nil
1316
+ end
1317
+ if r1
1318
+ r0 = r1
1319
+ r0.extend(TaxonConceptRank0)
1320
+ else
1321
+ if input.index("sensu.", index) == index
1322
+ r2 = instantiate_node(SyntaxNode,input, index...(index + 6))
1323
+ @index += 6
1324
+ else
1325
+ terminal_parse_failure("sensu.")
1326
+ r2 = nil
1327
+ end
1328
+ if r2
1329
+ r0 = r2
1330
+ r0.extend(TaxonConceptRank0)
1331
+ else
1332
+ self.index = i0
1333
+ r0 = nil
1334
+ end
1249
1335
  end
1250
1336
 
1251
1337
  node_cache[:taxon_concept_rank][start_index] = r0
@@ -2083,16 +2169,45 @@ module ScientificNameClean
2083
2169
  end
2084
2170
 
2085
2171
  module Genus0
2172
+ def space_hard
2173
+ elements[0]
2174
+ end
2175
+
2176
+ def author_prefix_word
2177
+ elements[1]
2178
+ end
2179
+
2180
+ def space_hard
2181
+ elements[2]
2182
+ end
2183
+
2184
+ def author_word
2185
+ elements[3]
2186
+ end
2187
+ end
2188
+
2189
+ module Genus1
2190
+ def a
2191
+ elements[0]
2192
+ end
2193
+
2194
+ end
2195
+
2196
+ module Genus2
2197
+ def value
2198
+ a.value
2199
+ end
2200
+
2086
2201
  def pos
2087
- {interval.begin => ['genus', interval.end]}
2202
+ {a.interval.begin => ['genus', a.interval.end]}
2088
2203
  end
2089
2204
 
2090
2205
  def canonical
2091
- value
2206
+ a.value
2092
2207
  end
2093
2208
 
2094
2209
  def details
2095
- {:genus => {:epitheton => value}}
2210
+ {:genus => {:epitheton => a.value}}
2096
2211
  end
2097
2212
  end
2098
2213
 
@@ -2104,8 +2219,49 @@ module ScientificNameClean
2104
2219
  return cached
2105
2220
  end
2106
2221
 
2107
- r0 = _nt_cap_latin_word
2108
- r0.extend(Genus0)
2222
+ i0, s0 = index, []
2223
+ r1 = _nt_cap_latin_word
2224
+ s0 << r1
2225
+ if r1
2226
+ i2 = index
2227
+ i3, s3 = index, []
2228
+ r4 = _nt_space_hard
2229
+ s3 << r4
2230
+ if r4
2231
+ r5 = _nt_author_prefix_word
2232
+ s3 << r5
2233
+ if r5
2234
+ r6 = _nt_space_hard
2235
+ s3 << r6
2236
+ if r6
2237
+ r7 = _nt_author_word
2238
+ s3 << r7
2239
+ end
2240
+ end
2241
+ end
2242
+ if s3.last
2243
+ r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
2244
+ r3.extend(Genus0)
2245
+ else
2246
+ self.index = i3
2247
+ r3 = nil
2248
+ end
2249
+ if r3
2250
+ r2 = nil
2251
+ else
2252
+ self.index = i2
2253
+ r2 = instantiate_node(SyntaxNode,input, index...index)
2254
+ end
2255
+ s0 << r2
2256
+ end
2257
+ if s0.last
2258
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
2259
+ r0.extend(Genus1)
2260
+ r0.extend(Genus2)
2261
+ else
2262
+ self.index = i0
2263
+ r0 = nil
2264
+ end
2109
2265
 
2110
2266
  node_cache[:genus][start_index] = r0
2111
2267
 
@@ -2233,11 +2389,11 @@ module ScientificNameClean
2233
2389
  end
2234
2390
 
2235
2391
  def space
2236
- elements[3]
2392
+ elements[4]
2237
2393
  end
2238
2394
 
2239
2395
  def c
2240
- elements[4]
2396
+ elements[5]
2241
2397
  end
2242
2398
  end
2243
2399
 
@@ -2291,11 +2447,11 @@ module ScientificNameClean
2291
2447
  end
2292
2448
 
2293
2449
  def space
2294
- elements[1]
2450
+ elements[2]
2295
2451
  end
2296
2452
 
2297
2453
  def b
2298
- elements[2]
2454
+ elements[3]
2299
2455
  end
2300
2456
  end
2301
2457
 
@@ -2335,11 +2491,26 @@ module ScientificNameClean
2335
2491
  r4 = _nt_simple_authorship
2336
2492
  s1 << r4
2337
2493
  if r4
2338
- r5 = _nt_space
2494
+ if input.index(",", index) == index
2495
+ r6 = instantiate_node(SyntaxNode,input, index...(index + 1))
2496
+ @index += 1
2497
+ else
2498
+ terminal_parse_failure(",")
2499
+ r6 = nil
2500
+ end
2501
+ if r6
2502
+ r5 = r6
2503
+ else
2504
+ r5 = instantiate_node(SyntaxNode,input, index...index)
2505
+ end
2339
2506
  s1 << r5
2340
2507
  if r5
2341
- r6 = _nt_ex_authorship
2342
- s1 << r6
2508
+ r7 = _nt_space
2509
+ s1 << r7
2510
+ if r7
2511
+ r8 = _nt_ex_authorship
2512
+ s1 << r8
2513
+ end
2343
2514
  end
2344
2515
  end
2345
2516
  end
@@ -2355,57 +2526,72 @@ module ScientificNameClean
2355
2526
  if r1
2356
2527
  r0 = r1
2357
2528
  else
2358
- i7, s7 = index, []
2359
- r8 = _nt_basionym_authorship_with_parenthesis
2360
- s7 << r8
2361
- if r8
2362
- r9 = _nt_space
2363
- s7 << r9
2364
- if r9
2365
- r10 = _nt_simple_authorship
2366
- s7 << r10
2529
+ i9, s9 = index, []
2530
+ r10 = _nt_basionym_authorship_with_parenthesis
2531
+ s9 << r10
2532
+ if r10
2533
+ r11 = _nt_space
2534
+ s9 << r11
2535
+ if r11
2536
+ r12 = _nt_simple_authorship
2537
+ s9 << r12
2367
2538
  end
2368
2539
  end
2369
- if s7.last
2370
- r7 = instantiate_node(SyntaxNode,input, i7...index, s7)
2371
- r7.extend(Authorship2)
2372
- r7.extend(Authorship3)
2540
+ if s9.last
2541
+ r9 = instantiate_node(SyntaxNode,input, i9...index, s9)
2542
+ r9.extend(Authorship2)
2543
+ r9.extend(Authorship3)
2373
2544
  else
2374
- self.index = i7
2375
- r7 = nil
2545
+ self.index = i9
2546
+ r9 = nil
2376
2547
  end
2377
- if r7
2378
- r0 = r7
2548
+ if r9
2549
+ r0 = r9
2379
2550
  else
2380
- r11 = _nt_basionym_authorship_with_parenthesis
2381
- if r11
2382
- r0 = r11
2551
+ r13 = _nt_basionym_authorship_with_parenthesis
2552
+ if r13
2553
+ r0 = r13
2383
2554
  else
2384
- i12, s12 = index, []
2385
- r13 = _nt_simple_authorship
2386
- s12 << r13
2387
- if r13
2388
- r14 = _nt_space
2389
- s12 << r14
2390
- if r14
2391
- r15 = _nt_ex_authorship
2392
- s12 << r15
2555
+ i14, s14 = index, []
2556
+ r15 = _nt_simple_authorship
2557
+ s14 << r15
2558
+ if r15
2559
+ if input.index(",", index) == index
2560
+ r17 = instantiate_node(SyntaxNode,input, index...(index + 1))
2561
+ @index += 1
2562
+ else
2563
+ terminal_parse_failure(",")
2564
+ r17 = nil
2565
+ end
2566
+ if r17
2567
+ r16 = r17
2568
+ else
2569
+ r16 = instantiate_node(SyntaxNode,input, index...index)
2570
+ end
2571
+ s14 << r16
2572
+ if r16
2573
+ r18 = _nt_space
2574
+ s14 << r18
2575
+ if r18
2576
+ r19 = _nt_ex_authorship
2577
+ s14 << r19
2578
+ end
2393
2579
  end
2394
2580
  end
2395
- if s12.last
2396
- r12 = instantiate_node(SyntaxNode,input, i12...index, s12)
2397
- r12.extend(Authorship4)
2398
- r12.extend(Authorship5)
2581
+ if s14.last
2582
+ r14 = instantiate_node(SyntaxNode,input, i14...index, s14)
2583
+ r14.extend(Authorship4)
2584
+ r14.extend(Authorship5)
2399
2585
  else
2400
- self.index = i12
2401
- r12 = nil
2586
+ self.index = i14
2587
+ r14 = nil
2402
2588
  end
2403
- if r12
2404
- r0 = r12
2589
+ if r14
2590
+ r0 = r14
2405
2591
  else
2406
- r16 = _nt_simple_authorship
2407
- if r16
2408
- r0 = r16
2592
+ r20 = _nt_simple_authorship
2593
+ if r20
2594
+ r0 = r20
2409
2595
  else
2410
2596
  self.index = i0
2411
2597
  r0 = nil
@@ -2484,19 +2670,19 @@ module ScientificNameClean
2484
2670
  end
2485
2671
 
2486
2672
  def space
2487
- elements[3]
2673
+ elements[4]
2488
2674
  end
2489
2675
 
2490
2676
  def b
2491
- elements[4]
2677
+ elements[5]
2492
2678
  end
2493
2679
 
2494
2680
  def space
2495
- elements[5]
2681
+ elements[6]
2496
2682
  end
2497
2683
 
2498
2684
  def right_paren
2499
- elements[6]
2685
+ elements[7]
2500
2686
  end
2501
2687
  end
2502
2688
 
@@ -2666,17 +2852,32 @@ module ScientificNameClean
2666
2852
  r15 = _nt_simple_authorship
2667
2853
  s12 << r15
2668
2854
  if r15
2669
- r16 = _nt_space
2855
+ if input.index(",", index) == index
2856
+ r17 = instantiate_node(SyntaxNode,input, index...(index + 1))
2857
+ @index += 1
2858
+ else
2859
+ terminal_parse_failure(",")
2860
+ r17 = nil
2861
+ end
2862
+ if r17
2863
+ r16 = r17
2864
+ else
2865
+ r16 = instantiate_node(SyntaxNode,input, index...index)
2866
+ end
2670
2867
  s12 << r16
2671
2868
  if r16
2672
- r17 = _nt_ex_authorship
2673
- s12 << r17
2674
- if r17
2675
- r18 = _nt_space
2676
- s12 << r18
2677
- if r18
2678
- r19 = _nt_right_paren
2679
- s12 << r19
2869
+ r18 = _nt_space
2870
+ s12 << r18
2871
+ if r18
2872
+ r19 = _nt_ex_authorship
2873
+ s12 << r19
2874
+ if r19
2875
+ r20 = _nt_space
2876
+ s12 << r20
2877
+ if r20
2878
+ r21 = _nt_right_paren
2879
+ s12 << r21
2880
+ end
2680
2881
  end
2681
2882
  end
2682
2883
  end
@@ -2694,71 +2895,71 @@ module ScientificNameClean
2694
2895
  if r12
2695
2896
  r0 = r12
2696
2897
  else
2697
- i20, s20 = index, []
2698
- r21 = _nt_left_paren
2699
- s20 << r21
2700
- if r21
2701
- r22 = _nt_space
2702
- s20 << r22
2703
- if r22
2704
- r23 = _nt_simple_authorship
2705
- s20 << r23
2706
- if r23
2707
- r24 = _nt_space
2708
- s20 << r24
2709
- if r24
2710
- r25 = _nt_right_paren
2711
- s20 << r25
2898
+ i22, s22 = index, []
2899
+ r23 = _nt_left_paren
2900
+ s22 << r23
2901
+ if r23
2902
+ r24 = _nt_space
2903
+ s22 << r24
2904
+ if r24
2905
+ r25 = _nt_simple_authorship
2906
+ s22 << r25
2907
+ if r25
2908
+ r26 = _nt_space
2909
+ s22 << r26
2910
+ if r26
2911
+ r27 = _nt_right_paren
2912
+ s22 << r27
2712
2913
  end
2713
2914
  end
2714
2915
  end
2715
2916
  end
2716
- if s20.last
2717
- r20 = instantiate_node(SyntaxNode,input, i20...index, s20)
2718
- r20.extend(BasionymAuthorshipWithParenthesis4)
2719
- r20.extend(BasionymAuthorshipWithParenthesis5)
2917
+ if s22.last
2918
+ r22 = instantiate_node(SyntaxNode,input, i22...index, s22)
2919
+ r22.extend(BasionymAuthorshipWithParenthesis4)
2920
+ r22.extend(BasionymAuthorshipWithParenthesis5)
2720
2921
  else
2721
- self.index = i20
2722
- r20 = nil
2922
+ self.index = i22
2923
+ r22 = nil
2723
2924
  end
2724
- if r20
2725
- r0 = r20
2925
+ if r22
2926
+ r0 = r22
2726
2927
  else
2727
- i26, s26 = index, []
2728
- r27 = _nt_left_paren
2729
- s26 << r27
2730
- if r27
2731
- r28 = _nt_space
2732
- s26 << r28
2733
- if r28
2928
+ i28, s28 = index, []
2929
+ r29 = _nt_left_paren
2930
+ s28 << r29
2931
+ if r29
2932
+ r30 = _nt_space
2933
+ s28 << r30
2934
+ if r30
2734
2935
  if input.index("?", index) == index
2735
- r29 = instantiate_node(SyntaxNode,input, index...(index + 1))
2936
+ r31 = instantiate_node(SyntaxNode,input, index...(index + 1))
2736
2937
  @index += 1
2737
2938
  else
2738
2939
  terminal_parse_failure("?")
2739
- r29 = nil
2940
+ r31 = nil
2740
2941
  end
2741
- s26 << r29
2742
- if r29
2743
- r30 = _nt_space
2744
- s26 << r30
2745
- if r30
2746
- r31 = _nt_right_paren
2747
- s26 << r31
2942
+ s28 << r31
2943
+ if r31
2944
+ r32 = _nt_space
2945
+ s28 << r32
2946
+ if r32
2947
+ r33 = _nt_right_paren
2948
+ s28 << r33
2748
2949
  end
2749
2950
  end
2750
2951
  end
2751
2952
  end
2752
- if s26.last
2753
- r26 = instantiate_node(SyntaxNode,input, i26...index, s26)
2754
- r26.extend(BasionymAuthorshipWithParenthesis6)
2755
- r26.extend(BasionymAuthorshipWithParenthesis7)
2953
+ if s28.last
2954
+ r28 = instantiate_node(SyntaxNode,input, i28...index, s28)
2955
+ r28.extend(BasionymAuthorshipWithParenthesis6)
2956
+ r28.extend(BasionymAuthorshipWithParenthesis7)
2756
2957
  else
2757
- self.index = i26
2758
- r26 = nil
2958
+ self.index = i28
2959
+ r28 = nil
2759
2960
  end
2760
- if r26
2761
- r0 = r26
2961
+ if r28
2962
+ r0 = r28
2762
2963
  else
2763
2964
  self.index = i0
2764
2965
  r0 = nil
@@ -2850,6 +3051,30 @@ module ScientificNameClean
2850
3051
  def b
2851
3052
  elements[4]
2852
3053
  end
3054
+
3055
+ def space
3056
+ elements[6]
3057
+ end
3058
+
3059
+ def space
3060
+ elements[8]
3061
+ end
3062
+
3063
+ def authors_names
3064
+ elements[9]
3065
+ end
3066
+
3067
+ def space
3068
+ elements[10]
3069
+ end
3070
+
3071
+ def space
3072
+ elements[12]
3073
+ end
3074
+
3075
+ def year
3076
+ elements[13]
3077
+ end
2853
3078
  end
2854
3079
 
2855
3080
  module SimpleAuthorship1
@@ -2875,6 +3100,46 @@ module ScientificNameClean
2875
3100
  end
2876
3101
 
2877
3102
  module SimpleAuthorship2
3103
+ def a
3104
+ elements[0]
3105
+ end
3106
+
3107
+ def space
3108
+ elements[1]
3109
+ end
3110
+
3111
+ def space
3112
+ elements[3]
3113
+ end
3114
+
3115
+ def b
3116
+ elements[4]
3117
+ end
3118
+ end
3119
+
3120
+ module SimpleAuthorship3
3121
+ def value
3122
+ a.value + " " + b.value
3123
+ end
3124
+
3125
+ def pos
3126
+ a.pos.merge(b.pos)
3127
+ end
3128
+
3129
+ def details
3130
+ details_with_arg(:basionymAuthorTeam)
3131
+ end
3132
+
3133
+ def details_with_arg(authorTeamType = 'basionymAuthorTeam')
3134
+ { :authorship => text_value,
3135
+ authorTeamType.to_sym => {
3136
+ :authorTeam => a.text_value.strip
3137
+ }.merge(a.details).merge(b.details)
3138
+ }
3139
+ end
3140
+ end
3141
+
3142
+ module SimpleAuthorship4
2878
3143
  def details
2879
3144
  details = details_with_arg(:basionymAuthorTeam)
2880
3145
  details[:basionymAuthorTeam].merge!(super)
@@ -2922,8 +3187,75 @@ module ScientificNameClean
2922
3187
  r6 = _nt_space
2923
3188
  s1 << r6
2924
3189
  if r6
2925
- r7 = _nt_year
3190
+ r8 = _nt_year
3191
+ if r8
3192
+ r7 = r8
3193
+ else
3194
+ r7 = instantiate_node(SyntaxNode,input, index...index)
3195
+ end
2926
3196
  s1 << r7
3197
+ if r7
3198
+ if input.index(Regexp.new('[,]'), index) == index
3199
+ r10 = instantiate_node(SyntaxNode,input, index...(index + 1))
3200
+ @index += 1
3201
+ else
3202
+ r10 = nil
3203
+ end
3204
+ if r10
3205
+ r9 = r10
3206
+ else
3207
+ r9 = instantiate_node(SyntaxNode,input, index...index)
3208
+ end
3209
+ s1 << r9
3210
+ if r9
3211
+ r11 = _nt_space
3212
+ s1 << r11
3213
+ if r11
3214
+ if input.index("non", index) == index
3215
+ r12 = instantiate_node(SyntaxNode,input, index...(index + 3))
3216
+ @index += 3
3217
+ else
3218
+ terminal_parse_failure("non")
3219
+ r12 = nil
3220
+ end
3221
+ s1 << r12
3222
+ if r12
3223
+ r13 = _nt_space
3224
+ s1 << r13
3225
+ if r13
3226
+ r14 = _nt_authors_names
3227
+ s1 << r14
3228
+ if r14
3229
+ r15 = _nt_space
3230
+ s1 << r15
3231
+ if r15
3232
+ if input.index(Regexp.new('[,]'), index) == index
3233
+ r17 = instantiate_node(SyntaxNode,input, index...(index + 1))
3234
+ @index += 1
3235
+ else
3236
+ r17 = nil
3237
+ end
3238
+ if r17
3239
+ r16 = r17
3240
+ else
3241
+ r16 = instantiate_node(SyntaxNode,input, index...index)
3242
+ end
3243
+ s1 << r16
3244
+ if r16
3245
+ r18 = _nt_space
3246
+ s1 << r18
3247
+ if r18
3248
+ r19 = _nt_year
3249
+ s1 << r19
3250
+ end
3251
+ end
3252
+ end
3253
+ end
3254
+ end
3255
+ end
3256
+ end
3257
+ end
3258
+ end
2927
3259
  end
2928
3260
  end
2929
3261
  end
@@ -2939,13 +3271,54 @@ module ScientificNameClean
2939
3271
  if r1
2940
3272
  r0 = r1
2941
3273
  else
2942
- r8 = _nt_authors_names
2943
- r8.extend(SimpleAuthorship2)
2944
- if r8
2945
- r0 = r8
3274
+ i20, s20 = index, []
3275
+ r21 = _nt_authors_names
3276
+ s20 << r21
3277
+ if r21
3278
+ r22 = _nt_space
3279
+ s20 << r22
3280
+ if r22
3281
+ if input.index(Regexp.new('[,]'), index) == index
3282
+ r24 = instantiate_node(SyntaxNode,input, index...(index + 1))
3283
+ @index += 1
3284
+ else
3285
+ r24 = nil
3286
+ end
3287
+ if r24
3288
+ r23 = r24
3289
+ else
3290
+ r23 = instantiate_node(SyntaxNode,input, index...index)
3291
+ end
3292
+ s20 << r23
3293
+ if r23
3294
+ r25 = _nt_space
3295
+ s20 << r25
3296
+ if r25
3297
+ r26 = _nt_year
3298
+ s20 << r26
3299
+ end
3300
+ end
3301
+ end
3302
+ end
3303
+ if s20.last
3304
+ r20 = instantiate_node(SyntaxNode,input, i20...index, s20)
3305
+ r20.extend(SimpleAuthorship2)
3306
+ r20.extend(SimpleAuthorship3)
2946
3307
  else
2947
- self.index = i0
2948
- r0 = nil
3308
+ self.index = i20
3309
+ r20 = nil
3310
+ end
3311
+ if r20
3312
+ r0 = r20
3313
+ else
3314
+ r27 = _nt_authors_names
3315
+ r27.extend(SimpleAuthorship4)
3316
+ if r27
3317
+ r0 = r27
3318
+ else
3319
+ self.index = i0
3320
+ r0 = nil
3321
+ end
2949
3322
  end
2950
3323
  end
2951
3324
 
@@ -3515,201 +3888,189 @@ module ScientificNameClean
3515
3888
  r0 = r1
3516
3889
  else
3517
3890
  i2 = index
3518
- if input.index("bis", index) == index
3519
- r3 = instantiate_node(SyntaxNode,input, index...(index + 3))
3520
- @index += 3
3891
+ if input.index("arg.", index) == index
3892
+ r3 = instantiate_node(SyntaxNode,input, index...(index + 4))
3893
+ @index += 4
3521
3894
  else
3522
- terminal_parse_failure("bis")
3895
+ terminal_parse_failure("arg.")
3523
3896
  r3 = nil
3524
3897
  end
3525
3898
  if r3
3526
3899
  r2 = r3
3527
3900
  r2.extend(AuthorWord1)
3528
3901
  else
3529
- if input.index("arg.", index) == index
3530
- r4 = instantiate_node(SyntaxNode,input, index...(index + 4))
3531
- @index += 4
3902
+ if input.index("et al.\{\?\}", index) == index
3903
+ r4 = instantiate_node(SyntaxNode,input, index...(index + 9))
3904
+ @index += 9
3532
3905
  else
3533
- terminal_parse_failure("arg.")
3906
+ terminal_parse_failure("et al.\{\?\}")
3534
3907
  r4 = nil
3535
3908
  end
3536
3909
  if r4
3537
3910
  r2 = r4
3538
3911
  r2.extend(AuthorWord1)
3539
3912
  else
3540
- if input.index("et al.\{\?\}", index) == index
3541
- r5 = instantiate_node(SyntaxNode,input, index...(index + 9))
3542
- @index += 9
3913
+ if input.index("et al.", index) == index
3914
+ r5 = instantiate_node(SyntaxNode,input, index...(index + 6))
3915
+ @index += 6
3543
3916
  else
3544
- terminal_parse_failure("et al.\{\?\}")
3917
+ terminal_parse_failure("et al.")
3545
3918
  r5 = nil
3546
3919
  end
3547
3920
  if r5
3548
3921
  r2 = r5
3549
3922
  r2.extend(AuthorWord1)
3550
3923
  else
3551
- if input.index("et al.", index) == index
3552
- r6 = instantiate_node(SyntaxNode,input, index...(index + 6))
3553
- @index += 6
3554
- else
3555
- terminal_parse_failure("et al.")
3556
- r6 = nil
3557
- end
3558
- if r6
3559
- r2 = r6
3560
- r2.extend(AuthorWord1)
3561
- else
3562
- self.index = i2
3563
- r2 = nil
3564
- end
3924
+ self.index = i2
3925
+ r2 = nil
3565
3926
  end
3566
3927
  end
3567
3928
  end
3568
3929
  if r2
3569
3930
  r0 = r2
3570
3931
  else
3571
- i7, s7 = index, []
3572
- i8 = index
3932
+ i6, s6 = index, []
3933
+ i7 = index
3573
3934
  if input.index("Å", index) == index
3574
- r9 = instantiate_node(SyntaxNode,input, index...(index + 1))
3935
+ r8 = instantiate_node(SyntaxNode,input, index...(index + 1))
3575
3936
  @index += 1
3576
3937
  else
3577
3938
  terminal_parse_failure("Å")
3578
- r9 = nil
3939
+ r8 = nil
3579
3940
  end
3580
- if r9
3581
- r8 = r9
3941
+ if r8
3942
+ r7 = r8
3582
3943
  else
3583
3944
  if input.index("Ö", index) == index
3584
- r10 = instantiate_node(SyntaxNode,input, index...(index + 1))
3945
+ r9 = instantiate_node(SyntaxNode,input, index...(index + 1))
3585
3946
  @index += 1
3586
3947
  else
3587
3948
  terminal_parse_failure("Ö")
3588
- r10 = nil
3949
+ r9 = nil
3589
3950
  end
3590
- if r10
3591
- r8 = r10
3951
+ if r9
3952
+ r7 = r9
3592
3953
  else
3593
3954
  if input.index("Á", index) == index
3594
- r11 = instantiate_node(SyntaxNode,input, index...(index + 1))
3955
+ r10 = instantiate_node(SyntaxNode,input, index...(index + 1))
3595
3956
  @index += 1
3596
3957
  else
3597
3958
  terminal_parse_failure("Á")
3598
- r11 = nil
3959
+ r10 = nil
3599
3960
  end
3600
- if r11
3601
- r8 = r11
3961
+ if r10
3962
+ r7 = r10
3602
3963
  else
3603
3964
  if input.index("Ø", index) == index
3604
- r12 = instantiate_node(SyntaxNode,input, index...(index + 1))
3965
+ r11 = instantiate_node(SyntaxNode,input, index...(index + 1))
3605
3966
  @index += 1
3606
3967
  else
3607
3968
  terminal_parse_failure("Ø")
3608
- r12 = nil
3969
+ r11 = nil
3609
3970
  end
3610
- if r12
3611
- r8 = r12
3971
+ if r11
3972
+ r7 = r11
3612
3973
  else
3613
3974
  if input.index("Ô", index) == index
3614
- r13 = instantiate_node(SyntaxNode,input, index...(index + 1))
3975
+ r12 = instantiate_node(SyntaxNode,input, index...(index + 1))
3615
3976
  @index += 1
3616
3977
  else
3617
3978
  terminal_parse_failure("Ô")
3618
- r13 = nil
3979
+ r12 = nil
3619
3980
  end
3620
- if r13
3621
- r8 = r13
3981
+ if r12
3982
+ r7 = r12
3622
3983
  else
3623
3984
  if input.index("Š", index) == index
3624
- r14 = instantiate_node(SyntaxNode,input, index...(index + 1))
3985
+ r13 = instantiate_node(SyntaxNode,input, index...(index + 1))
3625
3986
  @index += 1
3626
3987
  else
3627
3988
  terminal_parse_failure("Š")
3628
- r14 = nil
3989
+ r13 = nil
3629
3990
  end
3630
- if r14
3631
- r8 = r14
3991
+ if r13
3992
+ r7 = r13
3632
3993
  else
3633
3994
  if input.index("Ś", index) == index
3634
- r15 = instantiate_node(SyntaxNode,input, index...(index + 1))
3995
+ r14 = instantiate_node(SyntaxNode,input, index...(index + 1))
3635
3996
  @index += 1
3636
3997
  else
3637
3998
  terminal_parse_failure("Ś")
3638
- r15 = nil
3999
+ r14 = nil
3639
4000
  end
3640
- if r15
3641
- r8 = r15
4001
+ if r14
4002
+ r7 = r14
3642
4003
  else
3643
4004
  if input.index("Č", index) == index
3644
- r16 = instantiate_node(SyntaxNode,input, index...(index + 1))
4005
+ r15 = instantiate_node(SyntaxNode,input, index...(index + 1))
3645
4006
  @index += 1
3646
4007
  else
3647
4008
  terminal_parse_failure("Č")
3648
- r16 = nil
4009
+ r15 = nil
3649
4010
  end
3650
- if r16
3651
- r8 = r16
4011
+ if r15
4012
+ r7 = r15
3652
4013
  else
3653
4014
  if input.index("Ķ", index) == index
3654
- r17 = instantiate_node(SyntaxNode,input, index...(index + 1))
4015
+ r16 = instantiate_node(SyntaxNode,input, index...(index + 1))
3655
4016
  @index += 1
3656
4017
  else
3657
4018
  terminal_parse_failure("Ķ")
3658
- r17 = nil
4019
+ r16 = nil
3659
4020
  end
3660
- if r17
3661
- r8 = r17
4021
+ if r16
4022
+ r7 = r16
3662
4023
  else
3663
4024
  if input.index("Ł", index) == index
3664
- r18 = instantiate_node(SyntaxNode,input, index...(index + 1))
4025
+ r17 = instantiate_node(SyntaxNode,input, index...(index + 1))
3665
4026
  @index += 1
3666
4027
  else
3667
4028
  terminal_parse_failure("Ł")
3668
- r18 = nil
4029
+ r17 = nil
3669
4030
  end
3670
- if r18
3671
- r8 = r18
4031
+ if r17
4032
+ r7 = r17
3672
4033
  else
3673
4034
  if input.index("É", index) == index
3674
- r19 = instantiate_node(SyntaxNode,input, index...(index + 1))
4035
+ r18 = instantiate_node(SyntaxNode,input, index...(index + 1))
3675
4036
  @index += 1
3676
4037
  else
3677
4038
  terminal_parse_failure("É")
3678
- r19 = nil
4039
+ r18 = nil
3679
4040
  end
3680
- if r19
3681
- r8 = r19
4041
+ if r18
4042
+ r7 = r18
3682
4043
  else
3683
4044
  if input.index("Ž", index) == index
3684
- r20 = instantiate_node(SyntaxNode,input, index...(index + 1))
4045
+ r19 = instantiate_node(SyntaxNode,input, index...(index + 1))
3685
4046
  @index += 1
3686
4047
  else
3687
4048
  terminal_parse_failure("Ž")
3688
- r20 = nil
4049
+ r19 = nil
3689
4050
  end
3690
- if r20
3691
- r8 = r20
4051
+ if r19
4052
+ r7 = r19
3692
4053
  else
3693
4054
  if input.index(Regexp.new('[A-W]'), index) == index
3694
- r21 = instantiate_node(SyntaxNode,input, index...(index + 1))
4055
+ r20 = instantiate_node(SyntaxNode,input, index...(index + 1))
3695
4056
  @index += 1
3696
4057
  else
3697
- r21 = nil
4058
+ r20 = nil
3698
4059
  end
3699
- if r21
3700
- r8 = r21
4060
+ if r20
4061
+ r7 = r20
3701
4062
  else
3702
4063
  if input.index(Regexp.new('[Y-Z]'), index) == index
3703
- r22 = instantiate_node(SyntaxNode,input, index...(index + 1))
4064
+ r21 = instantiate_node(SyntaxNode,input, index...(index + 1))
3704
4065
  @index += 1
3705
4066
  else
3706
- r22 = nil
4067
+ r21 = nil
3707
4068
  end
3708
- if r22
3709
- r8 = r22
4069
+ if r21
4070
+ r7 = r21
3710
4071
  else
3711
- self.index = i8
3712
- r8 = nil
4072
+ self.index = i7
4073
+ r7 = nil
3713
4074
  end
3714
4075
  end
3715
4076
  end
@@ -3724,82 +4085,82 @@ module ScientificNameClean
3724
4085
  end
3725
4086
  end
3726
4087
  end
3727
- s7 << r8
3728
- if r8
3729
- s23, i23 = [], index
4088
+ s6 << r7
4089
+ if r7
4090
+ s22, i22 = [], index
3730
4091
  loop do
3731
4092
  if input.index(Regexp.new('[^0-9\\[\\]\\(\\)\\s&,]'), index) == index
3732
- r24 = instantiate_node(SyntaxNode,input, index...(index + 1))
4093
+ r23 = instantiate_node(SyntaxNode,input, index...(index + 1))
3733
4094
  @index += 1
3734
4095
  else
3735
- r24 = nil
4096
+ r23 = nil
3736
4097
  end
3737
- if r24
3738
- s23 << r24
4098
+ if r23
4099
+ s22 << r23
3739
4100
  else
3740
4101
  break
3741
4102
  end
3742
4103
  end
3743
- r23 = instantiate_node(SyntaxNode,input, i23...index, s23)
3744
- s7 << r23
4104
+ r22 = instantiate_node(SyntaxNode,input, i22...index, s22)
4105
+ s6 << r22
3745
4106
  end
3746
- if s7.last
3747
- r7 = instantiate_node(SyntaxNode,input, i7...index, s7)
3748
- r7.extend(AuthorWord2)
3749
- r7.extend(AuthorWord3)
4107
+ if s6.last
4108
+ r6 = instantiate_node(SyntaxNode,input, i6...index, s6)
4109
+ r6.extend(AuthorWord2)
4110
+ r6.extend(AuthorWord3)
3750
4111
  else
3751
- self.index = i7
3752
- r7 = nil
4112
+ self.index = i6
4113
+ r6 = nil
3753
4114
  end
3754
- if r7
3755
- r0 = r7
4115
+ if r6
4116
+ r0 = r6
3756
4117
  else
3757
- i25, s25 = index, []
4118
+ i24, s24 = index, []
3758
4119
  if input.index("X", index) == index
3759
- r26 = instantiate_node(SyntaxNode,input, index...(index + 1))
4120
+ r25 = instantiate_node(SyntaxNode,input, index...(index + 1))
3760
4121
  @index += 1
3761
4122
  else
3762
4123
  terminal_parse_failure("X")
3763
- r26 = nil
4124
+ r25 = nil
3764
4125
  end
3765
- s25 << r26
3766
- if r26
3767
- s27, i27 = [], index
4126
+ s24 << r25
4127
+ if r25
4128
+ s26, i26 = [], index
3768
4129
  loop do
3769
4130
  if input.index(Regexp.new('[^0-9\\[\\]\\(\\)\\s&,]'), index) == index
3770
- r28 = instantiate_node(SyntaxNode,input, index...(index + 1))
4131
+ r27 = instantiate_node(SyntaxNode,input, index...(index + 1))
3771
4132
  @index += 1
3772
4133
  else
3773
- r28 = nil
4134
+ r27 = nil
3774
4135
  end
3775
- if r28
3776
- s27 << r28
4136
+ if r27
4137
+ s26 << r27
3777
4138
  else
3778
4139
  break
3779
4140
  end
3780
4141
  end
3781
- if s27.empty?
3782
- self.index = i27
3783
- r27 = nil
4142
+ if s26.empty?
4143
+ self.index = i26
4144
+ r26 = nil
3784
4145
  else
3785
- r27 = instantiate_node(SyntaxNode,input, i27...index, s27)
4146
+ r26 = instantiate_node(SyntaxNode,input, i26...index, s26)
3786
4147
  end
3787
- s25 << r27
4148
+ s24 << r26
3788
4149
  end
3789
- if s25.last
3790
- r25 = instantiate_node(SyntaxNode,input, i25...index, s25)
3791
- r25.extend(AuthorWord4)
3792
- r25.extend(AuthorWord5)
4150
+ if s24.last
4151
+ r24 = instantiate_node(SyntaxNode,input, i24...index, s24)
4152
+ r24.extend(AuthorWord4)
4153
+ r24.extend(AuthorWord5)
3793
4154
  else
3794
- self.index = i25
3795
- r25 = nil
4155
+ self.index = i24
4156
+ r24 = nil
3796
4157
  end
3797
- if r25
3798
- r0 = r25
4158
+ if r24
4159
+ r0 = r24
3799
4160
  else
3800
- r29 = _nt_author_prefix_word
3801
- if r29
3802
- r0 = r29
4161
+ r28 = _nt_author_prefix_word
4162
+ if r28
4163
+ r0 = r28
3803
4164
  else
3804
4165
  self.index = i0
3805
4166
  r0 = nil
@@ -3845,98 +4206,153 @@ module ScientificNameClean
3845
4206
  s0 << r1
3846
4207
  if r1
3847
4208
  i2 = index
3848
- if input.index("da", index) == index
4209
+ if input.index("ab", index) == index
3849
4210
  r3 = instantiate_node(SyntaxNode,input, index...(index + 2))
3850
4211
  @index += 2
3851
4212
  else
3852
- terminal_parse_failure("da")
4213
+ terminal_parse_failure("ab")
3853
4214
  r3 = nil
3854
4215
  end
3855
4216
  if r3
3856
4217
  r2 = r3
3857
4218
  else
3858
- if input.index("der", index) == index
4219
+ if input.index("bis", index) == index
3859
4220
  r4 = instantiate_node(SyntaxNode,input, index...(index + 3))
3860
4221
  @index += 3
3861
4222
  else
3862
- terminal_parse_failure("der")
4223
+ terminal_parse_failure("bis")
3863
4224
  r4 = nil
3864
4225
  end
3865
4226
  if r4
3866
4227
  r2 = r4
3867
4228
  else
3868
- if input.index("den", index) == index
3869
- r5 = instantiate_node(SyntaxNode,input, index...(index + 3))
3870
- @index += 3
4229
+ if input.index("da", index) == index
4230
+ r5 = instantiate_node(SyntaxNode,input, index...(index + 2))
4231
+ @index += 2
3871
4232
  else
3872
- terminal_parse_failure("den")
4233
+ terminal_parse_failure("da")
3873
4234
  r5 = nil
3874
4235
  end
3875
4236
  if r5
3876
4237
  r2 = r5
3877
4238
  else
3878
- if input.index("de", index) == index
3879
- r6 = instantiate_node(SyntaxNode,input, index...(index + 2))
3880
- @index += 2
4239
+ if input.index("der", index) == index
4240
+ r6 = instantiate_node(SyntaxNode,input, index...(index + 3))
4241
+ @index += 3
3881
4242
  else
3882
- terminal_parse_failure("de")
4243
+ terminal_parse_failure("der")
3883
4244
  r6 = nil
3884
4245
  end
3885
4246
  if r6
3886
4247
  r2 = r6
3887
4248
  else
3888
- if input.index("du", index) == index
3889
- r7 = instantiate_node(SyntaxNode,input, index...(index + 2))
3890
- @index += 2
4249
+ if input.index("den", index) == index
4250
+ r7 = instantiate_node(SyntaxNode,input, index...(index + 3))
4251
+ @index += 3
3891
4252
  else
3892
- terminal_parse_failure("du")
4253
+ terminal_parse_failure("den")
3893
4254
  r7 = nil
3894
4255
  end
3895
4256
  if r7
3896
4257
  r2 = r7
3897
4258
  else
3898
- if input.index("la", index) == index
3899
- r8 = instantiate_node(SyntaxNode,input, index...(index + 2))
3900
- @index += 2
4259
+ if input.index("della", index) == index
4260
+ r8 = instantiate_node(SyntaxNode,input, index...(index + 5))
4261
+ @index += 5
3901
4262
  else
3902
- terminal_parse_failure("la")
4263
+ terminal_parse_failure("della")
3903
4264
  r8 = nil
3904
4265
  end
3905
4266
  if r8
3906
4267
  r2 = r8
3907
4268
  else
3908
- if input.index("ter", index) == index
3909
- r9 = instantiate_node(SyntaxNode,input, index...(index + 3))
3910
- @index += 3
4269
+ if input.index("dela", index) == index
4270
+ r9 = instantiate_node(SyntaxNode,input, index...(index + 4))
4271
+ @index += 4
3911
4272
  else
3912
- terminal_parse_failure("ter")
4273
+ terminal_parse_failure("dela")
3913
4274
  r9 = nil
3914
4275
  end
3915
4276
  if r9
3916
4277
  r2 = r9
3917
4278
  else
3918
- if input.index("van", index) == index
3919
- r10 = instantiate_node(SyntaxNode,input, index...(index + 3))
3920
- @index += 3
4279
+ if input.index("de", index) == index
4280
+ r10 = instantiate_node(SyntaxNode,input, index...(index + 2))
4281
+ @index += 2
3921
4282
  else
3922
- terminal_parse_failure("van")
4283
+ terminal_parse_failure("de")
3923
4284
  r10 = nil
3924
4285
  end
3925
4286
  if r10
3926
4287
  r2 = r10
3927
4288
  else
3928
- if input.index("von", index) == index
3929
- r11 = instantiate_node(SyntaxNode,input, index...(index + 3))
3930
- @index += 3
4289
+ if input.index("di", index) == index
4290
+ r11 = instantiate_node(SyntaxNode,input, index...(index + 2))
4291
+ @index += 2
3931
4292
  else
3932
- terminal_parse_failure("von")
4293
+ terminal_parse_failure("di")
3933
4294
  r11 = nil
3934
4295
  end
3935
4296
  if r11
3936
4297
  r2 = r11
3937
4298
  else
3938
- self.index = i2
3939
- r2 = nil
4299
+ if input.index("du", index) == index
4300
+ r12 = instantiate_node(SyntaxNode,input, index...(index + 2))
4301
+ @index += 2
4302
+ else
4303
+ terminal_parse_failure("du")
4304
+ r12 = nil
4305
+ end
4306
+ if r12
4307
+ r2 = r12
4308
+ else
4309
+ if input.index("la", index) == index
4310
+ r13 = instantiate_node(SyntaxNode,input, index...(index + 2))
4311
+ @index += 2
4312
+ else
4313
+ terminal_parse_failure("la")
4314
+ r13 = nil
4315
+ end
4316
+ if r13
4317
+ r2 = r13
4318
+ else
4319
+ if input.index("ter", index) == index
4320
+ r14 = instantiate_node(SyntaxNode,input, index...(index + 3))
4321
+ @index += 3
4322
+ else
4323
+ terminal_parse_failure("ter")
4324
+ r14 = nil
4325
+ end
4326
+ if r14
4327
+ r2 = r14
4328
+ else
4329
+ if input.index("van", index) == index
4330
+ r15 = instantiate_node(SyntaxNode,input, index...(index + 3))
4331
+ @index += 3
4332
+ else
4333
+ terminal_parse_failure("van")
4334
+ r15 = nil
4335
+ end
4336
+ if r15
4337
+ r2 = r15
4338
+ else
4339
+ if input.index("von", index) == index
4340
+ r16 = instantiate_node(SyntaxNode,input, index...(index + 3))
4341
+ @index += 3
4342
+ else
4343
+ terminal_parse_failure("von")
4344
+ r16 = nil
4345
+ end
4346
+ if r16
4347
+ r2 = r16
4348
+ else
4349
+ self.index = i2
4350
+ r2 = nil
4351
+ end
4352
+ end
4353
+ end
4354
+ end
4355
+ end
3940
4356
  end
3941
4357
  end
3942
4358
  end
@@ -3948,15 +4364,15 @@ module ScientificNameClean
3948
4364
  end
3949
4365
  s0 << r2
3950
4366
  if r2
3951
- i12 = index
3952
- r13 = _nt_space_hard
3953
- if r13
3954
- self.index = i12
3955
- r12 = instantiate_node(SyntaxNode,input, index...index)
4367
+ i17 = index
4368
+ r18 = _nt_space_hard
4369
+ if r18
4370
+ self.index = i17
4371
+ r17 = instantiate_node(SyntaxNode,input, index...index)
3956
4372
  else
3957
- r12 = nil
4373
+ r17 = nil
3958
4374
  end
3959
- s0 << r12
4375
+ s0 << r17
3960
4376
  end
3961
4377
  end
3962
4378
  if s0.last
@@ -4540,6 +4956,79 @@ module ScientificNameClean
4540
4956
  return r0
4541
4957
  end
4542
4958
 
4959
+ module SpeciesPrefix0
4960
+ end
4961
+
4962
+ def _nt_species_prefix
4963
+ start_index = index
4964
+ if node_cache[:species_prefix].has_key?(index)
4965
+ cached = node_cache[:species_prefix][index]
4966
+ @index = cached.interval.end if cached
4967
+ return cached
4968
+ end
4969
+
4970
+ i0, s0 = index, []
4971
+ i1 = index
4972
+ if input.index("aff.", index) == index
4973
+ r2 = instantiate_node(SyntaxNode,input, index...(index + 4))
4974
+ @index += 4
4975
+ else
4976
+ terminal_parse_failure("aff.")
4977
+ r2 = nil
4978
+ end
4979
+ if r2
4980
+ r1 = r2
4981
+ else
4982
+ if input.index("corrig.", index) == index
4983
+ r3 = instantiate_node(SyntaxNode,input, index...(index + 7))
4984
+ @index += 7
4985
+ else
4986
+ terminal_parse_failure("corrig.")
4987
+ r3 = nil
4988
+ end
4989
+ if r3
4990
+ r1 = r3
4991
+ else
4992
+ if input.index("?", index) == index
4993
+ r4 = instantiate_node(SyntaxNode,input, index...(index + 1))
4994
+ @index += 1
4995
+ else
4996
+ terminal_parse_failure("?")
4997
+ r4 = nil
4998
+ end
4999
+ if r4
5000
+ r1 = r4
5001
+ else
5002
+ self.index = i1
5003
+ r1 = nil
5004
+ end
5005
+ end
5006
+ end
5007
+ s0 << r1
5008
+ if r1
5009
+ i5 = index
5010
+ r6 = _nt_space_hard
5011
+ if r6
5012
+ self.index = i5
5013
+ r5 = instantiate_node(SyntaxNode,input, index...index)
5014
+ else
5015
+ r5 = nil
5016
+ end
5017
+ s0 << r5
5018
+ end
5019
+ if s0.last
5020
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
5021
+ r0.extend(SpeciesPrefix0)
5022
+ else
5023
+ self.index = i0
5024
+ r0 = nil
5025
+ end
5026
+
5027
+ node_cache[:species_prefix][start_index] = r0
5028
+
5029
+ return r0
5030
+ end
5031
+
4543
5032
  module SpeciesWord0
4544
5033
  def a
4545
5034
  elements[0]
@@ -4673,7 +5162,7 @@ module ScientificNameClean
4673
5162
 
4674
5163
  i0 = index
4675
5164
  i1, s1 = index, []
4676
- if input.index(Regexp.new('[a-zëüäöïé]'), index) == index
5165
+ if input.index(Regexp.new('[a-zëüäöïéåóç]'), index) == index
4677
5166
  r2 = instantiate_node(SyntaxNode,input, index...(index + 1))
4678
5167
  @index += 1
4679
5168
  else
@@ -4839,7 +5328,7 @@ module ScientificNameClean
4839
5328
 
4840
5329
  s0, i0 = [], index
4841
5330
  loop do
4842
- if input.index(Regexp.new('[a-z\\-ëüäöïé]'), index) == index
5331
+ if input.index(Regexp.new('[a-z\\-ëüäöïéåóç]'), index) == index
4843
5332
  r1 = instantiate_node(SyntaxNode,input, index...(index + 1))
4844
5333
  @index += 1
4845
5334
  else