asciidoctor-diagram 2.0.2 → 2.1.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.adoc +78 -1
- data/README.adoc +25 -507
- data/Rakefile +1 -1
- data/docs/antora.yml +3 -0
- data/{images → docs/modules/ROOT/images}/asciidoctor-diagram-classes.png +0 -0
- data/docs/modules/ROOT/images/asciidoctor-diagram-process.png +0 -0
- data/docs/modules/ROOT/pages/index.adoc +21 -0
- data/docs/modules/ROOT/partials/advanced.adoc +319 -0
- data/docs/modules/ROOT/partials/create_diagram.adoc +132 -0
- data/docs/modules/ROOT/partials/generate.adoc +15 -0
- data/docs/modules/ROOT/partials/installation.adoc +19 -0
- data/docs/modules/ROOT/partials/uris.adoc +40 -0
- data/examples/features.adoc +1 -1
- data/lib/asciidoctor-diagram.rb +4 -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 +9 -1
- data/lib/asciidoctor-diagram/diagram_processor.rb +92 -48
- data/lib/asciidoctor-diagram/diagram_source.rb +71 -24
- data/lib/asciidoctor-diagram/diagrams.rb +7 -0
- data/lib/asciidoctor-diagram/diagrams/converter.rb +49 -0
- data/lib/asciidoctor-diagram/diagrams/extension.rb +14 -0
- data/lib/asciidoctor-diagram/ditaa/converter.rb +20 -7
- data/lib/asciidoctor-diagram/ditaa/ditaa-1.3.20.jar +0 -0
- 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 +52 -14
- data/lib/asciidoctor-diagram/http/server.rb +11 -6
- data/lib/asciidoctor-diagram/lilypond/converter.rb +13 -3
- data/lib/asciidoctor-diagram/meme/converter.rb +22 -16
- data/lib/asciidoctor-diagram/mermaid/converter.rb +45 -14
- data/lib/asciidoctor-diagram/msc/converter.rb +2 -2
- data/lib/asciidoctor-diagram/pikchr.rb +7 -0
- data/lib/asciidoctor-diagram/pikchr/converter.rb +33 -0
- data/lib/asciidoctor-diagram/pikchr/extension.rb +14 -0
- data/lib/asciidoctor-diagram/plantuml/converter.rb +68 -43
- data/lib/asciidoctor-diagram/plantuml/plantuml-1.3.20.jar +0 -0
- data/lib/asciidoctor-diagram/smcat/converter.rb +3 -3
- data/lib/asciidoctor-diagram/svgbob/converter.rb +6 -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/tikz/converter.rb +20 -1
- data/lib/asciidoctor-diagram/umlet/converter.rb +11 -2
- data/lib/asciidoctor-diagram/util/cli.rb +16 -1
- data/lib/asciidoctor-diagram/util/cli_generator.rb +30 -8
- data/lib/asciidoctor-diagram/util/gif.rb +2 -2
- data/lib/asciidoctor-diagram/util/java.rb +118 -3
- data/lib/asciidoctor-diagram/util/java_jruby.rb +4 -1
- data/lib/asciidoctor-diagram/util/java_socket.rb +8 -109
- data/lib/asciidoctor-diagram/util/pdf.rb +2 -2
- data/lib/asciidoctor-diagram/util/png.rb +2 -2
- data/lib/{server-1.3.15.jar → asciidoctor-diagram/util/server-1.3.20.jar} +0 -0
- data/lib/asciidoctor-diagram/util/svg.rb +66 -18
- data/lib/asciidoctor-diagram/vega/converter.rb +2 -2
- data/lib/asciidoctor-diagram/version.rb +1 -1
- data/spec/a2s_spec.rb +6 -144
- data/spec/blockdiag_spec.rb +6 -204
- data/spec/bpmn_spec.rb +52 -92
- data/spec/bytefield_spec.rb +6 -144
- data/spec/diagrams_spec.rb +23 -0
- data/spec/ditaa_spec.rb +6 -144
- data/spec/dpic_spec.rb +19 -0
- data/spec/erd_spec.rb +6 -203
- data/spec/gnuplot_spec.rb +10 -263
- data/spec/graphviz_spec.rb +6 -145
- data/spec/lilypond_spec.rb +6 -144
- data/spec/mermaid_spec.rb +69 -211
- data/spec/msc_spec.rb +6 -203
- data/spec/nomnoml_spec.rb +7 -145
- data/spec/pikchr_spec.rb +69 -0
- data/spec/plantuml_spec.rb +63 -553
- data/spec/shaape_spec.rb +12 -224
- data/spec/shared_examples.rb +603 -0
- data/spec/smcat_spec.rb +6 -144
- data/spec/svgbob_spec.rb +6 -144
- data/spec/symbolator_spec.rb +23 -0
- data/spec/syntrax_spec.rb +7 -217
- data/spec/test_helper.rb +4 -29
- data/spec/tikz_spec.rb +68 -18
- data/spec/umlet_spec.rb +3 -59
- data/spec/vega_spec.rb +6 -119
- data/spec/wavedrom_spec.rb +3 -200
- metadata +82 -18
- data/README_zh-CN.adoc +0 -336
- data/images/asciidoctor-diagram-process.png +0 -0
- data/lib/batik-all-1.10.jar +0 -0
- data/lib/ditaa-1.3.15.jar +0 -0
- data/lib/ditaamini-0.12.jar +0 -0
- data/lib/jlatexmath-minimal-1.0.5.jar +0 -0
- data/lib/plantuml-1.3.15.jar +0 -0
- data/lib/plantuml.jar +0 -0
- data/spec/bpmn-example.xml +0 -44
@@ -15,18 +15,26 @@ module Asciidoctor
|
|
15
15
|
[:png, :svg]
|
16
16
|
end
|
17
17
|
|
18
|
-
def
|
18
|
+
def native_scaling?
|
19
|
+
true
|
20
|
+
end
|
21
|
+
|
22
|
+
def collect_options(source)
|
19
23
|
options = {}
|
20
24
|
|
21
|
-
options[:css] = source.attr('css'
|
22
|
-
options[:gantt_config] = source.attr('ganttconfig',
|
23
|
-
options[:seq_config] = source.attr('sequenceconfig',
|
24
|
-
options[:width] = source.attr('width'
|
25
|
-
options[:height] = source.attr('height'
|
26
|
-
options[:
|
27
|
-
options[:
|
28
|
-
|
29
|
-
|
25
|
+
options[:css] = source.attr('css')
|
26
|
+
options[:gantt_config] = source.attr(['ganttconfig', 'gantt-config'])
|
27
|
+
options[:seq_config] = source.attr(['sequenceconfig', 'sequence-config'])
|
28
|
+
options[:width] = source.attr('width')
|
29
|
+
options[:height] = source.attr('height')
|
30
|
+
options[:scale] = source.attr('scale')
|
31
|
+
if options[:scale]
|
32
|
+
raise "Mermaid only supports integer scale factors: #{options[:scale]}" unless options[:scale] =~ /^[0-9]+$/
|
33
|
+
end
|
34
|
+
options[:theme] = source.attr('theme')
|
35
|
+
options[:background] = source.attr('background')
|
36
|
+
options[:config] = source.attr('config')
|
37
|
+
options[:puppeteer_config] = source.attr(['puppeteerconfig', 'puppeteer-config'])
|
30
38
|
|
31
39
|
options
|
32
40
|
end
|
@@ -56,9 +64,17 @@ module Asciidoctor
|
|
56
64
|
|
57
65
|
opts[:width] = options[:width]
|
58
66
|
|
59
|
-
mmdc =
|
67
|
+
mmdc = nil
|
68
|
+
mmdc_exception = nil
|
69
|
+
begin
|
70
|
+
mmdc = source.find_command('mmdc')
|
71
|
+
rescue => e
|
72
|
+
mmdc_exception = e
|
73
|
+
end
|
74
|
+
|
60
75
|
if mmdc
|
61
76
|
opts[:height] = options[:height]
|
77
|
+
opts[:scale] = options[:scale]
|
62
78
|
opts[:theme] = options[:theme]
|
63
79
|
opts[:background] = options[:background]
|
64
80
|
config = options[:config]
|
@@ -67,8 +83,16 @@ module Asciidoctor
|
|
67
83
|
end
|
68
84
|
run_mmdc(mmdc, source, format, opts)
|
69
85
|
else
|
70
|
-
|
71
|
-
|
86
|
+
begin
|
87
|
+
mermaid = source.find_command('mermaid')
|
88
|
+
run_mermaid(mermaid, source, format, opts)
|
89
|
+
rescue
|
90
|
+
if mmdc_exception
|
91
|
+
raise mmdc_exception
|
92
|
+
else
|
93
|
+
raise
|
94
|
+
end
|
95
|
+
end
|
72
96
|
end
|
73
97
|
end
|
74
98
|
|
@@ -93,6 +117,10 @@ module Asciidoctor
|
|
93
117
|
args << '--height' << options[:height]
|
94
118
|
end
|
95
119
|
|
120
|
+
if options[:scale]
|
121
|
+
args << '--scale' << options[:scale]
|
122
|
+
end
|
123
|
+
|
96
124
|
if options[:background]
|
97
125
|
bg = options[:background]
|
98
126
|
bg = "##{bg}" unless bg[0] == '#'
|
@@ -134,7 +162,10 @@ module Asciidoctor
|
|
134
162
|
args << '--puppeteerConfigFile' << Platform.native_path(options[:puppeteer])
|
135
163
|
end
|
136
164
|
|
137
|
-
|
165
|
+
{
|
166
|
+
:args => args,
|
167
|
+
:env => {'NODE_OPTIONS' => '--unhandled-rejections=strict'}
|
168
|
+
}
|
138
169
|
end
|
139
170
|
end
|
140
171
|
|
@@ -0,0 +1,33 @@
|
|
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 PikchrConverter
|
9
|
+
include DiagramConverter
|
10
|
+
include CliGenerator
|
11
|
+
|
12
|
+
|
13
|
+
def supported_formats
|
14
|
+
[:svg]
|
15
|
+
end
|
16
|
+
|
17
|
+
def convert(source, format, options)
|
18
|
+
pikchr_path = source.find_command('pikchr')
|
19
|
+
|
20
|
+
output = generate_file_stdout(pikchr_path, format.to_s, source.to_s) do |tool_path, input_path|
|
21
|
+
[tool_path, "--svg-only", input_path]
|
22
|
+
end
|
23
|
+
|
24
|
+
if output.start_with? '<svg'
|
25
|
+
output
|
26
|
+
else
|
27
|
+
error = output.gsub(/<\/?[a-z]+>\n?/i, '')
|
28
|
+
raise error
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require_relative 'converter'
|
2
|
+
require_relative '../diagram_processor'
|
3
|
+
|
4
|
+
module Asciidoctor
|
5
|
+
module Diagram
|
6
|
+
class PikchrBlockProcessor < DiagramBlockProcessor
|
7
|
+
use_converter PikchrConverter
|
8
|
+
end
|
9
|
+
|
10
|
+
class PikchrBlockMacroProcessor < DiagramBlockMacroProcessor
|
11
|
+
use_converter PikchrConverter
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require_relative '../diagram_converter'
|
2
|
+
require 'delegate'
|
2
3
|
require 'uri'
|
3
4
|
|
4
5
|
module Asciidoctor
|
@@ -7,30 +8,40 @@ module Asciidoctor
|
|
7
8
|
class PlantUmlConverter
|
8
9
|
include DiagramConverter
|
9
10
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
11
|
+
CLASSPATH_ENV = 'DIAGRAM_PLANTUML_CLASSPATH'
|
12
|
+
LIB_DIR = File.expand_path('../..', File.dirname(__FILE__))
|
13
|
+
PLANTUML_JARS = if ENV.has_key?(CLASSPATH_ENV)
|
14
|
+
ENV[CLASSPATH_ENV].split(File::PATH_SEPARATOR)
|
15
|
+
else
|
16
|
+
begin
|
17
|
+
require 'asciidoctor-diagram/plantuml/classpath'
|
18
|
+
::Asciidoctor::Diagram::PlantUmlClasspath::JAR_FILES
|
19
|
+
rescue LoadError
|
20
|
+
raise "Could not load PlantUML. Eiter require 'asciidoctor-diagram-plantuml' or specify the location of the PlantUML JAR(s) using the 'DIAGRAM_PLANTUML_CLASSPATH' environment variable."
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
Java.classpath.concat Dir[File.join(File.dirname(__FILE__), '*.jar')].freeze
|
25
|
+
Java.classpath.concat PLANTUML_JARS
|
26
|
+
|
27
|
+
def wrap_source(source)
|
28
|
+
PlantUMLPreprocessedSource.new(source, self.class.tag)
|
17
29
|
end
|
18
|
-
Java.classpath.concat JARS
|
19
30
|
|
20
31
|
def supported_formats
|
21
32
|
[:png, :svg, :txt, :atxt, :utxt]
|
22
33
|
end
|
23
34
|
|
24
|
-
def collect_options(source
|
35
|
+
def collect_options(source)
|
25
36
|
{
|
26
|
-
:
|
37
|
+
:size_limit => source.attr('size-limit', '4096')
|
27
38
|
}
|
28
39
|
end
|
29
40
|
|
30
41
|
def convert(source, format, options)
|
31
42
|
Java.load
|
32
43
|
|
33
|
-
code =
|
44
|
+
code = source.code
|
34
45
|
|
35
46
|
case format
|
36
47
|
when :png
|
@@ -49,9 +60,9 @@ module Asciidoctor
|
|
49
60
|
'Accept' => mime_type
|
50
61
|
}
|
51
62
|
|
52
|
-
|
53
|
-
if
|
54
|
-
headers['X-PlantUML-
|
63
|
+
size_limit = options[:size_limit]
|
64
|
+
if size_limit
|
65
|
+
headers['X-PlantUML-SizeLimit'] = size_limit
|
55
66
|
end
|
56
67
|
|
57
68
|
dot = source.find_command('dot', :alt_attrs => ['graphvizdot'], :raise_on_error => false)
|
@@ -71,35 +82,6 @@ module Asciidoctor
|
|
71
82
|
|
72
83
|
response[:body]
|
73
84
|
end
|
74
|
-
|
75
|
-
def preprocess_code(source, tag)
|
76
|
-
code = source.to_s
|
77
|
-
|
78
|
-
code = "@start#{tag}\n#{code}\n@end#{tag}" unless code.index("@start") && code.index("@end")
|
79
|
-
|
80
|
-
code.gsub!(/(?<=<img:)[^>]+(?=>)/) do |match|
|
81
|
-
resolve_path(match, source, source.attr('imagesdir'))
|
82
|
-
end
|
83
|
-
|
84
|
-
code.gsub!(/(?:(?<=!include\s)|(?<=!includesub\s))\s*[^<][^!\n\r]+/) do |match|
|
85
|
-
resolve_path(match.lstrip, source, source.base_dir)
|
86
|
-
end
|
87
|
-
|
88
|
-
code
|
89
|
-
end
|
90
|
-
|
91
|
-
def resolve_path(path, source, base_dir)
|
92
|
-
if path =~ ::URI::ABS_URI
|
93
|
-
uri = ::URI.parse(path)
|
94
|
-
if uri.scheme == 'file'
|
95
|
-
source.resolve_path(uri.path, base_dir)
|
96
|
-
else
|
97
|
-
path
|
98
|
-
end
|
99
|
-
else
|
100
|
-
source.resolve_path(path, base_dir)
|
101
|
-
end
|
102
|
-
end
|
103
85
|
end
|
104
86
|
|
105
87
|
class UmlConverter < PlantUmlConverter
|
@@ -113,5 +95,48 @@ module Asciidoctor
|
|
113
95
|
'salt'
|
114
96
|
end
|
115
97
|
end
|
98
|
+
|
99
|
+
class PlantUMLPreprocessedSource < SimpleDelegator
|
100
|
+
def initialize(source, tag)
|
101
|
+
super(source)
|
102
|
+
@tag = tag
|
103
|
+
end
|
104
|
+
|
105
|
+
def code
|
106
|
+
@code ||= load_code
|
107
|
+
end
|
108
|
+
|
109
|
+
def load_code
|
110
|
+
Java.load
|
111
|
+
|
112
|
+
code = __getobj__.code
|
113
|
+
|
114
|
+
code = "@start#{@tag}\n#{code}\n@end#{@tag}" unless code.index("@start") && code.index("@end")
|
115
|
+
|
116
|
+
headers = {}
|
117
|
+
|
118
|
+
config_file = attr('plantumlconfig', nil, true) || attr('config')
|
119
|
+
if config_file
|
120
|
+
headers['X-PlantUML-Config'] = File.expand_path(config_file, base_dir)
|
121
|
+
end
|
122
|
+
|
123
|
+
headers['X-PlantUML-Basedir'] = Platform.native_path(File.expand_path(base_dir))
|
124
|
+
|
125
|
+
response = Java.send_request(
|
126
|
+
:url => '/plantumlpreprocessor',
|
127
|
+
:body => code,
|
128
|
+
:headers => headers
|
129
|
+
)
|
130
|
+
|
131
|
+
unless response[:code] == 200
|
132
|
+
raise Java.create_error("PlantUML preprocessing failed", response)
|
133
|
+
end
|
134
|
+
|
135
|
+
code = response[:body]
|
136
|
+
code.force_encoding(Encoding::UTF_8)
|
137
|
+
|
138
|
+
code
|
139
|
+
end
|
140
|
+
end
|
116
141
|
end
|
117
142
|
end
|
Binary file
|
@@ -14,10 +14,10 @@ module Asciidoctor
|
|
14
14
|
[:svg]
|
15
15
|
end
|
16
16
|
|
17
|
-
def collect_options(source
|
17
|
+
def collect_options(source)
|
18
18
|
{
|
19
|
-
:direction => source.attr('direction'
|
20
|
-
:engine => source.attr('engine'
|
19
|
+
:direction => source.attr('direction'),
|
20
|
+
:engine => source.attr('engine')
|
21
21
|
}
|
22
22
|
end
|
23
23
|
|
@@ -14,6 +14,10 @@ module Asciidoctor
|
|
14
14
|
[:svg]
|
15
15
|
end
|
16
16
|
|
17
|
+
def native_scaling?
|
18
|
+
true
|
19
|
+
end
|
20
|
+
|
17
21
|
OPTIONS = {
|
18
22
|
:font_family => lambda { |o, v| o << '--font-family' << v if v },
|
19
23
|
:font_size => lambda { |o, v| o << '--font-size' << v if v },
|
@@ -21,12 +25,12 @@ module Asciidoctor
|
|
21
25
|
:scale => lambda { |o, v| o << '--scale' << v if v }
|
22
26
|
}
|
23
27
|
|
24
|
-
def collect_options(source
|
28
|
+
def collect_options(source)
|
25
29
|
options = {}
|
26
30
|
|
27
31
|
OPTIONS.keys.each do |option|
|
28
32
|
attr_name = option.to_s.tr('_', '-')
|
29
|
-
options[option] = source.attr(attr_name
|
33
|
+
options[option] = source.attr(attr_name) || source.attr(attr_name, nil, 'svgbob-option')
|
30
34
|
end
|
31
35
|
|
32
36
|
options
|
@@ -0,0 +1,23 @@
|
|
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 SymbolatorConverter
|
9
|
+
include DiagramConverter
|
10
|
+
include CliGenerator
|
11
|
+
|
12
|
+
def supported_formats
|
13
|
+
[:png, :pdf, :svg]
|
14
|
+
end
|
15
|
+
|
16
|
+
def convert(source, format, options)
|
17
|
+
generate_stdin(source.find_command('symbolator'), format.to_s, source.to_s) do |tool_path, output_path|
|
18
|
+
[tool_path, "-i-", "-o#{Platform.native_path(output_path)}", "-f#{format.to_s}"]
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require_relative '../diagram_processor'
|
2
|
+
require_relative 'converter'
|
3
|
+
|
4
|
+
module Asciidoctor
|
5
|
+
module Diagram
|
6
|
+
class SymbolatorBlockProcessor < DiagramBlockProcessor
|
7
|
+
use_converter SymbolatorConverter
|
8
|
+
end
|
9
|
+
|
10
|
+
class SymbolatorBlockMacroProcessor < DiagramBlockMacroProcessor
|
11
|
+
use_converter SymbolatorConverter
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -14,16 +14,15 @@ module Asciidoctor
|
|
14
14
|
[:png, :svg]
|
15
15
|
end
|
16
16
|
|
17
|
-
def collect_options(source
|
17
|
+
def collect_options(source)
|
18
18
|
{
|
19
|
-
:heading => source.attr('heading'
|
20
|
-
:scale => source.attr('scale'
|
21
|
-
:transparent => source.attr('transparent'
|
22
|
-
:style => source.attr('style'
|
19
|
+
:heading => source.attr('heading'),
|
20
|
+
:scale => source.attr('scale'),
|
21
|
+
:transparent => source.attr('transparent'),
|
22
|
+
:style => source.attr('style-file')
|
23
23
|
}
|
24
24
|
end
|
25
25
|
|
26
|
-
|
27
26
|
def convert(source, format, options)
|
28
27
|
generate_file(source.find_command('syntrax'), 'spec', format.to_s, source.to_s) do |tool_path, input_path, output_path|
|
29
28
|
args = [tool_path, '-i', Platform.native_path(input_path), '-o', Platform.native_path(output_path)]
|
@@ -50,6 +49,10 @@ module Asciidoctor
|
|
50
49
|
args
|
51
50
|
end
|
52
51
|
end
|
52
|
+
|
53
|
+
def native_scaling?
|
54
|
+
true
|
55
|
+
end
|
53
56
|
end
|
54
57
|
end
|
55
58
|
end
|