rsyntaxtree 0.8.5 → 0.8.6

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9fb3b6ae45edfeea2b1b280bfc432d7f3c669b235139638fba59c633b8326e70
4
- data.tar.gz: 7c7d7e76f03a70eea5514c6d8d9bae87a4d05f78ee4ff9c63785da0058a38b9f
3
+ metadata.gz: b25b4f9bf189bb33a19980c2cd6247a93ae2dd14df820eaa9e991425fa56b0dd
4
+ data.tar.gz: '0646683a124670135b38f5d93667cac8140a96d74c352d6bb28483cec93e3ee8'
5
5
  SHA512:
6
- metadata.gz: 8f4754c519c2687b25df411c9a5025cd93363dc9bcb20cf3c7ef3281ac01fe05cf7414d35b0eb565ea00c7b3aac8d83fb4a1bb016428f1ddcb13cde08e197de3
7
- data.tar.gz: 9d3c8fa5126ca404f4d32ebc6b8af4d3feac4252d729acca6048501dea39e377ea597c8a7d406f98e46d8bb3fa22b43d3b5243678c8ae70e9fc437bf61cf2601
6
+ metadata.gz: 0dc8fdc7c0b9c4181ed50372eeebc41d75bccaf4c81db63a79da218918c0c71d70fd0fa9e6df9e8f6e46d52c4153b0934577a76fbdc03d90e23d28bda6a37811
7
+ data.tar.gz: c65b56bef0deb983be7cd81e914834de1536c07633c3709a642eedf2d3b461344d4a2ddfc0beae0f85ac0a954cf895472459919b2cf317ea2f26b633309a1f1a
@@ -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] ] ] ]"
@@ -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 = calc_level_width(0)
36
- @width = w + @m[:b_side] * 2
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
@@ -58,7 +58,6 @@ 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
@@ -110,9 +109,10 @@ class Graph
110
109
  e = @e_list.get_first
111
110
  while e
112
111
  if(e.level == level)
113
- w += calc_element_width(e)
112
+ x = calc_element_width(e)
113
+ w += x
114
114
  end
115
- e = @e_list.get_next
115
+ e = @e_list.get_next
116
116
  end
117
117
  return w
118
118
  end
@@ -168,30 +168,31 @@ class Graph
168
168
  if(j.parent != 0 )
169
169
  words = j.content.split(" ")
170
170
  unless @leafstyle == "nothing" && ETYPE_LEAF == j.type
171
- if (@leafstyle == "triangle" && ETYPE_LEAF == j.type && x == parent_indent && words.length > 0)
172
- txt_width = img_get_txt_width(j.content, @font, @font_size)
173
- triangle_to_parent(x, i, cw, txt_width, @symmetrize)
174
- elsif (@leafstyle == "auto" && ETYPE_LEAF == j.type && x == parent_indent)
175
- if words.length > 1 || j.triangle
176
- txt_width = img_get_txt_width(j.content, @font, @font_size)
177
- triangle_to_parent(x, i, cw, txt_width, @symmetrize)
178
- else
179
- line_to_parent(x, i, cw, @e_list.get_indent(j.parent), @e_list.get_element_width(j.parent))
180
- 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
181
178
  else
182
179
  line_to_parent(x, i, cw, @e_list.get_indent(j.parent), @e_list.get_element_width(j.parent))
183
180
  end
184
181
  end
185
182
  end
186
183
  end
187
-
188
184
  x += cw
189
185
  end
190
186
  end
191
187
  end
192
188
  return true if !@symmetrize
189
+
190
+ elements_to_draw = {}
191
+ triangles_to_draw = []
192
+ lines_to_draw = []
193
193
 
194
- @check = []
194
+ lmost = {:level => nil, :value => nil, :type => nil}
195
+ rmost = nil
195
196
  h.times do |i|
196
197
  curlevel = h - i - 1
197
198
  e_arr.each_with_index do |j, idx|
@@ -209,7 +210,7 @@ class Graph
209
210
  right = k.indent + kw / 2 if k.indent + kw / 2 > right
210
211
  end
211
212
 
212
- draw_element(left, curlevel, right - left, j.content, j.type)
213
+ elements_to_draw[j.id] = {:left => left, :curlevel => curlevel, :width => right - left, :content => j.content, :type => j.type}
213
214
  @e_list.set_indent(j.id, left + (right - left) / 2 - tw / 2)
214
215
 
215
216
  children.each do |child|
@@ -223,12 +224,12 @@ class Graph
223
224
  if (@leafstyle == "auto" && ETYPE_LEAF == k.type)
224
225
  if words.length > 1 || k.triangle
225
226
  txt_width = img_get_txt_width(k.content, @font, @font_size)
226
- triangle_to_parent(k.indent, curlevel + 1, dw, txt_width)
227
+ triangles_to_draw << {:indent => k.indent, :curlevel => curlevel + 1, :width1 => dw, :width2 => txt_width}
227
228
  else
228
- line_to_parent(k.indent, curlevel + 1, dw, j.indent, tw)
229
+ lines_to_draw << {:indent1 => k.indent, :curlevel => curlevel + 1, :width1 => dw, :indent2 => j.indent, :width2 => tw}
229
230
  end
230
231
  else
231
- line_to_parent(k.indent, curlevel + 1, dw, j.indent, tw)
232
+ lines_to_draw << {:indent1 => k.indent, :curlevel => curlevel + 1, :width1 => dw, :indent2 => j.indent, :width2 => tw}
232
233
  end
233
234
  end
234
235
  end
@@ -237,32 +238,46 @@ class Graph
237
238
  elements = e_arr.select do |l|
238
239
  l.level == curlevel && @e_list.get_children(l.id).empty?
239
240
  end
240
- process_terminal(elements, j, curlevel, tw)
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
250
+ end
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
241
260
  end
261
+ rpos = e.indent + e.width
262
+ rmost = rpos if !rmost || rmost < rpos
242
263
  end
243
264
  end
244
- end
245
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
246
272
 
247
- def process_terminal(elements, j, curlevel, tw)
248
- # parent = @e_list.get_id(j.parent)
249
- # return unless parent
250
- # pw = img_get_txt_width(parent.content, @font, @font_size)
251
- # pleft = parent.indent
252
- # pright = pleft + pw
253
-
254
- elements.each.with_index do |l, idx|
255
- lw = img_get_txt_width(l.content, @font, @font_size)
256
- left = l.indent
257
- right = left + lw
258
- # if pw > tw
259
- # left = pleft
260
- # right = pright
261
- # end
262
- unless @check.include? l.id
263
- draw_element(left, curlevel, right - left, l.content, l.type)
264
- @check << l.id
265
- end
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])
266
281
  end
267
282
  end
268
283
 
@@ -287,19 +287,19 @@ EOD
287
287
  main_before = parts[0].strip
288
288
  sub = parts[1]
289
289
  main = get_txt_only(main_before)
290
- if(main.contains_cjk?)
291
- main = 'n' * main.strip.size * 2
292
- else
293
- main
294
- end
290
+ # if(main.contains_cjk?)
291
+ # main = 'n' * main.strip.size * 2
292
+ # else
293
+ # main
294
+ # end
295
295
  main_metrics = img_get_txt_metrics(main, font, font_size, multiline)
296
296
  width = main_metrics.width
297
297
  if sub
298
- if(sub.contains_cjk?)
299
- sub = 'n' * sub.strip.size * 2
300
- else
301
- sub
302
- end
298
+ # if(sub.contains_cjk?)
299
+ # sub = 'n' * sub.strip.size * 2
300
+ # else
301
+ # sub
302
+ # end
303
303
  sub_metrics = img_get_txt_metrics(sub, font, font_size * SUBSCRIPT_CONST, multiline)
304
304
  width += sub_metrics.width
305
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
@@ -1,4 +1,4 @@
1
1
  module RSyntaxTree
2
- VERSION = "0.8.5"
2
+ VERSION = "0.8.6"
3
3
  end
4
4
 
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.5
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-02 00:00:00.000000000 Z
11
+ date: 2021-12-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rmagick