From a30b71772e7eb831e8d87759172a02e79f9673c4 Mon Sep 17 00:00:00 2001 From: Trygve Laugstøl Date: Tue, 17 Jul 2018 12:23:58 +0200 Subject: wip. pcb. --- src/ee/kicad/pcb/__init__.py | 40 ++++++++++++++++++++++++---------------- 1 file changed, 24 insertions(+), 16 deletions(-) (limited to 'src/ee/kicad/pcb') diff --git a/src/ee/kicad/pcb/__init__.py b/src/ee/kicad/pcb/__init__.py index 79987e6..25689ef 100644 --- a/src/ee/kicad/pcb/__init__.py +++ b/src/ee/kicad/pcb/__init__.py @@ -49,18 +49,21 @@ class Pad(object): @auto_str class FpText(object): def __init__(self, **kwargs): + self.kind = None # type: str + self.value = None # type: str for k, v in kwargs.items(): setattr(self, k, v) -def parse(path): + +def parse(path) -> KicadPcb: count = 0 p = sexpr.parse(path) #p = sexpr.logging_parser(p) - (event, token) = next(p) - assert event == sexpr.EVENT_LPAREN + (e, t) = next(p) + assert e == sexpr.EVENT_LPAREN - (event, token) = next(p) - assert event == sexpr.EVENT_TEXT and token == "kicad_pcb" + (e, t) = next(p) + assert e == sexpr.EVENT_TEXT and t == "kicad_pcb" idx = 0 def _consume(): @@ -134,10 +137,14 @@ def parse(path): pads = [] fp_texts = [] - args = {} - args["footprint"] = _parse_text() - args["pads"] = pads - args["fp_texts"] = fp_texts + args = { + "footprint": _parse_text(), + "pads": pads, + "fp_texts": fp_texts, + "layer": None, + "tedit": None, + "tstamp": None, + } (event, token) = next(p) while event == sexpr.EVENT_TEXT: @@ -145,12 +152,12 @@ def parse(path): while event == sexpr.EVENT_LPAREN: (event, token) = next(p) - if token == "layer": - args[token] = _parse_text(rparen = True) + if token in ["layer", "tedit", "tstamp"]: + args[token] = _parse_text(rparen=True) elif token == "at": args[token] = _parse_at() elif token == "attr": - args[token] = [_parse_text(rparen = True)] + args[token] = [_parse_text(rparen=True)] elif token == "pad": pads.append(_parse_pad()) elif token == "fp_text": @@ -163,8 +170,9 @@ def parse(path): def _parse_pad(): texts = [] - args = {} - args["footprint"] = _parse_text() + args = { + "footprint": _parse_text() + } (event, token) = next(p) while event == sexpr.EVENT_TEXT: @@ -182,7 +190,7 @@ def parse(path): return Pad(**args) - def _parse_fp_text(): + def _parse_fp_text() -> FpText: args = { "kind": _parse_text(), "value": _parse_text(), @@ -202,7 +210,7 @@ def parse(path): x = _parse_text(to=float) y = _parse_text(to=float) rot = _parse_text(to=float, optional = True, rparen = True) - return (x, y, rot or 0) + return x, y, rot or 0 kicad_pcb = _parse_kicad_pcb() assert next(p, None) == None -- cgit v1.2.3