diff options
Diffstat (limited to '_plugins')
-rw-r--r-- | _plugins/graphviz-block.rb | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/_plugins/graphviz-block.rb b/_plugins/graphviz-block.rb new file mode 100644 index 0000000..4ddd2ee --- /dev/null +++ b/_plugins/graphviz-block.rb @@ -0,0 +1,36 @@ +require 'tempfile' +require 'digest' + +OUTPUT_DIR = '/images/graphviz' + +module Jekyll + class GraphvizBlock < Liquid::Block + def initialize(tag_name, options, tokens) + super + opts_list = options.split('|').map { |s| s.strip } + @name = opts_list[0] + @alt = opts_list[1] + end + + def render(context) + source = super + site = context.registers[:site] + FileUtils.mkdir_p(File.join(site.source, OUTPUT_DIR)) + + filename = "#{@name}-#{Digest::SHA256.hexdigest(source + @alt)}.svg" + site_path = File.join(OUTPUT_DIR, filename) + os_path = File.join(site.source, site_path) + + f = Tempfile.new('graphviz-input') + f.write(source) + f.close + `dot -Tsvg #{f.path} > #{os_path}` + f.unlink + + site.static_files << Jekyll::StaticFile.new(site, site.source, OUTPUT_DIR, filename) + "<img src=\"#{site_path}\" alt=\"#{@alt}\" />" + end + end +end + +Liquid::Template.register_tag('graphviz', Jekyll::GraphvizBlock) |