import enum import math import re from .sexp import * from .base_types import * def unfuck_layers(layers): if layers and layers[0] == 'F&B.Cu': return ['F.Cu', 'B.Cu', *layers[1:]] else: return layers def fuck_layers(layers): if layers and 'F.Cu' in layers and 'B.Cu' in layers and not any(re.match(r'^In[0-9]+\.Cu$', l) for l in layers): return ['F&B.Cu', *(l for l in layers if l not in ('F.Cu', 'B.Cu'))] else: return layers def layer_mask(layers): mask = 0 for layer in layers: match layer: case '*.Cu': return 0xff case 'F.Cu': mask |= 1<<0 case 'B.Cu': mask |= 1<<31 case _: if (m := re.match(f'In([0-9]+)\.Cu', layer)): mask |= 1<