asciidoctor-diagram 1.5.18 → 2.0.4
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 +75 -0
- data/README.adoc +98 -23
- data/examples/features.adoc +2 -2
- data/lib/asciidoctor-diagram.rb +8 -0
- data/lib/asciidoctor-diagram/a2s/converter.rb +59 -0
- data/lib/asciidoctor-diagram/a2s/extension.rb +6 -52
- data/lib/asciidoctor-diagram/blockdiag/converter.rb +37 -0
- data/lib/asciidoctor-diagram/blockdiag/extension.rb +9 -116
- data/lib/asciidoctor-diagram/bpmn.rb +7 -0
- data/lib/asciidoctor-diagram/bpmn/converter.rb +62 -0
- data/lib/asciidoctor-diagram/bpmn/extension.rb +14 -0
- data/lib/asciidoctor-diagram/bytefield.rb +7 -0
- data/lib/asciidoctor-diagram/bytefield/converter.rb +26 -0
- data/lib/asciidoctor-diagram/bytefield/extension.rb +14 -0
- data/lib/asciidoctor-diagram/diagram_converter.rb +23 -0
- data/lib/asciidoctor-diagram/diagram_processor.rb +357 -0
- data/lib/asciidoctor-diagram/diagram_source.rb +322 -0
- data/lib/asciidoctor-diagram/ditaa/converter.rb +90 -0
- data/lib/asciidoctor-diagram/ditaa/extension.rb +6 -71
- 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/erd/converter.rb +31 -0
- data/lib/asciidoctor-diagram/erd/extension.rb +6 -35
- data/lib/asciidoctor-diagram/gnuplot.rb +7 -0
- data/lib/asciidoctor-diagram/gnuplot/converter.rb +63 -0
- data/lib/asciidoctor-diagram/gnuplot/extension.rb +14 -0
- data/lib/asciidoctor-diagram/graphviz/converter.rb +32 -0
- data/lib/asciidoctor-diagram/graphviz/extension.rb +6 -35
- data/lib/asciidoctor-diagram/http/converter.rb +99 -0
- data/lib/asciidoctor-diagram/http/server.rb +132 -0
- data/lib/asciidoctor-diagram/lilypond.rb +7 -0
- data/lib/asciidoctor-diagram/lilypond/converter.rb +54 -0
- data/lib/asciidoctor-diagram/lilypond/extension.rb +14 -0
- data/lib/asciidoctor-diagram/meme/converter.rb +122 -0
- data/lib/asciidoctor-diagram/meme/extension.rb +5 -107
- data/lib/asciidoctor-diagram/mermaid/converter.rb +179 -0
- data/lib/asciidoctor-diagram/mermaid/extension.rb +6 -159
- data/lib/asciidoctor-diagram/msc/converter.rb +35 -0
- data/lib/asciidoctor-diagram/msc/extension.rb +6 -36
- data/lib/asciidoctor-diagram/nomnoml/converter.rb +25 -0
- data/lib/asciidoctor-diagram/nomnoml/extension.rb +6 -28
- data/lib/asciidoctor-diagram/pikchr.rb +7 -0
- data/lib/asciidoctor-diagram/pikchr/converter.rb +26 -0
- data/lib/asciidoctor-diagram/pikchr/extension.rb +14 -0
- data/lib/asciidoctor-diagram/plantuml/converter.rb +117 -0
- data/lib/asciidoctor-diagram/plantuml/extension.rb +10 -119
- data/lib/asciidoctor-diagram/shaape/converter.rb +25 -0
- data/lib/asciidoctor-diagram/shaape/extension.rb +6 -28
- data/lib/asciidoctor-diagram/smcat.rb +7 -0
- data/lib/asciidoctor-diagram/smcat/converter.rb +44 -0
- data/lib/asciidoctor-diagram/smcat/extension.rb +14 -0
- data/lib/asciidoctor-diagram/svgbob/converter.rb +49 -0
- data/lib/asciidoctor-diagram/svgbob/extension.rb +6 -28
- 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 +58 -0
- data/lib/asciidoctor-diagram/syntrax/extension.rb +6 -51
- data/lib/asciidoctor-diagram/tikz/converter.rb +56 -0
- data/lib/asciidoctor-diagram/tikz/extension.rb +6 -60
- data/lib/asciidoctor-diagram/umlet/converter.rb +24 -0
- data/lib/asciidoctor-diagram/umlet/extension.rb +6 -28
- data/lib/asciidoctor-diagram/util/cli.rb +14 -3
- data/lib/asciidoctor-diagram/util/cli_generator.rb +19 -1
- data/lib/asciidoctor-diagram/util/gif.rb +2 -2
- data/lib/asciidoctor-diagram/util/java.rb +1 -1
- data/lib/asciidoctor-diagram/util/java_socket.rb +7 -9
- data/lib/asciidoctor-diagram/util/pdf.rb +2 -2
- data/lib/asciidoctor-diagram/util/png.rb +2 -2
- data/lib/asciidoctor-diagram/util/svg.rb +46 -19
- data/lib/asciidoctor-diagram/util/which.rb +0 -29
- data/lib/asciidoctor-diagram/vega/converter.rb +47 -0
- data/lib/asciidoctor-diagram/vega/extension.rb +6 -44
- data/lib/asciidoctor-diagram/version.rb +1 -1
- data/lib/asciidoctor-diagram/wavedrom/converter.rb +50 -0
- data/lib/asciidoctor-diagram/wavedrom/extension.rb +6 -46
- data/lib/ditaa-1.3.15.jar +0 -0
- data/lib/ditaamini-0.12.jar +0 -0
- data/lib/plantuml-1.3.15.jar +0 -0
- data/lib/plantuml.jar +0 -0
- data/lib/server-1.3.15.jar +0 -0
- data/spec/a2s_spec.rb +2 -140
- data/spec/blockdiag_spec.rb +2 -200
- data/spec/bpmn_spec.rb +56 -0
- data/spec/bytefield_spec.rb +92 -0
- data/spec/ditaa_spec.rb +37 -143
- data/spec/dpic_spec.rb +19 -0
- data/spec/erd_spec.rb +2 -199
- data/spec/gnuplot_spec.rb +225 -0
- data/spec/graphviz_spec.rb +6 -145
- data/spec/lilypond_spec.rb +13 -0
- data/spec/mermaid_spec.rb +35 -200
- data/spec/msc_spec.rb +2 -199
- data/spec/nomnoml_spec.rb +4 -142
- data/spec/pikchr_spec.rb +51 -0
- data/spec/plantuml_spec.rb +24 -507
- data/spec/shaape_spec.rb +9 -221
- data/spec/shared_examples.rb +552 -0
- data/spec/smcat_spec.rb +26 -0
- data/spec/svgbob_spec.rb +2 -140
- data/spec/symbolator_spec.rb +23 -0
- data/spec/syntrax_spec.rb +5 -215
- data/spec/test_helper.rb +1 -18
- data/spec/tikz_spec.rb +4 -24
- data/spec/umlet_spec.rb +2 -58
- data/spec/vega_spec.rb +4 -117
- data/spec/wavedrom_spec.rb +2 -199
- metadata +73 -11
- data/lib/asciidoctor-diagram/extensions.rb +0 -568
- data/lib/ditaa-1.3.13.jar +0 -0
- data/lib/ditaamini-0.11.jar +0 -0
- data/lib/plantuml-1.3.13.jar +0 -0
- data/lib/server-1.3.13.jar +0 -0
@@ -1,59 +1,14 @@
|
|
1
|
-
require_relative '../
|
2
|
-
require_relative '
|
3
|
-
require_relative '../util/platform'
|
4
|
-
require_relative '../util/which'
|
1
|
+
require_relative '../diagram_processor'
|
2
|
+
require_relative 'converter'
|
5
3
|
|
6
4
|
module Asciidoctor
|
7
5
|
module Diagram
|
8
|
-
|
9
|
-
|
10
|
-
include CliGenerator
|
11
|
-
include Which
|
12
|
-
|
13
|
-
def self.included(mod)
|
14
|
-
[:png, :svg].each do |f|
|
15
|
-
mod.register_format(f, :image) do |parent, source|
|
16
|
-
syntrax(parent, source, f)
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
def syntrax(parent, source, format)
|
22
|
-
inherit_prefix = name
|
23
|
-
|
24
|
-
generate_file(which(parent, 'syntrax'), 'spec', format.to_s, source.to_s) do |tool_path, input_path, output_path|
|
25
|
-
args = [tool_path, '-i', Platform.native_path(input_path), '-o', Platform.native_path(output_path)]
|
26
|
-
|
27
|
-
title = source.attr('heading', nil, inherit_prefix)
|
28
|
-
if title
|
29
|
-
args << '--title' << title
|
30
|
-
end
|
31
|
-
|
32
|
-
scale = source.attr('scale', nil, inherit_prefix)
|
33
|
-
if scale
|
34
|
-
args << '--scale' << scale
|
35
|
-
end
|
36
|
-
|
37
|
-
transparent = source.attr('transparent', nil, inherit_prefix)
|
38
|
-
if transparent == 'true'
|
39
|
-
args << '--transparent'
|
40
|
-
end
|
41
|
-
style = source.attr('style', nil, inherit_prefix)
|
42
|
-
if style
|
43
|
-
args << '--style' << style
|
44
|
-
end
|
45
|
-
|
46
|
-
args
|
47
|
-
end
|
48
|
-
end
|
49
|
-
end
|
50
|
-
|
51
|
-
class SyntraxBlockProcessor < Extensions::DiagramBlockProcessor
|
52
|
-
include Syntrax
|
6
|
+
class SyntraxBlockProcessor < DiagramBlockProcessor
|
7
|
+
use_converter SyntraxConverter
|
53
8
|
end
|
54
9
|
|
55
|
-
class SyntraxBlockMacroProcessor <
|
56
|
-
|
10
|
+
class SyntraxBlockMacroProcessor < DiagramBlockMacroProcessor
|
11
|
+
use_converter SyntraxConverter
|
57
12
|
end
|
58
13
|
end
|
59
14
|
end
|
@@ -0,0 +1,56 @@
|
|
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 TikZConverter
|
9
|
+
include DiagramConverter
|
10
|
+
include CliGenerator
|
11
|
+
|
12
|
+
def supported_formats
|
13
|
+
[:pdf, :svg]
|
14
|
+
end
|
15
|
+
|
16
|
+
|
17
|
+
def convert(source, format, options)
|
18
|
+
latexpath = source.find_command('pdflatex')
|
19
|
+
|
20
|
+
if format == :svg
|
21
|
+
svgpath = source.find_command('pdf2svg')
|
22
|
+
else
|
23
|
+
svgpath = nil
|
24
|
+
end
|
25
|
+
|
26
|
+
latex = <<'END'
|
27
|
+
\documentclass[border=2bp, tikz]{standalone}
|
28
|
+
\usepackage{tikz}
|
29
|
+
\begin{document}
|
30
|
+
\begingroup
|
31
|
+
\tikzset{every picture/.style={scale=1}}
|
32
|
+
END
|
33
|
+
latex << source.to_s
|
34
|
+
latex << <<'END'
|
35
|
+
\endgroup
|
36
|
+
\end{document}
|
37
|
+
END
|
38
|
+
|
39
|
+
pdf = generate_file(latexpath, 'tex', 'pdf', latex) do |tool_path, input_path, output_path|
|
40
|
+
{
|
41
|
+
:args => [tool_path, '-shell-escape', '-file-line-error', '-interaction=nonstopmode', '-output-directory', Platform.native_path(File.dirname(output_path)), Platform.native_path(input_path)],
|
42
|
+
:out_file => "#{File.dirname(input_path)}/#{File.basename(input_path, '.*')}.pdf"
|
43
|
+
}
|
44
|
+
end
|
45
|
+
|
46
|
+
if svgpath
|
47
|
+
generate_file(svgpath, 'pdf', 'svg', pdf) do |tool_path, input_path, output_path|
|
48
|
+
[tool_path, Platform.native_path(input_path), Platform.native_path(output_path)]
|
49
|
+
end
|
50
|
+
else
|
51
|
+
pdf
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
@@ -1,68 +1,14 @@
|
|
1
|
-
require_relative '../
|
2
|
-
require_relative '
|
3
|
-
require_relative '../util/platform'
|
4
|
-
require_relative '../util/which'
|
1
|
+
require_relative '../diagram_processor'
|
2
|
+
require_relative 'converter'
|
5
3
|
|
6
4
|
module Asciidoctor
|
7
5
|
module Diagram
|
8
|
-
|
9
|
-
|
10
|
-
include CliGenerator
|
11
|
-
include Which
|
12
|
-
|
13
|
-
def self.included(mod)
|
14
|
-
[:pdf, :svg].each do |f|
|
15
|
-
mod.register_format(f, :image) do |parent, source|
|
16
|
-
tikz(parent, source, f)
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
def tikz(parent, source, format)
|
22
|
-
latexpath = which(parent, 'pdflatex')
|
23
|
-
|
24
|
-
if format == :svg
|
25
|
-
svgpath = which(parent, 'pdf2svg')
|
26
|
-
else
|
27
|
-
svgpath = nil
|
28
|
-
end
|
29
|
-
|
30
|
-
latex = <<'END'
|
31
|
-
\documentclass[border=2bp]{standalone}
|
32
|
-
\usepackage{tikz}
|
33
|
-
\begin{document}
|
34
|
-
\begingroup
|
35
|
-
\tikzset{every picture/.style={scale=1}}
|
36
|
-
END
|
37
|
-
latex << source.to_s
|
38
|
-
latex << <<'END'
|
39
|
-
\endgroup
|
40
|
-
\end{document}
|
41
|
-
END
|
42
|
-
|
43
|
-
pdf = generate_file(latexpath, 'tex', 'pdf', latex) do |tool_path, input_path, output_path|
|
44
|
-
{
|
45
|
-
:args => [tool_path, '-shell-escape', '-file-line-error', '-interaction=nonstopmode', '-output-directory', Platform.native_path(File.dirname(output_path)), Platform.native_path(input_path)],
|
46
|
-
:out_file => "#{File.dirname(input_path)}/#{File.basename(input_path, '.*')}.pdf"
|
47
|
-
}
|
48
|
-
end
|
49
|
-
|
50
|
-
if svgpath
|
51
|
-
generate_file(svgpath, 'pdf', 'svg', pdf) do |tool_path, input_path, output_path|
|
52
|
-
[tool_path, Platform.native_path(File.dirname(input_path)), Platform.native_path(File.dirname(output_path))]
|
53
|
-
end
|
54
|
-
else
|
55
|
-
pdf
|
56
|
-
end
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
|
-
class TikZBlockProcessor < Extensions::DiagramBlockProcessor
|
61
|
-
include TikZ
|
6
|
+
class TikZBlockProcessor < DiagramBlockProcessor
|
7
|
+
use_converter TikZConverter
|
62
8
|
end
|
63
9
|
|
64
|
-
class TikZBlockMacroProcessor <
|
65
|
-
|
10
|
+
class TikZBlockMacroProcessor < DiagramBlockMacroProcessor
|
11
|
+
use_converter TikZConverter
|
66
12
|
end
|
67
13
|
end
|
68
14
|
end
|
@@ -0,0 +1,24 @@
|
|
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 UmletConverter
|
9
|
+
include DiagramConverter
|
10
|
+
include CliGenerator
|
11
|
+
|
12
|
+
|
13
|
+
def supported_formats
|
14
|
+
[:svg, :png, :pdf, :gif]
|
15
|
+
end
|
16
|
+
|
17
|
+
def convert(source, format, options)
|
18
|
+
generate_file(source.find_command('umlet'), 'uxf', format.to_s, source.to_s) do |tool_path, input_path, output_path|
|
19
|
+
[tool_path, '-action=convert', "-format=#{format.to_s}", "-filename=#{Platform.native_path(input_path)}", "-output=#{Platform.native_path(output_path)}"]
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -1,36 +1,14 @@
|
|
1
|
-
require_relative '../
|
2
|
-
require_relative '
|
3
|
-
require_relative '../util/platform'
|
4
|
-
require_relative '../util/which'
|
1
|
+
require_relative '../diagram_processor'
|
2
|
+
require_relative 'converter'
|
5
3
|
|
6
4
|
module Asciidoctor
|
7
5
|
module Diagram
|
8
|
-
|
9
|
-
|
10
|
-
include CliGenerator
|
11
|
-
include Which
|
12
|
-
|
13
|
-
def self.included(mod)
|
14
|
-
[:svg, :png, :pdf, :gif].each do |f|
|
15
|
-
mod.register_format(f, :image) do |parent, source|
|
16
|
-
umlet(parent, source, f)
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
def umlet(parent, source, format)
|
22
|
-
generate_file(which(parent, 'umlet'), 'uxf', format.to_s, source.to_s) do |tool_path, input_path, output_path|
|
23
|
-
[tool_path, '-action=convert', "-format=#{format.to_s}", "-filename=#{Platform.native_path(input_path)}", "-output=#{Platform.native_path(output_path)}"]
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
class UmletBlockProcessor < Extensions::DiagramBlockProcessor
|
29
|
-
include Umlet
|
6
|
+
class UmletBlockProcessor < DiagramBlockProcessor
|
7
|
+
use_converter UmletConverter
|
30
8
|
end
|
31
9
|
|
32
|
-
class UmletBlockMacroProcessor <
|
33
|
-
|
10
|
+
class UmletBlockMacroProcessor < DiagramBlockMacroProcessor
|
11
|
+
use_converter UmletConverter
|
34
12
|
end
|
35
13
|
end
|
36
14
|
end
|
@@ -9,7 +9,7 @@ module Asciidoctor
|
|
9
9
|
require_relative 'java'
|
10
10
|
|
11
11
|
def self.run(*args)
|
12
|
-
opts = args.pop if args.last.is_a? Hash
|
12
|
+
opts = args.pop.dup if args.last.is_a? Hash
|
13
13
|
in_data = opts && opts[:stdin_data]
|
14
14
|
|
15
15
|
pb = java.lang.ProcessBuilder.new(*args)
|
@@ -61,12 +61,23 @@ module Asciidoctor
|
|
61
61
|
require 'open3'
|
62
62
|
|
63
63
|
def self.run(*args)
|
64
|
-
|
64
|
+
if Hash === args.last
|
65
|
+
opts = args.pop.dup
|
66
|
+
else
|
67
|
+
opts = {}
|
68
|
+
end
|
69
|
+
|
70
|
+
# When the first argument is an array, we force capture3 (or better the underlying Kernel#spawn)
|
71
|
+
# to use a non-shell execution variant.
|
72
|
+
cmd = File.basename(args[0])
|
73
|
+
args[0] = [args[0], cmd]
|
74
|
+
|
75
|
+
stdout, stderr, status = Open3.capture3(*args, opts)
|
65
76
|
|
66
77
|
exit = status.exitstatus
|
67
78
|
|
68
79
|
if exit != 0
|
69
|
-
raise "#{
|
80
|
+
raise "#{cmd} failed: #{stdout.empty? ? stderr : stdout}"
|
70
81
|
end
|
71
82
|
|
72
83
|
{
|
@@ -1,3 +1,4 @@
|
|
1
|
+
require 'asciidoctor/logging'
|
1
2
|
require 'tempfile'
|
2
3
|
require_relative 'cli'
|
3
4
|
|
@@ -5,6 +6,8 @@ module Asciidoctor
|
|
5
6
|
module Diagram
|
6
7
|
# @private
|
7
8
|
module CliGenerator
|
9
|
+
include Asciidoctor::Logging
|
10
|
+
|
8
11
|
def generate_stdin(tool, format, code)
|
9
12
|
tool_name = File.basename(tool)
|
10
13
|
|
@@ -26,7 +29,7 @@ module Asciidoctor
|
|
26
29
|
else
|
27
30
|
opts = [tool]
|
28
31
|
end
|
29
|
-
generate(opts, :stdout, :stdin_data => code)
|
32
|
+
generate(opts, :stdout, :stdin_data => code, :binmode => true)
|
30
33
|
end
|
31
34
|
|
32
35
|
def generate_file(tool, input_ext, output_ext, code)
|
@@ -51,6 +54,20 @@ module Asciidoctor
|
|
51
54
|
end
|
52
55
|
end
|
53
56
|
|
57
|
+
def generate_file_stdout(tool, input_ext, code)
|
58
|
+
tool_name = File.basename(tool)
|
59
|
+
|
60
|
+
source_file = Tempfile.new([tool_name, ".#{input_ext}"])
|
61
|
+
begin
|
62
|
+
File.write(source_file.path, code)
|
63
|
+
|
64
|
+
opts = yield tool, source_file.path
|
65
|
+
generate(opts, :stdout)
|
66
|
+
ensure
|
67
|
+
source_file.unlink
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
54
71
|
private
|
55
72
|
def generate(opts, target_file, open3_opts = {})
|
56
73
|
case opts
|
@@ -64,6 +81,7 @@ module Asciidoctor
|
|
64
81
|
raise "Block passed to generate_file should return an Array or a Hash"
|
65
82
|
end
|
66
83
|
|
84
|
+
logger.debug "Executing #{args} with options #{open3_opts}"
|
67
85
|
result = ::Asciidoctor::Diagram::Cli.run(*args, open3_opts)
|
68
86
|
|
69
87
|
data = target_file == :stdout ? result[:out] : read_result(target_file, out_file)
|
@@ -7,14 +7,14 @@ module Asciidoctor
|
|
7
7
|
GIF87A_SIGNATURE = 'GIF87a'.force_encoding(Encoding::ASCII_8BIT)
|
8
8
|
GIF89A_SIGNATURE = 'GIF89a'.force_encoding(Encoding::ASCII_8BIT)
|
9
9
|
|
10
|
-
def self.
|
10
|
+
def self.post_process_image(data)
|
11
11
|
bio = BinaryIO.new(data)
|
12
12
|
gif_signature = bio.read_string(6)
|
13
13
|
raise "Invalid GIF signature" unless gif_signature == GIF87A_SIGNATURE || gif_signature == GIF89A_SIGNATURE
|
14
14
|
|
15
15
|
width = bio.read_uint16_le
|
16
16
|
height = bio.read_uint16_le
|
17
|
-
[width, height]
|
17
|
+
[data, width, height]
|
18
18
|
end
|
19
19
|
end
|
20
20
|
end
|
@@ -9,28 +9,25 @@ module Asciidoctor
|
|
9
9
|
# @private
|
10
10
|
module Java
|
11
11
|
class CommandServer
|
12
|
-
attr_reader :port
|
13
|
-
|
14
12
|
def initialize(java, classpath)
|
15
13
|
args = []
|
16
14
|
args << '-Djava.awt.headless=true'
|
17
15
|
args << '-Djava.net.useSystemProxies=true'
|
18
16
|
args << '-cp'
|
19
17
|
args << classpath.flatten.map { |jar| ::Asciidoctor::Diagram::Platform.host_os_path(jar).strip }.join(::Asciidoctor::Diagram::Platform.host_os_path_separator)
|
20
|
-
args << 'org.asciidoctor.diagram.
|
18
|
+
args << 'org.asciidoctor.diagram.StdInOutCommandServer'
|
21
19
|
|
22
|
-
@server = IO.popen([java, *args])
|
23
|
-
@port = @server.readline.strip.to_i
|
24
|
-
@client = TCPSocket.new 'localhost', port
|
20
|
+
@server = IO.popen([java, *args], 'r+b')
|
25
21
|
end
|
26
22
|
|
27
23
|
def io
|
28
|
-
@
|
24
|
+
@server
|
29
25
|
end
|
30
26
|
|
31
27
|
def shutdown
|
32
28
|
# KILL is a bit heavy handed, but TERM does not seem to shut down the JVM on Windows.
|
33
29
|
Process.kill('KILL', @server.pid)
|
30
|
+
@server.close
|
34
31
|
end
|
35
32
|
end
|
36
33
|
|
@@ -60,8 +57,9 @@ module Asciidoctor
|
|
60
57
|
|
61
58
|
def self.send_request(req)
|
62
59
|
svr = instance
|
63
|
-
|
64
|
-
headers[
|
60
|
+
req[:headers] ||= {}
|
61
|
+
# headers = req[:headers] ||= {}
|
62
|
+
# headers['Host'] = "localhost:#{svr.port}"
|
65
63
|
format_request(req, svr.io)
|
66
64
|
parse_response(svr.io)
|
67
65
|
end
|
@@ -6,7 +6,7 @@ module Asciidoctor
|
|
6
6
|
module PNG
|
7
7
|
PNG_SIGNATURE = [137, 80, 78, 71, 13, 10, 26, 10].pack('CCCCCCCC')
|
8
8
|
|
9
|
-
def self.
|
9
|
+
def self.post_process_image(data)
|
10
10
|
bio = BinaryIO.new(data)
|
11
11
|
png_signature = bio.read_string(8)
|
12
12
|
raise "Invalid PNG signature" unless png_signature == PNG_SIGNATURE
|
@@ -18,7 +18,7 @@ module Asciidoctor
|
|
18
18
|
|
19
19
|
width = bio.read_uint32_be
|
20
20
|
height = bio.read_uint32_be
|
21
|
-
[width, height]
|
21
|
+
[data, width, height]
|
22
22
|
end
|
23
23
|
end
|
24
24
|
end
|