from anytree import LevelOrderGroupIter
from anytree.importer import JsonImporter
from sys import argv
def build_rows_depth_first(node, rows, leaf_count=0):
for child in sorted(node.children, key=lambda x: x.height, reverse=True):
leaf_count = build_rows_depth_first(child, rows, leaf_count)
colspan = 0
if node.siblings:
max_sibling_height = max([s.height for s in node.siblings])
if max_sibling_height > node.height:
colspan = max_sibling_height - node.height + 1
if node.is_leaf:
cur_row = leaf_count
rows[cur_row].append(f'
{node.name} | ')
if colspan > 1:
rows[cur_row].append(f' | ')
leaf_count += 1
else:
child_leaves = len(node.leaves)
cur_row = leaf_count - child_leaves
rows[cur_row].append(f"{node.name} | ")
return leaf_count
if len(argv) < 2:
print(f"usage: {argv[0]} ")
exit()
with open(argv[1], 'r') as f:
root = JsonImporter().read(f)
output_rows = []
for i in range(len(root.leaves)):
output_rows.append([])
build_rows_depth_first(root, output_rows)
print("")
for row in output_rows:
print("")
for cell in row:
print(f" {cell}")
print("
")
print("
")