static class Dumper
{
public static string Dump(Node root)
{
var sb = new StringBuilder();
foreach (var line in dump(root))
sb.AppendLine(line);
return sb.ToString();
}
static private IEnumerable<string> dump(Node root)
{
yield return root.Text;
if (root.Children.Count == 0)
yield break;
for (int i = 0; i < root.Children.Count; i++)
{
bool firstLineOfChild = true;
bool lastChild = i == root.Children.Count - 1;
foreach (var line in dump(root.Children[i]))
{
string prefix = lastChild
? (firstLineOfChild ? "└─" : " ")
: (firstLineOfChild ? "├─" : "│ ");
yield return prefix + line;
firstLineOfChild = false;
}
}
}
}