@@ -123,13 +123,8 @@ impl<D: Display> Display for Tree<D> {
123
123
for line in root. lines ( ) {
124
124
// print single line
125
125
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) ?;
133
128
}
134
129
prefix. 0 . fmt ( f) ?;
135
130
prefix. 1 . fmt ( f) ?;
@@ -140,13 +135,8 @@ impl<D: Display> Display for Tree<D> {
140
135
} else {
141
136
// print single line
142
137
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) ?;
150
140
}
151
141
prefix. 0 . fmt ( f) ?;
152
142
prefix. 1 . fmt ( f) ?;
@@ -156,9 +146,13 @@ impl<D: Display> Display for Tree<D> {
156
146
157
147
// recurse
158
148
if !leaf. leaves . is_empty ( ) {
159
- let s: & Vec < bool > = & spaces;
149
+ let s: & Vec < SpacePalette > = & spaces;
160
150
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
+ } ) ;
162
156
let child_spaces = Rc :: new ( child_spaces) ;
163
157
enqueue_leaves ( & mut queue, leaf, child_spaces) ;
164
158
}
@@ -167,19 +161,25 @@ impl<D: Display> Display for Tree<D> {
167
161
}
168
162
}
169
163
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 > > ) > ;
171
165
172
166
fn enqueue_leaves < ' t , D : Display > (
173
167
queue : & mut DisplauQueue < ' t , D > ,
174
168
parent : & ' t Tree < D > ,
175
- spaces : Rc < Vec < bool > > ,
169
+ spaces : Rc < Vec < SpacePalette > > ,
176
170
) {
177
171
for ( i, leaf) in parent. leaves . iter ( ) . rev ( ) . enumerate ( ) {
178
172
let last = i == 0 ;
179
173
queue. push_front ( ( last, leaf, spaces. clone ( ) ) ) ;
180
174
}
181
175
}
182
176
177
+ #[ derive( Copy , Clone , Debug , PartialEq , Eq ) ]
178
+ struct SpacePalette {
179
+ skip : & ' static str ,
180
+ indent : & ' static str ,
181
+ }
182
+
183
183
#[ derive( Copy , Clone , Debug , PartialEq , Eq ) ]
184
184
pub struct GlyphPalette {
185
185
pub middle_item : & ' static str ,
@@ -203,6 +203,20 @@ impl GlyphPalette {
203
203
skip_indent : " " ,
204
204
}
205
205
}
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
+ }
206
220
}
207
221
208
222
impl Default for GlyphPalette {
0 commit comments