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
@@ -0,0 +1,7 @@
1
+ require 'asciidoctor/extensions'
2
+ require_relative 'lilypond/extension'
3
+
4
+ Asciidoctor::Extensions.register do
5
+ block Asciidoctor::Diagram::LilypondBlockProcessor, :lilypond
6
+ block_macro Asciidoctor::Diagram::LilypondBlockMacroProcessor, :lilypond
7
+ end
@@ -0,0 +1,54 @@
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 LilypondConverter
9
+ include DiagramConverter
10
+ include CliGenerator
11
+
12
+
13
+ def supported_formats
14
+ [:png, :pdf]
15
+ end
16
+
17
+ def collect_options(source, name)
18
+ {
19
+ :resolution => source.attr('resolution', nil, name)
20
+ }
21
+ end
22
+
23
+ def convert(source, format, options)
24
+ code = <<-EOF
25
+ \\paper{
26
+ oddFooterMarkup=##f
27
+ oddHeaderMarkup=##f
28
+ bookTitleMarkup=##f
29
+ scoreTitleMarkup=##f
30
+ }
31
+
32
+ EOF
33
+ code << source.to_s
34
+
35
+ resolution = options[:resolution]
36
+
37
+ generate_stdin(source.find_command('lilypond'), format.to_s, code) do |tool_path, output_path|
38
+ 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
+
40
+ args << '-dsafe'
41
+ args << "-dresolution=#{resolution}" if resolution
42
+ args << "-dpixmap-format=pngalpha" if format == :png
43
+
44
+ args << '-'
45
+
46
+ {
47
+ :args => args,
48
+ :out_file => "#{output_path}.#{format.to_s}"
49
+ }
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,14 @@
1
+ require_relative 'converter'
2
+ require_relative '../diagram_processor'
3
+
4
+ module Asciidoctor
5
+ module Diagram
6
+ class LilypondBlockProcessor < DiagramBlockProcessor
7
+ use_converter LilypondConverter
8
+ end
9
+
10
+ class LilypondBlockMacroProcessor < DiagramBlockMacroProcessor
11
+ use_converter LilypondConverter
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,122 @@
1
+ require_relative '../diagram_converter'
2
+ require_relative '../util/cli_generator'
3
+ require 'tempfile'
4
+ require 'open3'
5
+
6
+ module Asciidoctor
7
+ module Diagram
8
+ # @private
9
+ class MemeConverter
10
+ include DiagramConverter
11
+
12
+
13
+ def supported_formats
14
+ [:png, :gif]
15
+ end
16
+
17
+
18
+ def collect_options(source, name)
19
+ bg_img = source.attr('background', nil, name)
20
+ raise "background attribute is required" unless bg_img
21
+
22
+ options = source.attr('options', '', name).split(',')
23
+
24
+ {
25
+ :bg_img => bg_img,
26
+ :top_label => source.attr('top'),
27
+ :bottom_label => source.attr('bottom'),
28
+ :fill_color => source.attr('fillcolor', nil, name) || source.attr('fill-color', nil, name),
29
+ :stroke_color => source.attr('strokecolor', nil, name) || source.attr('stroke-color', nil, name),
30
+ :stroke_width => source.attr('strokewidth', nil, name) || source.attr('stroke-width', nil, name),
31
+ :font => source.attr('font', 'Impact', name),
32
+ :noupcase => options.include?('noupcase'),
33
+ }
34
+ end
35
+
36
+ def convert(source, format, options)
37
+ convert = source.find_command('convert')
38
+ identify = source.find_command('identify')
39
+
40
+ bg_img = options[:bg_img]
41
+ raise "background attribute is required" unless bg_img
42
+
43
+ bg_img = source.resolve_path(bg_img, source.attr('imagesdir'))
44
+
45
+ top_label = options[:top_label]
46
+ bottom_label = options[:bottom_label]
47
+ fill_color = options[:fill_color] || 'white'
48
+ stroke_color = options[:stroke_color] || 'black'
49
+ stroke_width = options[:stroke_width] || '2'
50
+ font = options[:font] || 'Impact'
51
+ noupcase = options[:noupcase]
52
+
53
+ dimensions = Cli.run(identify, '-format', '%w %h', bg_img)[:out].match(/(?<w>\d+) (?<h>\d+)/)
54
+ bg_width = dimensions['w'].to_i
55
+ bg_height = dimensions['h'].to_i
56
+ label_width = bg_width
57
+ label_height = bg_height / 5
58
+
59
+ if top_label
60
+ top_img = Tempfile.new(['meme', '.png'])
61
+ Cli.run(
62
+ convert,
63
+ '-background', 'none',
64
+ '-fill', fill_color,
65
+ '-stroke', stroke_color,
66
+ '-strokewidth', stroke_width,
67
+ '-font', font,
68
+ '-size', "#{label_width}x#{label_height}",
69
+ '-gravity', 'north',
70
+ "label:#{prepare_label(top_label, noupcase)}",
71
+ top_img.path
72
+ )
73
+ else
74
+ top_img = nil
75
+ end
76
+
77
+ if bottom_label
78
+ bottom_img = Tempfile.new(['meme', '.png'])
79
+ Cli.run(
80
+ convert,
81
+ '-background', 'none',
82
+ '-fill', fill_color,
83
+ '-stroke', stroke_color,
84
+ '-strokewidth', stroke_width,
85
+ '-font', font,
86
+ '-size', "#{label_width}x#{label_height}",
87
+ '-gravity', 'south',
88
+ "label:#{prepare_label(bottom_label, noupcase)}",
89
+ bottom_img.path
90
+ )
91
+ else
92
+ bottom_img = nil
93
+ end
94
+
95
+ final_img = Tempfile.new(['meme', ".#{format.to_s}"])
96
+
97
+ args = [convert, bg_img]
98
+ if top_img
99
+ args << top_img.path << '-geometry' << '+0+0' << '-composite'
100
+ end
101
+
102
+ if bottom_img
103
+ args << bottom_img.path << '-geometry' << "+0+#{bg_height - label_height}" << '-composite'
104
+ end
105
+
106
+ args << final_img.path
107
+
108
+ Cli.run(*args)
109
+
110
+ File.binread(final_img)
111
+ end
112
+
113
+ private
114
+
115
+ def prepare_label(label, noupcase)
116
+ label = label.upcase unless noupcase
117
+ label = label.gsub(' // ', '\n')
118
+ label
119
+ end
120
+ end
121
+ end
122
+ end
@@ -1,112 +1,10 @@
1
- require_relative '../extensions'
2
- require_relative '../util/cli_generator'
3
- require_relative '../util/which'
4
- require 'tempfile'
5
- require 'open3'
1
+ require_relative 'converter'
2
+ require_relative '../diagram_processor'
6
3
 
7
4
  module Asciidoctor
8
5
  module Diagram
9
- # @private
10
- module Meme
11
- include Which
12
-
13
- def self.included(mod)
14
- [:png, :gif].each do |format|
15
- mod.register_format(format, :image) do |parent, source|
16
- meme(parent, source, format)
17
- end
18
- end
19
- end
20
-
21
- def meme(parent_block, source, format)
22
- convert = which(parent_block, 'convert')
23
- identify = which(parent_block, 'identify')
24
- inherit_prefix = name
25
-
26
- bg_img = source.attr('background', nil, inherit_prefix)
27
- raise "background attribute is required" unless bg_img
28
-
29
- bg_img = parent_block.normalize_system_path(bg_img, parent_block.attr('imagesdir'))
30
-
31
- top_label = source.attr('top')
32
- bottom_label = source.attr('bottom')
33
- fill_color = source.attr('fillColor', 'white', inherit_prefix)
34
- stroke_color = source.attr('strokeColor', 'black', inherit_prefix)
35
- stroke_width = source.attr('strokeWidth', '2', inherit_prefix)
36
- font = source.attr('font', 'Impact', inherit_prefix)
37
- options = source.attr('options', '', inherit_prefix).split(',')
38
- noupcase = options.include?('noupcase')
39
-
40
- dimensions = Cli.run(identify, '-format', '%w %h', bg_img)[:out].match(/(?<w>\d+) (?<h>\d+)/)
41
- bg_width = dimensions['w'].to_i
42
- bg_height = dimensions['h'].to_i
43
- label_width = bg_width
44
- label_height = bg_height / 5
45
-
46
- if top_label
47
- top_img = Tempfile.new(['meme', '.png'])
48
- Cli.run(
49
- convert,
50
- '-background', 'none',
51
- '-fill', fill_color,
52
- '-stroke', stroke_color,
53
- '-strokewidth', stroke_width,
54
- '-font', font,
55
- '-size', "#{label_width}x#{label_height}",
56
- '-gravity', 'north',
57
- "label:#{prepare_label(top_label, noupcase)}",
58
- top_img.path
59
- )
60
- else
61
- top_img = nil
62
- end
63
-
64
- if bottom_label
65
- bottom_img = Tempfile.new(['meme', '.png'])
66
- Cli.run(
67
- convert,
68
- '-background', 'none',
69
- '-fill', fill_color,
70
- '-stroke', stroke_color,
71
- '-strokewidth', stroke_width,
72
- '-font', font,
73
- '-size', "#{label_width}x#{label_height}",
74
- '-gravity', 'south',
75
- "label:#{prepare_label(bottom_label, noupcase)}",
76
- bottom_img.path
77
- )
78
- else
79
- bottom_img = nil
80
- end
81
-
82
- final_img = Tempfile.new(['meme', ".#{format.to_s}"])
83
-
84
- args = [convert, bg_img]
85
- if top_img
86
- args << top_img.path << '-geometry'<< '+0+0' << '-composite'
87
- end
88
-
89
- if bottom_img
90
- args << bottom_img.path << '-geometry'<< "+0+#{bg_height - label_height}" << '-composite'
91
- end
92
-
93
- args << final_img.path
94
-
95
- Cli.run(*args)
96
-
97
- File.binread(final_img)
98
- end
99
-
100
- private
101
- def prepare_label(label, noupcase)
102
- label = label.upcase unless noupcase
103
- label = label.gsub(' // ', '\n')
104
- label
105
- end
106
- end
107
-
108
- class MemeBlockMacroProcessor < Extensions::DiagramBlockMacroProcessor
109
- include Meme
6
+ class MemeBlockMacroProcessor < DiagramBlockMacroProcessor
7
+ use_converter MemeConverter
110
8
 
111
9
  class StringReader
112
10
  def initialize(str)
@@ -123,7 +21,7 @@ module Asciidoctor
123
21
  def create_source(parent, target, attributes)
124
22
  attributes = attributes.dup
125
23
  attributes['background'] = apply_target_subs(parent, target)
126
- ::Asciidoctor::Diagram::Extensions::ReaderSource.new(parent, StringReader.new(''), attributes)
24
+ ::Asciidoctor::Diagram::ReaderSource.new(self, parent, StringReader.new(''), attributes)
127
25
  end
128
26
  end
129
27
  end
@@ -0,0 +1,179 @@
1
+ require_relative '../diagram_converter'
2
+ require_relative '../util/cli'
3
+ require_relative '../util/cli_generator'
4
+ require_relative '../util/platform'
5
+
6
+ module Asciidoctor
7
+ module Diagram
8
+ # @private
9
+ class MermaidConverter
10
+ include DiagramConverter
11
+ include CliGenerator
12
+
13
+
14
+ def supported_formats
15
+ [:png, :svg]
16
+ end
17
+
18
+ def collect_options(source, name)
19
+ options = {}
20
+
21
+ options[:css] = source.attr('css', nil, name)
22
+ options[:gantt_config] = source.attr('ganttconfig', nil, name) || source.attr('gantt-config', nil, name)
23
+ options[:seq_config] = source.attr('sequenceconfig', nil, name) || source.attr('sequence-config', nil, name)
24
+ options[:width] = source.attr('width', nil, name)
25
+ options[:height] = source.attr('height', nil, name)
26
+ options[:theme] = source.attr('theme', nil, name)
27
+ options[:background] = source.attr('background', nil, name)
28
+ options[:config] = source.attr('config', nil, name)
29
+ options[:puppeteer_config] = source.attr('puppeteerconfig', nil, name) || source.attr('puppeteer-config', nil, name)
30
+
31
+ options
32
+ end
33
+
34
+ def convert(source, format, options)
35
+ opts = {}
36
+
37
+ css = options[:css]
38
+ if css
39
+ opts[:css] = source.resolve_path(css)
40
+ end
41
+
42
+ gantt_config = options[:gantt_config]
43
+ if gantt_config
44
+ opts[:gantt] = source.resolve_path(gantt_config)
45
+ end
46
+
47
+ seq_config = options[:seq_config]
48
+ if seq_config
49
+ opts[:sequence] = source.resolve_path(seq_config)
50
+ end
51
+
52
+ puppeteer_config = options[:puppeteer_config]
53
+ if puppeteer_config
54
+ opts[:puppeteer] = source.resolve_path(puppeteer_config)
55
+ end
56
+
57
+ opts[:width] = options[:width]
58
+
59
+ mmdc = source.find_command('mmdc', :raise_on_error => false)
60
+ node = source.find_command('node', :raise_on_error => false)
61
+ if mmdc && node
62
+ opts[:height] = options[:height]
63
+ opts[:theme] = options[:theme]
64
+ opts[:background] = options[:background]
65
+ config = options[:config]
66
+ if config
67
+ opts[:config] = source.resolve_path(config)
68
+ end
69
+ run_mmdc(node, mmdc, source, format, opts)
70
+ else
71
+ mermaid = source.find_command('mermaid')
72
+ run_mermaid(mermaid, source, format, opts)
73
+ end
74
+ end
75
+
76
+ private
77
+ def run_mmdc(node, mmdc, source, format, options = {})
78
+ generate_file(node, 'mmd', format.to_s, source.to_s) do |tool_path, input_path, output_path|
79
+ args = [tool_path, '--unhandled-rejections=strict', mmdc, '-i', Platform.native_path(input_path), '-o', Platform.native_path(output_path)]
80
+
81
+ if options[:css]
82
+ args << '--cssFile' << Platform.native_path(options[:css])
83
+ end
84
+
85
+ if options[:theme]
86
+ args << '--theme' << options[:theme]
87
+ end
88
+
89
+ if options[:width]
90
+ args << '--width' << options[:width]
91
+ end
92
+
93
+ if options[:height]
94
+ args << '--height' << options[:height]
95
+ end
96
+
97
+ if options[:background]
98
+ bg = options[:background]
99
+ bg = "##{bg}" unless bg[0] == '#'
100
+ args << '--backgroundColor' << bg
101
+ end
102
+
103
+ if options[:config]
104
+ args << '--configFile' << Platform.native_path(options[:config])
105
+ elsif options[:gantt] || options[:sequence]
106
+ mermaidConfig = []
107
+
108
+ if options[:gantt]
109
+ mermaidConfig << "\"gantt\": #{File.read(options[:gantt])}"
110
+ end
111
+
112
+ if options[:sequence]
113
+ configKey = source.config['mmdcSequenceConfigKey'] ||= begin
114
+ version_parts = ::Asciidoctor::Diagram::Cli.run(mmdc, '--version')[:out].split('.').map { |p| p.to_i }
115
+ major = version_parts[0] || 0
116
+ minor = version_parts[1] || 0
117
+ patch = version_parts[2] || 0
118
+ if major > 0 || (major == 0 && minor > 4) || (major == 0 && minor == 4 && patch > 1)
119
+ 'sequence'
120
+ else
121
+ 'sequenceDiagram'
122
+ end
123
+ end
124
+ mermaidConfig << "\"#{configKey}\": #{File.read(options[:sequence])}"
125
+ end
126
+
127
+ config_file = "#{input_path}.json"
128
+
129
+ File.write(config_file, "{#{mermaidConfig.join ','}}")
130
+
131
+ args << '--configFile' << Platform.native_path(config_file)
132
+ end
133
+
134
+ if options[:puppeteer]
135
+ args << '--puppeteerConfigFile' << Platform.native_path(options[:puppeteer])
136
+ end
137
+
138
+ args
139
+ end
140
+ end
141
+
142
+ def run_mermaid(mermaid, source, format, options = {})
143
+ source.config['mermaid>=6'] ||= ::Asciidoctor::Diagram::Cli.run(mermaid, '--version')[:out].split('.')[0].to_i >= 6
144
+ # Mermaid >= 6.0.0 requires PhantomJS 2.1; older version required 1.9
145
+ phantomjs = source.find_command('phantomjs', :alt_attrs => [source.config['mermaid>=6'] ? 'phantomjs_2' : 'phantomjs_19'])
146
+
147
+ generate_file(mermaid, 'mmd', format.to_s, source.to_s) do |tool_path, input_path, output_path|
148
+ output_dir = File.dirname(output_path)
149
+ output_file = File.expand_path(File.basename(input_path) + ".#{format.to_s}", output_dir)
150
+
151
+ args = [tool_path, '--phantomPath', Platform.native_path(phantomjs), "--#{format.to_s}", '-o', Platform.native_path(output_dir)]
152
+
153
+ if options[:css]
154
+ args << '--css' << Platform.native_path(options[:css])
155
+ end
156
+
157
+ if options[:gantt]
158
+ args << '--gantt_config' << Platform.native_path(options[:gantt])
159
+ end
160
+
161
+ if options[:sequence]
162
+ args << '--sequenceConfig' << Platform.native_path(options[:sequence])
163
+ end
164
+
165
+ if options[:width]
166
+ args << '--width' << options[:width]
167
+ end
168
+
169
+ args << Platform.native_path(input_path)
170
+
171
+ {
172
+ :args => args,
173
+ :out_file => output_file
174
+ }
175
+ end
176
+ end
177
+ end
178
+ end
179
+ end