#!/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