bibtex-ruby 1.3.11 → 1.3.12
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of bibtex-ruby might be problematic. Click here for more details.
- data/Gemfile +3 -2
- data/Gemfile.lock +9 -1
- data/History.txt +4 -0
- data/Manifest +2 -2
- data/Rakefile +4 -2
- data/lib/bibtex.rb +6 -5
- data/lib/bibtex/bibtex.y +1 -1
- data/lib/bibtex/entry.rb +44 -19
- data/lib/bibtex/entry.rbc +198 -214
- data/lib/bibtex/lexer.rb +0 -3
- data/lib/bibtex/name_parser.rb +70 -128
- data/lib/bibtex/names.y +60 -44
- data/lib/bibtex/parser.rb +1 -1
- data/lib/bibtex/version.rb +1 -1
- data/lib/bibtex/version.rbc +1 -1
- data/profile.png +0 -0
- data/test/benchmark.rb +8 -8
- data/test/bibtex/test_entry.rb +7 -0
- data/test/profile.dot +191 -0
- data/test/profile.rb +2 -5
- metadata +23 -29
- data/lib/bibtex/name_parser.output +0 -486
- data/lib/bibtex/parser.output +0 -591
data/lib/bibtex/lexer.rb
CHANGED
@@ -17,7 +17,6 @@
|
|
17
17
|
#++
|
18
18
|
|
19
19
|
require 'strscan'
|
20
|
-
require 'forwardable'
|
21
20
|
|
22
21
|
module BibTeX
|
23
22
|
|
@@ -26,13 +25,11 @@ module BibTeX
|
|
26
25
|
#
|
27
26
|
class Lexer
|
28
27
|
extend Forwardable
|
29
|
-
include Enumerable
|
30
28
|
|
31
29
|
attr_reader :options, :stack, :mode, :scanner
|
32
30
|
attr_writer :mode
|
33
31
|
|
34
32
|
def_delegator :@scanner, :string, :data
|
35
|
-
def_delegators :@stack, :each
|
36
33
|
|
37
34
|
DEFAULTS = { :include => [:errors], :strict => true }.freeze
|
38
35
|
|
data/lib/bibtex/name_parser.rb
CHANGED
@@ -11,7 +11,7 @@ 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', 94)
|
15
15
|
|
16
16
|
def initialize(options = {})
|
17
17
|
self.options.merge!(options)
|
@@ -104,18 +104,18 @@ module_eval(<<'...end names.y/module_eval...', 'names.y', 78)
|
|
104
104
|
def scan_literal
|
105
105
|
@brace_level = 1
|
106
106
|
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
107
|
+
while @brace_level > 0
|
108
|
+
@word[1] << @src.scan_until(/[\{\}]/o).to_s
|
109
|
+
|
110
|
+
case @src.matched
|
111
|
+
when '{'
|
112
|
+
@brace_level += 1
|
113
|
+
when '}'
|
114
|
+
@brace_level -= 1
|
115
|
+
else
|
116
|
+
@brace_level = 0
|
117
|
+
error_unbalanced
|
118
|
+
end
|
119
119
|
end
|
120
120
|
end
|
121
121
|
|
@@ -186,7 +186,7 @@ racc_goto_default = [
|
|
186
186
|
racc_reduce_table = [
|
187
187
|
0, 0, :racc_error,
|
188
188
|
0, 9, :_reduce_1,
|
189
|
-
1, 9, :
|
189
|
+
1, 9, :_reduce_none,
|
190
190
|
1, 10, :_reduce_3,
|
191
191
|
3, 10, :_reduce_4,
|
192
192
|
1, 11, :_reduce_5,
|
@@ -196,24 +196,24 @@ racc_reduce_table = [
|
|
196
196
|
3, 11, :_reduce_9,
|
197
197
|
4, 11, :_reduce_10,
|
198
198
|
5, 11, :_reduce_11,
|
199
|
-
1, 14, :
|
199
|
+
1, 14, :_reduce_none,
|
200
200
|
2, 14, :_reduce_13,
|
201
201
|
3, 14, :_reduce_14,
|
202
|
-
1, 15, :
|
203
|
-
1, 15, :
|
202
|
+
1, 15, :_reduce_none,
|
203
|
+
1, 15, :_reduce_none,
|
204
204
|
1, 16, :_reduce_17,
|
205
205
|
3, 16, :_reduce_18,
|
206
|
-
1, 13, :
|
206
|
+
1, 13, :_reduce_none,
|
207
207
|
2, 13, :_reduce_20,
|
208
|
-
1, 18, :
|
209
|
-
1, 18, :
|
210
|
-
1, 19, :
|
208
|
+
1, 18, :_reduce_none,
|
209
|
+
1, 18, :_reduce_none,
|
210
|
+
1, 19, :_reduce_none,
|
211
211
|
2, 19, :_reduce_24,
|
212
|
-
0, 17, :
|
213
|
-
1, 17, :
|
214
|
-
1, 12, :
|
215
|
-
1, 12, :
|
216
|
-
1, 12, :
|
212
|
+
0, 17, :_reduce_none,
|
213
|
+
1, 17, :_reduce_none,
|
214
|
+
1, 12, :_reduce_none,
|
215
|
+
1, 12, :_reduce_none,
|
216
|
+
1, 12, :_reduce_none ]
|
217
217
|
|
218
218
|
racc_reduce_n = 30
|
219
219
|
|
@@ -284,201 +284,143 @@ module_eval(<<'.,.,', 'names.y', 31)
|
|
284
284
|
end
|
285
285
|
.,.,
|
286
286
|
|
287
|
-
|
288
|
-
def _reduce_2(val, _values, result)
|
289
|
-
result = val[0]
|
290
|
-
result
|
291
|
-
end
|
292
|
-
.,.,
|
287
|
+
# reduce 2 omitted
|
293
288
|
|
294
|
-
module_eval(<<'.,.,', 'names.y',
|
289
|
+
module_eval(<<'.,.,', 'names.y', 33)
|
295
290
|
def _reduce_3(val, _values, result)
|
296
291
|
result = [val[0]]
|
297
292
|
result
|
298
293
|
end
|
299
294
|
.,.,
|
300
295
|
|
301
|
-
module_eval(<<'.,.,', 'names.y',
|
296
|
+
module_eval(<<'.,.,', 'names.y', 34)
|
302
297
|
def _reduce_4(val, _values, result)
|
303
298
|
result << val[2]
|
304
299
|
result
|
305
300
|
end
|
306
301
|
.,.,
|
307
302
|
|
308
|
-
module_eval(<<'.,.,', 'names.y',
|
303
|
+
module_eval(<<'.,.,', 'names.y', 38)
|
309
304
|
def _reduce_5(val, _values, result)
|
310
|
-
|
305
|
+
result = Name.new(:last => val[0])
|
306
|
+
|
311
307
|
result
|
312
308
|
end
|
313
309
|
.,.,
|
314
310
|
|
315
|
-
module_eval(<<'.,.,', 'names.y',
|
311
|
+
module_eval(<<'.,.,', 'names.y', 42)
|
316
312
|
def _reduce_6(val, _values, result)
|
317
|
-
|
313
|
+
result = Name.new(:first => val[0], :last => val[1])
|
314
|
+
|
318
315
|
result
|
319
316
|
end
|
320
317
|
.,.,
|
321
318
|
|
322
|
-
module_eval(<<'.,.,', 'names.y',
|
319
|
+
module_eval(<<'.,.,', 'names.y', 46)
|
323
320
|
def _reduce_7(val, _values, result)
|
324
|
-
|
321
|
+
result = Name.new(:first => val[0], :von => val[1], :last => val[2])
|
322
|
+
|
325
323
|
result
|
326
324
|
end
|
327
325
|
.,.,
|
328
326
|
|
329
|
-
module_eval(<<'.,.,', 'names.y',
|
327
|
+
module_eval(<<'.,.,', 'names.y', 50)
|
330
328
|
def _reduce_8(val, _values, result)
|
331
|
-
|
329
|
+
result = Name.new(:von => val[0], :last => val[1])
|
330
|
+
|
332
331
|
result
|
333
332
|
end
|
334
333
|
.,.,
|
335
334
|
|
336
|
-
module_eval(<<'.,.,', 'names.y',
|
335
|
+
module_eval(<<'.,.,', 'names.y', 54)
|
337
336
|
def _reduce_9(val, _values, result)
|
338
|
-
|
337
|
+
result = Name.new(:last => val[0], :jr => val[2][0], :first => val[2][1])
|
338
|
+
|
339
339
|
result
|
340
340
|
end
|
341
341
|
.,.,
|
342
342
|
|
343
|
-
module_eval(<<'.,.,', 'names.y',
|
343
|
+
module_eval(<<'.,.,', 'names.y', 58)
|
344
344
|
def _reduce_10(val, _values, result)
|
345
|
-
|
345
|
+
result = Name.new(:von => val[0], :last => val[1], :jr => val[3][0], :first => val[3][1])
|
346
|
+
|
346
347
|
result
|
347
348
|
end
|
348
349
|
.,.,
|
349
350
|
|
350
|
-
module_eval(<<'.,.,', 'names.y',
|
351
|
+
module_eval(<<'.,.,', 'names.y', 62)
|
351
352
|
def _reduce_11(val, _values, result)
|
352
|
-
|
353
|
+
result = Name.new(:von => val[0,2].join(' '), :last => val[2], :jr => val[4][0], :first => val[4][1])
|
354
|
+
|
353
355
|
result
|
354
356
|
end
|
355
357
|
.,.,
|
356
358
|
|
357
|
-
|
358
|
-
def _reduce_12(val, _values, result)
|
359
|
-
result = val[0]
|
360
|
-
result
|
361
|
-
end
|
362
|
-
.,.,
|
359
|
+
# reduce 12 omitted
|
363
360
|
|
364
|
-
module_eval(<<'.,.,', 'names.y',
|
361
|
+
module_eval(<<'.,.,', 'names.y', 67)
|
365
362
|
def _reduce_13(val, _values, result)
|
366
363
|
result = val.join(' ')
|
367
364
|
result
|
368
365
|
end
|
369
366
|
.,.,
|
370
367
|
|
371
|
-
module_eval(<<'.,.,', 'names.y',
|
368
|
+
module_eval(<<'.,.,', 'names.y', 68)
|
372
369
|
def _reduce_14(val, _values, result)
|
373
370
|
result = val.join(' ')
|
374
371
|
result
|
375
372
|
end
|
376
373
|
.,.,
|
377
374
|
|
378
|
-
|
379
|
-
def _reduce_15(val, _values, result)
|
380
|
-
result = val[0]
|
381
|
-
result
|
382
|
-
end
|
383
|
-
.,.,
|
375
|
+
# reduce 15 omitted
|
384
376
|
|
385
|
-
|
386
|
-
def _reduce_16(val, _values, result)
|
387
|
-
result = val[0]
|
388
|
-
result
|
389
|
-
end
|
390
|
-
.,.,
|
377
|
+
# reduce 16 omitted
|
391
378
|
|
392
|
-
module_eval(<<'.,.,', 'names.y',
|
379
|
+
module_eval(<<'.,.,', 'names.y', 72)
|
393
380
|
def _reduce_17(val, _values, result)
|
394
381
|
result = [nil,val[0]]
|
395
382
|
result
|
396
383
|
end
|
397
384
|
.,.,
|
398
385
|
|
399
|
-
module_eval(<<'.,.,', 'names.y',
|
386
|
+
module_eval(<<'.,.,', 'names.y', 73)
|
400
387
|
def _reduce_18(val, _values, result)
|
401
388
|
result = [val[0],val[2]]
|
402
389
|
result
|
403
390
|
end
|
404
391
|
.,.,
|
405
392
|
|
406
|
-
|
407
|
-
def _reduce_19(val, _values, result)
|
408
|
-
result = val[0]
|
409
|
-
result
|
410
|
-
end
|
411
|
-
.,.,
|
393
|
+
# reduce 19 omitted
|
412
394
|
|
413
|
-
module_eval(<<'.,.,', 'names.y',
|
395
|
+
module_eval(<<'.,.,', 'names.y', 76)
|
414
396
|
def _reduce_20(val, _values, result)
|
415
|
-
result = val
|
397
|
+
result = val.join(' ')
|
416
398
|
result
|
417
399
|
end
|
418
400
|
.,.,
|
419
401
|
|
420
|
-
|
421
|
-
def _reduce_21(val, _values, result)
|
422
|
-
result = val[0]
|
423
|
-
result
|
424
|
-
end
|
425
|
-
.,.,
|
402
|
+
# reduce 21 omitted
|
426
403
|
|
427
|
-
|
428
|
-
def _reduce_22(val, _values, result)
|
429
|
-
result = val[0]
|
430
|
-
result
|
431
|
-
end
|
432
|
-
.,.,
|
404
|
+
# reduce 22 omitted
|
433
405
|
|
434
|
-
|
435
|
-
def _reduce_23(val, _values, result)
|
436
|
-
result = val[0]
|
437
|
-
result
|
438
|
-
end
|
439
|
-
.,.,
|
406
|
+
# reduce 23 omitted
|
440
407
|
|
441
|
-
module_eval(<<'.,.,', 'names.y',
|
408
|
+
module_eval(<<'.,.,', 'names.y', 81)
|
442
409
|
def _reduce_24(val, _values, result)
|
443
|
-
result = val
|
410
|
+
result = val.join(' ')
|
444
411
|
result
|
445
412
|
end
|
446
413
|
.,.,
|
447
414
|
|
448
|
-
|
449
|
-
def _reduce_25(val, _values, result)
|
450
|
-
result = nil
|
451
|
-
result
|
452
|
-
end
|
453
|
-
.,.,
|
415
|
+
# reduce 25 omitted
|
454
416
|
|
455
|
-
|
456
|
-
def _reduce_26(val, _values, result)
|
457
|
-
result = val[0]
|
458
|
-
result
|
459
|
-
end
|
460
|
-
.,.,
|
417
|
+
# reduce 26 omitted
|
461
418
|
|
462
|
-
|
463
|
-
def _reduce_27(val, _values, result)
|
464
|
-
result = val[0]
|
465
|
-
result
|
466
|
-
end
|
467
|
-
.,.,
|
419
|
+
# reduce 27 omitted
|
468
420
|
|
469
|
-
|
470
|
-
def _reduce_28(val, _values, result)
|
471
|
-
result = val[0]
|
472
|
-
result
|
473
|
-
end
|
474
|
-
.,.,
|
421
|
+
# reduce 28 omitted
|
475
422
|
|
476
|
-
|
477
|
-
def _reduce_29(val, _values, result)
|
478
|
-
result = val[0]
|
479
|
-
result
|
480
|
-
end
|
481
|
-
.,.,
|
423
|
+
# reduce 29 omitted
|
482
424
|
|
483
425
|
def _reduce_none(val, _values, result)
|
484
426
|
val[0]
|
data/lib/bibtex/names.y
CHANGED
@@ -16,7 +16,7 @@
|
|
16
16
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
17
17
|
#++
|
18
18
|
#
|
19
|
-
# A BibTeX grammar for the parser generator +racc+
|
19
|
+
# A BibTeX Names grammar for the parser generator +racc+
|
20
20
|
#
|
21
21
|
|
22
22
|
# -*- racc -*-
|
@@ -29,45 +29,61 @@ expect 0
|
|
29
29
|
|
30
30
|
rule
|
31
31
|
|
32
|
-
result :
|
33
|
-
| names { result = val[0] }
|
32
|
+
result : { result = [] } | names
|
34
33
|
|
35
|
-
names : name
|
36
|
-
| names AND name
|
34
|
+
names : name { result = [val[0]] }
|
35
|
+
| names AND name { result << val[2] }
|
37
36
|
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
37
|
+
name : word
|
38
|
+
{
|
39
|
+
result = Name.new(:last => val[0])
|
40
|
+
}
|
41
|
+
| u_words word
|
42
|
+
{
|
43
|
+
result = Name.new(:first => val[0], :last => val[1])
|
44
|
+
}
|
45
|
+
| u_words von last
|
46
|
+
{
|
47
|
+
result = Name.new(:first => val[0], :von => val[1], :last => val[2])
|
48
|
+
}
|
49
|
+
| von last
|
50
|
+
{
|
51
|
+
result = Name.new(:von => val[0], :last => val[1])
|
52
|
+
}
|
53
|
+
| last COMMA first
|
54
|
+
{
|
55
|
+
result = Name.new(:last => val[0], :jr => val[2][0], :first => val[2][1])
|
56
|
+
}
|
57
|
+
| von last COMMA first
|
58
|
+
{
|
59
|
+
result = Name.new(:von => val[0], :last => val[1], :jr => val[3][0], :first => val[3][1])
|
60
|
+
}
|
61
|
+
| u_words von last COMMA first
|
62
|
+
{
|
63
|
+
result = Name.new(:von => val[0,2].join(' '), :last => val[2], :jr => val[4][0], :first => val[4][1])
|
64
|
+
}
|
65
|
+
;
|
66
|
+
|
67
|
+
von : LWORD
|
68
|
+
| von LWORD { result = val.join(' ') }
|
69
|
+
| von u_words LWORD { result = val.join(' ') }
|
70
|
+
|
71
|
+
last : LWORD | u_words
|
52
72
|
|
53
|
-
first : opt_words
|
54
|
-
| opt_words COMMA opt_words
|
73
|
+
first : opt_words { result = [nil,val[0]] }
|
74
|
+
| opt_words COMMA opt_words { result = [val[0],val[2]] }
|
55
75
|
|
56
|
-
u_words : u_word
|
57
|
-
| u_words u_word
|
76
|
+
u_words : u_word
|
77
|
+
| u_words u_word { result = val.join(' ') }
|
58
78
|
|
59
|
-
u_word : UWORD
|
60
|
-
| PWORD { result = val[0] }
|
79
|
+
u_word : UWORD | PWORD
|
61
80
|
|
62
|
-
words : word
|
63
|
-
| words word
|
81
|
+
words : word
|
82
|
+
| words word { result = val.join(' ') }
|
64
83
|
|
65
|
-
opt_words :
|
66
|
-
| words { result = val[0] }
|
84
|
+
opt_words : /* empty */ | words
|
67
85
|
|
68
|
-
word : LWORD
|
69
|
-
| UWORD { result = val[0] }
|
70
|
-
| PWORD { result = val[0] }
|
86
|
+
word : LWORD | UWORD | PWORD
|
71
87
|
|
72
88
|
end
|
73
89
|
|
@@ -167,18 +183,18 @@ require 'strscan'
|
|
167
183
|
def scan_literal
|
168
184
|
@brace_level = 1
|
169
185
|
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
186
|
+
while @brace_level > 0
|
187
|
+
@word[1] << @src.scan_until(/[\{\}]/o).to_s
|
188
|
+
|
189
|
+
case @src.matched
|
190
|
+
when '{'
|
191
|
+
@brace_level += 1
|
192
|
+
when '}'
|
193
|
+
@brace_level -= 1
|
194
|
+
else
|
195
|
+
@brace_level = 0
|
196
|
+
error_unbalanced
|
197
|
+
end
|
182
198
|
end
|
183
199
|
end
|
184
200
|
|