asciidoctor-diagram 1.1.6 → 1.2.0.preview.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 +4 -4
- data/CHANGELOG.adoc +2 -39
- data/examples/README.adoc +15 -3
- data/lib/asciidoctor-diagram.rb +1 -3
- data/lib/asciidoctor-diagram/ditaa.rb +2 -2
- data/lib/asciidoctor-diagram/ditaa/extension.rb +23 -21
- data/lib/asciidoctor-diagram/ditaa/generator.rb +31 -0
- data/lib/asciidoctor-diagram/graphviz.rb +2 -2
- data/lib/asciidoctor-diagram/graphviz/extension.rb +32 -9
- data/lib/asciidoctor-diagram/plantuml.rb +3 -2
- data/lib/asciidoctor-diagram/plantuml/extension.rb +31 -15
- data/lib/asciidoctor-diagram/plantuml/generator.rb +25 -11
- data/lib/asciidoctor-diagram/util/diagram.rb +76 -96
- data/lib/asciidoctor-diagram/util/java_jruby.rb +0 -4
- data/lib/asciidoctor-diagram/util/java_rjb.rb +0 -8
- data/lib/asciidoctor-diagram/util/svg.rb +23 -19
- data/lib/asciidoctor-diagram/version.rb +1 -1
- data/lib/plantuml.jar +0 -0
- data/spec/ditaa_spec.rb +3 -3
- data/spec/graphviz_spec.rb +3 -28
- data/spec/plantuml_spec.rb +6 -147
- data/spec/test_helper.rb +3 -10
- metadata +19 -29
- data/examples/build_example.rb +0 -9
- data/lib/asciidoctor-diagram/blockdiag.rb +0 -8
- data/lib/asciidoctor-diagram/blockdiag/extension.rb +0 -18
- data/lib/asciidoctor-diagram/shaape.rb +0 -8
- data/lib/asciidoctor-diagram/shaape/extension.rb +0 -16
- data/lib/asciidoctor-diagram/util/cli_generator.rb +0 -40
- data/lib/asciidoctor-diagram/util/which.rb +0 -14
- data/spec/blockdiag_spec.rb +0 -183
- data/spec/shaape_spec.rb +0 -227
data/examples/build_example.rb
DELETED
@@ -1,8 +0,0 @@
|
|
1
|
-
require 'asciidoctor/extensions'
|
2
|
-
require_relative 'version'
|
3
|
-
|
4
|
-
Asciidoctor::Extensions.register do
|
5
|
-
require_relative 'blockdiag/extension'
|
6
|
-
block :blockdiag, Asciidoctor::Diagram::BlockDiagBlock
|
7
|
-
block_macro :blockdiag, Asciidoctor::Diagram::BlockDiagBlockMacro
|
8
|
-
end
|
@@ -1,18 +0,0 @@
|
|
1
|
-
require_relative '../util/cli_generator'
|
2
|
-
require_relative '../util/diagram'
|
3
|
-
|
4
|
-
module Asciidoctor
|
5
|
-
module Diagram
|
6
|
-
['BlockDiag', 'SeqDiag', 'ActDiag', 'NwDiag', 'RackDiag', 'PacketDiag'].each do |tool|
|
7
|
-
DiagramProcessor.define_processors(tool) do
|
8
|
-
[:png, :svg].each do |f|
|
9
|
-
register_format(f, :image) do |c, p|
|
10
|
-
CliGenerator.generate(tool.downcase, p, c) do |tool_path, output_path|
|
11
|
-
[tool_path, '-o', output_path, "-T#{f.to_s}", '-']
|
12
|
-
end
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
@@ -1,16 +0,0 @@
|
|
1
|
-
require_relative '../util/cli_generator'
|
2
|
-
require_relative '../util/diagram'
|
3
|
-
|
4
|
-
module Asciidoctor
|
5
|
-
module Diagram
|
6
|
-
DiagramProcessor.define_processors('Shaape') do
|
7
|
-
[:png, :svg].each do |f|
|
8
|
-
register_format(f, :image) do |c, p|
|
9
|
-
CliGenerator.generate('shaape', p, c) do |tool_path, output_path|
|
10
|
-
[tool_path, '-o', output_path, '-t', f.to_s, '-']
|
11
|
-
end
|
12
|
-
end
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
@@ -1,40 +0,0 @@
|
|
1
|
-
require 'tempfile'
|
2
|
-
|
3
|
-
require_relative '../util/java'
|
4
|
-
require_relative '../util/which'
|
5
|
-
|
6
|
-
module Asciidoctor
|
7
|
-
module Diagram
|
8
|
-
module CliGenerator
|
9
|
-
def self.generate(tool, parent, code)
|
10
|
-
tool_var = '@' + tool
|
11
|
-
|
12
|
-
tool_path = instance_variable_get(tool_var)
|
13
|
-
unless tool_path
|
14
|
-
tool_path = parent.document.attributes[tool]
|
15
|
-
tool_path = ::Asciidoctor::Diagram.which(tool) unless tool_path && File.executable?(tool_path)
|
16
|
-
raise "Could not find the '#{tool}' executable in PATH; add it to the PATH or specify its location using the 'shaape' document attribute" unless tool_path
|
17
|
-
instance_variable_set(tool_var, tool_path)
|
18
|
-
end
|
19
|
-
|
20
|
-
target_file = Tempfile.new(tool)
|
21
|
-
begin
|
22
|
-
target_file.close
|
23
|
-
|
24
|
-
args = yield tool_path, target_file.path
|
25
|
-
|
26
|
-
IO.popen(args, "w") do |io|
|
27
|
-
io.write code
|
28
|
-
end
|
29
|
-
result_code = $?
|
30
|
-
|
31
|
-
raise "#{tool} image generation failed" unless result_code == 0
|
32
|
-
|
33
|
-
File.read(target_file.path)
|
34
|
-
ensure
|
35
|
-
target_file.unlink
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
@@ -1,14 +0,0 @@
|
|
1
|
-
module Asciidoctor
|
2
|
-
module Diagram
|
3
|
-
def self.which(cmd)
|
4
|
-
exts = ENV['PATHEXT'] ? ENV['PATHEXT'].split(';') : ['']
|
5
|
-
ENV['PATH'].split(File::PATH_SEPARATOR).each do |path|
|
6
|
-
exts.each { |ext|
|
7
|
-
exe = File.join(path, "#{cmd}#{ext}")
|
8
|
-
return exe if File.executable? exe
|
9
|
-
}
|
10
|
-
end
|
11
|
-
nil
|
12
|
-
end
|
13
|
-
end
|
14
|
-
end
|
data/spec/blockdiag_spec.rb
DELETED
@@ -1,183 +0,0 @@
|
|
1
|
-
require_relative 'test_helper'
|
2
|
-
|
3
|
-
code = <<-eos
|
4
|
-
blockdiag {
|
5
|
-
A -> B -> C -> D;
|
6
|
-
A -> E -> F -> G;
|
7
|
-
}
|
8
|
-
eos
|
9
|
-
|
10
|
-
describe Asciidoctor::Diagram::BlockDiagBlockMacro do
|
11
|
-
it "should generate PNG images when format is set to 'png'" do
|
12
|
-
File.write('blockdiag.txt', code)
|
13
|
-
|
14
|
-
doc = <<-eos
|
15
|
-
= Hello, BlockDiag!
|
16
|
-
Doc Writer <doc@example.com>
|
17
|
-
|
18
|
-
== First Section
|
19
|
-
|
20
|
-
blockdiag::blockdiag.txt[format="png"]
|
21
|
-
eos
|
22
|
-
|
23
|
-
d = Asciidoctor.load StringIO.new(doc)
|
24
|
-
expect(d).to_not be_nil
|
25
|
-
|
26
|
-
b = d.find { |b| b.context == :image }
|
27
|
-
expect(b).to_not be_nil
|
28
|
-
|
29
|
-
expect(b.content_model).to eq :empty
|
30
|
-
|
31
|
-
target = b.attributes['target']
|
32
|
-
expect(target).to_not be_nil
|
33
|
-
expect(target).to match /\.png$/
|
34
|
-
expect(File.exists?(target)).to be true
|
35
|
-
|
36
|
-
expect(b.attributes['width']).to_not be_nil
|
37
|
-
expect(b.attributes['height']).to_not be_nil
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
describe Asciidoctor::Diagram::BlockDiagBlock do
|
42
|
-
it "should generate PNG images when format is set to 'png'" do
|
43
|
-
doc = <<-eos
|
44
|
-
= Hello, BlockDiag!
|
45
|
-
Doc Writer <doc@example.com>
|
46
|
-
|
47
|
-
== First Section
|
48
|
-
|
49
|
-
[blockdiag, format="png"]
|
50
|
-
----
|
51
|
-
#{code}
|
52
|
-
----
|
53
|
-
eos
|
54
|
-
|
55
|
-
d = Asciidoctor.load StringIO.new(doc)
|
56
|
-
expect(d).to_not be_nil
|
57
|
-
|
58
|
-
b = d.find { |b| b.context == :image }
|
59
|
-
expect(b).to_not be_nil
|
60
|
-
|
61
|
-
expect(b.content_model).to eq :empty
|
62
|
-
|
63
|
-
target = b.attributes['target']
|
64
|
-
expect(target).to_not be_nil
|
65
|
-
expect(target).to match /\.png$/
|
66
|
-
expect(File.exists?(target)).to be true
|
67
|
-
|
68
|
-
expect(b.attributes['width']).to_not be_nil
|
69
|
-
expect(b.attributes['height']).to_not be_nil
|
70
|
-
end
|
71
|
-
|
72
|
-
it "should generate SVG images when format is set to 'svg'" do
|
73
|
-
doc = <<-eos
|
74
|
-
= Hello, BlockDiag!
|
75
|
-
Doc Writer <doc@example.com>
|
76
|
-
|
77
|
-
== First Section
|
78
|
-
|
79
|
-
[blockdiag, format="svg"]
|
80
|
-
----
|
81
|
-
#{code}
|
82
|
-
----
|
83
|
-
eos
|
84
|
-
|
85
|
-
d = Asciidoctor.load StringIO.new(doc)
|
86
|
-
expect(d).to_not be_nil
|
87
|
-
|
88
|
-
b = d.find { |b| b.context == :image }
|
89
|
-
expect(b).to_not be_nil
|
90
|
-
|
91
|
-
expect(b.content_model).to eq :empty
|
92
|
-
|
93
|
-
target = b.attributes['target']
|
94
|
-
expect(target).to_not be_nil
|
95
|
-
expect(target).to match /\.svg/
|
96
|
-
expect(File.exists?(target)).to be true
|
97
|
-
|
98
|
-
expect(b.attributes['width']).to_not be_nil
|
99
|
-
expect(b.attributes['height']).to_not be_nil
|
100
|
-
end
|
101
|
-
|
102
|
-
it "should raise an error when when format is set to an invalid value" do
|
103
|
-
doc = <<-eos
|
104
|
-
= Hello, BlockDiag!
|
105
|
-
Doc Writer <doc@example.com>
|
106
|
-
|
107
|
-
== First Section
|
108
|
-
|
109
|
-
[blockdiag, format="foobar"]
|
110
|
-
----
|
111
|
-
----
|
112
|
-
eos
|
113
|
-
|
114
|
-
expect { Asciidoctor.load StringIO.new(doc) }.to raise_error /support.*format/i
|
115
|
-
end
|
116
|
-
|
117
|
-
it "should not regenerate images when source has not changed" do
|
118
|
-
File.write('blockdiag.txt', code)
|
119
|
-
|
120
|
-
doc = <<-eos
|
121
|
-
= Hello, BlockDiag!
|
122
|
-
Doc Writer <doc@example.com>
|
123
|
-
|
124
|
-
== First Section
|
125
|
-
|
126
|
-
blockdiag::blockdiag.txt
|
127
|
-
|
128
|
-
[blockdiag, format="png"]
|
129
|
-
----
|
130
|
-
#{code}
|
131
|
-
----
|
132
|
-
eos
|
133
|
-
|
134
|
-
d = Asciidoctor.load StringIO.new(doc)
|
135
|
-
b = d.find { |b| b.context == :image }
|
136
|
-
target = b.attributes['target']
|
137
|
-
mtime1 = File.mtime(target)
|
138
|
-
|
139
|
-
sleep 1
|
140
|
-
|
141
|
-
d = Asciidoctor.load StringIO.new(doc)
|
142
|
-
|
143
|
-
mtime2 = File.mtime(target)
|
144
|
-
|
145
|
-
expect(mtime2).to eq mtime1
|
146
|
-
end
|
147
|
-
|
148
|
-
it "should handle two block macros with the same source" do
|
149
|
-
File.write('blockdiag.txt', code)
|
150
|
-
|
151
|
-
doc = <<-eos
|
152
|
-
= Hello, BlockDiag!
|
153
|
-
Doc Writer <doc@example.com>
|
154
|
-
|
155
|
-
== First Section
|
156
|
-
|
157
|
-
blockdiag::blockdiag.txt[]
|
158
|
-
blockdiag::blockdiag.txt[]
|
159
|
-
eos
|
160
|
-
|
161
|
-
Asciidoctor.load StringIO.new(doc)
|
162
|
-
expect(File.exists?('blockdiag.png')).to be true
|
163
|
-
end
|
164
|
-
|
165
|
-
it "should respect target attribute in block macros" do
|
166
|
-
File.write('blockdiag.txt', code)
|
167
|
-
|
168
|
-
doc = <<-eos
|
169
|
-
= Hello, BlockDiag!
|
170
|
-
Doc Writer <doc@example.com>
|
171
|
-
|
172
|
-
== First Section
|
173
|
-
|
174
|
-
blockdiag::blockdiag.txt["foobar"]
|
175
|
-
blockdiag::blockdiag.txt["foobaz"]
|
176
|
-
eos
|
177
|
-
|
178
|
-
Asciidoctor.load StringIO.new(doc)
|
179
|
-
expect(File.exists?('foobar.png')).to be true
|
180
|
-
expect(File.exists?('foobaz.png')).to be true
|
181
|
-
expect(File.exists?('blockdiag.png')).to be false
|
182
|
-
end
|
183
|
-
end
|
data/spec/shaape_spec.rb
DELETED
@@ -1,227 +0,0 @@
|
|
1
|
-
require_relative 'test_helper'
|
2
|
-
|
3
|
-
describe Asciidoctor::Diagram::ShaapeBlockMacro do
|
4
|
-
it "should generate PNG images when format is set to 'png'" do
|
5
|
-
code = <<-eos
|
6
|
-
+--------+ +-------------+
|
7
|
-
| | \\ /
|
8
|
-
| Hello |---> \\ Goodbye /
|
9
|
-
| ;) | / \\
|
10
|
-
| | / \\
|
11
|
-
+--------+ +-------------+
|
12
|
-
eos
|
13
|
-
|
14
|
-
File.write('shaape.txt', code)
|
15
|
-
|
16
|
-
doc = <<-eos
|
17
|
-
= Hello, Shaape!
|
18
|
-
Doc Writer <doc@example.com>
|
19
|
-
|
20
|
-
== First Section
|
21
|
-
|
22
|
-
shaape::shaape.txt[format="png"]
|
23
|
-
eos
|
24
|
-
|
25
|
-
d = Asciidoctor.load StringIO.new(doc)
|
26
|
-
expect(d).to_not be_nil
|
27
|
-
|
28
|
-
b = d.find { |b| b.context == :image }
|
29
|
-
expect(b).to_not be_nil
|
30
|
-
|
31
|
-
expect(b.content_model).to eq :empty
|
32
|
-
|
33
|
-
target = b.attributes['target']
|
34
|
-
expect(target).to_not be_nil
|
35
|
-
expect(target).to match /\.png$/
|
36
|
-
expect(File.exists?(target)).to be true
|
37
|
-
|
38
|
-
expect(b.attributes['width']).to_not be_nil
|
39
|
-
expect(b.attributes['height']).to_not be_nil
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
describe Asciidoctor::Diagram::ShaapeBlock do
|
44
|
-
it "should generate PNG images when format is set to 'png'" do
|
45
|
-
doc = <<-eos
|
46
|
-
= Hello, Shaape!
|
47
|
-
Doc Writer <doc@example.com>
|
48
|
-
|
49
|
-
== First Section
|
50
|
-
|
51
|
-
[shaape, format="png"]
|
52
|
-
----
|
53
|
-
+--------+ +-------------+
|
54
|
-
| | \\ /
|
55
|
-
| Hello |---> \\ Goodbye /
|
56
|
-
| ;) | / \\
|
57
|
-
| | / \\
|
58
|
-
+--------+ +-------------+
|
59
|
-
----
|
60
|
-
eos
|
61
|
-
|
62
|
-
d = Asciidoctor.load StringIO.new(doc)
|
63
|
-
expect(d).to_not be_nil
|
64
|
-
|
65
|
-
b = d.find { |b| b.context == :image }
|
66
|
-
expect(b).to_not be_nil
|
67
|
-
|
68
|
-
expect(b.content_model).to eq :empty
|
69
|
-
|
70
|
-
target = b.attributes['target']
|
71
|
-
expect(target).to_not be_nil
|
72
|
-
expect(target).to match /\.png$/
|
73
|
-
expect(File.exists?(target)).to be true
|
74
|
-
|
75
|
-
expect(b.attributes['width']).to_not be_nil
|
76
|
-
expect(b.attributes['height']).to_not be_nil
|
77
|
-
end
|
78
|
-
|
79
|
-
it "should generate SVG images when format is set to 'svg'" do
|
80
|
-
doc = <<-eos
|
81
|
-
= Hello, Shaape!
|
82
|
-
Doc Writer <doc@example.com>
|
83
|
-
|
84
|
-
== First Section
|
85
|
-
|
86
|
-
[shaape, format="svg"]
|
87
|
-
----
|
88
|
-
+--------+ +-------------+
|
89
|
-
| | \\ /
|
90
|
-
| Hello |---> \\ Goodbye /
|
91
|
-
| ;) | / \\
|
92
|
-
| | / \\
|
93
|
-
+--------+ +-------------+
|
94
|
-
----
|
95
|
-
eos
|
96
|
-
|
97
|
-
d = Asciidoctor.load StringIO.new(doc)
|
98
|
-
expect(d).to_not be_nil
|
99
|
-
|
100
|
-
b = d.find { |b| b.context == :image }
|
101
|
-
expect(b).to_not be_nil
|
102
|
-
|
103
|
-
expect(b.content_model).to eq :empty
|
104
|
-
|
105
|
-
target = b.attributes['target']
|
106
|
-
expect(target).to_not be_nil
|
107
|
-
expect(target).to match /\.svg/
|
108
|
-
expect(File.exists?(target)).to be true
|
109
|
-
|
110
|
-
expect(b.attributes['width']).to_not be_nil
|
111
|
-
expect(b.attributes['height']).to_not be_nil
|
112
|
-
end
|
113
|
-
|
114
|
-
it "should raise an error when when format is set to an invalid value" do
|
115
|
-
doc = <<-eos
|
116
|
-
= Hello, Shaape!
|
117
|
-
Doc Writer <doc@example.com>
|
118
|
-
|
119
|
-
== First Section
|
120
|
-
|
121
|
-
[shaape, format="foobar"]
|
122
|
-
----
|
123
|
-
----
|
124
|
-
eos
|
125
|
-
|
126
|
-
expect { Asciidoctor.load StringIO.new(doc) }.to raise_error /support.*format/i
|
127
|
-
end
|
128
|
-
|
129
|
-
it "should not regenerate images when source has not changed" do
|
130
|
-
code = <<-eos
|
131
|
-
+--------+ +-------------+
|
132
|
-
| | \\ /
|
133
|
-
| Hello |---> \\ Goodbye /
|
134
|
-
| ;) | / \\
|
135
|
-
| | / \\
|
136
|
-
+--------+ +-------------+
|
137
|
-
eos
|
138
|
-
|
139
|
-
File.write('shaape.txt', code)
|
140
|
-
|
141
|
-
doc = <<-eos
|
142
|
-
= Hello, Shaape!
|
143
|
-
Doc Writer <doc@example.com>
|
144
|
-
|
145
|
-
== First Section
|
146
|
-
|
147
|
-
shaape::shaape.txt
|
148
|
-
|
149
|
-
[shaape, format="png"]
|
150
|
-
----
|
151
|
-
+--------+
|
152
|
-
| |
|
153
|
-
| Hello |
|
154
|
-
| ;) |
|
155
|
-
| |
|
156
|
-
+--------+
|
157
|
-
----
|
158
|
-
eos
|
159
|
-
|
160
|
-
d = Asciidoctor.load StringIO.new(doc)
|
161
|
-
b = d.find { |b| b.context == :image }
|
162
|
-
target = b.attributes['target']
|
163
|
-
mtime1 = File.mtime(target)
|
164
|
-
|
165
|
-
sleep 1
|
166
|
-
|
167
|
-
d = Asciidoctor.load StringIO.new(doc)
|
168
|
-
|
169
|
-
mtime2 = File.mtime(target)
|
170
|
-
|
171
|
-
expect(mtime2).to eq mtime1
|
172
|
-
end
|
173
|
-
|
174
|
-
it "should handle two block macros with the same source" do
|
175
|
-
code = <<-eos
|
176
|
-
+--------+ +-------------+
|
177
|
-
| | \\ /
|
178
|
-
| Hello |---> \\ Goodbye /
|
179
|
-
| ;) | / \\
|
180
|
-
| | / \\
|
181
|
-
+--------+ +-------------+
|
182
|
-
eos
|
183
|
-
|
184
|
-
File.write('shaape.txt', code)
|
185
|
-
|
186
|
-
doc = <<-eos
|
187
|
-
= Hello, Shaape!
|
188
|
-
Doc Writer <doc@example.com>
|
189
|
-
|
190
|
-
== First Section
|
191
|
-
|
192
|
-
shaape::shaape.txt[]
|
193
|
-
shaape::shaape.txt[]
|
194
|
-
eos
|
195
|
-
|
196
|
-
Asciidoctor.load StringIO.new(doc)
|
197
|
-
expect(File.exists?('shaape.png')).to be true
|
198
|
-
end
|
199
|
-
|
200
|
-
it "should respect target attribute in block macros" do
|
201
|
-
code = <<-eos
|
202
|
-
+--------+ +-------------+
|
203
|
-
| | \\ /
|
204
|
-
| Hello |---> \\ Goodbye /
|
205
|
-
| ;) | / \\
|
206
|
-
| | / \\
|
207
|
-
+--------+ +-------------+
|
208
|
-
eos
|
209
|
-
|
210
|
-
File.write('shaape.txt', code)
|
211
|
-
|
212
|
-
doc = <<-eos
|
213
|
-
= Hello, Shaape!
|
214
|
-
Doc Writer <doc@example.com>
|
215
|
-
|
216
|
-
== First Section
|
217
|
-
|
218
|
-
shaape::shaape.txt["foobar"]
|
219
|
-
shaape::shaape.txt["foobaz"]
|
220
|
-
eos
|
221
|
-
|
222
|
-
Asciidoctor.load StringIO.new(doc)
|
223
|
-
expect(File.exists?('foobar.png')).to be true
|
224
|
-
expect(File.exists?('foobaz.png')).to be true
|
225
|
-
expect(File.exists?('shaape.png')).to be false
|
226
|
-
end
|
227
|
-
end
|