#!/usr/bin/env python3 import sys top_levels = [] f = open(sys.argv[1]) current_block_stack = [top_levels] while len(current_block_stack) > 0: line = f.readline() if not line: break if '#' in line: continue if '{' in line: new_block = [] current_block_stack[-1].append(new_block) current_block_stack.append(new_block) if line.strip(): current_block_stack[-1].append(line) if '}' in line or not line: assert len(current_block_stack) > 1 or not line, current_block_stack old_block = current_block_stack.pop(-1) sorted_block = [old_block[0],] + sorted(old_block[1:-1], key=lambda x: repr(x)) + [old_block[-1],] old_block.clear() old_block.extend(sorted_block) top_levels = list(sorted(top_levels, key=lambda x: repr(x))) output_stack = [top_levels] while len(output_stack) > 0: if len(output_stack[0]) == 0: output_stack.pop(0) continue if type(output_stack[0][0]) == list: output_stack.insert(0, output_stack[0].pop(0)) continue print(output_stack[0].pop(0), end='')