class Slippery::Processors::GraphvizDot

Turn embedded dot files into embedded SVGs

Public Class Methods

call(doc) click to toggle source
# File lib/slippery/processors/graphviz_dot.rb, line 11
def self.call(doc)
  self.new.call(doc)
end
new(selector = '.language-dot') click to toggle source
# File lib/slippery/processors/graphviz_dot.rb, line 7
def initialize(selector = '.language-dot')
  @selector = selector
end

Public Instance Methods

call(doc) click to toggle source
# File lib/slippery/processors/graphviz_dot.rb, line 15
def call(doc)
  doc
    .replace(@selector, &create_svg_from_dot)
    .replace('polygon[fill=white][stroke=white]') { [] }
end
copy_width_height(node) click to toggle source
# File lib/slippery/processors/graphviz_dot.rb, line 34
def copy_width_height(node)
  ->(svg) do
    return svg unless node[:width] || node[:height]
    [:width, :height].each do |attr|
      svg = svg.remove_attr(attr)
      svg = svg.attr(attr, node[attr]) if node[attr]
    end
    svg
  end
end
create_svg_from_dot() click to toggle source
# File lib/slippery/processors/graphviz_dot.rb, line 21
def create_svg_from_dot
  ->(node) do
    dot_to_hexp(node.text).process(copy_width_height(node))
  end
end
dot_to_hexp(dot_source) click to toggle source
# File lib/slippery/processors/graphviz_dot.rb, line 27
def dot_to_hexp(dot_source)
  file = Tempfile.new(['slippery','.dot'])
  file << dot_source
  file.close
  Hexp.parse(`dot #{file.path} -Tsvg`)
end