private void DoDumpCompact(TreeDumperNode node, string indent) { Debug.Assert(node != null); Debug.Assert(indent != null); // Precondition: indentation and prefix has already been output // Precondition: indent is correct for node's *children* _sb.Append(node.Text); if (node.Value != null) { _sb.AppendFormat(": {0}", DumperString(node.Value)); } _sb.AppendLine(); var children = node.Children.ToList(); for (int i = 0; i < children.Count; ++i) { var child = children[i]; if (child == null) { continue; } _sb.Append(indent); _sb.Append(i == children.Count - 1 ? '\u2514' : '\u251C'); _sb.Append('\u2500'); // First precondition met; now work out the string needed to indent // the child node's children: DoDumpCompact(child, indent + (i == children.Count - 1 ? " " : "\u2502 ")); } }
public static string DumpXML(TreeDumperNode root, string indent = null) { var dumper = new TreeDumper(); dumper.DoDumpXML(root, string.Empty, string.IsNullOrEmpty(indent) ? string.Empty : indent); return(dumper._sb.ToString()); }
private void DoDumpXML(TreeDumperNode node, string indent, string relativeIndent) { Debug.Assert(node != null); if (node.Children.All(child => child == null)) { _sb.Append(indent); if (node.Value != null) { _sb.AppendFormat("<{0}>{1}</{0}>", node.Text, DumperString(node.Value)); } else { _sb.AppendFormat("<{0} />", node.Text); } _sb.AppendLine(); } else { _sb.Append(indent); _sb.AppendFormat("<{0}>", node.Text); _sb.AppendLine(); if (node.Value != null) { _sb.Append(indent); _sb.AppendFormat("{0}", DumperString(node.Value)); _sb.AppendLine(); } var childIndent = indent + relativeIndent; foreach (var child in node.Children) { if (child == null) { continue; } DoDumpXML(child, childIndent, relativeIndent); } _sb.Append(indent); _sb.AppendFormat("</{0}>", node.Text); _sb.AppendLine(); } }
protected string DoDumpCompact(TreeDumperNode root) { DoDumpCompact(root, string.Empty); return(_sb.ToString()); }
public static string DumpCompact(TreeDumperNode root) { return(new TreeDumper().DoDumpCompact(root)); }