| 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;
 |