jekyll-diagrams 0.5.0 → 0.5.1
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/.gitignore +0 -1
- data/.travis.yml +8 -2
- data/README.md +13 -60
- data/lib/jekyll-diagrams/version.rb +1 -1
- data/lib/jekyll/diagrams.rb +11 -0
- data/lib/jekyll/diagrams/blockdiag.rb +16 -35
- data/lib/jekyll/diagrams/graphviz.rb +18 -36
- data/test/jekyll-diagrams_test.rb +2 -2
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 52a77bb73a18b1e0b3d922615f50a062ce500c7f7ad1d220b3f648ad1cba8ba1
|
4
|
+
data.tar.gz: 45b4d1695a7494c8a4ecfd70b0d32f33dd31007b1d63408d44f5762d5fb47639
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 012db758b38a586e03675b7af7c37ae88628361180d5ad1dd09aa6fb029c1cbd80eb98710542de4a490796cb45303aa1c5b3377536d2a8bfddf23cbc4fd80ba1
|
7
|
+
data.tar.gz: 0b62461401ae935a95c74e34412bcdb159ddf7b5f8c83d478e496d103f65d6643b7279ea12d98e8a9cdd6387e922a2c2aec1db1a6b4081d2d26324e9dea5bf19
|
data/.gitignore
CHANGED
data/.travis.yml
CHANGED
@@ -5,8 +5,14 @@ rvm:
|
|
5
5
|
- 2.5
|
6
6
|
- 2.6
|
7
7
|
|
8
|
+
addons:
|
9
|
+
apt:
|
10
|
+
packages:
|
11
|
+
- graphviz
|
12
|
+
- python3
|
13
|
+
- python3-pip
|
14
|
+
- python3-setuptools
|
15
|
+
|
8
16
|
before_install:
|
9
|
-
- sudo apt update && sudo apt install -y graphviz
|
10
|
-
- sudo apt install -y python3 python3-pip python3-setuptools
|
11
17
|
- sudo pip3 install blockdiag seqdiag actdiag nwdiag
|
12
18
|
- gem update --system && gem install bundler
|
data/README.md
CHANGED
@@ -45,12 +45,7 @@ plugins:
|
|
45
45
|
|
46
46
|
### Graphviz
|
47
47
|
|
48
|
-
You need first install graphviz with package manager on your system.
|
49
|
-
|
50
|
-
* Gentoo Linux : `emerge graphviz`
|
51
|
-
* Arch Linux : `pacman -S graphviz`
|
52
|
-
|
53
|
-
Then you can use `graphviz`, `graph`, and `digraph` Liquid Tag for creating amazing Graphviz images!
|
48
|
+
You need first install graphviz with package manager on your system. Then you can use `graphviz` Liquid Tag to create amazing Graphviz images!
|
54
49
|
|
55
50
|
```
|
56
51
|
{% graphviz %}
|
@@ -69,41 +64,18 @@ digraph {
|
|
69
64
|
{% endgraphviz %}
|
70
65
|
```
|
71
66
|
|
72
|
-
You can also use `diagraph` and `graph` tag. e.g.
|
73
|
-
|
74
|
-
```
|
75
|
-
{% digraph %}
|
76
|
-
node [shape=circle, style=filled];
|
77
|
-
S [fillcolor=green];
|
78
|
-
A [fillcolor=yellow];
|
79
|
-
B [fillcolor=yellow];
|
80
|
-
C [fillcolor=yellow];
|
81
|
-
D [shape=doublecircle, fillcolor=green];
|
82
|
-
S -> A [label=a];
|
83
|
-
S -> B [label=b];
|
84
|
-
A -> D [label=c];
|
85
|
-
B -> D [label=d];
|
86
|
-
{% enddigraph %}
|
87
|
-
```
|
88
|
-
|
89
67
|
### Blockdiag
|
90
68
|
|
91
69
|
Blockdiag contains:
|
92
70
|
|
93
|
-
* `blockdiag` :
|
94
|
-
* `seqdiag` :
|
95
|
-
* `actdiag` :
|
96
|
-
* `nwdiag` :
|
71
|
+
* `blockdiag` : generates block diagram image
|
72
|
+
* `seqdiag` : generates sequence diagram image
|
73
|
+
* `actdiag` : generates activity diagram image
|
74
|
+
* `nwdiag` : generates network diagram image
|
75
|
+
* `rackdiag` : generates rack structure diagram
|
76
|
+
* `packetdiag` : generates packet header diagram
|
97
77
|
|
98
|
-
|
99
|
-
|
100
|
-
```bash
|
101
|
-
$ pip install blockdiag seqdiag actdiag nwdiag
|
102
|
-
```
|
103
|
-
|
104
|
-
And set `$PATH` to make sure your system can find it in `$PATH`.
|
105
|
-
|
106
|
-
Then you can use `blockdiag`, `seqdiag`, `actdiag` and `nwdiag` Liquid Tag. e.g.
|
78
|
+
You need first install it and set path properly to make sure your system can find it. Then you can use `blockdiag`, `seqdiag`, `actdiag`, `nwdiag`, `rackdiag`, `packetdiag` Liquid Tag.
|
107
79
|
|
108
80
|
```
|
109
81
|
{% blockdiag %}
|
@@ -131,40 +103,21 @@ seqdiag {
|
|
131
103
|
|
132
104
|
## Configuration
|
133
105
|
|
134
|
-
You
|
135
|
-
|
106
|
+
You can to provide a configuration, this is optional.
|
107
|
+
|
108
|
+
A simple example configuration is shown below:
|
136
109
|
|
137
110
|
```yaml
|
138
111
|
diagrams:
|
139
112
|
graphviz:
|
140
113
|
engine: dot
|
141
|
-
options: '-Tsvg'
|
142
114
|
blockdiag:
|
143
|
-
options: '
|
115
|
+
options: '--antialias'
|
144
116
|
```
|
145
117
|
|
146
118
|
### Graphviz
|
147
119
|
|
148
|
-
`engine` is the default image render engine. Default is set to `dot`.
|
149
|
-
|
150
|
-
```
|
151
|
-
{% graphviz neato %}
|
152
|
-
digraph {
|
153
|
-
node [shape=circle, style=filled];
|
154
|
-
S [fillcolor=green];
|
155
|
-
A [fillcolor=yellow];
|
156
|
-
B [fillcolor=yellow];
|
157
|
-
C [fillcolor=yellow];
|
158
|
-
D [shape=doublecircle, fillcolor=green];
|
159
|
-
S -> A [label=a];
|
160
|
-
S -> B [label=b];
|
161
|
-
A -> D [label=c];
|
162
|
-
B -> D [label=d];
|
163
|
-
}
|
164
|
-
{% endgraphviz %}
|
165
|
-
```
|
166
|
-
|
167
|
-
`options` is the command line options, and will be appended to the command.
|
120
|
+
`engine` is the default image render engine. Default is set to `dot`.
|
168
121
|
|
169
122
|
### Blockdiag
|
170
123
|
|
data/lib/jekyll/diagrams.rb
CHANGED
@@ -1,3 +1,14 @@
|
|
1
1
|
require 'jekyll'
|
2
|
+
|
3
|
+
module Jekyll
|
4
|
+
module Diagrams
|
5
|
+
module Utils
|
6
|
+
def self.config_for(context, name)
|
7
|
+
context.registers[:site].config.fetch('diagrams', {}).fetch(name, {})
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
2
13
|
require 'jekyll/diagrams/graphviz'
|
3
14
|
require 'jekyll/diagrams/blockdiag'
|
@@ -4,62 +4,43 @@ require 'tempfile'
|
|
4
4
|
module Jekyll
|
5
5
|
module Diagrams
|
6
6
|
class BlockdiagBlock < Liquid::Block
|
7
|
+
DEFAULTS = {
|
8
|
+
}
|
9
|
+
OPTIONS = '-T svg --nodoctype'
|
10
|
+
|
7
11
|
def initialize(tag_name, text, tokens)
|
8
12
|
super
|
9
13
|
@tag_name = tag_name
|
10
14
|
end
|
11
15
|
|
12
16
|
def render(context)
|
13
|
-
|
14
|
-
|
15
|
-
@renderer = DiagRenderer.new(config['blockdiag'])
|
16
|
-
|
17
|
-
render_diagram(super)
|
18
|
-
end
|
19
|
-
|
20
|
-
private
|
21
|
-
|
22
|
-
def render_diagram(code)
|
23
|
-
@renderer.render(code, @tag_name)
|
24
|
-
end
|
25
|
-
end
|
17
|
+
code = super.to_s
|
18
|
+
config = DEFAULTS.merge(Utils.config_for(context, 'blockdiag'))
|
26
19
|
|
27
|
-
|
28
|
-
|
29
|
-
'options' => '-Tsvg --nodoctype'
|
30
|
-
}
|
20
|
+
tmpfile = Tempfile.new(@tag_name).path
|
21
|
+
output = "#{tmpfile}.svg"
|
31
22
|
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
def render(code, engine)
|
37
|
-
tmp = Tempfile.new(engine).path
|
38
|
-
dest = "#{tmp}.svg"
|
39
|
-
|
40
|
-
File.write(tmp, code)
|
41
|
-
cmd = "#{engine} #{@config['options']} #{tmp} -o #{dest}"
|
42
|
-
ret, status = Open3.capture2(cmd, binmode: true)
|
23
|
+
File.write(tmpfile, code)
|
24
|
+
cmd = "#@tag_name #{OPTIONS} #{config['options']} #{tmpfile} -o #{output}"
|
25
|
+
_, status = Open3.capture2(cmd, binmode: true)
|
43
26
|
|
44
27
|
if !status.success?
|
45
28
|
raise "Non-zero exit status '#{cmd}': #{status}"
|
46
29
|
end
|
47
30
|
|
48
|
-
svg = File.read(
|
49
|
-
|
50
|
-
wrap_div(svg, engine)
|
31
|
+
svg = File.read(output)
|
32
|
+
wrap(svg.force_encoding('UTF-8'))
|
51
33
|
end
|
52
34
|
|
53
35
|
private
|
54
36
|
|
55
|
-
def
|
56
|
-
"<div class='
|
37
|
+
def wrap(svg)
|
38
|
+
"<div class='diagrams #@tag_name'>#{svg}</div>"
|
57
39
|
end
|
58
40
|
end
|
59
41
|
end
|
60
42
|
end
|
61
43
|
|
62
|
-
|
63
44
|
%w(blockdiag seqdiag actdiag nwdiag rackdiag packetdiag).each do |tag|
|
64
|
-
Liquid::Template.register_tag
|
45
|
+
Liquid::Template.register_tag(tag, Jekyll::Diagrams::BlockdiagBlock)
|
65
46
|
end
|
@@ -3,62 +3,44 @@ require 'open3'
|
|
3
3
|
module Jekyll
|
4
4
|
module Diagrams
|
5
5
|
class GraphvizBlock < Liquid::Block
|
6
|
+
DEFAULTS = {
|
7
|
+
'engine' => 'dot'
|
8
|
+
}
|
9
|
+
OPTIONS = '-T svg'
|
10
|
+
|
6
11
|
def initialize(tag_name, text, tokens)
|
7
12
|
super
|
8
13
|
@tag_name = tag_name
|
9
|
-
@engine = text.strip
|
10
14
|
end
|
11
15
|
|
12
16
|
def render(context)
|
13
|
-
|
14
|
-
|
15
|
-
@renderer = GraphvizRenderer.new(config["graphviz"])
|
16
|
-
|
17
|
-
render_diagram(super)
|
18
|
-
end
|
19
|
-
|
20
|
-
private
|
17
|
+
code = super.to_s
|
18
|
+
config = DEFAULTS.merge(Utils.config_for(context, 'graphviz'))
|
21
19
|
|
22
|
-
def render_diagram(code)
|
23
20
|
code = case @tag_name
|
24
21
|
when 'graph', 'digraph'
|
22
|
+
Jekyll.logger.warn "Warning:", "graph and digraph is depreated and will remove in the later version."
|
23
|
+
Jekyll.logger.warn "", "Using graphviz instead."
|
25
24
|
"#@tag_name {\n#{code}\n}"
|
26
25
|
when 'graphviz'
|
27
26
|
code
|
28
|
-
else
|
29
|
-
raise "unknown liquid tag name: #{@tag_name}"
|
30
27
|
end
|
31
28
|
|
32
|
-
|
33
|
-
|
34
|
-
end
|
35
|
-
|
36
|
-
class GraphvizRenderer
|
37
|
-
DEFAULTS = {
|
38
|
-
'engine' => 'dot',
|
39
|
-
'options' => '-Tsvg'
|
40
|
-
}
|
41
|
-
|
42
|
-
def initialize(config)
|
43
|
-
@config = DEFAULTS.merge(config)
|
44
|
-
end
|
45
|
-
|
46
|
-
def render(code, engine = DEFAULTS['engine'])
|
47
|
-
cmd = "#{@config['engine']} #{@config['options']}"
|
48
|
-
svg, status = Open3.capture2(
|
49
|
-
cmd,
|
50
|
-
stdin_data: code,
|
51
|
-
binmode: true
|
52
|
-
)
|
29
|
+
cmd = "#{config['engine']} #{OPTIONS} #{config['options']}"
|
30
|
+
svg, status = Open3.capture2(cmd, stdin_data: code, binmode: true)
|
53
31
|
|
54
32
|
if !status.success?
|
55
33
|
raise "Non-zero exit status '#{cmd}': #{status}"
|
56
34
|
end
|
57
35
|
|
58
|
-
svg.sub!
|
59
|
-
svg.force_encoding
|
36
|
+
svg.sub!(/^<\?xml(([^>]|\n)*>\n?){4}/, '')
|
37
|
+
wrap(svg.force_encoding('UTF-8'))
|
38
|
+
end
|
39
|
+
|
40
|
+
private
|
60
41
|
|
61
|
-
|
42
|
+
def wrap(svg)
|
43
|
+
"<div class='diagrams graphviz'>#{svg}</div>"
|
62
44
|
end
|
63
45
|
end
|
64
46
|
end
|
@@ -16,10 +16,10 @@ class TestJekyllDiagrams < Minitest::Test
|
|
16
16
|
|
17
17
|
|
18
18
|
def test_render_graphviz
|
19
|
-
assert_match %r!<div class="graphviz">!, @graphviz_contents
|
19
|
+
assert_match %r!<div class="diagrams graphviz">!, @graphviz_contents
|
20
20
|
end
|
21
21
|
|
22
22
|
def test_render_blockdiag
|
23
|
-
assert_match %r!<div class="
|
23
|
+
assert_match %r!<div class="diagrams \w+">!, @blockdiag_contents
|
24
24
|
end
|
25
25
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jekyll-diagrams
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- zhustec
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-09-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: jekyll
|