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.
Files changed (115) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.adoc +75 -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 +59 -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 +23 -0
  17. data/lib/asciidoctor-diagram/diagram_processor.rb +357 -0
  18. data/lib/asciidoctor-diagram/diagram_source.rb +322 -0
  19. data/lib/asciidoctor-diagram/ditaa/converter.rb +90 -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 +132 -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 +58 -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 +46 -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/a2s_spec.rb +2 -140
  85. data/spec/blockdiag_spec.rb +2 -200
  86. data/spec/bpmn_spec.rb +56 -0
  87. data/spec/bytefield_spec.rb +92 -0
  88. data/spec/ditaa_spec.rb +37 -143
  89. data/spec/dpic_spec.rb +19 -0
  90. data/spec/erd_spec.rb +2 -199
  91. data/spec/gnuplot_spec.rb +225 -0
  92. data/spec/graphviz_spec.rb +6 -145
  93. data/spec/lilypond_spec.rb +13 -0
  94. data/spec/mermaid_spec.rb +35 -200
  95. data/spec/msc_spec.rb +2 -199
  96. data/spec/nomnoml_spec.rb +4 -142
  97. data/spec/pikchr_spec.rb +51 -0
  98. data/spec/plantuml_spec.rb +24 -507
  99. data/spec/shaape_spec.rb +9 -221
  100. data/spec/shared_examples.rb +552 -0
  101. data/spec/smcat_spec.rb +26 -0
  102. data/spec/svgbob_spec.rb +2 -140
  103. data/spec/symbolator_spec.rb +23 -0
  104. data/spec/syntrax_spec.rb +5 -215
  105. data/spec/test_helper.rb +1 -18
  106. data/spec/tikz_spec.rb +4 -24
  107. data/spec/umlet_spec.rb +2 -58
  108. data/spec/vega_spec.rb +4 -117
  109. data/spec/wavedrom_spec.rb +2 -199
  110. metadata +73 -11
  111. data/lib/asciidoctor-diagram/extensions.rb +0 -568
  112. data/lib/ditaa-1.3.13.jar +0 -0
  113. data/lib/ditaamini-0.11.jar +0 -0
  114. data/lib/plantuml-1.3.13.jar +0 -0
  115. 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)
18
+ {:font => source.attr('font')}
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)
25
+ {
26
+ :config => source.attr('plantumlconfig', nil, true) || source.attr('config')
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', nil, false))
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