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
@@ -0,0 +1,30 @@
|
|
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 DpicConverter
|
9
|
+
include DiagramConverter
|
10
|
+
include CliGenerator
|
11
|
+
|
12
|
+
|
13
|
+
def supported_formats
|
14
|
+
[:svg]
|
15
|
+
end
|
16
|
+
|
17
|
+
def convert(source, format, options)
|
18
|
+
dpic_path = source.find_command('dpic')
|
19
|
+
|
20
|
+
code = source.to_s
|
21
|
+
code.prepend ".PS\n" unless code.start_with?(".PS\n")
|
22
|
+
code << "\n.PE" unless code.start_with?("\n.PE")
|
23
|
+
|
24
|
+
generate_file_stdout(dpic_path, format.to_s, code) do |tool_path, input_path|
|
25
|
+
[tool_path, "-v", "-z", input_path]
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require_relative 'converter'
|
2
|
+
require_relative '../diagram_processor'
|
3
|
+
|
4
|
+
module Asciidoctor
|
5
|
+
module Diagram
|
6
|
+
class DpicBlockProcessor < DiagramBlockProcessor
|
7
|
+
use_converter DpicConverter
|
8
|
+
end
|
9
|
+
|
10
|
+
class DpicBlockMacroProcessor < DiagramBlockMacroProcessor
|
11
|
+
use_converter DpicConverter
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,31 @@
|
|
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 ErdConverter
|
9
|
+
include DiagramConverter
|
10
|
+
include CliGenerator
|
11
|
+
|
12
|
+
|
13
|
+
def supported_formats
|
14
|
+
[:png, :svg]
|
15
|
+
end
|
16
|
+
|
17
|
+
def convert(source, format, options)
|
18
|
+
erd_path = source.find_command('erd')
|
19
|
+
dot_path = source.find_command('dot', :alt_attrs => ['graphvizdot'])
|
20
|
+
|
21
|
+
dot_code = generate_stdin(erd_path, format.to_s, source.to_s) do |tool_path, output_path|
|
22
|
+
[tool_path, '-o', Platform.native_path(output_path), '-f', 'dot']
|
23
|
+
end
|
24
|
+
|
25
|
+
generate_stdin(dot_path, format.to_s, dot_code) do |tool_path, output_path|
|
26
|
+
[tool_path, "-o#{Platform.native_path(output_path)}", "-T#{format.to_s}"]
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -1,43 +1,14 @@
|
|
1
|
-
require_relative '
|
2
|
-
require_relative '../
|
3
|
-
require_relative '../util/platform'
|
4
|
-
require_relative '../util/which'
|
1
|
+
require_relative 'converter'
|
2
|
+
require_relative '../diagram_processor'
|
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
|
-
erd(parent, source, f)
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
def erd(parent, source, format)
|
22
|
-
erd_path = which(parent, 'erd')
|
23
|
-
dot_path = which(parent, 'dot', :alt_attrs => ['graphvizdot'])
|
24
|
-
|
25
|
-
dot_code = generate_stdin(erd_path, format.to_s, source.to_s) do |tool_path, output_path|
|
26
|
-
[tool_path, '-o', Platform.native_path(output_path), '-f', 'dot']
|
27
|
-
end
|
28
|
-
|
29
|
-
generate_stdin(dot_path, format.to_s, dot_code) do |tool_path, output_path|
|
30
|
-
[tool_path, "-o#{Platform.native_path(output_path)}", "-T#{format.to_s}"]
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
class ErdBlockProcessor < Extensions::DiagramBlockProcessor
|
36
|
-
include Erd
|
6
|
+
class ErdBlockProcessor < DiagramBlockProcessor
|
7
|
+
use_converter ErdConverter
|
37
8
|
end
|
38
9
|
|
39
|
-
class ErdBlockMacroProcessor <
|
40
|
-
|
10
|
+
class ErdBlockMacroProcessor < DiagramBlockMacroProcessor
|
11
|
+
use_converter ErdConverter
|
41
12
|
end
|
42
13
|
end
|
43
14
|
end
|
@@ -0,0 +1,63 @@
|
|
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 GnuplotConverter
|
9
|
+
include DiagramConverter
|
10
|
+
include CliGenerator
|
11
|
+
|
12
|
+
|
13
|
+
def supported_formats
|
14
|
+
[:png, :svg, :gif, :txt, :literal]
|
15
|
+
end
|
16
|
+
|
17
|
+
def collect_options(source)
|
18
|
+
{
|
19
|
+
:width => source.attr('width'),
|
20
|
+
:height => source.attr('height'),
|
21
|
+
:transparent => source.attr('transparent'),
|
22
|
+
:crop => source.attr('crop'),
|
23
|
+
:font => source.attr('font'),
|
24
|
+
:fontscale => source.attr('fontscale'),
|
25
|
+
:background => source.attr('background'),
|
26
|
+
}
|
27
|
+
end
|
28
|
+
|
29
|
+
def convert(source, format, options)
|
30
|
+
if format == :txt || format == :literal
|
31
|
+
terminal = 'dumb'
|
32
|
+
else
|
33
|
+
terminal = format.to_s
|
34
|
+
end
|
35
|
+
code = "set term #{terminal}"
|
36
|
+
|
37
|
+
width = options[:width]
|
38
|
+
height = options[:height]
|
39
|
+
code << " size #{width},#{height}" unless width.nil? or height.nil?
|
40
|
+
|
41
|
+
transparent = options[:transparent]
|
42
|
+
code << (transparent ? " transparent" : " notransparent") unless transparent.nil?
|
43
|
+
|
44
|
+
crop = options[:crop]
|
45
|
+
code << (crop ? " crop" : " nocrop") unless crop.nil?
|
46
|
+
|
47
|
+
font = options[:font]
|
48
|
+
code << %( font "#{font}") unless font.nil?
|
49
|
+
|
50
|
+
font_scale = options[:fontscale]
|
51
|
+
code << " fontscale #{font_scale}" unless font_scale.nil?
|
52
|
+
|
53
|
+
background = options[:background]
|
54
|
+
code << %( background "#{background}") unless background.nil?
|
55
|
+
|
56
|
+
code << "\n"
|
57
|
+
code << source.to_s
|
58
|
+
|
59
|
+
generate_stdin_stdout(source.find_command('gnuplot'), code)
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require_relative 'converter'
|
2
|
+
require_relative '../diagram_processor'
|
3
|
+
|
4
|
+
module Asciidoctor
|
5
|
+
module Diagram
|
6
|
+
class GnuplotBlockProcessor < DiagramBlockProcessor
|
7
|
+
use_converter GnuplotConverter
|
8
|
+
end
|
9
|
+
|
10
|
+
class GnuplotBlockMacroProcessor < DiagramBlockMacroProcessor
|
11
|
+
use_converter GnuplotConverter
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,32 @@
|
|
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 GraphvizConverter
|
9
|
+
include DiagramConverter
|
10
|
+
include CliGenerator
|
11
|
+
|
12
|
+
def supported_formats
|
13
|
+
[:png, :pdf, :svg]
|
14
|
+
end
|
15
|
+
|
16
|
+
def collect_options(source)
|
17
|
+
{:layout => source.attr('layout')}
|
18
|
+
end
|
19
|
+
|
20
|
+
def convert(source, format, options)
|
21
|
+
generate_stdin(source.find_command('dot', :alt_attrs => ['graphvizdot']), format.to_s, source.to_s) do |tool_path, output_path|
|
22
|
+
args = [tool_path, "-o#{Platform.native_path(output_path)}", "-T#{format.to_s}"]
|
23
|
+
|
24
|
+
layout = options[:layout]
|
25
|
+
args << "-K#{layout}" if layout
|
26
|
+
|
27
|
+
args
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -1,43 +1,14 @@
|
|
1
|
-
require_relative '
|
2
|
-
require_relative '../
|
3
|
-
require_relative '../util/platform'
|
4
|
-
require_relative '../util/which'
|
1
|
+
require_relative 'converter'
|
2
|
+
require_relative '../diagram_processor'
|
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, :pdf, :svg].each do |f|
|
15
|
-
mod.register_format(f, :image) do |parent, source|
|
16
|
-
graphviz(parent, source, f)
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
def graphviz(parent, source, format)
|
22
|
-
inherit_prefix = name
|
23
|
-
|
24
|
-
generate_stdin(which(parent, 'dot', :alt_attrs => ['graphvizdot']), format.to_s, source.to_s) do |tool_path, output_path|
|
25
|
-
args = [tool_path, "-o#{Platform.native_path(output_path)}", "-T#{format.to_s}"]
|
26
|
-
|
27
|
-
layout = source.attr('layout', nil, inherit_prefix)
|
28
|
-
args << "-K#{layout}" if layout
|
29
|
-
|
30
|
-
args
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
class GraphvizBlockProcessor < Extensions::DiagramBlockProcessor
|
36
|
-
include Graphviz
|
6
|
+
class GraphvizBlockProcessor < DiagramBlockProcessor
|
7
|
+
use_converter GraphvizConverter
|
37
8
|
end
|
38
9
|
|
39
|
-
class GraphvizBlockMacroProcessor <
|
40
|
-
|
10
|
+
class GraphvizBlockMacroProcessor < DiagramBlockMacroProcessor
|
11
|
+
use_converter GraphvizConverter
|
41
12
|
end
|
42
13
|
end
|
43
14
|
end
|
@@ -0,0 +1,99 @@
|
|
1
|
+
require_relative '../diagram_converter'
|
2
|
+
require_relative '../util/cli_generator'
|
3
|
+
require_relative '../util/platform'
|
4
|
+
|
5
|
+
require 'base64'
|
6
|
+
require 'net/http'
|
7
|
+
require 'uri'
|
8
|
+
require 'zlib'
|
9
|
+
|
10
|
+
module Asciidoctor
|
11
|
+
module Diagram
|
12
|
+
# @private
|
13
|
+
class HttpConverter
|
14
|
+
include DiagramConverter
|
15
|
+
|
16
|
+
def initialize(base_uri, type, converter)
|
17
|
+
@base_uri = base_uri
|
18
|
+
@type = type
|
19
|
+
@converter = converter
|
20
|
+
end
|
21
|
+
|
22
|
+
def supported_formats
|
23
|
+
@converter.supported_formats
|
24
|
+
end
|
25
|
+
|
26
|
+
def collect_options(source, name)
|
27
|
+
{
|
28
|
+
:block_name => name
|
29
|
+
}
|
30
|
+
end
|
31
|
+
|
32
|
+
def convert(source, format, options)
|
33
|
+
code = source.code
|
34
|
+
|
35
|
+
uri = URI(@base_uri)
|
36
|
+
|
37
|
+
case @type
|
38
|
+
when :plantuml
|
39
|
+
deflate = Zlib::Deflate.new(Zlib::BEST_COMPRESSION,
|
40
|
+
-Zlib::MAX_WBITS,
|
41
|
+
Zlib::MAX_MEM_LEVEL,
|
42
|
+
Zlib::DEFAULT_STRATEGY)
|
43
|
+
|
44
|
+
compressed = deflate.deflate(code, Zlib::FINISH)
|
45
|
+
deflate.close
|
46
|
+
|
47
|
+
encoded = Base64.urlsafe_encode64(compressed)
|
48
|
+
data = '0A' + encoded
|
49
|
+
|
50
|
+
path = uri.path
|
51
|
+
path << '/' unless path.end_with? '/'
|
52
|
+
path << format.to_s
|
53
|
+
path << '/' << data
|
54
|
+
uri.path = path
|
55
|
+
when :kroki_io
|
56
|
+
compressed = Zlib.deflate(code, Zlib::BEST_COMPRESSION)
|
57
|
+
data = Base64.urlsafe_encode64(compressed)
|
58
|
+
|
59
|
+
path = uri.path
|
60
|
+
path << '/' unless path.end_with? '/'
|
61
|
+
path << options[:block_name].to_s
|
62
|
+
path << '/' << format.to_s
|
63
|
+
path << '/' << data
|
64
|
+
uri.path = path
|
65
|
+
else
|
66
|
+
raise "Unsupported server type: " + @type
|
67
|
+
end
|
68
|
+
|
69
|
+
get_uri(uri)
|
70
|
+
end
|
71
|
+
|
72
|
+
private
|
73
|
+
|
74
|
+
def get_uri(uri, attempt = 1)
|
75
|
+
if attempt >= 10
|
76
|
+
raise "Too many redirects"
|
77
|
+
end
|
78
|
+
|
79
|
+
Net::HTTP.start(uri.hostname, uri.port, :use_ssl => uri.scheme.downcase == 'https') do |http|
|
80
|
+
response = http.request_get uri.path
|
81
|
+
case response
|
82
|
+
when Net::HTTPSuccess
|
83
|
+
response.body
|
84
|
+
when Net::HTTPRedirection then
|
85
|
+
location = response['Location']
|
86
|
+
new_uri = URI.parse(location)
|
87
|
+
if new_uri.relative?
|
88
|
+
get_uri(uri + location, attempt + 1)
|
89
|
+
else
|
90
|
+
get_uri(new_uri, attempt + 1)
|
91
|
+
end
|
92
|
+
else
|
93
|
+
response.value
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
@@ -0,0 +1,132 @@
|
|
1
|
+
require 'base64'
|
2
|
+
require 'json'
|
3
|
+
require 'sinatra/base'
|
4
|
+
require 'zlib'
|
5
|
+
|
6
|
+
require_relative '../diagram_source'
|
7
|
+
require_relative '../graphviz/converter'
|
8
|
+
require_relative '../util/which'
|
9
|
+
|
10
|
+
module Asciidoctor
|
11
|
+
module Diagram
|
12
|
+
class Server < Sinatra::Base
|
13
|
+
get '/:type/:format/:source' do
|
14
|
+
type = params['type']
|
15
|
+
accepts = lambda { |t| params['format'].downcase.to_sym == t }
|
16
|
+
raw_source = params['source']
|
17
|
+
decoded_source = Base64.urlsafe_decode64(raw_source)
|
18
|
+
decompressed_source = Zlib::Inflate.inflate(decoded_source)
|
19
|
+
source = decompressed_source
|
20
|
+
render_diagram(type, accepts, source, {})
|
21
|
+
end
|
22
|
+
|
23
|
+
post '/' do
|
24
|
+
params = JSON.parse(request.body.read)
|
25
|
+
type = params['diagram_type']
|
26
|
+
accepts = lambda { |t| params['output_format'].downcase.to_sym == t }
|
27
|
+
source = params['diagram_source']
|
28
|
+
render_diagram(type, accepts, source, {})
|
29
|
+
end
|
30
|
+
|
31
|
+
post '/:type' do
|
32
|
+
type = params['type'].to_sym
|
33
|
+
r = request
|
34
|
+
accepts = lambda { |t| r.accept?(to_mime_type(t)) }
|
35
|
+
source = request.body.read
|
36
|
+
render_diagram(type, accepts, source, {})
|
37
|
+
end
|
38
|
+
|
39
|
+
post '/:type/:format' do
|
40
|
+
type = params['type'].to_sym
|
41
|
+
accepts = lambda { |t| params['format'].downcase.to_sym == t }
|
42
|
+
source = request.body.read
|
43
|
+
render_diagram(type, accepts, source, {})
|
44
|
+
end
|
45
|
+
|
46
|
+
def to_mime_type(type)
|
47
|
+
case type
|
48
|
+
when :pdf
|
49
|
+
'application/pdf'
|
50
|
+
when :png
|
51
|
+
'image/png'
|
52
|
+
when :svg
|
53
|
+
'image/svg'
|
54
|
+
when :txt
|
55
|
+
'text/plain'
|
56
|
+
else
|
57
|
+
nil
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
def get_converter(type)
|
62
|
+
case type
|
63
|
+
when :graphviz
|
64
|
+
GraphvizConverter.new
|
65
|
+
else
|
66
|
+
nil
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
def render_diagram(type, accepts, source, attributes)
|
71
|
+
converter = get_converter(type.downcase.to_sym)
|
72
|
+
return [500, "Unsupported diagram type #{type}"] unless converter
|
73
|
+
|
74
|
+
format = converter.supported_formats.find {|f| accepts.call(f)}
|
75
|
+
return [500, "Could not determine supported output format"] unless format
|
76
|
+
|
77
|
+
source = ServerSource.new(type.downcase, source, attributes)
|
78
|
+
options = converter.collect_options(source)
|
79
|
+
diagram = converter.convert(source, format, options)
|
80
|
+
|
81
|
+
content_type to_mime_type(format)
|
82
|
+
diagram
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
class ServerSource
|
87
|
+
include Asciidoctor::Diagram::DiagramSource
|
88
|
+
|
89
|
+
def initialize(name, source, attributes)
|
90
|
+
@name = name
|
91
|
+
@source = source
|
92
|
+
@attributes = attributes
|
93
|
+
end
|
94
|
+
|
95
|
+
def diagram_type
|
96
|
+
@name
|
97
|
+
end
|
98
|
+
|
99
|
+
def attr(name, default_value = nil, inherit = diagram_type)
|
100
|
+
@attributes[name] || default_value
|
101
|
+
end
|
102
|
+
|
103
|
+
def base_dir
|
104
|
+
nil
|
105
|
+
end
|
106
|
+
|
107
|
+
def code
|
108
|
+
@source
|
109
|
+
end
|
110
|
+
|
111
|
+
def config
|
112
|
+
{}
|
113
|
+
end
|
114
|
+
|
115
|
+
def find_command(cmd, options = nil)
|
116
|
+
Asciidoctor::Diagram::Which.which(cmd, options)
|
117
|
+
end
|
118
|
+
|
119
|
+
def resolve_path(target, start = nil)
|
120
|
+
target
|
121
|
+
end
|
122
|
+
|
123
|
+
def image_name
|
124
|
+
"image"
|
125
|
+
end
|
126
|
+
|
127
|
+
def should_process?(image_file, image_metadata)
|
128
|
+
true
|
129
|
+
end
|
130
|
+
end
|
131
|
+
end
|
132
|
+
end
|