asciidoctor-diagram 1.3.0.preview.1 → 1.3.0.preview.2
Sign up to get free protection for your applications and to get access to all the features.
- 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
|