From c1518b5dfe7c5265ffa2df60598a0db223263ecb Mon Sep 17 00:00:00 2001 From: Paulo Henrique Silva Date: Tue, 17 Dec 2013 18:05:30 -0200 Subject: Working version of Gerber RS-274X parser. --- gerber.md | 73 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 gerber.md (limited to 'gerber.md') diff --git a/gerber.md b/gerber.md new file mode 100644 index 0000000..865d177 --- /dev/null +++ b/gerber.md @@ -0,0 +1,73 @@ + +# Gerber (RS-274X or Extended Gerber) is a bilevel, resolution independent image format. + +# // graphic objects +# // draw: line segment, thickness, round or square line endings. (solid circle and rectangule apertures only) +# // arc: circular arc, thickness, round endings. (solid circle standard aperture only) +# // flash: replication of a given apertura (shape) +# // region: are defined by a countour (linear/arc segments.) +# +# // draw/arc: can have zero length (just flash the aperture) +# // flash: any aperture can be flashed +# +# // operation codes operates on coordinate data blocks. each operation code is for one coordinate data block pair and vice-versa. +# // D01: stroke an aperture from current point to coordinate pair. region mode off. lights-on move. +# // D02: move current point to this coordinate pair +# // D03: flash current aperture at this coordinate pair. +# +# // graphics state +# // all state controlled by codes and parameters, except current point +# // +# // state fixed? initial value +# // coordinate format fixed undefined +# // unit fixed undefined +# // image polarity fixed positive +# // steps/repeat variable 1,1,-,- +# // level polarity variable dark +# // region mode variable off +# // current aperture variable undefined +# // quadrant mode variable undefined +# // interpolation mode variable undefined +# // current point variable (0,0) +# +# // attributes: metadata, both standard and custom. No change on image. +# +# // G01: linear +# // G04: comment +# // M02: end of file +# // D: select aperture +# // G75: multi quadrant mode (circles) +# // G36: region begin +# // G37: region end +# +# // [G01] [Xnnfffff] [Ynnffff] D01* +# +# // ASCII 32-126, CR LF. +# // * end-of-block +# // % parameer delimiter +# // , field separator +# // only in comments +# // case sensitive +# +# // int: +/- 32 bit signed +# // decimal: +/- digits +# // names: [a-zA-Z_$]{[a-zA-Z_$0-9]+} (255) +# // strings: [a-zA-Z0-9_+-/!?<>”’(){}.\|&@# ]+ (65535) +# +# // data block: end in * +# // statement: one or more data block, if contain parameters starts and end in % (parameter statement) +# // statement: [%]{}[%] +# // statements: function code, coordinate data, parameters +# +# // function code: operation codes (D01..) or code that set state. +# // function codes applies before operation codes act on coordinates +# +# // coordinate data: : [X][Y][I][J](D01|D02|D03) +# // offsets are not modal +# +# // parameter: %Parameter code[optional modifiers]*% +# // code: 2 characters +# +# // parameters can have line separators: %{{}}% +# +# // function code: (GDM){1}[number], parameters: [AZ]{2} \ No newline at end of file -- cgit