rsyntaxtree 0.7.1 → 0.7.2
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
-
![RSyntaxTree generates multilingual syntax trees](https://i.gyazo.com/
|
58
|
+
![RSyntaxTree generates multilingual syntax trees](https://i.gyazo.com/6bb68b0bdb35d7a10c4a11d5788d484f.png)
|
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
|