Ports the read path of FreeRouting's io/specctra/parser package to a Java-free Python implementation: - tokenizer: S-expression lexer mirroring SpecctraFileDescription.flex (comments, quoted strings, the string_quote IGNORE_QUOTE directive, case-insensitive keywords, and hash-prefixed names) - sexp: nested S-expression tree builder - shapes: rect/circle/polygon/path plus area-with-holes scopes - model: typed dataclasses for layers, padstacks, images, placements, nets, net classes, rules, keepouts - reader: recursive-descent scope readers producing a DsnBoard, one _read_* function per FreeRouting read_scope method 46 pytest cases cover the tokenizer, tree, shapes, and end-to-end parsing against hand-crafted fixtures modeled on FreeRouting's own test DSN files. Parses 90 of 91 upstream fixtures (the one failure is a binary OLE file, not text DSN).
85 lines
1.6 KiB
Plaintext
85 lines
1.6 KiB
Plaintext
(pcb "smd-demo.dsn"
|
|
(parser
|
|
(string_quote ")
|
|
(space_in_quoted_tokens on)
|
|
(host_cad "freeroute-test")
|
|
(host_version "1.0")
|
|
)
|
|
(resolution um 10)
|
|
(unit um)
|
|
(structure
|
|
(layer Top
|
|
(type signal)
|
|
(property
|
|
(index 0)
|
|
)
|
|
)
|
|
(layer Bottom
|
|
(type signal)
|
|
(property
|
|
(index 1)
|
|
)
|
|
)
|
|
(boundary
|
|
(path pcb 0 0 0 150000 0 150000 -90000 0 -90000 0 0)
|
|
)
|
|
(via "Via[0-1]_600:300_um")
|
|
(rule
|
|
(width 200)
|
|
(clearance 200)
|
|
(clearance 50 (type smd_smd))
|
|
)
|
|
(keepout "no_route_zone"
|
|
(rect Top 10000 -10000 20000 -20000)
|
|
)
|
|
)
|
|
(library
|
|
(padstack Rect[T]Pad_800x200_um
|
|
(shape (rect Top -400 -100 400 100))
|
|
(attach off)
|
|
)
|
|
(padstack "Via[0-1]_600:300_um"
|
|
(shape (circle Top 600))
|
|
(shape (circle Bottom 600))
|
|
(attach off)
|
|
)
|
|
(image "MiniQFN-6"
|
|
(pin Rect[T]Pad_800x200_um 1 -3000 400)
|
|
(pin Rect[T]Pad_800x200_um 2 -3000 0)
|
|
(pin Rect[T]Pad_800x200_um 3 -3000 -400)
|
|
)
|
|
(image "0603"
|
|
(pin Rect[T]Pad_800x200_um 1 -850 0)
|
|
(pin Rect[T]Pad_800x200_um 2 850 0)
|
|
)
|
|
)
|
|
(placement
|
|
(component "MiniQFN-6"
|
|
(place U1 75000 -45000 front 90.000000)
|
|
)
|
|
(component "0603"
|
|
(place R1 20000 -35000 front 0.000000)
|
|
(place R2 130000 -35000 back 180.000000)
|
|
)
|
|
)
|
|
(network
|
|
(net NET_A
|
|
(pins U1-1 R2-2)
|
|
)
|
|
(net NET_B
|
|
(pins U1-2 R1-1)
|
|
)
|
|
(class default
|
|
(circuit
|
|
(use_via "Via[0-1]_600:300_um")
|
|
)
|
|
(rule
|
|
(width 200)
|
|
(clearance 200)
|
|
)
|
|
)
|
|
)
|
|
(wiring
|
|
)
|
|
)
|