bibtex-ruby 3.0.1 → 3.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/Gemfile +29 -17
- data/History.txt +5 -0
- data/Manifest +8 -0
- data/README.md +33 -31
- data/bibtex-ruby.gemspec +2 -3
- data/features/issues/non_ascii_default_keys.feature +3 -3
- data/features/support/env.rb +12 -10
- data/lib/bibtex.rb +14 -4
- data/lib/bibtex/bibliography.rb +10 -12
- data/lib/bibtex/bibliography/rdf_converter.rb +27 -0
- data/lib/bibtex/compatibility.rb +1 -1
- data/lib/bibtex/elements.rb +2 -2
- data/lib/bibtex/entry.rb +9 -233
- data/lib/bibtex/entry/bibtexml_converter.rb +44 -0
- data/lib/bibtex/entry/citeproc_converter.rb +110 -0
- data/lib/bibtex/entry/rdf_converter.rb +543 -0
- data/lib/bibtex/lexer.rb +1 -1
- data/lib/bibtex/names.rb +2 -2
- data/lib/bibtex/value.rb +1 -1
- data/lib/bibtex/version.rb +7 -7
- data/test/bibtex/entry/test_rdf_converter.rb +317 -0
- data/test/bibtex/test_bibliography.rb +1 -1
- data/test/bibtex/test_entry.rb +2 -1
- data/test/bibtex/test_names.rb +1 -1
- data/test/bibtex/test_utilities.rb +8 -8
- data/test/helper.rb +16 -8
- data/test/test_bibtex.rb +1 -1
- data/test/test_export.rb +5 -5
- metadata +20 -28
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8579fc07e8437d733ae2593adedd2e9b9a53cdc6
|
4
|
+
data.tar.gz: 8bc0cb71db6ce4b2e80fe1385251e8f261cc6b8b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5fc0d42f2a46852bb5d3c9f837ae9870a6c0a12511da63157d9f6955fd86dc95ebf1ab67b6c8df355754d2c54f97b75934e1135573865b0066871f14d23a2354
|
7
|
+
data.tar.gz: 08560e71aae34c126709a9ea6ba7cb016702c246201948af8952ad81ea8e56370532d932fbc836d20a6950d1da7b0841b540f3835e1a5d11efd494552c56adbe
|
data/Gemfile
CHANGED
@@ -1,38 +1,50 @@
|
|
1
1
|
source 'https://rubygems.org'
|
2
2
|
gemspec
|
3
3
|
|
4
|
-
|
5
|
-
gem '
|
4
|
+
gem 'rdf', '~>1.1'
|
5
|
+
gem 'json', '~>1.8', :platforms => [:mri_18, :jruby, :rbx]
|
6
6
|
|
7
|
+
gem 'rubysl', '~>2.0', :platforms => :rbx
|
7
8
|
|
8
9
|
group :debug do
|
9
|
-
gem 'debugger', :require => false, :platforms => [:mri_19, :mri_20]
|
10
|
+
gem 'debugger', :require => false, :platforms => [:mri_19, :mri_20, :mri_21]
|
10
11
|
gem 'ruby-debug', :require => false, :platforms => [:mri_18]
|
12
|
+
gem 'rubinius-debugger', :require => false, :platforms => :rbx
|
13
|
+
gem 'rubinius-compiler', :require => false, :platforms => :rbx
|
11
14
|
end
|
12
15
|
|
13
16
|
group :test do
|
14
|
-
gem 'minitest', '~>4.
|
15
|
-
gem '
|
16
|
-
gem '
|
17
|
-
gem '
|
17
|
+
gem 'minitest', '~>4.7', :require => false
|
18
|
+
gem 'rubysl-test-unit', '~>2.0', :platforms => :rbx
|
19
|
+
gem 'minitest-ansi'
|
20
|
+
gem 'cucumber', '~>1.3'
|
21
|
+
gem 'unicode', '~>0.4', :platforms => [:rbx, :mswin, :mingw, :mri_19, :mri_20, :mri_21]
|
18
22
|
end
|
19
23
|
|
20
24
|
group :extra do
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
+
if RUBY_PLATFORM =~ /darwin/i
|
26
|
+
gem 'rb-fsevent', :require => false
|
27
|
+
end
|
28
|
+
|
29
|
+
gem 'guard-minitest', :platforms => [:ruby_21, :ruby_20, :ruby_19]
|
30
|
+
gem 'guard-cucumber', :platforms => [:ruby_21, :ruby_20, :ruby_19]
|
31
|
+
gem 'redcarpet', :platforms => [:ruby_21, :ruby_20, :ruby_19]
|
25
32
|
end
|
26
33
|
|
27
34
|
group :profile do
|
28
|
-
gem 'ruby-prof',
|
29
|
-
gem 'gnuplot',
|
30
|
-
gem 'simplecov'
|
35
|
+
gem 'ruby-prof', '~>0.14', :platforms => [:mri_19, :mri_20, :mri_21]
|
36
|
+
gem 'gnuplot', '~>2.4', :platforms => [:mri_19, :mri_20, :mri_21]
|
37
|
+
gem 'simplecov', '~>0.8', :require => false, :platforms => [:ruby_21, :ruby_20]
|
38
|
+
gem 'rubinius-coverage', :require => false, :platforms => :rbx
|
31
39
|
end
|
32
40
|
|
33
41
|
group :development do
|
34
42
|
gem 'rake'
|
35
|
-
gem '
|
36
|
-
gem '
|
37
|
-
|
43
|
+
gem 'yard'
|
44
|
+
gem 'iconv', :platforms => [:ruby_20, :ruby_21]
|
45
|
+
end
|
46
|
+
|
47
|
+
group :travis do
|
48
|
+
# Gem is required at runtime for RBX!
|
49
|
+
gem 'racc', :platforms => [:ruby_21, :ruby_20, :ruby_19]
|
38
50
|
end
|
data/History.txt
CHANGED
data/Manifest
CHANGED
@@ -39,11 +39,17 @@ features/support/env.rb
|
|
39
39
|
lib
|
40
40
|
lib/bibtex
|
41
41
|
lib/bibtex.rb
|
42
|
+
lib/bibtex/bibliography
|
42
43
|
lib/bibtex/bibliography.rb
|
44
|
+
lib/bibtex/bibliography/rdf_converter.rb
|
43
45
|
lib/bibtex/bibtex.y
|
44
46
|
lib/bibtex/compatibility.rb
|
45
47
|
lib/bibtex/elements.rb
|
48
|
+
lib/bibtex/entry
|
46
49
|
lib/bibtex/entry.rb
|
50
|
+
lib/bibtex/entry/bibtexml_converter.rb
|
51
|
+
lib/bibtex/entry/citeproc_converter.rb
|
52
|
+
lib/bibtex/entry/rdf_converter.rb
|
47
53
|
lib/bibtex/error.rb
|
48
54
|
lib/bibtex/extensions.rb
|
49
55
|
lib/bibtex/filters
|
@@ -63,6 +69,8 @@ lib/bibtex/version.rb
|
|
63
69
|
test
|
64
70
|
test/benchmark.rb
|
65
71
|
test/bibtex
|
72
|
+
test/bibtex/entry
|
73
|
+
test/bibtex/entry/test_rdf_converter.rb
|
66
74
|
test/bibtex/test_bibliography.rb
|
67
75
|
test/bibtex/test_elements.rb
|
68
76
|
test/bibtex/test_entry.rb
|
data/README.md
CHANGED
@@ -64,7 +64,7 @@ look the same in their `#sort_order(:initials => true)` form.
|
|
64
64
|
Unify certain fields across the bibliography:
|
65
65
|
|
66
66
|
b.unify :publisher, /o'?reilly/i, "O'Reilly"
|
67
|
-
|
67
|
+
|
68
68
|
b.unify :publisher, /^penguin/i do |entry|
|
69
69
|
entry.publisher = 'Penguin Books'
|
70
70
|
entry.address = 'London'
|
@@ -450,7 +450,7 @@ constitutes a simple BibTeX to YAML converter:
|
|
450
450
|
>> BibTeX.open('example.bib').to_yaml
|
451
451
|
|
452
452
|
Starting with version 2.0, BibTeX-Ruby's `#to_xml` exports your bibliography
|
453
|
-
to the [BibTeXML](http
|
453
|
+
to the [BibTeXML](http://bibtexml.sf.net/) format. By passing the option
|
454
454
|
`:extended => true` you can make use of the BibTeXML's extended format which
|
455
455
|
will return individual person elements and name tokens (provided you have
|
456
456
|
successfully parsed the names of your bibliography).
|
@@ -468,32 +468,34 @@ successfully parsed the names of your bibliography).
|
|
468
468
|
This example parse a BibTeX entry, formats it as extended BibTeXML,
|
469
469
|
and writes the following XML to standard out:
|
470
470
|
|
471
|
-
|
472
|
-
|
473
|
-
|
474
|
-
|
475
|
-
|
476
|
-
|
477
|
-
|
478
|
-
|
479
|
-
|
480
|
-
|
481
|
-
|
482
|
-
|
483
|
-
|
484
|
-
|
485
|
-
|
486
|
-
|
487
|
-
|
488
|
-
|
489
|
-
|
490
|
-
|
491
|
-
|
492
|
-
|
493
|
-
|
494
|
-
|
495
|
-
|
496
|
-
|
471
|
+
```xml
|
472
|
+
<?xml version='1.0' encoding='UTF-8'?>
|
473
|
+
<bibtex:file xmlns:bibtex='http://bibtexml.sf.net/'>
|
474
|
+
<bibtex:entry id='pickaxe'>
|
475
|
+
<bibtex:book>
|
476
|
+
<bibtex:address>Raleigh, North Carolina</bibtex:address>
|
477
|
+
<bibtex:person>
|
478
|
+
<bibtex:first>Dave</bibtex:first>
|
479
|
+
<bibtex:last>Thomas</bibtex:last>
|
480
|
+
</bibtex:person>
|
481
|
+
<bibtex:person>
|
482
|
+
<bibtex:first>Chad</bibtex:first>
|
483
|
+
<bibtex:last>Fowler</bibtex:last>
|
484
|
+
</bibtex:person>
|
485
|
+
<bibtex:person>
|
486
|
+
<bibtex:first>Andy</bibtex:first>
|
487
|
+
<bibtex:last>Hunt</bibtex:last>
|
488
|
+
</bibtex:person>
|
489
|
+
<bibtex:author/>
|
490
|
+
<bibtex:publisher>The Pragmatic Bookshelf</bibtex:publisher>
|
491
|
+
<bibtex:title>
|
492
|
+
Programming Ruby 1.9: The Pragmatic Programmer's Guide
|
493
|
+
</bibtex:title>
|
494
|
+
<bibtex:year>2009</bibtex:year>
|
495
|
+
</bibtex:book>
|
496
|
+
</bibtex:entry>
|
497
|
+
</bibtex:file>
|
498
|
+
```
|
497
499
|
|
498
500
|
Look at the 'examples' directory for more elaborate examples of a BibTeX to
|
499
501
|
YAML and a BibTeX to HTML converter using **#to_citeproc** to format a
|
@@ -554,13 +556,13 @@ For more information about the BibTeX format and the parser's idiosyncrasies
|
|
554
556
|
Contributing
|
555
557
|
------------
|
556
558
|
The BibTeX-Ruby source code is
|
557
|
-
[hosted on GitHub](
|
559
|
+
[hosted on GitHub](https://github.com/inukshuk/bibtex-ruby/).
|
558
560
|
You can check out a copy of the latest code using Git:
|
559
561
|
|
560
562
|
$ git clone https://github.com/inukshuk/bibtex-ruby.git
|
561
563
|
|
562
564
|
If you've found a bug or have a question, please open an issue on the
|
563
|
-
[BibTeX-Ruby issue tracker](
|
565
|
+
[BibTeX-Ruby issue tracker](https://github.com/inukshuk/bibtex-ruby/issues).
|
564
566
|
For extra credit, clone the BibTeX-Ruby repository, write a failing
|
565
567
|
example, or cucumber feature, fix the bug and submit a pull request (for
|
566
568
|
useful examples, take a look at the cucumber features in the
|
@@ -587,7 +589,7 @@ To execute the test suite continuously while you're working run:
|
|
587
589
|
Credits
|
588
590
|
-------
|
589
591
|
|
590
|
-
Copyright 2011-
|
592
|
+
Copyright 2011-2014 [Sylvester Keil](http://sylvester.keil.or.at/).
|
591
593
|
|
592
594
|
Kudos to all [contributors](https://github.com/inukshuk/bibtex-ruby/contributors)
|
593
595
|
who have made BibTeX-Ruby possible.
|
data/bibtex-ruby.gemspec
CHANGED
@@ -24,9 +24,8 @@ Gem::Specification.new do |s|
|
|
24
24
|
instructions to unicode; if you are in a hurry, it also allows for easy
|
25
25
|
export/conversion to formats such as YAML, JSON, CSL, and XML (BibTeXML).
|
26
26
|
END_DESCRIPTION
|
27
|
-
|
27
|
+
|
28
28
|
s.add_runtime_dependency('latex-decode', ['>=0.0.6'])
|
29
|
-
s.add_runtime_dependency('multi_json', ['~>1.3'])
|
30
29
|
|
31
30
|
s.files = File.open('Manifest').readlines.map(&:chomp)
|
32
31
|
s.test_files = Dir.glob('test/**/test*.rb')
|
@@ -36,4 +35,4 @@ Gem::Specification.new do |s|
|
|
36
35
|
s.has_rdoc = 'yard'
|
37
36
|
end
|
38
37
|
|
39
|
-
# vim: syntax=ruby
|
38
|
+
# vim: syntax=ruby
|
@@ -8,7 +8,7 @@ Feature: Parse BibTeX files and convert LaTeX to Unicode
|
|
8
8
|
When I create an entry with these elements:
|
9
9
|
| type | author | title | location | year |
|
10
10
|
| book | Christian Müller | Title | Berlin | 2013 |
|
11
|
-
Then my bibliography should contain an entry with a key like "mu
|
11
|
+
Then my bibliography should contain an entry with a key like "mu?.?ller2013a"
|
12
12
|
|
13
13
|
@default_keys
|
14
14
|
Scenario: Multiple entries with an author whose name contains non-ASCII characters
|
@@ -16,5 +16,5 @@ Feature: Parse BibTeX files and convert LaTeX to Unicode
|
|
16
16
|
| type | author | title | location | year |
|
17
17
|
| book | Christian Müller | First Title | Berlin | 2013 |
|
18
18
|
| book | Christian Müller | Second Title | Berlin | 2013 |
|
19
|
-
Then my bibliography should contain an entry with a key like "mu
|
20
|
-
And my bibliography should contain an entry with a key like "mu
|
19
|
+
Then my bibliography should contain an entry with a key like "mu?.?ller2013a"
|
20
|
+
And my bibliography should contain an entry with a key like "mu?.?ller2013b"
|
data/features/support/env.rb
CHANGED
@@ -1,18 +1,20 @@
|
|
1
|
-
begin
|
2
|
-
|
3
|
-
|
4
|
-
|
1
|
+
begin
|
2
|
+
require 'simplecov'
|
3
|
+
rescue LoadError
|
4
|
+
# ignore
|
5
|
+
end
|
6
|
+
|
7
|
+
begin
|
8
|
+
if defined?(RUBY_ENGINE) && RUBY_ENGINE == 'rbx'
|
9
|
+
require 'rubinius-debugger'
|
5
10
|
else
|
6
|
-
require '
|
7
|
-
Debugger.start
|
11
|
+
require 'debugger'
|
8
12
|
end
|
9
13
|
rescue LoadError
|
10
14
|
# ignore
|
11
15
|
end
|
12
16
|
|
17
|
+
require 'minitest/unit'
|
13
18
|
require 'bibtex'
|
14
|
-
require 'minitest/autorun'
|
15
19
|
|
16
|
-
World
|
17
|
-
extend Minitest::Assertions
|
18
|
-
end
|
20
|
+
World(MiniTest::Assertions)
|
data/lib/bibtex.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
#--
|
2
2
|
# BibTeX-Ruby
|
3
|
-
# Copyright (C) 2010-
|
3
|
+
# Copyright (C) 2010-2014 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
|
@@ -21,7 +21,7 @@ require 'forwardable'
|
|
21
21
|
require 'logger'
|
22
22
|
require 'open-uri'
|
23
23
|
|
24
|
-
require '
|
24
|
+
require 'json'
|
25
25
|
|
26
26
|
require 'bibtex/version'
|
27
27
|
|
@@ -32,7 +32,7 @@ require 'bibtex/version'
|
|
32
32
|
# +Preamble+, +Comment+, and +Entry+.
|
33
33
|
#
|
34
34
|
# Author:: {Sylvester Keil}[http://sylvester.keil.or.at]
|
35
|
-
# Copyright:: Copyright (c) 2010-
|
35
|
+
# Copyright:: Copyright (c) 2010-2014 Sylvester Keil
|
36
36
|
# License:: GNU GPL 3.0
|
37
37
|
#
|
38
38
|
module BibTeX
|
@@ -67,7 +67,17 @@ require 'bibtex/names'
|
|
67
67
|
require 'bibtex/replaceable'
|
68
68
|
require 'bibtex/elements'
|
69
69
|
require 'bibtex/entry'
|
70
|
+
require 'bibtex/entry/bibtexml_converter'
|
71
|
+
require 'bibtex/entry/citeproc_converter'
|
70
72
|
require 'bibtex/error'
|
71
73
|
require 'bibtex/parser'
|
72
74
|
require 'bibtex/bibliography'
|
73
|
-
require 'bibtex/utilities'
|
75
|
+
require 'bibtex/utilities'
|
76
|
+
|
77
|
+
begin
|
78
|
+
require 'rdf'
|
79
|
+
require 'bibtex/entry/rdf_converter'
|
80
|
+
require 'bibtex/bibliography/rdf_converter'
|
81
|
+
rescue LoadError
|
82
|
+
# ignored
|
83
|
+
end
|
data/lib/bibtex/bibliography.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
#--
|
2
2
|
# BibTeX-Ruby
|
3
|
-
# Copyright (C) 2010-
|
3
|
+
# Copyright (C) 2010-2014 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
|
@@ -382,6 +382,10 @@ module BibTeX
|
|
382
382
|
self
|
383
383
|
end
|
384
384
|
|
385
|
+
def sort(*arguments, &block)
|
386
|
+
dup.sort!(*arguments, &block)
|
387
|
+
end
|
388
|
+
|
385
389
|
def sort_by!(*arguments, &block)
|
386
390
|
data.sort_by!(*arguments, &block)
|
387
391
|
self
|
@@ -412,7 +416,7 @@ module BibTeX
|
|
412
416
|
|
413
417
|
# Returns a JSON representation of the bibliography.
|
414
418
|
def to_json(options = {})
|
415
|
-
|
419
|
+
::JSON.dump(to_a(options))
|
416
420
|
end
|
417
421
|
|
418
422
|
# Returns a CiteProc JSON representation of the bibliography. Only BibTeX enrties are exported.
|
@@ -440,17 +444,11 @@ module BibTeX
|
|
440
444
|
# Returns an RDF::Graph representation of the bibliography. The graph
|
441
445
|
# can be serialized using any of the RDF serializer plugins.
|
442
446
|
def to_rdf(options = {})
|
443
|
-
|
444
|
-
|
445
|
-
|
446
|
-
|
447
|
-
q('@entry').each do |entry|
|
448
|
-
graph << entry.to_rdf(options)
|
447
|
+
if defined?(::RDF)
|
448
|
+
RDFConverter.convert(self)
|
449
|
+
else
|
450
|
+
BibTeX.log.error 'Please `gem install rdf` for RDF support.'
|
449
451
|
end
|
450
|
-
|
451
|
-
graph
|
452
|
-
rescue LoadError
|
453
|
-
BibTeX.log.error "Please gem install rdf for RDF support."
|
454
452
|
end
|
455
453
|
|
456
454
|
# call-seq:
|
@@ -0,0 +1,27 @@
|
|
1
|
+
class BibTeX::Bibliography::RDFConverter
|
2
|
+
# converts a BibTeX Bibliography to RDF
|
3
|
+
# @return [RDF::Graph] the RDF graph of the bibliography
|
4
|
+
def self.convert(bibtex)
|
5
|
+
new(bibtex).convert!
|
6
|
+
end
|
7
|
+
|
8
|
+
# @param [BibTeX::Entry] the bibliography to convert
|
9
|
+
def initialize(bibtex, graph = RDF::Graph.new)
|
10
|
+
@bibtex = bibtex
|
11
|
+
@graph = graph
|
12
|
+
@agent = {}
|
13
|
+
end
|
14
|
+
|
15
|
+
# @return [RDF::Graph] the RDF graph of this bibliography
|
16
|
+
def convert!
|
17
|
+
bibtex.q('@entry').each do |entry|
|
18
|
+
BibTeX::Entry::RDFConverter.convert(entry, graph, agent)
|
19
|
+
end
|
20
|
+
|
21
|
+
graph
|
22
|
+
end
|
23
|
+
|
24
|
+
private
|
25
|
+
|
26
|
+
attr_reader :bibtex, :graph, :agent
|
27
|
+
end
|
data/lib/bibtex/compatibility.rb
CHANGED
data/lib/bibtex/elements.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
#--
|
2
2
|
# BibTeX-Ruby
|
3
|
-
# Copyright (C) 2010-
|
3
|
+
# Copyright (C) 2010-2014 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
|
@@ -155,7 +155,7 @@ module BibTeX
|
|
155
155
|
# to this method.
|
156
156
|
options = {} unless options.is_a?(::Hash)
|
157
157
|
|
158
|
-
|
158
|
+
::JSON.dump(to_hash(options))
|
159
159
|
end
|
160
160
|
|
161
161
|
def to_xml(options = {})
|
data/lib/bibtex/entry.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
#--
|
2
2
|
# BibTeX-Ruby
|
3
|
-
# Copyright (C) 2010-
|
3
|
+
# Copyright (C) 2010-2014 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
|
@@ -65,79 +65,6 @@ module BibTeX
|
|
65
65
|
end
|
66
66
|
end
|
67
67
|
|
68
|
-
CSL_FILTER = Hash.new {|h,k|k}.merge(Hash[*%w{
|
69
|
-
date issued
|
70
|
-
isbn ISBN
|
71
|
-
booktitle container-title
|
72
|
-
journal container-title
|
73
|
-
series collection-title
|
74
|
-
address publisher-place
|
75
|
-
pages page
|
76
|
-
number issue
|
77
|
-
url URL
|
78
|
-
doi DOI
|
79
|
-
year issued
|
80
|
-
type genre
|
81
|
-
}.map(&:intern)]).freeze
|
82
|
-
|
83
|
-
CSL_FIELDS = %w{ abstract annote archive archive_location archive-place
|
84
|
-
authority call-number chapter-number citation-label citation-number
|
85
|
-
collection-title container-title DOI edition event event-place
|
86
|
-
first-reference-note-number genre ISBN issue jurisdiction keyword locator
|
87
|
-
medium note number number-of-pages number-of-volumes original-publisher
|
88
|
-
original-publisher-place original-title page page-first publisher
|
89
|
-
publisher-place references section status title URL version volume
|
90
|
-
year-suffix accessed container event-date issued original-date
|
91
|
-
author editor translator recipient interviewer publisher composer
|
92
|
-
original-publisher original-author container-author collection-editor
|
93
|
-
}.map(&:intern).freeze
|
94
|
-
|
95
|
-
CSL_TYPES = Hash.new {|h,k|k}.merge(Hash[*%w{
|
96
|
-
booklet pamphlet
|
97
|
-
conference paper-conference
|
98
|
-
inbook chapter
|
99
|
-
incollection chapter
|
100
|
-
inproceedings paper-conference
|
101
|
-
manual book
|
102
|
-
mastersthesis thesis
|
103
|
-
misc article
|
104
|
-
phdthesis thesis
|
105
|
-
proceedings paper-conference
|
106
|
-
techreport report
|
107
|
-
unpublished manuscript
|
108
|
-
article article-journal
|
109
|
-
}.map(&:intern)]).freeze
|
110
|
-
|
111
|
-
BIBO_FIELDS = Hash[*%w{
|
112
|
-
pages pages
|
113
|
-
number issue
|
114
|
-
isbn isbn
|
115
|
-
issn issn
|
116
|
-
doi doi
|
117
|
-
edition edition
|
118
|
-
abstract abstract
|
119
|
-
volume volume
|
120
|
-
}.map(&:intern)].freeze
|
121
|
-
|
122
|
-
BIBO_TYPES = Hash.new(:Document).merge(Hash[*%w{
|
123
|
-
booklet Book
|
124
|
-
book Book
|
125
|
-
conference Conference
|
126
|
-
inbook Article
|
127
|
-
incollection Article
|
128
|
-
inproceedings Article
|
129
|
-
manual Manual
|
130
|
-
mastersthesis Thesis
|
131
|
-
phdthesis Thesis
|
132
|
-
proceedings Proceedings
|
133
|
-
techreport Report
|
134
|
-
journal Journal
|
135
|
-
periodical Periodical
|
136
|
-
unpublished Manuscript
|
137
|
-
article Article
|
138
|
-
}.map(&:intern)]).freeze
|
139
|
-
|
140
|
-
|
141
68
|
attr_reader :fields, :type
|
142
69
|
|
143
70
|
def_delegators :@fields, :empty?
|
@@ -637,7 +564,8 @@ module BibTeX
|
|
637
564
|
|
638
565
|
# Returns true if this entry is published inside a book, collection or journal
|
639
566
|
def contained?
|
640
|
-
has_field?(:
|
567
|
+
has_field?(:container, :journal) ||
|
568
|
+
has_field?(:booktitle) && get(:booktitle) != get(:title)
|
641
569
|
end
|
642
570
|
|
643
571
|
# Returns an array containing the values associated with the given keys.
|
@@ -691,176 +619,24 @@ module BibTeX
|
|
691
619
|
end
|
692
620
|
|
693
621
|
def to_citeproc(options = {})
|
694
|
-
options
|
695
|
-
|
696
|
-
parse_names
|
697
|
-
parse_month
|
698
|
-
|
699
|
-
hash = {}
|
700
|
-
|
701
|
-
each_pair do |k,v|
|
702
|
-
hash[CSL_FILTER[k].to_s] = v.to_citeproc(options) unless DATE_FIELDS.include?(k)
|
703
|
-
end
|
704
|
-
|
705
|
-
hash['id'] = key.to_s
|
706
|
-
hash['type'] = CSL_TYPES[type].to_s
|
707
|
-
|
708
|
-
case type
|
709
|
-
when :mastersthesis
|
710
|
-
hash['genre'] = "Master's thesis"
|
711
|
-
when :phdthesis
|
712
|
-
hash['genre'] = 'PhD thesis'
|
713
|
-
else
|
714
|
-
# empty
|
715
|
-
end unless hash.key?('genre')
|
716
|
-
|
717
|
-
hash['issued'] = citeproc_date
|
718
|
-
|
719
|
-
hash
|
622
|
+
CiteProcConverter.convert(self, options)
|
720
623
|
end
|
721
624
|
|
722
|
-
def issued
|
723
|
-
return unless has_field?(:year)
|
724
|
-
|
725
|
-
parts = [fields[:year].to_s]
|
726
|
-
|
727
|
-
return { 'literal' => parts[0] } unless parts[0] =~ /^\d+$/
|
728
|
-
|
729
|
-
if has_field?(:month)
|
730
|
-
parts.push MONTHS.find_index(fields[:month].to_s.intern)
|
731
|
-
parts[1] = parts[1] + 1 unless parts[1].nil?
|
732
|
-
end
|
733
|
-
|
734
|
-
{ 'date-parts' => [parts.compact.map(&:to_i)] }
|
735
|
-
end
|
736
|
-
|
737
|
-
alias citeproc_date issued
|
738
|
-
|
739
625
|
def to_xml(options = {})
|
740
|
-
|
741
|
-
|
742
|
-
xml = REXML::Element.new('bibtex:entry')
|
743
|
-
xml.attributes['id'] = key
|
744
|
-
|
745
|
-
entry = REXML::Element.new("bibtex:#{type}")
|
746
|
-
|
747
|
-
fields.each do |key, value|
|
748
|
-
field = REXML::Element.new("bibtex:#{key}")
|
749
|
-
|
750
|
-
if options[:extended] && value.name?
|
751
|
-
value.each { |n| entry.add_element(n.to_xml) }
|
752
|
-
else
|
753
|
-
field.text = value.to_s(options)
|
754
|
-
end
|
755
|
-
|
756
|
-
entry.add_element(field)
|
757
|
-
end
|
758
|
-
|
759
|
-
xml.add_element(entry)
|
760
|
-
xml
|
626
|
+
BibTeXMLConverter.convert(self, options)
|
761
627
|
end
|
762
628
|
|
763
629
|
# Returns a RDF::Graph representation of the entry using the BIBO ontology.
|
764
|
-
# TODO: improve level of detail captured by export
|
765
630
|
def to_rdf(options = {})
|
766
|
-
|
767
|
-
|
768
|
-
|
769
|
-
|
770
|
-
graph = RDF::Graph.new
|
771
|
-
entry = RDF::URI.new(identifier)
|
772
|
-
|
773
|
-
graph << [entry, RDF.type, bibo[BIBO_TYPES[type]]]
|
774
|
-
|
775
|
-
[:title, :language].each do |key|
|
776
|
-
graph << [entry, RDF::DC[key], get(key).to_s] if field?(key)
|
777
|
-
end
|
778
|
-
|
779
|
-
graph << [entry, RDF::DC.date, get(:year).to_s] if field?(:year)
|
780
|
-
|
781
|
-
if field?(:publisher)
|
782
|
-
address = RDF::Vocabulary.new('http://schemas.talis.com/2005/address/schema#')
|
783
|
-
pub = RDF::Node.new
|
784
|
-
|
785
|
-
graph << [pub, RDF.type, RDF::FOAF[:Organization]]
|
786
|
-
graph << [pub, RDF::FOAF.name, get(:publisher)]
|
787
|
-
|
788
|
-
graph << [pub, address[:localityName], get(:address)] if field?(:address)
|
789
|
-
|
790
|
-
graph << [entry, RDF::DC.published, pub]
|
791
|
-
end
|
792
|
-
|
793
|
-
[:doi, :edition, :volume].each do |key|
|
794
|
-
graph << [entry, bibo[key], get(key).to_s] if field?(key)
|
795
|
-
end
|
796
|
-
|
797
|
-
if has_field?(:pages)
|
798
|
-
if get(:pages).to_s =~ /^\s*(\d+)\s*-+\s*(\d+)\s*$/
|
799
|
-
graph << [entry, bibo[:pageStart], $1]
|
800
|
-
graph << [entry, bibo[:pageEnd], $2]
|
801
|
-
else
|
802
|
-
graph << [entry, bibo[:pages], get(:pages).to_s]
|
803
|
-
end
|
804
|
-
end
|
805
|
-
|
806
|
-
if has_field?(:author)
|
807
|
-
seq = RDF::Node.new
|
808
|
-
|
809
|
-
graph << [seq, RDF.type, RDF[:Seq]]
|
810
|
-
graph << [entry, bibo[:authorList], seq]
|
811
|
-
|
812
|
-
authors.each do |author|
|
813
|
-
a = RDF::Node.new
|
814
|
-
|
815
|
-
graph << [a, RDF.type, RDF::FOAF[:Person]]
|
816
|
-
|
817
|
-
if author.is_a?(Name)
|
818
|
-
[:given, :family, :prefix, :suffix].each do |part|
|
819
|
-
graph << [a, bibo["#{part}Name"], author.send(part).to_s]
|
820
|
-
end
|
821
|
-
else
|
822
|
-
graph << [a, RDF::FOAF.name, author.to_s]
|
823
|
-
end
|
824
|
-
|
825
|
-
graph << [entry, RDF::DC.creator, a]
|
826
|
-
graph << [seq, RDF.li, a]
|
827
|
-
end
|
828
|
-
end
|
829
|
-
|
830
|
-
if has_field?(:editor)
|
831
|
-
seq = RDF::Node.new
|
832
|
-
|
833
|
-
graph << [seq, RDF.type, RDF[:Seq]]
|
834
|
-
graph << [entry, bibo[:editorList], seq]
|
835
|
-
|
836
|
-
editors.each do |editor|
|
837
|
-
e = RDF::Node.new
|
838
|
-
|
839
|
-
graph << [e, RDF.type, RDF::FOAF[:Person]]
|
840
|
-
|
841
|
-
if editor.is_a?(Name)
|
842
|
-
[:given, :family, :prefix, :suffix].each do |part|
|
843
|
-
graph << [e, bibo["#{part}Name"], editor.send(part).to_s]
|
844
|
-
end
|
845
|
-
else
|
846
|
-
graph << [e, RDF::FOAF.name, editor.to_s]
|
847
|
-
end
|
848
|
-
|
849
|
-
graph << [entry, bibo.editor, a]
|
850
|
-
graph << [seq, RDF.li, e]
|
851
|
-
end
|
631
|
+
if defined?(::RDF)
|
632
|
+
RDFConverter.convert(self)
|
633
|
+
else
|
634
|
+
BibTeX.log.error 'Please `gem install rdf` for RDF support.'
|
852
635
|
end
|
853
|
-
|
854
|
-
graph
|
855
|
-
rescue LoadError
|
856
|
-
BibTeX.log.error "Please gem install rdf for RDF support."
|
857
636
|
end
|
858
637
|
|
859
638
|
alias to_bibo to_rdf
|
860
639
|
|
861
|
-
|
862
|
-
|
863
|
-
|
864
640
|
private
|
865
641
|
|
866
642
|
# Returns a default key for this entry.
|