rsyntaxtree 0.7.1 → 0.7.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/README.md +5 -6
- data/bin/rsyntaxtree +11 -4
- data/lib/rsyntaxtree.rb +31 -3
- data/lib/rsyntaxtree/element.rb +0 -4
- data/lib/rsyntaxtree/string_parser.rb +1 -1
- data/lib/rsyntaxtree/svg_graph.rb +19 -25
- data/lib/rsyntaxtree/tree_graph.rb +24 -36
- data/lib/rsyntaxtree/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4579e09d625fbfed3bf8415818f1d3e1faae5f1c
|
4
|
+
data.tar.gz: b8541960fc98bc992340960990bf53a36a73730d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fa4628dc3690b7532d80ca4d093d12fef301a8054ab034d9ea8b45302e802c65ac96d3cc2ce12edba514d439d75f6851e8d4297c50e042c9a2b1e2a56f7c9735
|
7
|
+
data.tar.gz: a11e485de6a1cdc3f11be9d75e0177b6b7f46ec6fbc1b6a23ba827227e593610a99206c26271f6dd4b2cc194316cb41bbefdab7eb872c7b44c4f97bab96bfdc0
|
data/README.md
CHANGED
@@ -2,8 +2,6 @@
|
|
2
2
|
|
3
3
|
**RSyntaxTree** is a graphical syntax tree generator written in the Ruby programming language inspired by [phpSyntaxTree](http://ironcreek.net/phpsyntaxtree/).
|
4
4
|
|
5
|
-
- - -
|
6
|
-
|
7
5
|
### Web Interface
|
8
6
|
|
9
7
|
Working web interface of is available at <https://yohasebe.com/rsyntaxtree>.
|
@@ -30,11 +28,12 @@ where [options] are:
|
|
30
28
|
-n, --fontstyle=<s> Font style (available when ttf font is specified): sans, serif, mono, cjk (default: sans)
|
31
29
|
-t, --font=<s> Path to a ttf font used to generate tree (optional)
|
32
30
|
-s, --fontsize=<i> Size: 8-26 (default: 16)
|
33
|
-
-m, --margin=<i> Margin: 0-120 (default: 0)
|
34
31
|
-c, --color=<s> Color text and bars: on or off (default: on)
|
35
32
|
-y, --symmetrize=<s> Generate symmetrical, balanced tree: on or off (default: on)
|
36
33
|
-a, --autosub=<s> Put subscript numbers to nodes: on or off (default: off)
|
37
|
-
-
|
34
|
+
-m, --margin=<i> Margin: 0-120 (default: 0)
|
35
|
+
-v, --vheight=<f> Connector Height: 0.5-2.0 (default: 0.5)
|
36
|
+
-e, --version Print version and exit
|
38
37
|
-h, --help Show this message
|
39
38
|
```
|
40
39
|
|
@@ -51,12 +50,12 @@ You can put a subscript to any node by putting the _ character between the main
|
|
51
50
|
Bracket notation (auto-subscript-on):
|
52
51
|
|
53
52
|
```text
|
54
|
-
[S [NP RSyntaxTree^][VP [V generates][NP multilingual syntax trees]]]
|
53
|
+
[S [NP RSyntaxTree^][VP [V generates][NP [Adj multilingual] [NP syntax trees]]]]
|
55
54
|
```
|
56
55
|
|
57
56
|
Resulting PNG
|
58
57
|
|
59
|
-

|
60
59
|
|
61
60
|
### Development
|
62
61
|
|
data/bin/rsyntaxtree
CHANGED
@@ -18,7 +18,7 @@ EOS
|
|
18
18
|
|
19
19
|
opt :outdir, "Output directory",
|
20
20
|
:default => "./"
|
21
|
-
opt :format, "Output format: png, pdf, or svg",
|
21
|
+
opt :format, "Output format: png, gif, jpg, pdf, or svg",
|
22
22
|
:default => "png"
|
23
23
|
opt :leafstyle, "visual style of tree leaves: auto, triangle, bar, or nothing",
|
24
24
|
:default => "auto"
|
@@ -29,6 +29,8 @@ EOS
|
|
29
29
|
:default => 16
|
30
30
|
opt :margin, "Margin: 0-120",
|
31
31
|
:default => 0
|
32
|
+
opt :vheight, "Connector Height: 0.5-2.0",
|
33
|
+
:default => 1.0
|
32
34
|
opt :color, "Color text and bars: on or off",
|
33
35
|
:default => "on"
|
34
36
|
opt :symmetrize, "Generate symmetrical, balanced tree: on or off",
|
@@ -38,15 +40,16 @@ EOS
|
|
38
40
|
end
|
39
41
|
|
40
42
|
Trollop::die :outdir, "must be an exsting directory path" unless FileTest::directory?(opts[:outdir])
|
41
|
-
Trollop::die :format, "must be png or svg" unless /\A(png|pdf|svg)\z/ =~ opts[:format]
|
43
|
+
Trollop::die :format, "must be png, jpg, gif, or svg" unless /\A(png|jpg|gif|pdf|svg)\z/ =~ opts[:format]
|
42
44
|
Trollop::die :leafstyle, "must be auto, triangle, bar, or nothing" unless /\A(auto|triangle|bar|nothing)\z/ =~ opts[:leafstyle]
|
43
45
|
Trollop::die :fontstyle, "must be sans, serif, mono, cjk" unless /\A(sans|serif|mono|cjk)\z/ =~ opts[:fontstyle]
|
44
46
|
Trollop::die :font, "must be path to an existing ttf font" if opts[:font] && !File::exists?(opts[:font])
|
45
|
-
Trollop::die :fontsize, "must be in the range 8-26" unless opts[:fontsize] >= 8 && opts[:fontsize] <= 26
|
46
|
-
Trollop::die :margin, "must be in the range 0-120" if opts[:margin] < 0 || opts[:margin] > 120
|
47
|
+
Trollop::die :fontsize, "must be in the range of 8-26" unless opts[:fontsize] >= 8 && opts[:fontsize] <= 26
|
47
48
|
Trollop::die :color, "must be either on or off" unless /\A(on|off)\z/ =~ opts[:color]
|
48
49
|
Trollop::die :symmetrize, "must be either on or off" unless /\A(on|off)\z/ =~ opts[:symmetrize]
|
49
50
|
Trollop::die :autosub, "must be either on or off" unless /\A(on|off)\z/ =~ opts[:autosub]
|
51
|
+
Trollop::die :margin, "must be in the range of 0-120" if opts[:margin] < 0 || opts[:margin] > 120
|
52
|
+
Trollop::die :vheight, "must be in the range of 0.5-2.0" if opts[:vheight] < 0.5 || opts[:vheight] > 2.0
|
50
53
|
|
51
54
|
string_opts = {}
|
52
55
|
opts.each do |key, value|
|
@@ -68,6 +71,10 @@ outfile = File.new(File.expand_path(string_opts[:outdir]) + "/syntree." + ext, "
|
|
68
71
|
case ext
|
69
72
|
when "png"
|
70
73
|
outfile.write rsg.draw_png
|
74
|
+
when "jpg"
|
75
|
+
outfile.write rsg.draw_jpg
|
76
|
+
when "gif"
|
77
|
+
outfile.write rsg.draw_gif
|
71
78
|
when "pdf"
|
72
79
|
outfile.write rsg.draw_pdf
|
73
80
|
when "svg"
|
data/lib/rsyntaxtree.rb
CHANGED
@@ -42,6 +42,10 @@ require 'pp'
|
|
42
42
|
|
43
43
|
FONT_DIR = File.expand_path(File.dirname(__FILE__) + "/../fonts")
|
44
44
|
|
45
|
+
ETYPE_UNDEFINED = 0
|
46
|
+
ETYPE_NODE = 1
|
47
|
+
ETYPE_LEAF = 2
|
48
|
+
|
45
49
|
class RSGenerator
|
46
50
|
def initialize(params = {})
|
47
51
|
new_params = {}
|
@@ -63,6 +67,8 @@ class RSGenerator
|
|
63
67
|
new_params[key] = value.to_i
|
64
68
|
when :margin
|
65
69
|
new_params[key] = value.to_i
|
70
|
+
when :vheight
|
71
|
+
new_params[key] = value.to_f
|
66
72
|
when :fontstyle
|
67
73
|
if value == "noto-sans" || value == "sans"
|
68
74
|
new_params[:font] = FONT_DIR + "/NotoSansCJKjp-Regular.otf"
|
@@ -92,10 +98,22 @@ class RSGenerator
|
|
92
98
|
:font => FONT_DIR + "/NotoSansCKjp-Regular.otf",
|
93
99
|
:filename => "syntree",
|
94
100
|
:data => "",
|
95
|
-
:margin => 0
|
101
|
+
:margin => 0,
|
102
|
+
:vheight => 1.0
|
103
|
+
}
|
104
|
+
@metrics = {
|
105
|
+
:e_width => 120,
|
106
|
+
:e_padd => 14,
|
107
|
+
:v_space => 20,
|
108
|
+
:h_space => 20,
|
109
|
+
:b_side => 10,
|
110
|
+
:b_topbot => 10
|
96
111
|
}
|
97
112
|
|
98
113
|
@params.merge! new_params
|
114
|
+
@params[:fontsize] = @params[:fontsize] * 2
|
115
|
+
@params[:margin] = @params[:margin] * 2
|
116
|
+
@metrics[:v_space] = @metrics[:v_space] * @params[:vheight]
|
99
117
|
end
|
100
118
|
|
101
119
|
def self.check_data(text)
|
@@ -108,6 +126,16 @@ class RSGenerator
|
|
108
126
|
draw_tree
|
109
127
|
end
|
110
128
|
|
129
|
+
def draw_jpg
|
130
|
+
@params[:format] = "jpg"
|
131
|
+
draw_tree
|
132
|
+
end
|
133
|
+
|
134
|
+
def draw_gif
|
135
|
+
@params[:format] = "gif"
|
136
|
+
draw_tree
|
137
|
+
end
|
138
|
+
|
111
139
|
def draw_pdf
|
112
140
|
@params[:format] = "pdf"
|
113
141
|
draw_tree
|
@@ -118,7 +146,7 @@ class RSGenerator
|
|
118
146
|
sp.parse
|
119
147
|
sp.auto_subscript if @params[:autosub]
|
120
148
|
elist = sp.get_elementlist
|
121
|
-
graph = TreeGraph.new(elist,
|
149
|
+
graph = TreeGraph.new(elist, @metrics,
|
122
150
|
@params[:symmetrize], @params[:color], @params[:leafstyle], @params[:font], @params[:fontsize], @params[:format], @params[:margin])
|
123
151
|
graph.to_blob(@params[:format])
|
124
152
|
end
|
@@ -129,7 +157,7 @@ class RSGenerator
|
|
129
157
|
sp.parse
|
130
158
|
sp.auto_subscript if @params[:autosub]
|
131
159
|
elist = sp.get_elementlist
|
132
|
-
graph = SVGGraph.new(elist,
|
160
|
+
graph = SVGGraph.new(elist, @metrics,
|
133
161
|
@params[:symmetrize], @params[:color], @params[:leafstyle], @params[:font], @params[:fontsize])
|
134
162
|
graph.svg_data
|
135
163
|
end
|
data/lib/rsyntaxtree/element.rb
CHANGED
@@ -27,10 +27,6 @@
|
|
27
27
|
# along with this program; if not, write to the Free Software
|
28
28
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
29
29
|
|
30
|
-
ETYPE_UNDEFINED = 0
|
31
|
-
ETYPE_NODE = 1
|
32
|
-
ETYPE_LEAF = 2
|
33
|
-
|
34
30
|
class Element
|
35
31
|
|
36
32
|
attr_accessor :id, :parent, :type, :content, :level, :width, :indent, :triangle
|
@@ -33,30 +33,28 @@ include Magick
|
|
33
33
|
|
34
34
|
# constant variables are already set in tree_graph.rb
|
35
35
|
|
36
|
-
|
37
36
|
class SVGGraph
|
38
37
|
|
39
|
-
def initialize(e_list, symmetrize = true, color = true, leafstyle = "auto",
|
38
|
+
def initialize(e_list, metrics, symmetrize = true, color = true, leafstyle = "auto",
|
40
39
|
font = "Helvetica", font_size = 10, simple = false)
|
41
40
|
|
42
41
|
# Store parameters
|
43
42
|
@e_list = e_list
|
43
|
+
@m = metrics
|
44
44
|
@font = font
|
45
|
-
@font_size
|
45
|
+
@font_size = font_size
|
46
46
|
@leafstyle = leafstyle
|
47
47
|
@symmetrize = symmetrize
|
48
|
-
# Element dimensions
|
49
|
-
@e_width = E_WIDTH
|
50
48
|
|
51
49
|
|
52
50
|
# Calculate image dimensions
|
53
|
-
@e_height = @font_size +
|
54
|
-
h
|
55
|
-
w
|
56
|
-
w_px
|
57
|
-
h_px
|
58
|
-
@height
|
59
|
-
@width
|
51
|
+
@e_height = @font_size + @m[:e_padd] * 2
|
52
|
+
h = @e_list.get_level_height
|
53
|
+
w = calc_level_width(0)
|
54
|
+
w_px = w + @m[:b_side]
|
55
|
+
h_px = h * @e_height + (h-1) * (@m[:v_space] + @font_size) + @m[:b_topbot] * 2
|
56
|
+
@height = h_px
|
57
|
+
@width = w_px
|
60
58
|
|
61
59
|
|
62
60
|
# Initialize the image and colors
|
@@ -127,7 +125,7 @@ EOD
|
|
127
125
|
else
|
128
126
|
top = row2px(y)
|
129
127
|
end
|
130
|
-
left = x +
|
128
|
+
left = x + @m[:b_side]
|
131
129
|
bottom = top + @e_height
|
132
130
|
right = left + w
|
133
131
|
|
@@ -173,7 +171,7 @@ EOD
|
|
173
171
|
main_data = @text_styles.sub(/COLOR/, col)
|
174
172
|
main_data = main_data.sub(/FONT_SIZE/, @font_size.to_s)
|
175
173
|
main_x = txt_pos
|
176
|
-
main_y = top + @e_height -
|
174
|
+
main_y = top + @e_height - @m[:e_padd]
|
177
175
|
main_data = main_data.sub(/X_VALUE/, main_x.to_s)
|
178
176
|
main_data = main_data.sub(/Y_VALUE/, main_y.to_s)
|
179
177
|
@tree_data += main_data.sub(/CONTENT/, main)
|
@@ -182,13 +180,12 @@ EOD
|
|
182
180
|
sub_data = @text_styles.sub(/COLOR/, col)
|
183
181
|
sub_data = sub_data.sub(/FONT_SIZE/, @font_size.to_s)
|
184
182
|
sub_x = main_x + main_width + (sub_size/8)
|
185
|
-
sub_y = top + (@e_height -
|
183
|
+
sub_y = top + (@e_height - @m[:e_padd] + sub_size / 2).ceil
|
186
184
|
if (sub.length > 0 )
|
187
185
|
sub_data = sub_data.sub(/X_VALUE/, sub_x.ceil.to_s)
|
188
186
|
sub_data = sub_data.sub(/Y_VALUE/, sub_y.ceil.to_s)
|
189
187
|
@tree_data += sub_data.sub(/CONTENT/, sub)
|
190
188
|
end
|
191
|
-
|
192
189
|
end
|
193
190
|
|
194
191
|
# Draw a line between child/parent elements
|
@@ -199,9 +196,9 @@ EOD
|
|
199
196
|
end
|
200
197
|
|
201
198
|
fromTop = row2px(fromY)
|
202
|
-
fromLeft = (fromX + fromW / 2 +
|
199
|
+
fromLeft = (fromX + fromW / 2 + @m[:b_side])
|
203
200
|
toBot = (row2px(fromY - 1 ) + @e_height)
|
204
|
-
toLeft = (toX + toW / 2 +
|
201
|
+
toLeft = (toX + toW / 2 + @m[:b_side])
|
205
202
|
|
206
203
|
line_data = @line_styles.sub(/X1/, fromLeft.ceil.to_s.to_s)
|
207
204
|
line_data = line_data.sub(/Y1/, fromTop.ceil.to_s.to_s)
|
@@ -217,7 +214,7 @@ EOD
|
|
217
214
|
end
|
218
215
|
|
219
216
|
toX = fromX
|
220
|
-
fromCenter = (fromX + fromW / 2 +
|
217
|
+
fromCenter = (fromX + fromW / 2 + @m[:b_side])
|
221
218
|
|
222
219
|
fromTop = row2px(fromY).ceil
|
223
220
|
fromLeft1 = (fromCenter + textW / 2).ceil
|
@@ -225,9 +222,9 @@ EOD
|
|
225
222
|
toBot = (row2px(fromY - 1) + @e_height)
|
226
223
|
|
227
224
|
if symmetrize
|
228
|
-
toLeft = (toX + textW / 2 +
|
225
|
+
toLeft = (toX + textW / 2 + @m[:b_side])
|
229
226
|
else
|
230
|
-
toLeft = (toX + textW / 2 +
|
227
|
+
toLeft = (toX + textW / 2 + @m[:b_side] * 3)
|
231
228
|
end
|
232
229
|
|
233
230
|
polygon_data = @polygon_styles.sub(/X1/, fromLeft1.ceil.to_s)
|
@@ -465,11 +462,8 @@ EOD
|
|
465
462
|
end
|
466
463
|
end
|
467
464
|
|
468
|
-
|
469
465
|
# Calculate top position from row (level)
|
470
466
|
def row2px(row)
|
471
|
-
|
467
|
+
@m[:b_topbot] + @e_height * row + (@m[:v_space] + @font_size) * row
|
472
468
|
end
|
473
|
-
|
474
469
|
end
|
475
|
-
|
@@ -29,47 +29,36 @@
|
|
29
29
|
|
30
30
|
require 'imgutils'
|
31
31
|
require 'elementlist'
|
32
|
-
# require 'rubygems'
|
33
32
|
require 'rmagick'
|
34
33
|
include Magick
|
35
34
|
|
36
|
-
# Double to make image retina ready
|
37
|
-
E_WIDTH = 60 * 2 # Element width
|
38
|
-
E_PADD = 7 * 2 # Element height padding
|
39
|
-
V_SPACE = 20 * 2
|
40
|
-
H_SPACE = 10 * 2
|
41
|
-
B_SIDE = 5 * 2
|
42
|
-
B_TOPBOT = 5 * 2
|
43
|
-
|
44
35
|
class TreeGraph
|
45
36
|
|
46
|
-
def initialize(e_list, symmetrize = true, color = true, terminal = "auto",
|
37
|
+
def initialize(e_list, metrics, symmetrize = true, color = true, terminal = "auto",
|
47
38
|
font = "Helvetica", font_size = 10, simple = false, margin = 0)
|
48
39
|
|
49
40
|
# Store parameters (double font size and margin to make image retina ready)
|
50
41
|
@e_list = e_list
|
42
|
+
@m = metrics
|
51
43
|
@font = font
|
52
|
-
@terminal
|
44
|
+
@terminal = terminal
|
53
45
|
@symmetrize = symmetrize
|
54
|
-
@simple
|
55
|
-
@font_size
|
56
|
-
@margin
|
46
|
+
@simple = simple
|
47
|
+
@font_size = font_size
|
48
|
+
@margin = margin
|
57
49
|
|
58
|
-
# Element dimensions
|
59
|
-
@e_width = E_WIDTH
|
60
|
-
|
61
50
|
# Calculate image dimensions
|
62
|
-
@e_height = @font_size +
|
63
|
-
h
|
64
|
-
w
|
65
|
-
w_px
|
66
|
-
h_px
|
67
|
-
@height
|
68
|
-
@width
|
51
|
+
@e_height = @font_size + metrics[:e_padd] * 2
|
52
|
+
h = @e_list.get_level_height
|
53
|
+
w = calc_level_width(0)
|
54
|
+
w_px = w + metrics[:b_side] * 2
|
55
|
+
h_px = h * @e_height + (h-1) * (metrics[:v_space] + @font_size) + metrics[:b_topbot] * 2
|
56
|
+
@height = h_px
|
57
|
+
@width = w_px
|
69
58
|
|
70
59
|
# Initialize the image and colors
|
71
|
-
@im
|
72
|
-
@gc
|
60
|
+
@im = Image.new(w_px, h_px)
|
61
|
+
@gc = Draw.new
|
73
62
|
@gc.font = @font
|
74
63
|
@gc.pointsize(@font_size)
|
75
64
|
|
@@ -123,7 +112,7 @@ class TreeGraph
|
|
123
112
|
else
|
124
113
|
top = row2px(y)
|
125
114
|
end
|
126
|
-
left = x +
|
115
|
+
left = x + @m[:b_side]
|
127
116
|
bottom = top + @e_height
|
128
117
|
right = left + w
|
129
118
|
|
@@ -172,14 +161,14 @@ class TreeGraph
|
|
172
161
|
# Draw main text
|
173
162
|
@gc.pointsize(@font_size)
|
174
163
|
main_x = txt_pos
|
175
|
-
main_y = top + @e_height -
|
164
|
+
main_y = top + @e_height - @m[:e_padd]
|
176
165
|
@gc.text(main_x.ceil, main_y.ceil, main)
|
177
166
|
|
178
167
|
# Draw subscript text
|
179
168
|
if (sub.length > 0 )
|
180
169
|
@gc.pointsize(sub_size)
|
181
170
|
sub_x = txt_pos + main_width + (sub_size/8)
|
182
|
-
sub_y = top + (@e_height -
|
171
|
+
sub_y = top + (@e_height - @m[:e_padd] + sub_size / 2)
|
183
172
|
@gc.text(sub_x.ceil, sub_y.ceil, sub)
|
184
173
|
end
|
185
174
|
|
@@ -193,9 +182,9 @@ class TreeGraph
|
|
193
182
|
end
|
194
183
|
|
195
184
|
fromTop = row2px(fromY)
|
196
|
-
fromLeft = (fromX + fromW / 2 +
|
185
|
+
fromLeft = (fromX + fromW / 2 + @m[:b_side])
|
197
186
|
toBot = (row2px(fromY - 1 ) + @e_height)
|
198
|
-
toLeft = (toX + toW / 2 +
|
187
|
+
toLeft = (toX + toW / 2 + @m[:b_side])
|
199
188
|
|
200
189
|
@gc.fill("none")
|
201
190
|
@gc.stroke @col_line
|
@@ -210,16 +199,16 @@ class TreeGraph
|
|
210
199
|
end
|
211
200
|
|
212
201
|
toX = fromX
|
213
|
-
fromCenter = (fromX + fromW / 2 +
|
202
|
+
fromCenter = (fromX + fromW / 2 + @m[:b_side])
|
214
203
|
|
215
204
|
fromTop = row2px(fromY).ceil
|
216
205
|
fromLeft1 = (fromCenter + textW / 2).ceil
|
217
206
|
fromLeft2 = (fromCenter - textW / 2).ceil
|
218
207
|
toBot = (row2px(fromY - 1) + @e_height)
|
219
208
|
if symmetrize
|
220
|
-
toLeft = (toX + textW / 2 +
|
209
|
+
toLeft = (toX + textW / 2 + @m[:b_side])
|
221
210
|
else
|
222
|
-
toLeft = (toX + textW / 2 +
|
211
|
+
toLeft = (toX + textW / 2 + @m[:b_side] * 3)
|
223
212
|
end
|
224
213
|
|
225
214
|
@gc.fill("none")
|
@@ -455,7 +444,6 @@ class TreeGraph
|
|
455
444
|
end
|
456
445
|
|
457
446
|
def row2px(row)
|
458
|
-
|
447
|
+
@m[:b_topbot] + @e_height * row + (@m[:v_space] + @font_size) * row
|
459
448
|
end
|
460
|
-
|
461
449
|
end
|
data/lib/rsyntaxtree/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rsyntaxtree
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.7.
|
4
|
+
version: 0.7.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Yoichiro Hasebe
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-03-
|
11
|
+
date: 2018-03-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rmagick
|