Class: Asciidoctor::Diagram::PlantUmlConverter

Inherits:
Object
  • Object
show all
Includes:
DiagramConverter
Defined in:
lib/asciidoctor-diagram/plantuml/converter.rb

Direct Known Subclasses

SaltConverter, UmlConverter

Constant Summary collapse

CLASSPATH_ENV =
'DIAGRAM_PLANTUML_CLASSPATH'
LIB_DIR =
File.expand_path('../..', File.dirname(__FILE__))
PLANTUML_JARS =
if ENV.has_key?(CLASSPATH_ENV)
  ENV[CLASSPATH_ENV].split(File::PATH_SEPARATOR)
else
  begin
    require 'asciidoctor-diagram/plantuml/classpath'
    ::Asciidoctor::Diagram::PlantUmlClasspath::JAR_FILES
  rescue LoadError
    raise "Could not load PlantUML. Eiter require 'asciidoctor-diagram-plantuml' or specify the location of the PlantUML JAR(s) using the 'DIAGRAM_PLANTUML_CLASSPATH' environment variable."
  end
end

Instance Method Summary collapse

Methods included from DiagramConverter

#native_scaling?

Instance Method Details

#collect_options(source) ⇒ Object



35
36
37
38
39
# File 'lib/asciidoctor-diagram/plantuml/converter.rb', line 35

def collect_options(source)
  {
      :size_limit => source.attr('size-limit', '4096')
  }
end

#convert(source, format, options) ⇒ Object



41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
# File 'lib/asciidoctor-diagram/plantuml/converter.rb', line 41

def convert(source, format, options)
  Java.load

  code = source.code

  case format
  when :png
    mime_type = 'image/png'
  when :svg
    mime_type = 'image/svg+xml'
  when :txt, :utxt
    mime_type = 'text/plain;charset=utf-8'
  when :atxt
    mime_type = 'text/plain'
  else
    raise "Unsupported format: #{format}"
  end

  headers = {
      'Accept' => mime_type
  }

  size_limit = options[:size_limit]
  if size_limit
    headers['X-PlantUML-SizeLimit'] = size_limit
  end

  dot = source.find_command('dot', :alt_attrs => ['graphvizdot'], :raise_on_error => false)
  if dot
    headers['X-Graphviz'] = ::Asciidoctor::Diagram::Platform.host_os_path(dot)
  end

  response = Java.send_request(
      :url => '/plantuml',
      :body => code,
      :headers => headers
  )

  unless response[:code] == 200
    raise Java.create_error("PlantUML image generation failed", response)
  end

  response[:body]
end

#supported_formatsObject



31
32
33
# File 'lib/asciidoctor-diagram/plantuml/converter.rb', line 31

def supported_formats
  [:png, :svg, :txt, :atxt, :utxt]
end

#wrap_source(source) ⇒ Object



27
28
29
# File 'lib/asciidoctor-diagram/plantuml/converter.rb', line 27

def wrap_source(source)
  PlantUMLPreprocessedSource.new(source, self.class.tag)
end