asciidoctor-bibliography 0.8.0 → 0.9.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 +5 -5
- data/lib/asciidoctor-bibliography/asciidoctor/bibliographer_preprocessor.rb +10 -1
- data/lib/asciidoctor-bibliography/bibliographer.rb +5 -0
- data/lib/asciidoctor-bibliography/citation.rb +33 -9
- data/lib/asciidoctor-bibliography/index.rb +6 -3
- data/lib/asciidoctor-bibliography/version.rb +1 -1
- data/spec/index_spec.rb +15 -0
- data/spec/macros_spec.rb +10 -0
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 712c0be34cc869f4b848ce77298e3244b9a82e13be4c7a9706c51644e58995b9
|
4
|
+
data.tar.gz: 8f4feb1dd4a372b1e160b8f0a1f265f09f4aca817a8b1bb9a467c71c8d36cba1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8342d233009659444f05076f35c226e61d246d05a9853c993ac73554f47ffb8ebe51ff7984cd53af6188dee2787096e3b1aed13275b2a64a57bc153a5dd7dd2b
|
7
|
+
data.tar.gz: 5bbe71d2c51f89f10aaa2de9a3bde81fb2c7a03ce286eca99b976f25fe9294e04c5b92541214beb4effffedc1010ffacbfbff65d4527e55fa97cc9820809b933
|
@@ -15,7 +15,8 @@ module AsciidoctorBibliography
|
|
15
15
|
document.bibliographer.database =
|
16
16
|
::AsciidoctorBibliography::Database.new *expand_db_globs(document)
|
17
17
|
|
18
|
-
|
18
|
+
lines = remove_comments(reader.read_lines)
|
19
|
+
processed_lines = process_lines lines, document.bibliographer
|
19
20
|
reader.unshift_lines processed_lines
|
20
21
|
reader
|
21
22
|
end
|
@@ -31,6 +32,14 @@ module AsciidoctorBibliography
|
|
31
32
|
render_indices lines, bibliographer
|
32
33
|
end
|
33
34
|
|
35
|
+
def remove_comments(lines)
|
36
|
+
# Remove block comments
|
37
|
+
ls = lines.join("\n").split(/^\/\/\/\/\n/).
|
38
|
+
select.with_index { |_, i| i.even? }.join
|
39
|
+
# Remove line comments
|
40
|
+
ls.split("\n").reject { |line| line.start_with?("//") }
|
41
|
+
end
|
42
|
+
|
34
43
|
def fetch_citations(lines, bibliographer)
|
35
44
|
lines.join("\n").gsub(Citation::REGEXP) do
|
36
45
|
citation = Citation.new(*Regexp.last_match.captures)
|
@@ -16,6 +16,11 @@ module AsciidoctorBibliography
|
|
16
16
|
|
17
17
|
def add_citation(citation)
|
18
18
|
citations << citation
|
19
|
+
|
20
|
+
# NOTE: Since we're rendering the whole (possibly composite) citation as missing - even if
|
21
|
+
# NOTE: a single key is nil - we add none of them to the occurring keys to be rendered in indices.
|
22
|
+
return if citation.any_missing_id?(self)
|
23
|
+
|
19
24
|
citation.citation_items.group_by(&:target).each do |target, citation_items|
|
20
25
|
@occurring_keys[target] ||= []
|
21
26
|
@occurring_keys[target].concat(citation_items.map(&:key)).uniq!
|
@@ -14,6 +14,8 @@ module AsciidoctorBibliography
|
|
14
14
|
REGEXP = /\\?(#{MACRO_NAME_REGEXP}):(?:(\S*?)?\[(|.*?[^\\])\])(?:\+(\S*?)?\[(|.*?[^\\])\])*/
|
15
15
|
REF_ATTRIBUTES = %i[chapter page section clause].freeze
|
16
16
|
|
17
|
+
MISSING_ID_MARK = "*??*".freeze
|
18
|
+
|
17
19
|
attr_reader :macro, :citation_items
|
18
20
|
|
19
21
|
def initialize(macro, *target_and_attributes_list_pairs)
|
@@ -29,19 +31,41 @@ module AsciidoctorBibliography
|
|
29
31
|
# rubocop:enable Performance/HashEachMethods
|
30
32
|
end
|
31
33
|
|
34
|
+
def missing_ids(bibliographer)
|
35
|
+
m_ids = (@citation_items.map(&:key) - bibliographer.database.map { |entry| entry["id"] })
|
36
|
+
m_ids.map! { |id| id.nil? ? "" : id }
|
37
|
+
end
|
38
|
+
|
39
|
+
def any_missing_id?(bibliographer)
|
40
|
+
# NOTE: do not use :any? since it ignores nil
|
41
|
+
not missing_ids(bibliographer).empty?
|
42
|
+
end
|
43
|
+
|
32
44
|
def render(bibliographer)
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
45
|
+
# NOTE: If there is any blank key we must render the entire (possibly composite)
|
46
|
+
# NOTE: citation as missing, as we don't have that kind of control over CSL styles.
|
47
|
+
if any_missing_id?(bibliographer)
|
48
|
+
warn "Warning: I didn't find a database entry for #{missing_ids(bibliographer)}."
|
49
|
+
# TODO: It would be cool to have the title attribute show the missing keys
|
50
|
+
# TODO: as a popup above *??* but it does not work on inline quoted text.
|
51
|
+
return MISSING_ID_MARK
|
52
|
+
end
|
53
|
+
|
54
|
+
formatted_citation = render_with_csl(bibliographer)
|
42
55
|
wrap_up_citation citation: formatted_citation, bibliographer: bibliographer
|
43
56
|
end
|
44
57
|
|
58
|
+
def render_with_csl(bibliographer)
|
59
|
+
case macro
|
60
|
+
when "cite"
|
61
|
+
render_citation_with_csl(bibliographer)
|
62
|
+
when "fullcite"
|
63
|
+
render_fullcite_with_csl(bibliographer)
|
64
|
+
when *TEX_MACROS
|
65
|
+
render_texmacro_with_csl(bibliographer)
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
45
69
|
def wrap_up_citation(citation:, bibliographer:)
|
46
70
|
text = citation.dup
|
47
71
|
# TODO: handle hyperlinks here, maybe?
|
@@ -49,9 +49,12 @@ module AsciidoctorBibliography
|
|
49
49
|
end
|
50
50
|
|
51
51
|
def prepare_filtered_db(bibliographer)
|
52
|
-
bibliographer.occurring_keys
|
53
|
-
|
54
|
-
|
52
|
+
if bibliographer.occurring_keys.include? target
|
53
|
+
bibliographer.occurring_keys[target].
|
54
|
+
map { |id| bibliographer.database.find_entry_by_id(id) }.
|
55
|
+
map { |entry| prepare_entry_metadata bibliographer, entry }
|
56
|
+
else {}
|
57
|
+
end
|
55
58
|
end
|
56
59
|
|
57
60
|
def prepare_entry_metadata(bibliographer, entry)
|
data/spec/index_spec.rb
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
require_relative "citation_helper"
|
4
|
+
|
5
|
+
describe AsciidoctorBibliography::Index do
|
6
|
+
describe ".render" do
|
7
|
+
subject { described_class.new([], "default", "") }
|
8
|
+
|
9
|
+
it "does not fail when no citations occur in the document" do
|
10
|
+
options = { "bibliography-style" => "ieee", "bibliography-database" => "database.bibtex", "bibliography-passthrough" => "true", "bibliography-prepend-empty" => "false" }
|
11
|
+
bibliographer = init_bibliographer options: options
|
12
|
+
expect { subject.render bibliographer}.to_not raise_exception
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
data/spec/macros_spec.rb
CHANGED
@@ -31,3 +31,13 @@ describe "fullcite macro with apa style" do
|
|
31
31
|
to eq "Erdős, P., Heyting, A., & Brouwer, L. E. (1965). Some very hard sums. _Difficult Maths Today_, 30."
|
32
32
|
end
|
33
33
|
end
|
34
|
+
|
35
|
+
describe "cite macro using an unknown key" do
|
36
|
+
it "formats bold question marks" do
|
37
|
+
expect(formatted_citation("cite:[Erdos65]+[foobar]",
|
38
|
+
options: { "bibliography-style" => "apa",
|
39
|
+
"bibliography-database" => "database.bib",
|
40
|
+
"bibliography-hyperlinks" => "true" })).
|
41
|
+
to eq "*??*"
|
42
|
+
end
|
43
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: asciidoctor-bibliography
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.9.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ribose Inc.
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2019-05-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: asciidoctor
|
@@ -302,6 +302,7 @@ files:
|
|
302
302
|
- spec/fixtures/database.bibtex
|
303
303
|
- spec/fixtures/database.rfc.xml
|
304
304
|
- spec/fixtures/database.unk
|
305
|
+
- spec/index_spec.rb
|
305
306
|
- spec/macros_spec.rb
|
306
307
|
- spec/options_spec.rb
|
307
308
|
- spec/sanity_spec.rb
|
@@ -326,8 +327,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
326
327
|
- !ruby/object:Gem::Version
|
327
328
|
version: '0'
|
328
329
|
requirements: []
|
329
|
-
|
330
|
-
rubygems_version: 2.6.14
|
330
|
+
rubygems_version: 3.0.3
|
331
331
|
signing_key:
|
332
332
|
specification_version: 4
|
333
333
|
summary: Citations and bibliography the "asciidoctor-way"
|