12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- /*
- Language: G-code (ISO 6983)
- Contributors: Adam Joseph Cook <adam.joseph.cook@gmail.com>
- Description: G-code syntax highlighter for Fanuc and other common CNC machine tool controls.
- Website: https://www.sis.se/api/document/preview/911952/
- */
- function gcode(hljs) {
- const GCODE_IDENT_RE = '[A-Z_][A-Z0-9_.]*';
- const GCODE_CLOSE_RE = '%';
- const GCODE_KEYWORDS = {
- $pattern: GCODE_IDENT_RE,
- keyword: 'IF DO WHILE ENDWHILE CALL ENDIF SUB ENDSUB GOTO REPEAT ENDREPEAT ' +
- 'EQ LT GT NE GE LE OR XOR'
- };
- const GCODE_START = {
- className: 'meta',
- begin: '([O])([0-9]+)'
- };
- const NUMBER = hljs.inherit(hljs.C_NUMBER_MODE, {
- begin: '([-+]?((\\.\\d+)|(\\d+)(\\.\\d*)?))|' + hljs.C_NUMBER_RE
- });
- const GCODE_CODE = [
- hljs.C_LINE_COMMENT_MODE,
- hljs.C_BLOCK_COMMENT_MODE,
- hljs.COMMENT(/\(/, /\)/),
- NUMBER,
- hljs.inherit(hljs.APOS_STRING_MODE, {
- illegal: null
- }),
- hljs.inherit(hljs.QUOTE_STRING_MODE, {
- illegal: null
- }),
- {
- className: 'name',
- begin: '([G])([0-9]+\\.?[0-9]?)'
- },
- {
- className: 'name',
- begin: '([M])([0-9]+\\.?[0-9]?)'
- },
- {
- className: 'attr',
- begin: '(VC|VS|#)',
- end: '(\\d+)'
- },
- {
- className: 'attr',
- begin: '(VZOFX|VZOFY|VZOFZ)'
- },
- {
- className: 'built_in',
- begin: '(ATAN|ABS|ACOS|ASIN|SIN|COS|EXP|FIX|FUP|ROUND|LN|TAN)(\\[)',
- contains: [
- NUMBER
- ],
- end: '\\]'
- },
- {
- className: 'symbol',
- variants: [
- {
- begin: 'N',
- end: '\\d+',
- illegal: '\\W'
- }
- ]
- }
- ];
- return {
- name: 'G-code (ISO 6983)',
- aliases: ['nc'],
- // Some implementations (CNC controls) of G-code are interoperable with uppercase and lowercase letters seamlessly.
- // However, most prefer all uppercase and uppercase is customary.
- case_insensitive: true,
- keywords: GCODE_KEYWORDS,
- contains: [
- {
- className: 'meta',
- begin: GCODE_CLOSE_RE
- },
- GCODE_START
- ].concat(GCODE_CODE)
- };
- }
- module.exports = gcode;
|