aboutsummaryrefslogtreecommitdiff
path: root/sort-library.py
diff options
context:
space:
mode:
authorFredrik Thulin <fredrik@thulin.net>2018-05-14 21:03:08 +0200
committerFredrik Thulin <fredrik@thulin.net>2018-05-14 21:03:08 +0200
commit4b0646c8c97fed2394ef0d4ddb0e0335b22c25a8 (patch)
tree109a17850cbd367216fe2d14fd6a1e644e134deb /sort-library.py
parentfeec57312c696335a647ed679d2da73889fbbe78 (diff)
Sort the elements of the symbols too
Diffstat (limited to 'sort-library.py')
-rwxr-xr-xsort-library.py58
1 files changed, 56 insertions, 2 deletions
diff --git a/sort-library.py b/sort-library.py
index 331c81a..aa6af3b 100755
--- a/sort-library.py
+++ b/sort-library.py
@@ -9,6 +9,59 @@ import re
import sys
import pprint
+
+def get_groups_in_order(lines):
+ order = ['#', 'DEF', 'F0' , 'F1', 'F2', 'F3', 'DRAW',
+ 'A', 'S', 'T', 'P', 'X',
+ 'ENDDRAW', 'ENDDEF',
+ ]
+ for this in order:
+ yield([x for x in lines if x.startswith(this)])
+
+def sort_chunk(lines):
+ res = []
+ for this in get_groups_in_order(lines):
+ if not this:
+ continue
+ if this[0].startswith('#'):
+ res += this
+ else:
+ # secondary sort of elements in a group
+ sortfun = None
+ if this[0].startswith('T'):
+ sortfun = lambda x: (x.split(' ')[8]) # text
+ if this[0].startswith('X'):
+ sortfun = lambda x: (x.split(' ')[2]) # pin
+ if this[0].startswith('S'):
+ sortfun = lambda x: (int(x.split(' ')[1]),
+ int(x.split(' ')[2]),
+ int(x.split(' ')[3]),
+ int(x.split(' ')[4]),
+ )
+ if this[0].startswith('P'):
+ sortfun = lambda x: (int(x.split(' ')[1]),
+ int(x.split(' ')[5]),
+ int(x.split(' ')[6]),
+ int(x.split(' ')[7]),
+ int(x.split(' ')[8]),
+ )
+ if this[0].startswith('A'):
+ sortfun = lambda x: (int(x.split(' ')[1]),
+ int(x.split(' ')[2]),
+ )
+ if sortfun:
+ try:
+ this = sorted(this, key=sortfun)
+ except ValueError:
+ pass
+ #if this[0].startswith('P'):
+ # # XXX HACK WHILE DEVELOPING TO MINIMIZE DIFF
+ # for t in range(len(this)):
+ # if not this[t][-3:] in [' N\n', ' f\n', ' F\n'):
+ # this[t] = this[t][:-1] + ' N\n'
+ res += this
+ return res
+
def chunk_file(fd):
res = []
for this in fd.readlines():
@@ -17,7 +70,8 @@ def chunk_file(fd):
if res[0] != '#\n':
res = ['#\n'] + res
name = res[1].split(' ')[1][:-1]
- yield(name, ''.join(res))
+ sorted_lines = sort_chunk(res)
+ yield(name, ''.join(sorted_lines))
res = []
@@ -34,7 +88,7 @@ def sort_symbols(fn_in, fn_out, refdes):
out.write(header)
for k in sorted(symbols.keys()):
out.write(symbols[k])
- out.write('#End Library\n')
+ out.write('#\n#End Library\n')
return True