asciidoctor-lists 0.0.3 → 1.0.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: df21d7405e2bd61684ae02680874f92be4f0101a4cf270c27b64213326d43574
4
- data.tar.gz: 7bf4131455afd55c97435dcb824556a9e58fd29fba57a4adaf1451409a47e732
3
+ metadata.gz: 7eeaecee95733de1e2291f1047db511b54c07079d55f910857226b87d0d5e522
4
+ data.tar.gz: b24e5796859234bb3da27c82b5081433c502970ab1d5146e9a51dbbf158338ee
5
5
  SHA512:
6
- metadata.gz: 91ad039018f2c9efae5670dd242e92cd091885c4b00403320e588a79dab4ca5bd736becf8adbaf4ade4efb8deb49b5e5fd3add8eed3ad06cc81b54e9e01a4a16
7
- data.tar.gz: e2756b56f60d202d7e4cc7e595a8b4e4800228f5015ddf10a6a2a39122581d19214b8c5af5420c0268f14793ee6d9583a9de6bea6c5a65847692e17b5dff39ab
6
+ metadata.gz: 2dd9fa38be20f3c80cc53ee06146ad906121a3ed15617fd979d7a5fa856f453b1a068ecbe4509312d45d40cd8981a3e6b5a4dfda9a9d74a59671ef32f19e07db
7
+ data.tar.gz: 4b4c5db93c285ddd289d1f6b5e48d0c369ad94c2ed1b47d17482da5e75891ade0dbec50a3733a5eb36420c4c59de2948dc446c5e90cbe3bf70234baaeb3ace4e
data/README.adoc CHANGED
@@ -1,11 +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]
5
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]
6
5
  image:https://img.shields.io/gem/v/asciidoctor-lists.svg[Latest Release, link=https://rubygems.org/gems/asciidoctor-lists]
7
6
 
8
- 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! :)*
9
10
 
10
11
  == Install
11
12
  [source,asciidoc]
@@ -17,26 +18,33 @@ gem install asciidoctor-lists
17
18
  === Code
18
19
  [source,asciidoc]
19
20
  ----
20
- == 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
+ |===
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
- tof::[]
41
+ === List of tables
42
+ element_list::[element=table]
31
43
 
32
44
  ----
33
45
 
34
46
  === Rendered
35
- image::https://user-images.githubusercontent.com/39517491/139903592-84e9e6cd-c1a8-45ec-acb7-52f37e366ddc.png[Sample,width=400]
36
-
37
- == What is planned next?
38
- * Link between image/table/element and list
39
- * Make generic (Also allow list of tables, or list of x)
47
+ image::img/sample.png[Sample,width=400]
40
48
 
41
49
  == Docker
42
50
  [source,bash]
@@ -44,14 +52,21 @@ image::https://user-images.githubusercontent.com/39517491/139903592-84e9e6cd-c1a
44
52
  # Build container
45
53
  docker build -t asciidoctor-lists .
46
54
  # Run Docker
47
- docker run -it --rm -v $(pwd):/work asciidoctor-lists:latest
55
+ docker run -it --rm -v $(pwd):/work asciidoctor-lists
48
56
  # Build sample
49
- asciidoctor-pdf -r asciidoctor-lists samples/list-of-figures.adoc
57
+ asciidoctor-pdf -r asciidoctor-lists samples/list-sample.adoc
50
58
  ----
51
59
 
52
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
53
68
  [source,bash]
54
69
  ----
55
70
  gem build asciidoctor-lists.gemspec
56
- gem install asciidoctor-lists-0.0.2.gem
71
+ gem install asciidoctor-lists-x.x.x.gem
57
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
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.3'
2
+ VERSION = '1.0.3'
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.3
4
+ version: 1.0.3
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: 2022-01-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: asciidoctor
@@ -24,7 +24,8 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '2.0'
27
- description: Adds lists
27
+ description: An asciidoctor extension that adds a list of figures, a list of tables,
28
+ or a list of anything you want!
28
29
  email:
29
30
  executables: []
30
31
  extensions: []
@@ -56,5 +57,6 @@ requirements: []
56
57
  rubygems_version: 3.1.2
57
58
  signing_key:
58
59
  specification_version: 4
59
- summary: An Asciidoctor extension that adds bibtex integration to AsciiDoc
60
+ summary: An asciidoctor extension that adds a list of figures, a list of tables, or
61
+ a list of anything you want!
60
62
  test_files: []