module Asciidoctor::Diagram::Mermaid
@private
Public Class Methods
included(mod)
click to toggle source
# File lib/asciidoctor-diagram/mermaid/extension.rb, line 14 def self.included(mod) [:png, :svg].each do |f| mod.register_format(f, :image) do |parent, source| mermaid(parent, source, f) end end end
Public Instance Methods
mermaid(parent_block, source, format)
click to toggle source
# File lib/asciidoctor-diagram/mermaid/extension.rb, line 22 def mermaid(parent_block, source, format) inherit_prefix = name options = {} css = source.attr('css', nil, inherit_prefix) if css options[:css] = parent_block.normalize_system_path(css, source.base_dir) end gantt_config = source.attr('ganttConfig', nil, inherit_prefix) || source.attr('ganttconfig', nil, inherit_prefix) if gantt_config options[:gantt] = parent_block.normalize_system_path(gantt_config, source.base_dir) end seq_config = source.attr('sequenceConfig', nil, inherit_prefix) || source.attr('sequenceconfig', nil, inherit_prefix) if seq_config options[:sequence] = parent_block.normalize_system_path(seq_config, source.base_dir) end options[:width] = source.attr('width', nil, inherit_prefix) mmdc = which(parent_block, 'mmdc', :raise_on_error => false) if mmdc options[:height] = source.attr('height', nil, inherit_prefix) options[:theme] = source.attr('theme', nil, inherit_prefix) options[:background] = source.attr('background', nil, inherit_prefix) config = source.attr('config', nil, inherit_prefix) || source.attr('config', nil, inherit_prefix) if config options[:config] = parent_block.normalize_system_path(config, source.base_dir) end run_mmdc(mmdc, source, format, options) else mermaid = which(parent_block, 'mermaid') run_mermaid(mermaid, parent_block, source, format, options) end end
Private Instance Methods
run_mermaid(mermaid, parent_block, source, format, options = {})
click to toggle source
# File lib/asciidoctor-diagram/mermaid/extension.rb, line 122 def run_mermaid(mermaid, parent_block, source, format, options = {}) config['mermaid>=6'] ||= ::Asciidoctor::Diagram::Cli.run(mermaid, '--version')[:out].split('.')[0].to_i >= 6 # Mermaid >= 6.0.0 requires PhantomJS 2.1; older version required 1.9 phantomjs = which(parent_block, 'phantomjs', :alt_attrs => [config['mermaid>=6'] ? 'phantomjs_2' : 'phantomjs_19']) generate_file(mermaid, 'mmd', format.to_s, source.to_s) do |tool_path, input_path, output_path| output_dir = File.dirname(output_path) output_file = File.expand_path(File.basename(input_path) + ".#{format.to_s}", output_dir) args = [tool_path, '--phantomPath', Platform.native_path(phantomjs), "--#{format.to_s}", '-o', Platform.native_path(output_dir)] if options[:css] args << '--css' << Platform.native_path(options[:css]) end if options[:gantt] args << '--gantt_config' << Platform.native_path(options[:gantt]) end if options[:sequence] args << '--sequenceConfig' << Platform.native_path(options[:sequence]) end if options[:width] args << '--width' << options[:width] end args << Platform.native_path(input_path) { :args => args, :out_file => output_file } end end
run_mmdc(mmdc, source, format, options = {})
click to toggle source
# File lib/asciidoctor-diagram/mermaid/extension.rb, line 61 def run_mmdc(mmdc, source, format, options = {}) generate_file(mmdc, 'mmd', format.to_s, source.to_s) do |tool_path, input_path, output_path| args = [tool_path, '-i', Platform.native_path(input_path), '-o', Platform.native_path(output_path)] if options[:css] args << '--cssFile' << Platform.native_path(options[:css]) end if options[:theme] args << '--theme' << options[:theme] end if options[:width] args << '--width' << options[:width] end if options[:height] args << '--height' << options[:height] end if options[:background] bg = options[:background] bg = "##{bg}" unless bg[0] == '#' args << '--backgroundColor' << bg end if options[:config] args << '--configFile' << Platform.native_path(options[:config]) elsif options[:gantt] || options[:sequence] mermaidConfig = [] if options[:gantt] mermaidConfig << "\"gantt\": #{File.read(options[:gantt])}" end if options[:sequence] configKey = config['mmdcSequenceConfigKey'] ||= begin version_parts = ::Asciidoctor::Diagram::Cli.run(mmdc, '--version')[:out].split('.').map { |p| p.to_i } major = version_parts[0] || 0 minor = version_parts[1] || 0 patch = version_parts[2] || 0 if major > 0 || (major == 0 && minor > 4) || (major == 0 && minor == 4 && patch > 1) 'sequence' else 'sequenceDiagram' end end mermaidConfig << "\"#{configKey}\": #{File.read(options[:sequence])}" end config_file = "#{input_path}.json" File.write(config_file, "{#{mermaidConfig.join ','}}") args << '--configFile' << Platform.native_path(config_file) end args end end