rsyntaxtree 0.7.3 → 0.8.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/Gemfile +1 -1
- data/README.md +4 -2
- data/bin/rsyntaxtree +19 -19
- data/fonts/NotoSansMath-Regular.ttf +0 -0
- data/fonts/latinmodern-math.otf +0 -0
- data/fonts/lmroman10-bold.otf +0 -0
- data/fonts/lmroman10-bolditalic.otf +0 -0
- data/fonts/lmroman10-italic.otf +0 -0
- data/fonts/lmroman10-regular.otf +0 -0
- data/lib/rsyntaxtree/element.rb +1 -1
- data/lib/rsyntaxtree/elementlist.rb +1 -1
- data/lib/rsyntaxtree/error_message.rb +1 -1
- data/lib/rsyntaxtree/graph.rb +3 -3
- data/lib/rsyntaxtree/string_parser.rb +20 -15
- data/lib/rsyntaxtree/svg_graph.rb +6 -11
- data/lib/rsyntaxtree/tree_graph.rb +39 -35
- data/lib/rsyntaxtree/utils.rb +1 -1
- data/lib/rsyntaxtree/version.rb +1 -1
- data/lib/rsyntaxtree.rb +17 -4
- data/rsyntaxtree.gemspec +2 -5
- metadata +29 -12
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: a93fb86aba069b61d5095d8cd565153b36ea9cdc0bd9903b2ffc656bae5986cb
|
4
|
+
data.tar.gz: a11db6cdb80b0ccdc118761a4f2131915bffd3dc1a13343be4df662e13bb88b3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8ce0bbb49b1c7207aa5d65958e9185dd2e28c762bf39304077b37d03c8e7a2e32b79f2b490d110a6223d1b1ca7df591f43ec82bbc7532f5f4a6c406107e55d72
|
7
|
+
data.tar.gz: 66849abf7520966907cece66a1f12fc3eb29384911ddda5f518ad23ecdf7249d589edebfec98c42f35f468c1dea7204e285a38ddb37e510610bec08807d6d154
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
|
5
5
|
### Web Interface
|
6
6
|
|
7
|
-
|
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 “Auto subscript” 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 '
|
7
|
+
require 'optimist'
|
8
8
|
|
9
|
-
opts =
|
10
|
-
version "RSyntaxTree #{RSyntaxTree::VERSION} (c)
|
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
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
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
|
data/lib/rsyntaxtree/element.rb
CHANGED
@@ -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-
|
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-
|
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-
|
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
|
data/lib/rsyntaxtree/graph.rb
CHANGED
@@ -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-
|
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([
|
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-
|
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
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
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
|
-
|
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(
|
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-
|
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
|
-
@
|
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
|
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
|
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-
|
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
|
-
|
67
|
-
|
68
|
-
end
|
69
|
-
|
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
|
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
|
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
|
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
|
125
|
+
if !@multibyte
|
123
126
|
main_font = @font_it
|
124
127
|
end
|
125
|
-
else
|
126
|
-
main_font = @font
|
127
128
|
end
|
128
129
|
|
129
|
-
|
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
|
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
|
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
|
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
|
164
|
+
if !@multibyte
|
164
165
|
sub_font = @font_it
|
165
166
|
end
|
166
|
-
|
167
|
-
|
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)
|
data/lib/rsyntaxtree/utils.rb
CHANGED
@@ -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-
|
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
|
data/lib/rsyntaxtree/version.rb
CHANGED
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 '
|
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 =
|
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
|
24
|
-
s.add_runtime_dependency
|
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.
|
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:
|
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.
|
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.
|
32
|
+
version: 4.2.3
|
27
33
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
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:
|
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:
|
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
|
-
|
96
|
-
|
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: []
|