rsyntaxtree 1.2.1 → 1.2.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (128) hide show
  1. checksums.yaml +4 -4
  2. data/.tags +12 -0
  3. data/Rakefile +14 -4
  4. data/bin/rsyntaxtree +4 -2
  5. data/docs/_examples/000.md +2 -1
  6. data/docs/_examples/001.md +2 -1
  7. data/docs/_examples/002.md +2 -1
  8. data/docs/_examples/003.md +2 -1
  9. data/docs/_examples/004.md +2 -1
  10. data/docs/_examples/005.md +2 -1
  11. data/docs/_examples/006.md +2 -1
  12. data/docs/_examples/007.md +2 -1
  13. data/docs/_examples/008.md +2 -1
  14. data/docs/_examples/009.md +2 -1
  15. data/docs/_examples/010.md +2 -1
  16. data/docs/_examples/011.md +2 -1
  17. data/docs/_examples/012.md +2 -1
  18. data/docs/_examples/013.md +2 -1
  19. data/docs/_examples/014.md +2 -1
  20. data/docs/_examples/015.md +2 -1
  21. data/docs/_examples/016.md +2 -1
  22. data/docs/_examples/017.md +2 -1
  23. data/docs/_examples/018.md +2 -1
  24. data/docs/_examples/019.md +2 -1
  25. data/docs/_examples/020.md +2 -1
  26. data/docs/_examples/021.md +2 -1
  27. data/docs/_examples/022.md +2 -1
  28. data/docs/_examples/023.md +2 -1
  29. data/docs/_examples/024.md +2 -1
  30. data/docs/_examples/025.md +2 -1
  31. data/docs/_examples/026.md +2 -1
  32. data/docs/_examples/027.md +2 -1
  33. data/docs/_examples/028.md +2 -1
  34. data/docs/_examples/029.md +2 -1
  35. data/docs/_examples/030.md +2 -1
  36. data/docs/_examples/031.md +2 -1
  37. data/docs/_examples/032.md +2 -1
  38. data/docs/_examples/033.md +16 -17
  39. data/docs/_examples/034.md +2 -1
  40. data/docs/_examples/035.md +5 -4
  41. data/docs/_examples/036.md +18 -0
  42. data/docs/_examples/037.md +18 -0
  43. data/docs/assets/img/000.png +0 -0
  44. data/docs/assets/img/001.png +0 -0
  45. data/docs/assets/img/002.png +0 -0
  46. data/docs/assets/img/003.png +0 -0
  47. data/docs/assets/img/004.png +0 -0
  48. data/docs/assets/img/005.png +0 -0
  49. data/docs/assets/img/006.png +0 -0
  50. data/docs/assets/img/007.png +0 -0
  51. data/docs/assets/img/008.png +0 -0
  52. data/docs/assets/img/009.png +0 -0
  53. data/docs/assets/img/010.png +0 -0
  54. data/docs/assets/img/011.png +0 -0
  55. data/docs/assets/img/012.png +0 -0
  56. data/docs/assets/img/013.png +0 -0
  57. data/docs/assets/img/014.png +0 -0
  58. data/docs/assets/img/015.png +0 -0
  59. data/docs/assets/img/016.png +0 -0
  60. data/docs/assets/img/017.png +0 -0
  61. data/docs/assets/img/018.png +0 -0
  62. data/docs/assets/img/019.png +0 -0
  63. data/docs/assets/img/020.png +0 -0
  64. data/docs/assets/img/021.png +0 -0
  65. data/docs/assets/img/022.png +0 -0
  66. data/docs/assets/img/023.png +0 -0
  67. data/docs/assets/img/024.png +0 -0
  68. data/docs/assets/img/025.png +0 -0
  69. data/docs/assets/img/026.png +0 -0
  70. data/docs/assets/img/027.png +0 -0
  71. data/docs/assets/img/028.png +0 -0
  72. data/docs/assets/img/029.png +0 -0
  73. data/docs/assets/img/030.png +0 -0
  74. data/docs/assets/img/031.png +0 -0
  75. data/docs/assets/img/032.png +0 -0
  76. data/docs/assets/img/033.png +0 -0
  77. data/docs/assets/img/034.png +0 -0
  78. data/docs/assets/img/035.png +0 -0
  79. data/docs/assets/img/036.png +0 -0
  80. data/docs/assets/img/037.png +0 -0
  81. data/docs/assets/svg/000.svg +40 -40
  82. data/docs/assets/svg/001.svg +20 -20
  83. data/docs/assets/svg/002.svg +29 -29
  84. data/docs/assets/svg/003.svg +21 -21
  85. data/docs/assets/svg/004.svg +30 -30
  86. data/docs/assets/svg/005.svg +12 -12
  87. data/docs/assets/svg/006.svg +16 -16
  88. data/docs/assets/svg/007.svg +23 -23
  89. data/docs/assets/svg/008.svg +27 -27
  90. data/docs/assets/svg/009.svg +24 -24
  91. data/docs/assets/svg/010.svg +53 -53
  92. data/docs/assets/svg/011.svg +19 -19
  93. data/docs/assets/svg/012.svg +22 -22
  94. data/docs/assets/svg/013.svg +117 -117
  95. data/docs/assets/svg/014.svg +88 -88
  96. data/docs/assets/svg/015.svg +33 -33
  97. data/docs/assets/svg/016.svg +193 -193
  98. data/docs/assets/svg/017.svg +36 -36
  99. data/docs/assets/svg/018.svg +38 -38
  100. data/docs/assets/svg/019.svg +177 -177
  101. data/docs/assets/svg/020.svg +60 -60
  102. data/docs/assets/svg/021.svg +34 -34
  103. data/docs/assets/svg/022.svg +62 -62
  104. data/docs/assets/svg/023.svg +33 -33
  105. data/docs/assets/svg/024.svg +15 -15
  106. data/docs/assets/svg/025.svg +117 -117
  107. data/docs/assets/svg/026.svg +9 -9
  108. data/docs/assets/svg/027.svg +39 -39
  109. data/docs/assets/svg/028.svg +22 -22
  110. data/docs/assets/svg/029.svg +87 -87
  111. data/docs/assets/svg/030.svg +44 -44
  112. data/docs/assets/svg/031.svg +7 -7
  113. data/docs/assets/svg/032.svg +61 -61
  114. data/docs/assets/svg/033.svg +60 -59
  115. data/docs/assets/svg/034.svg +59 -59
  116. data/docs/assets/svg/035.svg +44 -42
  117. data/docs/assets/svg/036.svg +50 -0
  118. data/docs/assets/svg/037.svg +88 -0
  119. data/docs/documentation.md +2 -2
  120. data/docs/documentation_ja.md +6 -6
  121. data/docs/examples.html +1 -1
  122. data/lib/rsyntaxtree/base_graph.rb +26 -8
  123. data/lib/rsyntaxtree/element.rb +6 -3
  124. data/lib/rsyntaxtree/svg_graph.rb +12 -8
  125. data/lib/rsyntaxtree/version.rb +1 -1
  126. data/lib/rsyntaxtree.rb +13 -3
  127. data/test/example_verify_test.rb +13 -3
  128. metadata +9 -3
@@ -16,7 +16,19 @@ module RSyntaxTree
16
16
  @element_list = element_list
17
17
  @symmetrize = params[:symmetrize]
18
18
 
19
- if params[:color]
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
- @col_line = "black"
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
- calculate_level
228
- calculate_width
229
- make_balance if @symmetrize
230
- calculate_indent
231
- node_centering
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
@@ -138,10 +138,13 @@ module RSyntaxTree
138
138
  row_width += width
139
139
  end
140
140
 
141
- total_height += if @enclosure != :none
142
- elements_height.max + @global[:height_connector_to_text]
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:black; stroke-width:#{FONT_SCALING};' x1='X1' y1='Y1' x2='X2' y2='Y2' />\n"
30
- @polyline_styles = "<polyline style='stroke:black; stroke-width:#{FONT_SCALING}; fill:none;'
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 = metrics[:height] + @margin * 2
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[:h_gap_between_nodes] * 1.5
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 b[:y][:top] > a[:y][:bottom]
463
- draw_direct_line(a[:x][:center], a[:y][:bottom], b[:x][:center], b[:y][:top], a[:arrow], b[:arrow])
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
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module RSyntaxTree
4
- VERSION = "1.2.1"
4
+ VERSION = "1.2.2"
5
5
  end
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, :color, :transparent, :polyline
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: true,
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
@@ -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 "colorization"
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.1
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-01 00:00:00.000000000 Z
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.2
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