gcode function

Mode gcode(
  1. Highlight hljs
)

Implementation

Mode gcode(Highlight hljs) {
  void _letterBoundaryCallback(RegExpMatch match, CallbackResponse response) {
    if (match.start == 0) return;

    final charBeforeMatch = match.input[match.start - 1];
    if ((charBeforeMatch.compareTo('0') >= 0 &&
            charBeforeMatch.compareTo('9') <= 0) ||
        charBeforeMatch == '_') {
      return;
    }

    response.ignoreMatch();
  }

  final Mode _mode0 = Mode();
  _mode0.begin = r'\\[\s\S]';
  _mode0.relevance = 0;
  return Mode(
    name: r'G-code (ISO 6983)',
    aliases: [r'nc'],
    caseInsensitive: true,
    disableAutodetect: true,
    keywords: {
      r'$pattern': r'[A-Z]+|%',
      r'keyword': [
        r'THEN',
        r'ELSE',
        r'ENDIF',
        r'IF',
        r'GOTO',
        r'DO',
        r'WHILE',
        r'WH',
        r'END',
        r'CALL',
        r'SUB',
        r'ENDSUB',
        r'EQ',
        r'NE',
        r'LT',
        r'GT',
        r'LE',
        r'GE',
        r'AND',
        r'OR',
        r'XOR',
        r'%',
      ],
      r'built_in': [
        r'ATAN',
        r'ABS',
        r'ACOS',
        r'ASIN',
        r'COS',
        r'EXP',
        r'FIX',
        r'FUP',
        r'ROUND',
        r'LN',
        r'SIN',
        r'SQRT',
        r'TAN',
        r'EXISTS',
      ],
    },
    contains: [
      Mode(
        scope: r'comment',
        begin: r'\(',
        end: r'\)',
        contains: [
          Mode(
            scope: r'doctag',
            begin: r'[ ]*(?=(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):)',
            end: r'(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):',
            excludeBegin: true,
            relevance: 0,
          ),
          Mode(
            begin:
                r"[ ]+((?:I|a|is|so|us|to|at|if|in|it|on|[A-Za-z]+['](d|ve|re|ll|t|s|n)|[A-Za-z]+[-][a-z]+|[A-Za-z][a-z]{2,})[.]?[:]?([.][ ]|[ ])){3}",
          ),
        ],
      ),
      Mode(
        scope: r'comment',
        begin: r';',
        end: r'$',
        contains: [
          Mode(
            scope: r'doctag',
            begin: r'[ ]*(?=(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):)',
            end: r'(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):',
            excludeBegin: true,
            relevance: 0,
          ),
          Mode(
            begin:
                r"[ ]+((?:I|a|is|so|us|to|at|if|in|it|on|[A-Za-z]+['](d|ve|re|ll|t|s|n)|[A-Za-z]+[-][a-z]+|[A-Za-z][a-z]{2,})[.]?[:]?([.][ ]|[ ])){3}",
          ),
        ],
      ),
      Mode(
        scope: r'string',
        begin: r"'",
        end: r"'",
        illegal: r'\n',
        contains: [_mode0],
      ),
      Mode(
        scope: r'string',
        begin: r'"',
        end: r'"',
        illegal: r'\n',
        contains: [_mode0],
      ),
      Mode(
        scope: r'number',
        begin:
            r'(-?)(\b0[xX][a-fA-F0-9]+|(\b\d+(\.\d*)?|\.\d+)([eE][-+]?\d+)?)',
        relevance: 0,
      ),
      Mode(
        scope: r'title.function',
        variants: [
          Mode(match: r'\b[GM]\s*\d+(\.\d+)?'),
          Mode(begin: r'[GM]\s*\d+(\.\d+)?', onBegin: _letterBoundaryCallback),
          Mode(match: r'\bT\s*\d+'),
          Mode(begin: r'T\s*\d+', onBegin: _letterBoundaryCallback),
        ],
      ),
      Mode(
        scope: r'symbol',
        variants: [
          Mode(match: r'\bO\s*\d+'),
          Mode(begin: r'O\s*\d+', onBegin: _letterBoundaryCallback),
          Mode(match: r'\bO<.+>'),
          Mode(begin: r'O<.+>', onBegin: _letterBoundaryCallback),
          Mode(match: r'\*\s*\d+\s*$'),
        ],
      ),
      Mode(scope: r'operator', match: r'^N\s*\d+'),
      Mode(scope: r'variable', match: r'-?#\s*\d+'),
      Mode(
        scope: r'property',
        variants: [
          Mode(match: r'\b[ABCUVWXYZ]\s*[+-]?((\.\d+)|(\d+)(\.\d*)?)'),
          Mode(
            begin: r'[ABCUVWXYZ]\s*[+-]?((\.\d+)|(\d+)(\.\d*)?)',
            onBegin: _letterBoundaryCallback,
          ),
        ],
      ),
      Mode(
        scope: r'params',
        variants: [
          Mode(match: r'\b[FHIJKPQRS]\s*[+-]?((\.\d+)|(\d+)(\.\d*)?)'),
          Mode(
            begin: r'[FHIJKPQRS]\s*[+-]?((\.\d+)|(\d+)(\.\d*)?)',
            onBegin: _letterBoundaryCallback,
          ),
        ],
      ),
    ],
  );
}