bibtex-ruby 3.1.2 → 3.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of bibtex-ruby might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/History.txt +5 -0
- data/Rakefile +7 -0
- data/lib/bibtex/bibliography/rdf_converter.rb +1 -1
- data/lib/bibtex/compatibility.rb +4 -17
- data/lib/bibtex/entry.rb +23 -24
- data/lib/bibtex/entry/bibtexml_converter.rb +1 -1
- data/lib/bibtex/entry/citeproc_converter.rb +1 -1
- data/lib/bibtex/entry/rdf_converter.rb +3 -1
- data/lib/bibtex/name_parser.rb +23 -23
- data/lib/bibtex/names.y +30 -30
- data/lib/bibtex/parser.rb +1 -1
- data/lib/bibtex/value.rb +6 -2
- data/lib/bibtex/version.rb +1 -1
- 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: 776c0bde07264d1b4f928d73c70575ccda925aeb
|
4
|
+
data.tar.gz: 87529a9bf231b57e3cbd6f63c1f96de3ad8bc1f7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f0cdb11eba57bd1ddf8509a9f92c2e4bbdaa448ad0f8164b54990e70951d84693a233a61a2e200c9dcc8d4eb8f42b48e2efa52789fcd55ce75aa2635e8bf9eab
|
7
|
+
data.tar.gz: 49f8e36b32eb635b1c7a5367942378b802b7ce66aa004b2c69a491285afcec9fd9e6aa4d74afcc39cb9d938ee3659fd90450d327ab982b12b34427930bdc3bd6
|
data/History.txt
CHANGED
data/Rakefile
CHANGED
@@ -71,6 +71,13 @@ task :console, [:script] do |t,args|
|
|
71
71
|
IRB.start
|
72
72
|
end
|
73
73
|
|
74
|
+
task :check_warnings do
|
75
|
+
$VERBOSE = true
|
76
|
+
require 'bibtex'
|
77
|
+
|
78
|
+
puts BibTeX::Version::STRING
|
79
|
+
end
|
80
|
+
|
74
81
|
|
75
82
|
desc 'Runs the benchmarks (and plots the results)'
|
76
83
|
task :benchmark => ['racc'] do
|
data/lib/bibtex/compatibility.rb
CHANGED
@@ -1,24 +1,9 @@
|
|
1
1
|
# coding: utf-8
|
2
2
|
|
3
|
-
unless Symbol.include?(Comparable)
|
4
|
-
class Symbol
|
5
|
-
include Comparable
|
6
|
-
def <=>(other)
|
7
|
-
return nil unless other.is_a?(String) || other.is_a?(Symbol)
|
8
|
-
to_s <=> other.to_s
|
9
|
-
end
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
13
|
-
if RUBY_VERSION < '1.9'
|
14
|
-
$KCODE = 'u'
|
15
|
-
require 'jcode'
|
16
|
-
|
17
|
-
BibTeX::NameParser.patterns[:upper] = /[[:upper:]ÄÖÜ][^\t\r\n\s\{\}\d\\,]*/o
|
18
|
-
end
|
19
|
-
|
20
3
|
module BibTeX
|
21
4
|
begin
|
5
|
+
original_verbosity, $VERBOSE = $VERBOSE, nil
|
6
|
+
|
22
7
|
require 'iconv'
|
23
8
|
|
24
9
|
@iconv = Iconv.new('ascii//translit//ignore', 'utf-8')
|
@@ -34,5 +19,7 @@ module BibTeX
|
|
34
19
|
def self.transliterate(str)
|
35
20
|
str.gsub(/[äöüÄÖÜß]/, @iconv_replacements)
|
36
21
|
end
|
22
|
+
ensure
|
23
|
+
$VERBOSE = original_verbosity
|
37
24
|
end
|
38
25
|
end
|
data/lib/bibtex/entry.rb
CHANGED
@@ -109,24 +109,33 @@ module BibTeX
|
|
109
109
|
self
|
110
110
|
end
|
111
111
|
|
112
|
-
# Generate
|
113
|
-
|
112
|
+
# Generate accessors for required fields (#52)
|
114
113
|
REQUIRED_FIELDS.values.flatten.uniq.each do |name|
|
115
|
-
|
116
114
|
define_method(name) do
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
parent.provide(name)
|
122
|
-
else
|
123
|
-
nil
|
124
|
-
end
|
125
|
-
end
|
115
|
+
get name
|
116
|
+
end unless method_defined? name
|
117
|
+
|
118
|
+
writer = "#{name}="
|
126
119
|
|
127
|
-
define_method(
|
120
|
+
define_method(writer) do |value|
|
128
121
|
add name, value
|
129
|
-
end
|
122
|
+
end unless method_defined? writer
|
123
|
+
end
|
124
|
+
|
125
|
+
# Generate author, editor and translator accessors
|
126
|
+
NAME_FIELDS.each do |contributor|
|
127
|
+
define_method(contributor) do
|
128
|
+
get contributor
|
129
|
+
end unless method_defined? contributor
|
130
|
+
|
131
|
+
writer = "#{contributor}="
|
132
|
+
|
133
|
+
define_method(writer) do |value|
|
134
|
+
add contributor, value
|
135
|
+
end unless method_defined? writer
|
136
|
+
|
137
|
+
alias_method "#{contributor}s", contributor
|
138
|
+
alias_method "#{contributor}s=", writer
|
130
139
|
end
|
131
140
|
|
132
141
|
# call-seq:
|
@@ -336,16 +345,6 @@ module BibTeX
|
|
336
345
|
add(name.to_sym, value)
|
337
346
|
end
|
338
347
|
|
339
|
-
# Author, Editor and Translator readers
|
340
|
-
NAME_FIELDS.each do |contributor|
|
341
|
-
define_method(contributor) do
|
342
|
-
get(contributor)
|
343
|
-
end
|
344
|
-
|
345
|
-
alias_method "#{contributor}s", contributor
|
346
|
-
end
|
347
|
-
|
348
|
-
|
349
348
|
# call-seq:
|
350
349
|
# add(:author, "Edgar A. Poe")
|
351
350
|
# add(:author, "Edgar A. Poe", :title, "The Raven")
|
@@ -512,10 +512,12 @@ class BibTeX::Entry::RDFConverter
|
|
512
512
|
graph << [entry, RDF::DC.issued, date]
|
513
513
|
end
|
514
514
|
|
515
|
-
|
515
|
+
protected
|
516
516
|
|
517
517
|
attr_reader :bibtex, :graph
|
518
518
|
|
519
|
+
private
|
520
|
+
|
519
521
|
def bibo
|
520
522
|
@bibo ||= RDF::Vocabulary.new('http://purl.org/ontology/bibo/')
|
521
523
|
end
|
data/lib/bibtex/name_parser.rb
CHANGED
@@ -12,24 +12,24 @@ module BibTeX
|
|
12
12
|
class NameParser < Racc::Parser
|
13
13
|
|
14
14
|
module_eval(<<'...end names.y/module_eval...', 'names.y', 94)
|
15
|
-
|
15
|
+
|
16
16
|
@patterns = {
|
17
17
|
:and => /,?\s+and\s+/io,
|
18
|
-
:space =>
|
18
|
+
:space => /\s+/o,
|
19
19
|
:comma => /,/o,
|
20
|
-
:lower => /[[:lower:]][^\
|
21
|
-
:upper => /[[:upper:]][^\
|
20
|
+
:lower => /[[:lower:]][^\s\{\}\d\\,]*/o,
|
21
|
+
:upper => /[[:upper:]][^\s\{\}\d\\,]*/uo,
|
22
22
|
:symbols => /(\d|\\.)+/o,
|
23
23
|
:lbrace => /\{/o,
|
24
24
|
:rbrace => /\}/o,
|
25
25
|
:period => /./o,
|
26
26
|
:braces => /[\{\}]/o
|
27
27
|
}
|
28
|
-
|
28
|
+
|
29
29
|
class << self
|
30
30
|
attr_reader :patterns
|
31
31
|
end
|
32
|
-
|
32
|
+
|
33
33
|
def initialize(options = {})
|
34
34
|
self.options.merge!(options)
|
35
35
|
end
|
@@ -37,17 +37,17 @@ module_eval(<<'...end names.y/module_eval...', 'names.y', 94)
|
|
37
37
|
def options
|
38
38
|
@options ||= { :debug => ENV['DEBUG'] == true }
|
39
39
|
end
|
40
|
-
|
40
|
+
|
41
41
|
def parse(input)
|
42
42
|
@yydebug = options[:debug]
|
43
43
|
scan(input)
|
44
44
|
do_parse
|
45
45
|
end
|
46
|
-
|
46
|
+
|
47
47
|
def next_token
|
48
48
|
@stack.shift
|
49
49
|
end
|
50
|
-
|
50
|
+
|
51
51
|
def on_error(tid, val, vstack)
|
52
52
|
BibTeX.log.error("Failed to parse BibTeX Name on value %s (%s) %s" % [val.inspect, token_to_str(tid) || '?', vstack.inspect])
|
53
53
|
end
|
@@ -59,7 +59,7 @@ module_eval(<<'...end names.y/module_eval...', 'names.y', 94)
|
|
59
59
|
@word = [:PWORD,'']
|
60
60
|
do_scan
|
61
61
|
end
|
62
|
-
|
62
|
+
|
63
63
|
private
|
64
64
|
|
65
65
|
def do_scan
|
@@ -68,14 +68,14 @@ module_eval(<<'...end names.y/module_eval...', 'names.y', 94)
|
|
68
68
|
when @src.scan(NameParser.patterns[:and])
|
69
69
|
push_word
|
70
70
|
@stack.push([:AND,@src.matched])
|
71
|
-
|
71
|
+
|
72
72
|
when @src.scan(NameParser.patterns[:space])
|
73
73
|
push_word
|
74
|
-
|
74
|
+
|
75
75
|
when @src.scan(NameParser.patterns[:comma])
|
76
76
|
push_word
|
77
77
|
@stack.push([:COMMA,@src.matched])
|
78
|
-
|
78
|
+
|
79
79
|
when @src.scan(NameParser.patterns[:lower])
|
80
80
|
is_lowercase
|
81
81
|
@word[1] << @src.matched
|
@@ -83,14 +83,14 @@ module_eval(<<'...end names.y/module_eval...', 'names.y', 94)
|
|
83
83
|
when @src.scan(NameParser.patterns[:upper])
|
84
84
|
is_uppercase
|
85
85
|
@word[1] << @src.matched
|
86
|
-
|
86
|
+
|
87
87
|
when @src.scan(NameParser.patterns[:symbols])
|
88
88
|
@word[1] << @src.matched
|
89
|
-
|
89
|
+
|
90
90
|
when @src.scan(NameParser.patterns[:lbrace])
|
91
91
|
@word[1] << @src.matched
|
92
92
|
scan_literal
|
93
|
-
|
93
|
+
|
94
94
|
when @src.scan(NameParser.patterns[:rbrace])
|
95
95
|
error_unbalanced
|
96
96
|
|
@@ -98,18 +98,18 @@ module_eval(<<'...end names.y/module_eval...', 'names.y', 94)
|
|
98
98
|
@word[1] << @src.matched
|
99
99
|
end
|
100
100
|
end
|
101
|
-
|
101
|
+
|
102
102
|
push_word
|
103
103
|
@stack
|
104
104
|
end
|
105
|
-
|
105
|
+
|
106
106
|
def push_word
|
107
107
|
unless @word[1].empty?
|
108
108
|
@stack.push(@word)
|
109
109
|
@word = [:PWORD,'']
|
110
110
|
end
|
111
111
|
end
|
112
|
-
|
112
|
+
|
113
113
|
def is_lowercase
|
114
114
|
@word[0] = :LWORD if @word[0] == :PWORD
|
115
115
|
end
|
@@ -117,7 +117,7 @@ module_eval(<<'...end names.y/module_eval...', 'names.y', 94)
|
|
117
117
|
def is_uppercase
|
118
118
|
@word[0] = :UWORD if @word[0] == :PWORD
|
119
119
|
end
|
120
|
-
|
120
|
+
|
121
121
|
def scan_literal
|
122
122
|
@brace_level = 1
|
123
123
|
|
@@ -140,12 +140,12 @@ module_eval(<<'...end names.y/module_eval...', 'names.y', 94)
|
|
140
140
|
@stack.push [:ERROR,@src.matched]
|
141
141
|
BibTeX.log.warn("NameParser: unexpected token `#{@src.matched}' at position #{@src.pos}; brace level #{@brace_level}.")
|
142
142
|
end
|
143
|
-
|
143
|
+
|
144
144
|
def error_unbalanced
|
145
145
|
@stack.push [:ERROR,'}']
|
146
146
|
BibTeX.log.warn("NameParser: unbalanced braces at position #{@src.pos}; brace level #{@brace_level}.")
|
147
147
|
end
|
148
|
-
|
148
|
+
|
149
149
|
# -*- racc -*-
|
150
150
|
...end names.y/module_eval...
|
151
151
|
##### State transition tables begin ###
|
@@ -444,4 +444,4 @@ def _reduce_none(val, _values, result)
|
|
444
444
|
end
|
445
445
|
|
446
446
|
end # class NameParser
|
447
|
-
|
447
|
+
end # module BibTeX
|
data/lib/bibtex/names.y
CHANGED
@@ -1,17 +1,17 @@
|
|
1
1
|
#--
|
2
2
|
# BibTeX-Ruby
|
3
3
|
# Copyright (C) 2010-2011 Sylvester Keil <http://sylvester.keil.or.at>
|
4
|
-
#
|
4
|
+
#
|
5
5
|
# This program is free software: you can redistribute it and/or modify
|
6
6
|
# it under the terms of the GNU General Public License as published by
|
7
7
|
# the Free Software Foundation, either version 3 of the License, or
|
8
8
|
# (at your option) any later version.
|
9
|
-
#
|
9
|
+
#
|
10
10
|
# This program is distributed in the hope that it will be useful,
|
11
11
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
12
12
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
13
13
|
# GNU General Public License for more details.
|
14
|
-
#
|
14
|
+
#
|
15
15
|
# You should have received a copy of the GNU General Public License
|
16
16
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
17
17
|
#++
|
@@ -33,7 +33,7 @@ rule
|
|
33
33
|
|
34
34
|
names : name { result = [val[0]] }
|
35
35
|
| names AND name { result << val[2] }
|
36
|
-
|
36
|
+
|
37
37
|
name : word
|
38
38
|
{
|
39
39
|
result = Name.new(:last => val[0])
|
@@ -69,10 +69,10 @@ rule
|
|
69
69
|
| von u_words LWORD { result = val.join(' ') }
|
70
70
|
|
71
71
|
last : LWORD | u_words
|
72
|
-
|
72
|
+
|
73
73
|
first : opt_words { result = [nil,val[0]] }
|
74
74
|
| opt_words COMMA opt_words { result = [val[0],val[2]] }
|
75
|
-
|
75
|
+
|
76
76
|
u_words : u_word
|
77
77
|
| u_words u_word { result = val.join(' ') }
|
78
78
|
|
@@ -82,7 +82,7 @@ rule
|
|
82
82
|
| words word { result = val.join(' ') }
|
83
83
|
|
84
84
|
opt_words : /* empty */ | words
|
85
|
-
|
85
|
+
|
86
86
|
word : LWORD | UWORD | PWORD
|
87
87
|
|
88
88
|
end
|
@@ -91,24 +91,24 @@ end
|
|
91
91
|
require 'strscan'
|
92
92
|
|
93
93
|
---- inner
|
94
|
-
|
94
|
+
|
95
95
|
@patterns = {
|
96
96
|
:and => /,?\s+and\s+/io,
|
97
|
-
:space =>
|
97
|
+
:space => /\s+/o,
|
98
98
|
:comma => /,/o,
|
99
|
-
:lower => /[[:lower:]][^\
|
100
|
-
:upper => /[[:upper:]][^\
|
99
|
+
:lower => /[[:lower:]][^\s\{\}\d\\,]*/o,
|
100
|
+
:upper => /[[:upper:]][^\s\{\}\d\\,]*/uo,
|
101
101
|
:symbols => /(\d|\\.)+/o,
|
102
102
|
:lbrace => /\{/o,
|
103
103
|
:rbrace => /\}/o,
|
104
104
|
:period => /./o,
|
105
105
|
:braces => /[\{\}]/o
|
106
106
|
}
|
107
|
-
|
107
|
+
|
108
108
|
class << self
|
109
109
|
attr_reader :patterns
|
110
110
|
end
|
111
|
-
|
111
|
+
|
112
112
|
def initialize(options = {})
|
113
113
|
self.options.merge!(options)
|
114
114
|
end
|
@@ -116,17 +116,17 @@ require 'strscan'
|
|
116
116
|
def options
|
117
117
|
@options ||= { :debug => ENV['DEBUG'] == true }
|
118
118
|
end
|
119
|
-
|
119
|
+
|
120
120
|
def parse(input)
|
121
121
|
@yydebug = options[:debug]
|
122
122
|
scan(input)
|
123
123
|
do_parse
|
124
124
|
end
|
125
|
-
|
125
|
+
|
126
126
|
def next_token
|
127
127
|
@stack.shift
|
128
128
|
end
|
129
|
-
|
129
|
+
|
130
130
|
def on_error(tid, val, vstack)
|
131
131
|
BibTeX.log.error("Failed to parse BibTeX Name on value %s (%s) %s" % [val.inspect, token_to_str(tid) || '?', vstack.inspect])
|
132
132
|
end
|
@@ -138,7 +138,7 @@ require 'strscan'
|
|
138
138
|
@word = [:PWORD,'']
|
139
139
|
do_scan
|
140
140
|
end
|
141
|
-
|
141
|
+
|
142
142
|
private
|
143
143
|
|
144
144
|
def do_scan
|
@@ -147,14 +147,14 @@ require 'strscan'
|
|
147
147
|
when @src.scan(NameParser.patterns[:and])
|
148
148
|
push_word
|
149
149
|
@stack.push([:AND,@src.matched])
|
150
|
-
|
150
|
+
|
151
151
|
when @src.scan(NameParser.patterns[:space])
|
152
152
|
push_word
|
153
|
-
|
153
|
+
|
154
154
|
when @src.scan(NameParser.patterns[:comma])
|
155
155
|
push_word
|
156
156
|
@stack.push([:COMMA,@src.matched])
|
157
|
-
|
157
|
+
|
158
158
|
when @src.scan(NameParser.patterns[:lower])
|
159
159
|
is_lowercase
|
160
160
|
@word[1] << @src.matched
|
@@ -162,14 +162,14 @@ require 'strscan'
|
|
162
162
|
when @src.scan(NameParser.patterns[:upper])
|
163
163
|
is_uppercase
|
164
164
|
@word[1] << @src.matched
|
165
|
-
|
165
|
+
|
166
166
|
when @src.scan(NameParser.patterns[:symbols])
|
167
167
|
@word[1] << @src.matched
|
168
|
-
|
168
|
+
|
169
169
|
when @src.scan(NameParser.patterns[:lbrace])
|
170
170
|
@word[1] << @src.matched
|
171
171
|
scan_literal
|
172
|
-
|
172
|
+
|
173
173
|
when @src.scan(NameParser.patterns[:rbrace])
|
174
174
|
error_unbalanced
|
175
175
|
|
@@ -177,18 +177,18 @@ require 'strscan'
|
|
177
177
|
@word[1] << @src.matched
|
178
178
|
end
|
179
179
|
end
|
180
|
-
|
180
|
+
|
181
181
|
push_word
|
182
182
|
@stack
|
183
183
|
end
|
184
|
-
|
184
|
+
|
185
185
|
def push_word
|
186
186
|
unless @word[1].empty?
|
187
187
|
@stack.push(@word)
|
188
188
|
@word = [:PWORD,'']
|
189
189
|
end
|
190
190
|
end
|
191
|
-
|
191
|
+
|
192
192
|
def is_lowercase
|
193
193
|
@word[0] = :LWORD if @word[0] == :PWORD
|
194
194
|
end
|
@@ -196,7 +196,7 @@ require 'strscan'
|
|
196
196
|
def is_uppercase
|
197
197
|
@word[0] = :UWORD if @word[0] == :PWORD
|
198
198
|
end
|
199
|
-
|
199
|
+
|
200
200
|
def scan_literal
|
201
201
|
@brace_level = 1
|
202
202
|
|
@@ -219,10 +219,10 @@ require 'strscan'
|
|
219
219
|
@stack.push [:ERROR,@src.matched]
|
220
220
|
BibTeX.log.warn("NameParser: unexpected token `#{@src.matched}' at position #{@src.pos}; brace level #{@brace_level}.")
|
221
221
|
end
|
222
|
-
|
222
|
+
|
223
223
|
def error_unbalanced
|
224
224
|
@stack.push [:ERROR,'}']
|
225
225
|
BibTeX.log.warn("NameParser: unbalanced braces at position #{@src.pos}; brace level #{@brace_level}.")
|
226
226
|
end
|
227
|
-
|
228
|
-
# -*- racc -*-
|
227
|
+
|
228
|
+
# -*- racc -*-
|
data/lib/bibtex/parser.rb
CHANGED
data/lib/bibtex/value.rb
CHANGED
@@ -22,7 +22,7 @@ require 'forwardable'
|
|
22
22
|
|
23
23
|
module BibTeX
|
24
24
|
|
25
|
-
|
25
|
+
|
26
26
|
# A BibTeX Value is something very much like a string. In BibTeX files it
|
27
27
|
# can appear on the right hand side of @string or @entry field assignments
|
28
28
|
# or as @preamble contents. In the example below [VALUE] indicates possible
|
@@ -52,7 +52,11 @@ module BibTeX
|
|
52
52
|
attr_reader :tokens
|
53
53
|
alias to_a tokens
|
54
54
|
|
55
|
-
def_delegators :to_s, :=~, :===,
|
55
|
+
def_delegators :to_s, :=~, :===,
|
56
|
+
*String.instance_methods(false).reject { |m|
|
57
|
+
m =~ /^\W|^(length|dup|replace|to_s|inspect)$|!$/
|
58
|
+
}
|
59
|
+
|
56
60
|
def_delegators :@tokens, :[], :length
|
57
61
|
def_delegator :@tokens, :each, :each_token
|
58
62
|
|
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: 3.1.
|
4
|
+
version: 3.1.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sylvester Keil
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-02-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: latex-decode
|