asciidoctor-lists 0.0.3 → 0.0.4
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.adoc +23 -12
- data/lib/asciidoctor-lists/extensions.rb +26 -36
- data/lib/asciidoctor-lists/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0eaca66a3f98bc4f707f3a74344f8c6dac71c8d67d4058cc5d2252a526d311cf
|
4
|
+
data.tar.gz: 4869f786e928690b0abdcbcd0f8b04817776de5ccc91db26a17c67ed782eac63
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6693ed6dde5dea42bd91ddbb002f3e4885260af5dbb5ff4d5c9147660b2c3e03f153d3b227777ca01e4464a521f612797f43c60ae86323cc49cea3221fb8e838
|
7
|
+
data.tar.gz: bfcd636f140795aaba03d0a44df02a44c32d5a5906c35c668808cdc9422ff94e1c2cbb03abbb3f8659685840ae5f0602a19c3b7116021d9a37b24ce28b4d5764
|
data/README.adoc
CHANGED
@@ -1,11 +1,12 @@
|
|
1
|
-
= asciidoctor-lists
|
1
|
+
= asciidoctor-lists
|
2
2
|
:toc: macro
|
3
3
|
:toclevels: 1
|
4
4
|
|
5
|
+
image:https://github.com/Alwinator/asciidoctor-lists/actions/workflows/test.yml/badge.svg[Test, link=https://github.com/Alwinator/asciidoctor-lists/actions/workflows/test.yml]
|
5
6
|
image:https://github.com/Alwinator/asciidoctor-lists/actions/workflows/publish_gem.yml/badge.svg[Build, link=https://github.com/Alwinator/asciidoctor-lists/actions/workflows/publish_gem.yml]
|
6
7
|
image:https://img.shields.io/gem/v/asciidoctor-lists.svg[Latest Release, link=https://rubygems.org/gems/asciidoctor-lists]
|
7
8
|
|
8
|
-
|
9
|
+
An https://asciidoctor.org/[asciidoctor] extension which adds a list of figures, list of tables or list of anything you want!
|
9
10
|
|
10
11
|
== Install
|
11
12
|
[source,asciidoc]
|
@@ -17,41 +18,51 @@ gem install asciidoctor-lists
|
|
17
18
|
=== Code
|
18
19
|
[source,asciidoc]
|
19
20
|
----
|
20
|
-
|
21
|
+
...
|
22
|
+
|
23
|
+
.And this is the second one
|
24
|
+
|===
|
25
|
+
|Column 1, Header Row |Column 2, Header Row
|
26
|
+
|
27
|
+
|Cell in column 1, row 1
|
28
|
+
|Cell in column 2, row 1
|
29
|
+
|
30
|
+
|Cell in column 1, row 2
|
31
|
+
|Cell in column 2, row 2
|
32
|
+
|===
|
21
33
|
|
22
|
-
.The wonderful linux logo
|
23
|
-
image::https://upload.wikimedia.org/wikipedia/commons/3/35/Tux.svg[Linux Logo,100,100]
|
24
34
|
|
25
35
|
.Another wikipedia SVG image
|
26
36
|
image::https://upload.wikimedia.org/wikipedia/commons/thumb/4/4f/SVG_Logo.svg/400px-SVG_Logo.svg.png[SVG,100,100]
|
27
37
|
|
28
38
|
=== List of figures
|
39
|
+
element_list::[element=image]
|
29
40
|
|
30
|
-
|
41
|
+
=== List of tables
|
42
|
+
element_list::[element=table]
|
31
43
|
|
32
44
|
----
|
33
45
|
|
34
46
|
=== Rendered
|
35
|
-
image::
|
47
|
+
image::img/sample.png[Sample,width=400]
|
36
48
|
|
37
49
|
== What is planned next?
|
38
50
|
* Link between image/table/element and list
|
39
|
-
* Make generic (Also allow list of tables, or list of x)
|
40
51
|
|
41
52
|
== Docker
|
42
53
|
[source,bash]
|
43
54
|
----
|
44
55
|
# Build container
|
45
|
-
docker build -t asciidoctor-lists .
|
56
|
+
docker build --no-cache -t asciidoctor-lists .
|
46
57
|
# Run Docker
|
47
|
-
docker run -it --rm -v $(pwd):/work asciidoctor-lists
|
58
|
+
docker run -it --rm -v $(pwd):/work asciidoctor-lists
|
48
59
|
# Build sample
|
49
|
-
asciidoctor-pdf -r asciidoctor-lists samples/list-
|
60
|
+
asciidoctor-pdf -r asciidoctor-lists samples/list-sample.adoc
|
50
61
|
----
|
51
62
|
|
52
63
|
== Dev setup
|
53
64
|
[source,bash]
|
54
65
|
----
|
55
66
|
gem build asciidoctor-lists.gemspec
|
56
|
-
gem install asciidoctor-lists-
|
67
|
+
gem install asciidoctor-lists-x.x.x.gem
|
57
68
|
----
|
@@ -1,53 +1,43 @@
|
|
1
1
|
require 'asciidoctor'
|
2
2
|
require 'asciidoctor/extensions'
|
3
|
+
require 'securerandom'
|
3
4
|
|
4
5
|
module AsciidoctorLists
|
5
6
|
module Asciidoctor
|
6
|
-
# An macro that adds a list of all figures
|
7
|
-
# It only uses images that have a caption!
|
8
|
-
#
|
9
|
-
# Usage
|
10
|
-
"""
|
11
|
-
== Test the List of Figures Macro
|
12
7
|
|
13
|
-
|
14
|
-
image::https://upload.wikimedia.org/wikipedia/commons/3/35/Tux.svg[Linux Logo,100,100]
|
15
|
-
|
16
|
-
.Another wikipedia SVG image
|
17
|
-
image::https://upload.wikimedia.org/wikipedia/commons/thumb/4/4f/SVG_Logo.svg/400px-SVG_Logo.svg.png[SVG,100,100]
|
18
|
-
|
19
|
-
=== List of figures
|
20
|
-
|
21
|
-
tof::[]
|
22
|
-
"""
|
23
|
-
ListOfFiguresMacroPlaceholder = %(9d9711cf-0e95-4230-9973-78559fe928db)
|
8
|
+
MacroPlaceholder = Hash.new
|
24
9
|
|
25
10
|
# Replaces tof::[] with ListOfFiguresMacroPlaceholder
|
26
11
|
class ListOfFiguresMacro < ::Asciidoctor::Extensions::BlockMacroProcessor
|
27
12
|
use_dsl
|
28
|
-
named :
|
13
|
+
named :element_list
|
14
|
+
name_positional_attributes 'element'
|
29
15
|
|
30
|
-
def process(parent, _target,
|
31
|
-
|
16
|
+
def process(parent, _target, attrs)
|
17
|
+
uuid = SecureRandom.uuid
|
18
|
+
MacroPlaceholder[uuid] = {element: attrs['element']}
|
19
|
+
create_paragraph parent, uuid, {}
|
32
20
|
end
|
33
21
|
end
|
34
22
|
# Searches for the figures and replaced ListOfFiguresMacroPlaceholder with the list of figures
|
35
23
|
# Inspired by https://github.com/asciidoctor/asciidoctor-bibtex/blob/master/lib/asciidoctor-bibtex/extensions.rb#L162
|
36
24
|
class ListOfFiguresTreeprocessor < ::Asciidoctor::Extensions::Treeprocessor
|
37
25
|
def process document
|
38
|
-
|
39
|
-
document.find_by(context: :image).each do |image|
|
40
|
-
|
41
|
-
if image.caption
|
42
|
-
references_asciidoc << %(#{image.caption}#{image.title} +)
|
43
|
-
end
|
44
|
-
end
|
45
|
-
tof_blocks = document.find_by do |b|
|
26
|
+
tof_blocks = document.find_by do |b|
|
46
27
|
# for fast search (since most searches shall fail)
|
47
28
|
(b.content_model == :simple) && (b.lines.size == 1) \
|
48
|
-
&& (b.lines[0]
|
29
|
+
&& (MacroPlaceholder.keys.include?(b.lines[0]))
|
49
30
|
end
|
50
31
|
tof_blocks.each do |block|
|
32
|
+
references_asciidoc = []
|
33
|
+
element_name = ":" + MacroPlaceholder[block.lines[0]][:element]
|
34
|
+
document.find_by(context: eval(element_name)).each do |element|
|
35
|
+
|
36
|
+
if element.caption
|
37
|
+
references_asciidoc << %(#{element.caption}#{element.title} +)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
51
41
|
block_index = block.parent.blocks.index do |b|
|
52
42
|
b == block
|
53
43
|
end
|
@@ -62,13 +52,13 @@ module AsciidoctorLists
|
|
62
52
|
# where resultant blocks are returned as a list instead of attached to
|
63
53
|
# the parent.
|
64
54
|
def parse_asciidoc(parent, content, attributes = {})
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
55
|
+
result = []
|
56
|
+
reader = ::Asciidoctor::Reader.new content
|
57
|
+
while reader.has_more_lines?
|
58
|
+
block = ::Asciidoctor::Parser.next_block reader, parent, attributes
|
59
|
+
result << block if block
|
60
|
+
end
|
61
|
+
result
|
72
62
|
end
|
73
63
|
end
|
74
64
|
end
|