rsyntaxtree 0.7.3 → 0.8.0

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
- SHA1:
3
- metadata.gz: '0586aec9488760401c729ef70db38c730883341e'
4
- data.tar.gz: f9f95b8713cbcef850c3be737e5cd2cd2c3babe5
2
+ SHA256:
3
+ metadata.gz: a93fb86aba069b61d5095d8cd565153b36ea9cdc0bd9903b2ffc656bae5986cb
4
+ data.tar.gz: a11db6cdb80b0ccdc118761a4f2131915bffd3dc1a13343be4df662e13bb88b3
5
5
  SHA512:
6
- metadata.gz: cbbe7a1e063d5098f40b0f67b1fe832b92ff58b3bb7d9b3823ccafae6979dd1930c7b7ac5f787b0cdf17eeda267c15faf5c2305b843576cff15b83f062bd6be3
7
- data.tar.gz: dfa583dbcf971ccaab04ce2db7f3dd633e0110e575063ab82cf80b740e73348397d41afa6922595d2a12c0a709b717f48ac7949f626d0235a907eb14223f1e76
6
+ metadata.gz: 8ce0bbb49b1c7207aa5d65958e9185dd2e28c762bf39304077b37d03c8e7a2e32b79f2b490d110a6223d1b1ca7df591f43ec82bbc7532f5f4a6c406107e55d72
7
+ data.tar.gz: 66849abf7520966907cece66a1f12fc3eb29384911ddda5f518ad23ecdf7249d589edebfec98c42f35f468c1dea7204e285a38ddb37e510610bec08807d6d154
data/Gemfile CHANGED
@@ -1,4 +1,4 @@
1
1
  source "http://rubygems.org"
2
2
 
3
3
  gem 'rmagick'
4
- gem 'trollop'
4
+ gem 'optimist'
data/README.md CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  ### Web Interface
6
6
 
7
- Working web interface of is available at <https://yohasebe.com/rsyntaxtree>.
7
+ See updates and a working web interface available at <https://yohasebe.com/rsyntaxtree>.
8
8
 
9
9
  ### Installation
10
10
 
@@ -25,7 +25,7 @@ where [options] are:
25
25
  -o, --outdir=<s> Output directory (default: ./)
26
26
  -f, --format=<s> Output format: png, pdf, or svg (default: png)
27
27
  -l, --leafstyle=<s> visual style of tree leaves: auto, triangle, bar, or nothing (default: auto)
28
- -n, --fontstyle=<s> Font style: sans, serif, cjk (default: sans)
28
+ -n, --fontstyle=<s> Font style: sans, serif, cjk, math (default: sans)
29
29
  -t, --font=<s> Path to a ttf font used to generate tree (optional)
30
30
  -s, --fontsize=<i> Size: 8-26 (default: 16)
31
31
  -c, --color=<s> Color text and bars: on or off (default: on)
@@ -45,6 +45,8 @@ There are several modes in which the connectors between terminal nodes and their
45
45
 
46
46
  You can put a subscript to any node by putting the _ character between the main label and the subscript. For example, NP_TOP will be rendered as NP<sub>TOP</sub>. Or you can select the &#8220;Auto subscript&#8221; option so that nodes of the same label will be automatically numbered. (e.g. NP<sub>1</sub>, NP<sub>2</sub>)</p>
47
47
 
48
+ See https://yohasebe.com/rsyntaxtree for more detailed info about the syntax.
49
+
48
50
  ### Example
49
51
 
50
52
  Bracket notation (auto-subscript-on):
data/bin/rsyntaxtree CHANGED
@@ -4,10 +4,10 @@
4
4
  $LOAD_PATH << File.join( File.dirname(__FILE__), '../lib')
5
5
 
6
6
  require 'rsyntaxtree'
7
- require 'trollop'
7
+ require 'optimist'
8
8
 
9
- opts = Trollop::options do
10
- version "RSyntaxTree #{RSyntaxTree::VERSION} (c) 2018 Yoichiro Hasebe"
9
+ opts = Optimist::options do
10
+ version "RSyntaxTree #{RSyntaxTree::VERSION} (c) 2021 Yoichiro Hasebe"
11
11
  banner <<-EOS
12
12
  RSyntaxTree, (linguistic) syntax tree generator written in Ruby.
13
13
 
@@ -20,9 +20,9 @@ EOS
20
20
  :default => "./"
21
21
  opt :format, "Output format: png, gif, jpg, pdf, or svg",
22
22
  :default => "png"
23
- opt :leafstyle, "visual style of tree leaves: auto, triangle, bar, or nothing",
23
+ opt :leafstyle, "visual style of tree leaves: auto, triangle, bar, or nothing",
24
24
  :default => "auto"
25
- opt :fontstyle, "Font style (available when ttf font is specified): sans, serif, cjk",
25
+ opt :fontstyle, "Font style (available when ttf font is specified): sans, serif, cjk, math",
26
26
  :default => "sans"
27
27
  opt :font, "Path to a ttf font used to generate tree (optional)", :type => String
28
28
  opt :fontsize, "Size: 8-26",
@@ -32,24 +32,24 @@ EOS
32
32
  opt :vheight, "Connector Height: 0.5-2.0",
33
33
  :default => 1.0
34
34
  opt :color, "Color text and bars: on or off",
35
- :default => "on"
35
+ :default => "on"
36
36
  opt :symmetrize, "Generate symmetrical, balanced tree: on or off",
37
- :default => "on"
37
+ :default => "on"
38
38
  opt :autosub, "Put subscript numbers to nodes: on or off",
39
- :default => "off"
39
+ :default => "off"
40
40
  end
41
41
 
42
- Trollop::die :outdir, "must be an exsting directory path" unless FileTest::directory?(opts[:outdir])
43
- Trollop::die :format, "must be png, jpg, gif, or svg" unless /\A(png|jpg|gif|pdf|svg)\z/ =~ opts[:format]
44
- Trollop::die :leafstyle, "must be auto, triangle, bar, or nothing" unless /\A(auto|triangle|bar|nothing)\z/ =~ opts[:leafstyle]
45
- Trollop::die :fontstyle, "must be sans, serif, cjk" unless /\A(sans|serif|cjk)\z/ =~ opts[:fontstyle]
46
- Trollop::die :font, "must be path to an existing ttf font" if opts[:font] && !File::exists?(opts[:font])
47
- Trollop::die :fontsize, "must be in the range of 8-26" unless opts[:fontsize] >= 8 && opts[:fontsize] <= 26
48
- Trollop::die :color, "must be either on or off" unless /\A(on|off)\z/ =~ opts[:color]
49
- Trollop::die :symmetrize, "must be either on or off" unless /\A(on|off)\z/ =~ opts[:symmetrize]
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
42
+ Optimist::die :outdir, "must be an exsting directory path" unless FileTest::directory?(opts[:outdir])
43
+ Optimist::die :format, "must be png, jpg, gif, or svg" unless /\A(png|jpg|gif|pdf|svg)\z/ =~ opts[:format]
44
+ Optimist::die :leafstyle, "must be auto, triangle, bar, or nothing" unless /\A(auto|triangle|bar|nothing)\z/ =~ opts[:leafstyle]
45
+ Optimist::die :fontstyle, "must be sans, serif, cjk, math" unless /\A(sans|serif|cjk|math)\z/ =~ opts[:fontstyle]
46
+ Optimist::die :font, "must be path to an existing ttf font" if opts[:font] && !File::exists?(opts[:font])
47
+ Optimist::die :fontsize, "must be in the range of 8-26" unless opts[:fontsize] >= 8 && opts[:fontsize] <= 26
48
+ Optimist::die :color, "must be either on or off" unless /\A(on|off)\z/ =~ opts[:color]
49
+ Optimist::die :symmetrize, "must be either on or off" unless /\A(on|off)\z/ =~ opts[:symmetrize]
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
53
53
 
54
54
  string_opts = {}
55
55
  opts.each do |key, value|
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
@@ -10,7 +10,7 @@
10
10
  # This file is part of RSyntaxTree, which is a ruby port of Andre Eisenbach's
11
11
  # excellent program phpSyntaxTree.
12
12
  #
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
  class Element
@@ -10,7 +10,7 @@
10
10
  # This file is part of RSyntaxTree, which is a ruby port of Andre Eisenbach's
11
11
  # excellent program phpSyntaxTree.
12
12
  #
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
  require 'element'
@@ -10,7 +10,7 @@
10
10
  # This file is part of RSyntaxTree, which is a ruby port of Andre Eisenbach's
11
11
  # excellent program phpSyntaxTree.
12
12
  #
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
  class ErrorMessage
@@ -10,7 +10,7 @@
10
10
  # This file is part of RSyntaxTree, which is a ruby port of Andre Eisenbach's
11
11
  # excellent program phpSyntaxTree.
12
12
  #
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
  require 'rmagick'
@@ -62,7 +62,7 @@ class Graph
62
62
 
63
63
  gc = Draw.new
64
64
  gc.annotate(background, 0, 0, 0, 0, text) do |gc|
65
- gc.font = font
65
+ gc.font = font
66
66
  gc.pointsize = font_size
67
67
  gc.gravity = CenterGravity
68
68
  gc.stroke = 'none'
@@ -286,7 +286,7 @@ class Graph
286
286
 
287
287
  def get_txt_only(text)
288
288
  text = text.strip
289
- if /\A([\+\-\=\*]+).+/ =~ text
289
+ if /\A([\+\-\=\*\~]+).+/ =~ text
290
290
  prefix = $1
291
291
  prefix_l = Regexp.escape(prefix)
292
292
  prefix_r = Regexp.escape(prefix.reverse)
@@ -11,24 +11,24 @@
11
11
  # This file is part of RSyntaxTree, which is a ruby port of Andre Eisenbach's
12
12
  # excellent program phpSyntaxTree.
13
13
  #
14
- # Copyright (c) 2007-2018 Yoichiro Hasebe <yohasebe@gmail.com>
14
+ # Copyright (c) 2007-2021 Yoichiro Hasebe <yohasebe@gmail.com>
15
15
  # Copyright (c) 2003-2004 Andre Eisenbach <andre@ironcreek.net>
16
16
 
17
17
  require 'elementlist'
18
18
  require 'element'
19
19
 
20
- def escape_high_ascii(string)
21
- html = ""
22
- string.length.times do |i|
23
- ch = string[i]
24
- if(ch < 127)
25
- html += ch.chr
26
- else
27
- html += sprintf("&#%d;", ch)
28
- end
29
- end
30
- html
31
- end
20
+ # def escape_high_ascii(string)
21
+ # html = ""
22
+ # string.length.times do |i|
23
+ # ch = string[i]
24
+ # if(ch < 127)
25
+ # html += ch.chr
26
+ # else
27
+ # html += sprintf("&#%d;", ch)
28
+ # end
29
+ # end
30
+ # html
31
+ # end
32
32
 
33
33
  class StringParser
34
34
 
@@ -203,8 +203,12 @@ class StringParser
203
203
 
204
204
  if spaceat
205
205
  parts[0] = token_r[0, spaceat].join
206
+ parts[0] = parts[0].gsub("<>", " ")
207
+
206
208
  tl =token_r.length
207
209
  parts[1] = token_r[spaceat, tl - spaceat].join
210
+ parts[1] = parts[1].gsub("<>", " ")
211
+
208
212
  element = Element.new(@id, parent, parts[0], @level)
209
213
  @id += 1
210
214
  @elist.add(element)
@@ -215,11 +219,12 @@ class StringParser
215
219
  @id += 1
216
220
  @elist.add(element)
217
221
  else
218
- element = Element.new(@id, parent, token_r.join, @level)
222
+ joined = token_r.join.gsub("<>", " ")
223
+ element = Element.new(@id, parent, joined, @level)
219
224
  @id += 1
220
225
  newparent = element.id
221
226
  @elist.add(element)
222
- count_node(token_r.join)
227
+ count_node(joined)
223
228
  end
224
229
 
225
230
  @level += 1
@@ -10,7 +10,7 @@
10
10
  # This file is part of RSyntaxTree, which is a ruby port of Andre Eisenbach's
11
11
  # excellent program phpSyntaxTree.
12
12
  #
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
  require "tempfile"
@@ -18,10 +18,11 @@ require 'graph'
18
18
 
19
19
  class SVGGraph < Graph
20
20
 
21
- def initialize(e_list, metrics, symmetrize, color, leafstyle, multibyte, fontstyle, font_size)
21
+ def initialize(e_list, metrics, symmetrize, color, leafstyle, multibyte, fontstyle, font, font_size)
22
22
 
23
23
  # Store class-specific parameters
24
- @font = fontstyle == "sans" ? "sans-serif" : fontstyle
24
+ @fontstyle = fontstyle
25
+ @font = multibyte ? font_cjk : font
25
26
  @font_size = font_size
26
27
 
27
28
  super(e_list, metrics, symmetrize, color, leafstyle, multibyte, @font, @font_size)
@@ -87,15 +88,12 @@ EOD
87
88
  sub = ""
88
89
  end
89
90
 
90
- if /\A\+(.+)\+\z/ =~ main
91
+ if /\A\=(.+)\=\z/ =~ main
91
92
  main = $1
92
93
  main_decoration= "overline"
93
94
  elsif /\A\-(.+)\-\z/ =~ main
94
95
  main = $1
95
96
  main_decoration= "underline"
96
- elsif /\A\=(.+)\=\z/ =~ main
97
- main = $1
98
- main_decoration= "line-through"
99
97
  else
100
98
  main_decoration= ""
101
99
  end
@@ -124,15 +122,12 @@ EOD
124
122
  main_width = img_get_txt_width(main, @font, @font_size)
125
123
 
126
124
  if sub != ""
127
- if /\A\+(.+)\+\z/ =~ sub
125
+ if /\A\=(.+)\=\z/ =~ sub
128
126
  sub = $1
129
127
  sub_decoration= "overline"
130
128
  elsif /\A\-(.+)\-\z/ =~ sub
131
129
  sub = $1
132
130
  sub_decoration= "underline"
133
- elsif /\A\=(.+)\=\z/ =~ sub
134
- sub = $1
135
- sub_decoration= "line-through"
136
131
  else
137
132
  sub_decoration= ""
138
133
  end
@@ -10,7 +10,7 @@
10
10
  # This file is part of RSyntaxTree, which is a ruby port of Andre Eisenbach's
11
11
  # excellent program phpSyntaxTree.
12
12
  #
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
  require 'graph'
@@ -20,7 +20,7 @@ include Magick
20
20
  class TreeGraph < Graph
21
21
 
22
22
  def initialize(e_list, metrics, symmetrize, color, leafstyle, multibyte,
23
- fontstyle, font, font_it, font_bd, font_itbd, font_cjk, font_size,
23
+ fontstyle, font, font_it, font_bd, font_itbd, font_math, font_cjk, font_size,
24
24
  margin)
25
25
 
26
26
  # Store class-specific parameters
@@ -30,6 +30,7 @@ class TreeGraph < Graph
30
30
  @font_it = font_it
31
31
  @font_bd = font_bd
32
32
  @font_itbd = font_itbd
33
+ @font_math = font_math
33
34
  @font_cjk = font_cjk
34
35
  @margin = margin
35
36
 
@@ -62,28 +63,31 @@ class TreeGraph < Graph
62
63
  def to_blob(fileformat='PNG')
63
64
  draw
64
65
  @im.border!(@margin, @margin, "white")
65
- return @im.to_blob do
66
- self.format = fileformat
67
- self.interlace = PlaneInterlace
68
- end
69
- end
66
+ # return @im.to_blob do
67
+ # self.format = fileformat
68
+ # self.interlace = PlaneInterlace
69
+ # end
70
+ @im.format = fileformat
71
+ @im.interlace = PlaneInterlace
72
+ return @im.to_blob
73
+ end
70
74
 
71
75
  :private
72
76
 
73
77
  # Add the element into the tree (draw it)
74
78
  def draw_element(x, y, w, string, type)
75
- string = string.sub(/\^\z/){""}
79
+ string = string.sub(/\^\z/){""}
76
80
  # Calculate element dimensions and position
77
81
  if (type == ETYPE_LEAF) and @leafstyle == "nothing"
78
82
  top = row2px(y - 1) + (@font_size * 1.5)
79
- else
83
+ else
80
84
  top = row2px(y)
81
85
  end
82
86
  left = x + @m[:b_side]
83
87
  bottom = top + @e_height
84
88
  right = left + w
85
89
 
86
- # Split the string into the main part and the
90
+ # Split the string into the main part and the
87
91
  # subscript part of the element (if any)
88
92
  parts = string.split("_", 2)
89
93
  if(parts.length > 1 )
@@ -94,77 +98,77 @@ class TreeGraph < Graph
94
98
  sub = ""
95
99
  end
96
100
 
97
- if /\A\+(.+)\+\z/ =~ main
101
+ if /\A\=(.+)\=\z/ =~ main
98
102
  main = $1
99
103
  main_decoration = OverlineDecoration
100
104
  elsif /\A\-(.+)\-\z/ =~ main
101
105
  main = $1
102
106
  main_decoration = UnderlineDecoration
103
- elsif /\A\=(.+)\=\z/ =~ main
104
- main = $1
105
- main_decoration = LineThroughDecoration
106
107
  else
107
108
  main_decoration = NoDecoration
108
109
  end
109
110
 
111
+ main_font = @font
112
+
110
113
  if /\A\*\*\*(.+)\*\*\*\z/ =~ main
111
114
  main = $1
112
- if !@multibyte || !main.contains_cjk?
115
+ if !@multibyte
113
116
  main_font = @font_itbd
114
117
  end
115
118
  elsif /\A\*\*(.+)\*\*\z/ =~ main
116
119
  main = $1
117
- if !@multibyte || !main.contains_cjk?
120
+ if !@multibyte
118
121
  main_font = @font_bd
119
122
  end
120
123
  elsif /\A\*(.+)\*\z/ =~ main
121
124
  main = $1
122
- if !@multibyte || !main.contains_cjk?
125
+ if !@multibyte
123
126
  main_font = @font_it
124
127
  end
125
- else
126
- main_font = @font
127
128
  end
128
129
 
129
- # Calculate text size for the main and the
130
+ if /\A\~(.+)\~\z/ =~ main
131
+ main = $1
132
+ main_font = @font_math
133
+ end
134
+
135
+ # Calculate text size for the main and the
130
136
  # subscript part of the element
131
- # symbols for underline/overline removed temporarily
132
137
 
133
138
  main_width = img_get_txt_width(main, main_font, @font_size)
134
139
 
135
- if /\A\+(.+)\+\z/ =~ sub
140
+ if /\A\=(.+)\=\z/ =~ sub
136
141
  sub = $1
137
142
  sub_decoration = OverlineDecoration
138
143
  elsif /\A\-(.+)\-\z/ =~ sub
139
144
  sub = $1
140
145
  @gc.decorate(UnderlineDecoration)
141
146
  sub_decoration = UnderlineDecoration
142
- elsif /\A\=(.+)\=\z/ =~ sub
143
- sub = $1
144
- sub_decoration = LineThroughDecoration
145
147
  else
146
148
  sub_decoration = NoDecoration
147
149
  end
148
150
 
149
151
  sub_font = @font
150
-
151
152
  if /\A\*\*\*(.+)\*\*\*\z/ =~ sub
152
153
  sub = $1
153
- if !@multibyte || !sub.contains_cjk?
154
+ if !@multibyte
154
155
  sub_font = @font_itbd
155
156
  end
156
157
  elsif /\A\*\*(.+)\*\*\z/ =~ sub
157
158
  sub = $1
158
- if !@multibyte || !sub.contains_cjk?
159
+ if !@multibyte
159
160
  sub_font = @font_bd
160
161
  end
161
162
  elsif /\A\*(.+)\*\z/ =~ sub
162
163
  sub = $1
163
- if !@multibyte || !sub.contains_cjk?
164
+ if !@multibyte
164
165
  sub_font = @font_it
165
166
  end
166
- else
167
- sub_font = @font
167
+ end
168
+
169
+ if /\A~(.+)~\z/ =~ sub
170
+ sub = $1
171
+ sub_font = @font_math
168
172
  end
169
173
 
170
174
  if sub != ""
@@ -182,7 +186,7 @@ class TreeGraph < Graph
182
186
  if(type == ETYPE_LEAF)
183
187
  col = @col_leaf
184
188
  else
185
- col = @col_node
189
+ col = @col_node
186
190
  end
187
191
 
188
192
  if(main[0].chr == "<" && main[-1].chr == ">")
@@ -252,7 +256,7 @@ class TreeGraph < Graph
252
256
 
253
257
  @gc.fill("none")
254
258
  @gc.stroke @col_line
255
- @gc.stroke_width 1
259
+ @gc.stroke_width 1
256
260
  @gc.line(fromLeft1, fromTop, toLeft, toBot)
257
261
  @gc.line(fromLeft2, fromTop, toLeft, toBot)
258
262
  @gc.line(fromLeft1, fromTop, fromLeft2, fromTop)
@@ -267,9 +271,9 @@ class TreeGraph < Graph
267
271
  children = @e_list.get_children(id)
268
272
  @e_list.set_element_width(id, target)
269
273
 
270
- if(children.length > 0 )
274
+ if(children.length > 0 )
271
275
  delta = target - current
272
- target_delta = delta / children.length
276
+ target_delta = delta / children.length
273
277
 
274
278
  children.each do |child|
275
279
  child_width = @e_list.get_element_width(child)
@@ -10,7 +10,7 @@
10
10
  # This file is part of RSyntaxTree, which is a ruby port of Andre Eisenbach's
11
11
  # excellent program phpSyntaxTree.
12
12
  #
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
  class String
@@ -1,4 +1,4 @@
1
1
  module RSyntaxTree
2
- VERSION = "0.7.3"
2
+ VERSION = "0.8.0"
3
3
  end
4
4
 
data/lib/rsyntaxtree.rb CHANGED
@@ -15,7 +15,7 @@
15
15
 
16
16
  $LOAD_PATH << File.join( File.dirname(__FILE__), 'rsyntaxtree')
17
17
 
18
- require 'uri'
18
+ require 'cgi'
19
19
  require 'utils'
20
20
  require 'element'
21
21
  require 'elementlist'
@@ -39,7 +39,7 @@ class RSGenerator
39
39
  key = keystr.to_sym
40
40
  case key
41
41
  when :data
42
- data = URI.unescape(value)
42
+ data = CGI.unescape(value)
43
43
  data = data.gsub('-AMP-', '&')
44
44
  .gsub('-PERCENT-', "%")
45
45
  .gsub('-PRIME-', "'")
@@ -62,6 +62,7 @@ class RSGenerator
62
62
  new_params[:font_it] = FONT_DIR + "/NotoSans-Italic.ttf"
63
63
  new_params[:font_bd] = FONT_DIR + "/NotoSans-Bold.ttf"
64
64
  new_params[:font_bdit] = FONT_DIR + "/NotoSans-BoldItalic.ttf"
65
+ new_params[:font_math] = FONT_DIR + "/NotoSansMath-Regular.ttf"
65
66
  new_params[:font_cjk] = FONT_DIR + "/NotoSansCJKjp-Regular.otf"
66
67
  new_params[:fontstyle] = "sans"
67
68
  elsif value == "noto-serif" || value == "serif"
@@ -69,6 +70,7 @@ class RSGenerator
69
70
  new_params[:font_it] = FONT_DIR + "/NotoSerif-Italic.ttf"
70
71
  new_params[:font_bd] = FONT_DIR + "/NotoSerif-Bold.ttf"
71
72
  new_params[:font_bdit] = FONT_DIR + "/NotoSerif-BoldItalic.ttf"
73
+ new_params[:font_math] = FONT_DIR + "/NotoSansMath-Regular.ttf"
72
74
  new_params[:font_cjk] = FONT_DIR + "/NotoSerifCJKjp-Regular.otf"
73
75
  new_params[:fontstyle] = "serif"
74
76
  elsif value == "cjk zenhei" || value == "cjk"
@@ -76,14 +78,24 @@ class RSGenerator
76
78
  new_params[:font_it] = FONT_DIR + "/NotoSans-Italic.ttf"
77
79
  new_params[:font_bd] = FONT_DIR + "/NotoSans-Bold.ttf"
78
80
  new_params[:font_bdit] = FONT_DIR + "/NotoSans-BoldItalic.ttf"
81
+ new_params[:font_math] = FONT_DIR + "/NotoSansMath-Regular.ttf"
79
82
  new_params[:font_cjk] = FONT_DIR + "/wqy-zenhei.ttf"
80
83
  new_params[:fontstyle] = "sans"
84
+ 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"
90
+ new_params[:font_cjk] = FONT_DIR + "/NotoSerifCJKjp-Regular.otf"
91
+ new_params[:fontstyle] = "math"
81
92
  end
82
93
  else
83
94
  new_params[key] = value
84
95
  end
85
96
  end
86
97
 
98
+ # defaults to the following
87
99
  @params = {
88
100
  :symmetrize => true,
89
101
  :color => true,
@@ -100,6 +112,7 @@ class RSGenerator
100
112
  :font_it => "/NotoSans-Italic.ttf",
101
113
  :font_bd => "/NotoSans-Bold.ttf",
102
114
  :font_bdit => "/NotoSans-BoldItalic.ttf",
115
+ :font_math => "/NotoSansMath-Regular.ttf"
103
116
  }
104
117
  @metrics = {
105
118
  :e_width => 120,
@@ -149,7 +162,7 @@ class RSGenerator
149
162
  elist = sp.get_elementlist
150
163
  graph = SVGGraph.new(elist, @metrics,
151
164
  @params[:symmetrize], @params[:color], @params[:leafstyle], @params[:multibyte],
152
- @params[:fontstyle], @params[:fontsize],
165
+ @params[:fontstyle], @params[:font], @params[:fontsize],
153
166
  )
154
167
  graph.svg_data
155
168
  end
@@ -161,7 +174,7 @@ class RSGenerator
161
174
  elist = sp.get_elementlist
162
175
  graph = TreeGraph.new(elist, @metrics,
163
176
  @params[:symmetrize], @params[:color], @params[:leafstyle], @params[:multibyte],
164
- @params[:fontstyle], @params[:font], @params[:font_it], @params[:font_bd], @params[:font_bdit],
177
+ @params[:fontstyle], @params[:font], @params[:font_it], @params[:font_bd], @params[:font_bdit], @params[:font_math],
165
178
  @params[:font_cjk], @params[:fontsize], @params[:margin],
166
179
  )
167
180
  graph.to_blob(@params[:format])
data/rsyntaxtree.gemspec CHANGED
@@ -12,14 +12,11 @@ Gem::Specification.new do |s|
12
12
  s.summary = %q{RSyntaxTree is a graphical syntax tree generator written in Ruby}
13
13
  s.description = %q{Yet another syntax tree generator made with Ruby and RMagick}
14
14
  s.licenses = ["MIT"]
15
-
16
- s.rubyforge_project = "rsyntaxtree"
17
-
18
15
  s.files = `git ls-files`.split("\n")
19
16
  s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
20
17
  s.require_paths = ["lib"]
21
18
 
22
19
  # specify any dependencies here; for example:
23
- s.add_runtime_dependency("rmagick", '>= 2.16.0')
24
- s.add_runtime_dependency("trollop", '>= 2.1.2')
20
+ s.add_runtime_dependency 'rmagick', '~> 4.2', '>= 4.2.3'
21
+ s.add_runtime_dependency 'optimist', '~> 3.0', '>= 3.0.1'
25
22
  end
metadata CHANGED
@@ -1,43 +1,55 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rsyntaxtree
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.3
4
+ version: 0.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yoichiro Hasebe
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-03-21 00:00:00.000000000 Z
11
+ date: 2021-11-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rmagick
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '4.2'
17
20
  - - ">="
18
21
  - !ruby/object:Gem::Version
19
- version: 2.16.0
22
+ version: 4.2.3
20
23
  type: :runtime
21
24
  prerelease: false
22
25
  version_requirements: !ruby/object:Gem::Requirement
23
26
  requirements:
27
+ - - "~>"
28
+ - !ruby/object:Gem::Version
29
+ version: '4.2'
24
30
  - - ">="
25
31
  - !ruby/object:Gem::Version
26
- version: 2.16.0
32
+ version: 4.2.3
27
33
  - !ruby/object:Gem::Dependency
28
- name: trollop
34
+ name: optimist
29
35
  requirement: !ruby/object:Gem::Requirement
30
36
  requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '3.0'
31
40
  - - ">="
32
41
  - !ruby/object:Gem::Version
33
- version: 2.1.2
42
+ version: 3.0.1
34
43
  type: :runtime
35
44
  prerelease: false
36
45
  version_requirements: !ruby/object:Gem::Requirement
37
46
  requirements:
47
+ - - "~>"
48
+ - !ruby/object:Gem::Version
49
+ version: '3.0'
38
50
  - - ">="
39
51
  - !ruby/object:Gem::Version
40
- version: 2.1.2
52
+ version: 3.0.1
41
53
  description: Yet another syntax tree generator made with Ruby and RMagick
42
54
  email:
43
55
  - yohasebe@gmail.com
@@ -56,11 +68,17 @@ files:
56
68
  - fonts/NotoSans-Italic.ttf
57
69
  - fonts/NotoSans-Regular.ttf
58
70
  - fonts/NotoSansCJKjp-Regular.otf
71
+ - fonts/NotoSansMath-Regular.ttf
59
72
  - fonts/NotoSerif-Bold.ttf
60
73
  - fonts/NotoSerif-BoldItalic.ttf
61
74
  - fonts/NotoSerif-Italic.ttf
62
75
  - fonts/NotoSerif-Regular.ttf
63
76
  - fonts/NotoSerifCJKjp-Regular.otf
77
+ - fonts/latinmodern-math.otf
78
+ - fonts/lmroman10-bold.otf
79
+ - fonts/lmroman10-bolditalic.otf
80
+ - fonts/lmroman10-italic.otf
81
+ - fonts/lmroman10-regular.otf
64
82
  - fonts/wqy-zenhei.ttf
65
83
  - lib/rsyntaxtree.rb
66
84
  - lib/rsyntaxtree/element.rb
@@ -77,7 +95,7 @@ homepage: http://github.com/yohasebe/rsyntaxtree
77
95
  licenses:
78
96
  - MIT
79
97
  metadata: {}
80
- post_install_message:
98
+ post_install_message:
81
99
  rdoc_options: []
82
100
  require_paths:
83
101
  - lib
@@ -92,9 +110,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
92
110
  - !ruby/object:Gem::Version
93
111
  version: '0'
94
112
  requirements: []
95
- rubyforge_project: rsyntaxtree
96
- rubygems_version: 2.6.13
97
- signing_key:
113
+ rubygems_version: 3.2.11
114
+ signing_key:
98
115
  specification_version: 4
99
116
  summary: RSyntaxTree is a graphical syntax tree generator written in Ruby
100
117
  test_files: []