From 0f36084aadc85670b96ca63a8258d18db4b18cf8 Mon Sep 17 00:00:00 2001 From: Paulo Henrique Silva Date: Thu, 15 Jan 2015 05:01:40 -0200 Subject: Add Repeat Hole Stmt and fix UnitStmt parsing * Repeat hole support (with no real parsing, just a copy) * Fix UnitStmt to works even when a ,TZ or ,LZ information is not provided. --- gerber/excellon.py | 7 +++++-- gerber/excellon_statements.py | 21 ++++++++++++++++++++- 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/gerber/excellon.py b/gerber/excellon.py index ee38367..17b870a 100755 --- a/gerber/excellon.py +++ b/gerber/excellon.py @@ -204,8 +204,7 @@ class ExcellonParser(object): self.statements.append(DrillModeStmt()) self.state = 'DRILL' - elif (('INCH' in line or 'METRIC' in line) and - ('LZ' in line or 'TZ' in line)): + elif 'INCH' in line or 'METRIC' in line: stmt = UnitStmt.from_excellon(line) self.units = stmt.units self.zero_suppression = stmt.zero_suppression @@ -244,6 +243,10 @@ class ExcellonParser(object): self.active_tool = self.tools[stmt.tool] self.statements.append(stmt) + elif line[0] == 'R' and self.state != 'HEADER': + stmt = RepeatHoleStmt.from_excellon(line, self._settings()) + self.statements.append(stmt) + elif line[0] in ['X', 'Y']: stmt = CoordinateStmt.from_excellon(line, self._settings()) x = stmt.x diff --git a/gerber/excellon_statements.py b/gerber/excellon_statements.py index c4f4015..02bb923 100644 --- a/gerber/excellon_statements.py +++ b/gerber/excellon_statements.py @@ -29,7 +29,7 @@ __all__ = ['ExcellonTool', 'ToolSelectionStmt', 'CoordinateStmt', 'RewindStopStmt', 'EndOfProgramStmt', 'UnitStmt', 'IncrementalModeStmt', 'VersionStmt', 'FormatStmt', 'LinkToolStmt', 'MeasuringModeStmt', 'RouteModeStmt', 'DrillModeStmt', 'AbsoluteModeStmt', - 'UnknownStmt', + 'RepeatHoleStmt', 'UnknownStmt', ] @@ -280,6 +280,22 @@ class CoordinateStmt(ExcellonStatement): return '' % coord_str +class RepeatHoleStmt(ExcellonStatement): + + @classmethod + def from_excellon(cls, line, settings): + return cls(line) + + def __init__(self, line): + self.line = line + + def to_excellon(self, settings): + return self.line + + def __str__(self): + return '' % self.line + + class CommentStmt(ExcellonStatement): @classmethod @@ -478,6 +494,9 @@ class UnknownStmt(ExcellonStatement): def to_excellon(self, settings=None): return self.stmt + def __str__(self): + return "" % self.stmt + def pairwise(iterator): """ Iterate over list taking two elements at a time. -- cgit