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