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