pretty_tree 0.1.0 → 0.1.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: 8901c02377ffae134b6db07c23e714032a9673464c7cbb866e4696f83aedd623
4
- data.tar.gz: 1b4442d03bc01ffd6719f5ca509e985e3b1ea6b517c4043fb7abc62324b8284e
3
+ metadata.gz: 7a0038d904ee934c5ed5041915c450434aa1258f942f215acc90917abea691f6
4
+ data.tar.gz: a1708210b4889d573379f9be27824b67efa37459e2ac82c4ea25a2d2caa28374
5
5
  SHA512:
6
- metadata.gz: c9f0c54c4e0d93e65c2e3aadc15d352d8b51751c891c1be760fa59c633fea0c9d64b900b47a7544b2fe58ea5aadf8dd83d2433cd946131d7892d375ecac70492
7
- data.tar.gz: 9708437a157ede479cc7ffe932bb4723124be884a24f3481b3d0aa55f780b18eb4016258d5dbfc96a3c2b0ec061d26080c8e726cf480f2103e2c9c97088986b9
6
+ metadata.gz: f900030677c0c2ccc8e73fa1423149f61b8a0e781aa0c7e5ff7135fbbf7774d7375c4a9f82ab80cfbdd100dc6fa7fd70d05419e862b8082fe3fea2c552de4c7f
7
+ data.tar.gz: 5b43d91bc0f4375c4ec60600d0e99df8ca6f094bbb6de366f86867a9e46c25dc0a645d069e16a0be0740e6474a5ce49cd8bcd197f6e2519a8ccda1c80210eb15
data/CHANGELOG.md CHANGED
@@ -7,6 +7,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.1.1] - 2026-09-30
11
+
12
+ ### Fixed
13
+
14
+ - Labels of even length are now centered on their connectors in binary layouts
15
+ when the children's anchors are an odd distance apart. They were one column
16
+ too far to the left.
17
+
10
18
  ## [0.1.0] - 2026-09-30
11
19
 
12
20
  ### Added
@@ -21,5 +29,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
21
29
  - `PrettyTree.preview` prints example trees.
22
30
  - `PrettyTree::Error` is raised for invalid nested-array trees.
23
31
 
24
- [Unreleased]: https://github.com/riccardo-giomi/pretty_tree/compare/v0.1.0...HEAD
32
+ [Unreleased]: https://github.com/riccardo-giomi/pretty_tree/compare/v0.1.1...HEAD
33
+ [0.1.1]: https://github.com/riccardo-giomi/pretty_tree/compare/v0.1.0...v0.1.1
25
34
  [0.1.0]: https://github.com/riccardo-giomi/pretty_tree/releases/tag/v0.1.0
35
+
@@ -18,7 +18,7 @@ module PrettyTree
18
18
  layout = layout_for(child_boxes)
19
19
  lines, width, offsets = layout.merge
20
20
 
21
- anchor = layout.label_anchor(offsets)
21
+ anchor = layout.label_anchor(offsets, label.length)
22
22
  lines, width, offsets, anchor = layout.accommodate_parent_label(lines, width, offsets, anchor, label.length)
23
23
 
24
24
  label_line = layout.render_label_line(label, width, anchor)
@@ -146,7 +146,7 @@ module PrettyTree
146
146
  end
147
147
 
148
148
  class Unary < Base
149
- def label_anchor(offsets)
149
+ def label_anchor(offsets, label_length = 0)
150
150
  offsets.first
151
151
  end
152
152
 
@@ -173,11 +173,12 @@ module PrettyTree
173
173
 
174
174
  def self.empty_box = Box.empty("")
175
175
 
176
- def label_anchor(offsets)
176
+ def label_anchor(offsets, label_length = 0)
177
177
  return offsets.last - CONNECTOR_SPAN if @boxes.first.empty?
178
178
  return offsets.first + CONNECTOR_SPAN if @boxes.last.empty?
179
179
 
180
- offsets.first + (offsets.last - offsets.first) / 2
180
+ sum = offsets.first + offsets.last
181
+ (sum.odd? && label_length.even?) ? (sum + 1) / 2 : sum / 2
181
182
  end
182
183
 
183
184
  def merge
@@ -202,7 +203,7 @@ module PrettyTree
202
203
  end
203
204
 
204
205
  class Ternary < Base
205
- def label_anchor(offsets)
206
+ def label_anchor(offsets, label_length = 0)
206
207
  offsets[1]
207
208
  end
208
209
 
@@ -222,15 +223,16 @@ module PrettyTree
222
223
  super(boxes.reject(&:empty?))
223
224
  end
224
225
 
225
- def label_anchor(offsets)
226
- middle_or_middle_right_index = offsets.size / 2
227
- middle_or_middle_right_offset = offsets[middle_or_middle_right_index]
228
-
229
- return middle_or_middle_right_offset if offsets.size.odd?
230
-
231
- middle_left_offset = offsets[middle_or_middle_right_index - 1]
226
+ def label_anchor(offsets, label_length = 0)
227
+ index = offsets.size / 2
228
+ if offsets.size.odd?
229
+ offsets[index]
230
+ else
231
+ middle_left = offsets[index - 1]
232
+ middle_right = offsets[index]
232
233
 
233
- middle_left_offset + ((middle_or_middle_right_offset - middle_left_offset) / 2)
234
+ middle_left + (middle_right - middle_left) / 2
235
+ end
234
236
  end
235
237
 
236
238
  def render_connector_lines(parent_label, parent_anchor, offsets, width)
@@ -47,6 +47,10 @@ module PrettyTree
47
47
  render(["root", [1, ["a", ["A"]], ["b", ["B"]], ["c", ["C"]]], [2, ["a", ["A"]], ["b", ["B"]], ["c", ["C"]]], [3, ["a", ["A"]], ["b", ["B"]], ["c", ["C"]]], [4, ["a", ["A"]], ["b", ["B"]], ["c", ["C"]]]])
48
48
  render(["root", [1, nil, nil, nil, nil, nil], [2, nil, nil, nil, nil, nil], [3, nil, nil, nil, nil, nil], [4, nil, nil, nil, nil, nil], [5, nil, nil, nil, nil, nil]])
49
49
  render(["root", [1, ["a", ["A"]], ["b", ["B"]], ["c", ["C"]]], [2, ["a", ["A"]], ["b", ["B"]], ["c", ["C"]]], [3, ["a", ["A"]], ["b", ["B"]], ["c", ["C"]]], [4, ["a", ["A"]], ["b", ["B"]], ["c", ["C"]]], [5, ["a", ["A"]], ["b", ["B"]], ["c", ["C"]]]])
50
+ render([[7, 2], [[5, 4], [[2, 3], nil, nil], [[4, 7], nil, nil]], [[9, 6], [[8, 1], nil, nil], nil]])
51
+ render([[7, 2], [[5, 4], [[2, 3], nil, nil], [[4, 7], nil, nil]], [[10, 6], [[12, 21], nil, nil], [[1, 35], nil, nil]]])
52
+ render(["root", ["aaaa", nil, nil], ["bbbb", nil, nil], ["cccc", nil, nil], ["dddd", nil, nil]])
53
+ render([1000, *(1..4).map { |n| [1000 + n * 100, *(1..4).map { |m| [1000 + n * 100 + m] }] }])
50
54
  end
51
55
  end
52
56
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module PrettyTree
4
- VERSION = "0.1.0"
4
+ VERSION = "0.1.1"
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pretty_tree
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Riccardo Giomi