dimus-biodiversity 0.5.2 → 0.5.3

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.
data/lib/biodiversity.rb CHANGED
@@ -7,5 +7,3 @@ BIODIVERSITY_ROOT = File.join(dir, 'biodiversity')
7
7
  require File.join(dir, "/../conf/environment")
8
8
  require File.join(BIODIVERSITY_ROOT, "parser")
9
9
  require File.join(BIODIVERSITY_ROOT, "guid")
10
-
11
-
@@ -23,17 +23,14 @@ class ScientificNameParser
23
23
  parsed = self.class != Hash
24
24
  res = {:parsed => parsed}
25
25
  if parsed
26
+ hybrid = self.hybrid rescue false
26
27
  res.merge!({
27
28
  :verbatim => self.text_value,
28
29
  :normalized => self.value,
29
- :canonical => self.canonical
30
+ :canonical => self.canonical,
31
+ :hybrid => hybrid,
32
+ :details => self.details
30
33
  })
31
- data = self.details
32
- if data[:species] && data[:species][:namedHybrid]
33
- data[:species].delete(:namedHybrid)
34
- data = {:namedHybrid => data}
35
- end
36
- res.merge!(data)
37
34
  else
38
35
  res.merge!(self)
39
36
  end
@@ -10,6 +10,26 @@ module ScientificNameCanonical
10
10
 
11
11
  include ScientificNameDirty
12
12
 
13
+ module Root0
14
+ def hybrid
15
+ false
16
+ end
17
+
18
+ def details
19
+ [super]
20
+ end
21
+ end
22
+
23
+ module Root1
24
+ def hybrid
25
+ false
26
+ end
27
+
28
+ def details
29
+ [super]
30
+ end
31
+ end
32
+
13
33
  def _nt_root
14
34
  start_index = index
15
35
  if node_cache[:root].has_key?(index)
@@ -20,10 +40,12 @@ module ScientificNameCanonical
20
40
 
21
41
  i0 = index
22
42
  r1 = _nt_multinomial_with_garbage
43
+ r1.extend(Root0)
23
44
  if r1
24
45
  r0 = r1
25
46
  else
26
47
  r2 = _nt_uninomial_with_garbage
48
+ r2.extend(Root1)
27
49
  if r2
28
50
  r0 = r2
29
51
  else
@@ -4,9 +4,25 @@ grammar ScientificNameCanonical
4
4
  include ScientificNameDirty
5
5
 
6
6
  rule root
7
- multinomial_with_garbage
7
+ multinomial_with_garbage {
8
+ def hybrid
9
+ false
10
+ end
11
+
12
+ def details
13
+ [super]
14
+ end
15
+ }
8
16
  /
9
- uninomial_with_garbage
17
+ uninomial_with_garbage {
18
+ def hybrid
19
+ false
20
+ end
21
+
22
+ def details
23
+ [super]
24
+ end
25
+ }
10
26
  end
11
27
 
12
28
  rule multinomial_with_garbage
@@ -33,8 +33,12 @@ module ScientificNameClean
33
33
  a.pos
34
34
  end
35
35
 
36
+ def hybrid
37
+ a.hybrid
38
+ end
39
+
36
40
  def details
37
- a.details
41
+ a.details.class == Array ? a.details : [a.details]
38
42
  end
39
43
  end
40
44
 
@@ -105,7 +109,11 @@ module ScientificNameClean
105
109
  def pos
106
110
  a.pos.merge(c.pos)
107
111
  end
108
-
112
+
113
+ def hybrid
114
+ a.hybrid
115
+ end
116
+
109
117
  def details
110
118
  a.details.merge(b.details(c))
111
119
  end
@@ -199,8 +207,12 @@ module ScientificNameClean
199
207
  a.pos.merge(b.pos)
200
208
  end
201
209
 
210
+ def hybrid
211
+ true
212
+ end
213
+
202
214
  def details
203
- {:hybridFormula => [a.details, b.details]}
215
+ [a.details, b.details]
204
216
  end
205
217
  end
206
218
 
@@ -236,8 +248,12 @@ module ScientificNameClean
236
248
  a.pos
237
249
  end
238
250
 
251
+ def hybrid
252
+ true
253
+ end
254
+
239
255
  def details
240
- {:hybridFormula => [a.details, "?"]}
256
+ [a.details, "?"]
241
257
  end
242
258
  end
243
259
 
@@ -362,8 +378,12 @@ module ScientificNameClean
362
378
  b.pos
363
379
  end
364
380
 
381
+ def hybrid
382
+ true
383
+ end
384
+
365
385
  def details
366
- {:namedHybrid => b.details}
386
+ b.details
367
387
  end
368
388
  end
369
389
 
@@ -439,6 +459,10 @@ module ScientificNameClean
439
459
  a.pos
440
460
  end
441
461
 
462
+ def hybrid
463
+ a.hybrid rescue false
464
+ end
465
+
442
466
  def details
443
467
  a.details.merge(b.details)
444
468
  end
@@ -680,6 +704,10 @@ module ScientificNameClean
680
704
  def pos
681
705
  a.pos.merge(b.pos).merge(c.pos).merge(d.pos)
682
706
  end
707
+
708
+ def hybrid
709
+ c.hybrid rescue false
710
+ end
683
711
 
684
712
  def details
685
713
  a.details.merge(b.details).merge(c.details).merge(d.details)
@@ -725,6 +753,10 @@ module ScientificNameClean
725
753
  a.pos.merge(b.pos).merge(c.pos)
726
754
  end
727
755
 
756
+ def hybrid
757
+ c.hybrid rescue false
758
+ end
759
+
728
760
  def details
729
761
  a.details.merge(b.details).merge(c.details)
730
762
  end
@@ -768,6 +800,10 @@ module ScientificNameClean
768
800
  def pos
769
801
  a.pos.merge(b.pos).merge(c.pos)
770
802
  end
803
+
804
+ def hybrid
805
+ b.hybrid rescue false
806
+ end
771
807
 
772
808
  def details
773
809
  a.details.merge(b.details).merge(c.details)
@@ -805,6 +841,10 @@ module ScientificNameClean
805
841
  a.pos.merge(b.pos)
806
842
  end
807
843
 
844
+ def hybrid
845
+ b.hybrid rescue false
846
+ end
847
+
808
848
  def details
809
849
  a.details.merge(b.details)
810
850
  end
@@ -1037,6 +1077,12 @@ module ScientificNameClean
1037
1077
  end
1038
1078
  end
1039
1079
 
1080
+ module InfraspeciesMult2
1081
+ def details
1082
+ {:infraspecies => [super[:infraspecies]]}
1083
+ end
1084
+ end
1085
+
1040
1086
  def _nt_infraspecies_mult
1041
1087
  start_index = index
1042
1088
  if node_cache[:infraspecies_mult].has_key?(index)
@@ -1069,6 +1115,7 @@ module ScientificNameClean
1069
1115
  r0 = r1
1070
1116
  else
1071
1117
  r5 = _nt_infraspecies
1118
+ r5.extend(InfraspeciesMult2)
1072
1119
  if r5
1073
1120
  r0 = r5
1074
1121
  else
@@ -1544,8 +1591,8 @@ module ScientificNameClean
1544
1591
  r1.extend(Rank0)
1545
1592
  else
1546
1593
  if input.index("α", index) == index
1547
- r18 = instantiate_node(SyntaxNode,input, index...(index + 1))
1548
- @index += 1
1594
+ r18 = instantiate_node(SyntaxNode,input, index...(index + 2))
1595
+ @index += 2
1549
1596
  else
1550
1597
  terminal_parse_failure("α")
1551
1598
  r18 = nil
@@ -1555,8 +1602,8 @@ module ScientificNameClean
1555
1602
  r1.extend(Rank0)
1556
1603
  else
1557
1604
  if input.index("ββ", index) == index
1558
- r19 = instantiate_node(SyntaxNode,input, index...(index + 2))
1559
- @index += 2
1605
+ r19 = instantiate_node(SyntaxNode,input, index...(index + 4))
1606
+ @index += 4
1560
1607
  else
1561
1608
  terminal_parse_failure("ββ")
1562
1609
  r19 = nil
@@ -1566,8 +1613,8 @@ module ScientificNameClean
1566
1613
  r1.extend(Rank0)
1567
1614
  else
1568
1615
  if input.index("β", index) == index
1569
- r20 = instantiate_node(SyntaxNode,input, index...(index + 1))
1570
- @index += 1
1616
+ r20 = instantiate_node(SyntaxNode,input, index...(index + 2))
1617
+ @index += 2
1571
1618
  else
1572
1619
  terminal_parse_failure("β")
1573
1620
  r20 = nil
@@ -1577,8 +1624,8 @@ module ScientificNameClean
1577
1624
  r1.extend(Rank0)
1578
1625
  else
1579
1626
  if input.index("γ", index) == index
1580
- r21 = instantiate_node(SyntaxNode,input, index...(index + 1))
1581
- @index += 1
1627
+ r21 = instantiate_node(SyntaxNode,input, index...(index + 2))
1628
+ @index += 2
1582
1629
  else
1583
1630
  terminal_parse_failure("γ")
1584
1631
  r21 = nil
@@ -1588,8 +1635,8 @@ module ScientificNameClean
1588
1635
  r1.extend(Rank0)
1589
1636
  else
1590
1637
  if input.index("δ", index) == index
1591
- r22 = instantiate_node(SyntaxNode,input, index...(index + 1))
1592
- @index += 1
1638
+ r22 = instantiate_node(SyntaxNode,input, index...(index + 2))
1639
+ @index += 2
1593
1640
  else
1594
1641
  terminal_parse_failure("δ")
1595
1642
  r22 = nil
@@ -1599,8 +1646,8 @@ module ScientificNameClean
1599
1646
  r1.extend(Rank0)
1600
1647
  else
1601
1648
  if input.index("ε", index) == index
1602
- r23 = instantiate_node(SyntaxNode,input, index...(index + 1))
1603
- @index += 1
1649
+ r23 = instantiate_node(SyntaxNode,input, index...(index + 2))
1650
+ @index += 2
1604
1651
  else
1605
1652
  terminal_parse_failure("ε")
1606
1653
  r23 = nil
@@ -1610,8 +1657,8 @@ module ScientificNameClean
1610
1657
  r1.extend(Rank0)
1611
1658
  else
1612
1659
  if input.index("φ", index) == index
1613
- r24 = instantiate_node(SyntaxNode,input, index...(index + 1))
1614
- @index += 1
1660
+ r24 = instantiate_node(SyntaxNode,input, index...(index + 2))
1661
+ @index += 2
1615
1662
  else
1616
1663
  terminal_parse_failure("φ")
1617
1664
  r24 = nil
@@ -1621,8 +1668,8 @@ module ScientificNameClean
1621
1668
  r1.extend(Rank0)
1622
1669
  else
1623
1670
  if input.index("θ", index) == index
1624
- r25 = instantiate_node(SyntaxNode,input, index...(index + 1))
1625
- @index += 1
1671
+ r25 = instantiate_node(SyntaxNode,input, index...(index + 2))
1672
+ @index += 2
1626
1673
  else
1627
1674
  terminal_parse_failure("θ")
1628
1675
  r25 = nil
@@ -1632,8 +1679,8 @@ module ScientificNameClean
1632
1679
  r1.extend(Rank0)
1633
1680
  else
1634
1681
  if input.index("μ", index) == index
1635
- r26 = instantiate_node(SyntaxNode,input, index...(index + 1))
1636
- @index += 1
1682
+ r26 = instantiate_node(SyntaxNode,input, index...(index + 2))
1683
+ @index += 2
1637
1684
  else
1638
1685
  terminal_parse_failure("μ")
1639
1686
  r26 = nil
@@ -1909,6 +1956,10 @@ module ScientificNameClean
1909
1956
  a.canonical
1910
1957
  end
1911
1958
 
1959
+ def hybrid
1960
+ a.hybrid rescue false
1961
+ end
1962
+
1912
1963
  def pos
1913
1964
  a.pos.merge(b.pos)
1914
1965
  end
@@ -1992,6 +2043,10 @@ module ScientificNameClean
1992
2043
  def canonical
1993
2044
  a.value
1994
2045
  end
2046
+
2047
+ def hybrid
2048
+ a.hybrid rescue false
2049
+ end
1995
2050
 
1996
2051
  def pos
1997
2052
  {a.interval.begin => ['species', a.interval.end]}
@@ -2011,6 +2066,10 @@ module ScientificNameClean
2011
2066
  {interval.begin => ['species', interval.end]}
2012
2067
  end
2013
2068
 
2069
+ def hybrid
2070
+ false
2071
+ end
2072
+
2014
2073
  def details
2015
2074
  {:species => {:epitheton => value}}
2016
2075
  end
@@ -2295,6 +2354,10 @@ module ScientificNameClean
2295
2354
  a.pos.merge(b.pos)
2296
2355
  end
2297
2356
 
2357
+ def hybrid
2358
+ false
2359
+ end
2360
+
2298
2361
  def details
2299
2362
  {:uninomial => a.details[:uninomial].merge(b.details)}
2300
2363
  end
@@ -2354,6 +2417,10 @@ module ScientificNameClean
2354
2417
  {interval.begin => ['uninomial', interval.end]}
2355
2418
  end
2356
2419
 
2420
+ def hybrid
2421
+ false
2422
+ end
2423
+
2357
2424
  def details
2358
2425
  {:uninomial => {:epitheton => value}}
2359
2426
  end
@@ -3932,8 +3999,8 @@ module ScientificNameClean
3932
3999
  i6, s6 = index, []
3933
4000
  i7 = index
3934
4001
  if input.index("Å", index) == index
3935
- r8 = instantiate_node(SyntaxNode,input, index...(index + 1))
3936
- @index += 1
4002
+ r8 = instantiate_node(SyntaxNode,input, index...(index + 2))
4003
+ @index += 2
3937
4004
  else
3938
4005
  terminal_parse_failure("Å")
3939
4006
  r8 = nil
@@ -3942,8 +4009,8 @@ module ScientificNameClean
3942
4009
  r7 = r8
3943
4010
  else
3944
4011
  if input.index("Ö", index) == index
3945
- r9 = instantiate_node(SyntaxNode,input, index...(index + 1))
3946
- @index += 1
4012
+ r9 = instantiate_node(SyntaxNode,input, index...(index + 2))
4013
+ @index += 2
3947
4014
  else
3948
4015
  terminal_parse_failure("Ö")
3949
4016
  r9 = nil
@@ -3952,8 +4019,8 @@ module ScientificNameClean
3952
4019
  r7 = r9
3953
4020
  else
3954
4021
  if input.index("Á", index) == index
3955
- r10 = instantiate_node(SyntaxNode,input, index...(index + 1))
3956
- @index += 1
4022
+ r10 = instantiate_node(SyntaxNode,input, index...(index + 2))
4023
+ @index += 2
3957
4024
  else
3958
4025
  terminal_parse_failure("Á")
3959
4026
  r10 = nil
@@ -3962,8 +4029,8 @@ module ScientificNameClean
3962
4029
  r7 = r10
3963
4030
  else
3964
4031
  if input.index("Ø", index) == index
3965
- r11 = instantiate_node(SyntaxNode,input, index...(index + 1))
3966
- @index += 1
4032
+ r11 = instantiate_node(SyntaxNode,input, index...(index + 2))
4033
+ @index += 2
3967
4034
  else
3968
4035
  terminal_parse_failure("Ø")
3969
4036
  r11 = nil
@@ -3972,8 +4039,8 @@ module ScientificNameClean
3972
4039
  r7 = r11
3973
4040
  else
3974
4041
  if input.index("Ô", index) == index
3975
- r12 = instantiate_node(SyntaxNode,input, index...(index + 1))
3976
- @index += 1
4042
+ r12 = instantiate_node(SyntaxNode,input, index...(index + 2))
4043
+ @index += 2
3977
4044
  else
3978
4045
  terminal_parse_failure("Ô")
3979
4046
  r12 = nil
@@ -3982,8 +4049,8 @@ module ScientificNameClean
3982
4049
  r7 = r12
3983
4050
  else
3984
4051
  if input.index("Š", index) == index
3985
- r13 = instantiate_node(SyntaxNode,input, index...(index + 1))
3986
- @index += 1
4052
+ r13 = instantiate_node(SyntaxNode,input, index...(index + 2))
4053
+ @index += 2
3987
4054
  else
3988
4055
  terminal_parse_failure("Š")
3989
4056
  r13 = nil
@@ -3992,8 +4059,8 @@ module ScientificNameClean
3992
4059
  r7 = r13
3993
4060
  else
3994
4061
  if input.index("Ś", index) == index
3995
- r14 = instantiate_node(SyntaxNode,input, index...(index + 1))
3996
- @index += 1
4062
+ r14 = instantiate_node(SyntaxNode,input, index...(index + 2))
4063
+ @index += 2
3997
4064
  else
3998
4065
  terminal_parse_failure("Ś")
3999
4066
  r14 = nil
@@ -4002,8 +4069,8 @@ module ScientificNameClean
4002
4069
  r7 = r14
4003
4070
  else
4004
4071
  if input.index("Č", index) == index
4005
- r15 = instantiate_node(SyntaxNode,input, index...(index + 1))
4006
- @index += 1
4072
+ r15 = instantiate_node(SyntaxNode,input, index...(index + 2))
4073
+ @index += 2
4007
4074
  else
4008
4075
  terminal_parse_failure("Č")
4009
4076
  r15 = nil
@@ -4012,8 +4079,8 @@ module ScientificNameClean
4012
4079
  r7 = r15
4013
4080
  else
4014
4081
  if input.index("Ķ", index) == index
4015
- r16 = instantiate_node(SyntaxNode,input, index...(index + 1))
4016
- @index += 1
4082
+ r16 = instantiate_node(SyntaxNode,input, index...(index + 2))
4083
+ @index += 2
4017
4084
  else
4018
4085
  terminal_parse_failure("Ķ")
4019
4086
  r16 = nil
@@ -4022,8 +4089,8 @@ module ScientificNameClean
4022
4089
  r7 = r16
4023
4090
  else
4024
4091
  if input.index("Ł", index) == index
4025
- r17 = instantiate_node(SyntaxNode,input, index...(index + 1))
4026
- @index += 1
4092
+ r17 = instantiate_node(SyntaxNode,input, index...(index + 2))
4093
+ @index += 2
4027
4094
  else
4028
4095
  terminal_parse_failure("Ł")
4029
4096
  r17 = nil
@@ -4032,8 +4099,8 @@ module ScientificNameClean
4032
4099
  r7 = r17
4033
4100
  else
4034
4101
  if input.index("É", index) == index
4035
- r18 = instantiate_node(SyntaxNode,input, index...(index + 1))
4036
- @index += 1
4102
+ r18 = instantiate_node(SyntaxNode,input, index...(index + 2))
4103
+ @index += 2
4037
4104
  else
4038
4105
  terminal_parse_failure("É")
4039
4106
  r18 = nil
@@ -4042,8 +4109,8 @@ module ScientificNameClean
4042
4109
  r7 = r18
4043
4110
  else
4044
4111
  if input.index("Ž", index) == index
4045
- r19 = instantiate_node(SyntaxNode,input, index...(index + 1))
4046
- @index += 1
4112
+ r19 = instantiate_node(SyntaxNode,input, index...(index + 2))
4113
+ @index += 2
4047
4114
  else
4048
4115
  terminal_parse_failure("Ž")
4049
4116
  r19 = nil
@@ -4785,12 +4852,16 @@ module ScientificNameClean
4785
4852
  b.value
4786
4853
  end
4787
4854
 
4855
+ def hybrid
4856
+ true
4857
+ end
4858
+
4788
4859
  def pos
4789
4860
  {b.interval.begin => ['species', b.interval.end]}
4790
4861
  end
4791
4862
 
4792
4863
  def details
4793
- {:species => {:epitheton => b.value, :namedHybrid => true}}
4864
+ {:species => {:epitheton => b.value}}
4794
4865
  end
4795
4866
  end
4796
4867
 
@@ -4817,12 +4888,16 @@ module ScientificNameClean
4817
4888
  b.value
4818
4889
  end
4819
4890
 
4891
+ def hybrid
4892
+ true
4893
+ end
4894
+
4820
4895
  def pos
4821
4896
  {b.interval.begin => ['species', b.interval.end]}
4822
4897
  end
4823
4898
 
4824
4899
  def details
4825
- {:species => {:epitheton => b.value, :namedHybrid => true}}
4900
+ {:species => {:epitheton => b.value}}
4826
4901
  end
4827
4902
  end
4828
4903
 
@@ -4849,12 +4924,16 @@ module ScientificNameClean
4849
4924
  b.value
4850
4925
  end
4851
4926
 
4927
+ def hybrid
4928
+ true
4929
+ end
4930
+
4852
4931
  def pos
4853
4932
  {b.interval.begin => ['species', b.interval.end]}
4854
4933
  end
4855
4934
 
4856
4935
  def details
4857
- {:species => {:epitheton => b.value, :namedHybrid => true}}
4936
+ {:species => {:epitheton => b.value}}
4858
4937
  end
4859
4938
  end
4860
4939
 
@@ -5375,9 +5454,9 @@ module ScientificNameClean
5375
5454
 
5376
5455
  i0 = index
5377
5456
  if input.index("Æ", index) == index
5378
- r1 = instantiate_node(SyntaxNode,input, index...(index + 1))
5457
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 2))
5379
5458
  r1.extend(CapDigraph0)
5380
- @index += 1
5459
+ @index += 2
5381
5460
  else
5382
5461
  terminal_parse_failure("Æ")
5383
5462
  r1 = nil
@@ -5386,9 +5465,9 @@ module ScientificNameClean
5386
5465
  r0 = r1
5387
5466
  else
5388
5467
  if input.index("Œ", index) == index
5389
- r2 = instantiate_node(SyntaxNode,input, index...(index + 1))
5468
+ r2 = instantiate_node(SyntaxNode,input, index...(index + 2))
5390
5469
  r2.extend(CapDigraph1)
5391
- @index += 1
5470
+ @index += 2
5392
5471
  else
5393
5472
  terminal_parse_failure("Œ")
5394
5473
  r2 = nil
@@ -5428,9 +5507,9 @@ module ScientificNameClean
5428
5507
 
5429
5508
  i0 = index
5430
5509
  if input.index("æ", index) == index
5431
- r1 = instantiate_node(SyntaxNode,input, index...(index + 1))
5510
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 2))
5432
5511
  r1.extend(Digraph0)
5433
- @index += 1
5512
+ @index += 2
5434
5513
  else
5435
5514
  terminal_parse_failure("æ")
5436
5515
  r1 = nil
@@ -5439,9 +5518,9 @@ module ScientificNameClean
5439
5518
  r0 = r1
5440
5519
  else
5441
5520
  if input.index("œ", index) == index
5442
- r2 = instantiate_node(SyntaxNode,input, index...(index + 1))
5521
+ r2 = instantiate_node(SyntaxNode,input, index...(index + 2))
5443
5522
  r2.extend(Digraph1)
5444
- @index += 1
5523
+ @index += 2
5445
5524
  else
5446
5525
  terminal_parse_failure("œ")
5447
5526
  r2 = nil
@@ -5829,9 +5908,9 @@ module ScientificNameClean
5829
5908
  end
5830
5909
 
5831
5910
  if input.index("×", index) == index
5832
- r0 = instantiate_node(SyntaxNode,input, index...(index + 1))
5911
+ r0 = instantiate_node(SyntaxNode,input, index...(index + 2))
5833
5912
  r0.extend(MultiplicationSign0)
5834
- @index += 1
5913
+ @index += 2
5835
5914
  else
5836
5915
  terminal_parse_failure("×")
5837
5916
  r0 = nil