parses property

  1. @override
Map<String, List<Parse>> parses
final

Implementation

@override
final Map<String, List<Parse>> parses = {
  'commentsandwhitespace': [
    Parse(r'\s+', Token.Text),
    Parse(r'<!--', Token.Comment),
    Parse(r'//.*?\n', Token.CommentSingle),
    Parse(r'/\*.*?\*/', Token.CommentMultiline),
  ],
  'slashstartsregex': [
    Parse.include('commentsandwhitespace'),
    /* TODO: disabled Lone quantifier brackets
    https://stackoverflow.com/questions/40939209/invalid-regular-expressionlone-quantifier-brackets
    Parse(
        r'/(\\.|[^[/\\\n]|\[(\\.|[^\]\\\n])*])+/'
        r'([gimuy]+\b|\B)',
        Token.StringRegex,
        [POP]),
     */
    Parse(r'(?=/)', Token.Text, [POP, 'badregex']),
    Parse.empty([POP])
  ],
  'badregex': [
    Parse(r'\n', Token.Text, [POP]),
  ],
  'root': [
    Parse(r'^#! ?/.*?\n', Token.CommentHashbang), // recognized by node.js
    Parse(r'^(?=\s|/|<!--)', Token.Text, ['slashstartsregex']),
    Parse.include('commentsandwhitespace'),
    Parse(r'(\.\d+|[0-9]+\.[0-9]*)([eE][-+]?[0-9]+)?', Token.NumberFloat),
    Parse(r'0[bB][01]+', Token.NumberBin),
    Parse(r'0[oO][0-7]+', Token.NumberOct),
    Parse(r'0[xX][0-9a-fA-F]+', Token.NumberHex),
    Parse(r'[0-9]+', Token.NumberInteger),
    Parse(r'\.\.\.|=>', Token.Punctuation),
    Parse(
        r'\+\+|--|~|&&|\?|:|\|\||\\(?=\n)|'
        r'(<<|>>>?|==?|!=?|[-<>+*%&|^/])=?',
        Token.Operator,
        ['slashstartsregex']),
    Parse(r'[{(\[;,]', Token.Punctuation, ['slashstartsregex']),
    Parse(r'[})\].]', Token.Punctuation),
    Parse(
        r'(for|in|while|do|break|return|continue|switch|case|default|if|else|'
        r'throw|try|catch|finally|new|delete|typeof|instanceof|void|yield|'
        r'this|of)\b',
        Token.Keyword,
        ['slashstartsregex']),
    Parse(r'(var|let|with|function)\b', Token.KeywordDeclaration,
        ['slashstartsregex']),
    Parse(
        r'(abstract|boolean|byte|char|class|const|debugger|double|enum|export|'
        r'extends|final|float|goto|implements|import|int|interface|long|native|'
        r'package|private|protected|public|short|static|super|synchronized|throws|'
        r'transient|volatile)\b',
        Token.KeywordReserved),
    Parse(
        r'(true|false|null|NaN|Infinity|undefined)\b', Token.KeywordConstant),
    Parse(
        r'(Array|Boolean|Date|Error|Function|Math|netscape|'
        r'Number|Object|Packages|RegExp|String|Promise|Proxy|sun|decodeURI|'
        r'decodeURIComponent|encodeURI|encodeURIComponent|'
        r'Error|eval|isFinite|isNaN|isSafeInteger|parseFloat|parseInt|'
        r'document|this|window)\b',
        Token.NameBuiltin),
    // TODO: should be the below if we want to support unicode
    // Parse(JS_IDENT, Token.NameOther),
    Parse(r'[a-zA-Z\d_$]+', Token.NameOther),
    Parse(r'"(\\\\|\\"|[^"])*"', Token.StringDouble),
    Parse(r"'(\\\\|\\'|[^'])*'", Token.StringSingle),
    Parse(r'`', Token.StringBacktick, ['interp']),
  ],
  'interp': [
    Parse(r'`', Token.StringBacktick, [POP]),
    Parse(r'\\\\', Token.StringBacktick),
    Parse(r'\\`', Token.StringBacktick),
    Parse(r'\$\{', Token.StringInterpol, ['interp-inside']),
    Parse(r'\$', Token.StringBacktick),
    Parse(r'[^`\\$]+', Token.StringBacktick),
  ],
  'interp-inside': [
    Parse(r'\}', Token.StringInterpol, [POP]),
    Parse.include('root'),
  ],
  // # (\\\\|\\`|[^`])*`', String.Backtick),
};