biodiversity 3.4.4 → 3.4.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d9db331e5d06e6b52792e8d4c70763429604ff2e
4
- data.tar.gz: bc2c2626bf49768cb823974cfef891096b96b58c
3
+ metadata.gz: 99edee1b765669b47d847c7090c27fa71ec58053
4
+ data.tar.gz: 99a11c908b706645f022aa28dd37a8fad1144840
5
5
  SHA512:
6
- metadata.gz: 7fa086b1a5c4b51b7ca9edc67052d83d9e4d1fecb9fee91015becb72fbe1a4eed5059495e429b9aeb2368fe4c47abf277ed9cfcf32d380675156fe773e56500e
7
- data.tar.gz: d6bfcd66264d3105e04a1f87e0c67ab8315ea0ffb598965abf2e575f5d9e4770648417ce0294f011f159ee039c427cbd773cd9c42a008792fa6994fae4556c27
6
+ metadata.gz: 9117a52f0a37706fa550c824681d9ad9cf5cd1da588aaccf18d99f01c100238f2b39ebc6a2cbc619b32ba2a2cbcd7ffae1e4fcef51e1ac298cc5c92c0d222598
7
+ data.tar.gz: d504f616fdd5eb73bd9e201d06bca12846b6c0c4f21a9df0c734ad8a8e8b2478ddef01e4ea5a9af045e16809e3d6b9308c56c3caaec10b1cfa534679da8e82fb
data/CHANGELOG CHANGED
@@ -1,3 +1,7 @@
1
+ 3.4.5 -- fix "fil." and "filius" with infraspecies after them, add "'t" as a
2
+ possible author prefix, add "emend." as "emendatum or rectified by" to
3
+ authors
4
+
1
5
  3.4.4 -- support "del" as part of authorship, do not truncate epithets that
2
6
  start with "nomen", add "nvar." as a rank
3
7
 
@@ -3861,11 +3861,11 @@ module ScientificNameClean
3861
3861
  end
3862
3862
 
3863
3863
  def space2
3864
- elements[4]
3864
+ elements[3]
3865
3865
  end
3866
3866
 
3867
3867
  def c
3868
- elements[5]
3868
+ elements[4]
3869
3869
  end
3870
3870
  end
3871
3871
 
@@ -3944,6 +3944,37 @@ module ScientificNameClean
3944
3944
  end
3945
3945
  end
3946
3946
 
3947
+ module Authorship8
3948
+ def a
3949
+ elements[0]
3950
+ end
3951
+
3952
+ def space
3953
+ elements[1]
3954
+ end
3955
+
3956
+ def b
3957
+ elements[2]
3958
+ end
3959
+ end
3960
+
3961
+ module Authorship9
3962
+ def value
3963
+ a.value + " " + b.value
3964
+ end
3965
+
3966
+ def pos
3967
+ a.pos.merge(b.pos)
3968
+ end
3969
+
3970
+ def details
3971
+ val = a.details
3972
+ val[:authorship] = text_value.strip
3973
+ val[:basionymAuthorTeam].merge!(b.details)
3974
+ val
3975
+ end
3976
+ end
3977
+
3947
3978
  def _nt_authorship
3948
3979
  start_index = index
3949
3980
  if node_cache[:authorship].has_key?(index)
@@ -4012,26 +4043,11 @@ module ScientificNameClean
4012
4043
  r12 = _nt_simple_authorship
4013
4044
  s9 << r12
4014
4045
  if r12
4015
- if (match_len = has_terminal?(",", false, index))
4016
- r14 = true
4017
- @index += match_len
4018
- else
4019
- terminal_parse_failure('","')
4020
- r14 = nil
4021
- end
4022
- if r14
4023
- r13 = r14
4024
- else
4025
- r13 = instantiate_node(SyntaxNode,input, index...index)
4026
- end
4046
+ r13 = _nt_space
4027
4047
  s9 << r13
4028
4048
  if r13
4029
- r15 = _nt_space
4030
- s9 << r15
4031
- if r15
4032
- r16 = _nt_ex_authorship
4033
- s9 << r16
4034
- end
4049
+ r14 = _nt_emend_authorship
4050
+ s9 << r14
4035
4051
  end
4036
4052
  end
4037
4053
  end
@@ -4048,79 +4064,103 @@ module ScientificNameClean
4048
4064
  r9 = SyntaxNode.new(input, (index-1)...index) if r9 == true
4049
4065
  r0 = r9
4050
4066
  else
4051
- i17, s17 = index, []
4052
- r18 = _nt_basionym_authorship_with_parenthesis
4053
- s17 << r18
4054
- if r18
4055
- r19 = _nt_space
4056
- s17 << r19
4057
- if r19
4058
- r20 = _nt_simple_authorship
4059
- s17 << r20
4067
+ i15, s15 = index, []
4068
+ r16 = _nt_basionym_authorship_with_parenthesis
4069
+ s15 << r16
4070
+ if r16
4071
+ r17 = _nt_space
4072
+ s15 << r17
4073
+ if r17
4074
+ r18 = _nt_simple_authorship
4075
+ s15 << r18
4060
4076
  end
4061
4077
  end
4062
- if s17.last
4063
- r17 = instantiate_node(SyntaxNode,input, i17...index, s17)
4064
- r17.extend(Authorship4)
4065
- r17.extend(Authorship5)
4078
+ if s15.last
4079
+ r15 = instantiate_node(SyntaxNode,input, i15...index, s15)
4080
+ r15.extend(Authorship4)
4081
+ r15.extend(Authorship5)
4066
4082
  else
4067
- @index = i17
4068
- r17 = nil
4083
+ @index = i15
4084
+ r15 = nil
4069
4085
  end
4070
- if r17
4071
- r17 = SyntaxNode.new(input, (index-1)...index) if r17 == true
4072
- r0 = r17
4086
+ if r15
4087
+ r15 = SyntaxNode.new(input, (index-1)...index) if r15 == true
4088
+ r0 = r15
4073
4089
  else
4074
- r21 = _nt_basionym_authorship_with_parenthesis
4075
- if r21
4076
- r21 = SyntaxNode.new(input, (index-1)...index) if r21 == true
4077
- r0 = r21
4090
+ r19 = _nt_basionym_authorship_with_parenthesis
4091
+ if r19
4092
+ r19 = SyntaxNode.new(input, (index-1)...index) if r19 == true
4093
+ r0 = r19
4078
4094
  else
4079
- i22, s22 = index, []
4080
- r23 = _nt_simple_authorship
4081
- s22 << r23
4082
- if r23
4095
+ i20, s20 = index, []
4096
+ r21 = _nt_simple_authorship
4097
+ s20 << r21
4098
+ if r21
4083
4099
  if (match_len = has_terminal?(",", false, index))
4084
- r25 = true
4100
+ r23 = true
4085
4101
  @index += match_len
4086
4102
  else
4087
4103
  terminal_parse_failure('","')
4088
- r25 = nil
4104
+ r23 = nil
4089
4105
  end
4090
- if r25
4091
- r24 = r25
4106
+ if r23
4107
+ r22 = r23
4092
4108
  else
4093
- r24 = instantiate_node(SyntaxNode,input, index...index)
4109
+ r22 = instantiate_node(SyntaxNode,input, index...index)
4094
4110
  end
4095
- s22 << r24
4096
- if r24
4097
- r26 = _nt_space
4098
- s22 << r26
4099
- if r26
4100
- r27 = _nt_ex_authorship
4101
- s22 << r27
4111
+ s20 << r22
4112
+ if r22
4113
+ r24 = _nt_space
4114
+ s20 << r24
4115
+ if r24
4116
+ r25 = _nt_ex_authorship
4117
+ s20 << r25
4102
4118
  end
4103
4119
  end
4104
4120
  end
4105
- if s22.last
4106
- r22 = instantiate_node(SyntaxNode,input, i22...index, s22)
4107
- r22.extend(Authorship6)
4108
- r22.extend(Authorship7)
4121
+ if s20.last
4122
+ r20 = instantiate_node(SyntaxNode,input, i20...index, s20)
4123
+ r20.extend(Authorship6)
4124
+ r20.extend(Authorship7)
4109
4125
  else
4110
- @index = i22
4111
- r22 = nil
4126
+ @index = i20
4127
+ r20 = nil
4112
4128
  end
4113
- if r22
4114
- r22 = SyntaxNode.new(input, (index-1)...index) if r22 == true
4115
- r0 = r22
4129
+ if r20
4130
+ r20 = SyntaxNode.new(input, (index-1)...index) if r20 == true
4131
+ r0 = r20
4116
4132
  else
4117
- r28 = _nt_simple_authorship
4118
- if r28
4119
- r28 = SyntaxNode.new(input, (index-1)...index) if r28 == true
4120
- r0 = r28
4133
+ i26, s26 = index, []
4134
+ r27 = _nt_simple_authorship
4135
+ s26 << r27
4136
+ if r27
4137
+ r28 = _nt_space
4138
+ s26 << r28
4139
+ if r28
4140
+ r29 = _nt_emend_authorship
4141
+ s26 << r29
4142
+ end
4143
+ end
4144
+ if s26.last
4145
+ r26 = instantiate_node(SyntaxNode,input, i26...index, s26)
4146
+ r26.extend(Authorship8)
4147
+ r26.extend(Authorship9)
4121
4148
  else
4122
- @index = i0
4123
- r0 = nil
4149
+ @index = i26
4150
+ r26 = nil
4151
+ end
4152
+ if r26
4153
+ r26 = SyntaxNode.new(input, (index-1)...index) if r26 == true
4154
+ r0 = r26
4155
+ else
4156
+ r30 = _nt_simple_authorship
4157
+ if r30
4158
+ r30 = SyntaxNode.new(input, (index-1)...index) if r30 == true
4159
+ r0 = r30
4160
+ else
4161
+ @index = i0
4162
+ r0 = nil
4163
+ end
4124
4164
  end
4125
4165
  end
4126
4166
  end
@@ -4247,12 +4287,59 @@ module ScientificNameClean
4247
4287
  elements[3]
4248
4288
  end
4249
4289
 
4250
- def right_paren
4290
+ def b
4251
4291
  elements[4]
4252
4292
  end
4293
+
4294
+ def space3
4295
+ elements[5]
4296
+ end
4297
+
4298
+ def right_paren
4299
+ elements[6]
4300
+ end
4253
4301
  end
4254
4302
 
4255
4303
  module BasionymAuthorshipWithParenthesis5
4304
+ def value
4305
+ "(" + a.value + " " + b.value + ")"
4306
+ end
4307
+
4308
+ def pos
4309
+ a.pos.merge(b.pos)
4310
+ end
4311
+
4312
+ def details
4313
+ val = a.details
4314
+ val[:basionymAuthorTeam].merge!(b.details)
4315
+ val[:authorship] = text_value.strip
4316
+ val
4317
+ end
4318
+ end
4319
+
4320
+ module BasionymAuthorshipWithParenthesis6
4321
+ def left_paren
4322
+ elements[0]
4323
+ end
4324
+
4325
+ def space1
4326
+ elements[1]
4327
+ end
4328
+
4329
+ def a
4330
+ elements[2]
4331
+ end
4332
+
4333
+ def space2
4334
+ elements[3]
4335
+ end
4336
+
4337
+ def right_paren
4338
+ elements[4]
4339
+ end
4340
+ end
4341
+
4342
+ module BasionymAuthorshipWithParenthesis7
4256
4343
  def value
4257
4344
  "(" + a.value + ")"
4258
4345
  end
@@ -4268,7 +4355,7 @@ module ScientificNameClean
4268
4355
  end
4269
4356
  end
4270
4357
 
4271
- module BasionymAuthorshipWithParenthesis6
4358
+ module BasionymAuthorshipWithParenthesis8
4272
4359
  def left_paren
4273
4360
  elements[0]
4274
4361
  end
@@ -4290,7 +4377,7 @@ module ScientificNameClean
4290
4377
  end
4291
4378
  end
4292
4379
 
4293
- module BasionymAuthorshipWithParenthesis7
4380
+ module BasionymAuthorshipWithParenthesis9
4294
4381
  def value
4295
4382
  "(?)"
4296
4383
  end
@@ -4441,8 +4528,16 @@ module ScientificNameClean
4441
4528
  r26 = _nt_space
4442
4529
  s22 << r26
4443
4530
  if r26
4444
- r27 = _nt_right_paren
4531
+ r27 = _nt_emend_authorship
4445
4532
  s22 << r27
4533
+ if r27
4534
+ r28 = _nt_space
4535
+ s22 << r28
4536
+ if r28
4537
+ r29 = _nt_right_paren
4538
+ s22 << r29
4539
+ end
4540
+ end
4446
4541
  end
4447
4542
  end
4448
4543
  end
@@ -4459,45 +4554,77 @@ module ScientificNameClean
4459
4554
  r22 = SyntaxNode.new(input, (index-1)...index) if r22 == true
4460
4555
  r0 = r22
4461
4556
  else
4462
- i28, s28 = index, []
4463
- r29 = _nt_left_paren
4464
- s28 << r29
4465
- if r29
4466
- r30 = _nt_space
4467
- s28 << r30
4468
- if r30
4469
- if (match_len = has_terminal?("?", false, index))
4470
- r31 = true
4471
- @index += match_len
4472
- else
4473
- terminal_parse_failure('"?"')
4474
- r31 = nil
4475
- end
4476
- s28 << r31
4477
- if r31
4478
- r32 = _nt_space
4479
- s28 << r32
4480
- if r32
4481
- r33 = _nt_right_paren
4482
- s28 << r33
4557
+ i30, s30 = index, []
4558
+ r31 = _nt_left_paren
4559
+ s30 << r31
4560
+ if r31
4561
+ r32 = _nt_space
4562
+ s30 << r32
4563
+ if r32
4564
+ r33 = _nt_simple_authorship
4565
+ s30 << r33
4566
+ if r33
4567
+ r34 = _nt_space
4568
+ s30 << r34
4569
+ if r34
4570
+ r35 = _nt_right_paren
4571
+ s30 << r35
4483
4572
  end
4484
4573
  end
4485
4574
  end
4486
4575
  end
4487
- if s28.last
4488
- r28 = instantiate_node(SyntaxNode,input, i28...index, s28)
4489
- r28.extend(BasionymAuthorshipWithParenthesis6)
4490
- r28.extend(BasionymAuthorshipWithParenthesis7)
4576
+ if s30.last
4577
+ r30 = instantiate_node(SyntaxNode,input, i30...index, s30)
4578
+ r30.extend(BasionymAuthorshipWithParenthesis6)
4579
+ r30.extend(BasionymAuthorshipWithParenthesis7)
4491
4580
  else
4492
- @index = i28
4493
- r28 = nil
4581
+ @index = i30
4582
+ r30 = nil
4494
4583
  end
4495
- if r28
4496
- r28 = SyntaxNode.new(input, (index-1)...index) if r28 == true
4497
- r0 = r28
4584
+ if r30
4585
+ r30 = SyntaxNode.new(input, (index-1)...index) if r30 == true
4586
+ r0 = r30
4498
4587
  else
4499
- @index = i0
4500
- r0 = nil
4588
+ i36, s36 = index, []
4589
+ r37 = _nt_left_paren
4590
+ s36 << r37
4591
+ if r37
4592
+ r38 = _nt_space
4593
+ s36 << r38
4594
+ if r38
4595
+ if (match_len = has_terminal?("?", false, index))
4596
+ r39 = true
4597
+ @index += match_len
4598
+ else
4599
+ terminal_parse_failure('"?"')
4600
+ r39 = nil
4601
+ end
4602
+ s36 << r39
4603
+ if r39
4604
+ r40 = _nt_space
4605
+ s36 << r40
4606
+ if r40
4607
+ r41 = _nt_right_paren
4608
+ s36 << r41
4609
+ end
4610
+ end
4611
+ end
4612
+ end
4613
+ if s36.last
4614
+ r36 = instantiate_node(SyntaxNode,input, i36...index, s36)
4615
+ r36.extend(BasionymAuthorshipWithParenthesis8)
4616
+ r36.extend(BasionymAuthorshipWithParenthesis9)
4617
+ else
4618
+ @index = i36
4619
+ r36 = nil
4620
+ end
4621
+ if r36
4622
+ r36 = SyntaxNode.new(input, (index-1)...index) if r36 == true
4623
+ r0 = r36
4624
+ else
4625
+ @index = i0
4626
+ r0 = nil
4627
+ end
4501
4628
  end
4502
4629
  end
4503
4630
  end
@@ -4666,6 +4793,71 @@ module ScientificNameClean
4666
4793
  r0
4667
4794
  end
4668
4795
 
4796
+ module EmendAuthorship0
4797
+ def emend
4798
+ elements[0]
4799
+ end
4800
+
4801
+ def space
4802
+ elements[1]
4803
+ end
4804
+
4805
+ def b
4806
+ elements[2]
4807
+ end
4808
+ end
4809
+
4810
+ module EmendAuthorship1
4811
+ def value
4812
+ " emend. " + b.value
4813
+ end
4814
+
4815
+ def pos
4816
+ b.pos
4817
+ end
4818
+
4819
+ def details
4820
+ val = {:emendAuthorTeam => {:authorTeam => b.text_value.strip}.merge(b.details[:basionymAuthorTeam])}
4821
+ val
4822
+ end
4823
+ end
4824
+
4825
+ def _nt_emend_authorship
4826
+ start_index = index
4827
+ if node_cache[:emend_authorship].has_key?(index)
4828
+ cached = node_cache[:emend_authorship][index]
4829
+ if cached
4830
+ node_cache[:emend_authorship][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
4831
+ @index = cached.interval.end
4832
+ end
4833
+ return cached
4834
+ end
4835
+
4836
+ i0, s0 = index, []
4837
+ r1 = _nt_emend
4838
+ s0 << r1
4839
+ if r1
4840
+ r2 = _nt_space
4841
+ s0 << r2
4842
+ if r2
4843
+ r3 = _nt_simple_authorship
4844
+ s0 << r3
4845
+ end
4846
+ end
4847
+ if s0.last
4848
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
4849
+ r0.extend(EmendAuthorship0)
4850
+ r0.extend(EmendAuthorship1)
4851
+ else
4852
+ @index = i0
4853
+ r0 = nil
4854
+ end
4855
+
4856
+ node_cache[:emend_authorship][start_index] = r0
4857
+
4858
+ r0
4859
+ end
4860
+
4669
4861
  module SimpleAuthorship0
4670
4862
  def a
4671
4863
  elements[0]
@@ -5298,6 +5490,80 @@ module ScientificNameClean
5298
5490
  r0
5299
5491
  end
5300
5492
 
5493
+ module Emend0
5494
+ end
5495
+
5496
+ def _nt_emend
5497
+ start_index = index
5498
+ if node_cache[:emend].has_key?(index)
5499
+ cached = node_cache[:emend][index]
5500
+ if cached
5501
+ node_cache[:emend][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
5502
+ @index = cached.interval.end
5503
+ end
5504
+ return cached
5505
+ end
5506
+
5507
+ i0, s0 = index, []
5508
+ i1 = index
5509
+ if (match_len = has_terminal?("emend.", false, index))
5510
+ r2 = instantiate_node(SyntaxNode,input, index...(index + match_len))
5511
+ @index += match_len
5512
+ else
5513
+ terminal_parse_failure('"emend."')
5514
+ r2 = nil
5515
+ end
5516
+ if r2
5517
+ r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
5518
+ r1 = r2
5519
+ else
5520
+ if (match_len = has_terminal?("emend", false, index))
5521
+ r3 = instantiate_node(SyntaxNode,input, index...(index + match_len))
5522
+ @index += match_len
5523
+ else
5524
+ terminal_parse_failure('"emend"')
5525
+ r3 = nil
5526
+ end
5527
+ if r3
5528
+ r3 = SyntaxNode.new(input, (index-1)...index) if r3 == true
5529
+ r1 = r3
5530
+ else
5531
+ @index = i1
5532
+ r1 = nil
5533
+ end
5534
+ end
5535
+ s0 << r1
5536
+ if r1
5537
+ i4 = index
5538
+ if has_terminal?(@regexps[gr = '\A[\\s]'] ||= Regexp.new(gr), :regexp, index)
5539
+ r5 = true
5540
+ @index += 1
5541
+ else
5542
+ terminal_parse_failure('[\\s]')
5543
+ r5 = nil
5544
+ end
5545
+ if r5
5546
+ @index = i4
5547
+ r4 = instantiate_node(SyntaxNode,input, index...index)
5548
+ else
5549
+ @index = i4
5550
+ r4 = nil
5551
+ end
5552
+ s0 << r4
5553
+ end
5554
+ if s0.last
5555
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
5556
+ r0.extend(Emend0)
5557
+ else
5558
+ @index = i0
5559
+ r0 = nil
5560
+ end
5561
+
5562
+ node_cache[:emend][start_index] = r0
5563
+
5564
+ r0
5565
+ end
5566
+
5301
5567
  module AuthorSeparator0
5302
5568
  def apply(a,b)
5303
5569
  sep = text_value.strip
@@ -5456,6 +5722,38 @@ module ScientificNameClean
5456
5722
  end
5457
5723
  end
5458
5724
 
5725
+ module AuthorName2
5726
+ def space1
5727
+ elements[0]
5728
+ end
5729
+
5730
+ def a
5731
+ elements[1]
5732
+ end
5733
+
5734
+ def space2
5735
+ elements[2]
5736
+ end
5737
+
5738
+ def b
5739
+ elements[3]
5740
+ end
5741
+ end
5742
+
5743
+ module AuthorName3
5744
+ def value
5745
+ a.value + " " + b.value
5746
+ end
5747
+
5748
+ def pos
5749
+ a.pos.merge(b.pos)
5750
+ end
5751
+
5752
+ def details
5753
+ {:author => [value]}
5754
+ end
5755
+ end
5756
+
5459
5757
  def _nt_author_name
5460
5758
  start_index = index
5461
5759
  if node_cache[:author_name].has_key?(index)
@@ -5478,7 +5776,7 @@ module ScientificNameClean
5478
5776
  r4 = _nt_space
5479
5777
  s1 << r4
5480
5778
  if r4
5481
- r5 = _nt_author_postfix_word
5779
+ r5 = _nt_author_maybe_filius
5482
5780
  s1 << r5
5483
5781
  if r5
5484
5782
  r6 = _nt_space
@@ -5511,13 +5809,41 @@ module ScientificNameClean
5511
5809
  r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
5512
5810
  r0 = r1
5513
5811
  else
5514
- r9 = _nt_author_name_without_postfix
5812
+ i9, s9 = index, []
5813
+ r10 = _nt_space
5814
+ s9 << r10
5815
+ if r10
5816
+ r11 = _nt_author_name_without_postfix
5817
+ s9 << r11
5818
+ if r11
5819
+ r12 = _nt_space
5820
+ s9 << r12
5821
+ if r12
5822
+ r13 = _nt_author_filius
5823
+ s9 << r13
5824
+ end
5825
+ end
5826
+ end
5827
+ if s9.last
5828
+ r9 = instantiate_node(SyntaxNode,input, i9...index, s9)
5829
+ r9.extend(AuthorName2)
5830
+ r9.extend(AuthorName3)
5831
+ else
5832
+ @index = i9
5833
+ r9 = nil
5834
+ end
5515
5835
  if r9
5516
5836
  r9 = SyntaxNode.new(input, (index-1)...index) if r9 == true
5517
5837
  r0 = r9
5518
5838
  else
5519
- @index = i0
5520
- r0 = nil
5839
+ r14 = _nt_author_name_without_postfix
5840
+ if r14
5841
+ r14 = SyntaxNode.new(input, (index-1)...index) if r14 == true
5842
+ r0 = r14
5843
+ else
5844
+ @index = i0
5845
+ r0 = nil
5846
+ end
5521
5847
  end
5522
5848
  end
5523
5849
 
@@ -5809,8 +6135,36 @@ module ScientificNameClean
5809
6135
  r2.extend(AuthorWord1)
5810
6136
  r2.extend(AuthorWord1)
5811
6137
  else
5812
- @index = i2
5813
- r2 = nil
6138
+ if (match_len = has_terminal?("& al.", false, index))
6139
+ r7 = instantiate_node(SyntaxNode,input, index...(index + match_len))
6140
+ @index += match_len
6141
+ else
6142
+ terminal_parse_failure('"& al."')
6143
+ r7 = nil
6144
+ end
6145
+ if r7
6146
+ r7 = SyntaxNode.new(input, (index-1)...index) if r7 == true
6147
+ r2 = r7
6148
+ r2.extend(AuthorWord1)
6149
+ r2.extend(AuthorWord1)
6150
+ else
6151
+ if (match_len = has_terminal?("& al", false, index))
6152
+ r8 = instantiate_node(SyntaxNode,input, index...(index + match_len))
6153
+ @index += match_len
6154
+ else
6155
+ terminal_parse_failure('"& al"')
6156
+ r8 = nil
6157
+ end
6158
+ if r8
6159
+ r8 = SyntaxNode.new(input, (index-1)...index) if r8 == true
6160
+ r2 = r8
6161
+ r2.extend(AuthorWord1)
6162
+ r2.extend(AuthorWord1)
6163
+ else
6164
+ @index = i2
6165
+ r2 = nil
6166
+ end
6167
+ end
5814
6168
  end
5815
6169
  end
5816
6170
  end
@@ -5819,197 +6173,197 @@ module ScientificNameClean
5819
6173
  r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
5820
6174
  r0 = r2
5821
6175
  else
5822
- i7, s7 = index, []
5823
6176
  i9, s9 = index, []
6177
+ i11, s11 = index, []
5824
6178
  if (match_len = has_terminal?("d", false, index))
5825
- r10 = true
6179
+ r12 = true
5826
6180
  @index += match_len
5827
6181
  else
5828
6182
  terminal_parse_failure('"d"')
5829
- r10 = nil
6183
+ r12 = nil
5830
6184
  end
5831
- s9 << r10
5832
- if r10
6185
+ s11 << r12
6186
+ if r12
5833
6187
  if has_terminal?(@regexps[gr = '\A[\'’]'] ||= Regexp.new(gr), :regexp, index)
5834
- r11 = true
6188
+ r13 = true
5835
6189
  @index += 1
5836
6190
  else
5837
6191
  terminal_parse_failure('[\'’]')
5838
- r11 = nil
6192
+ r13 = nil
5839
6193
  end
5840
- s9 << r11
6194
+ s11 << r13
5841
6195
  end
5842
- if s9.last
5843
- r9 = instantiate_node(SyntaxNode,input, i9...index, s9)
5844
- r9.extend(AuthorWord2)
6196
+ if s11.last
6197
+ r11 = instantiate_node(SyntaxNode,input, i11...index, s11)
6198
+ r11.extend(AuthorWord2)
5845
6199
  else
5846
- @index = i9
5847
- r9 = nil
6200
+ @index = i11
6201
+ r11 = nil
5848
6202
  end
5849
- if r9
5850
- r8 = r9
6203
+ if r11
6204
+ r10 = r11
5851
6205
  else
5852
- r8 = instantiate_node(SyntaxNode,input, index...index)
6206
+ r10 = instantiate_node(SyntaxNode,input, index...index)
5853
6207
  end
5854
- s7 << r8
5855
- if r8
5856
- i12 = index
6208
+ s9 << r10
6209
+ if r10
6210
+ i14 = index
5857
6211
  if (match_len = has_terminal?("Å", false, index))
5858
- r13 = true
6212
+ r15 = true
5859
6213
  @index += match_len
5860
6214
  else
5861
6215
  terminal_parse_failure('"Å"')
5862
- r13 = nil
6216
+ r15 = nil
5863
6217
  end
5864
- if r13
5865
- r13 = SyntaxNode.new(input, (index-1)...index) if r13 == true
5866
- r12 = r13
6218
+ if r15
6219
+ r15 = SyntaxNode.new(input, (index-1)...index) if r15 == true
6220
+ r14 = r15
5867
6221
  else
5868
6222
  if (match_len = has_terminal?("Ö", false, index))
5869
- r14 = true
6223
+ r16 = true
5870
6224
  @index += match_len
5871
6225
  else
5872
6226
  terminal_parse_failure('"Ö"')
5873
- r14 = nil
6227
+ r16 = nil
5874
6228
  end
5875
- if r14
5876
- r14 = SyntaxNode.new(input, (index-1)...index) if r14 == true
5877
- r12 = r14
6229
+ if r16
6230
+ r16 = SyntaxNode.new(input, (index-1)...index) if r16 == true
6231
+ r14 = r16
5878
6232
  else
5879
6233
  if (match_len = has_terminal?("Á", false, index))
5880
- r15 = true
6234
+ r17 = true
5881
6235
  @index += match_len
5882
6236
  else
5883
6237
  terminal_parse_failure('"Á"')
5884
- r15 = nil
6238
+ r17 = nil
5885
6239
  end
5886
- if r15
5887
- r15 = SyntaxNode.new(input, (index-1)...index) if r15 == true
5888
- r12 = r15
6240
+ if r17
6241
+ r17 = SyntaxNode.new(input, (index-1)...index) if r17 == true
6242
+ r14 = r17
5889
6243
  else
5890
6244
  if (match_len = has_terminal?("Ø", false, index))
5891
- r16 = true
6245
+ r18 = true
5892
6246
  @index += match_len
5893
6247
  else
5894
6248
  terminal_parse_failure('"Ø"')
5895
- r16 = nil
6249
+ r18 = nil
5896
6250
  end
5897
- if r16
5898
- r16 = SyntaxNode.new(input, (index-1)...index) if r16 == true
5899
- r12 = r16
6251
+ if r18
6252
+ r18 = SyntaxNode.new(input, (index-1)...index) if r18 == true
6253
+ r14 = r18
5900
6254
  else
5901
6255
  if (match_len = has_terminal?("Ô", false, index))
5902
- r17 = true
6256
+ r19 = true
5903
6257
  @index += match_len
5904
6258
  else
5905
6259
  terminal_parse_failure('"Ô"')
5906
- r17 = nil
6260
+ r19 = nil
5907
6261
  end
5908
- if r17
5909
- r17 = SyntaxNode.new(input, (index-1)...index) if r17 == true
5910
- r12 = r17
6262
+ if r19
6263
+ r19 = SyntaxNode.new(input, (index-1)...index) if r19 == true
6264
+ r14 = r19
5911
6265
  else
5912
6266
  if (match_len = has_terminal?("Š", false, index))
5913
- r18 = true
6267
+ r20 = true
5914
6268
  @index += match_len
5915
6269
  else
5916
6270
  terminal_parse_failure('"Š"')
5917
- r18 = nil
6271
+ r20 = nil
5918
6272
  end
5919
- if r18
5920
- r18 = SyntaxNode.new(input, (index-1)...index) if r18 == true
5921
- r12 = r18
6273
+ if r20
6274
+ r20 = SyntaxNode.new(input, (index-1)...index) if r20 == true
6275
+ r14 = r20
5922
6276
  else
5923
6277
  if (match_len = has_terminal?("Ś", false, index))
5924
- r19 = true
6278
+ r21 = true
5925
6279
  @index += match_len
5926
6280
  else
5927
6281
  terminal_parse_failure('"Ś"')
5928
- r19 = nil
6282
+ r21 = nil
5929
6283
  end
5930
- if r19
5931
- r19 = SyntaxNode.new(input, (index-1)...index) if r19 == true
5932
- r12 = r19
6284
+ if r21
6285
+ r21 = SyntaxNode.new(input, (index-1)...index) if r21 == true
6286
+ r14 = r21
5933
6287
  else
5934
6288
  if (match_len = has_terminal?("Č", false, index))
5935
- r20 = true
6289
+ r22 = true
5936
6290
  @index += match_len
5937
6291
  else
5938
6292
  terminal_parse_failure('"Č"')
5939
- r20 = nil
6293
+ r22 = nil
5940
6294
  end
5941
- if r20
5942
- r20 = SyntaxNode.new(input, (index-1)...index) if r20 == true
5943
- r12 = r20
6295
+ if r22
6296
+ r22 = SyntaxNode.new(input, (index-1)...index) if r22 == true
6297
+ r14 = r22
5944
6298
  else
5945
6299
  if (match_len = has_terminal?("Ķ", false, index))
5946
- r21 = true
6300
+ r23 = true
5947
6301
  @index += match_len
5948
6302
  else
5949
6303
  terminal_parse_failure('"Ķ"')
5950
- r21 = nil
6304
+ r23 = nil
5951
6305
  end
5952
- if r21
5953
- r21 = SyntaxNode.new(input, (index-1)...index) if r21 == true
5954
- r12 = r21
6306
+ if r23
6307
+ r23 = SyntaxNode.new(input, (index-1)...index) if r23 == true
6308
+ r14 = r23
5955
6309
  else
5956
6310
  if (match_len = has_terminal?("Ł", false, index))
5957
- r22 = true
6311
+ r24 = true
5958
6312
  @index += match_len
5959
6313
  else
5960
6314
  terminal_parse_failure('"Ł"')
5961
- r22 = nil
6315
+ r24 = nil
5962
6316
  end
5963
- if r22
5964
- r22 = SyntaxNode.new(input, (index-1)...index) if r22 == true
5965
- r12 = r22
6317
+ if r24
6318
+ r24 = SyntaxNode.new(input, (index-1)...index) if r24 == true
6319
+ r14 = r24
5966
6320
  else
5967
6321
  if (match_len = has_terminal?("É", false, index))
5968
- r23 = true
6322
+ r25 = true
5969
6323
  @index += match_len
5970
6324
  else
5971
6325
  terminal_parse_failure('"É"')
5972
- r23 = nil
6326
+ r25 = nil
5973
6327
  end
5974
- if r23
5975
- r23 = SyntaxNode.new(input, (index-1)...index) if r23 == true
5976
- r12 = r23
6328
+ if r25
6329
+ r25 = SyntaxNode.new(input, (index-1)...index) if r25 == true
6330
+ r14 = r25
5977
6331
  else
5978
6332
  if (match_len = has_terminal?("Ž", false, index))
5979
- r24 = true
6333
+ r26 = true
5980
6334
  @index += match_len
5981
6335
  else
5982
6336
  terminal_parse_failure('"Ž"')
5983
- r24 = nil
6337
+ r26 = nil
5984
6338
  end
5985
- if r24
5986
- r24 = SyntaxNode.new(input, (index-1)...index) if r24 == true
5987
- r12 = r24
6339
+ if r26
6340
+ r26 = SyntaxNode.new(input, (index-1)...index) if r26 == true
6341
+ r14 = r26
5988
6342
  else
5989
6343
  if has_terminal?(@regexps[gr = '\A[A-W]'] ||= Regexp.new(gr), :regexp, index)
5990
- r25 = true
6344
+ r27 = true
5991
6345
  @index += 1
5992
6346
  else
5993
6347
  terminal_parse_failure('[A-W]')
5994
- r25 = nil
6348
+ r27 = nil
5995
6349
  end
5996
- if r25
5997
- r25 = SyntaxNode.new(input, (index-1)...index) if r25 == true
5998
- r12 = r25
6350
+ if r27
6351
+ r27 = SyntaxNode.new(input, (index-1)...index) if r27 == true
6352
+ r14 = r27
5999
6353
  else
6000
6354
  if has_terminal?(@regexps[gr = '\A[Y-Z]'] ||= Regexp.new(gr), :regexp, index)
6001
- r26 = true
6355
+ r28 = true
6002
6356
  @index += 1
6003
6357
  else
6004
6358
  terminal_parse_failure('[Y-Z]')
6005
- r26 = nil
6359
+ r28 = nil
6006
6360
  end
6007
- if r26
6008
- r26 = SyntaxNode.new(input, (index-1)...index) if r26 == true
6009
- r12 = r26
6361
+ if r28
6362
+ r28 = SyntaxNode.new(input, (index-1)...index) if r28 == true
6363
+ r14 = r28
6010
6364
  else
6011
- @index = i12
6012
- r12 = nil
6365
+ @index = i14
6366
+ r14 = nil
6013
6367
  end
6014
6368
  end
6015
6369
  end
@@ -6024,88 +6378,88 @@ module ScientificNameClean
6024
6378
  end
6025
6379
  end
6026
6380
  end
6027
- s7 << r12
6028
- if r12
6029
- s27, i27 = [], index
6381
+ s9 << r14
6382
+ if r14
6383
+ s29, i29 = [], index
6030
6384
  loop do
6031
6385
  if has_terminal?(@regexps[gr = '\A[^0-9\\[\\]\\(\\)\\s&,]'] ||= Regexp.new(gr), :regexp, index)
6032
- r28 = true
6386
+ r30 = true
6033
6387
  @index += 1
6034
6388
  else
6035
6389
  terminal_parse_failure('[^0-9\\[\\]\\(\\)\\s&,]')
6036
- r28 = nil
6390
+ r30 = nil
6037
6391
  end
6038
- if r28
6039
- s27 << r28
6392
+ if r30
6393
+ s29 << r30
6040
6394
  else
6041
6395
  break
6042
6396
  end
6043
6397
  end
6044
- r27 = instantiate_node(SyntaxNode,input, i27...index, s27)
6045
- s7 << r27
6398
+ r29 = instantiate_node(SyntaxNode,input, i29...index, s29)
6399
+ s9 << r29
6046
6400
  end
6047
6401
  end
6048
- if s7.last
6049
- r7 = instantiate_node(SyntaxNode,input, i7...index, s7)
6050
- r7.extend(AuthorWord3)
6051
- r7.extend(AuthorWord4)
6402
+ if s9.last
6403
+ r9 = instantiate_node(SyntaxNode,input, i9...index, s9)
6404
+ r9.extend(AuthorWord3)
6405
+ r9.extend(AuthorWord4)
6052
6406
  else
6053
- @index = i7
6054
- r7 = nil
6407
+ @index = i9
6408
+ r9 = nil
6055
6409
  end
6056
- if r7
6057
- r7 = SyntaxNode.new(input, (index-1)...index) if r7 == true
6058
- r0 = r7
6410
+ if r9
6411
+ r9 = SyntaxNode.new(input, (index-1)...index) if r9 == true
6412
+ r0 = r9
6059
6413
  else
6060
- i29, s29 = index, []
6414
+ i31, s31 = index, []
6061
6415
  if (match_len = has_terminal?("X", false, index))
6062
- r30 = true
6416
+ r32 = true
6063
6417
  @index += match_len
6064
6418
  else
6065
6419
  terminal_parse_failure('"X"')
6066
- r30 = nil
6420
+ r32 = nil
6067
6421
  end
6068
- s29 << r30
6069
- if r30
6070
- s31, i31 = [], index
6422
+ s31 << r32
6423
+ if r32
6424
+ s33, i33 = [], index
6071
6425
  loop do
6072
6426
  if has_terminal?(@regexps[gr = '\A[^0-9\\[\\]\\(\\)\\s&,]'] ||= Regexp.new(gr), :regexp, index)
6073
- r32 = true
6427
+ r34 = true
6074
6428
  @index += 1
6075
6429
  else
6076
6430
  terminal_parse_failure('[^0-9\\[\\]\\(\\)\\s&,]')
6077
- r32 = nil
6431
+ r34 = nil
6078
6432
  end
6079
- if r32
6080
- s31 << r32
6433
+ if r34
6434
+ s33 << r34
6081
6435
  else
6082
6436
  break
6083
6437
  end
6084
6438
  end
6085
- if s31.empty?
6086
- @index = i31
6087
- r31 = nil
6439
+ if s33.empty?
6440
+ @index = i33
6441
+ r33 = nil
6088
6442
  else
6089
- r31 = instantiate_node(SyntaxNode,input, i31...index, s31)
6443
+ r33 = instantiate_node(SyntaxNode,input, i33...index, s33)
6090
6444
  end
6091
- s29 << r31
6445
+ s31 << r33
6092
6446
  end
6093
- if s29.last
6094
- r29 = instantiate_node(SyntaxNode,input, i29...index, s29)
6095
- r29.extend(AuthorWord5)
6096
- r29.extend(AuthorWord6)
6447
+ if s31.last
6448
+ r31 = instantiate_node(SyntaxNode,input, i31...index, s31)
6449
+ r31.extend(AuthorWord5)
6450
+ r31.extend(AuthorWord6)
6097
6451
  else
6098
- @index = i29
6099
- r29 = nil
6452
+ @index = i31
6453
+ r31 = nil
6100
6454
  end
6101
- if r29
6102
- r29 = SyntaxNode.new(input, (index-1)...index) if r29 == true
6103
- r0 = r29
6455
+ if r31
6456
+ r31 = SyntaxNode.new(input, (index-1)...index) if r31 == true
6457
+ r0 = r31
6104
6458
  else
6105
- r33 = _nt_author_prefix_word
6106
- if r33
6107
- r33 = SyntaxNode.new(input, (index-1)...index) if r33 == true
6108
- r0 = r33
6459
+ r35 = _nt_author_prefix_word
6460
+ if r35
6461
+ r35 = SyntaxNode.new(input, (index-1)...index) if r35 == true
6462
+ r0 = r35
6109
6463
  else
6110
6464
  @index = i0
6111
6465
  r0 = nil
@@ -6319,41 +6673,53 @@ module ScientificNameClean
6319
6673
  r17 = SyntaxNode.new(input, (index-1)...index) if r17 == true
6320
6674
  r2 = r17
6321
6675
  else
6322
- if (match_len = has_terminal?("ter", false, index))
6676
+ if (match_len = has_terminal?("'t", false, index))
6323
6677
  r18 = instantiate_node(SyntaxNode,input, index...(index + match_len))
6324
6678
  @index += match_len
6325
6679
  else
6326
- terminal_parse_failure('"ter"')
6680
+ terminal_parse_failure('"\'t"')
6327
6681
  r18 = nil
6328
6682
  end
6329
6683
  if r18
6330
6684
  r18 = SyntaxNode.new(input, (index-1)...index) if r18 == true
6331
6685
  r2 = r18
6332
6686
  else
6333
- if (match_len = has_terminal?("van", false, index))
6687
+ if (match_len = has_terminal?("ter", false, index))
6334
6688
  r19 = instantiate_node(SyntaxNode,input, index...(index + match_len))
6335
6689
  @index += match_len
6336
6690
  else
6337
- terminal_parse_failure('"van"')
6691
+ terminal_parse_failure('"ter"')
6338
6692
  r19 = nil
6339
6693
  end
6340
6694
  if r19
6341
6695
  r19 = SyntaxNode.new(input, (index-1)...index) if r19 == true
6342
6696
  r2 = r19
6343
6697
  else
6344
- if (match_len = has_terminal?("von", false, index))
6698
+ if (match_len = has_terminal?("van", false, index))
6345
6699
  r20 = instantiate_node(SyntaxNode,input, index...(index + match_len))
6346
6700
  @index += match_len
6347
6701
  else
6348
- terminal_parse_failure('"von"')
6702
+ terminal_parse_failure('"van"')
6349
6703
  r20 = nil
6350
6704
  end
6351
6705
  if r20
6352
6706
  r20 = SyntaxNode.new(input, (index-1)...index) if r20 == true
6353
6707
  r2 = r20
6354
6708
  else
6355
- @index = i2
6356
- r2 = nil
6709
+ if (match_len = has_terminal?("von", false, index))
6710
+ r21 = instantiate_node(SyntaxNode,input, index...(index + match_len))
6711
+ @index += match_len
6712
+ else
6713
+ terminal_parse_failure('"von"')
6714
+ r21 = nil
6715
+ end
6716
+ if r21
6717
+ r21 = SyntaxNode.new(input, (index-1)...index) if r21 == true
6718
+ r2 = r21
6719
+ else
6720
+ @index = i2
6721
+ r2 = nil
6722
+ end
6357
6723
  end
6358
6724
  end
6359
6725
  end
@@ -6374,16 +6740,16 @@ module ScientificNameClean
6374
6740
  end
6375
6741
  s0 << r2
6376
6742
  if r2
6377
- i21 = index
6378
- r22 = _nt_space_hard
6379
- if r22
6380
- @index = i21
6381
- r21 = instantiate_node(SyntaxNode,input, index...index)
6743
+ i22 = index
6744
+ r23 = _nt_space_hard
6745
+ if r23
6746
+ @index = i22
6747
+ r22 = instantiate_node(SyntaxNode,input, index...index)
6382
6748
  else
6383
- @index = i21
6384
- r21 = nil
6749
+ @index = i22
6750
+ r22 = nil
6385
6751
  end
6386
- s0 << r21
6752
+ s0 << r22
6387
6753
  end
6388
6754
  end
6389
6755
  if s0.last
@@ -6400,7 +6766,7 @@ module ScientificNameClean
6400
6766
  r0
6401
6767
  end
6402
6768
 
6403
- module AuthorPostfixWord0
6769
+ module AuthorFilius0
6404
6770
  def value
6405
6771
  text_value.strip
6406
6772
  end
@@ -6410,64 +6776,85 @@ module ScientificNameClean
6410
6776
  end
6411
6777
  end
6412
6778
 
6413
- def _nt_author_postfix_word
6779
+ def _nt_author_filius
6414
6780
  start_index = index
6415
- if node_cache[:author_postfix_word].has_key?(index)
6416
- cached = node_cache[:author_postfix_word][index]
6781
+ if node_cache[:author_filius].has_key?(index)
6782
+ cached = node_cache[:author_filius][index]
6417
6783
  if cached
6418
- node_cache[:author_postfix_word][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
6784
+ node_cache[:author_filius][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
6419
6785
  @index = cached.interval.end
6420
6786
  end
6421
6787
  return cached
6422
6788
  end
6423
6789
 
6424
6790
  i0 = index
6425
- if (match_len = has_terminal?("f.", false, index))
6791
+ if (match_len = has_terminal?("fil.", false, index))
6426
6792
  r1 = instantiate_node(SyntaxNode,input, index...(index + match_len))
6427
6793
  @index += match_len
6428
6794
  else
6429
- terminal_parse_failure('"f."')
6795
+ terminal_parse_failure('"fil."')
6430
6796
  r1 = nil
6431
6797
  end
6432
6798
  if r1
6433
6799
  r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
6434
6800
  r0 = r1
6435
- r0.extend(AuthorPostfixWord0)
6436
- r0.extend(AuthorPostfixWord0)
6801
+ r0.extend(AuthorFilius0)
6802
+ r0.extend(AuthorFilius0)
6437
6803
  else
6438
- if (match_len = has_terminal?("fil.", false, index))
6804
+ if (match_len = has_terminal?("filius", false, index))
6439
6805
  r2 = instantiate_node(SyntaxNode,input, index...(index + match_len))
6440
6806
  @index += match_len
6441
6807
  else
6442
- terminal_parse_failure('"fil."')
6808
+ terminal_parse_failure('"filius"')
6443
6809
  r2 = nil
6444
6810
  end
6445
6811
  if r2
6446
6812
  r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
6447
6813
  r0 = r2
6448
- r0.extend(AuthorPostfixWord0)
6449
- r0.extend(AuthorPostfixWord0)
6814
+ r0.extend(AuthorFilius0)
6815
+ r0.extend(AuthorFilius0)
6450
6816
  else
6451
- if (match_len = has_terminal?("filius", false, index))
6452
- r3 = instantiate_node(SyntaxNode,input, index...(index + match_len))
6453
- @index += match_len
6454
- else
6455
- terminal_parse_failure('"filius"')
6456
- r3 = nil
6457
- end
6458
- if r3
6459
- r3 = SyntaxNode.new(input, (index-1)...index) if r3 == true
6460
- r0 = r3
6461
- r0.extend(AuthorPostfixWord0)
6462
- r0.extend(AuthorPostfixWord0)
6463
- else
6464
- @index = i0
6465
- r0 = nil
6466
- end
6817
+ @index = i0
6818
+ r0 = nil
6467
6819
  end
6468
6820
  end
6469
6821
 
6470
- node_cache[:author_postfix_word][start_index] = r0
6822
+ node_cache[:author_filius][start_index] = r0
6823
+
6824
+ r0
6825
+ end
6826
+
6827
+ module AuthorMaybeFilius0
6828
+ def value
6829
+ text_value.strip
6830
+ end
6831
+
6832
+ def pos
6833
+ {interval.begin => ["author_word", interval.end]}
6834
+ end
6835
+ end
6836
+
6837
+ def _nt_author_maybe_filius
6838
+ start_index = index
6839
+ if node_cache[:author_maybe_filius].has_key?(index)
6840
+ cached = node_cache[:author_maybe_filius][index]
6841
+ if cached
6842
+ node_cache[:author_maybe_filius][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
6843
+ @index = cached.interval.end
6844
+ end
6845
+ return cached
6846
+ end
6847
+
6848
+ if (match_len = has_terminal?("f.", false, index))
6849
+ r0 = instantiate_node(SyntaxNode,input, index...(index + match_len))
6850
+ r0.extend(AuthorMaybeFilius0)
6851
+ @index += match_len
6852
+ else
6853
+ terminal_parse_failure('"f."')
6854
+ r0 = nil
6855
+ end
6856
+
6857
+ node_cache[:author_maybe_filius][start_index] = r0
6471
6858
 
6472
6859
  r0
6473
6860
  end