mirror of https://github.com/YosysHQ/icestorm.git
42 lines
1.1 KiB
Python
42 lines
1.1 KiB
Python
|
|
#!/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='')
|