asciidoctor-lists 0.0.2 → 1.0.2

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4aecad588e7a8765383ef267e3347944a62014ea9c5f27eaa83ae9dfe0d358f0
4
- data.tar.gz: d1c0206463124ef3a4a9acdf4d6065788bf9a06eb8d7d4581553b4153144df3e
3
+ metadata.gz: 938bd9392b0c912ac112ced82ebef41f9bbf0772215f7d1a5f5bc1b5fdfa0a9a
4
+ data.tar.gz: 45b6506f0adfc38b3ae52077e26a1ee4f8d8bc3bcded0c8a99e1b98ac5696a77
5
5
  SHA512:
6
- metadata.gz: 16ea04882cb03b8ccc67c50c77025d4e7e7c359d85488dd4d0ccb2f94b1b6dceb68f5ea631a0466e2ae5a81c806894635a7802ad3e547ac08436a98f5d60d89f
7
- data.tar.gz: 749d08796de0d73deb968623c25d0447a33454bdb19dcdb3969c37ceff2c1357f0bf59fca01f2795b8860812a05fe134fec041427cebb2ea95bad70747f4d80a
6
+ metadata.gz: 82b2c2dd1b85bd0d4b163110033c801f023795a2b42133639f5449541916fba75b66ab06ddef1c1e13de40c3b122d471fe7a1d2a9fe9c0b7fa893036fb965d87
7
+ data.tar.gz: cd5ed1b976130783ba8ff6badc212eadc123d6a0906ea4575020e55fdebee56189a78015838d2ce001bbe63041997843aeb0bcff0b53027fe278e738b10704cf
data/README.adoc CHANGED
@@ -1,10 +1,12 @@
1
- = asciidoctor-lists (WIP)
2
- :toc: macro
3
- :toclevels: 1
1
+ = asciidoctor-lists
4
2
 
3
+ 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]
4
+ 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]
5
5
  image:https://img.shields.io/gem/v/asciidoctor-lists.svg[Latest Release, link=https://rubygems.org/gems/asciidoctor-lists]
6
6
 
7
- Adds a list of figures, list of tables (WIP) or list of anything you want!
7
+ An https://asciidoctor.org/[asciidoctor] extension that adds a list of figures, a list of tables, or a list of anything you want!
8
+
9
+ *Pull Request are always welcome! :)*
8
10
 
9
11
  == Install
10
12
  [source,asciidoc]
@@ -16,26 +18,33 @@ gem install asciidoctor-lists
16
18
  === Code
17
19
  [source,asciidoc]
18
20
  ----
19
- == Test the List of Figures Macro
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
+ |===
20
33
 
21
- .The wonderful linux logo
22
- image::https://upload.wikimedia.org/wikipedia/commons/3/35/Tux.svg[Linux Logo,100,100]
23
34
 
24
35
  .Another wikipedia SVG image
25
36
  image::https://upload.wikimedia.org/wikipedia/commons/thumb/4/4f/SVG_Logo.svg/400px-SVG_Logo.svg.png[SVG,100,100]
26
37
 
27
38
  === List of figures
39
+ element_list::[element=image]
28
40
 
29
- tof::[]
41
+ === List of tables
42
+ element_list::[element=table]
30
43
 
31
44
  ----
32
45
 
33
46
  === Rendered
34
- image::https://user-images.githubusercontent.com/39517491/139903592-84e9e6cd-c1a8-45ec-acb7-52f37e366ddc.png[Sample,width=400]
35
-
36
- == What is planned next?
37
- * Link between image/table/element and list
38
- * Make generic (Also allow list of tables, or list of x)
47
+ image::img/sample.png[Sample,width=400]
39
48
 
40
49
  == Docker
41
50
  [source,bash]
@@ -43,14 +52,21 @@ image::https://user-images.githubusercontent.com/39517491/139903592-84e9e6cd-c1a
43
52
  # Build container
44
53
  docker build -t asciidoctor-lists .
45
54
  # Run Docker
46
- docker run -it --rm -v $(pwd):/work asciidoctor-lists:latest
55
+ docker run -it --rm -v $(pwd):/work asciidoctor-lists
47
56
  # Build sample
48
- asciidoctor-pdf -r asciidoctor-lists samples/list-of-figures.adoc
57
+ asciidoctor-pdf -r asciidoctor-lists samples/list-sample.adoc
49
58
  ----
50
59
 
51
60
  == Dev setup
61
+ === Run
62
+ [source,bash]
63
+ ----
64
+ asciidoctor -r ./lib/asciidoctor-lists.rb samples/list-sample.adoc
65
+ ----
66
+
67
+ === Install Gem
52
68
  [source,bash]
53
69
  ----
54
70
  gem build asciidoctor-lists.gemspec
55
- gem install asciidoctor-lists-0.0.2.gem
71
+ gem install asciidoctor-lists-x.x.x.gem
56
72
  ----
@@ -1,74 +1,67 @@
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
- .The wonderful linux logo
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
- class ListOfFiguresMacro < ::Extensions::BlockMacroProcessor
11
+ class ListOfFiguresMacro < ::Asciidoctor::Extensions::BlockMacroProcessor
27
12
  use_dsl
28
- named :tof
13
+ named :element_list
14
+ name_positional_attributes 'element'
29
15
 
30
- def process(parent, target, attrs)
31
- create_paragraph parent, ListOfFiguresMacroPlaceholder, {}
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
- def process document
25
+ def process(document)
26
+ tof_blocks = document.find_by do |b|
27
+ # for fast search (since most searches shall fail)
28
+ (b.content_model == :simple) && (b.lines.size == 1) \
29
+ && (MacroPlaceholder.keys.include?(b.lines[0]))
30
+ end
31
+ tof_blocks.each do |block|
38
32
  references_asciidoc = []
39
- document.find_by(context: :image).each do |image|
33
+ element_name = ":" + MacroPlaceholder[block.lines[0]][:element]
34
+ document.find_by(context: eval(element_name)).each do |element|
40
35
 
41
- if image.caption
42
- references_asciidoc << %(#{image.caption}#{image.title} +)
43
- end
44
- end
45
- tof_blocks = document.find_by do |b|
46
- # for fast search (since most searches shall fail)
47
- (b.content_model == :simple) && (b.lines.size == 1) \
48
- && (b.lines[0] == ListOfFiguresMacroPlaceholder)
49
- end
50
- tof_blocks.each do |block|
51
- block_index = block.parent.blocks.index do |b|
52
- b == block
53
- end
54
- reference_blocks = parse_asciidoc block.parent, references_asciidoc
55
- reference_blocks.reverse.each do |b|
56
- block.parent.blocks.insert block_index, b
57
- end
58
- block.parent.blocks.delete_at block_index + reference_blocks.size
59
- end
60
- end
36
+ if element.caption
37
+ unless element.id
38
+ element.id = SecureRandom.uuid
39
+ end
40
+ references_asciidoc << %(xref:#{element.id}[#{element.caption}]#{element.title} +)
41
+ end
42
+ end
43
+
44
+ block_index = block.parent.blocks.index do |b|
45
+ b == block
46
+ end
47
+ reference_blocks = parse_asciidoc block.parent, references_asciidoc
48
+ reference_blocks.reverse.each do |b|
49
+ block.parent.blocks.insert block_index, b
50
+ end
51
+ block.parent.blocks.delete_at block_index + reference_blocks.size
52
+ end
53
+ end
61
54
  # This is an adapted version of Asciidoctor::Extension::parse_content,
62
55
  # where resultant blocks are returned as a list instead of attached to
63
56
  # the parent.
64
57
  def parse_asciidoc(parent, content, attributes = {})
65
- result = []
66
- reader = ::Asciidoctor::Reader.new content
67
- while reader.has_more_lines?
68
- block = ::Asciidoctor::Parser.next_block reader, parent, attributes
69
- result << block if block
70
- end
71
- result
58
+ result = []
59
+ reader = ::Asciidoctor::Reader.new content
60
+ while reader.has_more_lines?
61
+ block = ::Asciidoctor::Parser.next_block reader, parent, attributes
62
+ result << block if block
63
+ end
64
+ result
72
65
  end
73
66
  end
74
67
  end
@@ -1,3 +1,3 @@
1
1
  module AsciidoctorLists
2
- VERSION = '0.0.2'
2
+ VERSION = '1.0.2'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: asciidoctor-lists
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 1.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alwin Schuster
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-11-04 00:00:00.000000000 Z
11
+ date: 2021-12-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: asciidoctor