{"mappings":"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","names":["globalKey","prismGlobal","plainTextGrammar","rest","tokenize","languages","prismGlobal","plainTextGrammar","envVars","commandAfterHeredoc","variableInside","insideString","bash","languages","copied"],"sources":["../esm/npm/@cyfung1031/prism-code-editor@5.2.0-cdn-esm.2/node_modules/@cyfung1031/prism-code-editor/src/prism/core.js","../esm/npm/@cyfung1031/prism-code-editor@5.2.0-cdn-esm.2/node_modules/@cyfung1031/prism-code-editor/src/prism/languages/bash.js"],"sourcesContent":["// Slimmed down Prism core with most high level functions removed\n\nvar globalKey = Symbol.for(\"prism-code-editor.prism\");\nvar prismGlobal = globalThis[globalKey] || (globalThis[globalKey] = {});\n\nvar plainTextGrammar = prismGlobal.plainTextGrammar || (prismGlobal.plainTextGrammar = {});\nvar rest = prismGlobal.rest || (prismGlobal.rest = Symbol.for(\"prism-code-editor.prism.rest\"));\nvar tokenize =\n\tprismGlobal.tokenize || (prismGlobal.tokenize = Symbol.for(\"prism-code-editor.prism.tokenize\"));\n\n/** @param {*} id */\nvar resolve = id =\u003e typeof id == 'string' ? languages[id] : id;\n\n/** @type {Record\u003cstring, any\u003e} */\nvar languages =\n\tprismGlobal.languages ||\n\t(prismGlobal.languages = {\n\t\tplain: plainTextGrammar,\n\t\tplaintext: plainTextGrammar,\n\t\ttext: plainTextGrammar,\n\t\ttxt: plainTextGrammar,\n\t});\n\n/**\n * @param {string} text\n * @param {any} grammar\n */\nvar tokenizeText = (text, grammar) =\u003e (grammar[tokenize] || withoutTokenizer)(text, grammar);\n\n/**\n * @param {string} text\n * @param {any} grammar\n */\nvar withoutTokenizer = (text, grammar) =\u003e {\n\t/** @type {LinkedListNode} */\n\tvar startNode = [text];\n\tvar restGrammar;\n\t/** @type {(string | Token)[]} */\n\tvar array = [], i = 0;\n\twhile (restGrammar = resolve(grammar[rest])) {\n\t\tdelete grammar[rest];\n\t\tObject.assign(grammar, restGrammar);\n\t}\n\n\tmatchGrammar(text, grammar, startNode, 0);\n\n\twhile (array[i++] = startNode[0], startNode = startNode[1]);\n\treturn array;\n};\n\n/**\n * @param {string} string\n * @param {RegExp} pattern\n * @param {string} replacement\n */\nvar escapeHtml = (string, pattern, replacement) =\u003e {\n\treturn string.replace(/\u0026/g, '\u0026amp;').replace(pattern, replacement);\n};\n\nvar closingTag = '\u003c/span\u003e';\nvar openingTags = '';\nvar closingTags = '';\n\n/** @param {(string | Token)[]} tokens */\nvar highlightTokens = tokens =\u003e {\n\tvar str = '', token, i = 0;\n\twhile (token = tokens[i++]) str += stringify(token);\n\treturn str;\n};\n\n/**\n * @param {string | Token | (string | Token)[]} token\n * @returns {string}\n */\nvar stringify = token =\u003e {\n\tif (token instanceof Token) {\n\t\tvar { type, alias, content } = token;\n\t\tvar prevOpening = openingTags;\n\t\tvar prevClosing = closingTags;\n\t\tvar opening = `\u003cspan class=\"token ${\n\t\t\ttype + (alias ? ' ' + alias : '') +\n\t\t\t(type == 'keyword' \u0026\u0026 typeof content == 'string' ? ' keyword-' + content : '')\n\t\t}\"\u003e`;\n\n\t\tclosingTags += closingTag;\n\t\topeningTags += opening;\n\t\tvar contentStr = stringify(content);\n\t\topeningTags = prevOpening;\n\t\tclosingTags = prevClosing;\n\t\treturn opening + contentStr + closingTag;\n\t}\n\n\tif (typeof token != 'string') return highlightTokens(token);\n\n\ttoken = escapeHtml(token, /\u003c/g, '\u0026lt;');\n\tif (closingTags \u0026\u0026 token.includes('\\n')) {\n\t\treturn token.replace(/\\n/g, closingTags + '\\n' + openingTags);\n\t}\n\treturn token;\n};\n\n/**\n * @param {string} text\n * @param {*} ref\n */\nvar highlightText = (text, ref) =\u003e highlightTokens(tokenizeText(text, resolve(ref)));\n\n/**\n * @param {string} text\n * @param {any} grammar\n * @param {LinkedListNode} startNode\n * @param {number} startPos\n * @param {[string, number, number]} [rematch]\n *\n * @typedef {[string | Token, LinkedListNode?]} LinkedListNode\n */\nvar matchGrammar = (text, grammar, startNode, startPos, rematch) =\u003e {\n\tfor (var token in grammar) {\n\t\tif (grammar[token]) for (var j = 0, p = grammar[token], patternObj, patterns = Array.isArray(p) ? p : [p]; patternObj = patterns[j]; j++) {\n\t\t\tif (rematch \u0026\u0026 rematch[0] == token \u0026\u0026 rematch[1] == j) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t/** @type {RegExp} */\n\t\t\tvar pattern = patternObj.pattern || patternObj;\n\t\t\tvar inside = resolve(patternObj.inside);\n\t\t\tvar lookbehind = patternObj.lookbehind;\n\t\t\tvar greedy = pattern.global;\n\t\t\tvar alias = patternObj.alias;\n\n\t\t\tfor ( // iterate the token list and keep track of the current token/string position\n\t\t\t\tvar currentNode = startNode, pos = startPos;\n\t\t\t\tcurrentNode \u0026\u0026 (!rematch || pos \u003c rematch[2]);\n\t\t\t\tpos += currentNode[0].length, currentNode = currentNode[1]\n\t\t\t) {\n\t\t\t\tvar str = currentNode[0];\n\t\t\t\tvar removeCount = 0;\n\t\t\t\tvar match;\n\n\t\t\t\tif (str instanceof Token) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tpattern.lastIndex = greedy ? pos : 0;\n\t\t\t\tmatch = pattern.exec(greedy ? text : str);\n\n\t\t\t\tif (!match \u0026\u0026 greedy) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tif (!(match \u0026\u0026 match[0])) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// change the match to remove the text matched by the Prism lookbehind group\n\t\t\t\tvar lookbehindLength = lookbehind \u0026\u0026 match[1] ? match[1].length : 0;\n\t\t\t\tvar from = match.index + lookbehindLength;\n\t\t\t\tvar matchStr = match[0].slice(lookbehindLength);\n\t\t\t\tvar to = from + matchStr.length;\n\t\t\t\tvar k, p;\n\n\t\t\t\tif (greedy) {\n\t\t\t\t\t// find the node that contains the match\n\t\t\t\t\tfor (\n\t\t\t\t\t\t;\n\t\t\t\t\t\tp = pos + currentNode[0].length, from \u003e= p;\n\t\t\t\t\t\tcurrentNode = currentNode[1], pos = p\n\t\t\t\t\t);\n\n\t\t\t\t\t// the current node is a Token, then the match starts inside another Token, which is invalid\n\t\t\t\t\tif (currentNode[0] instanceof Token) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\t// find the last node which is affected by this match\n\t\t\t\t\tfor (\n\t\t\t\t\t\tk = currentNode, p = pos;\n\t\t\t\t\t\t(p += k[0].length) \u003c to;\n\t\t\t\t\t\tk = k[1], removeCount++\n\t\t\t\t\t);\n\n\t\t\t\t\t// replace with the new match\n\t\t\t\t\tstr = text.slice(pos, p);\n\t\t\t\t\tfrom -= pos;\n\t\t\t\t\tto -= pos;\n\t\t\t\t}\n\n\t\t\t\tvar after = str.slice(to);\n\t\t\t\tvar reach = pos + str.length;\n\t\t\t\tvar newToken = new Token(token, inside ? tokenizeText(matchStr, inside) : matchStr, matchStr, alias);\n\t\t\t\tvar next = currentNode, i = 0;\n\t\t\t\tvar nestedRematch;\n\n\t\t\t\twhile (next = next[1], i++ \u003c removeCount);\n\n\t\t\t\tif (after) {\n\t\t\t\t\tif (!next || next[0] instanceof Token) next = [after, next];\n\t\t\t\t\telse next[0] = after + next[0];\n\t\t\t\t};\n\n\t\t\t\tpos += from;\n\t\t\t\tcurrentNode[0] = from ? str.slice(0, from) : newToken;\n\n\t\t\t\tif (from) currentNode = currentNode[1] = [newToken, next];\n\t\t\t\telse currentNode[1] = next;\n\n\t\t\t\tif (removeCount) {\n\t\t\t\t\t// at least one Token object was removed, so we have to do some rematching\n\t\t\t\t\t// this can only happen if the current pattern is greedy\n\n\t\t\t\t\tmatchGrammar(text, grammar, currentNode, pos, nestedRematch = [token, j, reach]);\n\t\t\t\t\treach = nestedRematch[2];\n\t\t\t\t}\n\n\t\t\t\tif (rematch \u0026\u0026 reach \u003e rematch[2]) rematch[2] = reach;\n\t\t\t}\n\t\t}\n\t}\n};\n\n/**\n * Creates a new token.\n *\n * @param {string} type\n * @param {string | any[]} content\n * @param {string} matchedStr\n * @param {string} alias\n * @class\n */\nfunction Token(type, content, matchedStr, alias) {\n\tthis.type = type;\n\tthis.content = content;\n\tthis.alias = alias;\n\tthis.length = matchedStr.length;\n}\n\nexport {\n\trest,\n\ttokenize,\n\tToken,\n\tlanguages,\n\ttokenizeText,\n\twithoutTokenizer,\n\tresolve,\n\tescapeHtml,\n\thighlightTokens,\n\thighlightText\n};\n","import { languages } from '../core.js';\n\n// $ set | grep '^[A-Z][^[:space:]]*=' | cut -d= -f1 | tr '\\n' '|'\n// + LC_ALL, RANDOM, REPLY, SECONDS.\n// + make sure PS1..4 are here as they are not always set,\n// - some useless things.\nvar envVars = '\\\\b(?:BASH(?:OPTS|_ALIASES|_ARG[CV]|_CMDS|_COMPLETION_COMPAT_DIR|_LINENO|_REMATCH|_SOURCE|_VERSINFO|_VERSION)?|COLORTERM|COLUMNS|COMP_WORDBREAKS|DBUS_SESSION_BUS_ADDRESS|DEFAULTS_PATH|DESKTOP_SESSION|DIRSTACK|DISPLAY|E?UID|GDMSESSION|GDM_LANG|GNOME_KEYRING_CONTROL|GNOME_KEYRING_PID|GPG_AGENT_INFO|GROUPS|HISTCONTROL|HISTFILE|HISTFILESIZE|HISTSIZE|HOME|HOSTNAME|HOSTTYPE|IFS|INSTANCE|JOB|LANG|LANGUAGE|LC_(?:ADDRESS|ALL|IDENTIFICATION|MEASUREMENT|MONETARY|NAME|NUMERIC|PAPER|TELEPHONE|TIME)|LESSCLOSE|LESSOPEN|LINES|LOGNAME|LS_COLORS|MACHTYPE|MAILCHECK|MANDATORY_PATH|NO_AT_BRIDGE|OLDPWD|OPTERR|OPTIND|ORBIT_SOCKETDIR|OSTYPE|PAPERSIZE|PATH|PIPESTATUS|PPID|PS[1-4]|PWD|RANDOM|REPLY|SECONDS|SELINUX_INIT|SESSION|SESSIONTYPE|SESSION_MANAGER|SHELL|SHELLOPTS|SHLVL|SSH_AUTH_SOCK|TERM|UPSTART_EVENTS|UPSTART_INSTANCE|UPSTART_JOB|UPSTART_SESSION|USER|WINDOWID|XAUTHORITY|XDG_(?:CONFIG_DIRS|CURRENT_DESKTOP|DATA_DIRS|GREETER_DATA_DIR|MENU_PREFIX|RUNTIME_DIR|SEAT|SEAT_PATH|SESSION_DESKTOP|SESSION_ID|SESSION_PATH|SESSION_TYPE|VTNR)|XMODIFIERS)\\\\b';\n\nvar commandAfterHeredoc = {\n\tpattern: /(^([\"']?)\\w+\\2)[ \\t]+\\S.*/,\n\tlookbehind: true,\n\talias: 'punctuation', // this looks reasonably well in all themes\n};\n\nvar variableInside = {\n\t'variable': /^\\$\\(|^`|[`)]$/g\n};\n\nvar insideString = {\n\t'bash': commandAfterHeredoc,\n\t'environment': {\n\t\tpattern: RegExp('\\\\$' + envVars),\n\t\talias: 'constant'\n\t},\n\t'variable': [\n\t\t// [0]: Arithmetic Environment\n\t\t{\n\t\t\tpattern: /\\$?\\(\\([\\s\\S]*?\\)\\)/g,\n\t\t\tinside: {\n\t\t\t\t// If there is a $ sign at the beginning highlight $(( and )) as variable\n\t\t\t\t'variable': [\n\t\t\t\t\t{\n\t\t\t\t\t\tpattern: /(^\\$[\\s\\S]+)../,\n\t\t\t\t\t\tlookbehind: true\n\t\t\t\t\t},\n\t\t\t\t\t/^\\$../g\n\t\t\t\t],\n\t\t\t\t'number': /\\b0x[a-fA-F\\d]+\\b|(?:\\b\\d+(?:\\.\\d*)?|\\B\\.\\d+)(?:[Ee]-?\\d+)?/,\n\t\t\t\t// Operators according to https://www.gnu.org/software/bash/manual/bashref.html#Shell-Arithmetic\n\t\t\t\t'operator': /--|\\+\\+|\u0026\u0026|\\|\\||(?:\\*\\*|\u003c\u003c|\u003e\u003e|[%\u0026|^!=\u003c\u003e/*+-])=?|[?:~]/,\n\t\t\t\t// If there is no $ sign at the beginning highlight (( and )) as punctuation\n\t\t\t\t'punctuation': /\\(\\(?|\\)\\)?|,|;/\n\t\t\t}\n\t\t},\n\t\t// [1]: Command Substitution\n\t\t{\n\t\t\tpattern: /\\$\\((?:[^()]|\\([^)]*\\))*\\)|`[^`]+`/g,\n\t\t\tinside: variableInside\n\t\t},\n\t\t// [2]: Brace expansion\n\t\t{\n\t\t\tpattern: /\\$\\{[^}]*\\}/g,\n\t\t\tinside: {\n\t\t\t\t'operator': /:[?=+-]?|[!/]|##?|%%?|\\^\\^?|,,?/,\n\t\t\t\t'punctuation': /[[\\]]/,\n\t\t\t\t'environment': {\n\t\t\t\t\tpattern: RegExp('(\\\\{)' + envVars),\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\talias: 'constant'\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t/\\$(?:\\w+|[#?*!@$])/\n\t],\n\t// Escape sequences from echo and printf's manuals, and escaped quotes.\n\t'entity': /\\\\(?:[abceEfnrtv\\\\\"]|O?[0-7]{1,3}|U[a-fA-F\\d]{8}|u[a-fA-F\\d]{4}|x[a-fA-F\\d]{1,2})/\n};\n\nvar bash = commandAfterHeredoc.inside = languages.sh = languages.shell = languages.bash = {\n\t'shebang': {\n\t\tpattern: /^#!\\s*\\/.*/,\n\t\talias: 'important'\n\t},\n\t'comment': {\n\t\tpattern: /(^|[^\\\\\"{$])#.*/,\n\t\tlookbehind: true\n\t},\n\t'function-name': [\n\t\t// a) function foo {\n\t\t// b) foo() {\n\t\t// c) function foo() {\n\t\t// but not “foo {”\n\t\t{\n\t\t\t// a) and c)\n\t\t\tpattern: /(\\bfunction\\s+)[\\w-]+(?=(?:\\s*\\(?:\\s*\\))?\\s*\\{)/,\n\t\t\tlookbehind: true,\n\t\t\talias: 'function'\n\t\t},\n\t\t{\n\t\t\t// b)\n\t\t\tpattern: /\\b[\\w-]+(?=\\s*\\(\\s*\\)\\s*\\{)/,\n\t\t\talias: 'function'\n\t\t}\n\t],\n\t// Highlight variable names as variables in for and select beginnings.\n\t'for-or-select': {\n\t\tpattern: /(\\b(?:for|select)\\s+)\\w+(?=\\s+in\\s)/,\n\t\tlookbehind: true,\n\t\talias: 'variable'\n\t},\n\t// Highlight variable names as variables in the left-hand part\n\t// of assignments (“=” and “+=”).\n\t'assign-left': {\n\t\tpattern: /(^|[\\s;|\u0026]|[\u003c\u003e]\\()\\w+(?:\\.\\w+)*(?=\\+?=)/,\n\t\tlookbehind: true,\n\t\talias: 'variable',\n\t\tinside: {\n\t\t\t'environment': {\n\t\t\t\tpattern: RegExp('(^|[\\\\s;|\u0026]|[\u003c\u003e]\\\\()' + envVars),\n\t\t\t\tlookbehind: true,\n\t\t\t\talias: 'constant'\n\t\t\t}\n\t\t}\n\t},\n\t// Highlight parameter names as variables\n\t'parameter': {\n\t\tpattern: /(^|\\s)-{1,2}(?:\\w+:[+-]?)?\\w+(?:\\.\\w+)*(?![^\\s=])/,\n\t\tlookbehind: true,\n\t\talias: 'variable'\n\t},\n\t'string': [\n\t\t// Support for Here-documents https://en.wikipedia.org/wiki/Here_document\n\t\t{\n\t\t\tpattern: /((?:^|[^\u003c])\u003c\u003c-?\\s*)(\\w+)\\s[\\s\\S]*?\\n\\2/g,\n\t\t\tlookbehind: true,\n\t\t\tinside: insideString\n\t\t},\n\t\t// Here-document with quotes around the tag\n\t\t// → No expansion (so no “inside”).\n\t\t{\n\t\t\tpattern: /((?:^|[^\u003c])\u003c\u003c-?\\s*)([\"'])(\\w+)\\2\\s[\\s\\S]*?\\n\\3/g,\n\t\t\tlookbehind: true,\n\t\t\tinside: {\n\t\t\t\t'bash': commandAfterHeredoc\n\t\t\t}\n\t\t},\n\t\t// “Normal” string\n\t\t{\n\t\t\t// https://www.gnu.org/software/bash/manual/html_node/Double-Quotes.html\n\t\t\tpattern: /(^|[^\\\\](?:\\\\\\\\)*)\"(?:\\\\[\\s\\S]|\\$\\([^)]+\\)|\\$(?!\\()|`[^`]+`|[^\\\\\"`$])*\"/g,\n\t\t\tlookbehind: true,\n\t\t\tinside: insideString\n\t\t},\n\t\t{\n\t\t\t// https://www.gnu.org/software/bash/manual/html_node/Single-Quotes.html\n\t\t\tpattern: /(^|[^\\\\$])'[^']*'/g,\n\t\t\tlookbehind: true\n\t\t},\n\t\t{\n\t\t\t// https://www.gnu.org/software/bash/manual/html_node/ANSI_002dC-Quoting.html\n\t\t\tpattern: /\\$'(?:\\\\[\\s\\S]|[^\\\\'])*'/g,\n\t\t\tinside: {\n\t\t\t\t'entity': insideString.entity\n\t\t\t}\n\t\t}\n\t],\n\t'environment': {\n\t\tpattern: RegExp('\\\\$?' + envVars),\n\t\talias: 'constant'\n\t},\n\t'variable': insideString.variable,\n\t'function': {\n\t\tpattern: /(^|[\\s;|\u0026]|[\u003c\u003e]\\()(?:add|apropos|apt|apt-cache|apt-get|aptitude|aspell|automysqlbackup|basename|bash|bc|bconsole|bg|bzip2|cal|cargo|cat|c?fdisk|chgrp|chkconfig|chmod|chown|chroot|cksum|clear|cmp|column|comm|composer|cron|crontab|c?split|curl|cut|date|dc|dd|ddrescue|debootstrap|df|diff3?|dig|dircolors|dirname|dirs?|dmesg|docker|docker-compose|du|[ef]?grep|eject|env|ethtool|expand|expect|expr|fdformat|fg|file|find|fmt|fold|format|free|fsck|fuser|g?awk|git|g?parted|groupadd|groupdel|groupmod|groups|grub-mkconfig|halt|head|hg|history|host|hostname|iconv|id|ifconfig|ifdown|ifup|import|install|ip|java|jobs|join|killall|less|link|ln|logname|logrotate|look|lpc|lprint[dq]?|lprm?|ls|lsof|lynx|make|man|mc|mdadm|mkconfig|mkdir|mke2fs|mkfifo|mkfs|mkisofs|mknod|mkswap|mm?v|more|most|mtools|m?tr|mutt|nano|nc|netstat|nice|nl|node|nohup|notify-send|nslookup|op|open|passwd|paste|pathchk|ping|p?kill|p?npm|podman|podman-compose|popd|pr|printcap|printenv|ps|pushd|pv|quota|quotacheck|quotactl|ra[mr]|reboot|remsync|rename|renice|rev|rmdir|rp?m|r?sync|[sr]?cp|screen|sdiff|se[dq]|sendmail|service|s?ftp|shellcheck|shuf|shutdown|sleep|s?locate|[sz]?sh|stat|strace|sudo|sum?|suspend|swapon|sysctl|tac|tail|tar|tee|time|timeout|h?top|touch|traceroute|t?sort|tty|u?mount|uname|unexpand|uniq|units|unrar|unshar|unzip|update-grub|uptime|useradd|userdel|usermod|users|uudecode|uuencode|v|vcpkg|vdir|vim?|virsh|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yarn|yes|zenity|g?zip|zsh|zypper)(?=$|[)\\s;|\u0026])/,\n\t\tlookbehind: true\n\t},\n\t'keyword': {\n\t\tpattern: /(^|[\\s;|\u0026]|[\u003c\u003e]\\()(?:case|do|done|elif|else|esac|fi|for|function|if|in|select|then|until|while)(?=$|[)\\s;|\u0026])/,\n\t\tlookbehind: true\n\t},\n\t// https://www.gnu.org/software/bash/manual/html_node/Shell-Builtin-Commands.html\n\t'builtin': {\n\t\tpattern: /(^|[\\s;|\u0026]|[\u003c\u003e]\\()(?:\\.|:|alias|bind|break|builtin|caller|cd|command|continue|declare|echo|enable|eval|exec|exit|export|getopts|hash|help|[ls]et|local|logout|mapfile|printf|pwd|read|readarray|readonly|return|shift|shopt|source|test|times|trap|type|typeset|ulimit|umask|unalias|unset)(?=$|[)\\s;|\u0026])/,\n\t\tlookbehind: true,\n\t\t// Alias added to make those easier to distinguish from strings.\n\t\talias: 'class-name'\n\t},\n\t'boolean': {\n\t\tpattern: /(^|[\\s;|\u0026]|[\u003c\u003e]\\()(?:false|true)(?=$|[)\\s;|\u0026])/,\n\t\tlookbehind: true\n\t},\n\t'file-descriptor': {\n\t\tpattern: /\\B\u0026\\d\\b/,\n\t\talias: 'important'\n\t},\n\t'operator': {\n\t\t// Lots of redirections here, but not just that.\n\t\tpattern: /\\d?\u003c\u003e|\u003e\\||\\+=|=[=~]?|!=?|\u003c\u003c[\u003c-]?|[\u0026\\d]?\u003e\u003e|\\d[\u003c\u003e]\u0026?|[\u003c\u003e][\u0026=]?|\u0026[\u003e\u0026]?|\\|[\u0026|]?/,\n\t\tinside: {\n\t\t\t'file-descriptor': {\n\t\t\t\tpattern: /^\\d/,\n\t\t\t\talias: 'important'\n\t\t\t}\n\t\t}\n\t},\n\t'punctuation': /\\$?\\(\\(?|\\)\\)?|\\.\\.|[[\\]{};\\\\]/,\n\t'number': {\n\t\tpattern: /(^|\\s)(?:[1-9]\\d*|0)(?:[.,]\\d+)?\\b/,\n\t\tlookbehind: true\n\t}\n};\n\n/* Patterns in command substitution. */\n[\n\t'comment',\n\t'function-name',\n\t'for-or-select',\n\t'assign-left',\n\t'parameter',\n\t'string',\n\t'environment',\n\t'function',\n\t'keyword',\n\t'builtin',\n\t'boolean',\n\t'file-descriptor',\n\t'operator',\n\t'punctuation',\n\t'number'\n].forEach(copied =\u003e variableInside[copied] = bash[copied]);\n"],"version":3}
