bibtex-ruby 4.0.16 → 4.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of bibtex-ruby might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/features/names.feature +0 -1
- data/lib/bibtex/name_parser.rb +239 -123
- data/lib/bibtex/names.y +85 -46
- data/lib/bibtex/version.rb +2 -2
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8783657ade7bf716dc5e8e8efc22cc953e65ceca
|
4
|
+
data.tar.gz: 27870297854e15bb45f12055bcc7a09be62eba11
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f43096cd39d610a93af92eba33c2e61f4c4e869cb95b83d6477dc980d74e380b0b3fadf126647691d731d653457db36974c03c88afc74b236d7d5204016a14bd
|
7
|
+
data.tar.gz: dc0570d2c762ab894efcd3700cf730c5a6fde3dc43dfca13ec9eb0915c435e26ce926e3950a7f81c9cb5eb92d7079bae7a9f2f2c4b7e64fe43da91bd10f7c835
|
data/features/names.feature
CHANGED
@@ -84,4 +84,3 @@ Feature: BibTeX Names
|
|
84
84
|
| {Barnes and} {Noble, Inc.} | {Barnes and} | | {Noble, Inc.} | |
|
85
85
|
| {Barnes} {and} {Noble,} {Inc.} | {Barnes} {and} {Noble,} | | {Inc.} | |
|
86
86
|
| Charles Louis Xavier Joseph de la Vallee Poussin | Charles Louis Xavier Joseph | de la | Vallee Poussin | |
|
87
|
-
|
data/lib/bibtex/name_parser.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
#
|
2
2
|
# DO NOT MODIFY!!!!
|
3
|
-
# This file is automatically generated by Racc 1.4.
|
3
|
+
# This file is automatically generated by Racc 1.4.14
|
4
4
|
# from Racc grammer file "".
|
5
5
|
#
|
6
6
|
|
@@ -11,19 +11,20 @@ require 'strscan'
|
|
11
11
|
module BibTeX
|
12
12
|
class NameParser < Racc::Parser
|
13
13
|
|
14
|
-
module_eval(<<'...end names.y/module_eval...', 'names.y',
|
14
|
+
module_eval(<<'...end names.y/module_eval...', 'names.y', 116)
|
15
15
|
|
16
16
|
@patterns = {
|
17
17
|
:and => /,?\s+and\s+/io,
|
18
18
|
:space => /\s+/o,
|
19
19
|
:comma => /,/o,
|
20
|
-
:lower => /[[:lower:]][
|
21
|
-
:upper => /[[:upper:]][
|
22
|
-
:
|
20
|
+
:lower => /[[:lower:]][[:lower:][:upper:]]*/uo,
|
21
|
+
:upper => /[[:upper:]][[:lower:][:upper:].]*/uo,
|
22
|
+
:other => /[^\s,\{\}\\[:upper:][:lower:]]+/uo,
|
23
23
|
:lbrace => /\{/o,
|
24
24
|
:rbrace => /\}/o,
|
25
|
-
:
|
26
|
-
:
|
25
|
+
:braces => /[\{\}]/o,
|
26
|
+
:escape => /\\./o,
|
27
|
+
:last_first => /[\p{Han}\p{Hiragana}\p{Katakana}\p{Hangul}]/uo
|
27
28
|
}
|
28
29
|
|
29
30
|
class << self
|
@@ -55,7 +56,8 @@ module_eval(<<'...end names.y/module_eval...', 'names.y', 94)
|
|
55
56
|
def scan(input)
|
56
57
|
@src = StringScanner.new(input)
|
57
58
|
@brace_level = 0
|
58
|
-
@
|
59
|
+
@last_and = 0
|
60
|
+
@stack = [[:ANDFL,'(^start)']]
|
59
61
|
@word = [:PWORD,'']
|
60
62
|
do_scan
|
61
63
|
end
|
@@ -67,9 +69,10 @@ module_eval(<<'...end names.y/module_eval...', 'names.y', 94)
|
|
67
69
|
case
|
68
70
|
when @src.scan(NameParser.patterns[:and])
|
69
71
|
push_word
|
70
|
-
@stack.
|
72
|
+
@last_and = @stack.length
|
73
|
+
@stack.push([:ANDFL,@src.matched])
|
71
74
|
|
72
|
-
when @src.
|
75
|
+
when @src.skip(NameParser.patterns[:space])
|
73
76
|
push_word
|
74
77
|
|
75
78
|
when @src.scan(NameParser.patterns[:comma])
|
@@ -84,7 +87,8 @@ module_eval(<<'...end names.y/module_eval...', 'names.y', 94)
|
|
84
87
|
is_uppercase
|
85
88
|
@word[1] << @src.matched
|
86
89
|
|
87
|
-
when @src.scan(NameParser.patterns[:
|
90
|
+
when @src.scan(NameParser.patterns[:other])
|
91
|
+
check_name_order
|
88
92
|
@word[1] << @src.matched
|
89
93
|
|
90
94
|
when @src.scan(NameParser.patterns[:lbrace])
|
@@ -94,8 +98,11 @@ module_eval(<<'...end names.y/module_eval...', 'names.y', 94)
|
|
94
98
|
when @src.scan(NameParser.patterns[:rbrace])
|
95
99
|
error_unbalanced
|
96
100
|
|
97
|
-
when @src.scan(NameParser.patterns[:
|
101
|
+
when @src.scan(NameParser.patterns[:escape])
|
98
102
|
@word[1] << @src.matched
|
103
|
+
|
104
|
+
else
|
105
|
+
error_invalid
|
99
106
|
end
|
100
107
|
end
|
101
108
|
|
@@ -118,6 +125,11 @@ module_eval(<<'...end names.y/module_eval...', 'names.y', 94)
|
|
118
125
|
@word[0] = :UWORD if @word[0] == :PWORD
|
119
126
|
end
|
120
127
|
|
128
|
+
def check_name_order
|
129
|
+
return if RUBY_VERSION < '1.9'
|
130
|
+
@stack[@last_and][0] = :ANDLF if @stack[@last_and][0] != :ANDLF && @src.matched =~ NameParser.patterns[:last_first]
|
131
|
+
end
|
132
|
+
|
121
133
|
def scan_literal
|
122
134
|
@brace_level = 1
|
123
135
|
|
@@ -146,95 +158,120 @@ module_eval(<<'...end names.y/module_eval...', 'names.y', 94)
|
|
146
158
|
BibTeX.log.warn("NameParser: unbalanced braces at position #{@src.pos}; brace level #{@brace_level}.")
|
147
159
|
end
|
148
160
|
|
161
|
+
def error_invalid
|
162
|
+
@stack.push [:ERROR,@src.getch]
|
163
|
+
BibTeX.log.warn("NameParser: invalid character at position #{@src.pos}; brace level #{@brace_level}.")
|
164
|
+
end
|
165
|
+
|
149
166
|
# -*- racc -*-
|
150
167
|
...end names.y/module_eval...
|
151
168
|
##### State transition tables begin ###
|
152
169
|
|
153
170
|
racc_action_table = [
|
154
|
-
-
|
155
|
-
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
171
|
+
-37, 6, -25, -38, 26, -39, -37, -37, 34, -38,
|
172
|
+
-38, -39, -39, -22, 42, -25, -37, 4, 5, -22,
|
173
|
+
-22, -24, -37, -37, -22, 42, -25, -24, -24, -24,
|
174
|
+
-22, -22, 16, 14, 17, -24, -24, -26, 24, 40,
|
175
|
+
25, -26, 24, 51, 25, 24, 23, 25, 16, 29,
|
176
|
+
17, 24, 32, 25, 24, 37, 25, 24, 32, 25,
|
177
|
+
-20, -20, -20, 24, 43, 25, 49, 48, 50, 24,
|
178
|
+
37, 25, 49, 48, 50, 49, 48, 50, 49, 48,
|
179
|
+
50, 49, 48, 50, 4, 5, 54, 56, 54 ]
|
160
180
|
|
161
181
|
racc_action_check = [
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
182
|
+
14, 1, 14, 16, 6, 17, 14, 14, 13, 16,
|
183
|
+
16, 17, 17, 23, 31, 23, 29, 0, 0, 23,
|
184
|
+
23, 40, 29, 29, 37, 36, 37, 40, 40, 51,
|
185
|
+
37, 37, 4, 4, 4, 51, 51, 21, 21, 21,
|
186
|
+
21, 38, 38, 38, 38, 5, 5, 5, 10, 10,
|
187
|
+
10, 11, 11, 11, 20, 20, 20, 28, 28, 28,
|
188
|
+
32, 32, 32, 33, 33, 33, 34, 34, 34, 39,
|
189
|
+
39, 39, 42, 42, 42, 47, 47, 47, 54, 54,
|
190
|
+
54, 56, 56, 56, 2, 2, 41, 45, 53 ]
|
168
191
|
|
169
192
|
racc_action_pointer = [
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
nil, nil
|
193
|
+
11, 1, 78, nil, 29, 42, 4, nil, nil, nil,
|
194
|
+
45, 48, nil, 6, 0, nil, 3, 5, nil, nil,
|
195
|
+
51, 35, nil, 13, nil, nil, nil, nil, 54, 16,
|
196
|
+
nil, 12, 57, 60, 63, nil, 23, 24, 39, 66,
|
197
|
+
21, 84, 69, nil, nil, 85, nil, 72, nil, nil,
|
198
|
+
nil, 29, nil, 86, 75, nil, 78, nil, nil, nil ]
|
175
199
|
|
176
200
|
racc_action_default = [
|
177
|
-
-1, -
|
178
|
-
-
|
179
|
-
-
|
180
|
-
-
|
181
|
-
-
|
201
|
+
-1, -40, -2, -3, -40, -40, -40, -4, -5, -7,
|
202
|
+
-26, -40, -11, -40, -19, -29, -31, -32, -6, -12,
|
203
|
+
-40, -23, -15, -19, -31, -32, 60, -8, -40, -19,
|
204
|
+
-30, -10, -25, -26, -35, -13, -40, -20, -23, -40,
|
205
|
+
-19, -9, -35, -21, -16, -27, -33, -36, -37, -38,
|
206
|
+
-39, -21, -14, -40, -35, -17, -35, -34, -18, -28 ]
|
182
207
|
|
183
208
|
racc_goto_table = [
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
nil, nil,
|
209
|
+
9, 10, 21, 19, 31, 30, 27, 44, 11, 20,
|
210
|
+
3, 1, 7, 36, 28, 55, 30, 38, 35, 12,
|
211
|
+
22, 41, 2, 8, 18, 39, 59, 58, 30, nil,
|
212
|
+
nil, nil, 53, 30, nil, nil, 38, 52, nil, nil,
|
213
|
+
nil, nil, nil, 57 ]
|
188
214
|
|
189
215
|
racc_goto_check = [
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
nil, nil,
|
216
|
+
6, 7, 7, 11, 9, 14, 6, 12, 8, 8,
|
217
|
+
3, 1, 3, 9, 8, 12, 14, 7, 11, 10,
|
218
|
+
10, 9, 2, 4, 5, 8, 13, 12, 14, nil,
|
219
|
+
nil, nil, 9, 14, nil, nil, 7, 11, nil, nil,
|
220
|
+
nil, nil, nil, 6 ]
|
194
221
|
|
195
222
|
racc_goto_pointer = [
|
196
|
-
nil, 11,
|
197
|
-
-
|
223
|
+
nil, 11, 22, 10, 19, 19, -4, -3, 4, -7,
|
224
|
+
15, -2, -27, -30, -5, nil ]
|
198
225
|
|
199
226
|
racc_goto_default = [
|
200
|
-
nil, nil, nil, nil,
|
201
|
-
|
227
|
+
nil, nil, nil, nil, nil, nil, 46, 33, nil, 13,
|
228
|
+
nil, nil, nil, 45, 15, 47 ]
|
202
229
|
|
203
230
|
racc_reduce_table = [
|
204
231
|
0, 0, :racc_error,
|
205
|
-
0,
|
206
|
-
1,
|
207
|
-
1,
|
208
|
-
|
209
|
-
|
210
|
-
2,
|
211
|
-
|
212
|
-
2,
|
213
|
-
3,
|
214
|
-
|
215
|
-
|
216
|
-
1, 14, :
|
232
|
+
0, 10, :_reduce_1,
|
233
|
+
1, 10, :_reduce_none,
|
234
|
+
1, 11, :_reduce_3,
|
235
|
+
2, 11, :_reduce_4,
|
236
|
+
2, 12, :_reduce_5,
|
237
|
+
2, 12, :_reduce_6,
|
238
|
+
1, 13, :_reduce_7,
|
239
|
+
2, 13, :_reduce_8,
|
240
|
+
3, 13, :_reduce_9,
|
241
|
+
2, 13, :_reduce_10,
|
242
|
+
1, 13, :_reduce_none,
|
243
|
+
1, 14, :_reduce_12,
|
217
244
|
2, 14, :_reduce_13,
|
218
245
|
3, 14, :_reduce_14,
|
246
|
+
1, 14, :_reduce_none,
|
247
|
+
3, 19, :_reduce_16,
|
248
|
+
4, 19, :_reduce_17,
|
249
|
+
5, 19, :_reduce_18,
|
250
|
+
1, 17, :_reduce_none,
|
251
|
+
2, 17, :_reduce_20,
|
252
|
+
3, 17, :_reduce_21,
|
253
|
+
1, 20, :_reduce_22,
|
254
|
+
1, 20, :_reduce_23,
|
255
|
+
2, 20, :_reduce_24,
|
256
|
+
1, 18, :_reduce_none,
|
257
|
+
1, 18, :_reduce_26,
|
258
|
+
1, 21, :_reduce_27,
|
259
|
+
3, 21, :_reduce_28,
|
260
|
+
1, 16, :_reduce_29,
|
261
|
+
2, 16, :_reduce_30,
|
262
|
+
1, 23, :_reduce_none,
|
263
|
+
1, 23, :_reduce_none,
|
264
|
+
1, 24, :_reduce_none,
|
265
|
+
2, 24, :_reduce_34,
|
266
|
+
0, 22, :_reduce_none,
|
267
|
+
1, 22, :_reduce_none,
|
219
268
|
1, 15, :_reduce_none,
|
220
269
|
1, 15, :_reduce_none,
|
221
|
-
1,
|
222
|
-
3, 16, :_reduce_18,
|
223
|
-
1, 13, :_reduce_none,
|
224
|
-
2, 13, :_reduce_20,
|
225
|
-
1, 18, :_reduce_none,
|
226
|
-
1, 18, :_reduce_none,
|
227
|
-
1, 19, :_reduce_none,
|
228
|
-
2, 19, :_reduce_24,
|
229
|
-
0, 17, :_reduce_none,
|
230
|
-
1, 17, :_reduce_none,
|
231
|
-
1, 12, :_reduce_none,
|
232
|
-
1, 12, :_reduce_none,
|
233
|
-
1, 12, :_reduce_none ]
|
270
|
+
1, 15, :_reduce_none ]
|
234
271
|
|
235
|
-
racc_reduce_n =
|
272
|
+
racc_reduce_n = 40
|
236
273
|
|
237
|
-
racc_shift_n =
|
274
|
+
racc_shift_n = 60
|
238
275
|
|
239
276
|
racc_token_table = {
|
240
277
|
false => 0,
|
@@ -243,10 +280,11 @@ racc_token_table = {
|
|
243
280
|
:UWORD => 3,
|
244
281
|
:LWORD => 4,
|
245
282
|
:PWORD => 5,
|
246
|
-
:
|
247
|
-
:
|
283
|
+
:ANDFL => 6,
|
284
|
+
:ANDLF => 7,
|
285
|
+
:ERROR => 8 }
|
248
286
|
|
249
|
-
racc_nt_base =
|
287
|
+
racc_nt_base = 9
|
250
288
|
|
251
289
|
racc_use_result_var = true
|
252
290
|
|
@@ -273,16 +311,21 @@ Racc_token_to_s_table = [
|
|
273
311
|
"UWORD",
|
274
312
|
"LWORD",
|
275
313
|
"PWORD",
|
276
|
-
"
|
314
|
+
"ANDFL",
|
315
|
+
"ANDLF",
|
277
316
|
"ERROR",
|
278
317
|
"$start",
|
279
318
|
"result",
|
280
319
|
"names",
|
281
320
|
"name",
|
321
|
+
"flname",
|
322
|
+
"lfname",
|
282
323
|
"word",
|
283
324
|
"u_words",
|
284
325
|
"von",
|
285
326
|
"last",
|
327
|
+
"comma",
|
328
|
+
"lastfirst",
|
286
329
|
"first",
|
287
330
|
"opt_words",
|
288
331
|
"u_word",
|
@@ -296,7 +339,7 @@ Racc_debug_parser = false
|
|
296
339
|
|
297
340
|
module_eval(<<'.,.,', 'names.y', 31)
|
298
341
|
def _reduce_1(val, _values, result)
|
299
|
-
result = []
|
342
|
+
result = []
|
300
343
|
result
|
301
344
|
end
|
302
345
|
.,.,
|
@@ -305,139 +348,212 @@ module_eval(<<'.,.,', 'names.y', 31)
|
|
305
348
|
|
306
349
|
module_eval(<<'.,.,', 'names.y', 33)
|
307
350
|
def _reduce_3(val, _values, result)
|
308
|
-
result = [val[0]]
|
351
|
+
result = [val[0]]
|
309
352
|
result
|
310
353
|
end
|
311
354
|
.,.,
|
312
355
|
|
313
356
|
module_eval(<<'.,.,', 'names.y', 34)
|
314
357
|
def _reduce_4(val, _values, result)
|
315
|
-
result << val[
|
358
|
+
result << val[1]
|
316
359
|
result
|
317
360
|
end
|
318
361
|
.,.,
|
319
362
|
|
320
|
-
module_eval(<<'.,.,', 'names.y',
|
363
|
+
module_eval(<<'.,.,', 'names.y', 36)
|
321
364
|
def _reduce_5(val, _values, result)
|
322
|
-
|
323
|
-
|
365
|
+
result = Name.new(val[1])
|
324
366
|
result
|
325
367
|
end
|
326
368
|
.,.,
|
327
369
|
|
328
|
-
module_eval(<<'.,.,', 'names.y',
|
370
|
+
module_eval(<<'.,.,', 'names.y', 37)
|
329
371
|
def _reduce_6(val, _values, result)
|
330
|
-
|
331
|
-
|
372
|
+
result = Name.new(val[1])
|
332
373
|
result
|
333
374
|
end
|
334
375
|
.,.,
|
335
376
|
|
336
|
-
module_eval(<<'.,.,', 'names.y',
|
377
|
+
module_eval(<<'.,.,', 'names.y', 41)
|
337
378
|
def _reduce_7(val, _values, result)
|
338
|
-
|
339
|
-
|
379
|
+
result = { :last => val[0] }
|
380
|
+
|
340
381
|
result
|
341
382
|
end
|
342
383
|
.,.,
|
343
384
|
|
344
|
-
module_eval(<<'.,.,', 'names.y',
|
385
|
+
module_eval(<<'.,.,', 'names.y', 45)
|
345
386
|
def _reduce_8(val, _values, result)
|
346
|
-
|
347
|
-
|
387
|
+
result = { :first => val[0].join(' '), :last => val[1] }
|
388
|
+
|
348
389
|
result
|
349
390
|
end
|
350
391
|
.,.,
|
351
392
|
|
352
|
-
module_eval(<<'.,.,', 'names.y',
|
393
|
+
module_eval(<<'.,.,', 'names.y', 49)
|
353
394
|
def _reduce_9(val, _values, result)
|
354
|
-
|
355
|
-
|
395
|
+
result = { :first => val[0].join(' '), :von => val[1], :last => val[2] }
|
396
|
+
|
356
397
|
result
|
357
398
|
end
|
358
399
|
.,.,
|
359
400
|
|
360
|
-
module_eval(<<'.,.,', 'names.y',
|
401
|
+
module_eval(<<'.,.,', 'names.y', 53)
|
361
402
|
def _reduce_10(val, _values, result)
|
362
|
-
|
363
|
-
|
403
|
+
result = { :von => val[0], :last => val[1] }
|
404
|
+
|
364
405
|
result
|
365
406
|
end
|
366
407
|
.,.,
|
367
408
|
|
368
|
-
|
369
|
-
def _reduce_11(val, _values, result)
|
370
|
-
result = Name.new(:von => val[0,2].join(' '), :last => val[2], :jr => val[4][0], :first => val[4][1])
|
409
|
+
# reduce 11 omitted
|
371
410
|
|
411
|
+
module_eval(<<'.,.,', 'names.y', 59)
|
412
|
+
def _reduce_12(val, _values, result)
|
413
|
+
result = { :last => val[0][0], :first => val[0][1] }
|
414
|
+
|
372
415
|
result
|
373
416
|
end
|
374
417
|
.,.,
|
375
418
|
|
376
|
-
|
377
|
-
|
378
|
-
module_eval(<<'.,.,', 'names.y', 67)
|
419
|
+
module_eval(<<'.,.,', 'names.y', 63)
|
379
420
|
def _reduce_13(val, _values, result)
|
380
|
-
|
421
|
+
result = { :von => val[0], :last => val[1][0], :first => val[1][1] }
|
422
|
+
|
381
423
|
result
|
382
424
|
end
|
383
425
|
.,.,
|
384
426
|
|
385
|
-
module_eval(<<'.,.,', 'names.y',
|
427
|
+
module_eval(<<'.,.,', 'names.y', 67)
|
386
428
|
def _reduce_14(val, _values, result)
|
387
|
-
|
429
|
+
result = { :von => val[0..1].join(' '), :last => val[2][0], :first => val[2][1] }
|
430
|
+
|
388
431
|
result
|
389
432
|
end
|
390
433
|
.,.,
|
391
434
|
|
392
435
|
# reduce 15 omitted
|
393
436
|
|
394
|
-
|
437
|
+
module_eval(<<'.,.,', 'names.y', 73)
|
438
|
+
def _reduce_16(val, _values, result)
|
439
|
+
result = { :last => val[0], :jr => val[2][0], :first => val[2][1] }
|
440
|
+
|
441
|
+
result
|
442
|
+
end
|
443
|
+
.,.,
|
395
444
|
|
396
|
-
module_eval(<<'.,.,', 'names.y',
|
445
|
+
module_eval(<<'.,.,', 'names.y', 77)
|
397
446
|
def _reduce_17(val, _values, result)
|
398
|
-
|
447
|
+
result = { :von => val[0], :last => val[1], :jr => val[3][0], :first => val[3][1] }
|
448
|
+
|
399
449
|
result
|
400
450
|
end
|
401
451
|
.,.,
|
402
452
|
|
403
|
-
module_eval(<<'.,.,', 'names.y',
|
453
|
+
module_eval(<<'.,.,', 'names.y', 81)
|
404
454
|
def _reduce_18(val, _values, result)
|
405
|
-
|
455
|
+
result = { :von => val[0..1].join(' '), :last => val[2], :jr => val[4][0], :first => val[4][1] }
|
456
|
+
|
406
457
|
result
|
407
458
|
end
|
408
459
|
.,.,
|
409
460
|
|
410
461
|
# reduce 19 omitted
|
411
462
|
|
412
|
-
module_eval(<<'.,.,', 'names.y',
|
463
|
+
module_eval(<<'.,.,', 'names.y', 85)
|
413
464
|
def _reduce_20(val, _values, result)
|
414
|
-
result = val.join(' ')
|
465
|
+
result = val.join(' ')
|
415
466
|
result
|
416
467
|
end
|
417
468
|
.,.,
|
418
469
|
|
419
|
-
|
470
|
+
module_eval(<<'.,.,', 'names.y', 86)
|
471
|
+
def _reduce_21(val, _values, result)
|
472
|
+
result = val.join(' ')
|
473
|
+
result
|
474
|
+
end
|
475
|
+
.,.,
|
420
476
|
|
421
|
-
|
477
|
+
module_eval(<<'.,.,', 'names.y', 88)
|
478
|
+
def _reduce_22(val, _values, result)
|
479
|
+
result = [val[0], nil]
|
480
|
+
result
|
481
|
+
end
|
482
|
+
.,.,
|
422
483
|
|
423
|
-
|
484
|
+
module_eval(<<'.,.,', 'names.y', 89)
|
485
|
+
def _reduce_23(val, _values, result)
|
486
|
+
result = [val[0][0], val[0][1] ? val[0][1..-1].join(' ') : nil]
|
487
|
+
result
|
488
|
+
end
|
489
|
+
.,.,
|
424
490
|
|
425
|
-
module_eval(<<'.,.,', 'names.y',
|
491
|
+
module_eval(<<'.,.,', 'names.y', 90)
|
426
492
|
def _reduce_24(val, _values, result)
|
427
|
-
result = val.join(' ')
|
493
|
+
result = [val[0][0], (val[0][1..-1] << val[1]).join(' ')]
|
428
494
|
result
|
429
495
|
end
|
430
496
|
.,.,
|
431
497
|
|
432
498
|
# reduce 25 omitted
|
433
499
|
|
434
|
-
|
500
|
+
module_eval(<<'.,.,', 'names.y', 92)
|
501
|
+
def _reduce_26(val, _values, result)
|
502
|
+
result = val[0].join(' ')
|
503
|
+
result
|
504
|
+
end
|
505
|
+
.,.,
|
506
|
+
|
507
|
+
module_eval(<<'.,.,', 'names.y', 94)
|
508
|
+
def _reduce_27(val, _values, result)
|
509
|
+
result = [nil,val[0]]
|
510
|
+
result
|
511
|
+
end
|
512
|
+
.,.,
|
513
|
+
|
514
|
+
module_eval(<<'.,.,', 'names.y', 95)
|
515
|
+
def _reduce_28(val, _values, result)
|
516
|
+
result = [val[0],val[2]]
|
517
|
+
result
|
518
|
+
end
|
519
|
+
.,.,
|
520
|
+
|
521
|
+
module_eval(<<'.,.,', 'names.y', 97)
|
522
|
+
def _reduce_29(val, _values, result)
|
523
|
+
result = [val[0]]
|
524
|
+
result
|
525
|
+
end
|
526
|
+
.,.,
|
527
|
+
|
528
|
+
module_eval(<<'.,.,', 'names.y', 98)
|
529
|
+
def _reduce_30(val, _values, result)
|
530
|
+
result << val[1]
|
531
|
+
result
|
532
|
+
end
|
533
|
+
.,.,
|
534
|
+
|
535
|
+
# reduce 31 omitted
|
536
|
+
|
537
|
+
# reduce 32 omitted
|
538
|
+
|
539
|
+
# reduce 33 omitted
|
540
|
+
|
541
|
+
module_eval(<<'.,.,', 'names.y', 103)
|
542
|
+
def _reduce_34(val, _values, result)
|
543
|
+
result = val.join(' ')
|
544
|
+
result
|
545
|
+
end
|
546
|
+
.,.,
|
547
|
+
|
548
|
+
# reduce 35 omitted
|
549
|
+
|
550
|
+
# reduce 36 omitted
|
435
551
|
|
436
|
-
# reduce
|
552
|
+
# reduce 37 omitted
|
437
553
|
|
438
|
-
# reduce
|
554
|
+
# reduce 38 omitted
|
439
555
|
|
440
|
-
# reduce
|
556
|
+
# reduce 39 omitted
|
441
557
|
|
442
558
|
def _reduce_none(val, _values, result)
|
443
559
|
val[0]
|
data/lib/bibtex/names.y
CHANGED
@@ -23,7 +23,7 @@
|
|
23
23
|
|
24
24
|
class BibTeX::NameParser
|
25
25
|
|
26
|
-
token COMMA UWORD LWORD PWORD
|
26
|
+
token COMMA UWORD LWORD PWORD ANDFL ANDLF ERROR
|
27
27
|
|
28
28
|
expect 0
|
29
29
|
|
@@ -31,50 +31,72 @@ rule
|
|
31
31
|
|
32
32
|
result : { result = [] } | names
|
33
33
|
|
34
|
-
names : name
|
35
|
-
| names
|
36
|
-
|
37
|
-
name :
|
38
|
-
{
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
34
|
+
names : name { result = [val[0]] }
|
35
|
+
| names name { result << val[1] }
|
36
|
+
|
37
|
+
name : ANDFL flname { result = Name.new(val[1]) }
|
38
|
+
| ANDLF lfname { result = Name.new(val[1]) }
|
39
|
+
|
40
|
+
flname : word
|
41
|
+
{
|
42
|
+
result = { :last => val[0] }
|
43
|
+
}
|
44
|
+
| u_words word
|
45
|
+
{
|
46
|
+
result = { :first => val[0].join(' '), :last => val[1] }
|
47
|
+
}
|
48
|
+
| u_words von last
|
49
|
+
{
|
50
|
+
result = { :first => val[0].join(' '), :von => val[1], :last => val[2] }
|
51
|
+
}
|
52
|
+
| von last
|
53
|
+
{
|
54
|
+
result = { :von => val[0], :last => val[1] }
|
55
|
+
}
|
56
|
+
| comma
|
57
|
+
|
58
|
+
lfname : lastfirst
|
59
|
+
{
|
60
|
+
result = { :last => val[0][0], :first => val[0][1] }
|
61
|
+
}
|
62
|
+
| von lastfirst
|
63
|
+
{
|
64
|
+
result = { :von => val[0], :last => val[1][0], :first => val[1][1] }
|
65
|
+
}
|
66
|
+
| u_words von lastfirst
|
67
|
+
{
|
68
|
+
result = { :von => val[0..1].join(' '), :last => val[2][0], :first => val[2][1] }
|
69
|
+
}
|
70
|
+
| comma
|
71
|
+
|
72
|
+
comma : last COMMA first
|
73
|
+
{
|
74
|
+
result = { :last => val[0], :jr => val[2][0], :first => val[2][1] }
|
75
|
+
}
|
76
|
+
| von last COMMA first
|
77
|
+
{
|
78
|
+
result = { :von => val[0], :last => val[1], :jr => val[3][0], :first => val[3][1] }
|
79
|
+
}
|
80
|
+
| u_words von last COMMA first
|
81
|
+
{
|
82
|
+
result = { :von => val[0..1].join(' '), :last => val[2], :jr => val[4][0], :first => val[4][1] }
|
83
|
+
}
|
66
84
|
|
67
85
|
von : LWORD
|
68
86
|
| von LWORD { result = val.join(' ') }
|
69
87
|
| von u_words LWORD { result = val.join(' ') }
|
70
88
|
|
71
|
-
|
89
|
+
lastfirst : LWORD { result = [val[0], nil] }
|
90
|
+
| u_words { result = [val[0][0], val[0][1] ? val[0][1..-1].join(' ') : nil] }
|
91
|
+
| u_words LWORD { result = [val[0][0], (val[0][1..-1] << val[1]).join(' ')] }
|
92
|
+
|
93
|
+
last : LWORD | u_words { result = val[0].join(' ') }
|
72
94
|
|
73
95
|
first : opt_words { result = [nil,val[0]] }
|
74
96
|
| opt_words COMMA opt_words { result = [val[0],val[2]] }
|
75
97
|
|
76
|
-
u_words : u_word
|
77
|
-
| u_words u_word { result
|
98
|
+
u_words : u_word { result = [val[0]] }
|
99
|
+
| u_words u_word { result << val[1] }
|
78
100
|
|
79
101
|
u_word : UWORD | PWORD
|
80
102
|
|
@@ -96,13 +118,14 @@ require 'strscan'
|
|
96
118
|
:and => /,?\s+and\s+/io,
|
97
119
|
:space => /\s+/o,
|
98
120
|
:comma => /,/o,
|
99
|
-
:lower => /[[:lower:]][
|
100
|
-
:upper => /[[:upper:]][
|
101
|
-
:
|
121
|
+
:lower => /[[:lower:]][[:lower:][:upper:]]*/uo,
|
122
|
+
:upper => /[[:upper:]][[:lower:][:upper:].]*/uo,
|
123
|
+
:other => /[^\s,\{\}\\[:upper:][:lower:]]+/uo,
|
102
124
|
:lbrace => /\{/o,
|
103
125
|
:rbrace => /\}/o,
|
104
|
-
:
|
105
|
-
:
|
126
|
+
:braces => /[\{\}]/o,
|
127
|
+
:escape => /\\./o,
|
128
|
+
:last_first => /[\p{Han}\p{Hiragana}\p{Katakana}\p{Hangul}]/uo
|
106
129
|
}
|
107
130
|
|
108
131
|
class << self
|
@@ -134,7 +157,8 @@ require 'strscan'
|
|
134
157
|
def scan(input)
|
135
158
|
@src = StringScanner.new(input)
|
136
159
|
@brace_level = 0
|
137
|
-
@
|
160
|
+
@last_and = 0
|
161
|
+
@stack = [[:ANDFL,'(^start)']]
|
138
162
|
@word = [:PWORD,'']
|
139
163
|
do_scan
|
140
164
|
end
|
@@ -146,9 +170,10 @@ require 'strscan'
|
|
146
170
|
case
|
147
171
|
when @src.scan(NameParser.patterns[:and])
|
148
172
|
push_word
|
149
|
-
@stack.
|
173
|
+
@last_and = @stack.length
|
174
|
+
@stack.push([:ANDFL,@src.matched])
|
150
175
|
|
151
|
-
when @src.
|
176
|
+
when @src.skip(NameParser.patterns[:space])
|
152
177
|
push_word
|
153
178
|
|
154
179
|
when @src.scan(NameParser.patterns[:comma])
|
@@ -163,7 +188,8 @@ require 'strscan'
|
|
163
188
|
is_uppercase
|
164
189
|
@word[1] << @src.matched
|
165
190
|
|
166
|
-
when @src.scan(NameParser.patterns[:
|
191
|
+
when @src.scan(NameParser.patterns[:other])
|
192
|
+
check_name_order
|
167
193
|
@word[1] << @src.matched
|
168
194
|
|
169
195
|
when @src.scan(NameParser.patterns[:lbrace])
|
@@ -173,8 +199,11 @@ require 'strscan'
|
|
173
199
|
when @src.scan(NameParser.patterns[:rbrace])
|
174
200
|
error_unbalanced
|
175
201
|
|
176
|
-
when @src.scan(NameParser.patterns[:
|
202
|
+
when @src.scan(NameParser.patterns[:escape])
|
177
203
|
@word[1] << @src.matched
|
204
|
+
|
205
|
+
else
|
206
|
+
error_invalid
|
178
207
|
end
|
179
208
|
end
|
180
209
|
|
@@ -197,6 +226,11 @@ require 'strscan'
|
|
197
226
|
@word[0] = :UWORD if @word[0] == :PWORD
|
198
227
|
end
|
199
228
|
|
229
|
+
def check_name_order
|
230
|
+
return if RUBY_VERSION < '1.9'
|
231
|
+
@stack[@last_and][0] = :ANDLF if @stack[@last_and][0] != :ANDLF && @src.matched =~ NameParser.patterns[:last_first]
|
232
|
+
end
|
233
|
+
|
200
234
|
def scan_literal
|
201
235
|
@brace_level = 1
|
202
236
|
|
@@ -225,4 +259,9 @@ require 'strscan'
|
|
225
259
|
BibTeX.log.warn("NameParser: unbalanced braces at position #{@src.pos}; brace level #{@brace_level}.")
|
226
260
|
end
|
227
261
|
|
262
|
+
def error_invalid
|
263
|
+
@stack.push [:ERROR,@src.getch]
|
264
|
+
BibTeX.log.warn("NameParser: invalid character at position #{@src.pos}; brace level #{@brace_level}.")
|
265
|
+
end
|
266
|
+
|
228
267
|
# -*- racc -*-
|
data/lib/bibtex/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bibtex-ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.0
|
4
|
+
version: 4.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sylvester Keil
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-12-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: latex-decode
|