aboutsummaryrefslogtreecommitdiff
path: root/extract-labels.py
diff options
context:
space:
mode:
authorFredrik Thulin <fredrik@thulin.net>2018-05-07 18:08:01 +0200
committerFredrik Thulin <fredrik@thulin.net>2018-05-07 18:44:39 +0200
commitf26c6c414ea6d2d6ef2e80422a590c243b171771 (patch)
tree9ae5f6eb34bb00accd44f61b3fb15ef26eb482fa /extract-labels.py
parenta2ac49201fb703691c67495deacda21d2e8388c7 (diff)
start fixing labels by importing current ones from the schematics
Diffstat (limited to 'extract-labels.py')
-rwxr-xr-xextract-labels.py86
1 files changed, 86 insertions, 0 deletions
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