class Jekyll::GraphvizBlock
Constants
- DEFAULT_GRAPH_NAME
- DIV_CLASS_ATTR
- DOT_CMD
- DOT_EXEC
- DOT_EXTS
- DOT_OPTS
- DOT_PATH
Public Class Methods
new(tag_name, markup, tokens)
click to toggle source
Calls superclass method
# File doc/plugins/graphviz.rb, line 21 def initialize(tag_name, markup, tokens) super @tag_name = tag_name @title = markup or '' @title.strip! @src = '' end
Public Instance Methods
add_desc_attrs(svg)
click to toggle source
# File doc/plugins/graphviz.rb, line 94 def add_desc_attrs(svg) svg.sub!('<svg', %Q[<svg aria-label="#{CGI::escapeHTML @title}"]) svg.sub!('<svg', %Q[<svg role="img"]) return svg end
filter_for_inline_svg(code)
click to toggle source
# File doc/plugins/graphviz.rb, line 57 def filter_for_inline_svg(code) code = remove_declarations code code = remove_xmlns_attrs code code = add_desc_attrs code code = insert_desc_elements code code = wrap_with_div code code = code.gsub /<polygon fill="white" stroke="none"/, '<polygon fill="transparent" stroke="none"' code end
generate_svg(code)
click to toggle source
# File doc/plugins/graphviz.rb, line 67 def generate_svg code Open3.popen3(DOT_CMD) do |stdin, stdout, stderr| stdout.binmode stdin.print code stdin.close err = stderr.read if not (err.nil? || err.strip.empty?) raise "Error from #{DOT_CMD}:\n#{err}" end svg = stdout.read svg.force_encoding 'UTF-8' return svg end end
insert_desc_elements(svg)
click to toggle source
# File doc/plugins/graphviz.rb, line 101 def insert_desc_elements(svg) inserted_elements = %Q[<title>#{CGI::escapeHTML @title}</title>\n] inserted_elements << %Q[<desc>#{CGI::escapeHTML @src}</desc>\n] svg.sub!(/(<svg [^>]*>)/, "\\1\n#{inserted_elements}") return svg end
remove_declarations(svg)
click to toggle source
# File doc/plugins/graphviz.rb, line 85 def remove_declarations(svg) svg.sub(/<!DOCTYPE .+?>/im, '').sub(/<\?xml .+?\?>/im, '') end
remove_xmlns_attrs(svg)
click to toggle source
# File doc/plugins/graphviz.rb, line 89 def remove_xmlns_attrs(svg) svg.sub(%Q[xmlns="http://www.w3.org/2000/svg"], '') .sub(%Q[xmlns:xlink="http://www.w3.org/1999/xlink"], '') end
render(context)
click to toggle source
Calls superclass method
# File doc/plugins/graphviz.rb, line 31 def render(context) code = super title = if @title.empty? then DEFAULT_GRAPH_NAME else @title end case @tag_name when 'graphviz' then render_graphviz code when 'graph' then render_graph 'graph', title, code when 'digraph' then render_graph 'digraph', title, code else raise "unknown liquid tag name: #{@tag_name}" end end
render_graph(type, title, code)
click to toggle source
# File doc/plugins/graphviz.rb, line 113 def render_graph(type, title, code) render_graphviz %Q[#{type} "#{title}" { #{code} }] end
render_graphviz(code)
click to toggle source
# File doc/plugins/graphviz.rb, line 51 def render_graphviz(code) @src = code svg = generate_svg code filter_for_inline_svg svg end
wrap_with_div(svg)
click to toggle source
# File doc/plugins/graphviz.rb, line 109 def wrap_with_div(svg) %Q[<div class="#{DIV_CLASS_ATTR}">#{svg}</div>] end