asciidoctor-diagram 2.0.5 → 2.1.0
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 +17 -2
- data/README.adoc +25 -516
- data/Rakefile +1 -1
- data/docs/antora.yml +3 -0
- data/{images → docs/modules/ROOT/images}/asciidoctor-diagram-classes.png +0 -0
- data/docs/modules/ROOT/images/asciidoctor-diagram-process.png +0 -0
- data/docs/modules/ROOT/pages/index.adoc +21 -0
- data/docs/modules/ROOT/partials/advanced.adoc +303 -0
- data/docs/modules/ROOT/partials/create_diagram.adoc +131 -0
- data/docs/modules/ROOT/partials/generate.adoc +15 -0
- data/docs/modules/ROOT/partials/installation.adoc +19 -0
- data/docs/modules/ROOT/partials/uris.adoc +38 -0
- data/examples/features.adoc +1 -1
- data/lib/asciidoctor-diagram/diagram_processor.rb +2 -1
- data/lib/asciidoctor-diagram/ditaa/converter.rb +14 -5
- data/lib/asciidoctor-diagram/ditaa/ditaa-1.3.17.jar +0 -0
- data/lib/asciidoctor-diagram/http/converter.rb +1 -7
- data/lib/asciidoctor-diagram/lilypond/converter.rb +11 -1
- data/lib/asciidoctor-diagram/meme/converter.rb +15 -9
- data/lib/asciidoctor-diagram/mermaid/converter.rb +27 -10
- data/lib/asciidoctor-diagram/pikchr/converter.rb +8 -1
- data/lib/asciidoctor-diagram/plantuml/converter.rb +15 -9
- data/lib/asciidoctor-diagram/plantuml/plantuml-1.3.17.jar +0 -0
- data/lib/asciidoctor-diagram/svgbob/converter.rb +4 -0
- data/lib/asciidoctor-diagram/util/cli.rb +16 -1
- data/lib/asciidoctor-diagram/util/cli_generator.rb +4 -2
- data/lib/asciidoctor-diagram/util/gif.rb +1 -1
- data/lib/asciidoctor-diagram/util/java.rb +5 -3
- data/lib/asciidoctor-diagram/util/java_jruby.rb +4 -1
- data/lib/asciidoctor-diagram/util/java_socket.rb +10 -1
- data/lib/asciidoctor-diagram/util/pdf.rb +1 -1
- data/lib/asciidoctor-diagram/util/png.rb +1 -1
- data/lib/asciidoctor-diagram/util/server-1.3.17.jar +0 -0
- data/lib/asciidoctor-diagram/util/svg.rb +25 -4
- data/lib/asciidoctor-diagram/version.rb +1 -1
- data/spec/a2s_spec.rb +3 -3
- data/spec/blockdiag_spec.rb +3 -3
- data/spec/bytefield_spec.rb +3 -3
- data/spec/ditaa_spec.rb +1 -1
- data/spec/dpic_spec.rb +3 -3
- data/spec/erd_spec.rb +5 -5
- data/spec/lilypond_spec.rb +3 -3
- data/spec/mermaid_spec.rb +37 -0
- data/spec/pikchr_spec.rb +21 -3
- data/spec/shaape_spec.rb +3 -3
- data/spec/svgbob_spec.rb +3 -3
- data/spec/syntrax_spec.rb +3 -3
- data/spec/test_helper.rb +3 -7
- data/spec/tikz_spec.rb +3 -3
- metadata +57 -13
- data/README_zh-CN.adoc +0 -336
- data/images/asciidoctor-diagram-process.png +0 -0
- data/lib/batik-all-1.10.jar +0 -0
- data/lib/ditaa-1.3.15.jar +0 -0
- data/lib/ditaamini-0.12.jar +0 -0
- data/lib/jlatexmath-minimal-1.0.5.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
@@ -0,0 +1,15 @@
|
|
1
|
+
== Generating a Diagram from a Terminal
|
2
|
+
|
3
|
+
You can load Asciidoctor diagram in a terminal using the `-r` flag.
|
4
|
+
|
5
|
+
$ asciidoctor -r asciidoctor-diagram sample.adoc
|
6
|
+
|
7
|
+
You can also use Asciidoctor diagram with other converters, such as Asciidoctor EPUB.
|
8
|
+
Asciidoctor-epub3 is also loaded with the `-r` flag.
|
9
|
+
|
10
|
+
$ asciidoctor -r asciidoctor-diagram -r asciidoctor-epub3 -b epub3 sample.adoc
|
11
|
+
|
12
|
+
Or, you can invoke Asciidoctor and the EPUB converter with the `asciidoctor-epub3` command.
|
13
|
+
The command implicitly sets the `-r` and `-b` flags for EPUB3 output.
|
14
|
+
|
15
|
+
$ asciidoctor-epub3 -r asciidoctor-diagram sample.adoc
|
@@ -0,0 +1,19 @@
|
|
1
|
+
== Installation
|
2
|
+
|
3
|
+
Asciidoctor Diagram is a RubyGem, which can be installed using the `gem` or `bundle` commands.
|
4
|
+
|
5
|
+
You can install the Asciidoctor Diagram gem by typing `gem install` in the CLI.
|
6
|
+
|
7
|
+
$ gem install asciidoctor-diagram
|
8
|
+
|
9
|
+
by first adding the following entry to your project's [.path]_Gemfile_.
|
10
|
+
|
11
|
+
.Gemfile
|
12
|
+
[source,ruby]
|
13
|
+
----
|
14
|
+
gem 'asciidoctor-diagram'
|
15
|
+
----
|
16
|
+
|
17
|
+
Then execute `bundle` in the CLI.
|
18
|
+
|
19
|
+
$ bundle
|
@@ -0,0 +1,38 @@
|
|
1
|
+
:uri-a2s: https://github.com/dhobsd/asciitosvg
|
2
|
+
:uri-actdiag: http://blockdiag.com/en/actdiag/index.html
|
3
|
+
:uri-asciidoctor-api: http://asciidoctor.org/docs/user-manual/#api
|
4
|
+
:uri-asciidoctor-extensions: http://asciidoctor.org/docs/user-manual/#extension-points
|
5
|
+
:uri-blockdiag: http://blockdiag.com
|
6
|
+
:uri-bpmn: https://github.com/gtudan/bpmn-js-cmd
|
7
|
+
:uri-bytefield: https://github.com/Deep-Symmetry/bytefield-svg
|
8
|
+
:uri-ditaa: http://ditaa.sourceforge.net/
|
9
|
+
:uri-dpic: https://gitlab.com/aplevich/dpic
|
10
|
+
:uri-dot: https://graphviz.gitlab.io/_pages/doc/info/lang.html
|
11
|
+
:uri-erd: https://github.com/BurntSushi/erd
|
12
|
+
:uri-gnuplot: http://gnuplot.info
|
13
|
+
:uri-graphviz: https://graphviz.gitlab.io
|
14
|
+
:uri-imagemagick: http://www.imagemagick.org
|
15
|
+
:uri-java: http://java.sun.com
|
16
|
+
:uri-mermaid: https://github.com/mermaid-js/mermaid-cli
|
17
|
+
:uri-mscgen: http://www.mcternan.me.uk/mscgen/
|
18
|
+
:uri-nomnoml: http://nomnoml.com
|
19
|
+
:uri-nwdiag: http://blockdiag.com/en/nwdiag/index.html
|
20
|
+
:uri-packetdiag: http://blockdiag.com/en/nwdiag/index.html
|
21
|
+
:uri-phantomjs: http://phantomjs.org
|
22
|
+
:uri-pikchr: https://pikchr.org
|
23
|
+
:uri-plantuml: http://plantuml.sourceforge.net
|
24
|
+
:uri-py-plantuml: https://code.google.com/p/asciidoc-plantuml/
|
25
|
+
:uri-rackdiag: http://blockdiag.com/en/nwdiag/index.html
|
26
|
+
:uri-seqdiag: http://blockdiag.com/en/seqdiag/index.html
|
27
|
+
:uri-shaape: https://github.com/christiangoltz/shaape
|
28
|
+
:uri-smcat: https://github.com/sverweij/state-machine-cat
|
29
|
+
:uri-svgbob: https://github.com/ivanceras/svgbobrus
|
30
|
+
:uri-symbolator: https://github.com/kevinpt/symbolator
|
31
|
+
:uri-syntrax: https://kevinpt.github.io/syntrax/
|
32
|
+
:uri-tikz: https://github.com/pgf-tikz/pgf
|
33
|
+
:uri-umlet: http://www.umlet.com/
|
34
|
+
:uri-vega: https://vega.github.io/vega/
|
35
|
+
:uri-vegalite: https://vega.github.io/vega-lite/
|
36
|
+
:uri-wavedrom: http://wavedrom.com
|
37
|
+
:uri-wavedromeditor: https://github.com/wavedrom/wavedrom.github.io/releases
|
38
|
+
:uri-wavedromcli: https://github.com/wavedrom/cli
|
data/examples/features.adoc
CHANGED
@@ -150,7 +150,7 @@ results in a block with the correct caption and id applied to it.
|
|
150
150
|
Asciidoctor-diagram also supports the various diagram block in block macro form.
|
151
151
|
These are macros of the form `<name>::<target>[<attrlist>]`.
|
152
152
|
|
153
|
-
In asciidoctor-diagram the macro names are identical to the block styles: `ditaa`, `
|
153
|
+
In asciidoctor-diagram the macro names are identical to the block styles: `ditaa`, `graphviz` and `plantuml`
|
154
154
|
The target is the path to the file containing the diagram source code.
|
155
155
|
When the target is a relative path it is resolved with respect to the location of the document being processed.
|
156
156
|
The attribute list behaves mostly the same as with the block styles.
|
@@ -174,7 +174,8 @@ module Asciidoctor
|
|
174
174
|
metadata = source.create_image_metadata
|
175
175
|
metadata[:options] = options
|
176
176
|
|
177
|
-
|
177
|
+
allow_image_optimisation = source.attr('optimise', 'true') == 'true'
|
178
|
+
result, metadata[:width], metadata[:height] = params[:decoder].post_process_image(result, allow_image_optimisation)
|
178
179
|
|
179
180
|
FileUtils.mkdir_p(File.dirname(image_file)) unless Dir.exist?(File.dirname(image_file))
|
180
181
|
File.open(image_file, 'wb') {|f| f.write result}
|
@@ -23,11 +23,20 @@ module Asciidoctor
|
|
23
23
|
:transparent => lambda { |o, v| o << '--transparent' if v == 'true'}
|
24
24
|
}
|
25
25
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
26
|
+
CLASSPATH_ENV = 'DIAGRAM_DITAA_CLASSPATH'
|
27
|
+
DITAA_JARS = if ENV.has_key?(CLASSPATH_ENV)
|
28
|
+
ENV[CLASSPATH_ENV].split(File::PATH_SEPARATOR)
|
29
|
+
else
|
30
|
+
begin
|
31
|
+
require 'asciidoctor-diagram/ditaa/classpath'
|
32
|
+
::Asciidoctor::Diagram::DitaaClasspath::JAR_FILES
|
33
|
+
rescue LoadError
|
34
|
+
raise "Could not load PlantUML. Eiter require 'asciidoctor-diagram-ditaamini' or specify the location of the PlantUML JAR(s) using the 'DIAGRAM_DITAA_CLASSPATH' environment variable."
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
Java.classpath.concat Dir[File.join(File.dirname(__FILE__), '*.jar')]
|
39
|
+
Java.classpath.concat DITAA_JARS
|
31
40
|
|
32
41
|
def supported_formats
|
33
42
|
[:png, :svg]
|
Binary file
|
@@ -23,12 +23,6 @@ module Asciidoctor
|
|
23
23
|
@converter.supported_formats
|
24
24
|
end
|
25
25
|
|
26
|
-
def collect_options(source, name)
|
27
|
-
{
|
28
|
-
:block_name => name
|
29
|
-
}
|
30
|
-
end
|
31
|
-
|
32
26
|
def convert(source, format, options)
|
33
27
|
code = source.code
|
34
28
|
|
@@ -58,7 +52,7 @@ module Asciidoctor
|
|
58
52
|
|
59
53
|
path = uri.path
|
60
54
|
path << '/' unless path.end_with? '/'
|
61
|
-
path <<
|
55
|
+
path << source.diagram_type.to_s
|
62
56
|
path << '/' << format.to_s
|
63
57
|
path << '/' << data
|
64
58
|
uri.path = path
|
@@ -9,6 +9,16 @@ module Asciidoctor
|
|
9
9
|
include DiagramConverter
|
10
10
|
include CliGenerator
|
11
11
|
|
12
|
+
EXTRA_PATH = []
|
13
|
+
|
14
|
+
if ::Asciidoctor::Diagram::Platform.os == :macosx
|
15
|
+
lilypond_app = ::Asciidoctor::Diagram::Which.which('LilyPond.app', :path => ['/Applications'])
|
16
|
+
if lilypond_app
|
17
|
+
EXTRA_PATH << File.join(lilypond_app, 'Contents/Resources/bin')
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
EXTRA_PATH.freeze
|
12
22
|
|
13
23
|
def supported_formats
|
14
24
|
[:png, :pdf]
|
@@ -34,7 +44,7 @@ module Asciidoctor
|
|
34
44
|
|
35
45
|
resolution = options[:resolution]
|
36
46
|
|
37
|
-
generate_stdin(source.find_command('lilypond'), format.to_s, code) do |tool_path, output_path|
|
47
|
+
generate_stdin(source.find_command('lilypond', :path => EXTRA_PATH), format.to_s, code) do |tool_path, output_path|
|
38
48
|
args = [tool_path, '-daux-files=#f', '-dbackend=eps', '-dno-gs-load-fonts', '-dinclude-eps-fonts', '-o', Platform.native_path(output_path), '-f', format.to_s]
|
39
49
|
|
40
50
|
args << '-dsafe'
|
@@ -34,8 +34,16 @@ module Asciidoctor
|
|
34
34
|
end
|
35
35
|
|
36
36
|
def convert(source, format, options)
|
37
|
-
|
38
|
-
|
37
|
+
magick = source.find_command('magick', :raise_on_error => false)
|
38
|
+
if magick
|
39
|
+
convert = ->(*args) { Cli.run(magick, 'convert', *args) }
|
40
|
+
identify = ->(*args) { Cli.run(magick, 'identify', *args) }
|
41
|
+
else
|
42
|
+
convert_cmd = source.find_command('convert')
|
43
|
+
convert = ->(*args) { Cli.run(convert_cmd, *args) }
|
44
|
+
identify_cmd = source.find_command('identify')
|
45
|
+
identify = ->(*args) { Cli.run(identify_cmd, *args) }
|
46
|
+
end
|
39
47
|
|
40
48
|
bg_img = options[:bg_img]
|
41
49
|
raise "background attribute is required" unless bg_img
|
@@ -50,7 +58,7 @@ module Asciidoctor
|
|
50
58
|
font = options[:font] || 'Impact'
|
51
59
|
noupcase = options[:noupcase]
|
52
60
|
|
53
|
-
dimensions =
|
61
|
+
dimensions = identify.call('-format', '%w %h', bg_img)[:out].match(/(?<w>\d+) (?<h>\d+)/)
|
54
62
|
bg_width = dimensions['w'].to_i
|
55
63
|
bg_height = dimensions['h'].to_i
|
56
64
|
label_width = bg_width
|
@@ -58,8 +66,7 @@ module Asciidoctor
|
|
58
66
|
|
59
67
|
if top_label
|
60
68
|
top_img = Tempfile.new(['meme', '.png'])
|
61
|
-
|
62
|
-
convert,
|
69
|
+
convert.call(
|
63
70
|
'-background', 'none',
|
64
71
|
'-fill', fill_color,
|
65
72
|
'-stroke', stroke_color,
|
@@ -76,8 +83,7 @@ module Asciidoctor
|
|
76
83
|
|
77
84
|
if bottom_label
|
78
85
|
bottom_img = Tempfile.new(['meme', '.png'])
|
79
|
-
|
80
|
-
convert,
|
86
|
+
convert.call(
|
81
87
|
'-background', 'none',
|
82
88
|
'-fill', fill_color,
|
83
89
|
'-stroke', stroke_color,
|
@@ -94,7 +100,7 @@ module Asciidoctor
|
|
94
100
|
|
95
101
|
final_img = Tempfile.new(['meme', ".#{format.to_s}"])
|
96
102
|
|
97
|
-
args = [
|
103
|
+
args = [bg_img]
|
98
104
|
if top_img
|
99
105
|
args << top_img.path << '-geometry' << '+0+0' << '-composite'
|
100
106
|
end
|
@@ -105,7 +111,7 @@ module Asciidoctor
|
|
105
111
|
|
106
112
|
args << final_img.path
|
107
113
|
|
108
|
-
|
114
|
+
convert.call(*args)
|
109
115
|
|
110
116
|
File.binread(final_img)
|
111
117
|
end
|
@@ -64,9 +64,15 @@ module Asciidoctor
|
|
64
64
|
|
65
65
|
opts[:width] = options[:width]
|
66
66
|
|
67
|
-
mmdc =
|
68
|
-
|
69
|
-
|
67
|
+
mmdc = nil
|
68
|
+
mmdc_exception = nil
|
69
|
+
begin
|
70
|
+
mmdc = source.find_command('mmdc')
|
71
|
+
rescue => e
|
72
|
+
mmdc_exception = e
|
73
|
+
end
|
74
|
+
|
75
|
+
if mmdc
|
70
76
|
opts[:height] = options[:height]
|
71
77
|
opts[:scale] = options[:scale]
|
72
78
|
opts[:theme] = options[:theme]
|
@@ -75,17 +81,25 @@ module Asciidoctor
|
|
75
81
|
if config
|
76
82
|
opts[:config] = source.resolve_path(config)
|
77
83
|
end
|
78
|
-
run_mmdc(
|
84
|
+
run_mmdc(mmdc, source, format, opts)
|
79
85
|
else
|
80
|
-
|
81
|
-
|
86
|
+
begin
|
87
|
+
mermaid = source.find_command('mermaid')
|
88
|
+
run_mermaid(mermaid, source, format, opts)
|
89
|
+
rescue
|
90
|
+
if mmdc_exception
|
91
|
+
raise mmdc_exception
|
92
|
+
else
|
93
|
+
raise
|
94
|
+
end
|
95
|
+
end
|
82
96
|
end
|
83
97
|
end
|
84
98
|
|
85
99
|
private
|
86
|
-
def run_mmdc(
|
87
|
-
generate_file(
|
88
|
-
args = [tool_path, '
|
100
|
+
def run_mmdc(mmdc, source, format, options = {})
|
101
|
+
generate_file(mmdc, 'mmd', format.to_s, source.to_s) do |tool_path, input_path, output_path|
|
102
|
+
args = [tool_path, '-i', Platform.native_path(input_path), '-o', Platform.native_path(output_path)]
|
89
103
|
|
90
104
|
if options[:css]
|
91
105
|
args << '--cssFile' << Platform.native_path(options[:css])
|
@@ -148,7 +162,10 @@ module Asciidoctor
|
|
148
162
|
args << '--puppeteerConfigFile' << Platform.native_path(options[:puppeteer])
|
149
163
|
end
|
150
164
|
|
151
|
-
|
165
|
+
{
|
166
|
+
:args => args,
|
167
|
+
:env => {'NODE_OPTIONS' => '--unhandled-rejections=strict'}
|
168
|
+
}
|
152
169
|
end
|
153
170
|
end
|
154
171
|
|
@@ -17,9 +17,16 @@ module Asciidoctor
|
|
17
17
|
def convert(source, format, options)
|
18
18
|
pikchr_path = source.find_command('pikchr')
|
19
19
|
|
20
|
-
generate_file_stdout(pikchr_path, format.to_s, source.to_s) do |tool_path, input_path|
|
20
|
+
output = generate_file_stdout(pikchr_path, format.to_s, source.to_s) do |tool_path, input_path|
|
21
21
|
[tool_path, "--svg-only", input_path]
|
22
22
|
end
|
23
|
+
|
24
|
+
if output.start_with? '<svg'
|
25
|
+
output
|
26
|
+
else
|
27
|
+
error = output.gsub(/<\/?[a-z]+>\n?/i, '')
|
28
|
+
raise error
|
29
|
+
end
|
23
30
|
end
|
24
31
|
end
|
25
32
|
end
|
@@ -7,15 +7,21 @@ module Asciidoctor
|
|
7
7
|
class PlantUmlConverter
|
8
8
|
include DiagramConverter
|
9
9
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
10
|
+
CLASSPATH_ENV = 'DIAGRAM_PLANTUML_CLASSPATH'
|
11
|
+
LIB_DIR = File.expand_path('../..', File.dirname(__FILE__))
|
12
|
+
PLANTUML_JARS = if ENV.has_key?(CLASSPATH_ENV)
|
13
|
+
ENV[CLASSPATH_ENV].split(File::PATH_SEPARATOR)
|
14
|
+
else
|
15
|
+
begin
|
16
|
+
require 'asciidoctor-diagram/plantuml/classpath'
|
17
|
+
::Asciidoctor::Diagram::PlantUmlClasspath::JAR_FILES
|
18
|
+
rescue LoadError
|
19
|
+
raise "Could not load PlantUML. Eiter require 'asciidoctor-diagram-plantuml' or specify the location of the PlantUML JAR(s) using the 'DIAGRAM_PLANTUML_CLASSPATH' environment variable."
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
Java.classpath.concat Dir[File.join(File.dirname(__FILE__), '*.jar')].freeze
|
24
|
+
Java.classpath.concat PLANTUML_JARS
|
19
25
|
|
20
26
|
def supported_formats
|
21
27
|
[:png, :svg, :txt, :atxt, :utxt]
|
Binary file
|
@@ -12,7 +12,16 @@ module Asciidoctor
|
|
12
12
|
opts = args.pop.dup if args.last.is_a? Hash
|
13
13
|
in_data = opts && opts[:stdin_data]
|
14
14
|
|
15
|
+
if Hash === args.first
|
16
|
+
env = args.shift.dup
|
17
|
+
else
|
18
|
+
env = {}
|
19
|
+
end
|
20
|
+
|
15
21
|
pb = java.lang.ProcessBuilder.new(*args)
|
22
|
+
env.each_pair do |key, value|
|
23
|
+
pb.environment.put(key, value)
|
24
|
+
end
|
16
25
|
p = pb.start
|
17
26
|
|
18
27
|
stdout = ""
|
@@ -67,12 +76,18 @@ module Asciidoctor
|
|
67
76
|
opts = {}
|
68
77
|
end
|
69
78
|
|
79
|
+
if Hash === args.first
|
80
|
+
env = args.shift.dup
|
81
|
+
else
|
82
|
+
env = {}
|
83
|
+
end
|
84
|
+
|
70
85
|
# When the first argument is an array, we force capture3 (or better the underlying Kernel#spawn)
|
71
86
|
# to use a non-shell execution variant.
|
72
87
|
cmd = File.basename(args[0])
|
73
88
|
args[0] = [args[0], cmd]
|
74
89
|
|
75
|
-
stdout, stderr, status = Open3.capture3(*args, opts)
|
90
|
+
stdout, stderr, status = Open3.capture3(env, *args, opts)
|
76
91
|
|
77
92
|
exit = status.exitstatus
|
78
93
|
|
@@ -74,15 +74,17 @@ module Asciidoctor
|
|
74
74
|
when Array
|
75
75
|
args = opts
|
76
76
|
out_file = nil
|
77
|
+
env = {}
|
77
78
|
when Hash
|
78
79
|
args = opts[:args]
|
79
80
|
out_file = opts[:out_file]
|
81
|
+
env = opts[:env] || {}
|
80
82
|
else
|
81
83
|
raise "Block passed to generate_file should return an Array or a Hash"
|
82
84
|
end
|
83
85
|
|
84
|
-
logger.debug "Executing #{args} with options #{open3_opts}"
|
85
|
-
result = ::Asciidoctor::Diagram::Cli.run(*args, open3_opts)
|
86
|
+
logger.debug "Executing #{args} with options #{open3_opts} and environment #{env}"
|
87
|
+
result = ::Asciidoctor::Diagram::Cli.run(env, *args, open3_opts)
|
86
88
|
|
87
89
|
data = target_file == :stdout ? result[:out] : read_result(target_file, out_file)
|
88
90
|
|
@@ -7,7 +7,7 @@ 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.post_process_image(data)
|
10
|
+
def self.post_process_image(data, optimise)
|
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
|
@@ -5,9 +5,7 @@ module Asciidoctor
|
|
5
5
|
# @private
|
6
6
|
module Java
|
7
7
|
def self.classpath
|
8
|
-
@classpath ||= [
|
9
|
-
File.expand_path(File.join('../..', 'server-1.3.15.jar'), File.dirname(__FILE__))
|
10
|
-
]
|
8
|
+
@classpath ||= Dir[File.join(File.dirname(__FILE__), '*.jar')]
|
11
9
|
end
|
12
10
|
|
13
11
|
CRLF = "\r\n".encode(Encoding::US_ASCII)
|
@@ -53,6 +51,10 @@ module Asciidoctor
|
|
53
51
|
io.set_encoding Encoding::US_ASCII
|
54
52
|
status_line = io.readline(CRLF)
|
55
53
|
status_line_parts = STATUS_LINE.match status_line
|
54
|
+
unless status_line_parts
|
55
|
+
raise "Unexpected HTTP status line: #{status_line}"
|
56
|
+
end
|
57
|
+
|
56
58
|
resp[:code] = status_line_parts[1].to_i
|
57
59
|
resp[:reason] = status_line_parts[2]
|
58
60
|
|