asciidoctor-diagram 2.0.2 → 2.0.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.adoc +25 -0
- data/README.adoc +13 -4
- data/lib/asciidoctor-diagram.rb +3 -0
- data/lib/asciidoctor-diagram/a2s/converter.rb +10 -6
- data/lib/asciidoctor-diagram/blockdiag/converter.rb +1 -1
- data/lib/asciidoctor-diagram/bpmn/converter.rb +3 -3
- data/lib/asciidoctor-diagram/diagram_converter.rb +5 -1
- data/lib/asciidoctor-diagram/diagram_processor.rb +64 -38
- data/lib/asciidoctor-diagram/diagram_source.rb +64 -17
- data/lib/asciidoctor-diagram/ditaa/converter.rb +6 -2
- data/lib/asciidoctor-diagram/dpic.rb +7 -0
- data/lib/asciidoctor-diagram/dpic/converter.rb +30 -0
- data/lib/asciidoctor-diagram/dpic/extension.rb +14 -0
- data/lib/asciidoctor-diagram/gnuplot/converter.rb +8 -8
- data/lib/asciidoctor-diagram/graphviz/converter.rb +2 -2
- data/lib/asciidoctor-diagram/http/converter.rb +25 -5
- data/lib/asciidoctor-diagram/http/server.rb +10 -5
- data/lib/asciidoctor-diagram/lilypond/converter.rb +2 -2
- data/lib/asciidoctor-diagram/meme/converter.rb +7 -7
- data/lib/asciidoctor-diagram/mermaid/converter.rb +16 -15
- data/lib/asciidoctor-diagram/msc/converter.rb +2 -2
- data/lib/asciidoctor-diagram/pikchr.rb +7 -0
- data/lib/asciidoctor-diagram/pikchr/converter.rb +26 -0
- data/lib/asciidoctor-diagram/pikchr/extension.rb +14 -0
- data/lib/asciidoctor-diagram/plantuml/converter.rb +3 -3
- data/lib/asciidoctor-diagram/smcat/converter.rb +3 -3
- data/lib/asciidoctor-diagram/svgbob/converter.rb +2 -2
- data/lib/asciidoctor-diagram/symbolator.rb +7 -0
- data/lib/asciidoctor-diagram/symbolator/converter.rb +23 -0
- data/lib/asciidoctor-diagram/symbolator/extension.rb +14 -0
- data/lib/asciidoctor-diagram/syntrax/converter.rb +9 -6
- data/lib/asciidoctor-diagram/util/cli_generator.rb +18 -0
- data/lib/asciidoctor-diagram/util/gif.rb +2 -2
- data/lib/asciidoctor-diagram/util/pdf.rb +2 -2
- data/lib/asciidoctor-diagram/util/png.rb +2 -2
- data/lib/asciidoctor-diagram/util/svg.rb +46 -19
- data/lib/asciidoctor-diagram/vega/converter.rb +2 -2
- data/lib/asciidoctor-diagram/version.rb +1 -1
- data/spec/a2s_spec.rb +2 -140
- data/spec/blockdiag_spec.rb +2 -200
- data/spec/bpmn_spec.rb +52 -92
- data/spec/bytefield_spec.rb +2 -140
- data/spec/ditaa_spec.rb +5 -143
- data/spec/dpic_spec.rb +19 -0
- data/spec/erd_spec.rb +2 -199
- data/spec/gnuplot_spec.rb +2 -255
- data/spec/graphviz_spec.rb +6 -145
- data/spec/lilypond_spec.rb +2 -140
- data/spec/mermaid_spec.rb +2 -199
- data/spec/msc_spec.rb +2 -199
- data/spec/nomnoml_spec.rb +4 -142
- data/spec/pikchr_spec.rb +51 -0
- data/spec/plantuml_spec.rb +6 -578
- data/spec/shaape_spec.rb +9 -221
- data/spec/shared_examples.rb +552 -0
- data/spec/smcat_spec.rb +2 -140
- data/spec/svgbob_spec.rb +2 -140
- data/spec/symbolator_spec.rb +23 -0
- data/spec/syntrax_spec.rb +5 -215
- data/spec/test_helper.rb +1 -22
- data/spec/tikz_spec.rb +4 -24
- data/spec/umlet_spec.rb +2 -58
- data/spec/vega_spec.rb +4 -117
- data/spec/wavedrom_spec.rb +2 -199
- metadata +20 -6
- data/spec/bpmn-example.xml +0 -44
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6929d068c82dc319a53dbcbc30da263e8356923fe2f92e6c4794f166c61b0252
|
4
|
+
data.tar.gz: 15b20dbe24d572cf174114d3e7cfa6146aa8bb7d46403de6c08284f6819d6e15
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 04bec237f4f0529bd12324a1794bb0cd863a82ec27b867572e0f14ff93dbbce4e1e553e48f43fe04fbf1c31cf9af6eaab4e5b7933fb6b820988eade9031653d4
|
7
|
+
data.tar.gz: 392c0d5e97b6527bb21019f146732a8028681362c5dc19c8c572b2dc06a2c1f528a06d9d3236e292c8166f9acca3be1892bcb35eb0591a3e1c4a40ce10ff9e06
|
data/CHANGELOG.adoc
CHANGED
@@ -1,5 +1,30 @@
|
|
1
1
|
= Asciidoctor-diagram Changelog
|
2
2
|
|
3
|
+
== 2.0.4
|
4
|
+
|
5
|
+
Enhancements::
|
6
|
+
|
7
|
+
* Issue #110: Added support for an experimental attribute `diagram-autoimagesdir` that sets per image node `imagesdir` values.
|
8
|
+
|
9
|
+
Bug Fixes::
|
10
|
+
|
11
|
+
* Issue #292: A regression in 2.0.3 caused SVG diagrams to get a zero width and height when documents were regenerated.
|
12
|
+
|
13
|
+
== 2.0.3
|
14
|
+
|
15
|
+
Enhancements::
|
16
|
+
|
17
|
+
* Issue #261: Ensure generated SVG diagrams always specify a view box
|
18
|
+
* Issue #284: Add support for HTTP redirect responses when using a rendering server
|
19
|
+
* Issue #290: Add support for Pikchr
|
20
|
+
* Add support for dpic
|
21
|
+
* Add support for Symboloator (@gsmecher)
|
22
|
+
|
23
|
+
Bug Fixes::
|
24
|
+
|
25
|
+
* Issue #247: Fix `svg-type`/`diagram-svg-type`.
|
26
|
+
* Issue #257: Avoid potential hangs when generating Mermaid diagrams
|
27
|
+
|
3
28
|
== 2.0.2
|
4
29
|
|
5
30
|
Enhancements::
|
data/README.adoc
CHANGED
@@ -21,18 +21,20 @@ ifndef::env-site[:status:]
|
|
21
21
|
:uri-bpmn: https://github.com/gtudan/bpmn-js-cmd
|
22
22
|
:uri-bytefield: https://github.com/Deep-Symmetry/bytefield-svg
|
23
23
|
:uri-ditaa: http://ditaa.sourceforge.net/
|
24
|
+
:uri-dpic: https://gitlab.com/aplevich/dpic
|
24
25
|
:uri-dot: https://graphviz.gitlab.io/_pages/doc/info/lang.html
|
25
26
|
:uri-erd: https://github.com/BurntSushi/erd
|
26
27
|
:uri-gnuplot: http://gnuplot.info
|
27
28
|
:uri-graphviz: https://graphviz.gitlab.io
|
28
29
|
:uri-imagemagick: http://www.imagemagick.org
|
29
30
|
:uri-java: http://java.sun.com
|
30
|
-
:uri-mermaid: https://github.com/
|
31
|
+
:uri-mermaid: https://github.com/mermaid-js/mermaid-cli
|
31
32
|
:uri-mscgen: http://www.mcternan.me.uk/mscgen/
|
32
33
|
:uri-nomnoml: http://nomnoml.com
|
33
34
|
:uri-nwdiag: http://blockdiag.com/en/nwdiag/index.html
|
34
35
|
:uri-packetdiag: http://blockdiag.com/en/nwdiag/index.html
|
35
36
|
:uri-phantomjs: http://phantomjs.org
|
37
|
+
:uri-pikchr: https://pikchr.org
|
36
38
|
:uri-plantuml: http://plantuml.sourceforge.net
|
37
39
|
:uri-py-plantuml: https://code.google.com/p/asciidoc-plantuml/
|
38
40
|
:uri-rackdiag: http://blockdiag.com/en/nwdiag/index.html
|
@@ -40,6 +42,7 @@ ifndef::env-site[:status:]
|
|
40
42
|
:uri-shaape: https://github.com/christiangoltz/shaape
|
41
43
|
:uri-smcat: https://github.com/sverweij/state-machine-cat
|
42
44
|
:uri-svgbob: https://github.com/ivanceras/svgbobrus
|
45
|
+
:uri-symbolator: https://github.com/kevinpt/symbolator
|
43
46
|
:uri-syntrax: https://kevinpt.github.io/syntrax/
|
44
47
|
:uri-umlet: http://www.umlet.com/
|
45
48
|
:uri-vega: https://vega.github.io/vega/
|
@@ -50,7 +53,7 @@ ifndef::env-site[:status:]
|
|
50
53
|
|
51
54
|
Asciidoctor Diagram is a set of Asciidoctor extensions that enable you to add diagrams, which you describe using plain text, to your AsciiDoc document.
|
52
55
|
|
53
|
-
The extensions supports the {uri-a2s}[AsciiToSVG], BlockDiag ({uri-blockdiag}[BlockDiag], {uri-seqdiag}[SeqDiag], {uri-actdiag}[ActDiag], {uri-nwdiag}[NwDiag]), {uri-bytefield}[Bytefield-SVG], {uri-ditaa}[Ditaa], {uri-erd}[Erd], {uri-gnuplot}[Gnuplot], {uri-dot}[GraphViz], {uri-mermaid}[Mermaid], {uri-mscgen}[Msc], {uri-nomnoml}[Nomnoml], {uri-plantuml}[PlantUML], {uri-shaape}[Shaape], {uri-smcat}[State Machine Cat], {uri-svgbob}[SvgBob], {uri-syntrax}[Syntrax], {uri-umlet}[UMLet], {uri-vega}[Vega], {uri-vegalite}[Vega-Lite] and {uri-wavedrom}[WaveDrom] syntax.
|
56
|
+
The extensions supports the {uri-a2s}[AsciiToSVG], BlockDiag ({uri-blockdiag}[BlockDiag], {uri-seqdiag}[SeqDiag], {uri-actdiag}[ActDiag], {uri-nwdiag}[NwDiag]), {uri-bytefield}[Bytefield-SVG], {uri-ditaa}[Ditaa], {uri-dpic}[dpic], {uri-erd}[Erd], {uri-gnuplot}[Gnuplot], {uri-dot}[GraphViz], {uri-mermaid}[Mermaid], {uri-mscgen}[Msc], {uri-nomnoml}[Nomnoml], {uri-pikchr}[Pikchr], {uri-plantuml}[PlantUML], {uri-shaape}[Shaape], {uri-smcat}[State Machine Cat], {uri-svgbob}[SvgBob], {uri-symbolator}[Symbolator], {uri-syntrax}[Syntrax], {uri-umlet}[UMLet], {uri-vega}[Vega], {uri-vegalite}[Vega-Lite] and {uri-wavedrom}[WaveDrom] syntax.
|
54
57
|
|
55
58
|
Each extension runs the diagram processor to generate an SVG, PNG, or TXT file from the input text.
|
56
59
|
The generated file is then inserted into your converted document.
|
@@ -126,6 +129,7 @@ The following diagram types and output formats are available:
|
|
126
129
|
|{uri-bpmn}[bpmn] | |{check}|{check}|{check}|
|
127
130
|
|{uri-bytefield}[bytefield] | | | |{check}|
|
128
131
|
|{uri-ditaa}[ditaa] | | |{check}|{check}|
|
132
|
+
|{uri-dpic}[dpic] | | | |{check}|
|
129
133
|
|{uri-erd}[erd] | | |{check}|{check}|
|
130
134
|
|{uri-gnuplot}[gnuplot] |{check}| |{check}|{check}|{check}
|
131
135
|
|{uri-dot}[graphviz] | |{check}|{check}|{check}|
|
@@ -135,12 +139,14 @@ The following diagram types and output formats are available:
|
|
135
139
|
|{uri-nomnoml}[nomnoml] | | | |{check}|
|
136
140
|
|{uri-nwdiag}[nwdiag] | |{check}|{check}|{check}|
|
137
141
|
|{uri-packetdiag}[packetdiag]| |{check}|{check}|{check}|
|
142
|
+
|{uri-pikchr}[pikchr] | | | |{check}|
|
138
143
|
|{uri-plantuml}[plantuml] | | |{check}|{check}|{check}
|
139
144
|
|{uri-rackdiag}[rackdiag] | |{check}|{check}|{check}|
|
140
145
|
|{uri-seqdiag}[seqdiag] | |{check}|{check}|{check}|
|
141
146
|
|{uri-shaape}[shaape] | | |{check}|{check}|
|
142
147
|
|{uri-smcat}[smcat] | | | |{check}|
|
143
148
|
|{uri-svgbob}[svgbob] | | | |{check}|
|
149
|
+
|{uri-symbolator}[symbolator]| |{check}|{check}|{check}|
|
144
150
|
|{uri-syntrax}[syntrax] | |{check}|{check}|{check}|
|
145
151
|
|{uri-umlet}[umlet] |{check}|{check}|{check}|{check}|
|
146
152
|
|{uri-vega}[vega] | | |{check}|{check}|
|
@@ -257,7 +263,7 @@ or load and register each extension individually.
|
|
257
263
|
require 'asciidoctor-diagram/<extension_name>'
|
258
264
|
----
|
259
265
|
|
260
|
-
`<extension_name>` can be one of `a2s`, `blockdiag`, `bytefield`, `ditaa`, `erd`, `gnuplot`, `graphviz`, `meme`, `mermaid`, `msc`, `plantuml`, `shaape`, `smcat`, `svgbob`, `syntrax`, `umlet`, `vega` or `wavedrom`.
|
266
|
+
`<extension_name>` can be one of `a2s`, `blockdiag`, `bytefield`, `ditaa`, `dpic`, `erd`, `gnuplot`, `graphviz`, `meme`, `mermaid`, `msc`, `pikchr`, `plantuml`, `shaape`, `smcat`, `svgbob`, `syntrax`, `umlet`, `vega` or `wavedrom`.
|
261
267
|
|
262
268
|
Requiring one or more of these files will automatically register the extensions for all processed documents.
|
263
269
|
|
@@ -306,21 +312,24 @@ The following table lists the tools that are required for each diagram type, the
|
|
306
312
|
|bpmn |{uri-bpmn}[bpmn-js-cmd] |`bpmn`
|
307
313
|
|bytefield |{uri-bytefield}[bytefield-svg] |`bytefield-svg`
|
308
314
|
|ditaa |{uri-java}[Java] |`java`
|
315
|
+
|dpic |{uri-dpic}[dpic] |`dpic`
|
309
316
|
|erd |{uri-erd}[Erd] |`erd`
|
310
317
|
|gnuplot |{uri-gnuplot}[Gnuplot] |`gnuplot`
|
311
318
|
|graphviz |{uri-graphviz}[GraphViz] |`dot` or `graphvizdot`
|
312
319
|
|meme |{uri-imagemagick}[ImageMagick] |`convert` and `identify`
|
313
|
-
|mermaid |{uri-mermaid}[Mermaid.cli] |`
|
320
|
+
|mermaid |{uri-mermaid}[Mermaid.cli] |`mmdc`
|
314
321
|
|msc |{uri-mscgen}[Mscgen] |`mscgen`
|
315
322
|
|nomnoml |{uri-nomnoml}[Nomnoml] |`nomnoml`
|
316
323
|
|nwdiag |{uri-nwdiag}[NwDiag] |`nwdiag`
|
317
324
|
|packetdiag |{uri-nwdiag}[NwDiag] |`packetdiag`
|
325
|
+
|pikchr |{uri-pikchr}[Pikchr] |`pikchr`
|
318
326
|
|plantuml |{uri-java}[Java] |`java`
|
319
327
|
|rackdiag |{uri-nwdiag}[NwDiag] |`rackdiag`
|
320
328
|
|seqdiag |{uri-seqdiag}[SeqDiag] |`seqdiag`
|
321
329
|
|shaape |{uri-shaape}[Shaape] |`shaape`
|
322
330
|
|smcat |{uri-smcat}[State Machine Cat] |`smcat`
|
323
331
|
|svgbob |{uri-svgbob}[SvgBob] |`svgbob`
|
332
|
+
|symbolator |{uri-symbolator}[Symbolator] |`symbolator`
|
324
333
|
|syntrax |{uri-syntrax}[Syntrax] |`syntrax`
|
325
334
|
|umlet |{uri-umlet}[Umlet] |`umlet`
|
326
335
|
|vega |{uri-vega}[vg2png] and/or {uri-vega}[vg2png] |`vg2png` and `vg2svg`
|
data/lib/asciidoctor-diagram.rb
CHANGED
@@ -3,6 +3,7 @@ require_relative 'asciidoctor-diagram/blockdiag'
|
|
3
3
|
require_relative 'asciidoctor-diagram/bpmn'
|
4
4
|
require_relative 'asciidoctor-diagram/bytefield'
|
5
5
|
require_relative 'asciidoctor-diagram/ditaa'
|
6
|
+
require_relative 'asciidoctor-diagram/dpic'
|
6
7
|
require_relative 'asciidoctor-diagram/erd'
|
7
8
|
require_relative 'asciidoctor-diagram/gnuplot'
|
8
9
|
require_relative 'asciidoctor-diagram/graphviz'
|
@@ -11,11 +12,13 @@ require_relative 'asciidoctor-diagram/meme'
|
|
11
12
|
require_relative 'asciidoctor-diagram/mermaid'
|
12
13
|
require_relative 'asciidoctor-diagram/msc'
|
13
14
|
require_relative 'asciidoctor-diagram/nomnoml'
|
15
|
+
require_relative 'asciidoctor-diagram/pikchr'
|
14
16
|
require_relative 'asciidoctor-diagram/plantuml'
|
15
17
|
require_relative 'asciidoctor-diagram/salt'
|
16
18
|
require_relative 'asciidoctor-diagram/shaape'
|
17
19
|
require_relative 'asciidoctor-diagram/smcat'
|
18
20
|
require_relative 'asciidoctor-diagram/svgbob'
|
21
|
+
require_relative 'asciidoctor-diagram/symbolator'
|
19
22
|
require_relative 'asciidoctor-diagram/syntrax'
|
20
23
|
require_relative 'asciidoctor-diagram/tikz'
|
21
24
|
require_relative 'asciidoctor-diagram/umlet'
|
@@ -13,13 +13,13 @@ module Asciidoctor
|
|
13
13
|
[:svg]
|
14
14
|
end
|
15
15
|
|
16
|
-
def collect_options(source
|
16
|
+
def collect_options(source)
|
17
17
|
options = {}
|
18
|
-
options[:sx] = source.attr('scalex'
|
19
|
-
options[:sy] = source.attr('scaley'
|
20
|
-
options[:scale] = source.attr('scale'
|
21
|
-
options[:noblur] = source.attr('noblur'
|
22
|
-
options[:font] = source.attr('fontfamily'
|
18
|
+
options[:sx] = source.attr('scalex')
|
19
|
+
options[:sy] = source.attr('scaley')
|
20
|
+
options[:scale] = source.attr('scale')
|
21
|
+
options[:noblur] = source.attr('noblur') == 'true'
|
22
|
+
options[:font] = source.attr('fontfamily')
|
23
23
|
options
|
24
24
|
end
|
25
25
|
|
@@ -50,6 +50,10 @@ module Asciidoctor
|
|
50
50
|
args
|
51
51
|
end
|
52
52
|
end
|
53
|
+
|
54
|
+
def native_scaling?
|
55
|
+
true
|
56
|
+
end
|
53
57
|
end
|
54
58
|
end
|
55
59
|
end
|
@@ -19,7 +19,7 @@ module Asciidoctor
|
|
19
19
|
cmd_name = self.class.const_get(:TOOL)
|
20
20
|
alt_cmd_name = "#{cmd_name}3"
|
21
21
|
|
22
|
-
font_path = source.attr('fontpath'
|
22
|
+
font_path = source.attr('fontpath')
|
23
23
|
|
24
24
|
generate_stdin(source.find_command(cmd_name, :alt_cmds => [alt_cmd_name]), format.to_s, source.to_s) do |tool_path, output_path|
|
25
25
|
args = [tool_path, '-a', '-o', Platform.native_path(output_path), "-T#{format.to_s}"]
|
@@ -15,11 +15,11 @@ module Asciidoctor
|
|
15
15
|
[:png, :svg, :pdf, :jpeg]
|
16
16
|
end
|
17
17
|
|
18
|
-
def collect_options(source
|
18
|
+
def collect_options(source)
|
19
19
|
options = {}
|
20
20
|
|
21
|
-
options[:width] = source.attr('width'
|
22
|
-
options[:height] = source.attr('height'
|
21
|
+
options[:width] = source.attr('width')
|
22
|
+
options[:height] = source.attr('height')
|
23
23
|
|
24
24
|
options
|
25
25
|
end
|
@@ -7,13 +7,17 @@ module Asciidoctor
|
|
7
7
|
raise NotImplementedError.new
|
8
8
|
end
|
9
9
|
|
10
|
-
def collect_options(source
|
10
|
+
def collect_options(source)
|
11
11
|
{}
|
12
12
|
end
|
13
13
|
|
14
14
|
def convert(source, format, options)
|
15
15
|
raise NotImplementedError.new
|
16
16
|
end
|
17
|
+
|
18
|
+
def native_scaling?
|
19
|
+
false
|
20
|
+
end
|
17
21
|
end
|
18
22
|
end
|
19
23
|
end
|
@@ -3,6 +3,7 @@ require 'asciidoctor/extensions'
|
|
3
3
|
require 'digest'
|
4
4
|
require 'json'
|
5
5
|
require 'fileutils'
|
6
|
+
require 'pathname'
|
6
7
|
require_relative 'diagram_source.rb'
|
7
8
|
require_relative 'http/converter'
|
8
9
|
require_relative 'version'
|
@@ -30,8 +31,6 @@ module Asciidoctor
|
|
30
31
|
host_class.extend(ClassMethods)
|
31
32
|
end
|
32
33
|
|
33
|
-
DIAGRAM_PREFIX = 'diagram'
|
34
|
-
|
35
34
|
IMAGE_PARAMS = {
|
36
35
|
:svg => {
|
37
36
|
:encoding => Encoding::UTF_8,
|
@@ -69,7 +68,7 @@ module Asciidoctor
|
|
69
68
|
supported_formats = converter.supported_formats
|
70
69
|
|
71
70
|
begin
|
72
|
-
format = source.attributes.delete('format') || source.
|
71
|
+
format = source.attributes.delete('format') || source.global_attr('format', supported_formats[0])
|
73
72
|
format = format.to_sym if format.respond_to?(:to_sym)
|
74
73
|
|
75
74
|
raise "Format undefined" unless format
|
@@ -91,7 +90,7 @@ module Asciidoctor
|
|
91
90
|
block.assign_caption(caption, 'figure')
|
92
91
|
block
|
93
92
|
rescue => e
|
94
|
-
case source.
|
93
|
+
case source.global_attr('on-error', 'log')
|
95
94
|
when 'abort'
|
96
95
|
raise e
|
97
96
|
else
|
@@ -146,7 +145,7 @@ module Asciidoctor
|
|
146
145
|
def create_image_block(parent, source, format, converter)
|
147
146
|
image_name = "#{source.image_name}.#{format}"
|
148
147
|
image_dir = image_output_dir(parent)
|
149
|
-
cache_dir = cache_dir(parent)
|
148
|
+
cache_dir = cache_dir(source, parent)
|
150
149
|
image_file = parent.normalize_system_path image_name, image_dir
|
151
150
|
metadata_file = parent.normalize_system_path "#{image_name}.cache", cache_dir
|
152
151
|
|
@@ -157,25 +156,26 @@ module Asciidoctor
|
|
157
156
|
end
|
158
157
|
|
159
158
|
image_attributes = source.attributes
|
160
|
-
options = converter.collect_options(source
|
159
|
+
options = converter.collect_options(source)
|
161
160
|
|
162
161
|
if !File.exist?(image_file) || source.should_process?(image_file, metadata) || options != metadata[:options]
|
163
162
|
params = IMAGE_PARAMS[format]
|
164
163
|
|
165
|
-
server_url = source.
|
164
|
+
server_url = source.global_attr('server-url')
|
166
165
|
if server_url
|
167
|
-
server_type = source.
|
166
|
+
server_type = source.global_attr('server-type')
|
168
167
|
converter = HttpConverter.new(server_url, server_type.to_sym, converter)
|
169
168
|
end
|
170
169
|
|
171
|
-
options = converter.collect_options(source
|
170
|
+
options = converter.collect_options(source)
|
172
171
|
result = converter.convert(source, format, options)
|
173
172
|
|
174
173
|
result.force_encoding(params[:encoding])
|
175
174
|
|
176
175
|
metadata = source.create_image_metadata
|
177
176
|
metadata[:options] = options
|
178
|
-
|
177
|
+
|
178
|
+
result, metadata[:width], metadata[:height] = params[:decoder].post_process_image(result)
|
179
179
|
|
180
180
|
FileUtils.mkdir_p(File.dirname(image_file)) unless Dir.exist?(File.dirname(image_file))
|
181
181
|
File.open(image_file, 'wb') {|f| f.write result}
|
@@ -184,14 +184,8 @@ module Asciidoctor
|
|
184
184
|
File.open(metadata_file, 'w') {|f| JSON.dump(metadata, f)}
|
185
185
|
end
|
186
186
|
|
187
|
-
image_attributes['target'] = source.attr('data-uri', nil, true) ? image_file : image_name
|
188
|
-
if format == :svg
|
189
|
-
svg_type = source.attr('svg-type', nil, name) || source.attr('svg-type', nil, DIAGRAM_PREFIX)
|
190
|
-
image_attributes['opts'] = svg_type if svg_type && svg_type != 'static'
|
191
|
-
end
|
192
|
-
|
193
187
|
scale = image_attributes['scale']
|
194
|
-
if scalematch = /(\d+(?:\.\d+))/.match(scale)
|
188
|
+
if !converter.native_scaling? && scalematch = /(\d+(?:\.\d+))/.match(scale)
|
195
189
|
scale_factor = scalematch[1].to_f
|
196
190
|
else
|
197
191
|
scale_factor = 1.0
|
@@ -207,25 +201,58 @@ module Asciidoctor
|
|
207
201
|
end
|
208
202
|
end
|
209
203
|
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
(File.basename(target, File.extname(target)) || '').tr '_-', ' '
|
214
|
-
else
|
215
|
-
'Diagram'
|
216
|
-
end
|
204
|
+
parent.document.register(:images, image_name)
|
205
|
+
|
206
|
+
node = Asciidoctor::Block.new parent, :image, :content_model => :empty, :attributes => image_attributes
|
217
207
|
|
218
|
-
|
208
|
+
alt_text = node.attr('alt')
|
209
|
+
alt_text ||= if title_text = image_attributes['title']
|
210
|
+
title_text
|
211
|
+
elsif target = image_attributes['target']
|
212
|
+
(File.basename(target, File.extname(target)) || '').tr '_-', ' '
|
213
|
+
else
|
214
|
+
'Diagram'
|
215
|
+
end
|
216
|
+
alt_text = parent.sub_specialchars(alt_text)
|
219
217
|
|
220
|
-
|
221
|
-
|
218
|
+
node.set_attr('alt', alt_text)
|
219
|
+
|
220
|
+
if (scaledwidth = node.attr('scaledwidth'))
|
222
221
|
# append % to scaledwidth if ends in number (no units present)
|
223
222
|
if DIGIT_CHAR_RANGE.include?((scaledwidth[-1] || 0).ord)
|
224
|
-
|
223
|
+
node.set_attr('scaledwidth', %(#{scaledwidth}%))
|
225
224
|
end
|
226
225
|
end
|
227
226
|
|
228
|
-
|
227
|
+
use_absolute_path = source.attr('data-uri', nil, true)
|
228
|
+
|
229
|
+
if format == :svg
|
230
|
+
svg_type = source.global_attr('svg-type')
|
231
|
+
case svg_type
|
232
|
+
when nil, 'static'
|
233
|
+
when 'inline', 'interactive'
|
234
|
+
node.set_option(svg_type)
|
235
|
+
use_absolute_path = true
|
236
|
+
else
|
237
|
+
raise "Unsupported SVG type: #{svg_type}"
|
238
|
+
end
|
239
|
+
end
|
240
|
+
|
241
|
+
if use_absolute_path
|
242
|
+
node.set_attr('target', image_file)
|
243
|
+
else
|
244
|
+
node.set_attr('target', image_name)
|
245
|
+
|
246
|
+
if source.global_attr('autoimagesdir')
|
247
|
+
output_base_dir = output_base_dir(parent)
|
248
|
+
if output_base_dir
|
249
|
+
imagesdir = Pathname.new(image_file).relative_path_from(output_base_dir).dirname.to_s
|
250
|
+
node.set_attr('imagesdir', imagesdir)
|
251
|
+
end
|
252
|
+
end
|
253
|
+
end
|
254
|
+
|
255
|
+
node
|
229
256
|
end
|
230
257
|
|
231
258
|
def scale(size, factor)
|
@@ -239,32 +266,31 @@ module Asciidoctor
|
|
239
266
|
end
|
240
267
|
|
241
268
|
def image_output_dir(parent)
|
242
|
-
document = parent.document
|
243
|
-
|
244
269
|
images_dir = parent.attr('imagesoutdir', nil, true)
|
245
270
|
|
246
271
|
if images_dir
|
247
272
|
base_dir = nil
|
248
273
|
else
|
249
|
-
base_dir = parent
|
274
|
+
base_dir = output_base_dir(parent)
|
250
275
|
images_dir = parent.attr('imagesdir', nil, true)
|
251
276
|
end
|
252
277
|
|
253
278
|
parent.normalize_system_path(images_dir, base_dir)
|
254
279
|
end
|
255
280
|
|
256
|
-
def
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
|
281
|
+
def output_base_dir(parent)
|
282
|
+
parent.normalize_system_path(parent.attr('outdir', nil, true) || doc_option(parent.document, :to_dir))
|
283
|
+
end
|
284
|
+
|
285
|
+
def cache_dir(source, parent)
|
286
|
+
source.global_attr('cachedir') || parent.normalize_system_path('.asciidoctor/diagram', output_base_dir(parent))
|
261
287
|
end
|
262
288
|
|
263
289
|
def create_literal_block(parent, source, format, converter)
|
264
290
|
literal_attributes = source.attributes
|
265
291
|
literal_attributes.delete('target')
|
266
292
|
|
267
|
-
options = converter.collect_options(source
|
293
|
+
options = converter.collect_options(source)
|
268
294
|
result = converter.convert(source, format, options)
|
269
295
|
|
270
296
|
result.force_encoding(Encoding::UTF_8)
|
@@ -1,3 +1,4 @@
|
|
1
|
+
require 'asciidoctor/logging'
|
1
2
|
require_relative 'util/which'
|
2
3
|
|
3
4
|
module Asciidoctor
|
@@ -5,6 +6,12 @@ module Asciidoctor
|
|
5
6
|
# This module describes the duck-typed interface that diagram sources must implement. Implementations
|
6
7
|
# may include this module but it is not required.
|
7
8
|
module DiagramSource
|
9
|
+
include Asciidoctor::Logging
|
10
|
+
|
11
|
+
def diagram_type
|
12
|
+
raise NotImplementedError.new
|
13
|
+
end
|
14
|
+
|
8
15
|
def image_name
|
9
16
|
raise NotImplementedError.new
|
10
17
|
end
|
@@ -15,20 +22,24 @@ module Asciidoctor
|
|
15
22
|
raise NotImplementedError.new
|
16
23
|
end
|
17
24
|
|
25
|
+
def global_attr(name, default_value = nil)
|
26
|
+
attr(name) || attr(name, default_value, 'diagram')
|
27
|
+
end
|
28
|
+
|
18
29
|
# Get the value for the specified attribute. First look in the attributes on
|
19
30
|
# this document and return the value of the attribute if found. Otherwise, if
|
20
31
|
# this document is a child of the Document document, look in the attributes of the
|
21
32
|
# Document document and return the value of the attribute if found. Otherwise,
|
22
33
|
# return the default value, which defaults to nil.
|
23
34
|
#
|
24
|
-
# @param name [String, Symbol] the name of the attribute to lookup
|
35
|
+
# @param name [String, Symbol, Array] the name(s) of the attribute to lookup
|
25
36
|
# @param default_value [Object] the value to return if the attribute is not found
|
26
37
|
# @inherit [Boolean, String] indicates whether to check for the attribute on the AsciiDoctor::Document if not found on this document.
|
27
38
|
# When a non-nil String is given the an attribute name "#{inherit}-#{name}" is looked for on the document.
|
28
39
|
#
|
29
40
|
# @return the value of the attribute or the default value if the attribute is not found in the attributes of this node or the document node
|
30
41
|
# @abstract
|
31
|
-
def attr(name, default_value = nil, inherit =
|
42
|
+
def attr(name, default_value = nil, inherit = diagram_type)
|
32
43
|
raise NotImplementedError.new
|
33
44
|
end
|
34
45
|
|
@@ -75,14 +86,42 @@ module Asciidoctor
|
|
75
86
|
if config.key? cmd_var
|
76
87
|
cmd_path = config[cmd_var]
|
77
88
|
else
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
89
|
+
logger.debug "Finding '#{cmd}' in attributes"
|
90
|
+
cmd_path = attr_names.map { |attr_name|
|
91
|
+
attr = attr(attr_name, nil, true)
|
92
|
+
if logger.debug? && attr
|
93
|
+
logger.debug "Found value '#{attr}' in attribute '#{attr_name}'" if attr
|
94
|
+
end
|
95
|
+
attr
|
96
|
+
}
|
97
|
+
.reject { |attr| attr.nil? }
|
98
|
+
.map { |attr|
|
99
|
+
expanded = File.expand_path(attr)
|
100
|
+
if logger.debug? && attr != expanded
|
101
|
+
logger.debug "Expanded '#{attr}' to '#{expanded}'"
|
102
|
+
end
|
103
|
+
expanded
|
104
|
+
}
|
105
|
+
.select { |path|
|
106
|
+
executable = File.executable?(path)
|
107
|
+
if logger.debug?
|
108
|
+
logger.debug "Is '#{path}' executable? #{executable}"
|
109
|
+
end
|
110
|
+
executable
|
111
|
+
}
|
112
|
+
.first
|
113
|
+
|
114
|
+
unless cmd_path
|
115
|
+
logger.debug "Finding '#{cmd}' in environment"
|
116
|
+
cmd_path = cmd_names.map { |c|
|
117
|
+
path = ::Asciidoctor::Diagram::Which.which(c, :path => options[:path])
|
118
|
+
if logger.debug? && path
|
119
|
+
logger.debug "Found '#{path}' in environment"
|
120
|
+
end
|
121
|
+
path
|
122
|
+
}
|
123
|
+
.reject { |path| path.nil? }
|
124
|
+
.first
|
86
125
|
end
|
87
126
|
|
88
127
|
config[cmd_var] = cmd_path
|
@@ -113,6 +152,10 @@ module Asciidoctor
|
|
113
152
|
@attributes = attributes
|
114
153
|
end
|
115
154
|
|
155
|
+
def diagram_type
|
156
|
+
@block_processor.name.downcase
|
157
|
+
end
|
158
|
+
|
116
159
|
def resolve_path target, start = base_dir
|
117
160
|
@parent_block.normalize_system_path(target, start)
|
118
161
|
end
|
@@ -125,18 +168,22 @@ module Asciidoctor
|
|
125
168
|
attr('target', 'diag-' + checksum)
|
126
169
|
end
|
127
170
|
|
128
|
-
def attr(name, default_value = nil, inherit =
|
171
|
+
def attr(name, default_value = nil, inherit = diagram_type)
|
129
172
|
name = name.to_s if ::Symbol === name
|
173
|
+
name = [name] unless name.is_a?(Enumerable)
|
130
174
|
|
131
|
-
value = @attributes[
|
175
|
+
value = name.lazy.map { |n| @attributes[n] }.reject { |v| v.nil? }.first
|
132
176
|
|
133
177
|
if value.nil? && inherit
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
178
|
+
inherited_values = name.lazy.map do |n|
|
179
|
+
case inherit
|
180
|
+
when String, Symbol
|
181
|
+
@parent_block.attr("#{inherit.to_s}-#{n}", default_value, true)
|
182
|
+
else
|
183
|
+
@parent_block.attr(n, default_value, inherit)
|
184
|
+
end
|
139
185
|
end
|
186
|
+
value = inherited_values.reject { |v| v.nil? }.first
|
140
187
|
end
|
141
188
|
|
142
189
|
value || default_value
|