diff options
author | Fredrik Thulin <fredrik@thulin.net> | 2018-05-14 15:37:23 +0200 |
---|---|---|
committer | Fredrik Thulin <fredrik@thulin.net> | 2018-05-14 15:37:23 +0200 |
commit | feec57312c696335a647ed679d2da73889fbbe78 (patch) | |
tree | 62e87cc9c89e830ff91ea1d1dbd3349984fbd47a /sort-library.py | |
parent | 97de5e209b1a009be76a79b7a1c3d30eb5b53a04 (diff) |
Sort the components in the library like KiCad does
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 |