asciidoctor-diagram 1.3.0.preview.1 → 1.3.0.preview.2
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.
- data/CHANGELOG.adoc +1 -0
- data/Rakefile +2 -6
- data/lib/asciidoctor-diagram-java-1.3.1.jar +0 -0
- data/lib/asciidoctor-diagram/ditaa/extension.rb +10 -14
- data/lib/asciidoctor-diagram/extensions.rb +17 -3
- data/lib/asciidoctor-diagram/plantuml/extension.rb +18 -34
- data/lib/asciidoctor-diagram/util/java.rb +77 -1
- data/lib/asciidoctor-diagram/util/java_jruby.rb +12 -19
- data/lib/asciidoctor-diagram/util/java_socket.rb +93 -0
- data/lib/asciidoctor-diagram/version.rb +1 -1
- data/spec/plantuml_spec.rb +25 -0
- metadata +23 -26
- checksums.yaml +0 -7
- data/lib/asciidoctor-diagram/util/java_rjb.rb +0 -91
data/CHANGELOG.adoc
CHANGED
@@ -9,6 +9,7 @@ Enhancements::
|
|
9
9
|
* Add support for Seqdiag diagrams (requires Seqdiag to be installed separately)
|
10
10
|
* Add support for Nwdiag diagrams (requires Nwdiag to be installed separately)
|
11
11
|
* Updated PlantUML to revision 8004 (23/08/2014)
|
12
|
+
* Remove dependency on RJB to simplify installation
|
12
13
|
|
13
14
|
== 1.2.0
|
14
15
|
|
data/Rakefile
CHANGED
@@ -5,9 +5,5 @@ RSpec::Core::RakeTask.new(:test)
|
|
5
5
|
|
6
6
|
task :default => :test
|
7
7
|
|
8
|
-
|
9
|
-
|
10
|
-
Gem::Specification.reset
|
11
|
-
spec = Gem::Specification.load('asciidoctor-diagram.gemspec')
|
12
|
-
Gem::PackageTask.new(spec) { |task| }
|
13
|
-
end
|
8
|
+
spec = Gem::Specification.load('asciidoctor-diagram.gemspec')
|
9
|
+
Gem::PackageTask.new(spec) { |task| }
|
Binary file
|
@@ -5,26 +5,22 @@ module Asciidoctor
|
|
5
5
|
module Diagram
|
6
6
|
# @private
|
7
7
|
module Ditaa
|
8
|
-
|
9
|
-
|
8
|
+
JARS = ['ditaamini0_9.jar'].map do |jar|
|
9
|
+
File.expand_path File.join('../..', jar), File.dirname(__FILE__)
|
10
|
+
end
|
11
|
+
Java.classpath.concat JARS
|
10
12
|
|
11
13
|
def ditaa(code)
|
12
14
|
Java.load
|
13
15
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
bos = Java.new_object(Java.java.io.ByteArrayOutputStream)
|
19
|
-
result_code = Java.org.stathissideris.ascii2image.core.CommandLineConverter.convert(Java.array_to_java_array(args, :string), bis, bos)
|
20
|
-
bis.close
|
21
|
-
bos.close
|
22
|
-
|
23
|
-
result = Java.string_from_java_bytes(bos.toByteArray)
|
16
|
+
response = Java.send_request(
|
17
|
+
:url => '/ditaa',
|
18
|
+
:body => code
|
19
|
+
)
|
24
20
|
|
25
|
-
raise "Ditaa image generation failed: #{
|
21
|
+
raise "Ditaa image generation failed: #{response[:reason]}" unless response[:code] == 200
|
26
22
|
|
27
|
-
|
23
|
+
response[:body]
|
28
24
|
end
|
29
25
|
|
30
26
|
def self.included(mod)
|
@@ -123,8 +123,7 @@ module Asciidoctor
|
|
123
123
|
private
|
124
124
|
def create_image_block(parent, source, attributes, format, generator_info)
|
125
125
|
image_name = "#{source.image_name}.#{format}"
|
126
|
-
|
127
|
-
image_dir = parent.normalize_system_path parent.document.attr 'imagesdir', outdir
|
126
|
+
image_dir = image_output_dir(parent)
|
128
127
|
image_file = parent.normalize_system_path image_name, image_dir
|
129
128
|
metadata_file = parent.normalize_system_path "#{image_name}.cache", image_dir
|
130
129
|
|
@@ -158,7 +157,7 @@ module Asciidoctor
|
|
158
157
|
image_attributes['alt'] ||= if title_text = attributes['title']
|
159
158
|
title_text
|
160
159
|
elsif target = attributes['target']
|
161
|
-
(File.basename
|
160
|
+
(File.basename(target, File.extname(target)) || '').tr '_-', ' '
|
162
161
|
else
|
163
162
|
'Diagram'
|
164
163
|
end
|
@@ -166,6 +165,21 @@ module Asciidoctor
|
|
166
165
|
Asciidoctor::Block.new parent, :image, :content_model => :empty, :attributes => image_attributes
|
167
166
|
end
|
168
167
|
|
168
|
+
def image_output_dir(parent)
|
169
|
+
document = parent.document
|
170
|
+
|
171
|
+
images_dir = document.attr('imagesoutdir')
|
172
|
+
|
173
|
+
if images_dir
|
174
|
+
base_dir = nil
|
175
|
+
else
|
176
|
+
base_dir = document.attr('outdir') || (document.respond_to?(:options) && document.options[:to_dir])
|
177
|
+
images_dir = document.attr('imagesdir')
|
178
|
+
end
|
179
|
+
|
180
|
+
parent.normalize_system_path(images_dir, base_dir)
|
181
|
+
end
|
182
|
+
|
169
183
|
def create_literal_block(parent, source, attributes, generator_info)
|
170
184
|
literal_attributes = attributes.dup
|
171
185
|
literal_attributes.delete('target')
|
@@ -6,61 +6,45 @@ module Asciidoctor
|
|
6
6
|
module PlantUml
|
7
7
|
private
|
8
8
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
unless @graphvizdot
|
14
|
-
@graphvizdot = parent.document.attributes['dot']
|
15
|
-
@graphvizdot = ::Asciidoctor::Diagram.which('dot') unless @graphvizdot && File.executable?(@graphvizdot)
|
16
|
-
raise "Could not find the Graphviz 'dot' executable in PATH; add it to the PATH or specify its location using the 'dot' document attribute" unless @graphvizdot
|
17
|
-
end
|
9
|
+
JARS = ['plantuml.jar'].map do |jar|
|
10
|
+
File.expand_path File.join('../..', jar), File.dirname(__FILE__)
|
11
|
+
end
|
12
|
+
Java.classpath.concat JARS
|
18
13
|
|
14
|
+
def plantuml(parent, code, tag, mime_type)
|
19
15
|
Java.load
|
20
16
|
|
21
17
|
code = "@start#{tag}\n#{code}\n@end#{tag}" unless code.index "@start#{tag}"
|
22
18
|
|
23
|
-
|
19
|
+
headers = {
|
20
|
+
'Accept' => mime_type
|
21
|
+
}
|
24
22
|
|
25
23
|
config_file = parent.document.attributes['plantumlconfig']
|
26
24
|
if config_file
|
27
|
-
|
25
|
+
headers['X-PlantUML-Config'] = File.expand_path(config_file, parent.document.attributes['docdir'])
|
28
26
|
end
|
29
27
|
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
code,
|
35
|
-
option.getConfig()
|
28
|
+
response = Java.send_request(
|
29
|
+
:url => '/plantuml',
|
30
|
+
:body => code,
|
31
|
+
:headers => headers
|
36
32
|
)
|
37
33
|
|
38
|
-
|
39
|
-
ps = Java.new_object( Java.java.io.PrintStream, 'Ljava.io.OutputStream;', bos )
|
40
|
-
source_reader.generateImage(ps, 0, option.getFileFormatOption())
|
41
|
-
ps.close
|
42
|
-
Java.string_from_java_bytes(bos.toByteArray)
|
43
|
-
end
|
44
|
-
|
45
|
-
def config_args(parent)
|
46
|
-
config_args = []
|
47
|
-
config = parent.document.attributes['plantumlconfig']
|
48
|
-
if config
|
49
|
-
config_args += ['-config', File.expand_path(config, parent.document.attributes['docdir'])]
|
50
|
-
end
|
34
|
+
raise "PlantUML image generation failed: #{response[:reason]}" unless response[:code] == 200
|
51
35
|
|
52
|
-
|
36
|
+
response[:body]
|
53
37
|
end
|
54
38
|
|
55
39
|
def self.included(mod)
|
56
40
|
mod.register_format(:png, :image) do |c, p|
|
57
|
-
plantuml(p, c.to_s, 'uml',
|
41
|
+
plantuml(p, c.to_s, 'uml', 'image/png')
|
58
42
|
end
|
59
43
|
mod.register_format(:svg, :image) do |c, p|
|
60
|
-
plantuml(p, c.to_s, 'uml', '
|
44
|
+
plantuml(p, c.to_s, 'uml', 'image/svg+xml')
|
61
45
|
end
|
62
46
|
mod.register_format(:txt, :literal) do |c, p|
|
63
|
-
plantuml(p, c.to_s, 'uml', '-
|
47
|
+
plantuml(p, c.to_s, 'uml', 'text/plain;charset=utf-8')
|
64
48
|
end
|
65
49
|
end
|
66
50
|
end
|
@@ -1,5 +1,81 @@
|
|
1
|
+
module Asciidoctor
|
2
|
+
module Diagram
|
3
|
+
# @private
|
4
|
+
module Java
|
5
|
+
def self.classpath
|
6
|
+
@classpath ||= [
|
7
|
+
File.expand_path(File.join('../..', 'asciidoctor-diagram-java-1.3.1.jar'), File.dirname(__FILE__))
|
8
|
+
]
|
9
|
+
end
|
10
|
+
|
11
|
+
CRLF = "\r\n".encode(Encoding::US_ASCII)
|
12
|
+
|
13
|
+
def self.format_request(req, io)
|
14
|
+
io.set_encoding Encoding::US_ASCII
|
15
|
+
io.write "POST #{req[:url]} HTTP/1.1"
|
16
|
+
io.write CRLF
|
17
|
+
|
18
|
+
headers = req[:headers]
|
19
|
+
if headers
|
20
|
+
headers.each_pair do |key, value|
|
21
|
+
io.write "#{key}: #{value}"
|
22
|
+
io.write CRLF
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
if req[:body]
|
27
|
+
unless headers && headers['Content-Length']
|
28
|
+
io.write 'Content-Length: '
|
29
|
+
io.write req[:body].bytesize.to_s
|
30
|
+
io.write CRLF
|
31
|
+
end
|
32
|
+
|
33
|
+
unless headers && headers['Content-Type']
|
34
|
+
io.write 'Content-Type: text/plain; charset='
|
35
|
+
io.write req[:body].encoding.name
|
36
|
+
io.write CRLF
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
io.write CRLF
|
41
|
+
|
42
|
+
io.set_encoding Encoding::BINARY
|
43
|
+
io.write req[:body]
|
44
|
+
end
|
45
|
+
|
46
|
+
STATUS_LINE = Regexp.new("HTTP/1.1 (\\d+) (.*)\r\n".encode(Encoding::US_ASCII))
|
47
|
+
|
48
|
+
def self.parse_response(io)
|
49
|
+
resp = {}
|
50
|
+
|
51
|
+
io.set_encoding Encoding::US_ASCII
|
52
|
+
status_line = io.readline(CRLF)
|
53
|
+
status_line_parts = STATUS_LINE.match status_line
|
54
|
+
resp[:code] = status_line_parts[1].to_i
|
55
|
+
resp[:reason] = status_line_parts[2]
|
56
|
+
|
57
|
+
headers = {}
|
58
|
+
until (header = io.readline(CRLF).strip).empty?
|
59
|
+
key, value = header.split ':', 2
|
60
|
+
headers[key] = value.strip
|
61
|
+
end
|
62
|
+
|
63
|
+
resp[:headers] = headers
|
64
|
+
|
65
|
+
content_length = headers['Content-Length']
|
66
|
+
if content_length
|
67
|
+
io.set_encoding Encoding::BINARY
|
68
|
+
resp[:body] = io.read(content_length.to_i)
|
69
|
+
end
|
70
|
+
|
71
|
+
resp
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
1
77
|
if RUBY_PLATFORM == "java"
|
2
78
|
require_relative 'java_jruby'
|
3
79
|
else
|
4
|
-
require_relative '
|
80
|
+
require_relative 'java_socket'
|
5
81
|
end
|
@@ -1,40 +1,33 @@
|
|
1
1
|
require 'java'
|
2
|
+
require 'stringio'
|
2
3
|
|
3
4
|
module Asciidoctor
|
4
5
|
module Diagram
|
5
6
|
# @private
|
6
7
|
module Java
|
7
|
-
def self.classpath
|
8
|
-
@classpath ||= []
|
9
|
-
end
|
10
|
-
|
11
8
|
def self.load
|
12
9
|
if @loaded
|
13
10
|
return
|
14
11
|
end
|
15
12
|
|
16
|
-
classpath.each { |j| require j }
|
13
|
+
classpath.flatten.each { |j| require j }
|
17
14
|
@loaded = true
|
18
15
|
end
|
19
16
|
|
20
|
-
def self.
|
21
|
-
|
22
|
-
end
|
17
|
+
def self.send_request(req)
|
18
|
+
cp = ::Java.org.asciidoctor.diagram.CommandProcessor.new()
|
23
19
|
|
24
|
-
|
25
|
-
|
26
|
-
|
20
|
+
req_io = StringIO.new
|
21
|
+
format_request(req, req_io)
|
22
|
+
req_io.close
|
27
23
|
|
28
|
-
|
29
|
-
raise "No arguments expected" unless args.empty?
|
30
|
-
raise "No block expected" if block
|
24
|
+
response = cp.processRequest(req_io.string.to_java_bytes)
|
31
25
|
|
32
|
-
|
33
|
-
|
34
|
-
|
26
|
+
resp_io = StringIO.new(String.from_java_bytes(response))
|
27
|
+
resp = parse_response(resp_io)
|
28
|
+
resp_io.close
|
35
29
|
|
36
|
-
|
37
|
-
java_class.new(*args)
|
30
|
+
resp
|
38
31
|
end
|
39
32
|
end
|
40
33
|
end
|
@@ -0,0 +1,93 @@
|
|
1
|
+
require 'socket'
|
2
|
+
|
3
|
+
require_relative 'which'
|
4
|
+
|
5
|
+
module Asciidoctor
|
6
|
+
module Diagram
|
7
|
+
# @private
|
8
|
+
module Java
|
9
|
+
class CommandServer
|
10
|
+
attr_reader :port
|
11
|
+
|
12
|
+
def initialize(java, classpath)
|
13
|
+
args = []
|
14
|
+
args << '-Djava.awt.headless=true'
|
15
|
+
args << '-cp'
|
16
|
+
args << classpath.flatten.join(File::PATH_SEPARATOR)
|
17
|
+
args << 'org.asciidoctor.diagram.CommandServer'
|
18
|
+
|
19
|
+
@server = IO.popen([java, *args])
|
20
|
+
@port = @server.readline.strip.to_i
|
21
|
+
@client = TCPSocket.new 'localhost', port
|
22
|
+
end
|
23
|
+
|
24
|
+
def io
|
25
|
+
@client
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def self.load
|
30
|
+
if @loaded
|
31
|
+
return
|
32
|
+
end
|
33
|
+
|
34
|
+
command_server
|
35
|
+
@loaded = true
|
36
|
+
end
|
37
|
+
|
38
|
+
def self.command_server
|
39
|
+
@java_exe ||= find_java
|
40
|
+
raise "Could not find Java executable" unless @java_exe
|
41
|
+
@command_server ||= CommandServer.new(@java_exe, classpath)
|
42
|
+
end
|
43
|
+
|
44
|
+
def self.send_request(req)
|
45
|
+
svr = command_server
|
46
|
+
headers = req[:headers] ||= {}
|
47
|
+
headers['Host'] = "localhost:#{svr.port}"
|
48
|
+
format_request(req, svr.io)
|
49
|
+
parse_response(svr.io)
|
50
|
+
end
|
51
|
+
|
52
|
+
private
|
53
|
+
def self.find_java
|
54
|
+
if /cygwin|mswin|mingw|bccwin|wince|emx/ =~ RUBY_PLATFORM
|
55
|
+
# Windows
|
56
|
+
path_to(ENV['JAVA_HOME'], 'bin/java.exe') || registry_lookup || ::Asciidoctor::Diagram.which('java')
|
57
|
+
elsif /darwin/ =~ RUBY_PLATFORM
|
58
|
+
# Mac
|
59
|
+
path_to(ENV['JAVA_HOME'], 'bin/java') || path_to(`/usr/libexec/java_home`.strip, 'bin/java') || ::Asciidoctor::Diagram.which('java')
|
60
|
+
else
|
61
|
+
# Other unix-like system
|
62
|
+
path_to(ENV['JAVA_HOME'], 'bin/java') || ::Asciidoctor::Diagram.which('java')
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
def self.path_to(java_home, java_binary)
|
67
|
+
exe_path = File.expand_path(java_binary, java_home)
|
68
|
+
if File.executable?(exe_path)
|
69
|
+
exe_path
|
70
|
+
else
|
71
|
+
nil
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
def self.registry_lookup
|
76
|
+
key_re = /^HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\.*\\([0-9\.]+)/
|
77
|
+
value_re = /\s*JavaHome\s*REG_SZ\s*(.*)/
|
78
|
+
result = `reg query "HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft" /s /v JavaHome`.lines.map { |l| l.strip }
|
79
|
+
vms = result.each_slice(3).map do |_, key, value|
|
80
|
+
key_match = key_re.match(key)
|
81
|
+
value_match = value_re.match(value)
|
82
|
+
if key_match && value_match
|
83
|
+
[key_match[1].split('.').map { |v| v.to_i }, value_match[1]]
|
84
|
+
else
|
85
|
+
nil
|
86
|
+
end
|
87
|
+
end.reject { |v| v.nil? }.sort_by { |v| v[0] }
|
88
|
+
java_exes = vms.map { |version, path| File.expand_path('bin/java.exe', path) }.select { |exe| File.executable?(exe) }
|
89
|
+
java_exes && java_exes[0]
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
data/spec/plantuml_spec.rb
CHANGED
@@ -297,6 +297,31 @@ Foo1 -> Foo2 : To boundary
|
|
297
297
|
expect(File.exists?(File.expand_path(target, 'foo'))).to be true
|
298
298
|
end
|
299
299
|
|
300
|
+
it "should write files to imagesoutdir if set" do
|
301
|
+
doc = <<-eos
|
302
|
+
= Hello, PlantUML!
|
303
|
+
Doc Writer <doc@example.com>
|
304
|
+
|
305
|
+
== First Section
|
306
|
+
|
307
|
+
[plantuml, format="svg"]
|
308
|
+
----
|
309
|
+
actor Foo1
|
310
|
+
boundary Foo2
|
311
|
+
Foo1 -> Foo2 : To boundary
|
312
|
+
----
|
313
|
+
eos
|
314
|
+
|
315
|
+
d = Asciidoctor.load StringIO.new(doc), {:attributes => {'imagesoutdir' => 'bar', 'outdir' => 'foo'}}
|
316
|
+
b = d.find { |b| b.context == :image }
|
317
|
+
|
318
|
+
target = b.attributes['target']
|
319
|
+
expect(target).to_not be_nil
|
320
|
+
expect(File.exists?(target)).to be false
|
321
|
+
expect(File.exists?(File.expand_path(target, 'bar'))).to be true
|
322
|
+
expect(File.exists?(File.expand_path(target, 'foo'))).to be false
|
323
|
+
end
|
324
|
+
|
300
325
|
it "should omit width/height attributes when generating docbook" do
|
301
326
|
doc = <<-eos
|
302
327
|
= Hello, PlantUML!
|
metadata
CHANGED
@@ -1,18 +1,20 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: asciidoctor-diagram
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.3.0.preview.
|
4
|
+
version: 1.3.0.preview.2
|
5
|
+
prerelease: 6
|
5
6
|
platform: ruby
|
6
7
|
authors:
|
7
8
|
- Pepijn Van Eeckhoudt
|
8
9
|
autorequire:
|
9
10
|
bindir: bin
|
10
11
|
cert_chain: []
|
11
|
-
date: 2014-
|
12
|
+
date: 2014-11-30 00:00:00.000000000 Z
|
12
13
|
dependencies:
|
13
14
|
- !ruby/object:Gem::Dependency
|
14
15
|
name: bundler
|
15
16
|
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
16
18
|
requirements:
|
17
19
|
- - ~>
|
18
20
|
- !ruby/object:Gem::Version
|
@@ -20,6 +22,7 @@ dependencies:
|
|
20
22
|
type: :development
|
21
23
|
prerelease: false
|
22
24
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
23
26
|
requirements:
|
24
27
|
- - ~>
|
25
28
|
- !ruby/object:Gem::Version
|
@@ -27,34 +30,39 @@ dependencies:
|
|
27
30
|
- !ruby/object:Gem::Dependency
|
28
31
|
name: rake
|
29
32
|
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
30
34
|
requirements:
|
31
|
-
- - '>='
|
35
|
+
- - ! '>='
|
32
36
|
- !ruby/object:Gem::Version
|
33
37
|
version: '0'
|
34
38
|
type: :development
|
35
39
|
prerelease: false
|
36
40
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
37
42
|
requirements:
|
38
|
-
- - '>='
|
43
|
+
- - ! '>='
|
39
44
|
- !ruby/object:Gem::Version
|
40
45
|
version: '0'
|
41
46
|
- !ruby/object:Gem::Dependency
|
42
47
|
name: rspec
|
43
48
|
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
44
50
|
requirements:
|
45
|
-
- - '>='
|
51
|
+
- - ! '>='
|
46
52
|
- !ruby/object:Gem::Version
|
47
53
|
version: '0'
|
48
54
|
type: :development
|
49
55
|
prerelease: false
|
50
56
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
51
58
|
requirements:
|
52
|
-
- - '>='
|
59
|
+
- - ! '>='
|
53
60
|
- !ruby/object:Gem::Version
|
54
61
|
version: '0'
|
55
62
|
- !ruby/object:Gem::Dependency
|
56
63
|
name: asciidoctor
|
57
64
|
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
58
66
|
requirements:
|
59
67
|
- - ~>
|
60
68
|
- !ruby/object:Gem::Version
|
@@ -62,24 +70,11 @@ dependencies:
|
|
62
70
|
type: :runtime
|
63
71
|
prerelease: false
|
64
72
|
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
65
74
|
requirements:
|
66
75
|
- - ~>
|
67
76
|
- !ruby/object:Gem::Version
|
68
77
|
version: 1.5.0
|
69
|
-
- !ruby/object:Gem::Dependency
|
70
|
-
name: rjb
|
71
|
-
requirement: !ruby/object:Gem::Requirement
|
72
|
-
requirements:
|
73
|
-
- - ~>
|
74
|
-
- !ruby/object:Gem::Version
|
75
|
-
version: 1.4.8
|
76
|
-
type: :runtime
|
77
|
-
prerelease: false
|
78
|
-
version_requirements: !ruby/object:Gem::Requirement
|
79
|
-
requirements:
|
80
|
-
- - ~>
|
81
|
-
- !ruby/object:Gem::Version
|
82
|
-
version: 1.4.8
|
83
78
|
description: Asciidoctor diagramming extension
|
84
79
|
email:
|
85
80
|
- pepijn@vaneeckhoudt.net
|
@@ -95,6 +90,7 @@ files:
|
|
95
90
|
- examples/README.adoc
|
96
91
|
- examples/design.adoc
|
97
92
|
- examples/features.adoc
|
93
|
+
- lib/asciidoctor-diagram-java-1.3.1.jar
|
98
94
|
- lib/asciidoctor-diagram.rb
|
99
95
|
- lib/asciidoctor-diagram/blockdiag.rb
|
100
96
|
- lib/asciidoctor-diagram/blockdiag/extension.rb
|
@@ -111,7 +107,7 @@ files:
|
|
111
107
|
- lib/asciidoctor-diagram/util/cli_generator.rb
|
112
108
|
- lib/asciidoctor-diagram/util/java.rb
|
113
109
|
- lib/asciidoctor-diagram/util/java_jruby.rb
|
114
|
-
- lib/asciidoctor-diagram/util/
|
110
|
+
- lib/asciidoctor-diagram/util/java_socket.rb
|
115
111
|
- lib/asciidoctor-diagram/util/png.rb
|
116
112
|
- lib/asciidoctor-diagram/util/svg.rb
|
117
113
|
- lib/asciidoctor-diagram/util/which.rb
|
@@ -127,26 +123,27 @@ files:
|
|
127
123
|
homepage: https://github.com/asciidoctor/asciidoctor-diagram
|
128
124
|
licenses:
|
129
125
|
- MIT
|
130
|
-
metadata: {}
|
131
126
|
post_install_message:
|
132
127
|
rdoc_options: []
|
133
128
|
require_paths:
|
134
129
|
- lib
|
135
130
|
required_ruby_version: !ruby/object:Gem::Requirement
|
131
|
+
none: false
|
136
132
|
requirements:
|
137
|
-
- - '>='
|
133
|
+
- - ! '>='
|
138
134
|
- !ruby/object:Gem::Version
|
139
135
|
version: '0'
|
140
136
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
137
|
+
none: false
|
141
138
|
requirements:
|
142
|
-
- - '>'
|
139
|
+
- - ! '>'
|
143
140
|
- !ruby/object:Gem::Version
|
144
141
|
version: 1.3.1
|
145
142
|
requirements: []
|
146
143
|
rubyforge_project:
|
147
|
-
rubygems_version:
|
144
|
+
rubygems_version: 1.8.23.2
|
148
145
|
signing_key:
|
149
|
-
specification_version:
|
146
|
+
specification_version: 3
|
150
147
|
summary: An extension for asciidoctor that adds support for UML diagram generation
|
151
148
|
using PlantUML
|
152
149
|
test_files:
|
checksums.yaml
DELETED
@@ -1,7 +0,0 @@
|
|
1
|
-
---
|
2
|
-
SHA1:
|
3
|
-
metadata.gz: ec30717e348b864e01a962749e47514a55c1106c
|
4
|
-
data.tar.gz: 3d85e72167829121d471faa6f20586cc2eb1eab4
|
5
|
-
SHA512:
|
6
|
-
metadata.gz: daedbb3ba7ef2bc7517ba7c67052a6ee9e468adf5a5ca710bbc3ca80f3dbdf078748b679696d95f791121e651f920d25bdf039e88ace183fde759f32c18b75ba
|
7
|
-
data.tar.gz: ff54af102f2a7d21eefa591f4db10985826c97f2eff4044bb305a91f2c0cc888f5d965fddea4bba4f75ad96ed03baa2f5bcca8edf6e952d664c5cd8663183cd7
|
@@ -1,91 +0,0 @@
|
|
1
|
-
require 'rjb'
|
2
|
-
|
3
|
-
module Asciidoctor
|
4
|
-
module Diagram
|
5
|
-
# @private
|
6
|
-
module Java
|
7
|
-
INITAWT_JAR_PATH = File.expand_path File.join('..', 'initawt.jar'), File.dirname(__FILE__)
|
8
|
-
|
9
|
-
module Package
|
10
|
-
def method_missing(meth, *args, &block)
|
11
|
-
raise "No arguments expected" unless args.empty?
|
12
|
-
raise "No block expected" if block
|
13
|
-
|
14
|
-
name = meth.to_s
|
15
|
-
@proxies ||= {}
|
16
|
-
@proxies[name] ||= create_java_proxy(name)
|
17
|
-
end
|
18
|
-
|
19
|
-
private
|
20
|
-
|
21
|
-
def create_java_proxy(name)
|
22
|
-
qualified_name = @name ? "#{@name}.#{name}" : name
|
23
|
-
if name =~ /^[[:upper:]]/
|
24
|
-
Package.create_class(qualified_name)
|
25
|
-
else
|
26
|
-
Package.create_package(qualified_name)
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
def self.create_class(name)
|
31
|
-
::Rjb.import(name)
|
32
|
-
end
|
33
|
-
|
34
|
-
def self.create_package(name)
|
35
|
-
package = Module.new
|
36
|
-
package.extend Package
|
37
|
-
package.instance_variable_set :@name, name
|
38
|
-
package.instance_variable_set :@parent, name
|
39
|
-
package
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
def self.classpath
|
44
|
-
@classpath ||= []
|
45
|
-
end
|
46
|
-
|
47
|
-
def self.load
|
48
|
-
if @loaded
|
49
|
-
return
|
50
|
-
end
|
51
|
-
|
52
|
-
Rjb::load(classpath.join(File::PATH_SEPARATOR))
|
53
|
-
|
54
|
-
# On OS X using AWT from JNI is extremely deadlock prone. Enabling AWT headless mode resolves this issue. We're
|
55
|
-
# never actually going to display an AWT GUI, so this should be fairly safe.
|
56
|
-
Rjb::import('java.lang.System').setProperty 'java.awt.headless', 'true'
|
57
|
-
|
58
|
-
@loaded = true
|
59
|
-
end
|
60
|
-
|
61
|
-
def self.array_to_java_array(array, type)
|
62
|
-
# Rjb does not require an explicit conversion of a Ruby Array containing Ruby Strings to a Ruby Array containing
|
63
|
-
# Java Strings. It handles this implicitly when calling Java methods.
|
64
|
-
array
|
65
|
-
end
|
66
|
-
|
67
|
-
def self.string_from_java_bytes(bytes)
|
68
|
-
# Rjb implictly converts Java byte arrays to Ruby Strings so nothing needs to be done here
|
69
|
-
bytes
|
70
|
-
end
|
71
|
-
|
72
|
-
def self.method_missing(meth, *args, &block)
|
73
|
-
raise "No arguments expected" unless args.empty?
|
74
|
-
raise "No block expected" if block
|
75
|
-
|
76
|
-
load
|
77
|
-
|
78
|
-
@root_package ||= Package.send(:create_package, nil)
|
79
|
-
@root_package.send(meth, *args)
|
80
|
-
end
|
81
|
-
|
82
|
-
def self.new_object(java_class, signature = nil, *args)
|
83
|
-
if signature
|
84
|
-
java_class.new_with_sig(signature, *args)
|
85
|
-
else
|
86
|
-
java_class.new(*args)
|
87
|
-
end
|
88
|
-
end
|
89
|
-
end
|
90
|
-
end
|
91
|
-
end
|