From f26c6c414ea6d2d6ef2e80422a590c243b171771 Mon Sep 17 00:00:00 2001 From: Fredrik Thulin Date: Mon, 7 May 2018 18:08:01 +0200 Subject: start fixing labels by importing current ones from the schematics --- extract-labels.py | 86 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100755 extract-labels.py (limited to 'extract-labels.py') diff --git a/extract-labels.py b/extract-labels.py new file mode 100755 index 0000000..b4d4328 --- /dev/null +++ b/extract-labels.py @@ -0,0 +1,86 @@ +#!/usr/bin/env python + +import os +import re +import sys +import pprint + +import pcbnew + + +def extract_labels(fn_in, labels): + in_ = open(fn_in) + prev = None + fn = os.path.basename(fn_in) + for line in in_.readlines(): + #print('R: {!r}'.format(line)) + if prev is not None: + text = line[:-1] + if re.match('^[A-Z0-9_]+$', text): + m = re.match('^Text Label (\d+) +(\d+) +(\d+) +(\d+) +~', prev) + if m: + x, y, orient, dim = m.groups() + if text not in labels[fn]: + labels[fn][text] = [] + labels[fn][text] += [{'t': 'GLabel', + 'dir': 'UnSpc', + 'x': x, + 'y': y, + 'ori': orient, + 'dim': dim}] + #print("Label: {!r}".format(text)) + else: + sys.stderr.write("Failed extracting data from previous line: {} - {}\n".format(text, prev)) + return False + prev = None + elif line.startswith('Text Label '): + prev = line + + return True + + +def main(schemas): + labels = {} + for this in schemas: + labels[os.path.basename(this)] = {} + if not extract_labels(this, labels): + return False + + #print('{}'.format(pprint.pformat(labels))) + + print('labels = {') + for this in sorted(schemas): + fn = os.path.basename(this) + if not len(labels[fn]): + continue + print(' {!r}: {{').format(fn) + for text in sorted(labels[fn].keys()): + sys.stdout.write(' {!r}: ['.format(text)) + first = True + for v in labels[fn][text]: + #sys.stdout.write(" x{}x ".format(first)) + if not first: + sys.stdout.write("\n{}".format(' ' * (len(text) + 16))) + first = False + if str(v['dim']) != '48': + sys.stdout.write("{{'t': {t!r}, 'dir': {dir!r}, 'x': {x!s}, 'y': {y!s}, 'ori': {ori!s}, 'dim': {dim!s}}},".format(**v)) + else: + sys.stdout.write("{{'t': {t!r}, 'dir': {dir!r}, 'x': {x!s}, 'y': {y!s}, 'ori': {ori!s}}},".format(**v)) + print('],') + print(' },') + print(' },') + return True + + +if __name__ == '__main__': + try: + if len(sys.argv) == 0: + sys.stderr.write('Syntax: fix-labels.py *.sch\n') + sys.exit(1) + schemas = [x for x in sys.argv if x.endswith('.sch') and not x.endswith('Cryptech Alpha.sch')] + res = main(schemas) + if res: + sys.exit(0) + sys.exit(1) + except KeyboardInterrupt: + pass -- cgit v1.2.3