jekyll-diagrams 0.9.1 → 0.9.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.github/workflows/test.yml +83 -0
- data/.gitignore +4 -5
- data/.rubocop.yml +22 -0
- data/.simplecov +5 -0
- data/.travis.yml +48 -1
- data/Dockerfile +14 -12
- data/Gemfile +4 -1
- data/README.md +49 -21
- data/Rakefile +20 -2
- data/features/blockdiag.feature +20 -0
- data/features/graphviz.feature +22 -0
- data/features/mermaid.feature +21 -0
- data/features/nomnoml.feature +36 -0
- data/features/plantuml.feature +24 -0
- data/features/smcat.feature +29 -0
- data/features/step_definitions/jekyll-diagrams.rb +25 -0
- data/features/support/env.rb +33 -0
- data/features/svgbob.feature +22 -0
- data/features/syntrax.feature +22 -0
- data/features/vega.feature +32 -0
- data/features/wavedrom.feature +22 -0
- data/jekyll-diagrams.gemspec +13 -7
- data/lib/jekyll-diagrams.rb +3 -2
- data/lib/jekyll-diagrams/block.rb +5 -4
- data/lib/jekyll-diagrams/blockdiag.rb +9 -7
- data/lib/jekyll-diagrams/erd.rb +9 -6
- data/lib/jekyll-diagrams/graphviz.rb +12 -17
- data/lib/jekyll-diagrams/mermaid.rb +21 -18
- data/lib/jekyll-diagrams/nomnoml.rb +6 -4
- data/lib/jekyll-diagrams/plantuml.rb +8 -4
- data/lib/jekyll-diagrams/smcat.rb +10 -7
- data/lib/jekyll-diagrams/svgbob.rb +6 -4
- data/lib/jekyll-diagrams/syntrax.rb +8 -6
- data/lib/jekyll-diagrams/util.rb +78 -11
- data/lib/jekyll-diagrams/vega.rb +8 -5
- data/lib/jekyll-diagrams/version.rb +4 -2
- data/lib/jekyll-diagrams/wavedrom.rb +6 -4
- data/test/erd_test.rb +22 -0
- data/test/test_helper.rb +4 -7
- data/test/util_test.rb +20 -0
- metadata +54 -11
- data/lib/jekyll-diagrams/renderer.rb +0 -53
@@ -1,29 +1,32 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Jekyll
|
2
|
-
|
3
|
-
|
4
|
-
|
4
|
+
module Diagrams
|
5
|
+
class MermaidBlock < Block
|
6
|
+
CONFIGURATIONS = %w[backgroundColor height theme width].freeze
|
5
7
|
|
6
|
-
|
7
|
-
|
8
|
+
def render_svg(code, config)
|
9
|
+
command = build_command(config)
|
8
10
|
|
9
|
-
|
10
|
-
|
11
|
-
end
|
11
|
+
render_with_tempfile(command, code) do |input, output|
|
12
|
+
"--input #{input} --output #{output}"
|
12
13
|
end
|
14
|
+
end
|
13
15
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
CONFIGURATIONS.each do |conf|
|
20
|
-
command << " --#{conf} #{config[conf]}" if config.has_key?(conf)
|
21
|
-
end
|
16
|
+
def build_command(config)
|
17
|
+
command = +'mmdc'
|
18
|
+
command << ' --puppeteerConfigFile '
|
19
|
+
command << vendor_path('mermaid_puppeteer_config.json')
|
20
|
+
command << ' --transparent' if config.fetch('transparent', false) != false
|
22
21
|
|
23
|
-
|
22
|
+
CONFIGURATIONS.each do |conf|
|
23
|
+
command << " --#{conf} #{config[conf]}" if config.key?(conf)
|
24
24
|
end
|
25
|
+
|
26
|
+
command
|
25
27
|
end
|
26
28
|
end
|
27
29
|
end
|
30
|
+
end
|
28
31
|
|
29
|
-
|
32
|
+
Liquid::Template.register_tag(:mermaid, Jekyll::Diagrams::MermaidBlock)
|
@@ -1,19 +1,21 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Jekyll
|
2
4
|
module Diagrams
|
3
5
|
class NomnomlBlock < Block
|
4
6
|
def render_svg(code, config)
|
5
7
|
command = build_command(config)
|
6
8
|
|
7
|
-
render_with_tempfile(command, code, stdout: true) do |
|
8
|
-
|
9
|
+
render_with_tempfile(command, code, stdout: true) do |input|
|
10
|
+
input
|
9
11
|
end
|
10
12
|
end
|
11
13
|
|
12
|
-
def build_command(
|
14
|
+
def build_command(_config)
|
13
15
|
'nomnoml'
|
14
16
|
end
|
15
17
|
end
|
16
18
|
end
|
17
19
|
end
|
18
20
|
|
19
|
-
Liquid::Template.register_tag(:nomnoml, Jekyll::Diagrams::NomnomlBlock)
|
21
|
+
Liquid::Template.register_tag(:nomnoml, Jekyll::Diagrams::NomnomlBlock)
|
@@ -1,15 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Jekyll
|
2
4
|
module Diagrams
|
3
5
|
class PlantUMLBlock < Block
|
6
|
+
XML_REGEX = /^<\?xml([^>]|\n)*>\n?/.freeze
|
7
|
+
|
4
8
|
def render_svg(code, config)
|
5
9
|
command = build_command(config)
|
6
10
|
|
7
11
|
svg = render_with_stdin_stdout(command, code)
|
8
|
-
svg.sub!(
|
12
|
+
svg.sub!(XML_REGEX, '')
|
9
13
|
end
|
10
14
|
|
11
|
-
def build_command(
|
12
|
-
options = 'java'
|
15
|
+
def build_command(_config)
|
16
|
+
options = +'java'
|
13
17
|
options << ' -Djava.awt.headless=true'
|
14
18
|
options << ' -jar '
|
15
19
|
options << vendor_path('plantuml.1.2020.1.jar')
|
@@ -19,4 +23,4 @@ module Jekyll
|
|
19
23
|
end
|
20
24
|
end
|
21
25
|
|
22
|
-
Liquid::Template.register_tag(:plantuml, Jekyll::Diagrams::PlantUMLBlock)
|
26
|
+
Liquid::Template.register_tag(:plantuml, Jekyll::Diagrams::PlantUMLBlock)
|
@@ -1,23 +1,26 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Jekyll
|
2
4
|
module Diagrams
|
3
5
|
class SMCatBlock < Block
|
4
|
-
|
6
|
+
XML_REGEX = /^<\?xml(([^>]|\n)*>\n?){2}/.freeze
|
7
|
+
CONFIGURATIONS = %w[direction engine input-type].freeze
|
5
8
|
|
6
9
|
def render_svg(code, config)
|
7
10
|
command = build_command(config)
|
8
11
|
|
9
|
-
svg = render_with_tempfile(command, code, stdout: true) do |
|
10
|
-
"#{
|
12
|
+
svg = render_with_tempfile(command, code, stdout: true) do |input|
|
13
|
+
"#{input} --output-to -"
|
11
14
|
end
|
12
15
|
|
13
|
-
svg.sub!(
|
16
|
+
svg.sub!(XML_REGEX, '')
|
14
17
|
end
|
15
18
|
|
16
19
|
def build_command(config)
|
17
|
-
command = 'smcat'
|
20
|
+
command = +'smcat'
|
18
21
|
|
19
22
|
CONFIGURATIONS.each do |conf|
|
20
|
-
command << " --#{conf} #{config[conf]}" if config.
|
23
|
+
command << " --#{conf} #{config[conf]}" if config.key?(conf)
|
21
24
|
end
|
22
25
|
|
23
26
|
command
|
@@ -26,4 +29,4 @@ module Jekyll
|
|
26
29
|
end
|
27
30
|
end
|
28
31
|
|
29
|
-
Liquid::Template.register_tag(:smcat, Jekyll::Diagrams::SMCatBlock)
|
32
|
+
Liquid::Template.register_tag(:smcat, Jekyll::Diagrams::SMCatBlock)
|
@@ -1,7 +1,9 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Jekyll
|
2
4
|
module Diagrams
|
3
5
|
class SvgbobBlock < Block
|
4
|
-
CONFIGURATIONS = %w
|
6
|
+
CONFIGURATIONS = %w[font-family font-size scale stroke-width].freeze
|
5
7
|
|
6
8
|
def render_svg(code, config)
|
7
9
|
command = build_command(config)
|
@@ -10,10 +12,10 @@ module Jekyll
|
|
10
12
|
end
|
11
13
|
|
12
14
|
def build_command(config)
|
13
|
-
command = 'svgbob'
|
15
|
+
command = +'svgbob'
|
14
16
|
|
15
17
|
CONFIGURATIONS.each do |conf|
|
16
|
-
command << " --#{conf} #{config[conf]}" if config.
|
18
|
+
command << " --#{conf} #{config[conf]}" if config.key?(conf)
|
17
19
|
end
|
18
20
|
|
19
21
|
command
|
@@ -22,4 +24,4 @@ module Jekyll
|
|
22
24
|
end
|
23
25
|
end
|
24
26
|
|
25
|
-
Liquid::Template.register_tag(:svgbob, Jekyll::Diagrams::SvgbobBlock)
|
27
|
+
Liquid::Template.register_tag(:svgbob, Jekyll::Diagrams::SvgbobBlock)
|
@@ -1,21 +1,23 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Jekyll
|
2
4
|
module Diagrams
|
3
5
|
class SyntraxBlock < Block
|
4
|
-
CONFIGURATIONS = %w
|
6
|
+
CONFIGURATIONS = %w[scale style].freeze
|
5
7
|
|
6
8
|
def render_svg(code, config)
|
7
9
|
command = build_command(config)
|
8
10
|
|
9
|
-
render_with_tempfile(command, code) do |
|
10
|
-
"
|
11
|
+
render_with_tempfile(command, code) do |input, output|
|
12
|
+
"--input #{input} --output #{output}"
|
11
13
|
end
|
12
14
|
end
|
13
15
|
|
14
16
|
def build_command(config)
|
15
|
-
command = 'syntrax'
|
17
|
+
command = +'syntrax'
|
16
18
|
|
17
19
|
CONFIGURATIONS.each do |conf|
|
18
|
-
command << " --#{conf} #{config[conf]}" if config.
|
20
|
+
command << " --#{conf} #{config[conf]}" if config.key?(conf)
|
19
21
|
end
|
20
22
|
|
21
23
|
command
|
@@ -24,4 +26,4 @@ module Jekyll
|
|
24
26
|
end
|
25
27
|
end
|
26
28
|
|
27
|
-
Liquid::Template.register_tag(:syntrax, Jekyll::Diagrams::SyntraxBlock)
|
29
|
+
Liquid::Template.register_tag(:syntrax, Jekyll::Diagrams::SyntraxBlock)
|
data/lib/jekyll-diagrams/util.rb
CHANGED
@@ -1,28 +1,95 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'open3'
|
4
|
+
require 'tempfile'
|
5
|
+
|
1
6
|
module Jekyll
|
2
7
|
module Diagrams
|
3
8
|
module Util
|
4
|
-
|
9
|
+
module_function
|
5
10
|
|
6
11
|
def diagrams_config(context)
|
7
|
-
site_config = context.registers[:site].config
|
8
|
-
|
9
|
-
old_config = site_config.fetch('diagrams', {})
|
10
|
-
|
11
|
-
return new_config if old_config.empty?
|
12
|
+
site_config = context.registers[:site].config.fetch(config_name, {})
|
13
|
+
page_config = context.registers[:page].fetch(config_name, {})
|
12
14
|
|
13
|
-
|
14
|
-
Jekyll.warn " Rename it to `jekyll-diagram` instead."
|
15
|
-
|
16
|
-
old_config.merge(new_config)
|
15
|
+
site_config.merge(page_config)
|
17
16
|
end
|
18
17
|
|
19
18
|
def config_for(context, name)
|
20
19
|
diagrams_config(context).fetch(name, {})
|
21
20
|
end
|
22
21
|
|
22
|
+
def config_name
|
23
|
+
'jekyll-diagrams'
|
24
|
+
end
|
25
|
+
|
23
26
|
def vendor_path(file = '')
|
24
27
|
File.join(File.expand_path('../../vendor', __dir__), file)
|
25
28
|
end
|
29
|
+
|
30
|
+
def normalized_attrs(attrs, prefix:, sep: '=')
|
31
|
+
attrs = case attrs
|
32
|
+
when String
|
33
|
+
attrs
|
34
|
+
when Array
|
35
|
+
attrs.join(prefix)
|
36
|
+
when Hash
|
37
|
+
attrs.map { |k, v| "#{k}#{sep}#{v}" }.join(prefix)
|
38
|
+
end
|
39
|
+
|
40
|
+
"#{prefix}#{attrs}"
|
41
|
+
end
|
42
|
+
|
43
|
+
def render_with_stdin_stdout(command, content)
|
44
|
+
render_with_stdin(command, content, stdout: true)
|
45
|
+
end
|
46
|
+
|
47
|
+
def render_with_stdin(command, content, stdout: false, &block)
|
48
|
+
if stdout == true
|
49
|
+
render_with_command(command, :stdout, stdin_data: content)
|
50
|
+
else
|
51
|
+
output = Tempfile.open(['jekyll_diagrams_output', '.svg'])
|
52
|
+
output.close
|
53
|
+
extra = block.call(ouput.path)
|
54
|
+
command = "#{command} #{extra}"
|
55
|
+
|
56
|
+
render_with_command(command, output.path, stdin_data: content)
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
def render_with_tempfile(command, content, stdout: false, &block)
|
61
|
+
Tempfile.open('jekyll_diagrams_input') do |input|
|
62
|
+
File.write(input.path, content)
|
63
|
+
|
64
|
+
if stdout == true
|
65
|
+
extra = block.call(input.path)
|
66
|
+
command = "#{command} #{extra}"
|
67
|
+
|
68
|
+
render_with_command(command, :stdout)
|
69
|
+
else
|
70
|
+
output = Tempfile.open(['jekyll_diagrams_output', '.svg'])
|
71
|
+
output.close
|
72
|
+
extra = block.call(input.path, output.path)
|
73
|
+
command = "#{command} #{extra}"
|
74
|
+
|
75
|
+
render_with_command(command, output.path)
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
def render_with_command(command, output, options = {})
|
81
|
+
stdout, stderr, status = Open3.capture3(command, options)
|
82
|
+
|
83
|
+
unless status.success?
|
84
|
+
raise <<~MESSAGE
|
85
|
+
Failed to render command: #{command}
|
86
|
+
#{stdout}
|
87
|
+
#{stderr}
|
88
|
+
MESSAGE
|
89
|
+
end
|
90
|
+
|
91
|
+
output == :stdout ? stdout : File.read(output)
|
92
|
+
end
|
26
93
|
end
|
27
94
|
end
|
28
|
-
end
|
95
|
+
end
|
data/lib/jekyll-diagrams/vega.rb
CHANGED
@@ -1,20 +1,23 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Jekyll
|
2
4
|
module Diagrams
|
3
5
|
class VegaBlock < Block
|
4
|
-
CONFIGURATIONS = %w
|
6
|
+
CONFIGURATIONS = %w[scale].freeze
|
5
7
|
|
6
8
|
def render_svg(code, config)
|
7
9
|
code = render_with_stdin_stdout('vl2vg', code) if block_name == 'vegalite'
|
10
|
+
|
8
11
|
command = build_command(config)
|
9
12
|
|
10
13
|
render_with_stdin_stdout(command, code)
|
11
14
|
end
|
12
15
|
|
13
16
|
def build_command(config)
|
14
|
-
command = 'vg2svg'
|
17
|
+
command = +'vg2svg'
|
15
18
|
|
16
19
|
CONFIGURATIONS.each do |conf|
|
17
|
-
command << " --#{conf} #{config[conf]}" if config.
|
20
|
+
command << " --#{conf} #{config[conf]}" if config.key?(conf)
|
18
21
|
end
|
19
22
|
|
20
23
|
command
|
@@ -23,6 +26,6 @@ module Jekyll
|
|
23
26
|
end
|
24
27
|
end
|
25
28
|
|
26
|
-
%i
|
29
|
+
%i[vega vegalite].each do |tag|
|
27
30
|
Liquid::Template.register_tag(tag, Jekyll::Diagrams::VegaBlock)
|
28
|
-
end
|
31
|
+
end
|
@@ -1,19 +1,21 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Jekyll
|
2
4
|
module Diagrams
|
3
5
|
class WavedromBlock < Block
|
4
6
|
def render_svg(code, config)
|
5
7
|
command = build_command(config)
|
6
8
|
|
7
|
-
render_with_tempfile(command, code) do |
|
8
|
-
"
|
9
|
+
render_with_tempfile(command, code) do |input, output|
|
10
|
+
"--input #{input} --svg #{output}"
|
9
11
|
end
|
10
12
|
end
|
11
13
|
|
12
|
-
def build_command(
|
14
|
+
def build_command(_config)
|
13
15
|
'wavedrom-cli'
|
14
16
|
end
|
15
17
|
end
|
16
18
|
end
|
17
19
|
end
|
18
20
|
|
19
|
-
Liquid::Template.register_tag(:wavedrom, Jekyll::Diagrams::WavedromBlock)
|
21
|
+
Liquid::Template.register_tag(:wavedrom, Jekyll::Diagrams::WavedromBlock)
|
data/test/erd_test.rb
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'test_helper'
|
4
|
+
|
5
|
+
class ErdTest < Minitest::Test
|
6
|
+
def setup
|
7
|
+
@block = Jekyll::Diagrams::ErdBlock.send(
|
8
|
+
:new, 'erd', '', Liquid::ParseContext.new
|
9
|
+
)
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_build_command_with_default_config
|
13
|
+
config = {}
|
14
|
+
assert_equal 'erd --fmt=svg', @block.build_command(config)
|
15
|
+
|
16
|
+
config = { 'edge' => 'compound' }
|
17
|
+
assert_match 'edge', @block.build_command(config)
|
18
|
+
|
19
|
+
config = { 'dot-entity' => true }
|
20
|
+
assert_match 'dot-entity', @block.build_command(config)
|
21
|
+
end
|
22
|
+
end
|
data/test/test_helper.rb
CHANGED
@@ -1,16 +1,13 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
|
2
3
|
lib = File.expand_path('../lib', __dir__)
|
3
4
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
5
|
|
5
6
|
require 'coveralls'
|
6
|
-
|
7
7
|
Coveralls.wear!
|
8
8
|
|
9
|
+
require 'minitest/autorun'
|
10
|
+
|
9
11
|
require 'fileutils'
|
10
12
|
require 'jekyll'
|
11
|
-
|
12
|
-
require 'jekyll-diagrams/util'
|
13
|
-
require 'jekyll-diagrams/renderer'
|
14
|
-
require 'jekyll-diagrams/block'
|
15
|
-
|
16
|
-
require 'minitest/autorun'
|
13
|
+
require 'jekyll-diagrams'
|
data/test/util_test.rb
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'test_helper'
|
4
|
+
|
5
|
+
class UtilTest < Minitest::Test
|
6
|
+
include Jekyll::Diagrams::Util
|
7
|
+
|
8
|
+
def test_normalized_attrs
|
9
|
+
attrs = 'color=red'
|
10
|
+
assert_equal ' -Ecolor=red', normalized_attrs(attrs, prefix: ' -E')
|
11
|
+
|
12
|
+
attrs = %w[color=red background=green]
|
13
|
+
assert_equal ' -Gcolor=red -Gbackground=green',
|
14
|
+
normalized_attrs(attrs, prefix: ' -G')
|
15
|
+
|
16
|
+
attrs = { 'color' => 'red', 'background' => 'green' }
|
17
|
+
assert_equal ' -Ncolor=red -Nbackground=green',
|
18
|
+
normalized_attrs(attrs, prefix: ' -N')
|
19
|
+
end
|
20
|
+
end
|