asciidoc-bib 2.4.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/LICENSE.txt +22 -0
- data/README.rdoc +102 -0
- data/bin/asciidoc-bib +16 -0
- data/changes.txt +39 -0
- data/lib/asciidoc-bib/citation.rb +25 -0
- data/lib/asciidoc-bib/citationdata.rb +33 -0
- data/lib/asciidoc-bib/citations.rb +43 -0
- data/lib/asciidoc-bib/citationutils.rb +54 -0
- data/lib/asciidoc-bib/extensions.rb +51 -0
- data/lib/asciidoc-bib/filehandlers.rb +33 -0
- data/lib/asciidoc-bib/options.rb +105 -0
- data/lib/asciidoc-bib/processor.rb +279 -0
- data/lib/asciidoc-bib/processorutils.rb +39 -0
- data/lib/asciidoc-bib/styles.rb +30 -0
- data/lib/asciidoc-bib/version.rb +4 -0
- data/lib/asciidoc-bib.rb +19 -0
- data/samples/biblio.bib +31 -0
- data/samples/sample-1.txt +23 -0
- data/samples/sample-2.txt +18 -0
- metadata +130 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 28a9a41d86ee2820dd4eae638d5b30eb367a01b6fba84db47f860725a7fecb8c
|
4
|
+
data.tar.gz: 9e59a842758e91db5c751bdffd4a25d60d079de9f791fdc20f9ea2c0aa3b5028
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: cfa817faad29f0fa5264cdbc8a750594a10c00ed76365aa266be98c8e38bbd3aa4d69f4f745a2eab524f5a14e233b921717d9c991cd77d425a575571fa1e47e6
|
7
|
+
data.tar.gz: 69a5837ccd61d00e2414b227484a57098c45de36c1eeba54f289fb1dbefae6c6555f7b39652072a0ad46482ef63553ce3ab47364008c46832ba044c2d32e5053
|
data/LICENSE.txt
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
MIT License
|
2
|
+
|
3
|
+
Copyright (c) 2019-20, Peter Lane
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
7
|
+
in the Software without restriction, including without limitation the rights
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
10
|
+
furnished to do so, subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
13
|
+
copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
21
|
+
SOFTWARE.
|
22
|
+
|
data/README.rdoc
ADDED
@@ -0,0 +1,102 @@
|
|
1
|
+
= asciidoc-bib
|
2
|
+
|
3
|
+
== Description
|
4
|
+
|
5
|
+
Adds references from a bibtex file to an asciidoc[http://asciidoc.org] file.
|
6
|
+
|
7
|
+
Features:
|
8
|
+
|
9
|
+
- simple syntax for adding a citation within text and placing bibliography
|
10
|
+
- formatting of references and reference list according to range of styles supported by citeproc-ruby
|
11
|
+
- supports some styling of citation text (page numbers, bracket placement, and pretext)
|
12
|
+
- multiple references within a single citation
|
13
|
+
- groups consecutive numeric references, e.g. [1,2,3] -> [1-3]
|
14
|
+
- transforms source text to include references and full reference list
|
15
|
+
|
16
|
+
(Note: for asciidoctor[https://asciidoctor.org], prefer
|
17
|
+
asciidoctor-bibtex[https://github.com/asciidoctor/asciidoctor-bibtex/].)
|
18
|
+
|
19
|
+
|
20
|
+
== Use
|
21
|
+
|
22
|
+
'asciidoc-bib' works by transforming an asciidoc document containing syntax
|
23
|
+
to include citations and a bibliography. The transformed document will
|
24
|
+
contain a complete reference and bibliography list where indicated, and
|
25
|
+
can then be processed further by asciidoc's toolchain to produce a completed
|
26
|
+
document.
|
27
|
+
|
28
|
+
Styles must be one of those supported by CSL[https://github.com/citation-style-language/styles].
|
29
|
+
|
30
|
+
=== Include a citation
|
31
|
+
|
32
|
+
Syntax for inserting a citation is [cite|citenp:(pretext:)ref(,pages)]
|
33
|
+
where 'pretext' and 'pages' are optional. The ref and optional pages may
|
34
|
+
be repeated multiple times, separated by ';'. A citation _must_ be
|
35
|
+
complete on a single line of text.
|
36
|
+
|
37
|
+
Examples of +chicago-author-date+ style:
|
38
|
+
|
39
|
+
[[cite:Lane12]] becomes "(Lane 2012)"
|
40
|
+
|
41
|
+
[[citenp:Lane12]] becomes "Lane (2012)"
|
42
|
+
|
43
|
+
[[cite:Lane12,59]] becomes "(Lane 2012, 59)"
|
44
|
+
|
45
|
+
[[cite:See:Lane12,59]] becomes "(See Lane 2012, 59)"
|
46
|
+
|
47
|
+
[[cite:See:Lane12,59;Lane11]] becomes "(See Lane 2012, 59; Lane 2011)"
|
48
|
+
|
49
|
+
For +apa+ (Harvard-like) style:
|
50
|
+
|
51
|
+
[[cite:Lane12]] becomes "(Lane, 2012)"
|
52
|
+
|
53
|
+
[[citenp:Lane12]] becomes "Lane (2012)"
|
54
|
+
|
55
|
+
[[cite:Lane12,59]] becomes "(Lane, 2012, p.59)"
|
56
|
+
|
57
|
+
For +ieee+, a numeric style:
|
58
|
+
|
59
|
+
[[cite:Lane12;Lane11]] becomes "[1, 2]"
|
60
|
+
|
61
|
+
[[cite:See:Lane12,59;Lane11]] becomes "See [1 p.59, 2]"
|
62
|
+
|
63
|
+
=== Place bibliography in text
|
64
|
+
|
65
|
+
[[bibliography]] on a line by itself.
|
66
|
+
|
67
|
+
=== Processing text
|
68
|
+
|
69
|
+
> asciidoc-bib filename.txt
|
70
|
+
|
71
|
+
Looks for a bib file in current folder and in ~/Documents.
|
72
|
+
|
73
|
+
Outputs a new file: filename-ref.txt
|
74
|
+
which includes your references.
|
75
|
+
|
76
|
+
Check the new file, and process in the usual way with asciidoc.
|
77
|
+
|
78
|
+
Command-line options:
|
79
|
+
|
80
|
+
> asciidoc-bib -h
|
81
|
+
Usage: asciidoc-bib filename
|
82
|
+
-h, --help help message
|
83
|
+
-b, --bibfile FILE location of bib file
|
84
|
+
-n, --no-links do not add internal links
|
85
|
+
--numeric-alphabetic-order
|
86
|
+
sort numeric styles in alphabetical order (DEFAULT)
|
87
|
+
--numeric-appearance-order
|
88
|
+
sort numeric styles in order of appearance
|
89
|
+
-s, --style STYLE reference style
|
90
|
+
-v, --version show version
|
91
|
+
|
92
|
+
All styles available through CSL are supported.
|
93
|
+
The default style is 'apa'.
|
94
|
+
|
95
|
+
|
96
|
+
== Notes
|
97
|
+
|
98
|
+
If you make a Bibliography/Reference heading, a2x interprets this specially,
|
99
|
+
and will fail to make a pdf. To prevent a2x treating a heading specially, place
|
100
|
+
a section template name, [sect1], before it.
|
101
|
+
|
102
|
+
|
data/bin/asciidoc-bib
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
# Executable for asciidoc-bib
|
4
|
+
#
|
5
|
+
# Provides some command line options for adding reference material
|
6
|
+
# to asciidoc files, generating revised files for processing by
|
7
|
+
# asciidoc.
|
8
|
+
#
|
9
|
+
|
10
|
+
unless $:.include?(libdir = File.expand_path('../lib', File.dirname(__FILE__)))
|
11
|
+
$:.unshift libdir
|
12
|
+
end
|
13
|
+
require 'asciidoc-bib'
|
14
|
+
|
15
|
+
options = AsciidocBib::Options.new
|
16
|
+
AsciidocBib::Processor.run options
|
data/changes.txt
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
= Changes to asciidoc-bib
|
2
|
+
|
3
|
+
== version 2.4.4
|
4
|
+
|
5
|
+
- confirm works with ruby 3.0-preview
|
6
|
+
|
7
|
+
== version 2.4.3
|
8
|
+
|
9
|
+
- update tests to support minitest 5.13
|
10
|
+
- confirm works with ruby 2.7
|
11
|
+
- updated documentation to most classes
|
12
|
+
|
13
|
+
== version 2.4.2
|
14
|
+
|
15
|
+
- updated documentation
|
16
|
+
- removed all OWL license references
|
17
|
+
- removed all asciidoctor references
|
18
|
+
|
19
|
+
== version 2.4.1
|
20
|
+
|
21
|
+
- changed license to MIT
|
22
|
+
|
23
|
+
== version 2.4.0
|
24
|
+
|
25
|
+
- removed asciidoctor references
|
26
|
+
|
27
|
+
== github version
|
28
|
+
|
29
|
+
- accepted dash inside citation keys
|
30
|
+
|
31
|
+
== version 2.3.1
|
32
|
+
|
33
|
+
- now works with asciidoctor 1.5 api
|
34
|
+
|
35
|
+
== version 2.3.0
|
36
|
+
|
37
|
+
- added switch for order of numeric citations in bibliography, with choice of
|
38
|
+
order of appearance or alphabetical order
|
39
|
+
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module AsciidocBib
|
2
|
+
|
3
|
+
# Holds information about a single citation:
|
4
|
+
# its reference and any page numbers
|
5
|
+
class Citation
|
6
|
+
# Reference for a citation
|
7
|
+
attr_reader :ref
|
8
|
+
# Page numbers
|
9
|
+
attr_reader :pages
|
10
|
+
|
11
|
+
# Construct instance of citation, from a reference and definition of page numbers.
|
12
|
+
def initialize ref, pages
|
13
|
+
@ref = ref
|
14
|
+
@pages = pages
|
15
|
+
# clean up pages
|
16
|
+
@pages = '' unless @pages
|
17
|
+
@pages.gsub!("--","-")
|
18
|
+
end
|
19
|
+
|
20
|
+
def to_s
|
21
|
+
"#{@ref}:#{@pages}"
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module AsciidocBib
|
2
|
+
|
3
|
+
# Holds information about a citation in text:
|
4
|
+
# the text forming the citation, its type, pretext, and enclosed cites.
|
5
|
+
#
|
6
|
+
# For example, the citation: "[cite:See:Lane12,59;Lane11]"
|
7
|
+
# * original: "[cite:See:Lane12,59;Lane11]"
|
8
|
+
# * type: "cite"
|
9
|
+
# * pretext: "See"
|
10
|
+
# * cites: [Citation{ref="Lane12",pages="59"}, Citation{ref="Lane11",pages=""} ]
|
11
|
+
#
|
12
|
+
class CitationData
|
13
|
+
# Original text defining this set of citations.
|
14
|
+
attr_reader :original
|
15
|
+
# The type of citation (e.g. 'cite', 'citenp').
|
16
|
+
attr_reader :type
|
17
|
+
# Any pretext given for the citation (e.g. 'See').
|
18
|
+
attr_reader :pretext
|
19
|
+
# List of Citation instances, defining each cite.
|
20
|
+
attr_reader :cites
|
21
|
+
|
22
|
+
def initialize original, type, pretext, cites
|
23
|
+
@original = original
|
24
|
+
@type = type
|
25
|
+
@pretext = if pretext.nil?
|
26
|
+
''
|
27
|
+
else
|
28
|
+
pretext
|
29
|
+
end
|
30
|
+
@cites = cites
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
module AsciidocBib
|
2
|
+
|
3
|
+
# Stores list of citations used in document.
|
4
|
+
#
|
5
|
+
class Citations
|
6
|
+
include CitationUtils
|
7
|
+
|
8
|
+
# List of citations.
|
9
|
+
attr_reader :cites_used
|
10
|
+
|
11
|
+
def initialize
|
12
|
+
@cites_used = []
|
13
|
+
end
|
14
|
+
|
15
|
+
# Given a line of text, extract any citations and
|
16
|
+
# include new citation references in current list.
|
17
|
+
def add_from_line line
|
18
|
+
retrieve_citations(line).each do |citation|
|
19
|
+
@cites_used += citation.cites.collect {|cite| cite.ref}
|
20
|
+
end
|
21
|
+
@cites_used.uniq! {|item| item.to_s} # only keep each reference once
|
22
|
+
end
|
23
|
+
|
24
|
+
# Return a list of citation references in document, sorted into order.
|
25
|
+
def sorted_cites biblio
|
26
|
+
@cites_used.sort_by do |ref|
|
27
|
+
bibitem = biblio[ref]
|
28
|
+
|
29
|
+
unless bibitem.nil?
|
30
|
+
# extract the reference, and uppercase.
|
31
|
+
# Remove { } from grouped names for sorting.
|
32
|
+
author = bibitem.author
|
33
|
+
if author.nil?
|
34
|
+
author = bibitem.editor
|
35
|
+
end
|
36
|
+
author_chicago(author).collect {|s| s.upcase.gsub("{","").gsub("}","")} + [bibitem.year]
|
37
|
+
else
|
38
|
+
[ref]
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
module AsciidocBib
|
2
|
+
|
3
|
+
# Some utility functions used in Citations class
|
4
|
+
module CitationUtils
|
5
|
+
|
6
|
+
# Given a line, return a list of CitationData instances
|
7
|
+
# containing information on each set of citation information.
|
8
|
+
def retrieve_citations line
|
9
|
+
result = []
|
10
|
+
md = CITATION_FULL.match line
|
11
|
+
while md
|
12
|
+
data = CitationData.new md[0], md[1], md[3], []
|
13
|
+
cm = CITATION.match md[4]
|
14
|
+
while cm
|
15
|
+
data.cites << Citation.new(cm[1], cm[3])
|
16
|
+
# look for next ref within citation
|
17
|
+
cm = CITATION.match cm.post_match
|
18
|
+
end
|
19
|
+
result << data
|
20
|
+
# look for next citation on line
|
21
|
+
md = CITATION_FULL.match md.post_match
|
22
|
+
end
|
23
|
+
|
24
|
+
return result
|
25
|
+
end
|
26
|
+
|
27
|
+
# Arrange author string, flag for order of surname/initials.
|
28
|
+
def arrange_authors authors, surname_first
|
29
|
+
return [] if authors.nil?
|
30
|
+
authors.split(/\band\b/).collect do |name|
|
31
|
+
if name.include?(", ")
|
32
|
+
parts = name.strip.rpartition(", ")
|
33
|
+
if surname_first
|
34
|
+
"#{parts.first}, #{parts.third}"
|
35
|
+
else
|
36
|
+
"#{parts.third} #{parts.first}"
|
37
|
+
end
|
38
|
+
else
|
39
|
+
name
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
# Arrange given author string into Chicago format.
|
45
|
+
def author_chicago authors
|
46
|
+
arrange_authors authors, true
|
47
|
+
end
|
48
|
+
|
49
|
+
# matches a single ref with optional pages
|
50
|
+
CITATION = /([\w\-]+)(,([\w\.\- ]+))?/
|
51
|
+
# matches complete citation with multiple references
|
52
|
+
CITATION_FULL = /\[(cite|citenp):(([\w\-\;\!\? ]+):)?(#{CITATION}(;#{CITATION})*)\]/
|
53
|
+
end
|
54
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
# Two methods are added to extend the Array class.
|
2
|
+
#
|
3
|
+
class Array
|
4
|
+
|
5
|
+
# Retrieve the third item of an array
|
6
|
+
# Note: no checks for validity
|
7
|
+
def third
|
8
|
+
self[2]
|
9
|
+
end
|
10
|
+
|
11
|
+
# Join items in array using commas and 'and' on last item
|
12
|
+
def comma_and_join
|
13
|
+
if size < 2
|
14
|
+
return self.join("")
|
15
|
+
end
|
16
|
+
result = ""
|
17
|
+
self.each_with_index do |item, index|
|
18
|
+
if index.zero?
|
19
|
+
result << item
|
20
|
+
elsif index == size-1
|
21
|
+
result << " and #{item}"
|
22
|
+
else
|
23
|
+
result << ", #{item}"
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
return result
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
|
32
|
+
# Two methods are added to extend the String class.
|
33
|
+
class String
|
34
|
+
|
35
|
+
# Converts html output produced by citeproc to asciidoc markup.
|
36
|
+
def html_to_asciidoc
|
37
|
+
r = self.gsub(/<\/?i>/, '_')
|
38
|
+
r = r.gsub(/<\/?b>/, '*')
|
39
|
+
r = r.gsub(/<\/?span.*?>/, '')
|
40
|
+
r = r.gsub(/\{|\}/, '')
|
41
|
+
r
|
42
|
+
end
|
43
|
+
|
44
|
+
# Provides a check that a string is in integer.
|
45
|
+
# Taken from:
|
46
|
+
# http://stackoverflow.com/questions/1235863/test-if-a-string-is-basically-an-integer-in-quotes-using-ruby
|
47
|
+
def is_i?
|
48
|
+
!!(self =~ /^[-+]?[0-9]+$/)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module AsciidocBib
|
2
|
+
|
3
|
+
#
|
4
|
+
# Utility methods for working with the files.
|
5
|
+
#
|
6
|
+
module FileHandlers
|
7
|
+
|
8
|
+
# Locate a bibliography file (*.bib) to read in given _directory_.
|
9
|
+
# Returns "" if any error or no file found.
|
10
|
+
def FileHandlers.find_bibliography dir
|
11
|
+
begin
|
12
|
+
candidates = Dir.glob("#{dir}/*.bib")
|
13
|
+
if candidates.empty?
|
14
|
+
return ""
|
15
|
+
else
|
16
|
+
return candidates.first
|
17
|
+
end
|
18
|
+
rescue # catch all errors, and return empty string
|
19
|
+
return ""
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
# Add '-ref' before the extension of a given _filename_,
|
24
|
+
# returning full path of new filename.
|
25
|
+
def FileHandlers.add_ref filename
|
26
|
+
file_dir = File.dirname(File.expand_path(filename))
|
27
|
+
file_base = File.basename(filename, ".*")
|
28
|
+
file_ext = File.extname(filename)
|
29
|
+
return "#{file_dir}#{File::SEPARATOR}#{file_base}-ref#{file_ext}"
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
@@ -0,0 +1,105 @@
|
|
1
|
+
require 'optparse'
|
2
|
+
|
3
|
+
module AsciidocBib
|
4
|
+
|
5
|
+
# Class to read in asciidoc-bib options from command-line, and
|
6
|
+
# store results in an accessible form.
|
7
|
+
#
|
8
|
+
class Options
|
9
|
+
# Location of bib file to read references from.
|
10
|
+
attr_reader :bibfile
|
11
|
+
# Location of file to process.
|
12
|
+
attr_reader :filename
|
13
|
+
# Flag to indicate if links should be included.
|
14
|
+
attr_reader :links
|
15
|
+
# Name of style to use for displaying citations and references.
|
16
|
+
attr_reader :style
|
17
|
+
|
18
|
+
# Sets up options for the program, including:
|
19
|
+
# * location of bib file
|
20
|
+
# * whether internal links should be added
|
21
|
+
# * sorting of references
|
22
|
+
# * style of references
|
23
|
+
# * name of file to process
|
24
|
+
#
|
25
|
+
def initialize(program_name = 'asciidoc-bib')
|
26
|
+
@bibfile = ''
|
27
|
+
@links = true
|
28
|
+
@numeric_order = :alphabetical
|
29
|
+
@style = AsciidocBib::Styles.default_style
|
30
|
+
|
31
|
+
options = OptionParser.new do |opts|
|
32
|
+
opts.banner = "Usage: #{program_name} filename"
|
33
|
+
opts.on("-h", "--help", "help message") do |v|
|
34
|
+
puts "#{program_name} #{AsciidocBib::VERSION}"
|
35
|
+
puts
|
36
|
+
puts options
|
37
|
+
puts
|
38
|
+
puts "All styles available through CSL are supported."
|
39
|
+
puts "The default style is 'apa'."
|
40
|
+
exit!
|
41
|
+
end
|
42
|
+
opts.on("-b", "--bibfile FILE", "location of bib file") do |v|
|
43
|
+
@bibfile = v
|
44
|
+
end
|
45
|
+
opts.on("-n", "--no-links", "do not add internal links") do |v|
|
46
|
+
@links = false
|
47
|
+
end
|
48
|
+
opts.on('', '--numeric-alphabetic-order', 'sort numeric styles in alphabetical order (DEFAULT)') do |v|
|
49
|
+
@numeric_order = :alphabetical
|
50
|
+
end
|
51
|
+
opts.on('', '--numeric-appearance-order', 'sort numeric styles in order of appearance') do |v|
|
52
|
+
@numeric_order = :appearance
|
53
|
+
end
|
54
|
+
opts.on("-s", "--style STYLE", "reference style") do |v|
|
55
|
+
@style = v
|
56
|
+
end
|
57
|
+
opts.on("-v", "--version", "show version") do |v|
|
58
|
+
puts "#{program_name} version #{AsciidocBib::VERSION}"
|
59
|
+
exit!
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
begin
|
64
|
+
options.parse!
|
65
|
+
rescue
|
66
|
+
puts options
|
67
|
+
exit!
|
68
|
+
end
|
69
|
+
|
70
|
+
# unless specified by caller, try to find the bibliography
|
71
|
+
if @bibfile.empty?
|
72
|
+
@bibfile = AsciidocBib::FileHandlers.find_bibliography "."
|
73
|
+
if @bibfile.empty?
|
74
|
+
@bibfile = AsciidocBib::FileHandlers.find_bibliography "#{ENV['HOME']}/Documents"
|
75
|
+
end
|
76
|
+
end
|
77
|
+
if @bibfile.empty?
|
78
|
+
puts "Error: could not find a bibliography file"
|
79
|
+
exit
|
80
|
+
end
|
81
|
+
unless AsciidocBib::Styles.valid? @style
|
82
|
+
puts "Error: style #{@style} was not one of the available styles"
|
83
|
+
exit
|
84
|
+
end
|
85
|
+
|
86
|
+
if ARGV.length == 1
|
87
|
+
@filename = ARGV[0]
|
88
|
+
else
|
89
|
+
puts "Error: a single file to convert must be given"
|
90
|
+
exit
|
91
|
+
end
|
92
|
+
|
93
|
+
puts "Reading biblio: #{@bibfile}"
|
94
|
+
puts "Reference style: #{@style}"
|
95
|
+
end
|
96
|
+
|
97
|
+
# Convenience method to check @numeric_order.
|
98
|
+
# This is used in place of making the @numeric_order field visible
|
99
|
+
# to external classes.
|
100
|
+
def numeric_in_appearance_order?
|
101
|
+
@numeric_order == :appearance
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
@@ -0,0 +1,279 @@
|
|
1
|
+
module AsciidocBib
|
2
|
+
|
3
|
+
# Class used through utility method to hold data about citations for
|
4
|
+
# current document, and run the different steps to add the citations
|
5
|
+
# and bibliography.
|
6
|
+
#
|
7
|
+
class Processor
|
8
|
+
include ProcessorUtils
|
9
|
+
|
10
|
+
# Top-level method to include citations in given asciidoc file.
|
11
|
+
def Processor.run options
|
12
|
+
processor = Processor.new BibTeX.open(options.bibfile), options.links, options.style, options.numeric_in_appearance_order?
|
13
|
+
processor.read_filenames options.filename
|
14
|
+
processor.read_citations
|
15
|
+
processor.add_citations
|
16
|
+
end
|
17
|
+
|
18
|
+
# The BibTeX instance based on the provided .bib file.
|
19
|
+
attr_reader :biblio
|
20
|
+
# Flag to indicate if links should be included, as set in options.
|
21
|
+
attr_reader :links
|
22
|
+
# Citation style, as set in options.
|
23
|
+
attr_reader :style
|
24
|
+
# List of citations as read in from the file.
|
25
|
+
attr_reader :citations
|
26
|
+
|
27
|
+
def initialize biblio, links, style, numeric_in_appearance_order = false
|
28
|
+
@biblio = biblio
|
29
|
+
@links = links
|
30
|
+
@numeric_in_appearance_order = numeric_in_appearance_order
|
31
|
+
@style = style
|
32
|
+
@citations = Citations.new
|
33
|
+
@filenames = Set.new
|
34
|
+
|
35
|
+
@citeproc = CiteProc::Processor.new style: @style, format: :html
|
36
|
+
@citeproc.import @biblio.to_citeproc
|
37
|
+
end
|
38
|
+
|
39
|
+
# Given an asciidoc filename, reads in all dependent files based on 'include::' statements
|
40
|
+
# Leaving a list of files in @filenames
|
41
|
+
def read_filenames filename
|
42
|
+
puts "Reading file: #{filename}"
|
43
|
+
files_to_process = [filename]
|
44
|
+
|
45
|
+
begin
|
46
|
+
@filenames.add files_to_process.first
|
47
|
+
File.new(files_to_process.shift).each_line do |line|
|
48
|
+
if line.include?("include::")
|
49
|
+
line.split("include::").drop(1).each do |filetxt|
|
50
|
+
file = File.expand_path(filetxt.partition(/\s|\[/).first)
|
51
|
+
files_to_process << file unless @filenames.include?(file)
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end until files_to_process.empty?
|
56
|
+
end
|
57
|
+
|
58
|
+
# Scans each filename and extracts citations
|
59
|
+
def read_citations
|
60
|
+
@filenames.each do |file|
|
61
|
+
IO.foreach(file) do |line|
|
62
|
+
@citations.add_from_line line
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
# Read given text to add cites and biblio to a new file
|
68
|
+
# Order is always decided by author surname first with year.
|
69
|
+
# If no author present, then use editor field.
|
70
|
+
# Links indicates if internal links to be added.
|
71
|
+
# Assumes @filenames has been set to list of filenames to process.
|
72
|
+
def add_citations
|
73
|
+
@filenames.each do |curr_file|
|
74
|
+
ref_filename = FileHandlers.add_ref(curr_file)
|
75
|
+
puts "Writing file: #{ref_filename}"
|
76
|
+
output = File.new(ref_filename, "w")
|
77
|
+
|
78
|
+
IO.foreach(curr_file) do |line|
|
79
|
+
begin # catch any errors, and ensure the lines of text are written
|
80
|
+
case
|
81
|
+
when line.include?('include::')
|
82
|
+
output_include_line output, line
|
83
|
+
when line.include?('[bibliography]')
|
84
|
+
output_bibliography output
|
85
|
+
else
|
86
|
+
output_cite_completed_line output, line
|
87
|
+
end
|
88
|
+
rescue # Any errors, just output the line
|
89
|
+
output.puts line
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
output.close
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
# Output bibliography to given output stream.
|
98
|
+
def output_bibliography output
|
99
|
+
cites = if Styles.is_numeric?(@style) and @numeric_in_appearance_order
|
100
|
+
@citations.cites_used
|
101
|
+
else
|
102
|
+
sorted_cites
|
103
|
+
end
|
104
|
+
cites.each do |ref|
|
105
|
+
output.puts get_reference(ref)
|
106
|
+
output.puts
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
# Handles a line of text which includes another file.
|
111
|
+
# The included file must be redirected to reference the -ref version,
|
112
|
+
# the one which includes any expanded citations.
|
113
|
+
def output_include_line output, line
|
114
|
+
line.split("include::").drop(1).each do |filetxt|
|
115
|
+
ifile = filetxt.partition(/\s|\[/).first
|
116
|
+
file = File.expand_path ifile
|
117
|
+
# make sure included file points to the -ref version
|
118
|
+
line.gsub!("include::#{ifile}", "include::#{FileHandlers.add_ref(file)}")
|
119
|
+
end
|
120
|
+
output.puts line
|
121
|
+
end
|
122
|
+
|
123
|
+
# For each citation in given line, expand into complete citation text
|
124
|
+
# before outputting the line
|
125
|
+
def output_cite_completed_line output, line
|
126
|
+
@citations.retrieve_citations(line).each do |citation|
|
127
|
+
line.gsub!(citation.original, complete_citation(citation))
|
128
|
+
end
|
129
|
+
output.puts line
|
130
|
+
end
|
131
|
+
|
132
|
+
# Return the complete citation text for given cite_data.
|
133
|
+
def complete_citation cite_data
|
134
|
+
result = ''
|
135
|
+
ob, cb = '(', ')'
|
136
|
+
|
137
|
+
cite_data.cites.each_with_index do |cite, index|
|
138
|
+
# before all items apart from the first, insert appropriate separator
|
139
|
+
result << "#{separator} " unless index.zero?
|
140
|
+
|
141
|
+
# @links requires adding hyperlink to reference
|
142
|
+
result << "<<#{cite.ref}," if @links
|
143
|
+
|
144
|
+
# if found, insert reference information
|
145
|
+
unless biblio[cite.ref].nil?
|
146
|
+
item = biblio[cite.ref].clone
|
147
|
+
cite_text, ob, cb = make_citation item, cite.ref, cite_data, cite
|
148
|
+
else
|
149
|
+
puts "Unknown reference: #{cite.ref}"
|
150
|
+
cite_text = "#{cite.ref}"
|
151
|
+
end
|
152
|
+
|
153
|
+
result << cite_text.html_to_asciidoc
|
154
|
+
# @links requires finish hyperlink
|
155
|
+
result << ">>" if @links
|
156
|
+
end
|
157
|
+
|
158
|
+
unless @links
|
159
|
+
# combine numeric ranges
|
160
|
+
if Styles.is_numeric? @style
|
161
|
+
result = combine_consecutive_numbers result
|
162
|
+
end
|
163
|
+
end
|
164
|
+
|
165
|
+
include_pretext result, cite_data, ob, cb
|
166
|
+
end
|
167
|
+
|
168
|
+
# Retrieve text for reference in given style.
|
169
|
+
# ref:: reference for item to give reference for
|
170
|
+
def get_reference ref
|
171
|
+
result = ""
|
172
|
+
result << ". " if Styles.is_numeric? @style
|
173
|
+
|
174
|
+
begin
|
175
|
+
cptext = @citeproc.render :bibliography, id: ref
|
176
|
+
rescue Exception => e
|
177
|
+
puts "Failed to render #{id}: #{e}"
|
178
|
+
end
|
179
|
+
result << "[[#{ref}]]" if @links
|
180
|
+
if cptext.nil?
|
181
|
+
return result+ref
|
182
|
+
else
|
183
|
+
result << cptext.first
|
184
|
+
end
|
185
|
+
|
186
|
+
return result.html_to_asciidoc
|
187
|
+
end
|
188
|
+
|
189
|
+
# Return the appropriate separator, depending on the current style.
|
190
|
+
def separator
|
191
|
+
if Styles.is_numeric? @style
|
192
|
+
','
|
193
|
+
else
|
194
|
+
';'
|
195
|
+
end
|
196
|
+
end
|
197
|
+
|
198
|
+
# Format pages with pp/p as appropriate.
|
199
|
+
def with_pp pages
|
200
|
+
return '' if pages.empty?
|
201
|
+
|
202
|
+
if @style.include? "chicago"
|
203
|
+
pages
|
204
|
+
elsif pages.include? '-'
|
205
|
+
"pp. #{pages}"
|
206
|
+
else
|
207
|
+
"p. #{pages}"
|
208
|
+
end
|
209
|
+
end
|
210
|
+
|
211
|
+
# Return page string for given _cite_.
|
212
|
+
def page_str cite
|
213
|
+
result = ''
|
214
|
+
unless cite.pages.empty?
|
215
|
+
result << "," unless Styles.is_numeric? @style
|
216
|
+
result << " #{with_pp(cite.pages)}"
|
217
|
+
end
|
218
|
+
|
219
|
+
return result
|
220
|
+
end
|
221
|
+
|
222
|
+
# The pretext is the message such as "See" given in the original citation.
|
223
|
+
# This method includes the pretext as appropriate, depending on the
|
224
|
+
# style and citation type.
|
225
|
+
def include_pretext result, cite_data, ob, cb
|
226
|
+
pretext = cite_data.pretext
|
227
|
+
pretext += ' ' unless pretext.empty? # add space after any content
|
228
|
+
|
229
|
+
if Styles.is_numeric? @style
|
230
|
+
"#{pretext}#{ob}#{result}#{cb}"
|
231
|
+
elsif cite_data.type == "cite"
|
232
|
+
"#{ob}#{pretext}#{result}#{cb}"
|
233
|
+
else
|
234
|
+
"#{pretext}#{result}"
|
235
|
+
end
|
236
|
+
end
|
237
|
+
|
238
|
+
# Numeric citations are handled by computing the position of the reference
|
239
|
+
# in the list of used citations.
|
240
|
+
# Other citations are formatted by citeproc.
|
241
|
+
def make_citation item, ref, cite_data, cite
|
242
|
+
if Styles.is_numeric? @style
|
243
|
+
cite_text = if @numeric_in_appearance_order
|
244
|
+
"#{@citations.cites_used.index(cite.ref) + 1}"
|
245
|
+
else
|
246
|
+
"#{sorted_cites.index(cite.ref) + 1}"
|
247
|
+
end
|
248
|
+
fc = '['
|
249
|
+
lc = ']'
|
250
|
+
else
|
251
|
+
cite_text = @citeproc.process id: ref, mode: :citation
|
252
|
+
|
253
|
+
fc = cite_text[0,1]
|
254
|
+
lc = cite_text[-1,1]
|
255
|
+
cite_text = cite_text[1..-2]
|
256
|
+
end
|
257
|
+
|
258
|
+
if Styles.is_numeric? @style
|
259
|
+
cite_text << "#{page_str(cite)}"
|
260
|
+
elsif cite_data.type == "citenp"
|
261
|
+
cite_text.gsub!(item.year, "#{fc}#{item.year}#{page_str(cite)}#{lc}")
|
262
|
+
cite_text.gsub!(", #{fc}", " #{fc}")
|
263
|
+
else
|
264
|
+
cite_text << page_str(cite)
|
265
|
+
end
|
266
|
+
|
267
|
+
cite_text.gsub!(",", ",") if @links # replace comma
|
268
|
+
|
269
|
+
return cite_text, fc, lc
|
270
|
+
end
|
271
|
+
|
272
|
+
# Return the list of sorted citations.
|
273
|
+
def sorted_cites
|
274
|
+
@citations.sorted_cites @biblio
|
275
|
+
end
|
276
|
+
end
|
277
|
+
end
|
278
|
+
|
279
|
+
|
@@ -0,0 +1,39 @@
|
|
1
|
+
module AsciidocBib
|
2
|
+
|
3
|
+
module ProcessorUtils
|
4
|
+
|
5
|
+
# Used with numeric styles to combine consecutive numbers into ranges
|
6
|
+
#
|
7
|
+
# combine_consecutive_numbers("1,2,3") # -> "1-3"
|
8
|
+
# combine_consecutive_numbers("1,2,3,6,7,8,9,12") # -> "1-3,6-9,12"
|
9
|
+
#
|
10
|
+
# Leaves references with page numbers alone.
|
11
|
+
#
|
12
|
+
def combine_consecutive_numbers str
|
13
|
+
nums = str.split(",").collect(&:strip)
|
14
|
+
res = ""
|
15
|
+
# Loop through ranges
|
16
|
+
start_range = 0
|
17
|
+
while start_range < nums.length do
|
18
|
+
end_range = start_range
|
19
|
+
while (end_range < nums.length-1 and
|
20
|
+
nums[end_range].is_i? and
|
21
|
+
nums[end_range+1].is_i? and
|
22
|
+
nums[end_range+1].to_i == nums[end_range].to_i + 1) do
|
23
|
+
end_range += 1
|
24
|
+
end
|
25
|
+
if end_range - start_range >= 2
|
26
|
+
res += "#{nums[start_range]}-#{nums[end_range]}, "
|
27
|
+
else
|
28
|
+
start_range.upto(end_range) do |i|
|
29
|
+
res += "#{nums[i]}, "
|
30
|
+
end
|
31
|
+
end
|
32
|
+
start_range = end_range + 1
|
33
|
+
end
|
34
|
+
# finish by removing last comma
|
35
|
+
res.gsub(/, $/, '')
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module AsciidocBib
|
2
|
+
|
3
|
+
#
|
4
|
+
# Simple checks on available styles through CSL
|
5
|
+
#
|
6
|
+
module Styles
|
7
|
+
|
8
|
+
# Returns a list of available styles.
|
9
|
+
def Styles.available
|
10
|
+
CSL::Style.ls
|
11
|
+
end
|
12
|
+
|
13
|
+
# Retrieves a default style, here set to 'apa'.
|
14
|
+
def Styles.default_style
|
15
|
+
'apa'
|
16
|
+
end
|
17
|
+
|
18
|
+
# Checks if a given style (as input by user) is available in CSL.
|
19
|
+
def Styles.valid? style
|
20
|
+
Styles.available.include? style
|
21
|
+
end
|
22
|
+
|
23
|
+
# Checks if given style is a numeric style,
|
24
|
+
# i.e. one that uses numeric references.
|
25
|
+
def Styles.is_numeric? style
|
26
|
+
CSL::Style.load(style).citation_format == :numeric
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
data/lib/asciidoc-bib.rb
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
# asciidoc-bib.rb
|
2
|
+
#
|
3
|
+
|
4
|
+
require 'bibtex'
|
5
|
+
require 'citeproc'
|
6
|
+
require 'csl/styles'
|
7
|
+
require 'set'
|
8
|
+
|
9
|
+
require 'asciidoc-bib/citation'
|
10
|
+
require 'asciidoc-bib/citationdata'
|
11
|
+
require 'asciidoc-bib/citationutils'
|
12
|
+
require 'asciidoc-bib/citations'
|
13
|
+
require 'asciidoc-bib/extensions'
|
14
|
+
require 'asciidoc-bib/filehandlers'
|
15
|
+
require 'asciidoc-bib/options'
|
16
|
+
require 'asciidoc-bib/processorutils'
|
17
|
+
require 'asciidoc-bib/processor'
|
18
|
+
require 'asciidoc-bib/styles'
|
19
|
+
require 'asciidoc-bib/version'
|
data/samples/biblio.bib
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
@book{Lane12a,
|
2
|
+
author = {P. Lane},
|
3
|
+
title = {Book title},
|
4
|
+
publisher = {Publisher},
|
5
|
+
year = {2000}
|
6
|
+
}
|
7
|
+
|
8
|
+
@book{Lane12b,
|
9
|
+
author = {P. Lane and D. Smith},
|
10
|
+
title = {Book title},
|
11
|
+
publisher = {Publisher},
|
12
|
+
year = {2000}
|
13
|
+
}
|
14
|
+
|
15
|
+
@book{Anderson98,
|
16
|
+
editor = {J. R. Anderson and C. Lebiere},
|
17
|
+
title = {The Atomic Components of Thought},
|
18
|
+
publisher = {Lawrence Erlbaum},
|
19
|
+
address = {Mahwah, NJ},
|
20
|
+
year = {1998}
|
21
|
+
}
|
22
|
+
|
23
|
+
@article{Anderson04,
|
24
|
+
author = {J. R. Anderson and D. Bothell and M. D. Byrne and S. Douglass and C. Lebiere and Y. L. Qin},
|
25
|
+
title = {An integrated theory of the mind},
|
26
|
+
journal = {Psychological Review},
|
27
|
+
volume = {111},
|
28
|
+
number = {4},
|
29
|
+
pages = {1036--1060},
|
30
|
+
year = {2004}
|
31
|
+
}
|
@@ -0,0 +1,23 @@
|
|
1
|
+
= Sample of using asciidoc-bib =
|
2
|
+
|
3
|
+
The bibliography is searched in the folder of the document, and then
|
4
|
+
in ~/Documents.
|
5
|
+
|
6
|
+
Author-year references can use different styles such as: [cite:Lane12a] or
|
7
|
+
[citenp:Lane12a].
|
8
|
+
|
9
|
+
Page numbers can be added: [cite:Lane12a,89] or [citenp:Lane12a,89-93].
|
10
|
+
|
11
|
+
A bit of pretext can be included too: [cite:See:Lane12a,89]
|
12
|
+
|
13
|
+
We can include other files, which are also processed:
|
14
|
+
|
15
|
+
include::sample-2.txt[]
|
16
|
+
|
17
|
+
To include the reference list, use the section template before
|
18
|
+
title, to prevent problems with a2x.
|
19
|
+
|
20
|
+
[sect2]
|
21
|
+
== Bibliography ==
|
22
|
+
|
23
|
+
[bibliography]
|
@@ -0,0 +1,18 @@
|
|
1
|
+
== Sample file 2: multiple authors ==
|
2
|
+
|
3
|
+
Author-year references can use different styles such as: [cite:Lane12b] or
|
4
|
+
[citenp:Lane12b].
|
5
|
+
|
6
|
+
Page numbers can be added: [cite:Lane12b,89] or [citenp:Lane12b,89-93].
|
7
|
+
|
8
|
+
A bit of pretext can be included too: [cite:See:Lane12b,89]
|
9
|
+
|
10
|
+
=== multiple refs ===
|
11
|
+
|
12
|
+
One citation can include several references, such as [cite:Lane12a;Lane12b].
|
13
|
+
|
14
|
+
These can include pages and be in-text: [citenp:Lane12a,78;Lane12b,89-93].
|
15
|
+
|
16
|
+
And include pretext: [cite:See:Lane12a;Lane12b,89-93]
|
17
|
+
|
18
|
+
Note: citations cannot be split over lines; each citation must be on one line.
|
metadata
ADDED
@@ -0,0 +1,130 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: asciidoc-bib
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 2.4.5
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Peter Lane
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2022-04-25 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bibtex-ruby
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '5.0'
|
20
|
+
- - ">="
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: 5.1.4
|
23
|
+
type: :runtime
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
requirements:
|
27
|
+
- - "~>"
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '5.0'
|
30
|
+
- - ">="
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 5.1.4
|
33
|
+
- !ruby/object:Gem::Dependency
|
34
|
+
name: citeproc-ruby
|
35
|
+
requirement: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - "~>"
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: '1.0'
|
40
|
+
- - ">="
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: 1.0.5
|
43
|
+
type: :runtime
|
44
|
+
prerelease: false
|
45
|
+
version_requirements: !ruby/object:Gem::Requirement
|
46
|
+
requirements:
|
47
|
+
- - "~>"
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: '1.0'
|
50
|
+
- - ">="
|
51
|
+
- !ruby/object:Gem::Version
|
52
|
+
version: 1.0.5
|
53
|
+
- !ruby/object:Gem::Dependency
|
54
|
+
name: csl-styles
|
55
|
+
requirement: !ruby/object:Gem::Requirement
|
56
|
+
requirements:
|
57
|
+
- - "~>"
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
version: '1.0'
|
60
|
+
- - ">="
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: 1.0.1.6
|
63
|
+
type: :runtime
|
64
|
+
prerelease: false
|
65
|
+
version_requirements: !ruby/object:Gem::Requirement
|
66
|
+
requirements:
|
67
|
+
- - "~>"
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '1.0'
|
70
|
+
- - ">="
|
71
|
+
- !ruby/object:Gem::Version
|
72
|
+
version: 1.0.1.6
|
73
|
+
description: "asciidoc-bib generates in-text references and a reference list from
|
74
|
+
an asciidoc\nfile, using a bibtex file as a source of citation information. The
|
75
|
+
syntax for\nan in-text reference is simply [cite:bibref], and a line containing\n[bibliography]
|
76
|
+
inserts a complete reference list. See the README for more\nexamples and further
|
77
|
+
options. The references are formatted using styles provided \nby CSL.\n"
|
78
|
+
email: peterlane@gmx.com
|
79
|
+
executables:
|
80
|
+
- asciidoc-bib
|
81
|
+
extensions: []
|
82
|
+
extra_rdoc_files:
|
83
|
+
- README.rdoc
|
84
|
+
- LICENSE.txt
|
85
|
+
files:
|
86
|
+
- LICENSE.txt
|
87
|
+
- README.rdoc
|
88
|
+
- bin/asciidoc-bib
|
89
|
+
- changes.txt
|
90
|
+
- lib/asciidoc-bib.rb
|
91
|
+
- lib/asciidoc-bib/citation.rb
|
92
|
+
- lib/asciidoc-bib/citationdata.rb
|
93
|
+
- lib/asciidoc-bib/citations.rb
|
94
|
+
- lib/asciidoc-bib/citationutils.rb
|
95
|
+
- lib/asciidoc-bib/extensions.rb
|
96
|
+
- lib/asciidoc-bib/filehandlers.rb
|
97
|
+
- lib/asciidoc-bib/options.rb
|
98
|
+
- lib/asciidoc-bib/processor.rb
|
99
|
+
- lib/asciidoc-bib/processorutils.rb
|
100
|
+
- lib/asciidoc-bib/styles.rb
|
101
|
+
- lib/asciidoc-bib/version.rb
|
102
|
+
- samples/biblio.bib
|
103
|
+
- samples/sample-1.txt
|
104
|
+
- samples/sample-2.txt
|
105
|
+
homepage:
|
106
|
+
licenses:
|
107
|
+
- MIT
|
108
|
+
metadata: {}
|
109
|
+
post_install_message:
|
110
|
+
rdoc_options:
|
111
|
+
- "-m"
|
112
|
+
- README.rdoc
|
113
|
+
require_paths:
|
114
|
+
- lib
|
115
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
116
|
+
requirements:
|
117
|
+
- - ">="
|
118
|
+
- !ruby/object:Gem::Version
|
119
|
+
version: '2.0'
|
120
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
125
|
+
requirements: []
|
126
|
+
rubygems_version: 3.3.7
|
127
|
+
signing_key:
|
128
|
+
specification_version: 4
|
129
|
+
summary: asciidoc-bib adds references from a bibtex file to an asciidoc file.
|
130
|
+
test_files: []
|