Skip to content

Commit 28ba078

Browse files
committed
fix: Use space glyphs from the right layer
1 parent 913d8d6 commit 28ba078

File tree

2 files changed

+42
-28
lines changed

2 files changed

+42
-28
lines changed

src/lib.rs

Lines changed: 32 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -123,13 +123,8 @@ impl<D: Display> Display for Tree<D> {
123123
for line in root.lines() {
124124
// print single line
125125
for s in spaces.as_slice() {
126-
if *s {
127-
self.glyphs.last_skip.fmt(f)?;
128-
self.glyphs.skip_indent.fmt(f)?;
129-
} else {
130-
self.glyphs.middle_skip.fmt(f)?;
131-
self.glyphs.skip_indent.fmt(f)?;
132-
}
126+
s.skip.fmt(f)?;
127+
s.indent.fmt(f)?;
133128
}
134129
prefix.0.fmt(f)?;
135130
prefix.1.fmt(f)?;
@@ -140,13 +135,8 @@ impl<D: Display> Display for Tree<D> {
140135
} else {
141136
// print single line
142137
for s in spaces.as_slice() {
143-
if *s {
144-
self.glyphs.last_skip.fmt(f)?;
145-
self.glyphs.skip_indent.fmt(f)?;
146-
} else {
147-
self.glyphs.middle_skip.fmt(f)?;
148-
self.glyphs.skip_indent.fmt(f)?;
149-
}
138+
s.skip.fmt(f)?;
139+
s.indent.fmt(f)?;
150140
}
151141
prefix.0.fmt(f)?;
152142
prefix.1.fmt(f)?;
@@ -156,9 +146,13 @@ impl<D: Display> Display for Tree<D> {
156146

157147
// recurse
158148
if !leaf.leaves.is_empty() {
159-
let s: &Vec<bool> = &spaces;
149+
let s: &Vec<SpacePalette> = &spaces;
160150
let mut child_spaces = s.clone();
161-
child_spaces.push(last);
151+
child_spaces.push(if last {
152+
leaf.glyphs.last_space()
153+
} else {
154+
leaf.glyphs.middle_space()
155+
});
162156
let child_spaces = Rc::new(child_spaces);
163157
enqueue_leaves(&mut queue, leaf, child_spaces);
164158
}
@@ -167,19 +161,25 @@ impl<D: Display> Display for Tree<D> {
167161
}
168162
}
169163

170-
type DisplauQueue<'t, D> = VecDeque<(bool, &'t Tree<D>, Rc<Vec<bool>>)>;
164+
type DisplauQueue<'t, D> = VecDeque<(bool, &'t Tree<D>, Rc<Vec<SpacePalette>>)>;
171165

172166
fn enqueue_leaves<'t, D: Display>(
173167
queue: &mut DisplauQueue<'t, D>,
174168
parent: &'t Tree<D>,
175-
spaces: Rc<Vec<bool>>,
169+
spaces: Rc<Vec<SpacePalette>>,
176170
) {
177171
for (i, leaf) in parent.leaves.iter().rev().enumerate() {
178172
let last = i == 0;
179173
queue.push_front((last, leaf, spaces.clone()));
180174
}
181175
}
182176

177+
#[derive(Copy, Clone, Debug, PartialEq, Eq)]
178+
struct SpacePalette {
179+
skip: &'static str,
180+
indent: &'static str,
181+
}
182+
183183
#[derive(Copy, Clone, Debug, PartialEq, Eq)]
184184
pub struct GlyphPalette {
185185
pub middle_item: &'static str,
@@ -203,6 +203,20 @@ impl GlyphPalette {
203203
skip_indent: " ",
204204
}
205205
}
206+
207+
fn middle_space(&self) -> SpacePalette {
208+
SpacePalette {
209+
skip: self.middle_skip,
210+
indent: self.skip_indent,
211+
}
212+
}
213+
214+
fn last_space(&self) -> SpacePalette {
215+
SpacePalette {
216+
skip: self.last_skip,
217+
indent: self.skip_indent,
218+
}
219+
}
206220
}
207221

208222
impl Default for GlyphPalette {

src/tests.rs

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -106,17 +106,17 @@ node 1
106106
├── node 1.1
107107
├── node 1.2
108108
├── node 1.3
109-
[mskip][iskip ](mid )(indent )node 1.3.1
110-
[mskip][iskip ](mid )(indent )node 1.3.2
111-
[mskip][iskip ](last )(indent )node 1.3.3
112-
[mskip][iskip ][lskip][iskip ]├── node 1.3.3.1
113-
[mskip][iskip ][lskip][iskip ]└── node 1.3.3.2
109+
(mid )(indent )node 1.3.1
110+
(mid )(indent )node 1.3.2
111+
(last )(indent )node 1.3.3
112+
│ (lskip)(iskip )├── node 1.3.3.1
113+
│ (lskip)(iskip )└── node 1.3.3.2
114114
└── node 1.4
115-
[lskip][iskip ]├── node 1.4.1
116-
[lskip][iskip ]├── node 1.4.2
117-
[lskip][iskip ]└── node 1.4.3
118-
[lskip][iskip ][lskip][iskip ]├── node 1.4.3.1
119-
[lskip][iskip ][lskip][iskip ]└── node 1.4.3.2
115+
├── node 1.4.1
116+
├── node 1.4.2
117+
└── node 1.4.3
118+
├── node 1.4.3.1
119+
└── node 1.4.3.2
120120
121121
"#]]
122122
);

0 commit comments

Comments
 (0)