Scott Lahteine
6 years ago
1 changed files with 149 additions and 0 deletions
@ -0,0 +1,149 @@ |
|||||
|
%YAML 1.2 |
||||
|
--- |
||||
|
# |
||||
|
# G-Code (RepRap, not ISO-6983) |
||||
|
# |
||||
|
# RapRap G-Code is very simple. |
||||
|
# |
||||
|
# TODO: Lines that start with N get a different context, accepting a checksum. |
||||
|
# |
||||
|
name: G-Code (RepRap) |
||||
|
file_extensions: |
||||
|
- [ gco, gcode ] |
||||
|
scope: source.gcode |
||||
|
variables: |
||||
|
decimal: '[+-]?\d+(\.(\d+)?)?' |
||||
|
|
||||
|
contexts: |
||||
|
prototype: |
||||
|
- match: \s+ |
||||
|
|
||||
|
- include: mixin_comment |
||||
|
|
||||
|
- match: $ |
||||
|
pop: true |
||||
|
|
||||
|
main: |
||||
|
- meta_content_scope: ctx.line.gcode |
||||
|
|
||||
|
- match: '([Nn]\s*(\d+))' |
||||
|
captures: |
||||
|
1: ctx.gcode_line_num |
||||
|
2: constant.numeric.line-number.gcode |
||||
|
|
||||
|
- match: () |
||||
|
set: gcode_command |
||||
|
|
||||
|
# G, M, or T command |
||||
|
gcode_command: |
||||
|
- meta_content_scope: ctx.command.gcode |
||||
|
|
||||
|
# M20 S2 P/path/to/file/name.gco |
||||
|
- match: ([Mm](20))(\s*(S)(2)\s*(P)) |
||||
|
captures: |
||||
|
1: entity.command.gcode markup.bold.gcode |
||||
|
2: constant.numeric.command.gcode |
||||
|
3: ctx.params.gcode |
||||
|
4: keyword.param.gcode |
||||
|
5: constant.numeric.param.gcode |
||||
|
6: keyword.param.gcode |
||||
|
set: gcode_string_arg |
||||
|
|
||||
|
# command followed by data |
||||
|
- match: ([Mm]\s*(11[78]))\b |
||||
|
captures: |
||||
|
1: entity.command.gcode markup.bold.gcode |
||||
|
2: constant.numeric.command.gcode |
||||
|
set: gcode_string_arg |
||||
|
|
||||
|
# command followed by data |
||||
|
- match: '([GMTgmt]\s*(\d+)((\.)(\d+))?)' |
||||
|
captures: |
||||
|
1: entity.command.gcode markup.bold.gcode |
||||
|
2: constant.numeric.command.gcode |
||||
|
4: entity.separator.subcode |
||||
|
5: constant.numeric.subcode |
||||
|
set: gcode_params |
||||
|
|
||||
|
- match: () |
||||
|
set: syntax_error |
||||
|
|
||||
|
# Parameters of a command |
||||
|
gcode_params: |
||||
|
- meta_content_scope: ctx.params.gcode |
||||
|
|
||||
|
# M32 [S<pos>] [P<bool>] !/path/file.gco# |
||||
|
- match: '!' |
||||
|
scope: entity.string.filename.open |
||||
|
push: gcode_path_arg |
||||
|
|
||||
|
# asterisk starts a checksum |
||||
|
- match: \* |
||||
|
scope: entity.checksum.gcode |
||||
|
set: gcode_checksum |
||||
|
|
||||
|
# parameter and value |
||||
|
- match: ([A-Za-z])\s*({{decimal}}) |
||||
|
captures: |
||||
|
1: keyword.param.gcode |
||||
|
2: constant.numeric.param.gcode |
||||
|
|
||||
|
# parameter with no value |
||||
|
- match: '[A-Za-z]' |
||||
|
scope: keyword.param.gcode |
||||
|
set: gcode_params |
||||
|
|
||||
|
- match: () |
||||
|
set: syntax_error |
||||
|
|
||||
|
gcode_string_arg: |
||||
|
- meta_content_scope: ctx.string.gcode |
||||
|
|
||||
|
- match: ([^;]+) |
||||
|
scope: string.unquoted.gcode |
||||
|
|
||||
|
gcode_path_arg: |
||||
|
- meta_content_scope: ctx.path.gcode |
||||
|
|
||||
|
- match: ([^#]+) |
||||
|
scope: string.unquoted.path.gcode |
||||
|
|
||||
|
- match: (#) |
||||
|
scope: entity.string.path.close.gcode |
||||
|
pop: true |
||||
|
|
||||
|
gcode_checksum: |
||||
|
- meta_content_scope: ctx.checksum.gcode |
||||
|
|
||||
|
- match: \d+ |
||||
|
scope: constant.numeric.checksum.gcode |
||||
|
|
||||
|
- match: () |
||||
|
set: syntax_error |
||||
|
|
||||
|
# Done interpreting to the end of the line |
||||
|
gcode_line_done: |
||||
|
- match: \s*$ |
||||
|
pop: true |
||||
|
|
||||
|
# Comments begin with a ';' and finish at the end of the line. |
||||
|
mixin_comment: |
||||
|
- match: ^\s*; |
||||
|
scope: punctuation.definition.comment.line.start |
||||
|
set: gcode_comment |
||||
|
- match: \s*; |
||||
|
scope: punctuation.definition.comment.eol.start |
||||
|
set: gcode_comment |
||||
|
|
||||
|
# Comment to end of line. |
||||
|
gcode_comment: |
||||
|
- meta_scope: comment.gcode |
||||
|
- match: \s*$ |
||||
|
pop: true |
||||
|
|
||||
|
# Everything after this point is broken by a syntax error |
||||
|
syntax_error: |
||||
|
- meta_scope: invalid.error.syntax.gcode |
||||
|
|
||||
|
- match: .*$ |
||||
|
pop: true |
Loading…
Reference in new issue