rsyntaxtree 1.2.1 → 1.2.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.tags +12 -0
- data/Rakefile +14 -4
- data/bin/rsyntaxtree +4 -2
- data/docs/_examples/000.md +2 -1
- data/docs/_examples/001.md +2 -1
- data/docs/_examples/002.md +2 -1
- data/docs/_examples/003.md +2 -1
- data/docs/_examples/004.md +2 -1
- data/docs/_examples/005.md +2 -1
- data/docs/_examples/006.md +2 -1
- data/docs/_examples/007.md +2 -1
- data/docs/_examples/008.md +2 -1
- data/docs/_examples/009.md +2 -1
- data/docs/_examples/010.md +2 -1
- data/docs/_examples/011.md +2 -1
- data/docs/_examples/012.md +2 -1
- data/docs/_examples/013.md +2 -1
- data/docs/_examples/014.md +2 -1
- data/docs/_examples/015.md +2 -1
- data/docs/_examples/016.md +2 -1
- data/docs/_examples/017.md +2 -1
- data/docs/_examples/018.md +2 -1
- data/docs/_examples/019.md +2 -1
- data/docs/_examples/020.md +2 -1
- data/docs/_examples/021.md +2 -1
- data/docs/_examples/022.md +2 -1
- data/docs/_examples/023.md +2 -1
- data/docs/_examples/024.md +2 -1
- data/docs/_examples/025.md +2 -1
- data/docs/_examples/026.md +2 -1
- data/docs/_examples/027.md +2 -1
- data/docs/_examples/028.md +2 -1
- data/docs/_examples/029.md +2 -1
- data/docs/_examples/030.md +2 -1
- data/docs/_examples/031.md +2 -1
- data/docs/_examples/032.md +2 -1
- data/docs/_examples/033.md +16 -17
- data/docs/_examples/034.md +2 -1
- data/docs/_examples/035.md +5 -4
- data/docs/_examples/036.md +18 -0
- data/docs/_examples/037.md +18 -0
- data/docs/assets/img/000.png +0 -0
- data/docs/assets/img/001.png +0 -0
- data/docs/assets/img/002.png +0 -0
- data/docs/assets/img/003.png +0 -0
- data/docs/assets/img/004.png +0 -0
- data/docs/assets/img/005.png +0 -0
- data/docs/assets/img/006.png +0 -0
- data/docs/assets/img/007.png +0 -0
- data/docs/assets/img/008.png +0 -0
- data/docs/assets/img/009.png +0 -0
- data/docs/assets/img/010.png +0 -0
- data/docs/assets/img/011.png +0 -0
- data/docs/assets/img/012.png +0 -0
- data/docs/assets/img/013.png +0 -0
- data/docs/assets/img/014.png +0 -0
- data/docs/assets/img/015.png +0 -0
- data/docs/assets/img/016.png +0 -0
- data/docs/assets/img/017.png +0 -0
- data/docs/assets/img/018.png +0 -0
- data/docs/assets/img/019.png +0 -0
- data/docs/assets/img/020.png +0 -0
- data/docs/assets/img/021.png +0 -0
- data/docs/assets/img/022.png +0 -0
- data/docs/assets/img/023.png +0 -0
- data/docs/assets/img/024.png +0 -0
- data/docs/assets/img/025.png +0 -0
- data/docs/assets/img/026.png +0 -0
- data/docs/assets/img/027.png +0 -0
- data/docs/assets/img/028.png +0 -0
- data/docs/assets/img/029.png +0 -0
- data/docs/assets/img/030.png +0 -0
- data/docs/assets/img/031.png +0 -0
- data/docs/assets/img/032.png +0 -0
- data/docs/assets/img/033.png +0 -0
- data/docs/assets/img/034.png +0 -0
- data/docs/assets/img/035.png +0 -0
- data/docs/assets/img/036.png +0 -0
- data/docs/assets/img/037.png +0 -0
- data/docs/assets/svg/000.svg +40 -40
- data/docs/assets/svg/001.svg +20 -20
- data/docs/assets/svg/002.svg +29 -29
- data/docs/assets/svg/003.svg +21 -21
- data/docs/assets/svg/004.svg +30 -30
- data/docs/assets/svg/005.svg +12 -12
- data/docs/assets/svg/006.svg +16 -16
- data/docs/assets/svg/007.svg +23 -23
- data/docs/assets/svg/008.svg +27 -27
- data/docs/assets/svg/009.svg +24 -24
- data/docs/assets/svg/010.svg +53 -53
- data/docs/assets/svg/011.svg +19 -19
- data/docs/assets/svg/012.svg +22 -22
- data/docs/assets/svg/013.svg +117 -117
- data/docs/assets/svg/014.svg +88 -88
- data/docs/assets/svg/015.svg +33 -33
- data/docs/assets/svg/016.svg +193 -193
- data/docs/assets/svg/017.svg +36 -36
- data/docs/assets/svg/018.svg +38 -38
- data/docs/assets/svg/019.svg +177 -177
- data/docs/assets/svg/020.svg +60 -60
- data/docs/assets/svg/021.svg +34 -34
- data/docs/assets/svg/022.svg +62 -62
- data/docs/assets/svg/023.svg +33 -33
- data/docs/assets/svg/024.svg +15 -15
- data/docs/assets/svg/025.svg +117 -117
- data/docs/assets/svg/026.svg +9 -9
- data/docs/assets/svg/027.svg +39 -39
- data/docs/assets/svg/028.svg +22 -22
- data/docs/assets/svg/029.svg +87 -87
- data/docs/assets/svg/030.svg +44 -44
- data/docs/assets/svg/031.svg +7 -7
- data/docs/assets/svg/032.svg +61 -61
- data/docs/assets/svg/033.svg +60 -59
- data/docs/assets/svg/034.svg +59 -59
- data/docs/assets/svg/035.svg +44 -42
- data/docs/assets/svg/036.svg +50 -0
- data/docs/assets/svg/037.svg +88 -0
- data/docs/documentation.md +2 -2
- data/docs/documentation_ja.md +6 -6
- data/docs/examples.html +1 -1
- data/lib/rsyntaxtree/base_graph.rb +26 -8
- data/lib/rsyntaxtree/element.rb +6 -3
- data/lib/rsyntaxtree/svg_graph.rb +12 -8
- data/lib/rsyntaxtree/version.rb +1 -1
- data/lib/rsyntaxtree.rb +13 -3
- data/test/example_verify_test.rb +13 -3
- metadata +9 -3
@@ -16,7 +16,19 @@ module RSyntaxTree
|
|
16
16
|
@element_list = element_list
|
17
17
|
@symmetrize = params[:symmetrize]
|
18
18
|
|
19
|
-
|
19
|
+
case params[:color]
|
20
|
+
# Okabe-Ito Color
|
21
|
+
when "modern"
|
22
|
+
@col_node = "#0072B2" # blue
|
23
|
+
@col_leaf = "#009E73" # bluishgreen
|
24
|
+
@col_path = "#CC79A7" # reddishpurple
|
25
|
+
@col_extra = "#D55E00" # vermillion
|
26
|
+
# "#000000" black
|
27
|
+
# "#E69F00" orange
|
28
|
+
# "#56B4E9" skyblue
|
29
|
+
# "#F0E442" yellow
|
30
|
+
# "#999999" grey
|
31
|
+
when "traditional"
|
20
32
|
@col_node = "blue"
|
21
33
|
@col_leaf = "green"
|
22
34
|
@col_path = "purple"
|
@@ -30,7 +42,12 @@ module RSyntaxTree
|
|
30
42
|
|
31
43
|
@col_bg = "none"
|
32
44
|
@col_fg = "black"
|
33
|
-
|
45
|
+
|
46
|
+
@col_line = if params[:hide_default_connectors]
|
47
|
+
"none"
|
48
|
+
else
|
49
|
+
"black"
|
50
|
+
end
|
34
51
|
|
35
52
|
@leafstyle = params[:leafstyle]
|
36
53
|
@fontset = params[:fontset]
|
@@ -224,11 +241,13 @@ module RSyntaxTree
|
|
224
241
|
end
|
225
242
|
|
226
243
|
def parse_list
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
244
|
+
if @element_list.elements.size > 1
|
245
|
+
calculate_level
|
246
|
+
calculate_width
|
247
|
+
make_balance if @symmetrize
|
248
|
+
calculate_indent
|
249
|
+
node_centering
|
250
|
+
end
|
232
251
|
|
233
252
|
top = @element_list.get_id(1)
|
234
253
|
diff = top.horizontal_indent
|
@@ -250,7 +269,6 @@ module RSyntaxTree
|
|
250
269
|
width = get_rightmost - get_leftmost + @global[:h_gap_between_nodes]
|
251
270
|
height = @element_list.get_id(1).height
|
252
271
|
height = @height if @height > height
|
253
|
-
|
254
272
|
{ height: height, width: width }
|
255
273
|
end
|
256
274
|
end
|
data/lib/rsyntaxtree/element.rb
CHANGED
@@ -138,10 +138,13 @@ module RSyntaxTree
|
|
138
138
|
row_width += width
|
139
139
|
end
|
140
140
|
|
141
|
-
total_height += if @
|
142
|
-
|
143
|
-
else
|
141
|
+
total_height += if @parent.zero? && @children.empty?
|
142
|
+
# tree without parent node
|
144
143
|
elements_height.max
|
144
|
+
# elsif @enclosure != :none && @children.empty?
|
145
|
+
# elements_height.max
|
146
|
+
else
|
147
|
+
elements_height.max + @global[:height_connector_to_text]
|
145
148
|
end
|
146
149
|
content_width += row_width
|
147
150
|
end
|
@@ -16,6 +16,7 @@ module RSyntaxTree
|
|
16
16
|
attr_accessor :width, :height
|
17
17
|
|
18
18
|
def initialize(element_list, params, global)
|
19
|
+
super(element_list, params, global)
|
19
20
|
@height = 0
|
20
21
|
@width = 0
|
21
22
|
@extra_lines = []
|
@@ -26,8 +27,8 @@ module RSyntaxTree
|
|
26
27
|
@fontstyle = params[:fontstyle]
|
27
28
|
@margin = params[:margin].to_i
|
28
29
|
@polyline = params[:polyline]
|
29
|
-
@line_styles = "<line style='stroke
|
30
|
-
@polyline_styles = "<polyline style='stroke
|
30
|
+
@line_styles = "<line style='stroke:#{@col_line}; stroke-width:#{FONT_SCALING};' x1='X1' y1='Y1' x2='X2' y2='Y2' />\n"
|
31
|
+
@polyline_styles = "<polyline style='stroke:#{@col_line}; stroke-width:#{FONT_SCALING}; fill:none;'
|
31
32
|
points='CHIX CHIY MIDX1 MIDY1 MIDX2 MIDY2 PARX PARY' />\n"
|
32
33
|
@polygon_styles = "<polygon style='fill: none; stroke: black; stroke-width:#{FONT_SCALING};' points='X1 Y1 X2 Y2 X3 Y3' />\n"
|
33
34
|
@text_styles = "<text white-space='pre' alignment-baseline='text-top' style='fill: COLOR; font-size: fontsize' x='X_VALUE' y='Y_VALUE'>CONTENT</text>\n"
|
@@ -35,12 +36,15 @@ module RSyntaxTree
|
|
35
36
|
@visited_x = {}
|
36
37
|
@visited_y = {}
|
37
38
|
@global = global
|
38
|
-
super(element_list, params, global)
|
39
39
|
end
|
40
40
|
|
41
41
|
def svg_data
|
42
42
|
metrics = parse_list
|
43
|
-
@height =
|
43
|
+
@height = if @element_list.elements.size == 1
|
44
|
+
metrics[:height]
|
45
|
+
else
|
46
|
+
metrics[:height] + @margin * 2
|
47
|
+
end
|
44
48
|
@width = metrics[:width] + @margin * 2
|
45
49
|
|
46
50
|
x1 = 0 - @margin
|
@@ -51,7 +55,7 @@ module RSyntaxTree
|
|
51
55
|
|
52
56
|
as = @global[:h_gap_between_nodes] / 4 * 0.8
|
53
57
|
as2 = @global[:h_gap_between_nodes] / 2 * 0.8
|
54
|
-
as4 = @global[:h_gap_between_nodes]
|
58
|
+
as4 = @global[:h_gap_between_nodes] * 1.2
|
55
59
|
|
56
60
|
header = <<~HDR
|
57
61
|
<?xml version="1.0" standalone="no"?>
|
@@ -389,7 +393,7 @@ module RSyntaxTree
|
|
389
393
|
x1 = element.horizontal_indent + element.content_width / 2
|
390
394
|
x2 = element.horizontal_indent + element.content_width + @global[:h_gap_between_nodes]
|
391
395
|
y0 = element.vertical_indent + @global[:height_connector_to_text] / 2
|
392
|
-
y1 = element.vertical_indent + element.content_height + @global[:
|
396
|
+
y1 = element.vertical_indent + element.content_height + @global[:height_connector_to_text]
|
393
397
|
et = element.path
|
394
398
|
et.each do |tr|
|
395
399
|
if /\A-(>)?(\d+)\z/ =~ tr
|
@@ -459,8 +463,8 @@ module RSyntaxTree
|
|
459
463
|
|
460
464
|
if a[:y][:top] > b[:y][:bottom]
|
461
465
|
draw_direct_line(a[:x][:center], a[:y][:top], b[:x][:center], b[:y][:bottom], a[:arrow], b[:arrow])
|
462
|
-
elsif
|
463
|
-
draw_direct_line(
|
466
|
+
elsif a[:y][:bottom] < b[:y][:top]
|
467
|
+
draw_direct_line(b[:x][:center], b[:y][:top], a[:x][:center], a[:y][:bottom], b[:arrow], a[:arrow])
|
464
468
|
elsif a[:x][:center] < b[:x][:center]
|
465
469
|
draw_direct_line(a[:x][:right], a[:y][:center], b[:x][:left], b[:y][:center], a[:arrow], b[:arrow])
|
466
470
|
else
|
data/lib/rsyntaxtree/version.rb
CHANGED
data/lib/rsyntaxtree.rb
CHANGED
@@ -53,8 +53,17 @@ module RSyntaxTree
|
|
53
53
|
.gsub(/(?<!\\)¥/, "\\")
|
54
54
|
new_params[key] = data
|
55
55
|
|
56
|
-
when :symmetrize, :
|
56
|
+
when :symmetrize, :transparent, :polyline, :hide_default_connectors
|
57
57
|
new_params[key] = value && (value != "off" && value != "false") ? true : false
|
58
|
+
when :color
|
59
|
+
new_params[key] = case value
|
60
|
+
when "modern", "on", "true"
|
61
|
+
"modern"
|
62
|
+
when "traditional"
|
63
|
+
"traditional"
|
64
|
+
else
|
65
|
+
"off"
|
66
|
+
end
|
58
67
|
when :fontsize
|
59
68
|
new_params[key] = value.to_i * FONT_SCALING
|
60
69
|
when :margin
|
@@ -108,7 +117,7 @@ module RSyntaxTree
|
|
108
117
|
# defaults to the following
|
109
118
|
@params = {
|
110
119
|
symmetrize: true,
|
111
|
-
color:
|
120
|
+
color: "modern",
|
112
121
|
transparent: false,
|
113
122
|
fontsize: 16,
|
114
123
|
format: "png",
|
@@ -117,7 +126,8 @@ module RSyntaxTree
|
|
117
126
|
data: "",
|
118
127
|
margin: 0,
|
119
128
|
vheight: 1.0,
|
120
|
-
polyline: false
|
129
|
+
polyline: false,
|
130
|
+
hide_default_connectors: false
|
121
131
|
}
|
122
132
|
|
123
133
|
@params.merge! new_params
|
data/test/example_verify_test.rb
CHANGED
@@ -25,7 +25,8 @@ class ExampleParserTest < Minitest::Test
|
|
25
25
|
color: "on",
|
26
26
|
symmetrize: "on",
|
27
27
|
transparent: "off",
|
28
|
-
polyline: "off"
|
28
|
+
polyline: "off",
|
29
|
+
hide_default_connectors: "off"
|
29
30
|
}
|
30
31
|
name = nil
|
31
32
|
config.each do |key, value|
|
@@ -34,10 +35,19 @@ class ExampleParserTest < Minitest::Test
|
|
34
35
|
case key
|
35
36
|
when "name"
|
36
37
|
name = value
|
37
|
-
when "
|
38
|
-
opts[:color] = value
|
38
|
+
when "color"
|
39
|
+
opts[:color] = case value
|
40
|
+
when "modern", "on", "true"
|
41
|
+
"modern"
|
42
|
+
when "traditional"
|
43
|
+
"traditional"
|
44
|
+
else
|
45
|
+
"off"
|
46
|
+
end
|
39
47
|
when "polyline"
|
40
48
|
opts[:polyline] = value
|
49
|
+
when "hide_default_connectors"
|
50
|
+
opts[:hide_default_connectors] = value
|
41
51
|
when "symmetrization"
|
42
52
|
opts[:symmetrize] = value
|
43
53
|
when "connector"
|
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: 1.2.
|
4
|
+
version: 1.2.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Yoichiro Hasebe
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-02-
|
11
|
+
date: 2023-02-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: optimist
|
@@ -148,6 +148,8 @@ files:
|
|
148
148
|
- docs/_examples/033.md
|
149
149
|
- docs/_examples/034.md
|
150
150
|
- docs/_examples/035.md
|
151
|
+
- docs/_examples/036.md
|
152
|
+
- docs/_examples/037.md
|
151
153
|
- docs/_includes/box_and_circle_table.html
|
152
154
|
- docs/_includes/escape_char_table.html
|
153
155
|
- docs/_includes/social_media_links.html
|
@@ -189,6 +191,8 @@ files:
|
|
189
191
|
- docs/assets/img/033.png
|
190
192
|
- docs/assets/img/034.png
|
191
193
|
- docs/assets/img/035.png
|
194
|
+
- docs/assets/img/036.png
|
195
|
+
- docs/assets/img/037.png
|
192
196
|
- docs/assets/img/elements/circle.png
|
193
197
|
- docs/assets/img/elements/circle_abc.png
|
194
198
|
- docs/assets/img/elements/circle_bold.png
|
@@ -241,6 +245,8 @@ files:
|
|
241
245
|
- docs/assets/svg/033.svg
|
242
246
|
- docs/assets/svg/034.svg
|
243
247
|
- docs/assets/svg/035.svg
|
248
|
+
- docs/assets/svg/036.svg
|
249
|
+
- docs/assets/svg/037.svg
|
244
250
|
- docs/documentation.md
|
245
251
|
- docs/documentation_ja.md
|
246
252
|
- docs/examples.html
|
@@ -298,7 +304,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
298
304
|
- !ruby/object:Gem::Version
|
299
305
|
version: '0'
|
300
306
|
requirements: []
|
301
|
-
rubygems_version: 3.4.
|
307
|
+
rubygems_version: 3.4.1
|
302
308
|
signing_key:
|
303
309
|
specification_version: 4
|
304
310
|
summary: RSyntaxTree is a graphical syntax tree generator written in Ruby
|