summaryrefslogtreecommitdiff
path: root/gerber
diff options
context:
space:
mode:
authorju5t <m@ju5t.nl>2016-12-01 21:08:17 +0100
committerju5t <m@ju5t.nl>2016-12-01 21:08:17 +0100
commitffeaf788f090b10307247775b43dd7c0b0fd7342 (patch)
tree895d64d4e3ff260612e642651a26c2ce10b32e55 /gerber
parentc15033a7834b825999e9da5ef4a5135cfb125b25 (diff)
downloadgerbonara-ffeaf788f090b10307247775b43dd7c0b0fd7342.tar.gz
gerbonara-ffeaf788f090b10307247775b43dd7c0b0fd7342.tar.bz2
gerbonara-ffeaf788f090b10307247775b43dd7c0b0fd7342.zip
(#61) Add regex option to discover layer classes
Diffstat (limited to 'gerber')
-rw-r--r--gerber/layers.py40
-rw-r--r--gerber/tests/test_layers.py21
2 files changed, 49 insertions, 12 deletions
diff --git a/gerber/layers.py b/gerber/layers.py
index bd55fb9..8d47816 100644
--- a/gerber/layers.py
+++ b/gerber/layers.py
@@ -24,59 +24,71 @@ from .excellon import ExcellonFile
from .ipc356 import IPCNetlist
-Hint = namedtuple('Hint', 'layer ext name')
+Hint = namedtuple('Hint', 'layer ext name regex')
hints = [
Hint(layer='top',
ext=['gtl', 'cmp', 'top', ],
- name=['art01', 'top', 'GTL', 'layer1', 'soldcom', 'comp', 'F.Cu', ]
+ name=['art01', 'top', 'GTL', 'layer1', 'soldcom', 'comp', 'F.Cu', ],
+ regex=''
),
Hint(layer='bottom',
ext=['gbl', 'sld', 'bot', 'sol', 'bottom', ],
- name=['art02', 'bottom', 'bot', 'GBL', 'layer2', 'soldsold', 'B.Cu', ]
+ name=['art02', 'bottom', 'bot', 'GBL', 'layer2', 'soldsold', 'B.Cu', ],
+ regex=''
),
Hint(layer='internal',
ext=['in', 'gt1', 'gt2', 'gt3', 'gt4', 'gt5', 'gt6', 'g1',
'g2', 'g3', 'g4', 'g5', 'g6', ],
name=['art', 'internal', 'pgp', 'pwr', 'gp1', 'gp2', 'gp3', 'gp4',
- 'gt5', 'gp6', 'gnd', 'ground', 'In1.Cu', 'In2.Cu', 'In3.Cu', 'In4.Cu']
+ 'gt5', 'gp6', 'gnd', 'ground', 'In1.Cu', 'In2.Cu', 'In3.Cu', 'In4.Cu'],
+ regex=''
),
Hint(layer='topsilk',
ext=['gto', 'sst', 'plc', 'ts', 'skt', 'topsilk', ],
- name=['sst01', 'topsilk', 'silk', 'slk', 'sst', 'F.SilkS']
+ name=['sst01', 'topsilk', 'silk', 'slk', 'sst', 'F.SilkS'],
+ regex=''
),
Hint(layer='bottomsilk',
ext=['gbo', 'ssb', 'pls', 'bs', 'skb', 'bottomsilk',],
- name=['bsilk', 'ssb', 'botsilk', 'B.SilkS']
+ name=['bsilk', 'ssb', 'botsilk', 'B.SilkS'],
+ regex=''
),
Hint(layer='topmask',
ext=['gts', 'stc', 'tmk', 'smt', 'tr', 'topmask', ],
name=['sm01', 'cmask', 'tmask', 'mask1', 'maskcom', 'topmask',
- 'mst', 'F.Mask',]
+ 'mst', 'F.Mask',],
+ regex=''
),
Hint(layer='bottommask',
ext=['gbs', 'sts', 'bmk', 'smb', 'br', 'bottommask', ],
- name=['sm', 'bmask', 'mask2', 'masksold', 'botmask', 'msb', 'B.Mask',]
+ name=['sm', 'bmask', 'mask2', 'masksold', 'botmask', 'msb', 'B.Mask',],
+ regex=''
),
Hint(layer='toppaste',
ext=['gtp', 'tm', 'toppaste', ],
- name=['sp01', 'toppaste', 'pst', 'F.Paste']
+ name=['sp01', 'toppaste', 'pst', 'F.Paste'],
+ regex=''
),
Hint(layer='bottompaste',
ext=['gbp', 'bm', 'bottompaste', ],
- name=['sp02', 'botpaste', 'psb', 'B.Paste', ]
+ name=['sp02', 'botpaste', 'psb', 'B.Paste', ],
+ regex=''
),
Hint(layer='outline',
ext=['gko', 'outline', ],
- name=['BDR', 'border', 'out', 'Edge.Cuts', ]
+ name=['BDR', 'border', 'out', 'Edge.Cuts', ],
+ regex=''
),
Hint(layer='ipc_netlist',
ext=['ipc'],
name=[],
+ regex=''
),
Hint(layer='drawing',
ext=['fab'],
- name=['assembly drawing', 'assembly', 'fabrication', 'fab drawing']
+ name=['assembly drawing', 'assembly', 'fabrication', 'fab drawing'],
+ regex=''
),
]
@@ -94,6 +106,10 @@ def guess_layer_class(filename):
directory, name = os.path.split(filename)
name, ext = os.path.splitext(name.lower())
for hint in hints:
+ if hint.regex:
+ if re.findall(hint.regex, name, re.IGNORECASE):
+ return hint.layer
+
patterns = [r'^(\w*[.-])*{}([.-]\w*)?$'.format(x) for x in hint.name]
if ext[1:] in hint.ext or any(re.findall(p, name, re.IGNORECASE) for p in patterns):
return hint.layer
diff --git a/gerber/tests/test_layers.py b/gerber/tests/test_layers.py
index 7e36dc2..6cafecf 100644
--- a/gerber/tests/test_layers.py
+++ b/gerber/tests/test_layers.py
@@ -48,6 +48,27 @@ def test_guess_layer_class():
for filename, layer_class in test_vectors:
assert_equal(layer_class, guess_layer_class(filename))
+def test_guess_layer_class_regex():
+ """ Test regular expressions for layer matching
+ """
+
+ # Add any specific test case (filename, layer_class)
+ test_vectors = [('test - top copper.gbr', 'top'),
+ ('test - copper top.gbr', 'top'), ]
+
+ # Add custom regular expressions
+ layer_hints = [
+ Hint(layer='top',
+ ext=[],
+ name=[],
+ regex=r'(.*)(\scopper top|\stop copper)$'
+ ),
+ ]
+ hints.extend(layer_hints)
+
+ for filename, layer_class in test_vectors:
+ assert_equal(layer_class, guess_layer_class(filename))
+
def test_sort_layers():
""" Test layer ordering