diff options
Diffstat (limited to 'sort-library.py')
-rwxr-xr-x | sort-library.py | 61 |
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 |