dimus-biodiversity 0.5.1 → 0.5.2

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.
@@ -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