asciidoctor-bibtex 0.2.0 → 0.3.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.
- checksums.yaml +4 -4
- data/README.md +64 -88
- data/lib/asciidoctor-bibtex.rb +1 -5
- data/lib/asciidoctor-bibtex/bibextension.rb +37 -5
- data/lib/asciidoctor-bibtex/citationutils.rb +1 -1
- data/lib/asciidoctor-bibtex/processor.rb +0 -106
- data/lib/asciidoctor-bibtex/version.rb +1 -1
- metadata +25 -22
- data/bin/asciidoc-bibtex +0 -19
- data/bin/asciidoctor-bibtex +0 -57
- data/lib/asciidoctor-bibtex/options.rb +0 -168
- data/samples/biblio.bib +0 -31
- data/samples/sample-1.adoc +0 -38
- data/samples/sample-2.adoc +0 -18
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6579c1fb777b43c77a5775daecbe08f124569428
|
4
|
+
data.tar.gz: ef2332508bbc439949a2e8249e6b2be2bfac73ce
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c18f02a2bd15df1c55893619e7c2638c81d04838a582584f52425b8d321fd315e3920054cefaf9de942e5e7ea95d0cdf97211755731823023dc098ea0e00f0ba
|
7
|
+
data.tar.gz: 339b8c609873013971dbe03d7fb93d8cb729bb4a753f632f53172b9e2ca7a656bbac684cdefd774f4d47cf5f34f52dd14239a472f8f01ee6f894c7841ea2ffac
|
data/README.md
CHANGED
@@ -1,122 +1,98 @@
|
|
1
1
|
# asciidoctor-bibtex: add bibtex functionality to asciidoc
|
2
2
|
|
3
|
-
asciidoctor-bibtex
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
-
|
21
|
-
|
22
|
-
-
|
3
|
+
asciidoctor-bibtex adds bibtex support for asciidoc documents by introducing
|
4
|
+
two new macros: `cite:[KEY]` and `bibliography::[]`. Citations are parsed and
|
5
|
+
replaced with formatted inline texts, and reference lists are automatically
|
6
|
+
generated and inserted into where `bibliography::[]` is placed.
|
7
|
+
|
8
|
+
asciidoctor-bibtex is designed to be used as an extension to
|
9
|
+
[asciidoctor](http://asciidoctor.org), although it supports asciidoc to
|
10
|
+
asciidoc transformation at the moment. Thus this extension can be used
|
11
|
+
together with other asciidoctor extensions such as
|
12
|
+
[asciidoctor-mathematical][] and [asciidoctor-pdf][] to enrich your
|
13
|
+
asciidoc experience.
|
14
|
+
|
15
|
+
[asciidoctor-mathematical]: https://github.com/asciidoctor/asciidoctor-mathematical
|
16
|
+
[asciidoctor-pdf]: https://github.com/asciidoctor/asciidoctor-pdf
|
17
|
+
|
18
|
+
## History
|
19
|
+
|
20
|
+
asciidoctor-bibtex starts as a fork of [asciidoc-bib][] and goes along a
|
21
|
+
different way. The major reason for the fork at the time was the differences in
|
22
|
+
citation and bibliography macros. asciidoc-bib failed to follow the grammar of
|
23
|
+
macros in asciidoc, thus to avoid breaking existing documents, a fork is
|
24
|
+
inevitable. Other reasons include the inability to use asciidoctor arguments
|
25
|
+
in asciidoc-bib.
|
26
|
+
|
27
|
+
While [asciidoc-bib][] focuses on replacing citations in the original
|
28
|
+
documents and produces new asciidoc documents, asciidoctor-bibtex focuses on
|
29
|
+
compatibility with asciidoctor and other asciidoctor extensions at the very
|
30
|
+
beginning. As time passes, asciidoctor-bibtex diverges significantly from its
|
31
|
+
ancesstor. For example, asciidoctor-bibtex now supports generating real bibtex
|
32
|
+
ciations and bibliography, so it can be used together with
|
33
|
+
[asciidoctor-latex][] for native bibtex support.
|
34
|
+
|
35
|
+
[asciidoc-bib]: https://github.com/petercrlane/asciidoc-bib
|
36
|
+
[asciidoctor-latex]: https://github.com/asciidoctor/asciidoctor-latex
|
23
37
|
|
24
38
|
## Install
|
25
39
|
|
26
40
|
gem install asciidoctor-bibtex
|
27
41
|
|
28
|
-
|
42
|
+
asciidoctor-bibtex depends on
|
43
|
+
[bibtex-ruby](http://github.com/inukshuk/bibtex-ruby),
|
44
|
+
[citeproc-ruby](http://github.com/inukshuk/citeproc-ruby) and
|
45
|
+
[csl-styles](http://github.com/inukshuk/csl-styles). (Ensure 'ruby-dev' and
|
46
|
+
'libxslt1-dev' are installed, so the dependencies will compile.)
|
29
47
|
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
asciidoctor-bibtex depends on [bibtex-ruby](http://github.com/inukshuk/bibtex-ruby), [citeproc-ruby](http://github.com/inukshuk/citeproc-ruby) and [csl-styles](http://github.com/inukshuk/csl-styles). (Ensure 'ruby-dev' and 'libxslt1-dev' are installed, so the dependencies will compile.)
|
34
|
-
|
35
|
-
[asciidoctor](https://github.com/asciidoctor/asciidoctor) must also be installed for 'asciidoctor-bibtex' to work. asciidoctor version 1.5.2 or higher is required.
|
48
|
+
[asciidoctor](https://github.com/asciidoctor/asciidoctor) must also be
|
49
|
+
installed for 'asciidoctor-bibtex' to work. asciidoctor version 1.5.2 or
|
50
|
+
higher is required.
|
36
51
|
|
37
52
|
## Usage
|
38
53
|
|
39
|
-
|
40
|
-
|
41
|
-
The first is required if using _asciidoc_. 'asciidoc-bibtex' works by transforming an asciidoc document containing syntax to include citations and a bibliography. The transformed document will contain a complete reference and bibliography list where indicated, and can then be processed further by asciidoc's toolchain to produce a completed document.
|
42
|
-
|
43
|
-
The second is to use 'asciidoctor-bibtex' to transform your bibtex-enabled documents directly to any backend format supported by asciidoctor. It uses the asciidoctor extension mechanism to hook in the asciidoctor preprocessing process. It support all asciidoctor command-line options.
|
44
|
-
|
45
|
-
The third is to use asciidoctor-bibtex as an asciidoctor extension. It works the same way as the second approach. In addition, one can use other extensions together to provides even richer functionality.
|
46
|
-
|
47
|
-
Styles must be one of those supported by CSL: https://github.com/citation-style-language/styles
|
48
|
-
|
49
|
-
### Citation syntax
|
54
|
+
### Macros
|
50
55
|
|
51
56
|
Syntax for inserting a citation is the following inline macro:
|
52
57
|
|
53
|
-
cite|citenp:[ref(pages)]
|
58
|
+
cite|citenp:[ref(pages), ...]
|
54
59
|
|
55
|
-
where '(pages)' is optional.
|
60
|
+
where '(pages)' is optional.
|
56
61
|
|
57
62
|
Examples of "chicago-author-date" style:
|
58
63
|
|
59
|
-
`cite:[Lane12]` becomes "(Lane 2012)"
|
60
|
-
|
61
|
-
`
|
62
|
-
|
63
|
-
`cite:[Lane12(59)]` becomes "(Lane 2012, 59)"
|
64
|
+
- `cite:[Lane12]` becomes "(Lane 2012)"
|
65
|
+
- `citenp:[Lane12]` becomes "Lane (2012)"
|
66
|
+
- `cite:[Lane12(59)]` becomes "(Lane 2012, 59)"
|
64
67
|
|
65
68
|
For *apa* (Harvard-like) style:
|
66
69
|
|
67
|
-
`cite:[Lane12]` becomes "(Lane, 2012)"
|
68
|
-
|
69
|
-
`
|
70
|
-
|
71
|
-
`cite:[Lane12(59)]` becomes "(Lane, 2012, p.59)"
|
70
|
+
- `cite:[Lane12]` becomes "(Lane, 2012)"
|
71
|
+
- `citenp:[Lane12]` becomes "Lane (2012)"
|
72
|
+
- `cite:[Lane12(59)]` becomes "(Lane, 2012, p.59)"
|
72
73
|
|
73
74
|
For *ieee*, a numeric style:
|
74
75
|
|
75
76
|
`cite:[Lane12,Lane11]` becomes "[1, 2]"
|
76
77
|
|
77
|
-
|
78
|
-
|
79
|
-
`bibliography::[]` on a line by itself.
|
80
|
-
|
81
|
-
### Processing Text: Asciidoctor
|
82
|
-
|
83
|
-
asciidoctor-bibtex [OPTIONS] filename
|
84
|
-
|
85
|
-
Looks for a bib file in current folder and in ~/Documents.
|
86
|
-
|
87
|
-
Outputs an html file, including all citations and references.
|
88
|
-
|
89
|
-
asciidoctor-bibtex support all command-line options of asciidoctor, for example, use the follow command to output docbook file:
|
90
|
-
|
91
|
-
asciidoctor-bibtex -b docbook filename
|
92
|
-
|
93
|
-
One may also use as an asciidoctor extension, for example:
|
94
|
-
|
95
|
-
asciidoctor -r asciidoctor-bibtex -r asciidoctor-pdf -b pdf filename
|
96
|
-
|
97
|
-
Options are set through the command-line using the asciidoctor attributes
|
98
|
-
setting syntax:
|
99
|
-
|
100
|
-
> asciidoctor-bibtex -h
|
101
|
-
|
102
|
-
...
|
103
|
-
AsciidoctorBibtex related options:
|
104
|
-
|
105
|
-
-a bib-file=FILENAME Set BibTex filename (default: auto-find)
|
106
|
-
-a bib-style=STYLE Set BibTex items style (default: apa)
|
107
|
-
-a bib-numeric-order=<alphabetical|appearance>
|
108
|
-
Set citation order scheme (default: alphabetical)
|
109
|
-
-a bib-no-links=1 Do not use links (default: use links)
|
78
|
+
To add a list of formatted references, place `bibliography::[]` on a line by itself.
|
110
79
|
|
111
|
-
###
|
80
|
+
### Document Attributes
|
112
81
|
|
113
|
-
|
82
|
+
| Attribute Name | Description | Valid Values | Default Value |
|
83
|
+
| -------------- | --------------- | ---------- | -------------- |
|
84
|
+
| bibtex-file | Bibtex database file | any string, or empty | Automatic searching |
|
85
|
+
| bibtex-style | Reference formatting style | any style supported by csl-styles | ieee |
|
86
|
+
| bibtex-order | Order of citations | `appearance` or `alphabetical` | `appearance` |
|
87
|
+
| bibtex-format | Formatting of citations and bibliography | `asciidoc` or `latex` | `asciidoc` |
|
114
88
|
|
115
|
-
|
89
|
+
### Commandline
|
116
90
|
|
117
|
-
|
91
|
+
Use asciidoctor-bibtex as an extension:
|
118
92
|
|
119
|
-
|
93
|
+
```bash
|
94
|
+
asciidoctor -r asciidoctor-bibtex sample.adoc
|
95
|
+
```
|
120
96
|
|
121
97
|
## License
|
122
98
|
|
data/lib/asciidoctor-bibtex.rb
CHANGED
@@ -8,17 +8,13 @@ require 'citeproc'
|
|
8
8
|
require 'csl/styles'
|
9
9
|
require 'set'
|
10
10
|
|
11
|
-
|
12
|
-
unless Gem::Specification.find_all_by_name('asciidoctor').empty?
|
13
|
-
require_relative 'asciidoctor-bibtex/asciidoctor'
|
14
|
-
end
|
11
|
+
require_relative 'asciidoctor-bibtex/asciidoctor'
|
15
12
|
require_relative 'asciidoctor-bibtex/citation'
|
16
13
|
require_relative 'asciidoctor-bibtex/citationdata'
|
17
14
|
require_relative 'asciidoctor-bibtex/citationutils'
|
18
15
|
require_relative 'asciidoctor-bibtex/citations'
|
19
16
|
require_relative 'asciidoctor-bibtex/extensions'
|
20
17
|
require_relative 'asciidoctor-bibtex/filehandlers'
|
21
|
-
require_relative 'asciidoctor-bibtex/options'
|
22
18
|
require_relative 'asciidoctor-bibtex/processorutils'
|
23
19
|
require_relative 'asciidoctor-bibtex/processor'
|
24
20
|
require_relative 'asciidoctor-bibtex/styles'
|
@@ -6,11 +6,43 @@ require 'asciidoctor'
|
|
6
6
|
require 'asciidoctor/extensions'
|
7
7
|
require 'asciidoctor/reader'
|
8
8
|
require 'asciidoctor/parser'
|
9
|
+
require 'bibtex/filters'
|
10
|
+
require 'latex/decode/base'
|
11
|
+
require 'latex/decode/maths'
|
12
|
+
require 'latex/decode/accents'
|
13
|
+
require 'latex/decode/diacritics'
|
14
|
+
require 'latex/decode/punctuation'
|
15
|
+
require 'latex/decode/symbols'
|
16
|
+
require 'latex/decode/greek'
|
9
17
|
require_relative 'styles'
|
10
18
|
require_relative 'filehandlers'
|
11
19
|
|
12
20
|
module AsciidoctorBibtex
|
13
21
|
module Asciidoctor
|
22
|
+
|
23
|
+
# This filter extends the original latex filter in bibtex-ruby to handle
|
24
|
+
# unknown latex macros more gracefully. We could have used latex-decode
|
25
|
+
# gem together with our custom replacement rules, but latex-decode eats up
|
26
|
+
# all braces after it finishes all decoding. So we hack over the
|
27
|
+
# LaTeX.decode function and insert our rules before `strip_braces`.
|
28
|
+
class LatexFilter < ::BibTeX::Filter
|
29
|
+
def apply(value)
|
30
|
+
text = value.to_s
|
31
|
+
LaTeX::Decode::Base.normalize(text)
|
32
|
+
LaTeX::Decode::Maths.decode!(text)
|
33
|
+
LaTeX::Decode::Accents.decode!(text)
|
34
|
+
LaTeX::Decode::Diacritics.decode!(text)
|
35
|
+
LaTeX::Decode::Punctuation.decode!(text)
|
36
|
+
LaTeX::Decode::Symbols.decode!(text)
|
37
|
+
LaTeX::Decode::Greek.decode!(text)
|
38
|
+
text.gsub!(/\\url\{(.+?)\}/, " \\1 ")
|
39
|
+
text.gsub!(/\\\w+(?=\s+\w)/, "")
|
40
|
+
text.gsub!(/\\\w+(?:\[.+?\])?\s*\{(.+?)\}/, "\\1")
|
41
|
+
LaTeX::Decode::Base.strip_braces(text)
|
42
|
+
LaTeX.normalize_C(text)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
14
46
|
BibliographyBlockMacroPlaceholder = %(BIBLIOGRAPHY BLOCK MACRO PLACEHOLDER)
|
15
47
|
|
16
48
|
# This macro processor does only half the work. It just parse the macro
|
@@ -45,8 +77,8 @@ module AsciidoctorBibtex
|
|
45
77
|
def process document
|
46
78
|
bibtex_file = (document.attr 'bibtex-file').to_s
|
47
79
|
bibtex_style = ((document.attr 'bibtex-style') || 'ieee').to_s
|
48
|
-
bibtex_order = ((document.attr 'bibtex-order') || '
|
49
|
-
|
80
|
+
bibtex_order = ((document.attr 'bibtex-order') || 'appearance').to_sym
|
81
|
+
bibtex_format = ((document.attr 'bibtex-format') || 'asciidoc').to_sym
|
50
82
|
|
51
83
|
if bibtex_file.empty?
|
52
84
|
bibtex_file = AsciidoctorBibtex::FileHandlers.find_bibliography "."
|
@@ -59,8 +91,8 @@ module AsciidoctorBibtex
|
|
59
91
|
exit
|
60
92
|
end
|
61
93
|
|
62
|
-
bibtex = BibTeX.open bibtex_file
|
63
|
-
processor = Processor.new bibtex, true, bibtex_style, bibtex_order == :appearance,
|
94
|
+
bibtex = BibTeX.open bibtex_file, :filter => [LatexFilter]
|
95
|
+
processor = Processor.new bibtex, true, bibtex_style, bibtex_order == :appearance, bibtex_format
|
64
96
|
|
65
97
|
prose_blocks = document.find_by {|b| b.content_model == :simple or b.context == :list_item}
|
66
98
|
prose_blocks.each do |block|
|
@@ -91,7 +123,7 @@ module AsciidoctorBibtex
|
|
91
123
|
end
|
92
124
|
|
93
125
|
references_asciidoc = []
|
94
|
-
if
|
126
|
+
if bibtex_format == :latex
|
95
127
|
references_asciidoc << %(+++\\bibliography{#{bibtex_file}}{}+++)
|
96
128
|
references_asciidoc << %(+++\\bibliographystyle{#{bibtex_style}}+++)
|
97
129
|
else
|
@@ -55,7 +55,7 @@ module AsciidoctorBibtex
|
|
55
55
|
end
|
56
56
|
|
57
57
|
# matches a citation key, such as 'Dan2012(99-100)'
|
58
|
-
CITATION_KEY = /(\
|
58
|
+
CITATION_KEY = /([^\s,()\[\]]+)(\(\d+(-\d+)*\))?/
|
59
59
|
# matches a citation type
|
60
60
|
CITATION_TYPE = /cite|citenp/
|
61
61
|
# matches a citation list
|
@@ -11,14 +11,6 @@ module AsciidoctorBibtex
|
|
11
11
|
class Processor
|
12
12
|
include ProcessorUtils
|
13
13
|
|
14
|
-
# Top-level method to include citations in given asciidoc file
|
15
|
-
def Processor.run options
|
16
|
-
processor = Processor.new BibTeX.open(options.bibfile), options.links, options.style, options.numeric_in_appearance_order?, options.output, options.bibfile
|
17
|
-
processor.read_filenames options.filename
|
18
|
-
processor.read_citations
|
19
|
-
processor.add_citations
|
20
|
-
end
|
21
|
-
|
22
14
|
attr_reader :biblio, :links, :style, :citations
|
23
15
|
|
24
16
|
def initialize biblio, links, style, numeric_in_appearance_order = false, output = :asciidoc, bibfile = ""
|
@@ -37,101 +29,6 @@ module AsciidoctorBibtex
|
|
37
29
|
end
|
38
30
|
end
|
39
31
|
|
40
|
-
# Given an asciidoc filename, reads in all dependent files based on 'include::' statements
|
41
|
-
# Leaving a list of files in @filenames
|
42
|
-
def read_filenames filename
|
43
|
-
puts "Reading file: #{filename}"
|
44
|
-
files_to_process = [filename]
|
45
|
-
|
46
|
-
begin
|
47
|
-
@filenames.add files_to_process.first
|
48
|
-
File.new(files_to_process.shift).each_line do |line|
|
49
|
-
if line.include?("include::")
|
50
|
-
line.split("include::").drop(1).each do |filetxt|
|
51
|
-
file = File.expand_path(filetxt.partition(/\s|\[/).first)
|
52
|
-
files_to_process << file unless @filenames.include?(file)
|
53
|
-
end
|
54
|
-
end
|
55
|
-
end
|
56
|
-
end until files_to_process.empty?
|
57
|
-
end
|
58
|
-
|
59
|
-
# Scans each filename and extracts citations
|
60
|
-
def read_citations
|
61
|
-
@filenames.each do |file|
|
62
|
-
IO.foreach(file) do |line|
|
63
|
-
@citations.add_from_line line
|
64
|
-
end
|
65
|
-
end
|
66
|
-
end
|
67
|
-
|
68
|
-
# Read given text to add cites and biblio to a new file
|
69
|
-
# Order is always decided by author surname first with year.
|
70
|
-
# If no author present, then use editor field.
|
71
|
-
# Links indicates if internal links to be added.
|
72
|
-
# Assumes @filenames has been set to list of filenames to process.
|
73
|
-
def add_citations
|
74
|
-
@filenames.each do |curr_file|
|
75
|
-
ref_filename = FileHandlers.add_ref(curr_file)
|
76
|
-
puts "Writing file: #{ref_filename}"
|
77
|
-
output = File.new(ref_filename, "w")
|
78
|
-
|
79
|
-
IO.foreach(curr_file) do |line|
|
80
|
-
begin # catch any errors, and ensure the lines of text are written
|
81
|
-
case
|
82
|
-
when line.include?('include::')
|
83
|
-
output_include_line output, line
|
84
|
-
when (line =~ BIBMACRO_FULL) != nil
|
85
|
-
output_bibliography output
|
86
|
-
else
|
87
|
-
output_cite_completed_line output, line
|
88
|
-
end
|
89
|
-
rescue # Any errors, just output the line
|
90
|
-
output.puts line
|
91
|
-
end
|
92
|
-
end
|
93
|
-
|
94
|
-
output.close
|
95
|
-
end
|
96
|
-
end
|
97
|
-
|
98
|
-
# Output bibliography to given output
|
99
|
-
def output_bibliography output
|
100
|
-
if @output == :asciidoc
|
101
|
-
cites = if Styles.is_numeric?(@style) and @numeric_in_appearance_order
|
102
|
-
@citations.cites_used
|
103
|
-
else
|
104
|
-
sorted_cites
|
105
|
-
end
|
106
|
-
cites.each do |ref|
|
107
|
-
output.puts get_reference(ref)
|
108
|
-
output.puts
|
109
|
-
end
|
110
|
-
else
|
111
|
-
output.puts "++\\bibliography{#{@bibfile}}++"
|
112
|
-
output.puts "++\\bibliographystyle{#{@style}}++"
|
113
|
-
end
|
114
|
-
end
|
115
|
-
|
116
|
-
def output_include_line output, line
|
117
|
-
line.split("include::").drop(1).each do |filetxt|
|
118
|
-
ifile = filetxt.partition(/\s|\[/).first
|
119
|
-
file = File.expand_path ifile
|
120
|
-
# make sure included file points to the -ref version
|
121
|
-
line.gsub!("include::#{ifile}", "include::#{FileHandlers.add_ref(file)}")
|
122
|
-
end
|
123
|
-
output.puts line
|
124
|
-
end
|
125
|
-
|
126
|
-
# For each citation in given line, expand into complete citation text
|
127
|
-
# before outputting the line
|
128
|
-
def output_cite_completed_line output, line
|
129
|
-
@citations.retrieve_citations(line).each do |citation|
|
130
|
-
line.gsub!(citation.original, complete_citation(citation))
|
131
|
-
end
|
132
|
-
output.puts line
|
133
|
-
end
|
134
|
-
|
135
32
|
# Return the complete citation text for given cite_data
|
136
33
|
def complete_citation cite_data
|
137
34
|
|
@@ -300,8 +197,5 @@ module AsciidoctorBibtex
|
|
300
197
|
end
|
301
198
|
end
|
302
199
|
|
303
|
-
BIBMACRO_FULL = /bibliography::(.*?)\[(\w+)?\]/
|
304
200
|
end
|
305
201
|
end
|
306
|
-
|
307
|
-
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: asciidoctor-bibtex
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Zhang YANG
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2017-04-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bibtex-ruby
|
@@ -52,26 +52,33 @@ dependencies:
|
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '1'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: latex-decode
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0.2'
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0.2'
|
55
69
|
description: |
|
56
|
-
asciidoctor-bibtex
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
standalone or as an asciidoctor extension. See the README for more examples
|
62
|
-
and further options. The references are formatted using styles provided by
|
63
|
-
CSL.
|
70
|
+
asciidoctor-bibtex adds bibtex support for asciidoc documents by introducing
|
71
|
+
two new macros: `cite:[KEY]` and `bibliography::[]`. Citations are parsed and
|
72
|
+
replaced with formatted inline texts, and reference lists are automatically
|
73
|
+
generated and inserted into where `bibliography::[]` is placed. The
|
74
|
+
references are formatted using styles provided by CSL.
|
64
75
|
email: zyangmath@gmail.com
|
65
|
-
executables:
|
66
|
-
- asciidoctor-bibtex
|
67
|
-
- asciidoc-bibtex
|
76
|
+
executables: []
|
68
77
|
extensions: []
|
69
78
|
extra_rdoc_files: []
|
70
79
|
files:
|
71
80
|
- LICENSE.txt
|
72
81
|
- README.md
|
73
|
-
- bin/asciidoc-bibtex
|
74
|
-
- bin/asciidoctor-bibtex
|
75
82
|
- lib/asciidoctor-bibtex.rb
|
76
83
|
- lib/asciidoctor-bibtex/asciidoctor.rb
|
77
84
|
- lib/asciidoctor-bibtex/bibextension.rb
|
@@ -81,15 +88,11 @@ files:
|
|
81
88
|
- lib/asciidoctor-bibtex/citationutils.rb
|
82
89
|
- lib/asciidoctor-bibtex/extensions.rb
|
83
90
|
- lib/asciidoctor-bibtex/filehandlers.rb
|
84
|
-
- lib/asciidoctor-bibtex/options.rb
|
85
91
|
- lib/asciidoctor-bibtex/processor.rb
|
86
92
|
- lib/asciidoctor-bibtex/processorutils.rb
|
87
93
|
- lib/asciidoctor-bibtex/styles.rb
|
88
94
|
- lib/asciidoctor-bibtex/version.rb
|
89
|
-
|
90
|
-
- samples/sample-1.adoc
|
91
|
-
- samples/sample-2.adoc
|
92
|
-
homepage: https://github.com/ProgramFan/asciidoctor-bibtex
|
95
|
+
homepage: https://github.com/asciidoctor/asciidoctor-bibtex
|
93
96
|
licenses:
|
94
97
|
- OWL
|
95
98
|
metadata: {}
|
@@ -109,8 +112,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
109
112
|
version: '0'
|
110
113
|
requirements: []
|
111
114
|
rubyforge_project:
|
112
|
-
rubygems_version: 2.6.
|
115
|
+
rubygems_version: 2.6.7
|
113
116
|
signing_key:
|
114
117
|
specification_version: 4
|
115
|
-
summary:
|
118
|
+
summary: Adding bibtex functionality to asciidoc
|
116
119
|
test_files: []
|
data/bin/asciidoc-bibtex
DELETED
@@ -1,19 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
|
3
|
-
# Executable for asciidoc-bibtex
|
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
|
-
# Copyright (c) Peter Lane, 2012-13.
|
10
|
-
# Released under Open Works License, 0.9.2
|
11
|
-
|
12
|
-
unless $:.include?(libdir = File.expand_path('../lib', File.dirname(__FILE__)))
|
13
|
-
$:.unshift libdir
|
14
|
-
end
|
15
|
-
require 'asciidoctor-bibtex'
|
16
|
-
|
17
|
-
options = AsciidoctorBibtex::Options.new
|
18
|
-
options.parse!
|
19
|
-
AsciidoctorBibtex::Processor.run options
|
data/bin/asciidoctor-bibtex
DELETED
@@ -1,57 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
|
3
|
-
# Executable asciidoctor-bib
|
4
|
-
#
|
5
|
-
# Uses asciidoctor preprocessor extension to include citations and bibliography
|
6
|
-
# in a single pass.
|
7
|
-
#
|
8
|
-
# Copyright (c) Peter Lane, 2013.
|
9
|
-
# Released under Open Works License, 0.9.2
|
10
|
-
|
11
|
-
unless $:.include?(libdir = File.expand_path('../lib', File.dirname(__FILE__)))
|
12
|
-
$:.unshift libdir
|
13
|
-
end
|
14
|
-
require 'asciidoctor-bibtex'
|
15
|
-
require 'asciidoctor/cli'
|
16
|
-
|
17
|
-
# Treat '--version' specially, like that in asciidoctor-pdf
|
18
|
-
options = Asciidoctor::Cli::Options.new
|
19
|
-
unless (ARGV & ['-V', '--version']).empty?
|
20
|
-
$stdout.write %(Asciidoctor Bib #{AsciidoctorBibtex::VERSION} using )
|
21
|
-
# NOTE the print_version method was added in Asciidoctor 1.5.2
|
22
|
-
if options.respond_to? :print_version
|
23
|
-
options.print_version
|
24
|
-
else
|
25
|
-
puts %(Asciidoctor #{::Asciidoctor::VERSION} [http://asciidoctor.org])
|
26
|
-
end
|
27
|
-
exit 0
|
28
|
-
end
|
29
|
-
|
30
|
-
# Add help information on how to set bibtex related values via asciidoctor
|
31
|
-
# commandline. This is the usual CLI attributes definition.
|
32
|
-
if not (ARGV & ['-h', '--help']).empty?
|
33
|
-
# parse argument with asciidoctor to print asciidoctor's helps
|
34
|
-
options.parse! ARGV
|
35
|
-
puts ""
|
36
|
-
puts "AsciidoctorBibtex related options:"
|
37
|
-
puts ""
|
38
|
-
puts " -a bibtex-file=FILENAME Set BibTex filename (default: auto-find)"
|
39
|
-
puts " -a bibtex-style=STYLE Set BibTex items style (default: apa)"
|
40
|
-
puts " -a bibtex-order=<alphabetical|appearance>"
|
41
|
-
puts " Set citation order scheme (default: alphabetical)"
|
42
|
-
puts ""
|
43
|
-
exit 0
|
44
|
-
end
|
45
|
-
|
46
|
-
# Use standard asciidoctor CLI mechanism to call asciidoctor, so we can accept
|
47
|
-
# all asciidoctor options. Note that we only accept asciidoctor options here.
|
48
|
-
# This code is stolen shamlessly from asciidoctor-pdf
|
49
|
-
case (result = options.parse! ARGV)
|
50
|
-
when Integer
|
51
|
-
exit result
|
52
|
-
else
|
53
|
-
invoker = Asciidoctor::Cli::Invoker.new options
|
54
|
-
GC.start
|
55
|
-
invoker.invoke!
|
56
|
-
exit invoker.code
|
57
|
-
end
|
@@ -1,168 +0,0 @@
|
|
1
|
-
# Class to read in asciidoc-bibtex options from command-line, and
|
2
|
-
# store results in an accessible form.
|
3
|
-
#
|
4
|
-
# Copyright (c) Peter Lane, 2013.
|
5
|
-
# Released under Open Works License, 0.9.2
|
6
|
-
|
7
|
-
require 'optparse'
|
8
|
-
|
9
|
-
module AsciidoctorBibtex
|
10
|
-
class Options
|
11
|
-
attr_reader :bibfile, :filename, :links, :style, :output
|
12
|
-
|
13
|
-
def initialize(program_name = 'asciidoc-bibtex')
|
14
|
-
@bibfile = ''
|
15
|
-
@links = true
|
16
|
-
@numeric_order = :alphabetical
|
17
|
-
@style = AsciidoctorBibtex::Styles.default_style
|
18
|
-
@program_name = program_name
|
19
|
-
@output = "asciidoc"
|
20
|
-
end
|
21
|
-
|
22
|
-
# Public: Parse options from commandline.
|
23
|
-
# This function is used by asciidoc-bib command.
|
24
|
-
def parse!(args = ARGV)
|
25
|
-
options = OptionParser.new do |opts|
|
26
|
-
opts.banner = "Usage: #{@program_name} filename"
|
27
|
-
opts.on("-h", "--help", "help message") do |v|
|
28
|
-
puts "#{@program_name} #{AsciidoctorBibtex::VERSION}"
|
29
|
-
puts
|
30
|
-
puts options
|
31
|
-
puts
|
32
|
-
puts "All styles available through CSL are supported."
|
33
|
-
puts "The default style is 'apa'."
|
34
|
-
exit!
|
35
|
-
end
|
36
|
-
opts.on("-b", "--bibfile FILE", "location of bib file") do |v|
|
37
|
-
@bibfile = v
|
38
|
-
end
|
39
|
-
opts.on("-n", "--no-links", "do not add internal links") do |v|
|
40
|
-
@links = false
|
41
|
-
end
|
42
|
-
opts.on('', '--numeric-alphabetic-order', 'sort numeric styles in alphabetical order (DEFAULT)') do |v|
|
43
|
-
@numeric_order = :alphabetical
|
44
|
-
end
|
45
|
-
opts.on('', '--numeric-appearance-order', 'sort numeric styles in order of appearance') do |v|
|
46
|
-
@numeric_order = :appearance
|
47
|
-
end
|
48
|
-
opts.on("-s", "--style STYLE", "reference style") do |v|
|
49
|
-
@style = v
|
50
|
-
end
|
51
|
-
opts.on("--output-style OUTPUT_STYLE", "Output style (asciidoc or latex)") do |v|
|
52
|
-
@output = v
|
53
|
-
end
|
54
|
-
opts.on("-v", "--version", "show version") do |v|
|
55
|
-
puts "#{@program_name} version #{AsciidoctorBibtex::VERSION}"
|
56
|
-
exit!
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
|
-
begin
|
61
|
-
options.parse! args
|
62
|
-
rescue
|
63
|
-
puts options
|
64
|
-
exit!
|
65
|
-
end
|
66
|
-
|
67
|
-
# unless specified by caller, try to find the bibliography
|
68
|
-
if @bibfile.empty?
|
69
|
-
@bibfile = AsciidoctorBibtex::FileHandlers.find_bibliography "."
|
70
|
-
if @bibfile.empty?
|
71
|
-
@bibfile = AsciidoctorBibtex::FileHandlers.find_bibliography "#{ENV['HOME']}/Documents"
|
72
|
-
end
|
73
|
-
end
|
74
|
-
if @bibfile.empty?
|
75
|
-
puts "Error: could not find a bibliography file"
|
76
|
-
exit
|
77
|
-
end
|
78
|
-
unless AsciidoctorBibtex::Styles.valid? @style
|
79
|
-
puts "Error: style #{@style} was not one of the available styles"
|
80
|
-
exit
|
81
|
-
end
|
82
|
-
|
83
|
-
if args.length == 1
|
84
|
-
@filename = args[0]
|
85
|
-
else
|
86
|
-
puts "Error: a single file to convert must be given"
|
87
|
-
exit
|
88
|
-
end
|
89
|
-
|
90
|
-
puts "Reading biblio: #{@bibfile}"
|
91
|
-
puts "Reference style: #{@style}"
|
92
|
-
puts "Numerical order: #{@numeric_order}"
|
93
|
-
puts "Output style: #{@output}"
|
94
|
-
end
|
95
|
-
|
96
|
-
# Public: Parse values given `attrs`
|
97
|
-
# This function is used by asciidoctor preprocessor to determine options
|
98
|
-
# from document attributes. According to the attribute preccedence rule,
|
99
|
-
# attrs_cli > attrs_src > default
|
100
|
-
def parse_attributes(attrs_cli, attrs_src)
|
101
|
-
if attrs_cli['bib-style']
|
102
|
-
@style = attrs_cli['bib-style']
|
103
|
-
elsif attrs_src['bib-style']
|
104
|
-
@style = attrs_src['bib-style']
|
105
|
-
end
|
106
|
-
if attrs_cli['bib-file']
|
107
|
-
@bibfile = attrs_cli['bib-file']
|
108
|
-
elsif attrs_src['bib-file']
|
109
|
-
@bibfile = attrs_src['bib-file']
|
110
|
-
end
|
111
|
-
order = nil
|
112
|
-
if attrs_cli['bib-numeric-order']
|
113
|
-
order = attrs_cli['bib-numeric-order']
|
114
|
-
elsif attrs_src['bib-numeric-order']
|
115
|
-
order = attrs_src['bib-numeric-order']
|
116
|
-
end
|
117
|
-
if order == nil
|
118
|
-
@numeric_order = :appearance
|
119
|
-
elsif order == "appearance"
|
120
|
-
@numeric_order = :appearance
|
121
|
-
elsif order == "alphabetical"
|
122
|
-
@numeric_order = :alphabetical
|
123
|
-
else
|
124
|
-
raise RuntimeError.new "Unknown numeric order: #{order}"
|
125
|
-
end
|
126
|
-
if attrs_cli['bib-no-links']
|
127
|
-
@links = false
|
128
|
-
elsif attrs_src['bib-no-links']
|
129
|
-
@links = false
|
130
|
-
end
|
131
|
-
if attrs_cli['bib-output']
|
132
|
-
@output = attrs_cli['bib-output']
|
133
|
-
elsif attrs_src['bib-output']
|
134
|
-
@output = attrs_src["bib-output"]
|
135
|
-
else
|
136
|
-
@output = "asciidoc"
|
137
|
-
end
|
138
|
-
|
139
|
-
# unless specified by caller, try to find the bibliography
|
140
|
-
if @bibfile.empty?
|
141
|
-
@bibfile = AsciidoctorBibtex::FileHandlers.find_bibliography "."
|
142
|
-
if @bibfile.empty?
|
143
|
-
@bibfile = AsciidoctorBibtex::FileHandlers.find_bibliography "#{ENV['HOME']}/Documents"
|
144
|
-
end
|
145
|
-
elsif not File.file? @bibfile
|
146
|
-
puts "Error: bibliography file '#{@bibfile}' does not exist"
|
147
|
-
exit
|
148
|
-
end
|
149
|
-
if @bibfile.empty?
|
150
|
-
puts "Error: could not find a bibliography file"
|
151
|
-
exit
|
152
|
-
end
|
153
|
-
unless AsciidoctorBibtex::Styles.valid? @style
|
154
|
-
puts "Error: style #{@style} was not one of the available styles"
|
155
|
-
exit
|
156
|
-
end
|
157
|
-
|
158
|
-
puts "Reading biblio: #{@bibfile}"
|
159
|
-
puts "Reference style: #{@style}"
|
160
|
-
puts "Numerical order: #{@numeric_order}"
|
161
|
-
puts "Output style: #{@output}"
|
162
|
-
end
|
163
|
-
|
164
|
-
def numeric_in_appearance_order?
|
165
|
-
@numeric_order == :appearance
|
166
|
-
end
|
167
|
-
end
|
168
|
-
end
|
data/samples/biblio.bib
DELETED
@@ -1,31 +0,0 @@
|
|
1
|
-
@book{Lane12a,
|
2
|
-
author = {P. Lane},
|
3
|
-
title = {Book title},
|
4
|
-
publisher = {Publisher},
|
5
|
-
year = {2000}
|
6
|
-
}
|
7
|
-
|
8
|
-
@book{Lane12b,
|
9
|
-
author = {K. Mane 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
|
-
}
|
data/samples/sample-1.adoc
DELETED
@@ -1,38 +0,0 @@
|
|
1
|
-
= Sample of using asciidoctor-bibtex
|
2
|
-
:bibtex-file: biblio.bib
|
3
|
-
:bibtex-order: alphabetical
|
4
|
-
:bibtex-style: ieee
|
5
|
-
|
6
|
-
The bibliography is searched in the folder of the document, and then in
|
7
|
-
~/Documents.
|
8
|
-
|
9
|
-
Author-year references can use different styles such as: cite:[Lane12b] or
|
10
|
-
citenp:[Lane12a].
|
11
|
-
|
12
|
-
Page numbers can be added: cite:[Lane12a(89)] or citenp:[Lane12a(89-93)].
|
13
|
-
|
14
|
-
A bit of pretext can be included too: See cite:[Lane12a(89)]
|
15
|
-
|
16
|
-
We can include other files, which are also processed:
|
17
|
-
|
18
|
-
include::sample-2.adoc[]
|
19
|
-
|
20
|
-
To include the reference list, use the section template before title, to
|
21
|
-
prevent problems with a2x.
|
22
|
-
|
23
|
-
References can be inserted in lists, too:
|
24
|
-
|
25
|
-
1. See cite:[Lane12a].
|
26
|
-
2. See cite:[Anderson98].
|
27
|
-
3. See cite:[Anderson04].
|
28
|
-
|
29
|
-
Also works for unordered list:
|
30
|
-
|
31
|
-
* See cite:[Lane12a].
|
32
|
-
* See cite:[Anderson98].
|
33
|
-
* See cite:[Anderson04].
|
34
|
-
|
35
|
-
[sect2]
|
36
|
-
== Bibliography
|
37
|
-
|
38
|
-
bibliography::biblio.bib[ieee]
|
data/samples/sample-2.adoc
DELETED
@@ -1,18 +0,0 @@
|
|
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: See cite:[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: See cite:[Lane12a, Lane12b(89-93)]
|
17
|
-
|
18
|
-
Note: citations cannot be split over lines; each citation must be on one line.
|