You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
88 lines
2.1 KiB
88 lines
2.1 KiB
/* |
|
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;
|
|
|