rsyntaxtree 0.8.0 → 0.8.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a93fb86aba069b61d5095d8cd565153b36ea9cdc0bd9903b2ffc656bae5986cb
4
- data.tar.gz: a11db6cdb80b0ccdc118761a4f2131915bffd3dc1a13343be4df662e13bb88b3
3
+ metadata.gz: 6dbad02f72d4b84bdaaf1db6ed5506ed4bb3c447b9b15651dc4878a8e276f3e5
4
+ data.tar.gz: 3b3c54cc2f174a4be46b827cb42f7f871e6334a28cb2df6099bf4d9521a4fbf6
5
5
  SHA512:
6
- metadata.gz: 8ce0bbb49b1c7207aa5d65958e9185dd2e28c762bf39304077b37d03c8e7a2e32b79f2b490d110a6223d1b1ca7df591f43ec82bbc7532f5f4a6c406107e55d72
7
- data.tar.gz: 66849abf7520966907cece66a1f12fc3eb29384911ddda5f518ad23ecdf7249d589edebfec98c42f35f468c1dea7204e285a38ddb37e510610bec08807d6d154
6
+ metadata.gz: 8b36dab4e18a88cf7db1874512236e8d049ddec1f06157b92215e329f323587d6055daf7e8011ada31c5533f0e71a901359db872cd367bf86a1d1065c4ab878c
7
+ data.tar.gz: e68eb7afa8b4714ab1e48861fdf5ce2237669afc0350f28f642626f9f40274fd15d4169a9cf44f418afdcbe42abaea121329503b714625a38d436a375f801f60
data/bin/rsyntaxtree CHANGED
@@ -27,9 +27,9 @@ EOS
27
27
  opt :font, "Path to a ttf font used to generate tree (optional)", :type => String
28
28
  opt :fontsize, "Size: 8-26",
29
29
  :default => 16
30
- opt :margin, "Margin: 0-120",
31
- :default => 0
32
- opt :vheight, "Connector Height: 0.5-2.0",
30
+ opt :margin, "Margin: 1-5",
31
+ :default => 1
32
+ opt :vheight, "Connector Height: 0.5-5.0",
33
33
  :default => 1.0
34
34
  opt :color, "Color text and bars: on or off",
35
35
  :default => "on"
@@ -48,8 +48,8 @@ Optimist::die :fontsize, "must be in the range of 8-26" unless opts[:fontsize] >
48
48
  Optimist::die :color, "must be either on or off" unless /\A(on|off)\z/ =~ opts[:color]
49
49
  Optimist::die :symmetrize, "must be either on or off" unless /\A(on|off)\z/ =~ opts[:symmetrize]
50
50
  Optimist::die :autosub, "must be either on or off" unless /\A(on|off)\z/ =~ opts[:autosub]
51
- Optimist::die :margin, "must be in the range of 0-120" if opts[:margin] < 0 || opts[:margin] > 120
52
- Optimist::die :vheight, "must be in the range of 0.5-2.0" if opts[:vheight] < 0.5 || opts[:vheight] > 2.0
51
+ Optimist::die :margin, "must be in the range of 1-5" if opts[:margin] < 1 || opts[:margin] > 5
52
+ Optimist::die :vheight, "must be in the range of 0.5-5.0" if opts[:vheight] < 0.5 || opts[:vheight] > 5.0
53
53
 
54
54
  string_opts = {}
55
55
  opts.each do |key, value|
@@ -58,7 +58,8 @@ class Graph
58
58
 
59
59
  def img_get_txt_metrics(text, font, font_size, multiline)
60
60
 
61
- background = Image.new(500, 250)
61
+ # background = Image.new(500, 250)
62
+ background = Image.new(1, 1)
62
63
 
63
64
  gc = Draw.new
64
65
  gc.annotate(background, 0, 0, 0, 0, text) do |gc|
@@ -286,7 +287,7 @@ class Graph
286
287
 
287
288
  def get_txt_only(text)
288
289
  text = text.strip
289
- if /\A([\+\-\=\*\~]+).+/ =~ text
290
+ if /\A([\+\-\=\*\#]+).+/ =~ text
290
291
  prefix = $1
291
292
  prefix_l = Regexp.escape(prefix)
292
293
  prefix_r = Regexp.escape(prefix.reverse)
@@ -21,15 +21,20 @@ class SVGGraph < Graph
21
21
  def initialize(e_list, metrics, symmetrize, color, leafstyle, multibyte, fontstyle, font, font_size)
22
22
 
23
23
  # Store class-specific parameters
24
- @fontstyle = fontstyle
25
24
  @font = multibyte ? font_cjk : font
26
25
  @font_size = font_size
26
+ case fontstyle
27
+ when /(?:sans|cjk)/
28
+ @fontstyle = "sans-serif"
29
+ when /(?:serif|math)/
30
+ @fontstyle = "serif"
31
+ end
27
32
 
28
33
  super(e_list, metrics, symmetrize, color, leafstyle, multibyte, @font, @font_size)
29
34
 
30
- @line_styles = "<line style='stroke:black; stroke-width:1;' x1='X1' y1='Y1' x2='X2' y2='Y2' />\n"
31
- @polygon_styles = "<polygon style='fill: none; stroke: black; stroke-width:1;' points='X1 Y1 X2 Y2 X3 Y3' />\n"
32
- @text_styles = "<text style='fill: COLOR; font-size: FONT_SIZEpx; ST; WA;' x='X_VALUE' y='Y_VALUE' TD font-family='#{@font}'>CONTENT</text>\n"
35
+ @line_styles = "<line style='stroke:black; stroke-width:#{FONT_SCALING};' x1='X1' y1='Y1' x2='X2' y2='Y2' />\n"
36
+ @polygon_styles = "<polygon style='fill: none; stroke: black; stroke-width:#{FONT_SCALING};' points='X1 Y1 X2 Y2 X3 Y3' />\n"
37
+ @text_styles = "<text style='fill: COLOR; font-size: FONT_SIZEpx; ST; WA;' x='X_VALUE' y='Y_VALUE' TD font-family='#{@fontstyle}'>CONTENT</text>\n"
33
38
  @tree_data = String.new
34
39
  end
35
40
 
@@ -115,6 +120,10 @@ EOD
115
120
  main_weight = ""
116
121
  end
117
122
 
123
+ if /\A#(.+)#\z/ =~ main
124
+ main = $1
125
+ end
126
+
118
127
  # Calculate text size for the main and the
119
128
  # subscript part of the element
120
129
  # symbols for underline/overline removed temporarily
@@ -153,6 +162,10 @@ EOD
153
162
  sub_width = 0
154
163
  end
155
164
 
165
+ if /\A#(.+)#\z/ =~ sub
166
+ sub = $1
167
+ end
168
+
156
169
  # Center text in the element
157
170
  txt_width = main_width + sub_width
158
171
  txt_pos = left + (right - left) / 2 - txt_width / 2
@@ -63,10 +63,6 @@ class TreeGraph < Graph
63
63
  def to_blob(fileformat='PNG')
64
64
  draw
65
65
  @im.border!(@margin, @margin, "white")
66
- # return @im.to_blob do
67
- # self.format = fileformat
68
- # self.interlace = PlaneInterlace
69
- # end
70
66
  @im.format = fileformat
71
67
  @im.interlace = PlaneInterlace
72
68
  return @im.to_blob
@@ -127,7 +123,7 @@ class TreeGraph < Graph
127
123
  end
128
124
  end
129
125
 
130
- if /\A\~(.+)\~\z/ =~ main
126
+ if /\A#(.+)#\z/ =~ main
131
127
  main = $1
132
128
  main_font = @font_math
133
129
  end
@@ -166,7 +162,7 @@ class TreeGraph < Graph
166
162
  end
167
163
  end
168
164
 
169
- if /\A~(.+)~\z/ =~ sub
165
+ if /\A#(.+)#\z/ =~ sub
170
166
  sub = $1
171
167
  sub_font = @font_math
172
168
  end
@@ -231,7 +227,7 @@ class TreeGraph < Graph
231
227
 
232
228
  @gc.fill("none")
233
229
  @gc.stroke @col_line
234
- @gc.stroke_width 1
230
+ @gc.stroke_width 1 * FONT_SCALING
235
231
  @gc.line(fromLeft.ceil, fromTop.ceil, toLeft.ceil, toBot.ceil)
236
232
  end
237
233
 
@@ -256,7 +252,7 @@ class TreeGraph < Graph
256
252
 
257
253
  @gc.fill("none")
258
254
  @gc.stroke @col_line
259
- @gc.stroke_width 1
255
+ @gc.stroke_width 1 * 2
260
256
  @gc.line(fromLeft1, fromTop, toLeft, toBot)
261
257
  @gc.line(fromLeft2, fromTop, toLeft, toBot)
262
258
  @gc.line(fromLeft1, fromTop, fromLeft2, fromTop)
@@ -1,4 +1,4 @@
1
1
  module RSyntaxTree
2
- VERSION = "0.8.0"
2
+ VERSION = "0.8.1"
3
3
  end
4
4
 
data/lib/rsyntaxtree.rb CHANGED
@@ -8,9 +8,9 @@
8
8
  # Facade of rsyntaxtree library. When loaded by a driver script, it does all
9
9
  # the necessary 'require' to use the library.
10
10
  #
11
- # This file is part of RSyntaxTree, which is a ruby port of Andre Eisenbach's
11
+ # This file is part of RSyntaxTree, which is originally a ruby port of Andre Eisenbach's
12
12
  # excellent program phpSyntaxTree.
13
- # Copyright (c) 2007-2018 Yoichiro Hasebe <yohasebe@gmail.com>
13
+ # Copyright (c) 2007-2021 Yoichiro Hasebe <yohasebe@gmail.com>
14
14
  # Copyright (c) 2003-2004 Andre Eisenbach <andre@ironcreek.net>
15
15
 
16
16
  $LOAD_PATH << File.join( File.dirname(__FILE__), 'rsyntaxtree')
@@ -31,8 +31,9 @@ ETYPE_UNDEFINED = 0
31
31
  ETYPE_NODE = 1
32
32
  ETYPE_LEAF = 2
33
33
  SUBSCRIPT_CONST = 0.7
34
+ FONT_SCALING = 2
34
35
 
35
- class RSGenerator
36
+ class RSGenerator
36
37
  def initialize(params = {})
37
38
  new_params = {}
38
39
  params.each do |keystr, value|
@@ -51,9 +52,9 @@ class RSGenerator
51
52
  when :symmetrize, :color, :autosub
52
53
  new_params[key] = value && value != "off" ? true : false
53
54
  when :fontsize
54
- new_params[key] = value.to_i
55
+ new_params[key] = value.to_i * FONT_SCALING
55
56
  when :margin
56
- new_params[key] = value.to_i
57
+ new_params[key] = value.to_i * FONT_SCALING * 4
57
58
  when :vheight
58
59
  new_params[key] = value.to_f
59
60
  when :fontstyle
@@ -82,11 +83,11 @@ class RSGenerator
82
83
  new_params[:font_cjk] = FONT_DIR + "/wqy-zenhei.ttf"
83
84
  new_params[:fontstyle] = "sans"
84
85
  elsif value == "modern-math" || value == "math"
85
- new_params[:font] = FONT_DIR + "/latinmodern-math.otf"
86
- new_params[:font_it] = FONT_DIR + "/lmroman10-italic.otf"
87
- new_params[:font_bd] = FONT_DIR + "/lmroman10-bold.otf"
88
- new_params[:font_bdit] = FONT_DIR + "/lmroman10-bolditalic.otf"
89
- new_params[:font_math] = FONT_DIR + "/latinmodern-math.otf"
86
+ new_params[:font] = FONT_DIR + "/latinmodern-math.otf"
87
+ new_params[:font_it] = FONT_DIR + "/lmroman10-italic.otf"
88
+ new_params[:font_bd] = FONT_DIR + "/lmroman10-bold.otf"
89
+ new_params[:font_bdit] = FONT_DIR + "/lmroman10-bolditalic.otf"
90
+ new_params[:font_math] = FONT_DIR + "/latinmodern-math.otf"
90
91
  new_params[:font_cjk] = FONT_DIR + "/NotoSerifCJKjp-Regular.otf"
91
92
  new_params[:fontstyle] = "math"
92
93
  end
@@ -112,7 +113,7 @@ class RSGenerator
112
113
  :font_it => "/NotoSans-Italic.ttf",
113
114
  :font_bd => "/NotoSans-Bold.ttf",
114
115
  :font_bdit => "/NotoSans-BoldItalic.ttf",
115
- :font_math => "/NotoSansMath-Regular.ttf"
116
+ :font_math => "/NotoSansMath-Regular.ttf"
116
117
  }
117
118
  @metrics = {
118
119
  :e_width => 120,
@@ -124,8 +125,8 @@ class RSGenerator
124
125
  }
125
126
 
126
127
  @params.merge! new_params
127
- @params[:fontsize] = @params[:fontsize] * 2
128
- @params[:margin] = @params[:margin] * 2
128
+ @params[:fontsize] = @params[:fontsize] * FONT_SCALING
129
+ @params[:margin] = @params[:margin] * FONT_SCALING
129
130
  @metrics[:v_space] = @metrics[:v_space] * @params[:vheight]
130
131
  end
131
132
 
@@ -161,7 +162,7 @@ class RSGenerator
161
162
  sp.auto_subscript if @params[:autosub]
162
163
  elist = sp.get_elementlist
163
164
  graph = SVGGraph.new(elist, @metrics,
164
- @params[:symmetrize], @params[:color], @params[:leafstyle], @params[:multibyte],
165
+ @params[:symmetrize], @params[:color], @params[:leafstyle], @params[:multibyte],
165
166
  @params[:fontstyle], @params[:font], @params[:fontsize],
166
167
  )
167
168
  graph.svg_data
@@ -175,7 +176,7 @@ class RSGenerator
175
176
  graph = TreeGraph.new(elist, @metrics,
176
177
  @params[:symmetrize], @params[:color], @params[:leafstyle], @params[:multibyte],
177
178
  @params[:fontstyle], @params[:font], @params[:font_it], @params[:font_bd], @params[:font_bdit], @params[:font_math],
178
- @params[:font_cjk], @params[:fontsize], @params[:margin],
179
+ @params[:font_cjk], @params[:fontsize], @params[:margin],
179
180
  )
180
181
  graph.to_blob(@params[:format])
181
182
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rsyntaxtree
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.0
4
+ version: 0.8.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yoichiro Hasebe