Sha256: c5ec4a2bf8d6847c4da7b04fd2763591233d6218be82a572420720fbd390ce54

Contents?: true

Size: 1.08 KB

Versions: 1

Compression:

Stored size: 1.08 KB

Contents

require 'open3'
require 'tempfile'

module Jekyll
  module Diagrams
    class BlockdiagBlock < Liquid::Block
      DEFAULTS = {
      }
      OPTIONS = '-T svg --nodoctype'

      def initialize(tag_name, text, tokens)
        super
        @tag_name = tag_name
      end

      def render(context)
        code = super.to_s
        config = DEFAULTS.merge(Utils.config_for(context, 'blockdiag'))

        tmpfile = Tempfile.new(@tag_name).path
        output = "#{tmpfile}.svg"

        File.write(tmpfile, code)
        cmd = "#@tag_name #{OPTIONS} #{config['options']} #{tmpfile} -o #{output}"
        _, status = Open3.capture2(cmd, binmode: true)

        if !status.success?
          raise "Non-zero exit status '#{cmd}': #{status}"
        end

        svg = File.read(output)
        wrap(svg.force_encoding('UTF-8'))
      end

      private

      def wrap(svg)
        "<div class='diagrams #@tag_name'>#{svg}</div>"
      end
    end
  end
end

%w(blockdiag seqdiag actdiag nwdiag rackdiag packetdiag).each do |tag|
  Liquid::Template.register_tag(tag, Jekyll::Diagrams::BlockdiagBlock)
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
jekyll-diagrams-0.5.1 lib/jekyll/diagrams/blockdiag.rb