module Markdoc::Pseudocode

Public Class Methods

draw(code, format = :svg) click to toggle source
# File lib/markdoc/pseudocode.rb, line 103
def self.draw(code, format = :svg)
  parser = PseudocodeParser.new
  tree = parser.parse(code)

  if(tree.nil?)
    puts parser.failure_reason
    raise "Can't generate graphviz code"
  else
    digest = Digest::MD5.hexdigest code

    graphviz = nil
    Tempfile.open([digest, '.gv']) do |file|
      file.write "digraph G {\n"
      tree.out(file)
      file.write "}\n"
      graphviz = file.path
    end

    if format == :graphviz
      return IO.read(graphviz)
    end

    image = Tempfile.new([digest, ".#{format}"])
    image.close

    if system("dot -n -T#{format} -o#{image.path} #{graphviz}")
      IO.read image
    else
      raise "Can't generate flowchart"
    end
  end
end