asciidoctor-diagram 1.5.18 → 2.0.3

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of asciidoctor-diagram might be problematic. Click here for more details.

Files changed (102) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.adoc +66 -0
  3. data/README.adoc +98 -23
  4. data/examples/features.adoc +2 -2
  5. data/lib/asciidoctor-diagram.rb +8 -0
  6. data/lib/asciidoctor-diagram/a2s/converter.rb +55 -0
  7. data/lib/asciidoctor-diagram/a2s/extension.rb +6 -52
  8. data/lib/asciidoctor-diagram/blockdiag/converter.rb +37 -0
  9. data/lib/asciidoctor-diagram/blockdiag/extension.rb +9 -116
  10. data/lib/asciidoctor-diagram/bpmn.rb +7 -0
  11. data/lib/asciidoctor-diagram/bpmn/converter.rb +62 -0
  12. data/lib/asciidoctor-diagram/bpmn/extension.rb +14 -0
  13. data/lib/asciidoctor-diagram/bytefield.rb +7 -0
  14. data/lib/asciidoctor-diagram/bytefield/converter.rb +26 -0
  15. data/lib/asciidoctor-diagram/bytefield/extension.rb +14 -0
  16. data/lib/asciidoctor-diagram/diagram_converter.rb +19 -0
  17. data/lib/asciidoctor-diagram/diagram_processor.rb +345 -0
  18. data/lib/asciidoctor-diagram/diagram_source.rb +306 -0
  19. data/lib/asciidoctor-diagram/ditaa/converter.rb +86 -0
  20. data/lib/asciidoctor-diagram/ditaa/extension.rb +6 -71
  21. data/lib/asciidoctor-diagram/dpic.rb +7 -0
  22. data/lib/asciidoctor-diagram/dpic/converter.rb +30 -0
  23. data/lib/asciidoctor-diagram/dpic/extension.rb +14 -0
  24. data/lib/asciidoctor-diagram/erd/converter.rb +31 -0
  25. data/lib/asciidoctor-diagram/erd/extension.rb +6 -35
  26. data/lib/asciidoctor-diagram/gnuplot.rb +7 -0
  27. data/lib/asciidoctor-diagram/gnuplot/converter.rb +63 -0
  28. data/lib/asciidoctor-diagram/gnuplot/extension.rb +14 -0
  29. data/lib/asciidoctor-diagram/graphviz/converter.rb +32 -0
  30. data/lib/asciidoctor-diagram/graphviz/extension.rb +6 -35
  31. data/lib/asciidoctor-diagram/http/converter.rb +99 -0
  32. data/lib/asciidoctor-diagram/http/server.rb +127 -0
  33. data/lib/asciidoctor-diagram/lilypond.rb +7 -0
  34. data/lib/asciidoctor-diagram/lilypond/converter.rb +54 -0
  35. data/lib/asciidoctor-diagram/lilypond/extension.rb +14 -0
  36. data/lib/asciidoctor-diagram/meme/converter.rb +122 -0
  37. data/lib/asciidoctor-diagram/meme/extension.rb +5 -107
  38. data/lib/asciidoctor-diagram/mermaid/converter.rb +179 -0
  39. data/lib/asciidoctor-diagram/mermaid/extension.rb +6 -159
  40. data/lib/asciidoctor-diagram/msc/converter.rb +35 -0
  41. data/lib/asciidoctor-diagram/msc/extension.rb +6 -36
  42. data/lib/asciidoctor-diagram/nomnoml/converter.rb +25 -0
  43. data/lib/asciidoctor-diagram/nomnoml/extension.rb +6 -28
  44. data/lib/asciidoctor-diagram/pikchr.rb +7 -0
  45. data/lib/asciidoctor-diagram/pikchr/converter.rb +26 -0
  46. data/lib/asciidoctor-diagram/pikchr/extension.rb +14 -0
  47. data/lib/asciidoctor-diagram/plantuml/converter.rb +117 -0
  48. data/lib/asciidoctor-diagram/plantuml/extension.rb +10 -119
  49. data/lib/asciidoctor-diagram/shaape/converter.rb +25 -0
  50. data/lib/asciidoctor-diagram/shaape/extension.rb +6 -28
  51. data/lib/asciidoctor-diagram/smcat.rb +7 -0
  52. data/lib/asciidoctor-diagram/smcat/converter.rb +44 -0
  53. data/lib/asciidoctor-diagram/smcat/extension.rb +14 -0
  54. data/lib/asciidoctor-diagram/svgbob/converter.rb +49 -0
  55. data/lib/asciidoctor-diagram/svgbob/extension.rb +6 -28
  56. data/lib/asciidoctor-diagram/symbolator.rb +7 -0
  57. data/lib/asciidoctor-diagram/symbolator/converter.rb +23 -0
  58. data/lib/asciidoctor-diagram/symbolator/extension.rb +14 -0
  59. data/lib/asciidoctor-diagram/syntrax/converter.rb +55 -0
  60. data/lib/asciidoctor-diagram/syntrax/extension.rb +6 -51
  61. data/lib/asciidoctor-diagram/tikz/converter.rb +56 -0
  62. data/lib/asciidoctor-diagram/tikz/extension.rb +6 -60
  63. data/lib/asciidoctor-diagram/umlet/converter.rb +24 -0
  64. data/lib/asciidoctor-diagram/umlet/extension.rb +6 -28
  65. data/lib/asciidoctor-diagram/util/cli.rb +14 -3
  66. data/lib/asciidoctor-diagram/util/cli_generator.rb +19 -1
  67. data/lib/asciidoctor-diagram/util/gif.rb +2 -2
  68. data/lib/asciidoctor-diagram/util/java.rb +1 -1
  69. data/lib/asciidoctor-diagram/util/java_socket.rb +7 -9
  70. data/lib/asciidoctor-diagram/util/pdf.rb +2 -2
  71. data/lib/asciidoctor-diagram/util/png.rb +2 -2
  72. data/lib/asciidoctor-diagram/util/svg.rb +38 -19
  73. data/lib/asciidoctor-diagram/util/which.rb +0 -29
  74. data/lib/asciidoctor-diagram/vega/converter.rb +47 -0
  75. data/lib/asciidoctor-diagram/vega/extension.rb +6 -44
  76. data/lib/asciidoctor-diagram/version.rb +1 -1
  77. data/lib/asciidoctor-diagram/wavedrom/converter.rb +50 -0
  78. data/lib/asciidoctor-diagram/wavedrom/extension.rb +6 -46
  79. data/lib/ditaa-1.3.15.jar +0 -0
  80. data/lib/ditaamini-0.12.jar +0 -0
  81. data/lib/plantuml-1.3.15.jar +0 -0
  82. data/lib/plantuml.jar +0 -0
  83. data/lib/server-1.3.15.jar +0 -0
  84. data/spec/bpmn-example.xml +44 -0
  85. data/spec/bpmn_spec.rb +96 -0
  86. data/spec/bytefield_spec.rb +230 -0
  87. data/spec/ditaa_spec.rb +32 -0
  88. data/spec/dpic_spec.rb +74 -0
  89. data/spec/gnuplot_spec.rb +478 -0
  90. data/spec/lilypond_spec.rb +151 -0
  91. data/spec/mermaid_spec.rb +33 -1
  92. data/spec/pikchr_spec.rb +106 -0
  93. data/spec/plantuml_spec.rb +90 -1
  94. data/spec/smcat_spec.rb +164 -0
  95. data/spec/symbolator_spec.rb +200 -0
  96. data/spec/test_helper.rb +0 -18
  97. metadata +73 -11
  98. data/lib/asciidoctor-diagram/extensions.rb +0 -568
  99. data/lib/ditaa-1.3.13.jar +0 -0
  100. data/lib/ditaamini-0.11.jar +0 -0
  101. data/lib/plantuml-1.3.13.jar +0 -0
  102. data/lib/server-1.3.13.jar +0 -0
@@ -1,167 +1,14 @@
1
- require_relative '../extensions'
2
- require_relative '../util/cli'
3
- require_relative '../util/cli_generator'
4
- require_relative '../util/platform'
5
- require_relative '../util/which'
1
+ require_relative 'converter'
2
+ require_relative '../diagram_processor'
6
3
 
7
4
  module Asciidoctor
8
5
  module Diagram
9
- # @private
10
- module Mermaid
11
- include CliGenerator
12
- include Which
13
-
14
- def self.included(mod)
15
- [:png, :svg].each do |f|
16
- mod.register_format(f, :image) do |parent, source|
17
- mermaid(parent, source, f)
18
- end
19
- end
20
- end
21
-
22
- def mermaid(parent_block, source, format)
23
- inherit_prefix = name
24
-
25
- options = {}
26
-
27
- css = source.attr('css', nil, inherit_prefix)
28
- if css
29
- options[:css] = parent_block.normalize_system_path(css, source.base_dir)
30
- end
31
-
32
- gantt_config = source.attr('ganttConfig', nil, inherit_prefix) || source.attr('ganttconfig', nil, inherit_prefix)
33
- if gantt_config
34
- options[:gantt] = parent_block.normalize_system_path(gantt_config, source.base_dir)
35
- end
36
-
37
- seq_config = source.attr('sequenceConfig', nil, inherit_prefix) || source.attr('sequenceconfig', nil, inherit_prefix)
38
- if seq_config
39
- options[:sequence] = parent_block.normalize_system_path(seq_config, source.base_dir)
40
- end
41
-
42
- options[:width] = source.attr('width', nil, inherit_prefix)
43
-
44
- mmdc = which(parent_block, 'mmdc', :raise_on_error => false)
45
- if mmdc
46
- options[:height] = source.attr('height', nil, inherit_prefix)
47
- options[:theme] = source.attr('theme', nil, inherit_prefix)
48
- options[:background] = source.attr('background', nil, inherit_prefix)
49
- config = source.attr('config', nil, inherit_prefix) || source.attr('config', nil, inherit_prefix)
50
- if config
51
- options[:config] = parent_block.normalize_system_path(config, source.base_dir)
52
- end
53
- run_mmdc(mmdc, source, format, options)
54
- else
55
- mermaid = which(parent_block, 'mermaid')
56
- run_mermaid(mermaid, parent_block, source, format, options)
57
- end
58
- end
59
-
60
- private
61
- def run_mmdc(mmdc, source, format, options = {})
62
- generate_file(mmdc, 'mmd', format.to_s, source.to_s) do |tool_path, input_path, output_path|
63
- args = [tool_path, '-i', Platform.native_path(input_path), '-o', Platform.native_path(output_path)]
64
-
65
- if options[:css]
66
- args << '--cssFile' << Platform.native_path(options[:css])
67
- end
68
-
69
- if options[:theme]
70
- args << '--theme' << options[:theme]
71
- end
72
-
73
- if options[:width]
74
- args << '--width' << options[:width]
75
- end
76
-
77
- if options[:height]
78
- args << '--height' << options[:height]
79
- end
80
-
81
- if options[:background]
82
- bg = options[:background]
83
- bg = "##{bg}" unless bg[0] == '#'
84
- args << '--backgroundColor' << bg
85
- end
86
-
87
- if options[:config]
88
- args << '--configFile' << Platform.native_path(options[:config])
89
- elsif options[:gantt] || options[:sequence]
90
- mermaidConfig = []
91
-
92
- if options[:gantt]
93
- mermaidConfig << "\"gantt\": #{File.read(options[:gantt])}"
94
- end
95
-
96
- if options[:sequence]
97
- configKey = config['mmdcSequenceConfigKey'] ||= begin
98
- version_parts = ::Asciidoctor::Diagram::Cli.run(mmdc, '--version')[:out].split('.').map { |p| p.to_i }
99
- major = version_parts[0] || 0
100
- minor = version_parts[1] || 0
101
- patch = version_parts[2] || 0
102
- if major > 0 || (major == 0 && minor > 4) || (major == 0 && minor == 4 && patch > 1)
103
- 'sequence'
104
- else
105
- 'sequenceDiagram'
106
- end
107
- end
108
- mermaidConfig << "\"#{configKey}\": #{File.read(options[:sequence])}"
109
- end
110
-
111
- config_file = "#{input_path}.json"
112
-
113
- File.write(config_file, "{#{mermaidConfig.join ','}}")
114
-
115
- args << '--configFile' << Platform.native_path(config_file)
116
- end
117
-
118
- args
119
- end
120
- end
121
-
122
- def run_mermaid(mermaid, parent_block, source, format, options = {})
123
- config['mermaid>=6'] ||= ::Asciidoctor::Diagram::Cli.run(mermaid, '--version')[:out].split('.')[0].to_i >= 6
124
- # Mermaid >= 6.0.0 requires PhantomJS 2.1; older version required 1.9
125
- phantomjs = which(parent_block, 'phantomjs', :alt_attrs => [config['mermaid>=6'] ? 'phantomjs_2' : 'phantomjs_19'])
126
-
127
- generate_file(mermaid, 'mmd', format.to_s, source.to_s) do |tool_path, input_path, output_path|
128
- output_dir = File.dirname(output_path)
129
- output_file = File.expand_path(File.basename(input_path) + ".#{format.to_s}", output_dir)
130
-
131
- args = [tool_path, '--phantomPath', Platform.native_path(phantomjs), "--#{format.to_s}", '-o', Platform.native_path(output_dir)]
132
-
133
- if options[:css]
134
- args << '--css' << Platform.native_path(options[:css])
135
- end
136
-
137
- if options[:gantt]
138
- args << '--gantt_config' << Platform.native_path(options[:gantt])
139
- end
140
-
141
- if options[:sequence]
142
- args << '--sequenceConfig' << Platform.native_path(options[:sequence])
143
- end
144
-
145
- if options[:width]
146
- args << '--width' << options[:width]
147
- end
148
-
149
- args << Platform.native_path(input_path)
150
-
151
- {
152
- :args => args,
153
- :out_file => output_file
154
- }
155
- end
156
- end
157
- end
158
-
159
- class MermaidBlockProcessor < Extensions::DiagramBlockProcessor
160
- include Mermaid
6
+ class MermaidBlockProcessor < DiagramBlockProcessor
7
+ use_converter MermaidConverter
161
8
  end
162
9
 
163
- class MermaidBlockMacroProcessor < Extensions::DiagramBlockMacroProcessor
164
- include Mermaid
10
+ class MermaidBlockMacroProcessor < DiagramBlockMacroProcessor
11
+ use_converter MermaidConverter
165
12
  end
166
13
  end
167
14
  end
@@ -0,0 +1,35 @@
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 MscgenConverter
9
+ include DiagramConverter
10
+ include CliGenerator
11
+
12
+
13
+ def supported_formats
14
+ [:png, :svg]
15
+ end
16
+
17
+ def collect_options(source, name)
18
+ {:font => source.attr('font', nil, name)}
19
+ end
20
+
21
+ def convert(source, format, options)
22
+ font = options[:font]
23
+
24
+ generate_stdin(source.find_command('mscgen'), 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
+ if font
27
+ args << '-F' << font
28
+ end
29
+ args << '-'
30
+ args
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
@@ -1,44 +1,14 @@
1
- require_relative '../extensions'
2
- require_relative '../util/cli_generator'
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
- # @private
9
- module Mscgen
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
- mscgen(parent, source, f)
17
- end
18
- end
19
- end
20
-
21
- def mscgen(parent, source, format)
22
- inherit_prefix = name
23
- font = source.attr('font', nil, inherit_prefix)
24
-
25
- generate_stdin(which(parent, 'mscgen'), format.to_s, source.to_s) do |tool_path, output_path|
26
- args = [tool_path, '-o', Platform.native_path(output_path), '-T', format.to_s]
27
- if font
28
- args << '-F' << font
29
- end
30
- args << '-'
31
- args
32
- end
33
- end
34
- end
35
-
36
- class MscBlockProcessor < Extensions::DiagramBlockProcessor
37
- include Mscgen
6
+ class MscBlockProcessor < DiagramBlockProcessor
7
+ use_converter MscgenConverter
38
8
  end
39
9
 
40
- class MscBlockMacroProcessor < Extensions::DiagramBlockMacroProcessor
41
- include Mscgen
10
+ class MscBlockMacroProcessor < DiagramBlockMacroProcessor
11
+ use_converter MscgenConverter
42
12
  end
43
13
  end
44
14
  end
@@ -0,0 +1,25 @@
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 NomnomlConverter
9
+ include DiagramConverter
10
+ include CliGenerator
11
+
12
+
13
+ def supported_formats
14
+ [:svg]
15
+ end
16
+
17
+
18
+ def convert(source, format, options)
19
+ generate_file(source.find_command('nomnoml'), 'nomnoml', format.to_s, source.to_s) do |tool_path, input_path, output_path|
20
+ [tool_path, Platform.native_path(input_path), Platform.native_path(output_path)]
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -1,36 +1,14 @@
1
- require_relative '../extensions'
2
- require_relative '../util/cli_generator'
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
- # @private
9
- module Nomnoml
10
- include CliGenerator
11
- include Which
12
-
13
- def self.included(mod)
14
- [:svg].each do |f|
15
- mod.register_format(f, :image) do |parent, source|
16
- nomnoml(parent, source, f)
17
- end
18
- end
19
- end
20
-
21
- def nomnoml(parent, source, format)
22
- generate_file(which(parent, 'nomnoml'), 'nomnoml', format.to_s, source.to_s) do |tool_path, input_path, output_path|
23
- [tool_path, Platform.native_path(input_path), Platform.native_path(output_path)]
24
- end
25
- end
26
- end
27
-
28
- class NomnomlBlockProcessor < Extensions::DiagramBlockProcessor
29
- include Nomnoml
6
+ class NomnomlBlockProcessor < DiagramBlockProcessor
7
+ use_converter NomnomlConverter
30
8
  end
31
9
 
32
- class NomnomlBlockMacroProcessor < Extensions::DiagramBlockMacroProcessor
33
- include Nomnoml
10
+ class NomnomlBlockMacroProcessor < DiagramBlockMacroProcessor
11
+ use_converter NomnomlConverter
34
12
  end
35
13
  end
36
14
  end
@@ -0,0 +1,7 @@
1
+ require 'asciidoctor/extensions'
2
+ require_relative 'pikchr/extension'
3
+
4
+ Asciidoctor::Extensions.register do
5
+ block Asciidoctor::Diagram::PikchrBlockProcessor, :pikchr
6
+ block_macro Asciidoctor::Diagram::PikchrBlockMacroProcessor, :pikchr
7
+ end
@@ -0,0 +1,26 @@
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 PikchrConverter
9
+ include DiagramConverter
10
+ include CliGenerator
11
+
12
+
13
+ def supported_formats
14
+ [:svg]
15
+ end
16
+
17
+ def convert(source, format, options)
18
+ pikchr_path = source.find_command('pikchr')
19
+
20
+ generate_file_stdout(pikchr_path, format.to_s, source.to_s) do |tool_path, input_path|
21
+ [tool_path, "--svg-only", input_path]
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,14 @@
1
+ require_relative 'converter'
2
+ require_relative '../diagram_processor'
3
+
4
+ module Asciidoctor
5
+ module Diagram
6
+ class PikchrBlockProcessor < DiagramBlockProcessor
7
+ use_converter PikchrConverter
8
+ end
9
+
10
+ class PikchrBlockMacroProcessor < DiagramBlockMacroProcessor
11
+ use_converter PikchrConverter
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,117 @@
1
+ require_relative '../diagram_converter'
2
+ require 'uri'
3
+
4
+ module Asciidoctor
5
+ module Diagram
6
+ # @private
7
+ class PlantUmlConverter
8
+ include DiagramConverter
9
+
10
+ JARS = [
11
+ 'plantuml-1.3.15.jar',
12
+ 'plantuml.jar',
13
+ 'jlatexmath-minimal-1.0.5.jar',
14
+ 'batik-all-1.10.jar'
15
+ ].map do |jar|
16
+ File.expand_path File.join('../..', jar), File.dirname(__FILE__)
17
+ end
18
+ Java.classpath.concat JARS
19
+
20
+ def supported_formats
21
+ [:png, :svg, :txt, :atxt, :utxt]
22
+ end
23
+
24
+ def collect_options(source, name)
25
+ {
26
+ :config => source.attr('plantumlconfig', nil, true) || source.attr('config', nil, name)
27
+ }
28
+ end
29
+
30
+ def convert(source, format, options)
31
+ Java.load
32
+
33
+ code = preprocess_code(source, self.class.tag)
34
+
35
+ case format
36
+ when :png
37
+ mime_type = 'image/png'
38
+ when :svg
39
+ mime_type = 'image/svg+xml'
40
+ when :txt, :utxt
41
+ mime_type = 'text/plain;charset=utf-8'
42
+ when :atxt
43
+ mime_type = 'text/plain'
44
+ else
45
+ raise "Unsupported format: #{format}"
46
+ end
47
+
48
+ headers = {
49
+ 'Accept' => mime_type
50
+ }
51
+
52
+ config_file = options[:config]
53
+ if config_file
54
+ headers['X-PlantUML-Config'] = File.expand_path(config_file, source.base_dir)
55
+ end
56
+
57
+ dot = source.find_command('dot', :alt_attrs => ['graphvizdot'], :raise_on_error => false)
58
+ if dot
59
+ headers['X-Graphviz'] = ::Asciidoctor::Diagram::Platform.host_os_path(dot)
60
+ end
61
+
62
+ response = Java.send_request(
63
+ :url => '/plantuml',
64
+ :body => code,
65
+ :headers => headers
66
+ )
67
+
68
+ unless response[:code] == 200
69
+ raise Java.create_error("PlantUML image generation failed", response)
70
+ end
71
+
72
+ response[:body]
73
+ end
74
+
75
+ def preprocess_code(source, tag)
76
+ code = source.to_s
77
+
78
+ code = "@start#{tag}\n#{code}\n@end#{tag}" unless code.index("@start") && code.index("@end")
79
+
80
+ code.gsub!(/(?<=<img:)[^>]+(?=>)/) do |match|
81
+ resolve_path(match, source, source.attr('imagesdir'))
82
+ end
83
+
84
+ code.gsub!(/(?:(?<=!include\s)|(?<=!includesub\s))\s*[^<][^!\n\r]+/) do |match|
85
+ resolve_path(match.lstrip, source, source.base_dir)
86
+ end
87
+
88
+ code
89
+ end
90
+
91
+ def resolve_path(path, source, base_dir)
92
+ if path =~ ::URI::ABS_URI
93
+ uri = ::URI.parse(path)
94
+ if uri.scheme == 'file'
95
+ source.resolve_path(uri.path, base_dir)
96
+ else
97
+ path
98
+ end
99
+ else
100
+ source.resolve_path(path, base_dir)
101
+ end
102
+ end
103
+ end
104
+
105
+ class UmlConverter < PlantUmlConverter
106
+ def self.tag
107
+ 'uml'
108
+ end
109
+ end
110
+
111
+ class SaltConverter < PlantUmlConverter
112
+ def self.tag
113
+ 'salt'
114
+ end
115
+ end
116
+ end
117
+ end