1{"version":3,"sources":["webpack:///./node_modules/monaco-editor/esm/vs/basic-languages/ruby/ruby.js"],"names":[],"mappings":";;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,WAAW,KAAK;AAChB;AACA;AACA;AACA,SAAS,SAAS,YAAY,GAAG;AACjC,SAAS,wBAAwB;AACjC,SAAS,wBAAwB;AACjC,SAAS,wBAAwB;AACjC,SAAS;AACT;AACA;AACA,SAAS,SAAS,YAAY,GAAG;AACjC,SAAS,wBAAwB;AACjC,SAAS,wBAAwB;AACjC,SAAS,wBAAwB;AACjC,SAAS;AACT;AACA;AACA,0NAA0N;AAC1N,mDAAmD;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,wDAAwD;AACjE,SAAS,SAAS,YAAY,6BAA6B;AAC3D,SAAS;AACT;AACA;AACA;AACA;AACA,0CAA0C,IAAI,cAAc,IAAI,cAAc,EAAE;AAChF;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,4EAA4E,EAAE,cAAc,EAAE;AAC9F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA,6BAA6B;AAC7B,kCAAkC,qCAAqC;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB,8BAA8B,0CAA0C;AACxE,uCAAuC,wCAAwC;AAC/E,8BAA8B,qCAAqC;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,yDAAyD;AAC/F;AACA;AACA,iBAAiB;AACjB;AACA,mCAAmC,yDAAyD;AAC5F;AACA,aAAa,yBAAyB;AACtC;AACA,mBAAmB,gDAAgD;AACnE,mBAAmB,gDAAgD;AACnE;AACA,gCAAgC,qCAAqC;AACrE;AACA,mBAAmB,gDAAgD;AACnE;AACA,oBAAoB,gDAAgD;AACpE,oBAAoB,8CAA8C;AAClE;AACA,yCAAyC,yCAAyC;AAClF;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,mCAAmC;AACtD;AACA;AACA;AACA;AACA,8BAA8B,qCAAqC;AACnE,6BAA6B,0CAA0C;AACvE;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,qCAAqC;AACnE;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,0CAA0C;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,0CAA0C;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,KAAK,6CAA6C;AAClE,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa,yBAAyB;AACtC;AACA,2BAA2B;AAC3B;AACA;AACA,uBAAuB;AACvB;AACA;AACA,oCAAoC,sCAAsC;AAC1E,oCAAoC,uCAAuC;AAC3E,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa,2BAA2B;AACxC;AACA,0BAA0B,wBAAwB;AAClD;AACA;AACA;AACA,oBAAoB,kBAAkB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA,uBAAuB,yDAAyD;AAChF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,+CAA+C;AACnE;AACA;AACA;AACA;AACA,4BAA4B,wDAAwD;AACpF,4BAA4B,wDAAwD;AACpF,wBAAwB,IAAI,mDAAmD,EAAE,GAAG;AACpF,2BAA2B,wDAAwD;AACnF,kCAAkC,0DAA0D;AAC5F,sBAAsB,kDAAkD;AACxE,sBAAsB,kDAAkD;AACxE,kBAAkB,IAAI,6CAA6C,EAAE,GAAG;AACxE,qBAAqB,kDAAkD;AACvE,4BAA4B,oDAAoD;AAChF,6BAA6B,yDAAyD;AACtF,6BAA6B,yDAAyD;AACtF,yBAAyB,IAAI,oDAAoD,EAAE,GAAG;AACtF,4BAA4B,yDAAyD;AACrF,mCAAmC,2DAA2D;AAC9F,iCAAiC,iCAAiC;AAClE,mBAAmB,iCAAiC;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,0CAA0C;AAC9E,oCAAoC,2CAA2C;AAC/E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAiE,sBAAsB;AACvF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"52.52.js","sourcesContent":["/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nexport var conf = {\n    comments: {\n        lineComment: '#',\n        blockComment: ['=begin', '=end']\n    },\n    brackets: [\n        ['(', ')'],\n        ['{', '}'],\n        ['[', ']']\n    ],\n    autoClosingPairs: [\n        { open: '{', close: '}' },\n        { open: '[', close: ']' },\n        { open: '(', close: ')' },\n        { open: '\"', close: '\"' },\n        { open: \"'\", close: \"'\" }\n    ],\n    surroundingPairs: [\n        { open: '{', close: '}' },\n        { open: '[', close: ']' },\n        { open: '(', close: ')' },\n        { open: '\"', close: '\"' },\n        { open: \"'\", close: \"'\" }\n    ],\n    indentationRules: {\n        increaseIndentPattern: new RegExp('^\\\\s*((begin|class|(private|protected)\\\\s+def|def|else|elsif|ensure|for|if|module|rescue|unless|until|when|while|case)|([^#]*\\\\sdo\\\\b)|([^#]*=\\\\s*(case|if|unless)))\\\\b([^#\\\\{;]|(\"|\\'|/).*\\\\4)*(#.*)?$'),\n        decreaseIndentPattern: new RegExp('^\\\\s*([}\\\\]]([,)]?\\\\s*(#|$)|\\\\.[a-zA-Z_]\\\\w*\\\\b)|(end|rescue|ensure|else|elsif|when)\\\\b)')\n    }\n};\n/*\n * Ruby language definition\n *\n * Quite a complex language due to elaborate escape sequences\n * and quoting of literate strings/regular expressions, and\n * an 'end' keyword that does not always apply to modifiers like until and while,\n * and a 'do' keyword that sometimes starts a block, but sometimes is part of\n * another statement (like 'while').\n *\n * (1) end blocks:\n * 'end' may end declarations like if or until, but sometimes 'if' or 'until'\n * are modifiers where there is no 'end'. Also, 'do' sometimes starts a block\n * that is ended by 'end', but sometimes it is part of a 'while', 'for', or 'until'\n * To do proper brace matching we do some elaborate state manipulation.\n * some examples:\n *\n *   until bla do\n *     work until tired\n *     list.each do\n *       something if test\n *     end\n *   end\n *\n * or\n *\n * if test\n *  something (if test then x end)\n *  bar if bla\n * end\n *\n * or, how about using class as a property..\n *\n * class Test\n *   def endpoint\n *     self.class.endpoint || routes\n *   end\n * end\n *\n * (2) quoting:\n * there are many kinds of strings and escape sequences. But also, one can\n * start many string-like things as '%qx' where q specifies the kind of string\n * (like a command, escape expanded, regular expression, symbol etc.), and x is\n * some character and only another 'x' ends the sequence. Except for brackets\n * where the closing bracket ends the sequence.. and except for a nested bracket\n * inside the string like entity. Also, such strings can contain interpolated\n * ruby expressions again (and span multiple lines). Moreover, expanded\n * regular expression can also contain comments.\n */\nexport var language = {\n    tokenPostfix: '.ruby',\n    keywords: [\n        '__LINE__',\n        '__ENCODING__',\n        '__FILE__',\n        'BEGIN',\n        'END',\n        'alias',\n        'and',\n        'begin',\n        'break',\n        'case',\n        'class',\n        'def',\n        'defined?',\n        'do',\n        'else',\n        'elsif',\n        'end',\n        'ensure',\n        'for',\n        'false',\n        'if',\n        'in',\n        'module',\n        'next',\n        'nil',\n        'not',\n        'or',\n        'redo',\n        'rescue',\n        'retry',\n        'return',\n        'self',\n        'super',\n        'then',\n        'true',\n        'undef',\n        'unless',\n        'until',\n        'when',\n        'while',\n        'yield'\n    ],\n    keywordops: ['::', '..', '...', '?', ':', '=>'],\n    builtins: [\n        'require',\n        'public',\n        'private',\n        'include',\n        'extend',\n        'attr_reader',\n        'protected',\n        'private_class_method',\n        'protected_class_method',\n        'new'\n    ],\n    // these are closed by 'end' (if, while and until are handled separately)\n    declarations: [\n        'module',\n        'class',\n        'def',\n        'case',\n        'do',\n        'begin',\n        'for',\n        'if',\n        'while',\n        'until',\n        'unless'\n    ],\n    linedecls: ['def', 'case', 'do', 'begin', 'for', 'if', 'while', 'until', 'unless'],\n    operators: [\n        '^',\n        '&',\n        '|',\n        '<=>',\n        '==',\n        '===',\n        '!~',\n        '=~',\n        '>',\n        '>=',\n        '<',\n        '<=',\n        '<<',\n        '>>',\n        '+',\n        '-',\n        '*',\n        '/',\n        '%',\n        '**',\n        '~',\n        '+@',\n        '-@',\n        '[]',\n        '[]=',\n        '`',\n        '+=',\n        '-=',\n        '*=',\n        '**=',\n        '/=',\n        '^=',\n        '%=',\n        '<<=',\n        '>>=',\n        '&=',\n        '&&=',\n        '||=',\n        '|='\n    ],\n    brackets: [\n        { open: '(', close: ')', token: 'delimiter.parenthesis' },\n        { open: '{', close: '}', token: 'delimiter.curly' },\n        { open: '[', close: ']', token: 'delimiter.square' }\n    ],\n    // we include these common regular expressions\n    symbols: /[=><!~?:&|+\\-*\\/\\^%\\.]+/,\n    // escape sequences\n    escape: /(?:[abefnrstv\\\\\"'\\n\\r]|[0-7]{1,3}|x[0-9A-Fa-f]{1,2}|u[0-9A-Fa-f]{4})/,\n    escapes: /\\\\(?:C\\-(@escape|.)|c(@escape|.)|@escape)/,\n    decpart: /\\d(_?\\d)*/,\n    decimal: /0|@decpart/,\n    delim: /[^a-zA-Z0-9\\s\\n\\r]/,\n    heredelim: /(?:\\w+|'[^']*'|\"[^\"]*\"|`[^`]*`)/,\n    regexpctl: /[(){}\\[\\]\\$\\^|\\-*+?\\.]/,\n    regexpesc: /\\\\(?:[AzZbBdDfnrstvwWn0\\\\\\/]|@regexpctl|c[A-Z]|x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4})?/,\n    // The main tokenizer for our languages\n    tokenizer: {\n        // Main entry.\n        // root.<decl> where decl is the current opening declaration (like 'class')\n        root: [\n            // identifiers and keywords\n            // most complexity here is due to matching 'end' correctly with declarations.\n            // We distinguish a declaration that comes first on a line, versus declarations further on a line (which are most likey modifiers)\n            [\n                /^(\\s*)([a-z_]\\w*[!?=]?)/,\n                [\n                    'white',\n                    {\n                        cases: {\n                            'for|until|while': {\n                                token: 'keyword.$2',\n                                next: '@dodecl.$2'\n                            },\n                            '@declarations': {\n                                token: 'keyword.$2',\n                                next: '@root.$2'\n                            },\n                            end: { token: 'keyword.$S2', next: '@pop' },\n                            '@keywords': 'keyword',\n                            '@builtins': 'predefined',\n                            '@default': 'identifier'\n                        }\n                    }\n                ]\n            ],\n            [\n                /[a-z_]\\w*[!?=]?/,\n                {\n                    cases: {\n                        'if|unless|while|until': {\n                            token: 'keyword.$0x',\n                            next: '@modifier.$0x'\n                        },\n                        for: { token: 'keyword.$2', next: '@dodecl.$2' },\n                        '@linedecls': { token: 'keyword.$0', next: '@root.$0' },\n                        end: { token: 'keyword.$S2', next: '@pop' },\n                        '@keywords': 'keyword',\n                        '@builtins': 'predefined',\n                        '@default': 'identifier'\n                    }\n                }\n            ],\n            [/[A-Z][\\w]*[!?=]?/, 'constructor.identifier'],\n            [/\\$[\\w]*/, 'global.constant'],\n            [/@[\\w]*/, 'namespace.instance.identifier'],\n            [/@@[\\w]*/, 'namespace.class.identifier'],\n            // here document\n            [/<<[-~](@heredelim).*/, { token: 'string.heredoc.delimiter', next: '@heredoc.$1' }],\n            [\n                /[ \\t\\r\\n]+<<(@heredelim).*/,\n                { token: 'string.heredoc.delimiter', next: '@heredoc.$1' }\n            ],\n            [/^<<(@heredelim).*/, { token: 'string.heredoc.delimiter', next: '@heredoc.$1' }],\n            // whitespace\n            { include: '@whitespace' },\n            // strings\n            [/\"/, { token: 'string.d.delim', next: '@dstring.d.\"' }],\n            [/'/, { token: 'string.sq.delim', next: '@sstring.sq' }],\n            // % literals. For efficiency, rematch in the 'pstring' state\n            [/%([rsqxwW]|Q?)/, { token: '@rematch', next: 'pstring' }],\n            // commands and symbols\n            [/`/, { token: 'string.x.delim', next: '@dstring.x.`' }],\n            [/:(\\w|[$@])\\w*[!?=]?/, 'string.s'],\n            [/:\"/, { token: 'string.s.delim', next: '@dstring.s.\"' }],\n            [/:'/, { token: 'string.s.delim', next: '@sstring.s' }],\n            // regular expressions. Lookahead for a (not escaped) closing forwardslash on the same line\n            [/\\/(?=(\\\\\\/|[^\\/\\n])+\\/)/, { token: 'regexp.delim', next: '@regexp' }],\n            // delimiters and operators\n            [/[{}()\\[\\]]/, '@brackets'],\n            [\n                /@symbols/,\n                {\n                    cases: {\n                        '@keywordops': 'keyword',\n                        '@operators': 'operator',\n                        '@default': ''\n                    }\n                }\n            ],\n            [/[;,]/, 'delimiter'],\n            // numbers\n            [/0[xX][0-9a-fA-F](_?[0-9a-fA-F])*/, 'number.hex'],\n            [/0[_oO][0-7](_?[0-7])*/, 'number.octal'],\n            [/0[bB][01](_?[01])*/, 'number.binary'],\n            [/0[dD]@decpart/, 'number'],\n            [\n                /@decimal((\\.@decpart)?([eE][\\-+]?@decpart)?)/,\n                {\n                    cases: {\n                        $1: 'number.float',\n                        '@default': 'number'\n                    }\n                }\n            ]\n        ],\n        // used to not treat a 'do' as a block opener if it occurs on the same\n        // line as a 'do' statement: 'while|until|for'\n        // dodecl.<decl> where decl is the declarations started, like 'while'\n        dodecl: [\n            [/^/, { token: '', switchTo: '@root.$S2' }],\n            [\n                /[a-z_]\\w*[!?=]?/,\n                {\n                    cases: {\n                        end: { token: 'keyword.$S2', next: '@pop' },\n                        do: { token: 'keyword', switchTo: '@root.$S2' },\n                        '@linedecls': {\n                            token: '@rematch',\n                            switchTo: '@root.$S2'\n                        },\n                        '@keywords': 'keyword',\n                        '@builtins': 'predefined',\n                        '@default': 'identifier'\n                    }\n                }\n            ],\n            { include: '@root' }\n        ],\n        // used to prevent potential modifiers ('if|until|while|unless') to match\n        // with 'end' keywords.\n        // modifier.<decl>x where decl is the declaration starter, like 'if'\n        modifier: [\n            [/^/, '', '@pop'],\n            [\n                /[a-z_]\\w*[!?=]?/,\n                {\n                    cases: {\n                        end: { token: 'keyword.$S2', next: '@pop' },\n                        'then|else|elsif|do': {\n                            token: 'keyword',\n                            switchTo: '@root.$S2'\n                        },\n                        '@linedecls': {\n                            token: '@rematch',\n                            switchTo: '@root.$S2'\n                        },\n                        '@keywords': 'keyword',\n                        '@builtins': 'predefined',\n                        '@default': 'identifier'\n                    }\n                }\n            ],\n            { include: '@root' }\n        ],\n        // single quote strings (also used for symbols)\n        // sstring.<kind>  where kind is 'sq' (single quote) or 's' (symbol)\n        sstring: [\n            [/[^\\\\']+/, 'string.$S2'],\n            [/\\\\\\\\|\\\\'|\\\\$/, 'string.$S2.escape'],\n            [/\\\\./, 'string.$S2.invalid'],\n            [/'/, { token: 'string.$S2.delim', next: '@pop' }]\n        ],\n        // double quoted \"string\".\n        // dstring.<kind>.<delim> where kind is 'd' (double quoted), 'x' (command), or 's' (symbol)\n        // and delim is the ending delimiter (\" or `)\n        dstring: [\n            [/[^\\\\`\"#]+/, 'string.$S2'],\n            [/#/, 'string.$S2.escape', '@interpolated'],\n            [/\\\\$/, 'string.$S2.escape'],\n            [/@escapes/, 'string.$S2.escape'],\n            [/\\\\./, 'string.$S2.escape.invalid'],\n            [\n                /[`\"]/,\n                {\n                    cases: {\n                        '$#==$S3': { token: 'string.$S2.delim', next: '@pop' },\n                        '@default': 'string.$S2'\n                    }\n                }\n            ]\n        ],\n        // literal documents\n        // heredoc.<close> where close is the closing delimiter\n        heredoc: [\n            [\n                /^(\\s*)(@heredelim)$/,\n                {\n                    cases: {\n                        '$2==$S2': [\n                            'string.heredoc',\n                            { token: 'string.heredoc.delimiter', next: '@pop' }\n                        ],\n                        '@default': ['string.heredoc', 'string.heredoc']\n                    }\n                }\n            ],\n            [/.*/, 'string.heredoc']\n        ],\n        // interpolated sequence\n        interpolated: [\n            [/\\$\\w*/, 'global.constant', '@pop'],\n            [/@\\w*/, 'namespace.class.identifier', '@pop'],\n            [/@@\\w*/, 'namespace.instance.identifier', '@pop'],\n            [\n                /[{]/,\n                {\n                    token: 'string.escape.curly',\n                    switchTo: '@interpolated_compound'\n                }\n            ],\n            ['', '', '@pop'] // just a # is interpreted as a #\n        ],\n        // any code\n        interpolated_compound: [\n            [/[}]/, { token: 'string.escape.curly', next: '@pop' }],\n            { include: '@root' }\n        ],\n        // %r quoted regexp\n        // pregexp.<open>.<close> where open/close are the open/close delimiter\n        pregexp: [\n            { include: '@whitespace' },\n            // turns out that you can quote using regex control characters, aargh!\n            // for example; %r|kgjgaj| is ok (even though | is used for alternation)\n            // so, we need to match those first\n            [\n                /[^\\(\\{\\[\\\\]/,\n                {\n                    cases: {\n                        '$#==$S3': { token: 'regexp.delim', next: '@pop' },\n                        '$#==$S2': { token: 'regexp.delim', next: '@push' },\n                        '~[)}\\\\]]': '@brackets.regexp.escape.control',\n                        '~@regexpctl': 'regexp.escape.control',\n                        '@default': 'regexp'\n                    }\n                }\n            ],\n            { include: '@regexcontrol' }\n        ],\n        // We match regular expression quite precisely\n        regexp: [\n            { include: '@regexcontrol' },\n            [/[^\\\\\\/]/, 'regexp'],\n            ['/[ixmp]*', { token: 'regexp.delim' }, '@pop']\n        ],\n        regexcontrol: [\n            [\n                /(\\{)(\\d+(?:,\\d*)?)(\\})/,\n                [\n                    '@brackets.regexp.escape.control',\n                    'regexp.escape.control',\n                    '@brackets.regexp.escape.control'\n                ]\n            ],\n            [\n                /(\\[)(\\^?)/,\n                [\n                    '@brackets.regexp.escape.control',\n                    { token: 'regexp.escape.control', next: '@regexrange' }\n                ]\n            ],\n            [/(\\()(\\?[:=!])/, ['@brackets.regexp.escape.control', 'regexp.escape.control']],\n            [/\\(\\?#/, { token: 'regexp.escape.control', next: '@regexpcomment' }],\n            [/[()]/, '@brackets.regexp.escape.control'],\n            [/@regexpctl/, 'regexp.escape.control'],\n            [/\\\\$/, 'regexp.escape'],\n            [/@regexpesc/, 'regexp.escape'],\n            [/\\\\\\./, 'regexp.invalid'],\n            [/#/, 'regexp.escape', '@interpolated']\n        ],\n        regexrange: [\n            [/-/, 'regexp.escape.control'],\n            [/\\^/, 'regexp.invalid'],\n            [/\\\\$/, 'regexp.escape'],\n            [/@regexpesc/, 'regexp.escape'],\n            [/[^\\]]/, 'regexp'],\n            [/\\]/, '@brackets.regexp.escape.control', '@pop']\n        ],\n        regexpcomment: [\n            [/[^)]+/, 'comment'],\n            [/\\)/, { token: 'regexp.escape.control', next: '@pop' }]\n        ],\n        // % quoted strings\n        // A bit repetitive since we need to often special case the kind of ending delimiter\n        pstring: [\n            [/%([qws])\\(/, { token: 'string.$1.delim', switchTo: '@qstring.$1.(.)' }],\n            [/%([qws])\\[/, { token: 'string.$1.delim', switchTo: '@qstring.$1.[.]' }],\n            [/%([qws])\\{/, { token: 'string.$1.delim', switchTo: '@qstring.$1.{.}' }],\n            [/%([qws])</, { token: 'string.$1.delim', switchTo: '@qstring.$1.<.>' }],\n            [/%([qws])(@delim)/, { token: 'string.$1.delim', switchTo: '@qstring.$1.$2.$2' }],\n            [/%r\\(/, { token: 'regexp.delim', switchTo: '@pregexp.(.)' }],\n            [/%r\\[/, { token: 'regexp.delim', switchTo: '@pregexp.[.]' }],\n            [/%r\\{/, { token: 'regexp.delim', switchTo: '@pregexp.{.}' }],\n            [/%r</, { token: 'regexp.delim', switchTo: '@pregexp.<.>' }],\n            [/%r(@delim)/, { token: 'regexp.delim', switchTo: '@pregexp.$1.$1' }],\n            [/%(x|W|Q?)\\(/, { token: 'string.$1.delim', switchTo: '@qqstring.$1.(.)' }],\n            [/%(x|W|Q?)\\[/, { token: 'string.$1.delim', switchTo: '@qqstring.$1.[.]' }],\n            [/%(x|W|Q?)\\{/, { token: 'string.$1.delim', switchTo: '@qqstring.$1.{.}' }],\n            [/%(x|W|Q?)</, { token: 'string.$1.delim', switchTo: '@qqstring.$1.<.>' }],\n            [/%(x|W|Q?)(@delim)/, { token: 'string.$1.delim', switchTo: '@qqstring.$1.$2.$2' }],\n            [/%([rqwsxW]|Q?)./, { token: 'invalid', next: '@pop' }],\n            [/./, { token: 'invalid', next: '@pop' }] // recover\n        ],\n        // non-expanded quoted string.\n        // qstring.<kind>.<open>.<close>\n        //  kind = q|w|s  (single quote, array, symbol)\n        //  open = open delimiter\n        //  close = close delimiter\n        qstring: [\n            [/\\\\$/, 'string.$S2.escape'],\n            [/\\\\./, 'string.$S2.escape'],\n            [\n                /./,\n                {\n                    cases: {\n                        '$#==$S4': { token: 'string.$S2.delim', next: '@pop' },\n                        '$#==$S3': { token: 'string.$S2.delim', next: '@push' },\n                        '@default': 'string.$S2'\n                    }\n                }\n            ]\n        ],\n        // expanded quoted string.\n        // qqstring.<kind>.<open>.<close>\n        //  kind = Q|W|x  (double quote, array, command)\n        //  open = open delimiter\n        //  close = close delimiter\n        qqstring: [[/#/, 'string.$S2.escape', '@interpolated'], { include: '@qstring' }],\n        // whitespace & comments\n        whitespace: [\n            [/[ \\t\\r\\n]+/, ''],\n            [/^\\s*=begin\\b/, 'comment', '@comment'],\n            [/#.*$/, 'comment']\n        ],\n        comment: [\n            [/[^=]+/, 'comment'],\n            [/^\\s*=begin\\b/, 'comment.invalid'],\n            [/^\\s*=end\\b.*/, 'comment', '@pop'],\n            [/[=]/, 'comment']\n        ]\n    }\n};\n"],"sourceRoot":""}