biodiversity 3.4.4 → 3.4.5

Sign up to get free protection for your applications and to get access to all the features.
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