bibtex-ruby 2.0.12 → 2.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.
- data/Gemfile +20 -7
- data/Gemfile.lock +55 -46
- data/Guardfile +20 -0
- data/History.txt +5 -2
- data/Manifest +1 -1
- data/README.md +64 -69
- data/Rakefile +32 -18
- data/bibtex-ruby.gemspec +3 -9
- data/features/query.feature +39 -1
- data/features/support/env.rb +13 -1
- data/lib/bibtex.rb +5 -2
- data/lib/bibtex/bibliography.rb +1 -1
- data/lib/bibtex/compatibility.rb +9 -1
- data/lib/bibtex/elements.rb +94 -69
- data/lib/bibtex/entry.rb +33 -12
- data/lib/bibtex/name_parser.rb +2 -3
- data/lib/bibtex/names.rb +1 -1
- data/lib/bibtex/names.y +2 -3
- data/lib/bibtex/value.rb +1 -1
- data/lib/bibtex/version.rb +8 -3
- data/test/bibtex/test_elements.rb +23 -23
- data/test/bibtex/test_entry.rb +2 -2
- data/test/helper.rb +12 -1
- metadata +35 -60
- data/auto.watchr +0 -6
data/Rakefile
CHANGED
@@ -1,21 +1,24 @@
|
|
1
|
-
#
|
2
|
-
|
3
|
-
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'bundler'
|
4
|
+
begin
|
5
|
+
Bundler.setup
|
6
|
+
rescue Bundler::BundlerError => e
|
7
|
+
$stderr.puts e.message
|
8
|
+
$stderr.puts "Run `bundle install` to install missing gems"
|
9
|
+
exit e.status_code
|
10
|
+
end
|
11
|
+
|
12
|
+
$:.unshift(File.join(File.dirname(__FILE__), './lib'))
|
13
|
+
|
4
14
|
|
5
15
|
require 'rake/clean'
|
6
16
|
require 'rake/testtask'
|
7
17
|
|
8
|
-
require 'rdoc/task'
|
9
|
-
|
10
18
|
require 'bibtex/version'
|
11
19
|
|
12
|
-
|
13
|
-
|
14
|
-
rd.title = "BibTeX-Ruby Documentation"
|
15
|
-
rd.rdoc_files.include('README.md',"lib/**/*.rb")
|
16
|
-
rd.rdoc_dir = "doc/html"
|
17
|
-
rd.options << '--webcvs=http://github.com/inukshuk/bibtex-ruby/tree/master/'
|
18
|
-
end
|
20
|
+
require 'yard'
|
21
|
+
YARD::Rake::YardocTask.new
|
19
22
|
|
20
23
|
Rake::TestTask.new(:test_task) do |t|
|
21
24
|
t.libs << 'lib' << 'test'
|
@@ -31,12 +34,12 @@ begin
|
|
31
34
|
rescue LoadError
|
32
35
|
desc 'Cucumber rake task not available'
|
33
36
|
task :features do
|
34
|
-
abort 'Cucumber rake task is not available.
|
37
|
+
abort 'Cucumber rake task is not available. Please install cucumber as a gem or plugin'
|
35
38
|
end
|
36
39
|
end
|
37
40
|
|
38
41
|
|
39
|
-
task :default => [
|
42
|
+
task :default => [:test, :features]
|
40
43
|
|
41
44
|
desc 'Generates the BibTeX parser'
|
42
45
|
task :racc => ['lib/bibtex/parser.rb','lib/bibtex/name_parser.rb']
|
@@ -54,6 +57,18 @@ file 'lib/bibtex/name_parser.rb' => ['lib/bibtex/names.y'] do
|
|
54
57
|
sh 'bundle exec racc -o lib/bibtex/name_parser.rb lib/bibtex/names.y'
|
55
58
|
end
|
56
59
|
|
60
|
+
desc 'Run an IRB session with BibTeX-Ruby loaded'
|
61
|
+
task :console, [:script] do |t,args|
|
62
|
+
ARGV.clear
|
63
|
+
|
64
|
+
require 'irb'
|
65
|
+
require 'bibtex'
|
66
|
+
|
67
|
+
IRB.conf[:SCRIPT] = args.script
|
68
|
+
IRB.start
|
69
|
+
end
|
70
|
+
|
71
|
+
|
57
72
|
desc 'Runs the benchmarks (and plots the results)'
|
58
73
|
task :benchmark => ['racc'] do
|
59
74
|
require File.expand_path('../test/benchmark.rb', __FILE__)
|
@@ -69,7 +84,9 @@ end
|
|
69
84
|
desc 'Updates the Manifest file'
|
70
85
|
task :manifest => ['clean', 'racc'] do
|
71
86
|
m = File.open('Manifest', 'w')
|
72
|
-
m.print FileList['**/*'].reject{ |f|
|
87
|
+
m.print FileList['**/*'].reject{ |f|
|
88
|
+
f.start_with?('coverage') || f.end_with?('rbc')
|
89
|
+
}.join("\n")
|
73
90
|
m.close
|
74
91
|
end
|
75
92
|
|
@@ -89,7 +106,4 @@ CLEAN.include('lib/bibtex/parser.rb')
|
|
89
106
|
CLEAN.include('lib/bibtex/parser.output')
|
90
107
|
CLEAN.include('lib/bibtex/name_parser.rb')
|
91
108
|
CLEAN.include('lib/bibtex/name_parser.output')
|
92
|
-
CLEAN.include('doc/html')
|
93
109
|
CLEAN.include('*.gem')
|
94
|
-
|
95
|
-
# vim: syntax=ruby
|
data/bibtex-ruby.gemspec
CHANGED
@@ -9,12 +9,12 @@ Gem::Specification.new do |s|
|
|
9
9
|
s.version = BibTeX::Version::STRING.dup
|
10
10
|
s.platform = Gem::Platform::RUBY
|
11
11
|
s.authors = ['Sylvester Keil']
|
12
|
-
s.email = ['
|
12
|
+
s.email = ['sylvester@keil.or.at']
|
13
13
|
s.homepage = 'http://inukshuk.github.com/bibtex-ruby'
|
14
14
|
s.license = 'GPL-3'
|
15
15
|
|
16
16
|
s.summary = 'A BibTeX parser, converter and API for Ruby.'
|
17
|
-
s.description = <<-END_DESCRIPTION
|
17
|
+
s.description = <<-END_DESCRIPTION.gsub(/^\s+/, '')
|
18
18
|
BibTeX-Ruby is the Rubyist's swiss-army-knife for all things BibTeX. It
|
19
19
|
includes a parser for all common BibTeX objects (@string, @preamble,
|
20
20
|
@comment and regular entries) and a sophisticated name parser that
|
@@ -28,18 +28,12 @@ Gem::Specification.new do |s|
|
|
28
28
|
s.add_runtime_dependency('latex-decode', ['>=0.0.6'])
|
29
29
|
s.add_runtime_dependency('multi_json', ['~>1.3'])
|
30
30
|
|
31
|
-
s.add_development_dependency('rake', ['~>0.9'])
|
32
|
-
s.add_development_dependency('racc', ['~>1.4'])
|
33
|
-
s.add_development_dependency('rdoc', ['~>3.9'])
|
34
|
-
|
35
31
|
s.files = File.open('Manifest').readlines.map(&:chomp)
|
36
32
|
s.test_files = Dir.glob('test/**/test*.rb')
|
37
33
|
s.executables = []
|
38
34
|
s.require_path = 'lib'
|
39
35
|
|
40
|
-
s.
|
41
|
-
s.extra_rdoc_files = %w{README.md}
|
42
|
-
|
36
|
+
s.has_rdoc = 'yard'
|
43
37
|
end
|
44
38
|
|
45
39
|
# vim: syntax=ruby
|
data/features/query.feature
CHANGED
@@ -59,4 +59,42 @@ Feature: Searching in BibTeX bibliographies
|
|
59
59
|
Then there should be exactly 3 matches
|
60
60
|
When I search for "@*[year=2007]"
|
61
61
|
Then there should be exactly 1 match
|
62
|
-
|
62
|
+
|
63
|
+
@query
|
64
|
+
Scenario: Find entries using compound queries
|
65
|
+
Given the bibliography:
|
66
|
+
"""
|
67
|
+
@book{pickaxe,
|
68
|
+
Address = {Raleigh, North Carolina},
|
69
|
+
Author = {Thomas, Dave, and Fowler, Chad, and Hunt, Andy},
|
70
|
+
Date-Added = {2010-08-05 09:54:07 +0200},
|
71
|
+
Date-Modified = {2010-08-05 10:07:01 +0200},
|
72
|
+
Keywords = {ruby},
|
73
|
+
Publisher = {The Pragmatic Bookshelf},
|
74
|
+
Series = {The Facets of Ruby},
|
75
|
+
Title = {Programming Ruby 1.9: The Pragmatic Programmer's Guide},
|
76
|
+
Year = {2009}
|
77
|
+
}
|
78
|
+
@article{a1,
|
79
|
+
Title = {An Article},
|
80
|
+
Keywords = {@book}
|
81
|
+
}
|
82
|
+
@book{dragon,
|
83
|
+
Address = {Boston},
|
84
|
+
Author = {Aho, Alfred V., and Lam, Monica S., and Ullman, Jeffrey D.},
|
85
|
+
Booktitle = {Compilers: Principles, Techniques, and Tools},
|
86
|
+
Date-Added = {2010-08-05 09:57:15 +0200},
|
87
|
+
Date-Modified = {2010-08-05 10:06:32 +0200},
|
88
|
+
Edition = {second},
|
89
|
+
Keywords = {compiler, lex, yacc},
|
90
|
+
Publisher = {Addison Wesley},
|
91
|
+
Title = {Compilers: Principles, Techniques, and Tools},
|
92
|
+
Year = {2007}
|
93
|
+
}
|
94
|
+
"""
|
95
|
+
When I search for "@*[keywords = @book || edition = second]"
|
96
|
+
Then there should be exactly 2 matches
|
97
|
+
When I search for "@*[keywords = @book && edition = second]"
|
98
|
+
Then there should be exactly 0 matches
|
99
|
+
When I search for "@*[keywords = @book && title ~= Article]"
|
100
|
+
Then there should be exactly 1 match
|
data/features/support/env.rb
CHANGED
@@ -1,6 +1,18 @@
|
|
1
|
+
begin
|
2
|
+
if RUBY_VERSION > '1.8'
|
3
|
+
require 'debugger'
|
4
|
+
require 'simplecov'
|
5
|
+
else
|
6
|
+
require 'ruby-debug'
|
7
|
+
Debugger.start
|
8
|
+
end
|
9
|
+
rescue LoadError
|
10
|
+
# ignore
|
11
|
+
end
|
12
|
+
|
1
13
|
require 'bibtex'
|
2
14
|
require 'minitest/unit'
|
3
15
|
|
4
16
|
World do
|
5
17
|
extend MiniTest::Assertions
|
6
|
-
end
|
18
|
+
end
|
data/lib/bibtex.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
#--
|
2
2
|
# BibTeX-Ruby
|
3
|
-
# Copyright (C) 2010-
|
3
|
+
# Copyright (C) 2010-2012 Sylvester Keil <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
|
@@ -56,10 +56,13 @@ end
|
|
56
56
|
# Debugger.start
|
57
57
|
|
58
58
|
require 'bibtex/extensions'
|
59
|
-
|
59
|
+
|
60
60
|
require 'bibtex/value'
|
61
61
|
require 'bibtex/filters'
|
62
62
|
require 'bibtex/name_parser'
|
63
|
+
|
64
|
+
require 'bibtex/compatibility'
|
65
|
+
|
63
66
|
require 'bibtex/names'
|
64
67
|
require 'bibtex/replaceable'
|
65
68
|
require 'bibtex/elements'
|
data/lib/bibtex/bibliography.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
#--
|
2
2
|
# BibTeX-Ruby
|
3
|
-
# Copyright (C) 2010-
|
3
|
+
# Copyright (C) 2010-2012 Sylvester Keil <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
|
data/lib/bibtex/compatibility.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# coding: utf-8
|
1
2
|
|
2
3
|
unless Symbol.include?(Comparable)
|
3
4
|
class Symbol
|
@@ -7,4 +8,11 @@ unless Symbol.include?(Comparable)
|
|
7
8
|
to_s <=> other.to_s
|
8
9
|
end
|
9
10
|
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
|
data/lib/bibtex/elements.rb
CHANGED
@@ -1,17 +1,17 @@
|
|
1
1
|
#--
|
2
2
|
# BibTeX-Ruby
|
3
|
-
# Copyright (C) 2010-
|
4
|
-
#
|
3
|
+
# Copyright (C) 2010-2012 Sylvester Keil <sylvester.keil.or.at>
|
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
|
#++
|
@@ -23,10 +23,10 @@ module BibTeX
|
|
23
23
|
#
|
24
24
|
class Element
|
25
25
|
include Comparable
|
26
|
-
|
26
|
+
|
27
27
|
attr_writer :id
|
28
28
|
attr_reader :bibliography
|
29
|
-
|
29
|
+
|
30
30
|
# Returns an array of BibTeX elements.
|
31
31
|
def self.parse(input, options = {})
|
32
32
|
case input
|
@@ -45,7 +45,7 @@ module BibTeX
|
|
45
45
|
raise ArgumentError, "failed to parse Element from #{input.inspect}"
|
46
46
|
end
|
47
47
|
end
|
48
|
-
|
48
|
+
|
49
49
|
# Returns a string containing the object's content.
|
50
50
|
def content(options = {}); ''; end
|
51
51
|
|
@@ -54,33 +54,33 @@ module BibTeX
|
|
54
54
|
|
55
55
|
# Invokes BibTeX string joining on this element.
|
56
56
|
def join; self; end
|
57
|
-
|
57
|
+
|
58
58
|
# Returns the element's id.
|
59
59
|
def id; @id ||= object_id.to_s; end
|
60
|
-
|
60
|
+
|
61
61
|
# Returns the BibTeX type (if applicable) or the normalized class name.
|
62
62
|
def type
|
63
63
|
self.class.name.split(/::/).last.gsub(/([[:lower:]])([[:upper:]])/) { "#{$1}_#{$2}" }.downcase.intern
|
64
64
|
end
|
65
|
-
|
65
|
+
|
66
66
|
# Returns a list of names for that Element. All Elements except Entries return an empty list.
|
67
67
|
def names
|
68
68
|
[]
|
69
69
|
end
|
70
|
-
|
70
|
+
|
71
71
|
def has_type?(type)
|
72
72
|
self.type == type.intern || defined?(type) == 'constant' && is_a?(type)
|
73
73
|
end
|
74
|
-
|
75
|
-
[:entry, :book, :article, :collection, :string, :preamble, :comment].
|
74
|
+
|
75
|
+
[:entry, :book, :article, :collection, :string, :preamble, :comment].each do |type|
|
76
76
|
method_id = "#{type}?"
|
77
77
|
define_method(method_id) { has_type?(type) } unless method_defined?(method_id)
|
78
78
|
end
|
79
|
-
|
79
|
+
|
80
80
|
# Returns true if the element matches the given query.
|
81
81
|
def matches?(query)
|
82
82
|
return true if query.nil? || query.respond_to?(:empty?) && query.empty?
|
83
|
-
|
83
|
+
|
84
84
|
case query
|
85
85
|
when Symbol
|
86
86
|
query.to_s == id.to_s
|
@@ -88,63 +88,61 @@ module BibTeX
|
|
88
88
|
query == self
|
89
89
|
when Regexp
|
90
90
|
to_s.match(query)
|
91
|
+
when /^\/(.+)\/$/
|
92
|
+
to_s.match(Regexp.new($1))
|
91
93
|
when /@(\*|\w+)(?:\[([^\]]*)\])?/
|
92
94
|
query.scan(/@(\*|\w+)(?:\[([^\]]*)\])?/).any? do |type, condition|
|
93
|
-
has_type?(type)
|
95
|
+
if has_type?(type)
|
96
|
+
if condition.nil? || condition.empty?
|
97
|
+
true
|
98
|
+
else
|
99
|
+
condition.to_s.split(/\s*\|\|\s*/).any? do |conditions|
|
100
|
+
meets_all? conditions.split(/\s*(?:,|&&)\s*/)
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
94
104
|
end
|
95
|
-
when /^\/(.+)\/$/
|
96
|
-
to_s.match(Regexp.new($1))
|
97
105
|
else
|
98
106
|
id.to_s == query
|
99
|
-
end
|
107
|
+
end
|
100
108
|
end
|
101
|
-
|
109
|
+
|
102
110
|
alias === matches?
|
103
111
|
alias match? matches?
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
respond_to?(property) && send(property).to_s.match(value)
|
120
|
-
when '<='
|
121
|
-
respond_to?(property) && send(property).to_i <= value.to_i
|
122
|
-
when '>='
|
123
|
-
respond_to?(property) && send(property).to_i >= value.to_i
|
124
|
-
else
|
125
|
-
respond_to?(property) && send(property).to_s == value
|
126
|
-
end
|
127
|
-
end
|
112
|
+
|
113
|
+
def meets_all?(*conditions)
|
114
|
+
meets? conditions.flatten, :all?
|
115
|
+
end
|
116
|
+
alias meet_all? meets_all?
|
117
|
+
|
118
|
+
def meets_any?(*conditions)
|
119
|
+
meets? conditions.flatten, :any?
|
120
|
+
end
|
121
|
+
alias meet_any? meets_any?
|
122
|
+
|
123
|
+
# Returns true if the element meets all or any of the given conditions.
|
124
|
+
def meets?(conditions, op = :all?)
|
125
|
+
conditions.send(op) do |condition|
|
126
|
+
meets_condition? condition
|
128
127
|
end
|
129
128
|
end
|
130
|
-
|
131
129
|
alias meet? meets?
|
132
|
-
|
130
|
+
|
133
131
|
alias to_s content
|
134
|
-
|
132
|
+
|
135
133
|
def to_hash(options = {})
|
136
134
|
{ type => content }
|
137
135
|
end
|
138
|
-
|
136
|
+
|
139
137
|
def to_yaml(options = {})
|
140
138
|
require 'yaml'
|
141
139
|
to_hash.to_yaml
|
142
140
|
end
|
143
|
-
|
141
|
+
|
144
142
|
def to_json(options = {})
|
145
143
|
MultiJson.dump(to_hash(options))
|
146
144
|
end
|
147
|
-
|
145
|
+
|
148
146
|
def to_xml(options = {})
|
149
147
|
require 'rexml/document'
|
150
148
|
xml = REXML::Element.new(type)
|
@@ -158,25 +156,52 @@ module BibTeX
|
|
158
156
|
@bibliography = bibliography
|
159
157
|
self
|
160
158
|
end
|
161
|
-
|
159
|
+
|
162
160
|
# Called when the element was removed from a bibliography.
|
163
161
|
def removed_from_bibliography(bibliography)
|
164
162
|
@bibliography = nil
|
165
163
|
self
|
166
164
|
end
|
167
|
-
|
165
|
+
|
168
166
|
def <=>(other)
|
169
167
|
return nil unless other.respond_to? :type and other.respond_to? :to_s
|
170
168
|
[type, to_s] <=> [other.type, other.to_s]
|
171
169
|
end
|
172
|
-
|
170
|
+
|
173
171
|
# Returns the Element as a nicely formatted string.
|
174
172
|
def inspect
|
175
173
|
"#<#{self.class} #{content.gsub(/\n/, ' ')}>"
|
176
174
|
end
|
175
|
+
|
176
|
+
private
|
177
|
+
|
178
|
+
def meets_condition?(condition)
|
179
|
+
property, operator, value = condition.split(/\s*([!~\/\^<>]?=)\s*/)
|
180
|
+
|
181
|
+
if property.nil?
|
182
|
+
true
|
183
|
+
else
|
184
|
+
actual = respond_to?(property) ? send(property) : nil
|
185
|
+
|
186
|
+
case operator
|
187
|
+
when '!=', '/='
|
188
|
+
actual.nil? || actual.to_s != value
|
189
|
+
when '^='
|
190
|
+
!actual.nil? && actual.to_s.match("^#{value}")
|
191
|
+
when '~='
|
192
|
+
!actual.nil? && actual.to_s.match(value)
|
193
|
+
when '<='
|
194
|
+
!actual.nil? && actual.to_i <= value.to_i
|
195
|
+
when '>='
|
196
|
+
!actual.nil? && actual.to_i >= value.to_i
|
197
|
+
else
|
198
|
+
!actual.nil? && actual.to_s == value
|
199
|
+
end
|
200
|
+
end
|
201
|
+
end
|
177
202
|
end
|
178
203
|
|
179
|
-
|
204
|
+
|
180
205
|
#
|
181
206
|
# Represents a @string object.
|
182
207
|
#
|
@@ -187,9 +212,9 @@ module BibTeX
|
|
187
212
|
# @string and @preamble objects, as well as in field values
|
188
213
|
# of regular entries.
|
189
214
|
#
|
190
|
-
class String < Element
|
215
|
+
class String < Element
|
191
216
|
include Replaceable
|
192
|
-
|
217
|
+
|
193
218
|
attr_reader :key
|
194
219
|
|
195
220
|
# Creates a new instance.
|
@@ -201,7 +226,7 @@ module BibTeX
|
|
201
226
|
# Sets the string's key (i.e., the symbol identifying the constant).
|
202
227
|
def key=(key)
|
203
228
|
raise(ArgumentError, "keys must be convertible to Symbol; was: #{type.class.name}.") unless type.respond_to?(:to_sym)
|
204
|
-
|
229
|
+
|
205
230
|
unless bibliography.nil?
|
206
231
|
bibliography.strings.delete(@key)
|
207
232
|
bibliography.strings[key.to_sym] = self
|
@@ -214,7 +239,7 @@ module BibTeX
|
|
214
239
|
def [](key)
|
215
240
|
@key == key ? @value : nil
|
216
241
|
end
|
217
|
-
|
242
|
+
|
218
243
|
|
219
244
|
# Called when the element was added to a bibliography.
|
220
245
|
def added_to_bibliography(bibliography)
|
@@ -222,7 +247,7 @@ module BibTeX
|
|
222
247
|
bibliography.strings[@key] = self
|
223
248
|
self
|
224
249
|
end
|
225
|
-
|
250
|
+
|
226
251
|
# Called when the element was removed from a bibliography.
|
227
252
|
def removed_from_bibliography(bibliography)
|
228
253
|
super
|
@@ -239,23 +264,23 @@ module BibTeX
|
|
239
264
|
def to_s(options = {})
|
240
265
|
"@string{ #{content} }"
|
241
266
|
end
|
242
|
-
|
267
|
+
|
243
268
|
def to_hash(options = {})
|
244
269
|
{ :string => { @key => @value.to_s(:quotes => '"') } }
|
245
270
|
end
|
246
|
-
|
271
|
+
|
247
272
|
def to_xml(options = {})
|
248
273
|
require 'rexml/document'
|
249
|
-
|
274
|
+
|
250
275
|
xml = REXML::Element.new(:string)
|
251
|
-
|
276
|
+
|
252
277
|
k, v = REXML::Element.new(:key), REXML::Element.new(:value)
|
253
278
|
k.text = key.to_s
|
254
279
|
v.text = value.to_s(:quotes => '"')
|
255
|
-
|
280
|
+
|
256
281
|
xml.add_elements(k)
|
257
282
|
xml.add_elements(v)
|
258
|
-
|
283
|
+
|
259
284
|
xml
|
260
285
|
end
|
261
286
|
end
|
@@ -273,7 +298,7 @@ module BibTeX
|
|
273
298
|
def initialize(value = '')
|
274
299
|
@value = Value.new(value)
|
275
300
|
end
|
276
|
-
|
301
|
+
|
277
302
|
# Returns a string representation of the @preamble's content.
|
278
303
|
def content
|
279
304
|
@value.to_s(:quotes => '"')
|
@@ -288,7 +313,7 @@ module BibTeX
|
|
288
313
|
# Represents a @comment object.
|
289
314
|
class Comment < Element
|
290
315
|
attr_accessor :content
|
291
|
-
|
316
|
+
|
292
317
|
def initialize(content = '')
|
293
318
|
@content = content
|
294
319
|
end
|
@@ -300,7 +325,7 @@ module BibTeX
|
|
300
325
|
|
301
326
|
# Represents text in a `.bib' file, but outside of an
|
302
327
|
# actual BibTeX object; typically, such text is treated
|
303
|
-
# as a comment and is ignored by the parser.
|
328
|
+
# as a comment and is ignored by the parser.
|
304
329
|
# BibTeX-Ruby offers this class to allows for
|
305
330
|
# post-processing of this type of `meta' content. If you
|
306
331
|
# want the parser to include +MetaComment+ objects, you
|
@@ -308,7 +333,7 @@ module BibTeX
|
|
308
333
|
# option.
|
309
334
|
class MetaContent < Element
|
310
335
|
attr_accessor :content
|
311
|
-
|
336
|
+
|
312
337
|
def initialize(content = '')
|
313
338
|
@content = content
|
314
339
|
end
|