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 .+?>/m, '').sub(/<\?xml .+?\?>/m, '')
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