UNPKG

gerber-to-svg

Version:

Gerber and NC drill file to SVG converter

111 lines (96 loc) 2.87 kB
(function() { var ABS_COMMAND, DrillParser, INCH_COMMAND, INC_COMMAND, METRIC_COMMAND, PLACES_BACKUP, ZERO_BACKUP, parseCoord, reCOORD; parseCoord = require('./coord-parser'); INCH_COMMAND = { 'FMAT,1': 'M70', 'FMAT,2': 'M72' }; METRIC_COMMAND = 'M71'; ABS_COMMAND = 'G90'; INC_COMMAND = 'G91'; reCOORD = /[XY]{1,2}/; ZERO_BACKUP = 'L'; PLACES_BACKUP = [2, 4]; DrillParser = (function() { function DrillParser() { this.format = { zero: null, places: null }; this.fmat = 'FMAT,2'; } DrillParser.prototype.parseCommand = function(block) { var code, command, dia, k, v, _ref, _ref1, _ref2; command = {}; if (block[0] === ';') { return command; } if (block === 'FMAT,1') { this.fmat = block; } else if (block === 'M30' || block === 'M00') { command.set = { done: true }; } else if (block === INCH_COMMAND[this.fmat] || block.match(/INCH/)) { this.format.places = [2, 4]; command.set = { units: 'in' }; } else if (block === METRIC_COMMAND || block.match(/METRIC/)) { this.format.places = [3, 3]; command.set = { units: 'mm' }; } else if (block === ABS_COMMAND) { command.set = { notation: 'abs' }; } else if (block === INC_COMMAND) { command.set = { notation: 'inc' }; } else if ((code = (_ref = block.match(/T\d+/)) != null ? _ref[0] : void 0)) { while (code[1] === '0') { code = code[0] + code.slice(2); } if ((dia = (_ref1 = block.match(/C[\d\.]+(?=.*$)/)) != null ? _ref1[0] : void 0)) { dia = Number(dia.slice(1)); command.tool = {}; command.tool[code] = { dia: dia }; } else { command.set = { currentTool: code }; } } if (block.match(/TZ/)) { this.format.zero = 'L'; } else if (block.match(/LZ/)) { this.format.zero = 'T'; } if (block.match(reCOORD)) { command.op = { "do": 'flash' }; if (this.format.zero == null) { console.warn('no drill file zero suppression specified. assuming leading zero suppression (same as no zero suppression)'); this.format.zero = ZERO_BACKUP; } if (this.format.places == null) { console.warn('no drill file units specified; assuming 2:4 inches format'); this.format.places = PLACES_BACKUP; } _ref2 = parseCoord(block, this.format); for (k in _ref2) { v = _ref2[k]; command.op[k] = v; } } return command; }; return DrillParser; })(); module.exports = DrillParser; }).call(this);