asciidoctor-diagram 2.2.7 → 2.2.9
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/CHANGELOG.adoc +20 -0
- data/README.adoc +3 -3
- data/docs/modules/ROOT/pages/index.adoc +1 -1
- data/docs/modules/ROOT/partials/advanced.adoc +19 -4
- data/docs/modules/ROOT/partials/create_diagram.adoc +1 -0
- data/docs/modules/ROOT/partials/uris.adoc +3 -1
- data/lib/asciidoctor-diagram/d2/converter.rb +12 -4
- data/lib/asciidoctor-diagram/dbml/converter.rb +22 -0
- data/lib/asciidoctor-diagram/dbml/extension.rb +18 -0
- data/lib/asciidoctor-diagram/dbml.rb +8 -0
- data/lib/asciidoctor-diagram/diagram_processor.rb +8 -0
- data/lib/asciidoctor-diagram/diagram_source.rb +10 -2
- data/lib/asciidoctor-diagram/ditaa/converter.rb +9 -3
- data/lib/asciidoctor-diagram/ditaa/ditaa-2.0.0.jar +0 -0
- data/lib/asciidoctor-diagram/plantuml/converter.rb +8 -3
- data/lib/asciidoctor-diagram/plantuml/plantuml-2.0.0.jar +0 -0
- data/lib/asciidoctor-diagram/structurizr/converter.rb +67 -0
- data/lib/asciidoctor-diagram/structurizr/extension.rb +52 -0
- data/lib/asciidoctor-diagram/structurizr/renderers.rb +58 -0
- data/lib/asciidoctor-diagram/structurizr/structurizr-2.0.1.jar +0 -0
- data/lib/asciidoctor-diagram/structurizr.rb +7 -0
- data/lib/asciidoctor-diagram/syntrax/converter.rb +64 -17
- data/lib/asciidoctor-diagram/syntrax/syntrax-2.0.2.jar +0 -0
- data/lib/asciidoctor-diagram/util/cli.rb +10 -2
- data/lib/asciidoctor-diagram/util/cli_generator.rb +1 -0
- data/lib/asciidoctor-diagram/util/server-2.0.0.jar +0 -0
- data/lib/asciidoctor-diagram/version.rb +1 -1
- data/lib/asciidoctor-diagram.rb +2 -0
- data/spec/a2s_spec.rb +1 -1
- data/spec/barcode_spec.rb +1 -1
- data/spec/blockdiag_spec.rb +1 -1
- data/spec/bpmn_spec.rb +1 -1
- data/spec/bytefield_spec.rb +1 -1
- data/spec/d2_spec.rb +51 -1
- data/spec/dbml_spec.rb +32 -0
- data/spec/diagrams_spec.rb +1 -1
- data/spec/ditaa_spec.rb +1 -1
- data/spec/dpic_spec.rb +1 -1
- data/spec/erd_spec.rb +1 -1
- data/spec/gnuplot_spec.rb +1 -1
- data/spec/graphviz_py_spec.rb +1 -1
- data/spec/graphviz_spec.rb +1 -1
- data/spec/lilypond_spec.rb +1 -1
- data/spec/meme_spec.rb +1 -1
- data/spec/mermaid_spec.rb +1 -1
- data/spec/msc_spec.rb +1 -1
- data/spec/nomnoml_spec.rb +1 -1
- data/spec/pikchr_spec.rb +1 -1
- data/spec/plantuml_spec.rb +2 -2
- data/spec/shaape_spec.rb +1 -1
- data/spec/shared_examples.rb +5 -3
- data/spec/smcat_spec.rb +1 -1
- data/spec/structurizr_spec.rb +41 -0
- data/spec/svgbob_spec.rb +1 -1
- data/spec/symbolator_spec.rb +1 -1
- data/spec/syntrax_spec.rb +1 -1
- data/spec/{test_helper.rb → test_helper_methods.rb} +2 -0
- data/spec/tikz_spec.rb +1 -1
- data/spec/umlet_spec.rb +1 -1
- data/spec/vega_spec.rb +1 -1
- data/spec/wavedrom_spec.rb +1 -1
- metadata +27 -9
- data/lib/asciidoctor-diagram/ditaa/ditaa-1.3.21.jar +0 -0
- data/lib/asciidoctor-diagram/plantuml/plantuml-1.3.24.jar +0 -0
- data/lib/asciidoctor-diagram/util/server-1.3.21.jar +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9f5d112b2ce57cb2380687fce2fac5fe15f2f6d2c6198f722edd5aeaa08d6b7d
|
4
|
+
data.tar.gz: 8d45d7df6757adfb72c0c4c4b9ba95bab649fe6a1686418f2a4ffc49fc20facb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 56d0bffc577cd54b56853b02454760767ff5642c935eb57e9909a0aad974ad598897e2d5f312c780471f55318de0789df39e760b917e846ec702ad0ee1640a7f
|
7
|
+
data.tar.gz: 67496690a923714ba8b3757781b674862dc318680797bb118ecc00d834125b42d27770465b57db440b47ce0df3e4eebab8658d7a2aec8e5cf610bef886005655
|
data/CHANGELOG.adoc
CHANGED
@@ -1,5 +1,24 @@
|
|
1
1
|
= Asciidoctor-diagram Changelog
|
2
2
|
|
3
|
+
== 2.2.9
|
4
|
+
|
5
|
+
Bugfixes::
|
6
|
+
|
7
|
+
* Issue #409: Second attempt at fixing handling of the D2 `sketch` attribute
|
8
|
+
* Issue #415: Resolve NoMethodError when using Structurizr blocks
|
9
|
+
|
10
|
+
== 2.2.8
|
11
|
+
|
12
|
+
Enhancements::
|
13
|
+
|
14
|
+
* Add support for reusing JSyntrax subprocess instances to improve performance when rendering many syntax diagrams (@gitrbond, @inponomarev)
|
15
|
+
* Issue #386: Add basic https://structurizr.com[Structurizr] support
|
16
|
+
|
17
|
+
Bugfixes::
|
18
|
+
|
19
|
+
* Issue #409: Fix handling of the D2 `sketch` attribute
|
20
|
+
* Issue #410: Ensure current directory is always set to document base directory when invoking subprocesses
|
21
|
+
|
3
22
|
== 2.2.7
|
4
23
|
|
5
24
|
Enhancements::
|
@@ -25,6 +44,7 @@ Enhancements::
|
|
25
44
|
Enhancements::
|
26
45
|
|
27
46
|
* Issue #399: Add support for PlantUML theme attribute
|
47
|
+
* Add DBML support via https://github.com/softwaretechnik-berlin/dbml-renderer[dbml-renderer]
|
28
48
|
|
29
49
|
== 2.2.3
|
30
50
|
|
data/README.adoc
CHANGED
@@ -3,8 +3,8 @@ Pepijn Van_Eeckhoudt <https://github.com/pepijnve[@pepijnve]>; Sarah White <http
|
|
3
3
|
:description: README for the Asciidoctor Diagram extension for Asciidoctor.
|
4
4
|
|
5
5
|
image:https://github.com/asciidoctor/asciidoctor-diagram/workflows/Linux%20unit%20tests/badge.svg?branch=master["Linux Build Status", link="https://github.com/asciidoctor/asciidoctor-diagram/actions?query=workflow%3A%22Linux+unit+tests%22"]
|
6
|
-
image:https://github.com/asciidoctor/asciidoctor-diagram/workflows/macOS%20unit%20tests/badge.svg?branch=master["macOS Build Status", link="https://github.com/asciidoctor/asciidoctor-diagram/actions?query=workflow%3A%22macOS+unit+tests%22"]
|
7
|
-
image:https://github.com/asciidoctor/asciidoctor-diagram/workflows/Windows%20unit%20tests/badge.svg?branch=master["Windows Build Status", link="https://github.com/asciidoctor/asciidoctor-diagram/actions?query=workflow%3A%22Windows+unit+tests%22"]
|
6
|
+
// image:https://github.com/asciidoctor/asciidoctor-diagram/workflows/macOS%20unit%20tests/badge.svg?branch=master["macOS Build Status", link="https://github.com/asciidoctor/asciidoctor-diagram/actions?query=workflow%3A%22macOS+unit+tests%22"]
|
7
|
+
// image:https://github.com/asciidoctor/asciidoctor-diagram/workflows/Windows%20unit%20tests/badge.svg?branch=master["Windows Build Status", link="https://github.com/asciidoctor/asciidoctor-diagram/actions?query=workflow%3A%22Windows+unit+tests%22"]
|
8
8
|
image:https://badge.fury.io/rb/asciidoctor-diagram.svg[Gem Version, link=https://rubygems.org/gems/asciidoctor-diagram]
|
9
9
|
|
10
10
|
Asciidoctor Diagram is a set of Asciidoctor extensions that enable you to add diagrams, which you describe using plain text, to your AsciiDoc document.
|
@@ -38,4 +38,4 @@ The example below shows an embedded Ditaa diagram block.
|
|
38
38
|
|
39
39
|
After processing by Asciidoctor, the output file will show a rendered version of the diagram instead of the diagram source code.
|
40
40
|
|
41
|
-
image::docs/modules/ROOT/images/asciidoctor-diagram-process.png[]
|
41
|
+
image::docs/modules/ROOT/images/asciidoctor-diagram-process.png[]
|
@@ -5,7 +5,7 @@ include::partial$uris.adoc[]
|
|
5
5
|
|
6
6
|
Asciidoctor Diagram is a set of Asciidoctor extensions that enable you to add diagrams, which you describe using plain text, to your AsciiDoc document.
|
7
7
|
|
8
|
-
The extensions support 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-jsyntrax}[JSyntrax], {uri-umlet}[UMLet], {uri-vega}[Vega], {uri-vegalite}[Vega-Lite] and {uri-wavedrom}[WaveDrom] syntax.
|
8
|
+
The extensions support the {uri-a2s}[AsciiToSVG], BlockDiag ({uri-blockdiag}[BlockDiag], {uri-seqdiag}[SeqDiag], {uri-actdiag}[ActDiag], {uri-nwdiag}[NwDiag]), {uri-bytefield}[Bytefield-SVG], {uri-dbml}[DBML], {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-structurizr}[Structurizr], {uri-svgbob}[SvgBob], {uri-symbolator}[Symbolator], {uri-syntrax}[Syntrax] / {uri-jsyntrax}[JSyntrax], {uri-umlet}[UMLet], {uri-vega}[Vega], {uri-vegalite}[Vega-Lite] and {uri-wavedrom}[WaveDrom] syntax.
|
9
9
|
|
10
10
|
Each extension runs the diagram processor to generate an SVG, PNG, or TXT file from the input text.
|
11
11
|
The generated file is then inserted into your converted document.
|
@@ -75,6 +75,7 @@ The following table lists the tools that are required for each diagram type, the
|
|
75
75
|
|bytefield |{uri-bytefield}[bytefield-svg] |`bytefield-svg`
|
76
76
|
|diagrams |{uri-python}[Python] |`diagrams-python`
|
77
77
|
|D2 |{uri-d2}[D2] |`d2`
|
78
|
+
|DBML |{uri-dbml}[dbml-renderer] |`dbml-renderer`
|
78
79
|
|ditaa |{uri-java}[Java] |`java`
|
79
80
|
|dpic |{uri-dpic}[dpic] |`dpic`
|
80
81
|
|erd |{uri-erd}[Erd] or {uri-erd-go}[Erd Go] |`erd`
|
@@ -92,9 +93,10 @@ The following table lists the tools that are required for each diagram type, the
|
|
92
93
|
|seqdiag |{uri-seqdiag}[SeqDiag] |`seqdiag`
|
93
94
|
|shaape |{uri-shaape}[Shaape] |`shaape`
|
94
95
|
|smcat |{uri-smcat}[State Machine Cat] |`smcat`
|
96
|
+
|structurizr |{uri-java}[Java] and {uri-structurizr}[Structurizr CLI] |`java` and the `DIAGRAM_STRUCTURIZRCLI_HOME` environment variable
|
95
97
|
|svgbob |{uri-svgbob}[SvgBob] |`svgbob`
|
96
98
|
|symbolator |{uri-symbolator}[Symbolator] |`symbolator`
|
97
|
-
|syntrax |{uri-syntrax}[Syntrax]/{uri-jsyntrax}[JSyntrax] |`syntrax`
|
99
|
+
|syntrax |{uri-syntrax}[Syntrax]/{uri-jsyntrax}[JSyntrax] |`syntrax` or `java` and the `DIAGRAM_JSYNTRAX_HOME` environment variable
|
98
100
|
|tikz |A TeX distribution that supports {uri-tikz}[TikZ] |`pdflatex` and `pdf2svg`
|
99
101
|
|umlet |{uri-umlet}[Umlet] |`umlet`
|
100
102
|
|vega |{uri-vega}[vg2png] and/or {uri-vega}[vg2png] |`vg2png` and `vg2svg`
|
@@ -250,6 +252,10 @@ If the maximum size is exceeded, POST requests are used instead
|
|
250
252
|
|font-bol |Source Sans Pro Bold |Path to .ttf file to use for the bold font
|
251
253
|
|===
|
252
254
|
|
255
|
+
==== DBML
|
256
|
+
|
257
|
+
No specific attributes.
|
258
|
+
|
253
259
|
==== Diagrams
|
254
260
|
|
255
261
|
No specific attributes.
|
@@ -347,10 +353,19 @@ No specific attributes.
|
|
347
353
|
[cols=">,<,<",options="header"]
|
348
354
|
|===
|
349
355
|
|Name |Default value |Description
|
350
|
-
|direction |
|
356
|
+
|direction |unspecified |The direction of the state machine diagram. One of `top-down`, `bottom-top`, `left-right` or `right-left`.
|
351
357
|
|engine |unspecified |The layout engine to use. One of `dot`, `circo`, `fdp`, `neato`, `osage`, or `twopi`
|
352
358
|
|===
|
353
359
|
|
360
|
+
==== Structurizr
|
361
|
+
|
362
|
+
[cols=">,<,<",options="header"]
|
363
|
+
|===
|
364
|
+
|Name |Default value |Description
|
365
|
+
|renderer |plantuml-c4 |The rendering backend to use. One of `d2`, `graphviz`, `mermaid`, `plantuml`, or `plantuml-c4`
|
366
|
+
|view |unspecified |The key of the view to render
|
367
|
+
|===
|
368
|
+
|
354
369
|
==== svgbob
|
355
370
|
|
356
371
|
[cols=">,<,<",options="header"]
|
@@ -367,9 +382,9 @@ No specific attributes.
|
|
367
382
|
[cols=">,<,<",options="header"]
|
368
383
|
|===
|
369
384
|
|Name |Default value |Description
|
370
|
-
|heading |
|
385
|
+
|heading |unspecified |Diagram title
|
371
386
|
|scale |1 |A scale factor that is applied to the image.
|
372
|
-
|style-file |
|
387
|
+
|style-file |unspecified |Path to a style config file to pass to Syntrax.
|
373
388
|
|transparent |false |Makes the background of the image transparent instead of opaque white.
|
374
389
|
|===
|
375
390
|
|
@@ -46,6 +46,7 @@ The following diagram types and output formats are available:
|
|
46
46
|
|{uri-seqdiag}[seqdiag] | |{check}|{check}|{check}|
|
47
47
|
|{uri-shaape}[shaape] | | |{check}|{check}|
|
48
48
|
|{uri-smcat}[smcat] | | | |{check}|
|
49
|
+
|{uri-structurizr}[structurizr] | | |{check}|{check}|
|
49
50
|
|{uri-svgbob}[svgbob] | | | |{check}|{check}
|
50
51
|
|{uri-symbolator}[symbolator] | |{check}|{check}|{check}|
|
51
52
|
|{uri-syntrax}[syntrax] (Syntrax) | |{check}|{check}|{check}|
|
@@ -6,6 +6,7 @@
|
|
6
6
|
:uri-bpmn: https://github.com/gtudan/bpmn-js-cmd
|
7
7
|
:uri-bytefield: https://github.com/Deep-Symmetry/bytefield-svg
|
8
8
|
:uri-d2: https://d2lang.com
|
9
|
+
:uri-dbml: https://github.com/softwaretechnik-berlin/dbml-renderer
|
9
10
|
:uri-diagrams: https://diagrams.mingrammer.com
|
10
11
|
:uri-ditaa: http://ditaa.sourceforge.net/
|
11
12
|
:uri-dpic: https://gitlab.com/aplevich/dpic
|
@@ -16,6 +17,7 @@
|
|
16
17
|
:uri-graphviz: https://graphviz.gitlab.io
|
17
18
|
:uri-imagemagick: http://www.imagemagick.org
|
18
19
|
:uri-java: http://java.sun.com
|
20
|
+
:uri-jsyntrax: https://atp-mipt.github.io/jsyntrax/
|
19
21
|
:uri-mermaid: https://github.com/mermaid-js/mermaid-cli
|
20
22
|
:uri-mscgen: http://www.mcternan.me.uk/mscgen/
|
21
23
|
:uri-mscgen-js: https://github.com/mscgenjs/mscgenjs-cli
|
@@ -31,10 +33,10 @@
|
|
31
33
|
:uri-seqdiag: http://blockdiag.com/en/seqdiag/index.html
|
32
34
|
:uri-shaape: https://github.com/christiangoltz/shaape
|
33
35
|
:uri-smcat: https://github.com/sverweij/state-machine-cat
|
36
|
+
:uri-structurizr: https://structurizr.com
|
34
37
|
:uri-svgbob: https://github.com/ivanceras/svgbobrus
|
35
38
|
:uri-symbolator: https://github.com/kevinpt/symbolator
|
36
39
|
:uri-syntrax: https://kevinpt.github.io/syntrax/
|
37
|
-
:uri-jsyntrax: https://atp-mipt.github.io/jsyntrax/
|
38
40
|
:uri-tikz: https://github.com/pgf-tikz/pgf
|
39
41
|
:uri-umlet: http://www.umlet.com/
|
40
42
|
:uri-vega: https://vega.github.io/vega/
|
@@ -23,7 +23,7 @@ module Asciidoctor
|
|
23
23
|
:font_regular => source.attr('font-regular'),
|
24
24
|
:font_italic => source.attr('font-italic'),
|
25
25
|
:font_bold => source.attr('font-bold')
|
26
|
-
}
|
26
|
+
}
|
27
27
|
end
|
28
28
|
|
29
29
|
def convert(source, format, options)
|
@@ -31,17 +31,25 @@ module Asciidoctor
|
|
31
31
|
args = [tool_path, '--browser', 'false']
|
32
32
|
|
33
33
|
options.each_pair do |key, value|
|
34
|
-
|
34
|
+
flag = "--#{key.to_s.gsub('_', '-')}"
|
35
35
|
|
36
|
-
if key.
|
36
|
+
if key == :sketch && !value.nil? && value != 'false'
|
37
|
+
args << flag
|
38
|
+
elsif key.to_s.start_with?('font') && !value.nil?
|
37
39
|
args << Platform.native_path(value)
|
38
|
-
|
40
|
+
elsif !value.nil?
|
41
|
+
args << flag
|
39
42
|
args << value
|
40
43
|
end
|
41
44
|
end
|
42
45
|
|
43
46
|
args << Platform.native_path(input_path)
|
44
47
|
args << Platform.native_path(output_path)
|
48
|
+
|
49
|
+
{
|
50
|
+
:args => args,
|
51
|
+
:chdir => source.base_dir
|
52
|
+
}
|
45
53
|
end
|
46
54
|
end
|
47
55
|
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require_relative '../diagram_converter'
|
2
|
+
require_relative '../util/cli_generator'
|
3
|
+
require_relative '../util/platform'
|
4
|
+
|
5
|
+
module Asciidoctor
|
6
|
+
module Diagram
|
7
|
+
# @private
|
8
|
+
class DbmlConverter
|
9
|
+
include DiagramConverter
|
10
|
+
include CliGenerator
|
11
|
+
|
12
|
+
|
13
|
+
def supported_formats
|
14
|
+
[:svg]
|
15
|
+
end
|
16
|
+
|
17
|
+
def convert(source, format, options)
|
18
|
+
generate_stdin_stdout(source.find_command('dbml-renderer'), source.code)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require_relative 'converter'
|
2
|
+
require_relative '../diagram_processor'
|
3
|
+
|
4
|
+
module Asciidoctor
|
5
|
+
module Diagram
|
6
|
+
class DbmlBlockProcessor < DiagramBlockProcessor
|
7
|
+
use_converter DbmlConverter
|
8
|
+
end
|
9
|
+
|
10
|
+
class DbmlBlockMacroProcessor < DiagramBlockMacroProcessor
|
11
|
+
use_converter DbmlConverter
|
12
|
+
end
|
13
|
+
|
14
|
+
class DbmlInlineMacroProcessor < DiagramInlineMacroProcessor
|
15
|
+
use_converter DbmlConverter
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,8 @@
|
|
1
|
+
require 'asciidoctor/extensions'
|
2
|
+
require_relative 'dbml/extension'
|
3
|
+
|
4
|
+
Asciidoctor::Extensions.register do
|
5
|
+
block Asciidoctor::Diagram::DbmlBlockProcessor, :dbml
|
6
|
+
block_macro Asciidoctor::Diagram::DbmlBlockMacroProcessor, :dbml
|
7
|
+
inline_macro Asciidoctor::Diagram::DbmlInlineMacroProcessor, :dbml
|
8
|
+
end
|
@@ -64,6 +64,12 @@ module Asciidoctor
|
|
64
64
|
location = parent.document.reader.cursor_at_mark
|
65
65
|
|
66
66
|
normalised_attributes = attributes.inject({}) { |h, (k, v)| h[normalise_attribute_name(k)] = v; h }
|
67
|
+
pos_attr_index = config.fetch(:positional_attrs, []).length + 1
|
68
|
+
until attributes[pos_attr_index].nil?
|
69
|
+
normalised_attributes[attributes[pos_attr_index]] = 'true'
|
70
|
+
pos_attr_index = pos_attr_index + 1
|
71
|
+
end
|
72
|
+
|
67
73
|
converter = config[:converter].new
|
68
74
|
|
69
75
|
supported_formats = supported_formats(converter)
|
@@ -356,6 +362,7 @@ module Asciidoctor
|
|
356
362
|
include DiagramProcessor
|
357
363
|
|
358
364
|
def self.inherited(subclass)
|
365
|
+
subclass.use_dsl
|
359
366
|
subclass.name_positional_attributes ['target', 'format']
|
360
367
|
subclass.contexts [:listing, :literal, :open]
|
361
368
|
subclass.content_model :simple
|
@@ -374,6 +381,7 @@ module Asciidoctor
|
|
374
381
|
include DiagramProcessor
|
375
382
|
|
376
383
|
def self.inherited(subclass)
|
384
|
+
subclass.use_dsl
|
377
385
|
subclass.name_positional_attributes ['format']
|
378
386
|
end
|
379
387
|
|
@@ -50,7 +50,7 @@ module Asciidoctor
|
|
50
50
|
# @return [String] the base directory against which relative paths in this diagram should be resolved
|
51
51
|
# @abstract
|
52
52
|
def base_dir
|
53
|
-
attr('docdir',
|
53
|
+
File.expand_path(attr('docdir', "", true))
|
54
54
|
end
|
55
55
|
|
56
56
|
# Alias for code
|
@@ -193,6 +193,14 @@ module Asciidoctor
|
|
193
193
|
name = [name] unless name.is_a?(Enumerable)
|
194
194
|
|
195
195
|
value = name.lazy.map { |n| @attributes[n] }.reject { |v| v.nil? }.first
|
196
|
+
if value.nil?
|
197
|
+
attr_position = config[:positional_attrs] || 1
|
198
|
+
while value.nil? && !@attributes[attr_position].nil?
|
199
|
+
if @attributes[attr_position] == name
|
200
|
+
value = true
|
201
|
+
end
|
202
|
+
end
|
203
|
+
end
|
196
204
|
|
197
205
|
if value.nil? && inherit
|
198
206
|
inherited_values = name.lazy.map do |n|
|
@@ -262,7 +270,7 @@ module Asciidoctor
|
|
262
270
|
class FileSource < BasicSource
|
263
271
|
def initialize(block_processor, parent_block, file_name, attributes)
|
264
272
|
super(block_processor, parent_block, attributes)
|
265
|
-
@file_name = file_name
|
273
|
+
@file_name = File.expand_path(file_name)
|
266
274
|
end
|
267
275
|
|
268
276
|
def base_dir
|
@@ -32,12 +32,14 @@ module Asciidoctor
|
|
32
32
|
require 'asciidoctor-diagram/ditaa/classpath'
|
33
33
|
::Asciidoctor::Diagram::DitaaClasspath::JAR_FILES
|
34
34
|
rescue LoadError
|
35
|
-
|
35
|
+
nil
|
36
36
|
end
|
37
37
|
end
|
38
38
|
|
39
|
-
|
40
|
-
|
39
|
+
if DITAA_JARS
|
40
|
+
Java.classpath.concat Dir[File.join(File.dirname(__FILE__), '*.jar')]
|
41
|
+
Java.classpath.concat DITAA_JARS
|
42
|
+
end
|
41
43
|
|
42
44
|
def supported_formats
|
43
45
|
[:png, :svg, :txt]
|
@@ -61,6 +63,10 @@ module Asciidoctor
|
|
61
63
|
def convert(source, format, options)
|
62
64
|
return source.to_s if format == :txt
|
63
65
|
|
66
|
+
unless DITAA_JARS
|
67
|
+
raise "Could not load Ditaa. Either require 'asciidoctor-diagram-ditaamini' or specify the location of the Ditaa JAR(s) using the 'DIAGRAM_DITAA_CLASSPATH' environment variable."
|
68
|
+
end
|
69
|
+
|
64
70
|
Java.load
|
65
71
|
|
66
72
|
flags = []
|
Binary file
|
@@ -17,12 +17,14 @@ module Asciidoctor
|
|
17
17
|
require 'asciidoctor-diagram/plantuml/classpath'
|
18
18
|
::Asciidoctor::Diagram::PlantUmlClasspath::JAR_FILES
|
19
19
|
rescue LoadError
|
20
|
-
|
20
|
+
nil
|
21
21
|
end
|
22
22
|
end
|
23
23
|
|
24
|
-
|
25
|
-
|
24
|
+
if PLANTUML_JARS
|
25
|
+
Java.classpath.concat Dir[File.join(File.dirname(__FILE__), '*.jar')].freeze
|
26
|
+
Java.classpath.concat PLANTUML_JARS
|
27
|
+
end
|
26
28
|
|
27
29
|
def wrap_source(source)
|
28
30
|
PlantUMLPreprocessedSource.new(source, self)
|
@@ -72,6 +74,9 @@ module Asciidoctor
|
|
72
74
|
end
|
73
75
|
|
74
76
|
def convert(source, format, options)
|
77
|
+
unless PLANTUML_JARS
|
78
|
+
raise "Could not load PlantUML. Either require 'asciidoctor-diagram-plantuml' or specify the location of the PlantUML JAR(s) using the 'DIAGRAM_PLANTUML_CLASSPATH' environment variable."
|
79
|
+
end
|
75
80
|
Java.load
|
76
81
|
|
77
82
|
code = source.code
|
Binary file
|
@@ -0,0 +1,67 @@
|
|
1
|
+
require 'set'
|
2
|
+
|
3
|
+
require_relative '../diagram_converter'
|
4
|
+
require_relative '../diagram_processor'
|
5
|
+
require_relative '../plantuml/converter'
|
6
|
+
require_relative '../util/java'
|
7
|
+
|
8
|
+
module Asciidoctor
|
9
|
+
module Diagram
|
10
|
+
# @private
|
11
|
+
class StructurizrConverter
|
12
|
+
include DiagramConverter
|
13
|
+
|
14
|
+
CLASSPATH_ENV = 'DIAGRAM_STRUCTURIZR_CLASSPATH'
|
15
|
+
CLI_HOME_ENV = 'DIAGRAM_STRUCTURIZRCLI_HOME'
|
16
|
+
STRUCTURIZR_JARS = if ENV.has_key?(CLASSPATH_ENV)
|
17
|
+
ENV[CLASSPATH_ENV].split(File::PATH_SEPARATOR)
|
18
|
+
elsif ENV.has_key?(CLI_HOME_ENV)
|
19
|
+
lib_dir = File.expand_path('lib', ENV[CLI_HOME_ENV])
|
20
|
+
Dir[File.join(lib_dir, '*.jar')]
|
21
|
+
else
|
22
|
+
nil
|
23
|
+
end
|
24
|
+
|
25
|
+
if STRUCTURIZR_JARS
|
26
|
+
Java.classpath.concat Dir[File.join(File.dirname(__FILE__), '*.jar')]
|
27
|
+
Java.classpath.concat STRUCTURIZR_JARS
|
28
|
+
end
|
29
|
+
|
30
|
+
def supported_formats
|
31
|
+
[:txt]
|
32
|
+
end
|
33
|
+
|
34
|
+
def collect_options(source)
|
35
|
+
{
|
36
|
+
:view => source.attr('view'),
|
37
|
+
:renderer => Renderers.get_renderer_type(source)
|
38
|
+
}
|
39
|
+
end
|
40
|
+
|
41
|
+
def convert(source, format, options)
|
42
|
+
unless STRUCTURIZR_JARS
|
43
|
+
raise "Could not load Structurizr. Specify the location of the Structurizr JAR(s) using the 'DIAGRAM_STRUCTURIZRCLI_HOME' or DIAGRAM_STRUCTURIZR_CLASSPATH' environment variable."
|
44
|
+
end
|
45
|
+
|
46
|
+
Java.load
|
47
|
+
|
48
|
+
headers = {
|
49
|
+
'Accept' => Renderers.mime_type(options[:renderer])
|
50
|
+
}
|
51
|
+
headers['X-Structurizr-View'] = options[:view] if options[:view]
|
52
|
+
|
53
|
+
response = Java.send_request(
|
54
|
+
:url => '/structurizr',
|
55
|
+
:body => source.code,
|
56
|
+
:headers => headers
|
57
|
+
)
|
58
|
+
|
59
|
+
unless response[:code] == 200
|
60
|
+
raise Java.create_error("Structurizr code generation failed", response)
|
61
|
+
end
|
62
|
+
|
63
|
+
response[:body].force_encoding(Encoding::UTF_8)
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
require_relative 'converter'
|
2
|
+
require_relative 'renderers.rb'
|
3
|
+
require_relative '../diagram_processor'
|
4
|
+
|
5
|
+
module Asciidoctor
|
6
|
+
module Diagram
|
7
|
+
|
8
|
+
class StructurizrConvertBlockProcessor < DiagramBlockProcessor
|
9
|
+
use_converter StructurizrConverter
|
10
|
+
end
|
11
|
+
|
12
|
+
class StructurizrBlockProcessor < Asciidoctor::Extensions::BlockProcessor
|
13
|
+
DiagramBlockProcessor.inherited(self)
|
14
|
+
|
15
|
+
def initialize(name = nil, config = nil)
|
16
|
+
super
|
17
|
+
@structurizr = StructurizrConvertBlockProcessor.new(name)
|
18
|
+
@renderers = Renderers.new(name)
|
19
|
+
end
|
20
|
+
|
21
|
+
def process parent, reader, attributes
|
22
|
+
structurizr_attrs = attributes.dup
|
23
|
+
structurizr_attrs['format'] = 'txt'
|
24
|
+
|
25
|
+
renderer_block = @structurizr.process(parent, reader, structurizr_attrs)
|
26
|
+
@renderers.get_renderer(BasicSource.new(self, parent, attributes)).process(parent, renderer_block, attributes)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
class StructurizrConvertBlockMacroProcessor < DiagramBlockMacroProcessor
|
31
|
+
use_converter StructurizrConverter
|
32
|
+
end
|
33
|
+
|
34
|
+
class StructurizrBlockMacroProcessor < Asciidoctor::Extensions::BlockMacroProcessor
|
35
|
+
DiagramBlockMacroProcessor.inherited(self)
|
36
|
+
|
37
|
+
def initialize(name = nil, config = nil)
|
38
|
+
super
|
39
|
+
@structurizr = StructurizrConvertBlockMacroProcessor.new(name)
|
40
|
+
@renderers = Renderers.new(name)
|
41
|
+
end
|
42
|
+
|
43
|
+
def process parent, target, attributes
|
44
|
+
structurizr_attrs = attributes.dup
|
45
|
+
structurizr_attrs['format'] = 'txt'
|
46
|
+
|
47
|
+
renderer_block = @structurizr.process(parent, target, structurizr_attrs)
|
48
|
+
@renderers.get_renderer(BasicSource.new(self, parent, attributes)).process(parent, renderer_block, attributes)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
module Asciidoctor
|
2
|
+
module Diagram
|
3
|
+
class Renderers
|
4
|
+
D2 = 'd2'
|
5
|
+
GRAPHVIZ = 'graphviz'
|
6
|
+
MERMAID = 'mermaid'
|
7
|
+
PLANTUML_C4 = 'plantuml-c4'
|
8
|
+
PLANTUML = 'plantuml'
|
9
|
+
DEFAULT_RENDERER = PLANTUML_C4
|
10
|
+
|
11
|
+
def initialize(name)
|
12
|
+
@d2 = D2BlockProcessor.new(name)
|
13
|
+
@graphviz = GraphvizBlockProcessor.new(name)
|
14
|
+
@plantuml = PlantUmlBlockProcessor.new(name)
|
15
|
+
@mermaid = MermaidBlockProcessor.new(name)
|
16
|
+
end
|
17
|
+
|
18
|
+
def renderer(renderer_type)
|
19
|
+
case renderer_type
|
20
|
+
when D2
|
21
|
+
@d2
|
22
|
+
when GRAPHVIZ
|
23
|
+
@graphviz
|
24
|
+
when MERMAID
|
25
|
+
@mermaid
|
26
|
+
when PLANTUML, PLANTUML_C4
|
27
|
+
@plantuml
|
28
|
+
else
|
29
|
+
raise "Unsupported renderer: '#{renderer_type}'"
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def get_renderer(source)
|
34
|
+
renderer(Renderers.get_renderer_type(source))
|
35
|
+
end
|
36
|
+
|
37
|
+
def self.get_renderer_type(source)
|
38
|
+
source.attr('renderer', 'plantuml-c4')
|
39
|
+
end
|
40
|
+
def self.mime_type(renderer_type)
|
41
|
+
case renderer_type
|
42
|
+
when D2
|
43
|
+
'text/x-d2'
|
44
|
+
when GRAPHVIZ
|
45
|
+
'text/vnd.graphviz'
|
46
|
+
when MERMAID
|
47
|
+
'text/x-mermaid'
|
48
|
+
when PLANTUML
|
49
|
+
'text/x-plantuml'
|
50
|
+
when PLANTUML_C4
|
51
|
+
'text/x-plantuml-c4'
|
52
|
+
else
|
53
|
+
raise "Unsupported renderer: '#{renderer_type}'"
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
Binary file
|
@@ -0,0 +1,7 @@
|
|
1
|
+
require 'asciidoctor/extensions'
|
2
|
+
require_relative 'structurizr/extension'
|
3
|
+
|
4
|
+
Asciidoctor::Extensions.register do
|
5
|
+
block Asciidoctor::Diagram::StructurizrBlockProcessor, :structurizr
|
6
|
+
block_macro Asciidoctor::Diagram::StructurizrBlockMacroProcessor, :structurizr
|
7
|
+
end
|