pretty print tree

This commit is contained in:
tigercosmos 2017-12-22 16:21:32 +08:00
parent dfd8e85338
commit 43c94d3445
4 changed files with 42 additions and 15 deletions

View file

@ -22,12 +22,21 @@ impl PrintTree {
} }
} }
/// Descend one level in the tree with the given title. /// Descend one level in the tree with the given title string.
pub fn new_level(&mut self, title: String) { pub fn new_level(&mut self, queued_title: String) {
self.flush_queued_item("\u{251C}\u{2500}"); self.flush_queued_item("\u{251C}\u{2500}");
self.print_level_prefix(); self.print_level_prefix();
println!("\u{251C}\u{2500} {}", title);
let items: Vec<&str> = queued_title.split("\n").collect();
println!("\u{251C}\u{2500} {}", items[0]);
for i in 1..items.len() {
self.print_level_child_indentation();
print!("{}", items[i]);
if i < items.len() {
print!("\n");
}
}
self.level = self.level + 1; self.level = self.level + 1;
} }
@ -35,7 +44,7 @@ impl PrintTree {
/// Ascend one level in the tree. /// Ascend one level in the tree.
pub fn end_level(&mut self) { pub fn end_level(&mut self) {
self.flush_queued_item("\u{2514}\u{2500}"); self.flush_queued_item("\u{2514}\u{2500}");
self.level = self.level - 1; self.level -= 1;
} }
/// Add an item to the current level in the tree. /// Add an item to the current level in the tree.
@ -50,10 +59,25 @@ impl PrintTree {
} }
} }
fn print_level_child_indentation(&self) {
for _ in 0..(self.level + 1) {
print!("\u{2502} ");
}
print!("{}", " ".repeat(7));
}
fn flush_queued_item(&mut self, prefix: &str) { fn flush_queued_item(&mut self, prefix: &str) {
if let Some(queued_item) = self.queued_item.take() { if let Some(queued_item) = self.queued_item.take() {
self.print_level_prefix(); self.print_level_prefix();
println!("{} {}", prefix, queued_item); let items: Vec<&str> = queued_item.split("\n").collect();
println!("{} {}", prefix, items[0]);
for i in 1..items.len() {
self.print_level_child_indentation();
print!("{}", items[i]);
if i < items.len() {
print!("\n");
}
}
} }
} }
} }

View file

@ -2191,7 +2191,7 @@ impl Flow for BlockFlow {
} }
fn print_extra_flow_children(&self, print_tree: &mut PrintTree) { fn print_extra_flow_children(&self, print_tree: &mut PrintTree) {
print_tree.add_item(format!("↑↑ Fragment for block: {:?}", self.fragment)); print_tree.add_item(format!("↑↑ Fragment for block:{:?}", self.fragment));
} }
} }

View file

@ -925,26 +925,29 @@ impl fmt::Debug for BaseFlow {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
let child_count = self.parallel.children_count.load(Ordering::SeqCst); let child_count = self.parallel.children_count.load(Ordering::SeqCst);
let child_count_string = if child_count > 0 { let child_count_string = if child_count > 0 {
format!(" children={}", child_count) format!("\nchildren={}", child_count)
} else { } else {
"".to_owned() "".to_owned()
}; };
let absolute_descendants_string = if self.abs_descendants.len() > 0 { let absolute_descendants_string = if self.abs_descendants.len() > 0 {
format!(" abs-descendents={}", self.abs_descendants.len()) format!("\nabs-descendents={}", self.abs_descendants.len())
} else { } else {
"".to_owned() "".to_owned()
}; };
let damage_string = if self.restyle_damage != RestyleDamage::empty() { let damage_string = if self.restyle_damage != RestyleDamage::empty() {
format!(" damage={:?}", self.restyle_damage) format!("\ndamage={:?}", self.restyle_damage)
} else { } else {
"".to_owned() "".to_owned()
}; };
write!(f, write!(f,
"sc={:?} pos={:?}, {}{} floatspec-in={:?}, floatspec-out={:?}, \ "\nsc={:?}\
overflow={:?}{}{}{}", \npos={:?}{}{}\
\nfloatspec-in={:?}\
\nfloatspec-out={:?}\
\noverflow={:?}{}{}{}",
self.stacking_context_id, self.stacking_context_id,
self.position, self.position,
if self.flags.contains(FlowFlags::FLOATS_LEFT) { "FL" } else { "" }, if self.flags.contains(FlowFlags::FLOATS_LEFT) { "FL" } else { "" },

View file

@ -2958,24 +2958,24 @@ impl Fragment {
impl fmt::Debug for Fragment { impl fmt::Debug for Fragment {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
let border_padding_string = if !self.border_padding.is_zero() { let border_padding_string = if !self.border_padding.is_zero() {
format!(" border_padding={:?}", self.border_padding) format!("\nborder_padding={:?}", self.border_padding)
} else { } else {
"".to_owned() "".to_owned()
}; };
let margin_string = if !self.margin.is_zero() { let margin_string = if !self.margin.is_zero() {
format!(" margin={:?}", self.margin) format!("\nmargin={:?}", self.margin)
} else { } else {
"".to_owned() "".to_owned()
}; };
let damage_string = if self.restyle_damage != RestyleDamage::empty() { let damage_string = if self.restyle_damage != RestyleDamage::empty() {
format!(" damage={:?}", self.restyle_damage) format!("\ndamage={:?}", self.restyle_damage)
} else { } else {
"".to_owned() "".to_owned()
}; };
write!(f, "{}({}) [{:?}] border_box={:?}{}{}{}", write!(f, "\n{}({}) [{:?}]\nborder_box={:?}{}{}{}",
self.specific.get_type(), self.specific.get_type(),
self.debug_id, self.debug_id,
self.specific, self.specific,