From b4577a130159c2638b51318cb5645c39ec85ff46 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 16 Oct 2020 06:31:28 -0300 Subject: Add GraphvizBlock plugin --- .gitignore | 3 ++- _config.yml | 1 + _plugins/graphviz-block.rb | 36 ++++++++++++++++++++++++++++++++++++ default.nix | 1 + 4 files changed, 40 insertions(+), 1 deletion(-) create mode 100644 _plugins/graphviz-block.rb diff --git a/.gitignore b/.gitignore index 476620d..94fc6b7 100644 --- a/.gitignore +++ b/.gitignore @@ -4,4 +4,5 @@ # Jekyll /.bundle/ /_site/ -/.jekyll-cache/ \ No newline at end of file +/.jekyll-cache/ +/images/graphviz/ \ No newline at end of file diff --git a/_config.yml b/_config.yml index b8467f5..3eceb93 100644 --- a/_config.yml +++ b/_config.yml @@ -32,6 +32,7 @@ exclude: - drafts/ - description - result + - images/graphviz/ collections: articles: 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) + "\"#{@alt}\"" + end + end +end + +Liquid::Template.register_tag('graphviz', Jekyll::GraphvizBlock) diff --git a/default.nix b/default.nix index f52c6a6..10d7ef0 100644 --- a/default.nix +++ b/default.nix @@ -13,6 +13,7 @@ let projectBuildInputs = with pkgs; [ jekyllEnv + graphviz nixfmt git shellcheck -- cgit v1.3