asciidoctor-lists 0.0.1

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 58e02dec63f52918b2ee0c8f5062d14eb451ef8c8847f07014e6d826c1c28a95
4
+ data.tar.gz: cefa380ff2daf11a8bffd28c6e5e957a3ec95e16bdb619d3f514c5f9ce0fd212
5
+ SHA512:
6
+ metadata.gz: 5e96c24f4090ae29d3cfbaa9d95167bd8435a0510fcd3231b47cd822352a7fe603f933660eaa7b1aec12f8689f3217353b14d3e27ac566b40cc837e40ec9ca77
7
+ data.tar.gz: ad010ae3a5c0803d4431c702e1cb02d825aa76253d903c50540455fa450ecb20cbbc546192de71c14973efbbbbe0a2f9849633664564e831ae828bc06699e201
data/README.adoc ADDED
@@ -0,0 +1,41 @@
1
+ = asciidoctor-lists (WIP)
2
+ :toc: macro
3
+ :toclevels: 1
4
+
5
+ image:https://img.shields.io/gem/v/asciidoctor-lists.svg[Latest Release, link=https://rubygems.org/gems/asciidoctor-lists]
6
+ Adds a list of figures, list of tables (WIP) or list of anything you want!
7
+
8
+ == Install
9
+ WIP :)
10
+
11
+ == Sample
12
+ === Code
13
+ [source,asciidoc]
14
+ ----
15
+ == Test the List of Figures Macro
16
+
17
+ .The wonderful linux logo
18
+ image::https://upload.wikimedia.org/wikipedia/commons/3/35/Tux.svg[Linux Logo,100,100]
19
+
20
+ .Another wikipedia SVG image
21
+ image::https://upload.wikimedia.org/wikipedia/commons/thumb/4/4f/SVG_Logo.svg/400px-SVG_Logo.svg.png[SVG,100,100]
22
+
23
+ === List of figures
24
+
25
+ tof::[]
26
+
27
+ ----
28
+
29
+ === Rendered
30
+ image::https://user-images.githubusercontent.com/39517491/139903592-84e9e6cd-c1a8-45ec-acb7-52f37e366ddc.png[Sample,width=400]
31
+
32
+ == What is planned next?
33
+ * Link between image/table/element and list
34
+ * Make generic (Also allow list of tables, or list of x)
35
+
36
+ == Dev setup
37
+ [source,bash]
38
+ ----
39
+ gem build asciidoctor-lists.gemspec
40
+ gem install asciidoctor-lists-0.0.1.gem
41
+ ----
@@ -0,0 +1,81 @@
1
+ require 'asciidoctor'
2
+ require 'asciidoctor/extensions'
3
+
4
+ module AsciidoctorLists
5
+ 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
+
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)
24
+
25
+ # Replaces tof::[] with ListOfFiguresMacroPlaceholder
26
+ class ListOfFiguresMacro < ::Extensions::BlockMacroProcessor
27
+ use_dsl
28
+ named :tof
29
+
30
+ def process(parent, target, attrs)
31
+ create_paragraph parent, ListOfFiguresMacroPlaceholder, {}
32
+ end
33
+ end
34
+ # Searches for the figures and replaced ListOfFiguresMacroPlaceholder with the list of figures
35
+ # Inspired by https://github.com/asciidoctor/asciidoctor-bibtex/blob/master/lib/asciidoctor-bibtex/extensions.rb#L162
36
+ class ListOfFiguresTreeprocessor < ::Asciidoctor::Extensions::Treeprocessor
37
+ def process document
38
+ references_asciidoc = []
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|
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
61
+ # This is an adapted version of Asciidoctor::Extension::parse_content,
62
+ # where resultant blocks are returned as a list instead of attached to
63
+ # the parent.
64
+ 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
72
+ end
73
+ end
74
+ end
75
+ end
76
+
77
+ # Register the extensions to asciidoctor
78
+ Asciidoctor::Extensions.register do
79
+ block_macro AsciidoctorLists::Asciidoctor::ListOfFiguresMacro
80
+ tree_processor AsciidoctorLists::Asciidoctor::ListOfFiguresTreeprocessor
81
+ end
@@ -0,0 +1,3 @@
1
+ module AsciidoctorLists
2
+ VERSION = '0.0.1'
3
+ end
@@ -0,0 +1,2 @@
1
+ require_relative 'asciidoctor-lists/extensions'
2
+ require_relative 'asciidoctor-lists/version'
metadata ADDED
@@ -0,0 +1,60 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: asciidoctor-lists
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Alwin Schuster
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2021-11-03 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: asciidoctor
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '2.0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '2.0'
27
+ description: Adds lists
28
+ email:
29
+ executables: []
30
+ extensions: []
31
+ extra_rdoc_files: []
32
+ files:
33
+ - README.adoc
34
+ - lib/asciidoctor-lists.rb
35
+ - lib/asciidoctor-lists/extensions.rb
36
+ - lib/asciidoctor-lists/version.rb
37
+ homepage: https://github.com/Alwinator/asciidoctor-lists
38
+ licenses:
39
+ - MIT
40
+ metadata: {}
41
+ post_install_message:
42
+ rdoc_options: []
43
+ require_paths:
44
+ - lib
45
+ required_ruby_version: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - ">="
48
+ - !ruby/object:Gem::Version
49
+ version: 2.4.0
50
+ required_rubygems_version: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ requirements: []
56
+ rubygems_version: 3.2.5
57
+ signing_key:
58
+ specification_version: 4
59
+ summary: An Asciidoctor extension that adds bibtex integration to AsciiDoc
60
+ test_files: []