asciidoctor-diagram 2.1.0 → 2.2.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.adoc +43 -0
- data/docs/antora.yml +1 -1
- data/docs/modules/ROOT/pages/index.adoc +1 -1
- data/docs/modules/ROOT/partials/advanced.adoc +72 -13
- data/docs/modules/ROOT/partials/create_diagram.adoc +45 -42
- data/docs/modules/ROOT/partials/uris.adoc +5 -2
- data/lib/asciidoctor-diagram/a2s/extension.rb +4 -0
- data/lib/asciidoctor-diagram/a2s.rb +1 -0
- data/lib/asciidoctor-diagram/barcode/converter.rb +157 -0
- data/lib/asciidoctor-diagram/barcode/dependencies.rb +10 -0
- data/lib/asciidoctor-diagram/barcode/extension.rb +47 -0
- data/lib/asciidoctor-diagram/barcode/svg_outputter.rb +12 -0
- data/lib/asciidoctor-diagram/barcode.rb +11 -0
- data/lib/asciidoctor-diagram/blockdiag/extension.rb +5 -0
- data/lib/asciidoctor-diagram/blockdiag.rb +1 -0
- data/lib/asciidoctor-diagram/bpmn/extension.rb +4 -0
- data/lib/asciidoctor-diagram/bpmn.rb +1 -0
- data/lib/asciidoctor-diagram/bytefield/extension.rb +4 -0
- data/lib/asciidoctor-diagram/bytefield.rb +1 -0
- data/lib/asciidoctor-diagram/diagram_converter.rb +4 -0
- data/lib/asciidoctor-diagram/diagram_processor.rb +62 -6
- data/lib/asciidoctor-diagram/diagram_source.rb +23 -7
- data/lib/asciidoctor-diagram/diagrams/converter.rb +49 -0
- data/lib/asciidoctor-diagram/diagrams/extension.rb +18 -0
- data/lib/asciidoctor-diagram/diagrams.rb +8 -0
- data/lib/asciidoctor-diagram/ditaa/ditaa-1.3.20.jar +0 -0
- data/lib/asciidoctor-diagram/ditaa/extension.rb +4 -0
- data/lib/asciidoctor-diagram/ditaa.rb +1 -0
- data/lib/asciidoctor-diagram/dpic/extension.rb +4 -0
- data/lib/asciidoctor-diagram/dpic.rb +1 -0
- data/lib/asciidoctor-diagram/erd/extension.rb +4 -0
- data/lib/asciidoctor-diagram/erd.rb +1 -0
- data/lib/asciidoctor-diagram/gnuplot/extension.rb +4 -0
- data/lib/asciidoctor-diagram/gnuplot.rb +1 -0
- data/lib/asciidoctor-diagram/graphviz/extension.rb +4 -0
- data/lib/asciidoctor-diagram/graphviz.rb +1 -0
- data/lib/asciidoctor-diagram/http/converter.rb +35 -11
- data/lib/asciidoctor-diagram/http/server.rb +1 -1
- data/lib/asciidoctor-diagram/lilypond/extension.rb +4 -0
- data/lib/asciidoctor-diagram/lilypond.rb +1 -0
- data/lib/asciidoctor-diagram/meme/extension.rb +14 -16
- data/lib/asciidoctor-diagram/meme.rb +1 -0
- data/lib/asciidoctor-diagram/mermaid/extension.rb +4 -0
- data/lib/asciidoctor-diagram/mermaid.rb +1 -0
- data/lib/asciidoctor-diagram/msc/extension.rb +4 -0
- data/lib/asciidoctor-diagram/msc.rb +1 -0
- data/lib/asciidoctor-diagram/nomnoml/extension.rb +4 -0
- data/lib/asciidoctor-diagram/nomnoml.rb +1 -0
- data/lib/asciidoctor-diagram/pikchr/extension.rb +4 -0
- data/lib/asciidoctor-diagram/pikchr.rb +1 -0
- data/lib/asciidoctor-diagram/plantuml/converter.rb +53 -34
- data/lib/asciidoctor-diagram/plantuml/extension.rb +8 -0
- data/lib/asciidoctor-diagram/plantuml/plantuml-1.3.20.jar +0 -0
- data/lib/asciidoctor-diagram/plantuml.rb +1 -0
- data/lib/asciidoctor-diagram/salt.rb +1 -0
- data/lib/asciidoctor-diagram/shaape/extension.rb +4 -0
- data/lib/asciidoctor-diagram/shaape.rb +1 -0
- data/lib/asciidoctor-diagram/smcat/extension.rb +4 -0
- data/lib/asciidoctor-diagram/smcat.rb +1 -0
- data/lib/asciidoctor-diagram/svgbob/extension.rb +4 -0
- data/lib/asciidoctor-diagram/svgbob.rb +1 -0
- data/lib/asciidoctor-diagram/symbolator/extension.rb +4 -0
- data/lib/asciidoctor-diagram/symbolator.rb +1 -0
- data/lib/asciidoctor-diagram/syntrax/converter.rb +1 -1
- data/lib/asciidoctor-diagram/syntrax/extension.rb +4 -0
- data/lib/asciidoctor-diagram/syntrax.rb +1 -0
- data/lib/asciidoctor-diagram/tikz/extension.rb +4 -0
- data/lib/asciidoctor-diagram/tikz.rb +1 -0
- data/lib/asciidoctor-diagram/umlet/extension.rb +4 -0
- data/lib/asciidoctor-diagram/umlet.rb +1 -0
- data/lib/asciidoctor-diagram/util/cli_generator.rb +9 -7
- data/lib/asciidoctor-diagram/util/server-1.3.20.jar +0 -0
- data/lib/asciidoctor-diagram/vega/extension.rb +4 -0
- data/lib/asciidoctor-diagram/vega.rb +2 -0
- data/lib/asciidoctor-diagram/version.rb +1 -1
- data/lib/asciidoctor-diagram/wavedrom/extension.rb +4 -0
- data/lib/asciidoctor-diagram/wavedrom.rb +1 -0
- data/lib/asciidoctor-diagram.rb +2 -0
- data/spec/a2s_spec.rb +9 -5
- data/spec/barcode_spec.rb +176 -0
- data/spec/blockdiag_spec.rb +7 -3
- data/spec/bpmn_spec.rb +7 -3
- data/spec/bytefield_spec.rb +9 -5
- data/spec/diagrams_spec.rb +27 -0
- data/spec/ditaa_spec.rb +7 -3
- data/spec/dpic_spec.rb +7 -3
- data/spec/erd_spec.rb +7 -3
- data/spec/gnuplot_spec.rb +14 -10
- data/spec/graphviz_spec.rb +7 -3
- data/spec/lilypond_spec.rb +7 -3
- data/spec/mermaid_spec.rb +7 -3
- data/spec/msc_spec.rb +10 -6
- data/spec/nomnoml_spec.rb +9 -5
- data/spec/pikchr_spec.rb +7 -3
- data/spec/plantuml_spec.rb +114 -3
- data/spec/shaape_spec.rb +7 -3
- data/spec/shared_examples.rb +161 -0
- data/spec/smcat_spec.rb +10 -6
- data/spec/svgbob_spec.rb +7 -3
- data/spec/symbolator_spec.rb +7 -3
- data/spec/syntrax_spec.rb +7 -3
- data/spec/test_helper.rb +3 -1
- data/spec/tikz_spec.rb +8 -4
- data/spec/umlet_spec.rb +6 -3
- data/spec/vega_spec.rb +11 -6
- data/spec/wavedrom_spec.rb +7 -3
- metadata +23 -10
- data/lib/asciidoctor-diagram/ditaa/ditaa-1.3.17.jar +0 -0
- data/lib/asciidoctor-diagram/plantuml/plantuml-1.3.17.jar +0 -0
- data/lib/asciidoctor-diagram/util/server-1.3.17.jar +0 -0
@@ -4,4 +4,5 @@ require_relative 'gnuplot/extension'
|
|
4
4
|
Asciidoctor::Extensions.register do
|
5
5
|
block Asciidoctor::Diagram::GnuplotBlockProcessor, :gnuplot
|
6
6
|
block_macro Asciidoctor::Diagram::GnuplotBlockMacroProcessor, :gnuplot
|
7
|
+
inline_macro Asciidoctor::Diagram::GnuplotInlineMacroProcessor, :gnuplot
|
7
8
|
end
|
@@ -4,4 +4,5 @@ require_relative 'graphviz/extension'
|
|
4
4
|
Asciidoctor::Extensions.register do
|
5
5
|
block Asciidoctor::Diagram::GraphvizBlockProcessor, :graphviz
|
6
6
|
block_macro Asciidoctor::Diagram::GraphvizBlockMacroProcessor, :graphviz
|
7
|
+
inline_macro Asciidoctor::Diagram::GraphvizInlineMacroProcessor, :graphviz
|
7
8
|
end
|
@@ -11,6 +11,8 @@ module Asciidoctor
|
|
11
11
|
module Diagram
|
12
12
|
# @private
|
13
13
|
class HttpConverter
|
14
|
+
DEFAULT_MAX_GET_SIZE = 1024
|
15
|
+
|
14
16
|
include DiagramConverter
|
15
17
|
|
16
18
|
def initialize(base_uri, type, converter)
|
@@ -23,6 +25,14 @@ module Asciidoctor
|
|
23
25
|
@converter.supported_formats
|
24
26
|
end
|
25
27
|
|
28
|
+
def collect_options(source)
|
29
|
+
options = {}
|
30
|
+
|
31
|
+
options[:max_get_size] = source.global_attr('max-get-size', DEFAULT_MAX_GET_SIZE).to_i
|
32
|
+
|
33
|
+
options
|
34
|
+
end
|
35
|
+
|
26
36
|
def convert(source, format, options)
|
27
37
|
code = source.code
|
28
38
|
|
@@ -41,37 +51,49 @@ module Asciidoctor
|
|
41
51
|
encoded = Base64.urlsafe_encode64(compressed)
|
42
52
|
data = '0A' + encoded
|
43
53
|
|
44
|
-
path = uri.path
|
54
|
+
path = uri.path.dup
|
45
55
|
path << '/' unless path.end_with? '/'
|
46
56
|
path << format.to_s
|
47
|
-
path << '/' << data
|
48
|
-
uri.path = path
|
49
57
|
when :kroki_io
|
50
58
|
compressed = Zlib.deflate(code, Zlib::BEST_COMPRESSION)
|
51
59
|
data = Base64.urlsafe_encode64(compressed)
|
52
60
|
|
53
|
-
path = uri.path
|
61
|
+
path = uri.path.dup
|
54
62
|
path << '/' unless path.end_with? '/'
|
55
63
|
path << source.diagram_type.to_s
|
56
64
|
path << '/' << format.to_s
|
57
|
-
path << '/' << data
|
58
|
-
uri.path = path
|
59
65
|
else
|
60
66
|
raise "Unsupported server type: " + @type
|
61
67
|
end
|
62
68
|
|
63
|
-
|
69
|
+
get_path = path.dup << '/' << data
|
70
|
+
|
71
|
+
if get_path.length > options[:max_get_size]
|
72
|
+
uri.path = path
|
73
|
+
get_uri(uri, code, 'text/plain; charset=utf-8')
|
74
|
+
else
|
75
|
+
uri.path = get_path
|
76
|
+
get_uri(uri)
|
77
|
+
end
|
64
78
|
end
|
65
79
|
|
66
80
|
private
|
67
81
|
|
68
|
-
def get_uri(uri, attempt = 1)
|
82
|
+
def get_uri(uri, post_data = nil, post_content_type = nil, attempt = 1)
|
69
83
|
if attempt >= 10
|
70
84
|
raise "Too many redirects"
|
71
85
|
end
|
72
86
|
|
87
|
+
if post_data.nil?
|
88
|
+
request = Net::HTTP::Get.new(uri.path)
|
89
|
+
else
|
90
|
+
request = Net::HTTP::Post.new(uri.path)
|
91
|
+
request.body = post_data
|
92
|
+
request.set_content_type(post_content_type) if post_content_type
|
93
|
+
end
|
94
|
+
|
73
95
|
Net::HTTP.start(uri.hostname, uri.port, :use_ssl => uri.scheme.downcase == 'https') do |http|
|
74
|
-
response = http.
|
96
|
+
response = http.request(request)
|
75
97
|
case response
|
76
98
|
when Net::HTTPSuccess
|
77
99
|
response.body
|
@@ -79,10 +101,12 @@ module Asciidoctor
|
|
79
101
|
location = response['Location']
|
80
102
|
new_uri = URI.parse(location)
|
81
103
|
if new_uri.relative?
|
82
|
-
|
104
|
+
resolved_uri = uri + location
|
83
105
|
else
|
84
|
-
|
106
|
+
resolved_uri = new_uri
|
85
107
|
end
|
108
|
+
|
109
|
+
get_uri(resolved_uri, post_data, post_content_type, attempt + 1)
|
86
110
|
else
|
87
111
|
response.value
|
88
112
|
end
|
@@ -4,4 +4,5 @@ require_relative 'lilypond/extension'
|
|
4
4
|
Asciidoctor::Extensions.register do
|
5
5
|
block Asciidoctor::Diagram::LilypondBlockProcessor, :lilypond
|
6
6
|
block_macro Asciidoctor::Diagram::LilypondBlockMacroProcessor, :lilypond
|
7
|
+
inline_macro Asciidoctor::Diagram::LilypondInlineMacroProcessor, :lilypond
|
7
8
|
end
|
@@ -3,26 +3,24 @@ require_relative '../diagram_processor'
|
|
3
3
|
|
4
4
|
module Asciidoctor
|
5
5
|
module Diagram
|
6
|
-
|
7
|
-
use_converter MemeConverter
|
8
|
-
|
9
|
-
class StringReader
|
10
|
-
def initialize(str)
|
11
|
-
@str = str
|
12
|
-
end
|
13
|
-
|
14
|
-
def lines
|
15
|
-
@str.lines.map { |l| l.rstrip }
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
name_positional_attributes %w(top bottom target format)
|
20
|
-
|
6
|
+
module MemeProcessor
|
21
7
|
def create_source(parent, target, attributes)
|
22
8
|
attributes = attributes.dup
|
23
9
|
attributes['background'] = apply_target_subs(parent, target)
|
24
|
-
::Asciidoctor::Diagram::ReaderSource.new(self, parent,
|
10
|
+
::Asciidoctor::Diagram::ReaderSource.new(self, parent, '', attributes)
|
25
11
|
end
|
26
12
|
end
|
13
|
+
|
14
|
+
class MemeBlockMacroProcessor < DiagramBlockMacroProcessor
|
15
|
+
use_converter MemeConverter
|
16
|
+
name_positional_attributes %w(top bottom target format)
|
17
|
+
include MemeProcessor
|
18
|
+
end
|
19
|
+
|
20
|
+
class MemeInlineMacroProcessor < DiagramInlineMacroProcessor
|
21
|
+
use_converter MemeConverter
|
22
|
+
name_positional_attributes %w(top bottom target format)
|
23
|
+
include MemeProcessor
|
24
|
+
end
|
27
25
|
end
|
28
26
|
end
|
@@ -4,4 +4,5 @@ require_relative 'mermaid/extension'
|
|
4
4
|
Asciidoctor::Extensions.register do
|
5
5
|
block Asciidoctor::Diagram::MermaidBlockProcessor, :mermaid
|
6
6
|
block_macro Asciidoctor::Diagram::MermaidBlockMacroProcessor, :mermaid
|
7
|
+
inline_macro Asciidoctor::Diagram::MermaidInlineMacroProcessor, :mermaid
|
7
8
|
end
|
@@ -4,4 +4,5 @@ require_relative 'nomnoml/extension'
|
|
4
4
|
Asciidoctor::Extensions.register do
|
5
5
|
block Asciidoctor::Diagram::NomnomlBlockProcessor, :nomnoml
|
6
6
|
block_macro Asciidoctor::Diagram::NomnomlBlockMacroProcessor, :nomnoml
|
7
|
+
inline_macro Asciidoctor::Diagram::NomnomlInlineMacroProcessor, :nomnoml
|
7
8
|
end
|
@@ -4,4 +4,5 @@ require_relative 'pikchr/extension'
|
|
4
4
|
Asciidoctor::Extensions.register do
|
5
5
|
block Asciidoctor::Diagram::PikchrBlockProcessor, :pikchr
|
6
6
|
block_macro Asciidoctor::Diagram::PikchrBlockMacroProcessor, :pikchr
|
7
|
+
inline_macro Asciidoctor::Diagram::PikchrInlineMacroProcessor, :pikchr
|
7
8
|
end
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require_relative '../diagram_converter'
|
2
|
+
require 'delegate'
|
2
3
|
require 'uri'
|
3
4
|
|
4
5
|
module Asciidoctor
|
@@ -23,20 +24,24 @@ module Asciidoctor
|
|
23
24
|
Java.classpath.concat Dir[File.join(File.dirname(__FILE__), '*.jar')].freeze
|
24
25
|
Java.classpath.concat PLANTUML_JARS
|
25
26
|
|
27
|
+
def wrap_source(source)
|
28
|
+
PlantUMLPreprocessedSource.new(source, self.class.tag)
|
29
|
+
end
|
30
|
+
|
26
31
|
def supported_formats
|
27
32
|
[:png, :svg, :txt, :atxt, :utxt]
|
28
33
|
end
|
29
34
|
|
30
35
|
def collect_options(source)
|
31
36
|
{
|
32
|
-
:
|
37
|
+
:size_limit => source.attr('size-limit', '4096')
|
33
38
|
}
|
34
39
|
end
|
35
40
|
|
36
41
|
def convert(source, format, options)
|
37
42
|
Java.load
|
38
43
|
|
39
|
-
code =
|
44
|
+
code = source.code
|
40
45
|
|
41
46
|
case format
|
42
47
|
when :png
|
@@ -55,9 +60,9 @@ module Asciidoctor
|
|
55
60
|
'Accept' => mime_type
|
56
61
|
}
|
57
62
|
|
58
|
-
|
59
|
-
if
|
60
|
-
headers['X-PlantUML-
|
63
|
+
size_limit = options[:size_limit]
|
64
|
+
if size_limit
|
65
|
+
headers['X-PlantUML-SizeLimit'] = size_limit
|
61
66
|
end
|
62
67
|
|
63
68
|
dot = source.find_command('dot', :alt_attrs => ['graphvizdot'], :raise_on_error => false)
|
@@ -77,35 +82,6 @@ module Asciidoctor
|
|
77
82
|
|
78
83
|
response[:body]
|
79
84
|
end
|
80
|
-
|
81
|
-
def preprocess_code(source, tag)
|
82
|
-
code = source.to_s
|
83
|
-
|
84
|
-
code = "@start#{tag}\n#{code}\n@end#{tag}" unless code.index("@start") && code.index("@end")
|
85
|
-
|
86
|
-
code.gsub!(/(?<=<img:)[^>]+(?=>)/) do |match|
|
87
|
-
resolve_path(match, source, source.attr('imagesdir', nil, false))
|
88
|
-
end
|
89
|
-
|
90
|
-
code.gsub!(/(?:(?<=!include\s)|(?<=!includesub\s))\s*[^<][^!\n\r]+/) do |match|
|
91
|
-
resolve_path(match.lstrip, source, source.base_dir)
|
92
|
-
end
|
93
|
-
|
94
|
-
code
|
95
|
-
end
|
96
|
-
|
97
|
-
def resolve_path(path, source, base_dir)
|
98
|
-
if path =~ ::URI::ABS_URI
|
99
|
-
uri = ::URI.parse(path)
|
100
|
-
if uri.scheme == 'file'
|
101
|
-
source.resolve_path(uri.path, base_dir)
|
102
|
-
else
|
103
|
-
path
|
104
|
-
end
|
105
|
-
else
|
106
|
-
source.resolve_path(path, base_dir)
|
107
|
-
end
|
108
|
-
end
|
109
85
|
end
|
110
86
|
|
111
87
|
class UmlConverter < PlantUmlConverter
|
@@ -119,5 +95,48 @@ module Asciidoctor
|
|
119
95
|
'salt'
|
120
96
|
end
|
121
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
|
122
141
|
end
|
123
142
|
end
|
@@ -11,6 +11,10 @@ module Asciidoctor
|
|
11
11
|
use_converter UmlConverter
|
12
12
|
end
|
13
13
|
|
14
|
+
class PlantUmlInlineMacroProcessor < DiagramInlineMacroProcessor
|
15
|
+
use_converter UmlConverter
|
16
|
+
end
|
17
|
+
|
14
18
|
class SaltBlockProcessor < DiagramBlockProcessor
|
15
19
|
use_converter SaltConverter
|
16
20
|
end
|
@@ -18,5 +22,9 @@ module Asciidoctor
|
|
18
22
|
class SaltBlockMacroProcessor < DiagramBlockMacroProcessor
|
19
23
|
use_converter SaltConverter
|
20
24
|
end
|
25
|
+
|
26
|
+
class SaltInlineMacroProcessor < DiagramInlineMacroProcessor
|
27
|
+
use_converter SaltConverter
|
28
|
+
end
|
21
29
|
end
|
22
30
|
end
|