mathematica function

Mode mathematica(
  1. Highlight hljs
)

Implementation

Mode mathematica(Highlight hljs) {
  return Mode(
    name: r'Mathematica',
    aliases: [r'mma', r'wl'],
    classNameAliases: {
      r'brace': r'punctuation',
      r'pattern': r'type',
      r'slot': r'type',
      r'symbol': r'variable',
      r'named-character': r'variable',
      r'builtin-symbol': r'built_in',
      r'message-name': r'string',
    },
    contains: [
      Mode(
        scope: r'comment',
        begin: r'\(\*',
        end: r'\*\)',
        contains: [
          r'self',
          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'pattern',
        relevance: 0,
        begin: r'([a-zA-Z$][a-zA-Z0-9$]*)?_+([a-zA-Z$][a-zA-Z0-9$]*)?',
      ),
      Mode(
        scope: r'slot',
        relevance: 0,
        begin: r'#[a-zA-Z$][a-zA-Z0-9$]*|#+[0-9]?',
      ),
      Mode(
        scope: r'message-name',
        relevance: 0,
        begin: r'::[a-zA-Z$][a-zA-Z0-9$]*',
      ),
      Mode(
        variants: [
          Mode(
            scope: r'builtin-symbol',
            begin: r'[a-zA-Z$][a-zA-Z0-9$]*',
            onBegin: (RegExpMatch m, CallbackResponse resp) {
              final symbol = m.group(0);
              if (symbol == null ||
                  !_mathematicaSystemSymbols.contains(symbol)) {
                resp.ignoreMatch();
              }
            },
          ),
          Mode(
            scope: r'symbol',
            relevance: 0,
            begin: r'[a-zA-Z$][a-zA-Z0-9$]*',
          ),
        ],
      ),
      Mode(scope: r'named-character', begin: r'\\\[[$a-zA-Z][$a-zA-Z0-9]+\]'),
      Mode(
        scope: r'string',
        begin: r'"',
        end: r'"',
        illegal: r'\n',
        contains: [Mode(begin: r'\\[\s\S]', relevance: 0)],
      ),
      Mode(
        scope: r'number',
        relevance: 0,
        begin:
            r'(?:([2-9]|[1-2]\d|[3][0-5])\^\^(\w*\.\w+|\w+\.\w*|\w+)|(\d*\.\d+|\d+\.\d*|\d+))(?:(?:``[+-]?(\d*\.\d+|\d+\.\d*|\d+)|`([+-]?(\d*\.\d+|\d+\.\d*|\d+))?))?(?:\*\^[+-]?\d+)?',
      ),
      Mode(
        scope: r'operator',
        relevance: 0,
        begin: r"[+\-*/,;.:@~=><&|_`'^?!%]+",
      ),
      Mode(scope: r'brace', relevance: 0, begin: r'[[\](){}]'),
    ],
  );
}