Add Sublime G-code (RepRap) syntax
This commit is contained in:
		
							
								
								
									
										149
									
								
								buildroot/share/sublime/RepRapTools/G-Code.sublime-syntax
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										149
									
								
								buildroot/share/sublime/RepRapTools/G-Code.sublime-syntax
									
									
									
									
									
										Normal file
									
								
							| @@ -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 | ||||
		Reference in New Issue
	
	Block a user