aboutsummaryrefslogtreecommitdiff
path: root/sort-library.py
diff options
context:
space:
mode:
Diffstat (limited to 'sort-library.py')
-rwxr-xr-xsort-library.py61
1 files changed, 61 insertions, 0 deletions
diff --git a/sort-library.py b/sort-library.py
new file mode 100755
index 0000000..331c81a
--- /dev/null
+++ b/sort-library.py
@@ -0,0 +1,61 @@
+#!/usr/bin/env python
+
+"""
+Sort the library file like KiCad does, to minimize diffs
+"""
+
+import os
+import re
+import sys
+import pprint
+
+def chunk_file(fd):
+ res = []
+ for this in fd.readlines():
+ res += [this]
+ if this.startswith('ENDDEF'):
+ if res[0] != '#\n':
+ res = ['#\n'] + res
+ name = res[1].split(' ')[1][:-1]
+ yield(name, ''.join(res))
+ res = []
+
+
+def sort_symbols(fn_in, fn_out, refdes):
+ in_ = open(fn_in)
+ out = open(fn_out, 'w')
+ fn = os.path.basename(fn_in)
+ print('Remapping symbols in in {}'.format(fn))
+ header = in_.readline() + in_.readline()
+ symbols = {}
+ for k, v in sorted(chunk_file(in_)):
+ symbols[k] = v
+
+ out.write(header)
+ for k in sorted(symbols.keys()):
+ out.write(symbols[k])
+ out.write('#End Library\n')
+ return True
+
+
+def main(libs):
+ refdes = {}
+ for this in sorted(libs):
+ if sort_symbols(this, this + '.tmp', refdes):
+ os.rename(this + '.tmp', this)
+
+ return True
+
+
+if __name__ == '__main__':
+ try:
+ if len(sys.argv) == 0:
+ sys.stderr.write('Syntax: sort-symbols.py *.lib\n')
+ sys.exit(1)
+ libs = [x for x in sys.argv if x.endswith('.lib')]
+ res = main(libs)
+ if res:
+ sys.exit(0)
+ sys.exit(1)
+ except KeyboardInterrupt:
+ pass