biodiversity 3.5.1 → 4.0.0

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.
Files changed (40) hide show
  1. checksums.yaml +5 -5
  2. data/.gitignore +1 -0
  3. data/.rubocop.yml +9 -6
  4. data/.ruby-version +1 -1
  5. data/.travis.yml +1 -6
  6. data/CHANGELOG +3 -0
  7. data/Gemfile +2 -0
  8. data/README.md +37 -178
  9. data/Rakefile +15 -48
  10. data/biodiversity.gemspec +18 -21
  11. data/clib/linux/libgnparser.h +93 -0
  12. data/clib/linux/libgnparser.so +0 -0
  13. data/clib/mac/libgnparser.h +93 -0
  14. data/clib/mac/libgnparser.so +0 -0
  15. data/lib/biodiversity.rb +4 -9
  16. data/lib/biodiversity/parser.rb +65 -281
  17. data/lib/biodiversity/version.rb +8 -1
  18. data/spec/lib/biodiversity_spec.rb +9 -0
  19. data/spec/lib/parser_spec.rb +38 -0
  20. data/spec/spec_helper.rb +4 -81
  21. metadata +27 -102
  22. data/.byebug_history +0 -18
  23. data/.document +0 -5
  24. data/examples/socket_client.rb +0 -25
  25. data/lib/biodiversity/guid.rb +0 -1
  26. data/lib/biodiversity/guid/lsid.rb +0 -16
  27. data/lib/biodiversity/parser/scientific_name_canonical.rb +0 -528
  28. data/lib/biodiversity/parser/scientific_name_canonical.treetop +0 -120
  29. data/lib/biodiversity/parser/scientific_name_clean.rb +0 -8991
  30. data/lib/biodiversity/parser/scientific_name_clean.treetop +0 -1632
  31. data/lib/biodiversity/parser/scientific_name_dirty.rb +0 -1298
  32. data/lib/biodiversity/parser/scientific_name_dirty.treetop +0 -264
  33. data/spec/biodiversity_spec.rb +0 -11
  34. data/spec/files/test_data.txt +0 -490
  35. data/spec/files/todo.txt +0 -55
  36. data/spec/guid/lsid.spec.rb +0 -15
  37. data/spec/parser/scientific_name_canonical_spec.rb +0 -36
  38. data/spec/parser/scientific_name_clean_spec.rb +0 -1137
  39. data/spec/parser/scientific_name_dirty_spec.rb +0 -165
  40. data/spec/parser/scientific_name_spec.rb +0 -193
@@ -1,1298 +0,0 @@
1
- # encoding: UTF-8
2
- # Autogenerated from a Treetop grammar. Edits may be lost.
3
-
4
-
5
- module ScientificNameDirty
6
- include Treetop::Runtime
7
-
8
- def root
9
- @root ||= :root
10
- end
11
-
12
- include ScientificNameClean
13
-
14
- module Root0
15
- def space1
16
- elements[0]
17
- end
18
-
19
- def a
20
- elements[1]
21
- end
22
-
23
- def space2
24
- elements[2]
25
- end
26
- end
27
-
28
- module Root1
29
- def value
30
- a.value.gsub(/\s{2,}/, " ").strip
31
- end
32
-
33
- def canonical
34
- a.canonical.gsub(/\s{2,}/, " ").strip
35
- end
36
-
37
- def pos
38
- a.pos
39
- end
40
-
41
- def hybrid
42
- a.hybrid
43
- end
44
-
45
- def details
46
- a.details.class == Array ? a.details : [a.details]
47
- end
48
-
49
- def parser_run
50
- 2
51
- end
52
- end
53
-
54
- def _nt_root
55
- start_index = index
56
- if node_cache[:root].has_key?(index)
57
- cached = node_cache[:root][index]
58
- if cached
59
- node_cache[:root][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
60
- @index = cached.interval.end
61
- end
62
- return cached
63
- end
64
-
65
- i0, s0 = index, []
66
- r1 = _nt_space
67
- s0 << r1
68
- if r1
69
- r2 = _nt_scientific_name_5
70
- s0 << r2
71
- if r2
72
- r3 = _nt_space
73
- s0 << r3
74
- end
75
- end
76
- if s0.last
77
- r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
78
- r0.extend(Root0)
79
- r0.extend(Root1)
80
- else
81
- @index = i0
82
- r0 = nil
83
- end
84
-
85
- node_cache[:root][start_index] = r0
86
-
87
- r0
88
- end
89
-
90
- module ScientificName50
91
- def a
92
- elements[0]
93
- end
94
-
95
- def garbage
96
- elements[1]
97
- end
98
- end
99
-
100
- module ScientificName51
101
- def value
102
- a.value
103
- end
104
-
105
- def canonical
106
- a.canonical
107
- end
108
-
109
- def pos
110
- a.pos
111
- end
112
-
113
- def details
114
- a.details
115
- end
116
- end
117
-
118
- def _nt_scientific_name_5
119
- start_index = index
120
- if node_cache[:scientific_name_5].has_key?(index)
121
- cached = node_cache[:scientific_name_5][index]
122
- if cached
123
- node_cache[:scientific_name_5][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
124
- @index = cached.interval.end
125
- end
126
- return cached
127
- end
128
-
129
- i0 = index
130
- i1, s1 = index, []
131
- r2 = _nt_scientific_name_4
132
- s1 << r2
133
- if r2
134
- r3 = _nt_garbage
135
- s1 << r3
136
- end
137
- if s1.last
138
- r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
139
- r1.extend(ScientificName50)
140
- r1.extend(ScientificName51)
141
- else
142
- @index = i1
143
- r1 = nil
144
- end
145
- if r1
146
- r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
147
- r0 = r1
148
- else
149
- r4 = super
150
- if r4
151
- r4 = SyntaxNode.new(input, (index-1)...index) if r4 == true
152
- r0 = r4
153
- else
154
- @index = i0
155
- r0 = nil
156
- end
157
- end
158
-
159
- node_cache[:scientific_name_5][start_index] = r0
160
-
161
- r0
162
- end
163
-
164
- module Infraspecies0
165
- def a
166
- elements[0]
167
- end
168
-
169
- def space
170
- elements[1]
171
- end
172
-
173
- def b
174
- elements[2]
175
- end
176
- end
177
-
178
- module Infraspecies1
179
- def value
180
- a.value + " " + b.value
181
- end
182
-
183
- def canonical
184
- a.canonical
185
- end
186
-
187
- def pos
188
- a.pos.merge(b.pos)
189
- end
190
-
191
- def details
192
- {:infraspecies => a.details[:infraspecies].merge(b.details)}
193
- end
194
- end
195
-
196
- module Infraspecies2
197
- def a
198
- elements[0]
199
- end
200
-
201
- def space1
202
- elements[1]
203
- end
204
-
205
- def string_authorship_inconsistencies
206
- elements[2]
207
- end
208
-
209
- def space2
210
- elements[3]
211
- end
212
-
213
- def b
214
- elements[4]
215
- end
216
- end
217
-
218
- module Infraspecies3
219
- def value
220
- a.value + " " + b.value
221
- end
222
-
223
- def canonical
224
- a.canonical
225
- end
226
-
227
- def pos
228
- a.pos.merge(b.pos)
229
- end
230
-
231
- def details
232
- {:infraspecies => a.details[:infraspecies].merge(b.details)}
233
- end
234
- end
235
-
236
- def _nt_infraspecies
237
- start_index = index
238
- if node_cache[:infraspecies].has_key?(index)
239
- cached = node_cache[:infraspecies][index]
240
- if cached
241
- node_cache[:infraspecies][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
242
- @index = cached.interval.end
243
- end
244
- return cached
245
- end
246
-
247
- i0 = index
248
- i1, s1 = index, []
249
- r2 = _nt_infraspecies_string
250
- s1 << r2
251
- if r2
252
- r3 = _nt_space
253
- s1 << r3
254
- if r3
255
- r4 = _nt_year
256
- s1 << r4
257
- end
258
- end
259
- if s1.last
260
- r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
261
- r1.extend(Infraspecies0)
262
- r1.extend(Infraspecies1)
263
- else
264
- @index = i1
265
- r1 = nil
266
- end
267
- if r1
268
- r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
269
- r0 = r1
270
- else
271
- i5, s5 = index, []
272
- r6 = _nt_infraspecies_string
273
- s5 << r6
274
- if r6
275
- r7 = _nt_space
276
- s5 << r7
277
- if r7
278
- r8 = _nt_string_authorship_inconsistencies
279
- s5 << r8
280
- if r8
281
- r9 = _nt_space
282
- s5 << r9
283
- if r9
284
- r10 = _nt_authorship
285
- s5 << r10
286
- end
287
- end
288
- end
289
- end
290
- if s5.last
291
- r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
292
- r5.extend(Infraspecies2)
293
- r5.extend(Infraspecies3)
294
- else
295
- @index = i5
296
- r5 = nil
297
- end
298
- if r5
299
- r5 = SyntaxNode.new(input, (index-1)...index) if r5 == true
300
- r0 = r5
301
- else
302
- r11 = super
303
- if r11
304
- r11 = SyntaxNode.new(input, (index-1)...index) if r11 == true
305
- r0 = r11
306
- else
307
- @index = i0
308
- r0 = nil
309
- end
310
- end
311
- end
312
-
313
- node_cache[:infraspecies][start_index] = r0
314
-
315
- r0
316
- end
317
-
318
- module Species0
319
- def a
320
- elements[0]
321
- end
322
-
323
- def space
324
- elements[1]
325
- end
326
-
327
- def b
328
- elements[2]
329
- end
330
- end
331
-
332
- module Species1
333
- def value
334
- a.value + " " + b.value
335
- end
336
-
337
- def canonical
338
- a.canonical
339
- end
340
-
341
- def pos
342
- a.pos.merge(b.pos)
343
- end
344
-
345
- def details
346
- {:species => a.details[:species].merge(b.details)}
347
- end
348
- end
349
-
350
- def _nt_species
351
- start_index = index
352
- if node_cache[:species].has_key?(index)
353
- cached = node_cache[:species][index]
354
- if cached
355
- node_cache[:species][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
356
- @index = cached.interval.end
357
- end
358
- return cached
359
- end
360
-
361
- i0 = index
362
- i1, s1 = index, []
363
- r2 = _nt_species_string
364
- s1 << r2
365
- if r2
366
- r3 = _nt_space
367
- s1 << r3
368
- if r3
369
- r4 = _nt_year
370
- s1 << r4
371
- end
372
- end
373
- if s1.last
374
- r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
375
- r1.extend(Species0)
376
- r1.extend(Species1)
377
- else
378
- @index = i1
379
- r1 = nil
380
- end
381
- if r1
382
- r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
383
- r0 = r1
384
- else
385
- r5 = super
386
- if r5
387
- r5 = SyntaxNode.new(input, (index-1)...index) if r5 == true
388
- r0 = r5
389
- else
390
- @index = i0
391
- r0 = nil
392
- end
393
- end
394
-
395
- node_cache[:species][start_index] = r0
396
-
397
- r0
398
- end
399
-
400
- module LatinWord0
401
- def a
402
- elements[0]
403
- end
404
-
405
- def b
406
- elements[1]
407
- end
408
- end
409
-
410
- module LatinWord1
411
- def value
412
- res = ""
413
- text_value.split("").each do |l|
414
- l = "ae" if l == "æ"
415
- l = "oe" if l == "œ"
416
- res << l
417
- end
418
- res.tr("àâåãäáçčëéèíìïňññóòôøõöúùüŕřŗššşž",
419
- "aaaaaacceeeiiinnnoooooouuurrrsssz")
420
- end
421
- end
422
-
423
- def _nt_latin_word
424
- start_index = index
425
- if node_cache[:latin_word].has_key?(index)
426
- cached = node_cache[:latin_word][index]
427
- if cached
428
- node_cache[:latin_word][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
429
- @index = cached.interval.end
430
- end
431
- return cached
432
- end
433
-
434
- i0, s0 = index, []
435
- if has_terminal?(@regexps[gr = '\A[a-z\\-æœàâåãäáçčëéèíìïňññóòôøõöúùüŕřŗššşž]'] ||= Regexp.new(gr), :regexp, index)
436
- r1 = true
437
- @index += 1
438
- else
439
- terminal_parse_failure('[a-z\\-æœàâåãäáçčëéèíìïňññóòôøõöúùüŕřŗššşž]')
440
- r1 = nil
441
- end
442
- s0 << r1
443
- if r1
444
- r2 = _nt_valid_name_letters
445
- s0 << r2
446
- end
447
- if s0.last
448
- r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
449
- r0.extend(LatinWord0)
450
- r0.extend(LatinWord1)
451
- else
452
- @index = i0
453
- r0 = nil
454
- end
455
-
456
- node_cache[:latin_word][start_index] = r0
457
-
458
- r0
459
- end
460
-
461
- module ValidNameLetters0
462
- def value
463
- res = ""
464
- text_value.split("").each do |l|
465
- l = "ae" if l == "æ"
466
- l = "oe" if l == "œ"
467
- res << l
468
- end
469
- res.tr("àâåãäáçčëéèíìïňññóòôøõöúùüŕřŗššşž",
470
- "aaaaaacceeeiiinnnoooooouuurrrsssz")
471
-
472
- end
473
- end
474
-
475
- def _nt_valid_name_letters
476
- start_index = index
477
- if node_cache[:valid_name_letters].has_key?(index)
478
- cached = node_cache[:valid_name_letters][index]
479
- if cached
480
- node_cache[:valid_name_letters][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
481
- @index = cached.interval.end
482
- end
483
- return cached
484
- end
485
-
486
- s0, i0 = [], index
487
- loop do
488
- if has_terminal?(@regexps[gr = '\A[a-z\\-æœàâåãäáçčëéèíìïňññóòôøõöúùüŕřŗššşž]'] ||= Regexp.new(gr), :regexp, index)
489
- r1 = true
490
- @index += 1
491
- else
492
- terminal_parse_failure('[a-z\\-æœàâåãäáçčëéèíìïňññóòôøõöúùüŕřŗššşž]')
493
- r1 = nil
494
- end
495
- if r1
496
- s0 << r1
497
- else
498
- break
499
- end
500
- end
501
- if s0.empty?
502
- @index = i0
503
- r0 = nil
504
- else
505
- r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
506
- r0.extend(ValidNameLetters0)
507
- r0.extend(ValidNameLetters0)
508
- end
509
-
510
- node_cache[:valid_name_letters][start_index] = r0
511
-
512
- r0
513
- end
514
-
515
- module RightParen0
516
- def space
517
- elements[1]
518
- end
519
-
520
- end
521
-
522
- def _nt_right_paren
523
- start_index = index
524
- if node_cache[:right_paren].has_key?(index)
525
- cached = node_cache[:right_paren][index]
526
- if cached
527
- node_cache[:right_paren][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
528
- @index = cached.interval.end
529
- end
530
- return cached
531
- end
532
-
533
- i0 = index
534
- i1, s1 = index, []
535
- if (match_len = has_terminal?(")", false, index))
536
- r2 = true
537
- @index += match_len
538
- else
539
- terminal_parse_failure('")"')
540
- r2 = nil
541
- end
542
- s1 << r2
543
- if r2
544
- r3 = _nt_space
545
- s1 << r3
546
- if r3
547
- if (match_len = has_terminal?(")", false, index))
548
- r4 = true
549
- @index += match_len
550
- else
551
- terminal_parse_failure('")"')
552
- r4 = nil
553
- end
554
- s1 << r4
555
- end
556
- end
557
- if s1.last
558
- r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
559
- r1.extend(RightParen0)
560
- else
561
- @index = i1
562
- r1 = nil
563
- end
564
- if r1
565
- r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
566
- r0 = r1
567
- else
568
- r5 = super
569
- if r5
570
- r5 = SyntaxNode.new(input, (index-1)...index) if r5 == true
571
- r0 = r5
572
- else
573
- @index = i0
574
- r0 = nil
575
- end
576
- end
577
-
578
- node_cache[:right_paren][start_index] = r0
579
-
580
- r0
581
- end
582
-
583
- module LeftParen0
584
- def space
585
- elements[1]
586
- end
587
-
588
- end
589
-
590
- def _nt_left_paren
591
- start_index = index
592
- if node_cache[:left_paren].has_key?(index)
593
- cached = node_cache[:left_paren][index]
594
- if cached
595
- node_cache[:left_paren][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
596
- @index = cached.interval.end
597
- end
598
- return cached
599
- end
600
-
601
- i0 = index
602
- i1, s1 = index, []
603
- if (match_len = has_terminal?("(", false, index))
604
- r2 = true
605
- @index += match_len
606
- else
607
- terminal_parse_failure('"("')
608
- r2 = nil
609
- end
610
- s1 << r2
611
- if r2
612
- r3 = _nt_space
613
- s1 << r3
614
- if r3
615
- if (match_len = has_terminal?("(", false, index))
616
- r4 = true
617
- @index += match_len
618
- else
619
- terminal_parse_failure('"("')
620
- r4 = nil
621
- end
622
- s1 << r4
623
- end
624
- end
625
- if s1.last
626
- r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
627
- r1.extend(LeftParen0)
628
- else
629
- @index = i1
630
- r1 = nil
631
- end
632
- if r1
633
- r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
634
- r0 = r1
635
- else
636
- r5 = super
637
- if r5
638
- r5 = SyntaxNode.new(input, (index-1)...index) if r5 == true
639
- r0 = r5
640
- else
641
- @index = i0
642
- r0 = nil
643
- end
644
- end
645
-
646
- node_cache[:left_paren][start_index] = r0
647
-
648
- r0
649
- end
650
-
651
- module Year0
652
- def a
653
- elements[0]
654
- end
655
-
656
- def space
657
- elements[1]
658
- end
659
-
660
- def b
661
- elements[2]
662
- end
663
- end
664
-
665
- module Year1
666
- def value
667
- a.value + " " + b.value
668
- end
669
-
670
- def pos
671
- a.pos.merge(b.pos)
672
- end
673
-
674
- def details
675
- {:year => a.value, :approximate_year => b.value}
676
- end
677
- end
678
-
679
- module Year2
680
- def a
681
- elements[0]
682
- end
683
-
684
- def space
685
- elements[1]
686
- end
687
-
688
- def page_number
689
- elements[2]
690
- end
691
- end
692
-
693
- module Year3
694
- def value
695
- a.text_value
696
- end
697
-
698
- def pos
699
- {a.interval.begin => ["year", a.interval.end]}
700
- end
701
-
702
- def details
703
- {:year => value}
704
- end
705
- end
706
-
707
- def _nt_year
708
- start_index = index
709
- if node_cache[:year].has_key?(index)
710
- cached = node_cache[:year][index]
711
- if cached
712
- node_cache[:year][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
713
- @index = cached.interval.end
714
- end
715
- return cached
716
- end
717
-
718
- i0 = index
719
- i1, s1 = index, []
720
- r2 = _nt_year_number
721
- s1 << r2
722
- if r2
723
- r3 = _nt_space
724
- s1 << r3
725
- if r3
726
- r4 = _nt_approximate_year
727
- s1 << r4
728
- end
729
- end
730
- if s1.last
731
- r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
732
- r1.extend(Year0)
733
- r1.extend(Year1)
734
- else
735
- @index = i1
736
- r1 = nil
737
- end
738
- if r1
739
- r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
740
- r0 = r1
741
- else
742
- i5, s5 = index, []
743
- r6 = _nt_year_number
744
- s5 << r6
745
- if r6
746
- r7 = _nt_space
747
- s5 << r7
748
- if r7
749
- r8 = _nt_page_number
750
- s5 << r8
751
- end
752
- end
753
- if s5.last
754
- r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
755
- r5.extend(Year2)
756
- r5.extend(Year3)
757
- else
758
- @index = i5
759
- r5 = nil
760
- end
761
- if r5
762
- r5 = SyntaxNode.new(input, (index-1)...index) if r5 == true
763
- r0 = r5
764
- else
765
- r9 = _nt_year_number_with_punctuation
766
- if r9
767
- r9 = SyntaxNode.new(input, (index-1)...index) if r9 == true
768
- r0 = r9
769
- else
770
- r10 = _nt_approximate_year
771
- if r10
772
- r10 = SyntaxNode.new(input, (index-1)...index) if r10 == true
773
- r0 = r10
774
- else
775
- r11 = _nt_double_year
776
- if r11
777
- r11 = SyntaxNode.new(input, (index-1)...index) if r11 == true
778
- r0 = r11
779
- else
780
- r12 = super
781
- if r12
782
- r12 = SyntaxNode.new(input, (index-1)...index) if r12 == true
783
- r0 = r12
784
- else
785
- @index = i0
786
- r0 = nil
787
- end
788
- end
789
- end
790
- end
791
- end
792
- end
793
-
794
- node_cache[:year][start_index] = r0
795
-
796
- r0
797
- end
798
-
799
- module ApproximateYear0
800
- def space1
801
- elements[1]
802
- end
803
-
804
- def a
805
- elements[2]
806
- end
807
-
808
- def space2
809
- elements[3]
810
- end
811
-
812
- end
813
-
814
- module ApproximateYear1
815
- def value
816
- "(" + a.text_value + ")"
817
- end
818
-
819
- def pos
820
- {a.interval.begin => ["year", a.interval.end]}
821
- end
822
-
823
- def details
824
- {:approximate_year => value}
825
- end
826
- end
827
-
828
- def _nt_approximate_year
829
- start_index = index
830
- if node_cache[:approximate_year].has_key?(index)
831
- cached = node_cache[:approximate_year][index]
832
- if cached
833
- node_cache[:approximate_year][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
834
- @index = cached.interval.end
835
- end
836
- return cached
837
- end
838
-
839
- i0, s0 = index, []
840
- if (match_len = has_terminal?("[", false, index))
841
- r1 = true
842
- @index += match_len
843
- else
844
- terminal_parse_failure('"["')
845
- r1 = nil
846
- end
847
- s0 << r1
848
- if r1
849
- r2 = _nt_space
850
- s0 << r2
851
- if r2
852
- r3 = _nt_year_number
853
- s0 << r3
854
- if r3
855
- r4 = _nt_space
856
- s0 << r4
857
- if r4
858
- s5, i5 = [], index
859
- loop do
860
- if (match_len = has_terminal?("]", false, index))
861
- r6 = true
862
- @index += match_len
863
- else
864
- terminal_parse_failure('"]"')
865
- r6 = nil
866
- end
867
- if r6
868
- s5 << r6
869
- else
870
- break
871
- end
872
- end
873
- if s5.empty?
874
- @index = i5
875
- r5 = nil
876
- else
877
- r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
878
- end
879
- s0 << r5
880
- end
881
- end
882
- end
883
- end
884
- if s0.last
885
- r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
886
- r0.extend(ApproximateYear0)
887
- r0.extend(ApproximateYear1)
888
- else
889
- @index = i0
890
- r0 = nil
891
- end
892
-
893
- node_cache[:approximate_year][start_index] = r0
894
-
895
- r0
896
- end
897
-
898
- module DoubleYear0
899
- def year_number
900
- elements[0]
901
- end
902
-
903
- end
904
-
905
- module DoubleYear1
906
- def value
907
- text_value
908
- end
909
-
910
- def pos
911
- {interval.begin => ["year", interval.end]}
912
- end
913
-
914
- def details
915
- {:year => value}
916
- end
917
- end
918
-
919
- def _nt_double_year
920
- start_index = index
921
- if node_cache[:double_year].has_key?(index)
922
- cached = node_cache[:double_year][index]
923
- if cached
924
- node_cache[:double_year][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
925
- @index = cached.interval.end
926
- end
927
- return cached
928
- end
929
-
930
- i0, s0 = index, []
931
- r1 = _nt_year_number
932
- s0 << r1
933
- if r1
934
- if (match_len = has_terminal?("-", false, index))
935
- r2 = true
936
- @index += match_len
937
- else
938
- terminal_parse_failure('"-"')
939
- r2 = nil
940
- end
941
- s0 << r2
942
- if r2
943
- s3, i3 = [], index
944
- loop do
945
- if has_terminal?(@regexps[gr = '\A[0-9]'] ||= Regexp.new(gr), :regexp, index)
946
- r4 = true
947
- @index += 1
948
- else
949
- terminal_parse_failure('[0-9]')
950
- r4 = nil
951
- end
952
- if r4
953
- s3 << r4
954
- else
955
- break
956
- end
957
- end
958
- if s3.empty?
959
- @index = i3
960
- r3 = nil
961
- else
962
- r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
963
- end
964
- s0 << r3
965
- if r3
966
- if has_terminal?(@regexps[gr = '\A[A-Za-z]'] ||= Regexp.new(gr), :regexp, index)
967
- r6 = true
968
- @index += 1
969
- else
970
- terminal_parse_failure('[A-Za-z]')
971
- r6 = nil
972
- end
973
- if r6
974
- r5 = r6
975
- else
976
- r5 = instantiate_node(SyntaxNode,input, index...index)
977
- end
978
- s0 << r5
979
- if r5
980
- if has_terminal?(@regexps[gr = '\A[\\?]'] ||= Regexp.new(gr), :regexp, index)
981
- r8 = true
982
- @index += 1
983
- else
984
- terminal_parse_failure('[\\?]')
985
- r8 = nil
986
- end
987
- if r8
988
- r7 = r8
989
- else
990
- r7 = instantiate_node(SyntaxNode,input, index...index)
991
- end
992
- s0 << r7
993
- end
994
- end
995
- end
996
- end
997
- if s0.last
998
- r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
999
- r0.extend(DoubleYear0)
1000
- r0.extend(DoubleYear1)
1001
- else
1002
- @index = i0
1003
- r0 = nil
1004
- end
1005
-
1006
- node_cache[:double_year][start_index] = r0
1007
-
1008
- r0
1009
- end
1010
-
1011
- module YearNumberWithPunctuation0
1012
- def a
1013
- elements[0]
1014
- end
1015
-
1016
- end
1017
-
1018
- module YearNumberWithPunctuation1
1019
- def value
1020
- a.text_value
1021
- end
1022
-
1023
- def pos
1024
- {interval.begin => ["year", interval.end]}
1025
- end
1026
-
1027
- def details
1028
- {:year => value}
1029
- end
1030
- end
1031
-
1032
- def _nt_year_number_with_punctuation
1033
- start_index = index
1034
- if node_cache[:year_number_with_punctuation].has_key?(index)
1035
- cached = node_cache[:year_number_with_punctuation][index]
1036
- if cached
1037
- node_cache[:year_number_with_punctuation][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1038
- @index = cached.interval.end
1039
- end
1040
- return cached
1041
- end
1042
-
1043
- i0, s0 = index, []
1044
- r1 = _nt_year_number
1045
- s0 << r1
1046
- if r1
1047
- if (match_len = has_terminal?(".", false, index))
1048
- r2 = true
1049
- @index += match_len
1050
- else
1051
- terminal_parse_failure('"."')
1052
- r2 = nil
1053
- end
1054
- s0 << r2
1055
- end
1056
- if s0.last
1057
- r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
1058
- r0.extend(YearNumberWithPunctuation0)
1059
- r0.extend(YearNumberWithPunctuation1)
1060
- else
1061
- @index = i0
1062
- r0 = nil
1063
- end
1064
-
1065
- node_cache[:year_number_with_punctuation][start_index] = r0
1066
-
1067
- r0
1068
- end
1069
-
1070
- module PageNumber0
1071
- def space
1072
- elements[1]
1073
- end
1074
-
1075
- end
1076
-
1077
- module PageNumber1
1078
- def value
1079
- end
1080
- end
1081
-
1082
- def _nt_page_number
1083
- start_index = index
1084
- if node_cache[:page_number].has_key?(index)
1085
- cached = node_cache[:page_number][index]
1086
- if cached
1087
- node_cache[:page_number][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1088
- @index = cached.interval.end
1089
- end
1090
- return cached
1091
- end
1092
-
1093
- i0, s0 = index, []
1094
- if (match_len = has_terminal?(":", false, index))
1095
- r1 = true
1096
- @index += match_len
1097
- else
1098
- terminal_parse_failure('":"')
1099
- r1 = nil
1100
- end
1101
- s0 << r1
1102
- if r1
1103
- r2 = _nt_space
1104
- s0 << r2
1105
- if r2
1106
- s3, i3 = [], index
1107
- loop do
1108
- if has_terminal?(@regexps[gr = '\A[\\d]'] ||= Regexp.new(gr), :regexp, index)
1109
- r4 = true
1110
- @index += 1
1111
- else
1112
- terminal_parse_failure('[\\d]')
1113
- r4 = nil
1114
- end
1115
- if r4
1116
- s3 << r4
1117
- else
1118
- break
1119
- end
1120
- end
1121
- if s3.empty?
1122
- @index = i3
1123
- r3 = nil
1124
- else
1125
- r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
1126
- end
1127
- s0 << r3
1128
- end
1129
- end
1130
- if s0.last
1131
- r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
1132
- r0.extend(PageNumber0)
1133
- r0.extend(PageNumber1)
1134
- else
1135
- @index = i0
1136
- r0 = nil
1137
- end
1138
-
1139
- node_cache[:page_number][start_index] = r0
1140
-
1141
- r0
1142
- end
1143
-
1144
- def _nt_string_authorship_inconsistencies
1145
- start_index = index
1146
- if node_cache[:string_authorship_inconsistencies].has_key?(index)
1147
- cached = node_cache[:string_authorship_inconsistencies][index]
1148
- if cached
1149
- node_cache[:string_authorship_inconsistencies][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1150
- @index = cached.interval.end
1151
- end
1152
- return cached
1153
- end
1154
-
1155
- if (match_len = has_terminal?("corrig.", false, index))
1156
- r0 = instantiate_node(SyntaxNode,input, index...(index + match_len))
1157
- @index += match_len
1158
- else
1159
- terminal_parse_failure('"corrig."')
1160
- r0 = nil
1161
- end
1162
-
1163
- node_cache[:string_authorship_inconsistencies][start_index] = r0
1164
-
1165
- r0
1166
- end
1167
-
1168
- module Garbage0
1169
- def space1
1170
- elements[0]
1171
- end
1172
-
1173
- def space2
1174
- elements[2]
1175
- end
1176
-
1177
- end
1178
-
1179
- module Garbage1
1180
- def space_hard
1181
- elements[0]
1182
- end
1183
-
1184
- end
1185
-
1186
- def _nt_garbage
1187
- start_index = index
1188
- if node_cache[:garbage].has_key?(index)
1189
- cached = node_cache[:garbage][index]
1190
- if cached
1191
- node_cache[:garbage][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1192
- @index = cached.interval.end
1193
- end
1194
- return cached
1195
- end
1196
-
1197
- i0 = index
1198
- i1, s1 = index, []
1199
- r2 = _nt_space
1200
- s1 << r2
1201
- if r2
1202
- if has_terminal?(@regexps[gr = '\A["\',]'] ||= Regexp.new(gr), :regexp, index)
1203
- r3 = true
1204
- @index += 1
1205
- else
1206
- terminal_parse_failure('["\',]')
1207
- r3 = nil
1208
- end
1209
- s1 << r3
1210
- if r3
1211
- r4 = _nt_space
1212
- s1 << r4
1213
- if r4
1214
- s5, i5 = [], index
1215
- loop do
1216
- if has_terminal?(@regexps[gr = '\A[^щ]'] ||= Regexp.new(gr), :regexp, index)
1217
- r6 = true
1218
- @index += 1
1219
- else
1220
- terminal_parse_failure('[^щ]')
1221
- r6 = nil
1222
- end
1223
- if r6
1224
- s5 << r6
1225
- else
1226
- break
1227
- end
1228
- end
1229
- r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
1230
- s1 << r5
1231
- end
1232
- end
1233
- end
1234
- if s1.last
1235
- r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
1236
- r1.extend(Garbage0)
1237
- else
1238
- @index = i1
1239
- r1 = nil
1240
- end
1241
- if r1
1242
- r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
1243
- r0 = r1
1244
- else
1245
- i7, s7 = index, []
1246
- r8 = _nt_space_hard
1247
- s7 << r8
1248
- if r8
1249
- s9, i9 = [], index
1250
- loop do
1251
- if has_terminal?(@regexps[gr = '\A[^ш]'] ||= Regexp.new(gr), :regexp, index)
1252
- r10 = true
1253
- @index += 1
1254
- else
1255
- terminal_parse_failure('[^ш]')
1256
- r10 = nil
1257
- end
1258
- if r10
1259
- s9 << r10
1260
- else
1261
- break
1262
- end
1263
- end
1264
- if s9.empty?
1265
- @index = i9
1266
- r9 = nil
1267
- else
1268
- r9 = instantiate_node(SyntaxNode,input, i9...index, s9)
1269
- end
1270
- s7 << r9
1271
- end
1272
- if s7.last
1273
- r7 = instantiate_node(SyntaxNode,input, i7...index, s7)
1274
- r7.extend(Garbage1)
1275
- else
1276
- @index = i7
1277
- r7 = nil
1278
- end
1279
- if r7
1280
- r7 = SyntaxNode.new(input, (index-1)...index) if r7 == true
1281
- r0 = r7
1282
- else
1283
- @index = i0
1284
- r0 = nil
1285
- end
1286
- end
1287
-
1288
- node_cache[:garbage][start_index] = r0
1289
-
1290
- r0
1291
- end
1292
-
1293
- end
1294
-
1295
- class ScientificNameDirtyParser < Treetop::Runtime::CompiledParser
1296
- include ScientificNameDirty
1297
- end
1298
-