rsyntaxtree 0.8.2 → 0.8.6
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/fonts/NotoSansMath-Regular.ttf +0 -0
- data/fonts/latinmodern-math.otf +0 -0
- data/lib/rsyntaxtree/element.rb +2 -2
- data/lib/rsyntaxtree/graph.rb +73 -82
- data/lib/rsyntaxtree/svg_graph.rb +16 -10
- data/lib/rsyntaxtree/tree_graph.rb +3 -2
- data/lib/rsyntaxtree/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b25b4f9bf189bb33a19980c2cd6247a93ae2dd14df820eaa9e991425fa56b0dd
|
4
|
+
data.tar.gz: '0646683a124670135b38f5d93667cac8140a96d74c352d6bb28483cec93e3ee8'
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0dc8fdc7c0b9c4181ed50372eeebc41d75bccaf4c81db63a79da218918c0c71d70fd0fa9e6df9e8f6e46d52c4153b0934577a76fbdc03d90e23d28bda6a37811
|
7
|
+
data.tar.gz: c65b56bef0deb983be7cd81e914834de1536c07633c3709a642eedf2d3b461344d4a2ddfc0beae0f85ac0a954cf895472459919b2cf317ea2f26b633309a1f1a
|
File without changes
|
data/fonts/latinmodern-math.otf
CHANGED
File without changes
|
data/lib/rsyntaxtree/element.rb
CHANGED
@@ -25,10 +25,10 @@ class Element
|
|
25
25
|
@indent = 0 # Drawing offset
|
26
26
|
# content = content.strip
|
27
27
|
if /\A.+\^\z/ =~ content.strip
|
28
|
-
@content = content.gsub("^"){""} # The actual element content
|
28
|
+
@content = content.gsub("^"){""}.strip # The actual element content
|
29
29
|
@triangle = true # draw triangle instead of stright bar when in auto mode
|
30
30
|
else
|
31
|
-
@content = content.gsub("^"){""} # The actual element content
|
31
|
+
@content = content.gsub("^"){""}.strip # The actual element content
|
32
32
|
@triangle = false # draw triangle instead of stright bar when in auto mode
|
33
33
|
end
|
34
34
|
# workaround to save "[A [B [C] [D] ] [E [F] [G [H] [J] ] ] ]"
|
data/lib/rsyntaxtree/graph.rb
CHANGED
@@ -32,8 +32,8 @@ class Graph
|
|
32
32
|
# Calculate image dimensions
|
33
33
|
@e_height = font_size + @m[:e_padd] * 2
|
34
34
|
h = @e_list.get_level_height
|
35
|
-
w
|
36
|
-
@width
|
35
|
+
w = calc_level_width(0)
|
36
|
+
@width = w
|
37
37
|
@height = h * @e_height + (h-1) * (@m[:v_space] + font_size) + @m[:b_topbot] * 2
|
38
38
|
|
39
39
|
# Initialize the image and colors
|
@@ -50,7 +50,7 @@ class Graph
|
|
50
50
|
@col_leaf = "black"
|
51
51
|
@col_trace = "black"
|
52
52
|
end
|
53
|
-
|
53
|
+
|
54
54
|
@main_height = img_get_txt_height("l", font, font_size)
|
55
55
|
@sub_size = (font_size * SUBSCRIPT_CONST)
|
56
56
|
@sub_space_width = img_get_txt_width("l", font, @sub_size)
|
@@ -58,12 +58,11 @@ class Graph
|
|
58
58
|
|
59
59
|
def img_get_txt_metrics(text, font, font_size, multiline)
|
60
60
|
|
61
|
-
# background = Image.new(500, 250)
|
62
61
|
background = Image.new(1, 1)
|
63
62
|
|
64
63
|
gc = Draw.new
|
65
64
|
gc.annotate(background, 0, 0, 0, 0, text) do |gc|
|
66
|
-
gc.font = font
|
65
|
+
gc.font = font
|
67
66
|
gc.pointsize = font_size
|
68
67
|
gc.gravity = CenterGravity
|
69
68
|
gc.stroke = 'none'
|
@@ -110,9 +109,10 @@ class Graph
|
|
110
109
|
e = @e_list.get_first
|
111
110
|
while e
|
112
111
|
if(e.level == level)
|
113
|
-
|
112
|
+
x = calc_element_width(e)
|
113
|
+
w += x
|
114
114
|
end
|
115
|
-
|
115
|
+
e = @e_list.get_next
|
116
116
|
end
|
117
117
|
return w
|
118
118
|
end
|
@@ -150,6 +150,7 @@ class Graph
|
|
150
150
|
e_arr = @e_list.get_elements
|
151
151
|
|
152
152
|
h = @e_list.get_level_height
|
153
|
+
|
153
154
|
h.times do |i|
|
154
155
|
x = 0
|
155
156
|
e_arr.each do |j|
|
@@ -167,126 +168,116 @@ class Graph
|
|
167
168
|
if(j.parent != 0 )
|
168
169
|
words = j.content.split(" ")
|
169
170
|
unless @leafstyle == "nothing" && ETYPE_LEAF == j.type
|
170
|
-
if (@leafstyle == "
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
else
|
178
|
-
line_to_parent(x, i, cw, @e_list.get_indent(j.parent), @e_list.get_element_width(j.parent))
|
179
|
-
end
|
171
|
+
if (@leafstyle == "auto" && ETYPE_LEAF == j.type && x == parent_indent)
|
172
|
+
if words.length > 1 || j.triangle
|
173
|
+
txt_width = img_get_txt_width(j.content, @font, @font_size)
|
174
|
+
triangle_to_parent(x, i, cw, txt_width, @symmetrize)
|
175
|
+
else
|
176
|
+
line_to_parent(x, i, cw, @e_list.get_indent(j.parent), @e_list.get_element_width(j.parent))
|
177
|
+
end
|
180
178
|
else
|
181
179
|
line_to_parent(x, i, cw, @e_list.get_indent(j.parent), @e_list.get_element_width(j.parent))
|
182
180
|
end
|
183
181
|
end
|
184
182
|
end
|
185
183
|
end
|
186
|
-
|
187
184
|
x += cw
|
188
185
|
end
|
189
186
|
end
|
190
187
|
end
|
191
188
|
return true if !@symmetrize
|
189
|
+
|
190
|
+
elements_to_draw = {}
|
191
|
+
triangles_to_draw = []
|
192
|
+
lines_to_draw = []
|
193
|
+
|
194
|
+
lmost = {:level => nil, :value => nil, :type => nil}
|
195
|
+
rmost = nil
|
192
196
|
h.times do |i|
|
193
197
|
curlevel = h - i - 1
|
194
|
-
indent = 0
|
195
198
|
e_arr.each_with_index do |j, idx|
|
196
199
|
if (j.level == curlevel)
|
197
200
|
# Draw a line to the parent element
|
198
201
|
children = @e_list.get_children(j.id)
|
199
202
|
|
200
203
|
tw = img_get_txt_width(j.content, @font, @font_size)
|
201
|
-
if children.length >
|
204
|
+
if children.length > 0
|
202
205
|
left, right = -1, -1
|
203
|
-
children.each do |child|
|
206
|
+
children.each do |child|
|
204
207
|
k = @e_list.get_id(child)
|
205
|
-
kw = img_get_txt_width(k.content, @font, @font_size)
|
208
|
+
kw = img_get_txt_width(k.content, @font, @font_size)
|
206
209
|
left = k.indent + kw / 2 if k.indent + kw / 2 < left or left == -1
|
207
210
|
right = k.indent + kw / 2 if k.indent + kw / 2 > right
|
208
211
|
end
|
209
|
-
|
212
|
+
|
213
|
+
elements_to_draw[j.id] = {:left => left, :curlevel => curlevel, :width => right - left, :content => j.content, :type => j.type}
|
210
214
|
@e_list.set_indent(j.id, left + (right - left) / 2 - tw / 2)
|
211
215
|
|
212
216
|
children.each do |child|
|
213
217
|
k = @e_list.get_id(child)
|
214
218
|
words = k.content.split(" ")
|
215
219
|
dw = img_get_txt_width(k.content, @font, @font_size)
|
216
|
-
unless @leafstyle == "nothing" && ETYPE_LEAF == k.type
|
217
|
-
if (@leafstyle == "triangle" && ETYPE_LEAF == k.type && k.indent == j.indent && words.length > 0)
|
218
|
-
txt_width = img_get_txt_width(k.content, @font, @font_size)
|
219
|
-
triangle_to_parent(k.indent, curlevel + 1, dw, txt_width)
|
220
|
-
elsif (@leafstyle == "auto" && ETYPE_LEAF == k.type && k.indent == j.indent)
|
221
|
-
if words.length > 1 || k.triangle
|
222
|
-
txt_width = img_get_txt_width(k.content, @font, @font_size)
|
223
|
-
triangle_to_parent(k.indent, curlevel + 1, dw, txt_width)
|
224
|
-
else
|
225
|
-
line_to_parent(k.indent, curlevel + 1, dw, j.indent, tw)
|
226
|
-
end
|
227
|
-
else
|
228
|
-
line_to_parent(k.indent, curlevel + 1, dw, j.indent, tw)
|
229
|
-
end
|
230
|
-
end
|
231
|
-
end
|
232
220
|
|
233
|
-
|
234
|
-
unless children.empty?
|
235
|
-
k = @e_list.get_id(children[0])
|
236
|
-
kw = img_get_txt_width(k.content, @font, @font_size)
|
237
|
-
left = k.indent
|
238
|
-
right = k.indent + kw
|
239
|
-
draw_element(left, curlevel, right - left, j.content, j.type)
|
240
|
-
@e_list.set_indent(j.id, left + (right - left) / 2 - tw / 2)
|
221
|
+
children2 = @e_list.get_children(k.id)
|
241
222
|
|
242
|
-
k = @e_list.get_id(children[0])
|
243
|
-
words = k.content.split(" ")
|
244
|
-
dw = img_get_txt_width(k.content, @font, @font_size)
|
245
223
|
unless @leafstyle == "nothing" && ETYPE_LEAF == k.type
|
246
|
-
if (@leafstyle == "
|
247
|
-
txt_width = img_get_txt_width(k.content, @font, @font_size)
|
248
|
-
triangle_to_parent(k.indent, curlevel + 1, dw, txt_width)
|
249
|
-
elsif (@leafstyle == "auto" && ETYPE_LEAF == k.type)
|
224
|
+
if (@leafstyle == "auto" && ETYPE_LEAF == k.type)
|
250
225
|
if words.length > 1 || k.triangle
|
251
226
|
txt_width = img_get_txt_width(k.content, @font, @font_size)
|
252
|
-
|
227
|
+
triangles_to_draw << {:indent => k.indent, :curlevel => curlevel + 1, :width1 => dw, :width2 => txt_width}
|
253
228
|
else
|
254
|
-
|
229
|
+
lines_to_draw << {:indent1 => k.indent, :curlevel => curlevel + 1, :width1 => dw, :indent2 => j.indent, :width2 => tw}
|
255
230
|
end
|
256
231
|
else
|
257
|
-
|
258
|
-
end
|
259
|
-
end
|
260
|
-
|
261
|
-
else
|
262
|
-
parent = @e_list.get_id(j.parent)
|
263
|
-
pw = img_get_txt_width(parent.content, @font, @font_size)
|
264
|
-
pleft = parent.indent
|
265
|
-
pright = pleft + pw
|
266
|
-
if curlevel == (h - 1)
|
267
|
-
e_arr.select{|l|l.level == curlevel}.each do |l|
|
268
|
-
lw = img_get_txt_width(l.content, @font, @font_size)
|
269
|
-
left = l.indent
|
270
|
-
right = left + lw
|
271
|
-
draw_element(left, curlevel, right - left, l.content, l.type)
|
272
|
-
@e_list.set_indent(l.id, left + (right - left) / 2 - tw / 2)
|
232
|
+
lines_to_draw << {:indent1 => k.indent, :curlevel => curlevel + 1, :width1 => dw, :indent2 => j.indent, :width2 => tw}
|
273
233
|
end
|
274
|
-
break
|
275
|
-
else
|
276
|
-
left = j.indent
|
277
|
-
right = left + tw
|
278
|
-
if pw > tw
|
279
|
-
left = pleft
|
280
|
-
right = pright
|
281
|
-
end
|
282
|
-
draw_element(left, curlevel, right - left, j.content, j.type)
|
283
|
-
@e_list.set_indent(j.id, left + (right - left) / 2 - tw / 2)
|
284
234
|
end
|
285
235
|
end
|
286
236
|
|
287
237
|
end
|
238
|
+
elements = e_arr.select do |l|
|
239
|
+
l.level == curlevel && @e_list.get_children(l.id).empty?
|
240
|
+
end
|
241
|
+
|
242
|
+
elements.each.with_index do |l, idx|
|
243
|
+
lw = img_get_txt_width(l.content, @font, @font_size)
|
244
|
+
left = l.indent
|
245
|
+
right = left + lw
|
246
|
+
unless elements_to_draw.include? l.id
|
247
|
+
elements_to_draw[l.id] = {:left => left, :curlevel => curlevel, :width => right - left, :content => l.content, :type => l.type}
|
248
|
+
end
|
249
|
+
end
|
288
250
|
end
|
289
251
|
end
|
252
|
+
|
253
|
+
e_arr.each do |e|
|
254
|
+
lpos = e.indent - img_get_txt_width(e.content, @font, @font_size) / 2
|
255
|
+
next if lpos > 0
|
256
|
+
if !lmost[:value] || lmost[:value] > lpos
|
257
|
+
lmost[:level] = e.level
|
258
|
+
lmost[:value] = lpos
|
259
|
+
lmost[:type] = e
|
260
|
+
end
|
261
|
+
rpos = e.indent + e.width
|
262
|
+
rmost = rpos if !rmost || rmost < rpos
|
263
|
+
end
|
264
|
+
end
|
265
|
+
|
266
|
+
offset = 0
|
267
|
+
if lmost[:level] != h - 1
|
268
|
+
offset = lmost[:value] / -2
|
269
|
+
new_width = rmost
|
270
|
+
@width = new_width + offset
|
271
|
+
end
|
272
|
+
|
273
|
+
elements_to_draw.each do |k, v|
|
274
|
+
draw_element(v[:left] + offset, v[:curlevel], v[:width], v[:content], v[:type])
|
275
|
+
end
|
276
|
+
triangles_to_draw.each do |v|
|
277
|
+
triangle_to_parent(v[:indent] + offset, v[:curlevel], v[:width1], v[:width2])
|
278
|
+
end
|
279
|
+
lines_to_draw.each do |v|
|
280
|
+
line_to_parent(v[:indent1] + offset, v[:curlevel], v[:width1], v[:indent2] + offset, v[:width2])
|
290
281
|
end
|
291
282
|
end
|
292
283
|
|
@@ -99,6 +99,9 @@ EOD
|
|
99
99
|
elsif /\A\-(.+)\-\z/ =~ main
|
100
100
|
main = $1
|
101
101
|
main_decoration= "underline"
|
102
|
+
elsif /\A\~(.+)\~\z/ =~ main
|
103
|
+
main = $1
|
104
|
+
main_decoration= "line-through"
|
102
105
|
else
|
103
106
|
main_decoration= ""
|
104
107
|
end
|
@@ -137,6 +140,9 @@ EOD
|
|
137
140
|
elsif /\A\-(.+)\-\z/ =~ sub
|
138
141
|
sub = $1
|
139
142
|
sub_decoration= "underline"
|
143
|
+
elsif /\A\~(.+)\~\z/ =~ sub
|
144
|
+
sub = $1
|
145
|
+
sub_decoration= "line-through"
|
140
146
|
else
|
141
147
|
sub_decoration= ""
|
142
148
|
end
|
@@ -281,19 +287,19 @@ EOD
|
|
281
287
|
main_before = parts[0].strip
|
282
288
|
sub = parts[1]
|
283
289
|
main = get_txt_only(main_before)
|
284
|
-
if(main.contains_cjk?)
|
285
|
-
|
286
|
-
else
|
287
|
-
main
|
288
|
-
end
|
290
|
+
# if(main.contains_cjk?)
|
291
|
+
# main = 'n' * main.strip.size * 2
|
292
|
+
# else
|
293
|
+
# main
|
294
|
+
# end
|
289
295
|
main_metrics = img_get_txt_metrics(main, font, font_size, multiline)
|
290
296
|
width = main_metrics.width
|
291
297
|
if sub
|
292
|
-
if(sub.contains_cjk?)
|
293
|
-
|
294
|
-
else
|
295
|
-
|
296
|
-
end
|
298
|
+
# if(sub.contains_cjk?)
|
299
|
+
# sub = 'n' * sub.strip.size * 2
|
300
|
+
# else
|
301
|
+
# sub
|
302
|
+
# end
|
297
303
|
sub_metrics = img_get_txt_metrics(sub, font, font_size * SUBSCRIPT_CONST, multiline)
|
298
304
|
width += sub_metrics.width
|
299
305
|
end
|
@@ -37,8 +37,6 @@ class TreeGraph < Graph
|
|
37
37
|
super(e_list, metrics, symmetrize, color, leafstyle, multibyte, @font, @font_size)
|
38
38
|
|
39
39
|
# Initialize the image and colors
|
40
|
-
@im = Image.new(@width, @height)
|
41
|
-
@im.interlace = PlaneInterlace
|
42
40
|
@gc = Draw.new
|
43
41
|
@gc.font = @font
|
44
42
|
@gc.pointsize(@font_size)
|
@@ -50,6 +48,8 @@ class TreeGraph < Graph
|
|
50
48
|
|
51
49
|
def draw
|
52
50
|
parse_list
|
51
|
+
@im = Image.new(@width, @height)
|
52
|
+
@im.interlace = PlaneInterlace
|
53
53
|
@gc.draw(@im)
|
54
54
|
end
|
55
55
|
|
@@ -62,6 +62,7 @@ class TreeGraph < Graph
|
|
62
62
|
# by Geoffrey Grosenbach
|
63
63
|
def to_blob(fileformat='PNG')
|
64
64
|
draw
|
65
|
+
@im.trim!
|
65
66
|
@im.border!(@margin, @margin, "white")
|
66
67
|
@im.format = fileformat
|
67
68
|
@im.interlace = PlaneInterlace
|
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.8.
|
4
|
+
version: 0.8.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Yoichiro Hasebe
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-12-
|
11
|
+
date: 2021-12-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rmagick
|
@@ -110,7 +110,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
110
110
|
- !ruby/object:Gem::Version
|
111
111
|
version: '0'
|
112
112
|
requirements: []
|
113
|
-
rubygems_version: 3.2.
|
113
|
+
rubygems_version: 3.2.32
|
114
114
|
signing_key:
|
115
115
|
specification_version: 4
|
116
116
|
summary: RSyntaxTree is a graphical syntax tree generator written in Ruby
|