{"version":3,"sources":["../../node_modules/codemirror/mode/pug/pug.js"],"names":["mod","exports","module","require","define","amd","CodeMirror","defineMode","config","KEYWORD","DOCTYPE","ID","CLASS","ATTRS_NEST","{","(","[","jsMode","getMode","State","this","javaScriptLine","javaScriptLineExcludesColon","javaScriptArguments","javaScriptArgumentsDepth","isInterpolating","interpolationNesting","jsState","startState","restOfLine","isIncludeFiltered","isEach","lastTag","scriptType","isAttrs","attrsNest","inAttributeName","attributeIsType","attrValue","indentOf","Infinity","indentToken","innerMode","innerState","innerModeForLine","prototype","copy","res","copyState","slice","javaScript","stream","state","sol","peek","tok","token","eol","yieldStatement","match","doctype","interpolation","interpolationContinued","next","caseStatement","when","defaultStatement","extendsStatement","append","prepend","block","include","includeFiltered","includeFilteredContinued","filter","mixin","call","mixinCallAfter","callArguments","conditional","each","eachContinued","whileStatement","tag","captures","toLowerCase","innerModes","current","substring","setInnerMode","code","id","className","attrs","attrsContinued","push","length","pop","eat","trim","toString","Function","replace","backUp","ex","attributesBlock","indent","eatSpace","comment","indentation","colon","text","dot","indexOf","fail","mode","mimeModes","name","force","hideFirstChars","skipToEnd","nextToken","defineMIME"],"mappings":"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","file":"pug.min.js","sourcesContent":["// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function(mod) {\n if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n mod(require(\"../../lib/codemirror\"), require(\"../javascript/javascript\"), require(\"../css/css\"), require(\"../htmlmixed/htmlmixed\"));\n else if (typeof define == \"function\" && define.amd) // AMD\n define([\"../../lib/codemirror\", \"../javascript/javascript\", \"../css/css\", \"../htmlmixed/htmlmixed\"], mod);\n else // Plain browser env\n mod(CodeMirror);\n})(function(CodeMirror) {\n\"use strict\";\n\nCodeMirror.defineMode(\"pug\", function (config) {\n // token types\n var KEYWORD = 'keyword';\n var DOCTYPE = 'meta';\n var ID = 'builtin';\n var CLASS = 'qualifier';\n\n var ATTRS_NEST = {\n '{': '}',\n '(': ')',\n '[': ']'\n };\n\n var jsMode = CodeMirror.getMode(config, 'javascript');\n\n function State() {\n this.javaScriptLine = false;\n this.javaScriptLineExcludesColon = false;\n\n this.javaScriptArguments = false;\n this.javaScriptArgumentsDepth = 0;\n\n this.isInterpolating = false;\n this.interpolationNesting = 0;\n\n this.jsState = CodeMirror.startState(jsMode);\n\n this.restOfLine = '';\n\n this.isIncludeFiltered = false;\n this.isEach = false;\n\n this.lastTag = '';\n this.scriptType = '';\n\n // Attributes Mode\n this.isAttrs = false;\n this.attrsNest = [];\n this.inAttributeName = true;\n this.attributeIsType = false;\n this.attrValue = '';\n\n // Indented Mode\n this.indentOf = Infinity;\n this.indentToken = '';\n\n this.innerMode = null;\n this.innerState = null;\n\n this.innerModeForLine = false;\n }\n /**\n * Safely copy a state\n *\n * @return {State}\n */\n State.prototype.copy = function () {\n var res = new State();\n res.javaScriptLine = this.javaScriptLine;\n res.javaScriptLineExcludesColon = this.javaScriptLineExcludesColon;\n res.javaScriptArguments = this.javaScriptArguments;\n res.javaScriptArgumentsDepth = this.javaScriptArgumentsDepth;\n res.isInterpolating = this.isInterpolating;\n res.interpolationNesting = this.interpolationNesting;\n\n res.jsState = CodeMirror.copyState(jsMode, this.jsState);\n\n res.innerMode = this.innerMode;\n if (this.innerMode && this.innerState) {\n res.innerState = CodeMirror.copyState(this.innerMode, this.innerState);\n }\n\n res.restOfLine = this.restOfLine;\n\n res.isIncludeFiltered = this.isIncludeFiltered;\n res.isEach = this.isEach;\n res.lastTag = this.lastTag;\n res.scriptType = this.scriptType;\n res.isAttrs = this.isAttrs;\n res.attrsNest = this.attrsNest.slice();\n res.inAttributeName = this.inAttributeName;\n res.attributeIsType = this.attributeIsType;\n res.attrValue = this.attrValue;\n res.indentOf = this.indentOf;\n res.indentToken = this.indentToken;\n\n res.innerModeForLine = this.innerModeForLine;\n\n return res;\n };\n\n function javaScript(stream, state) {\n if (stream.sol()) {\n // if javaScriptLine was set at end of line, ignore it\n state.javaScriptLine = false;\n state.javaScriptLineExcludesColon = false;\n }\n if (state.javaScriptLine) {\n if (state.javaScriptLineExcludesColon && stream.peek() === ':') {\n state.javaScriptLine = false;\n state.javaScriptLineExcludesColon = false;\n return;\n }\n var tok = jsMode.token(stream, state.jsState);\n if (stream.eol()) state.javaScriptLine = false;\n return tok || true;\n }\n }\n function javaScriptArguments(stream, state) {\n if (state.javaScriptArguments) {\n if (state.javaScriptArgumentsDepth === 0 && stream.peek() !== '(') {\n state.javaScriptArguments = false;\n return;\n }\n if (stream.peek() === '(') {\n state.javaScriptArgumentsDepth++;\n } else if (stream.peek() === ')') {\n state.javaScriptArgumentsDepth--;\n }\n if (state.javaScriptArgumentsDepth === 0) {\n state.javaScriptArguments = false;\n return;\n }\n\n var tok = jsMode.token(stream, state.jsState);\n return tok || true;\n }\n }\n\n function yieldStatement(stream) {\n if (stream.match(/^yield\\b/)) {\n return 'keyword';\n }\n }\n\n function doctype(stream) {\n if (stream.match(/^(?:doctype) *([^\\n]+)?/)) {\n return DOCTYPE;\n }\n }\n\n function interpolation(stream, state) {\n if (stream.match('#{')) {\n state.isInterpolating = true;\n state.interpolationNesting = 0;\n return 'punctuation';\n }\n }\n\n function interpolationContinued(stream, state) {\n if (state.isInterpolating) {\n if (stream.peek() === '}') {\n state.interpolationNesting--;\n if (state.interpolationNesting < 0) {\n stream.next();\n state.isInterpolating = false;\n return 'punctuation';\n }\n } else if (stream.peek() === '{') {\n state.interpolationNesting++;\n }\n return jsMode.token(stream, state.jsState) || true;\n }\n }\n\n function caseStatement(stream, state) {\n if (stream.match(/^case\\b/)) {\n state.javaScriptLine = true;\n return KEYWORD;\n }\n }\n\n function when(stream, state) {\n if (stream.match(/^when\\b/)) {\n state.javaScriptLine = true;\n state.javaScriptLineExcludesColon = true;\n return KEYWORD;\n }\n }\n\n function defaultStatement(stream) {\n if (stream.match(/^default\\b/)) {\n return KEYWORD;\n }\n }\n\n function extendsStatement(stream, state) {\n if (stream.match(/^extends?\\b/)) {\n state.restOfLine = 'string';\n return KEYWORD;\n }\n }\n\n function append(stream, state) {\n if (stream.match(/^append\\b/)) {\n state.restOfLine = 'variable';\n return KEYWORD;\n }\n }\n function prepend(stream, state) {\n if (stream.match(/^prepend\\b/)) {\n state.restOfLine = 'variable';\n return KEYWORD;\n }\n }\n function block(stream, state) {\n if (stream.match(/^block\\b *(?:(prepend|append)\\b)?/)) {\n state.restOfLine = 'variable';\n return KEYWORD;\n }\n }\n\n function include(stream, state) {\n if (stream.match(/^include\\b/)) {\n state.restOfLine = 'string';\n return KEYWORD;\n }\n }\n\n function includeFiltered(stream, state) {\n if (stream.match(/^include:([a-zA-Z0-9\\-]+)/, false) && stream.match('include')) {\n state.isIncludeFiltered = true;\n return KEYWORD;\n }\n }\n\n function includeFilteredContinued(stream, state) {\n if (state.isIncludeFiltered) {\n var tok = filter(stream, state);\n state.isIncludeFiltered = false;\n state.restOfLine = 'string';\n return tok;\n }\n }\n\n function mixin(stream, state) {\n if (stream.match(/^mixin\\b/)) {\n state.javaScriptLine = true;\n return KEYWORD;\n }\n }\n\n function call(stream, state) {\n if (stream.match(/^\\+([-\\w]+)/)) {\n if (!stream.match(/^\\( *[-\\w]+ *=/, false)) {\n state.javaScriptArguments = true;\n state.javaScriptArgumentsDepth = 0;\n }\n return 'variable';\n }\n if (stream.match(/^\\+#{/, false)) {\n stream.next();\n state.mixinCallAfter = true;\n return interpolation(stream, state);\n }\n }\n function callArguments(stream, state) {\n if (state.mixinCallAfter) {\n state.mixinCallAfter = false;\n if (!stream.match(/^\\( *[-\\w]+ *=/, false)) {\n state.javaScriptArguments = true;\n state.javaScriptArgumentsDepth = 0;\n }\n return true;\n }\n }\n\n function conditional(stream, state) {\n if (stream.match(/^(if|unless|else if|else)\\b/)) {\n state.javaScriptLine = true;\n return KEYWORD;\n }\n }\n\n function each(stream, state) {\n if (stream.match(/^(- *)?(each|for)\\b/)) {\n state.isEach = true;\n return KEYWORD;\n }\n }\n function eachContinued(stream, state) {\n if (state.isEach) {\n if (stream.match(/^ in\\b/)) {\n state.javaScriptLine = true;\n state.isEach = false;\n return KEYWORD;\n } else if (stream.sol() || stream.eol()) {\n state.isEach = false;\n } else if (stream.next()) {\n while (!stream.match(/^ in\\b/, false) && stream.next());\n return 'variable';\n }\n }\n }\n\n function whileStatement(stream, state) {\n if (stream.match(/^while\\b/)) {\n state.javaScriptLine = true;\n return KEYWORD;\n }\n }\n\n function tag(stream, state) {\n var captures;\n if (captures = stream.match(/^(\\w(?:[-:\\w]*\\w)?)\\/?/)) {\n state.lastTag = captures[1].toLowerCase();\n if (state.lastTag === 'script') {\n state.scriptType = 'application/javascript';\n }\n return 'tag';\n }\n }\n\n function filter(stream, state) {\n if (stream.match(/^:([\\w\\-]+)/)) {\n var innerMode;\n if (config && config.innerModes) {\n innerMode = config.innerModes(stream.current().substring(1));\n }\n if (!innerMode) {\n innerMode = stream.current().substring(1);\n }\n if (typeof innerMode === 'string') {\n innerMode = CodeMirror.getMode(config, innerMode);\n }\n setInnerMode(stream, state, innerMode);\n return 'atom';\n }\n }\n\n function code(stream, state) {\n if (stream.match(/^(!?=|-)/)) {\n state.javaScriptLine = true;\n return 'punctuation';\n }\n }\n\n function id(stream) {\n if (stream.match(/^#([\\w-]+)/)) {\n return ID;\n }\n }\n\n function className(stream) {\n if (stream.match(/^\\.([\\w-]+)/)) {\n return CLASS;\n }\n }\n\n function attrs(stream, state) {\n if (stream.peek() == '(') {\n stream.next();\n state.isAttrs = true;\n state.attrsNest = [];\n state.inAttributeName = true;\n state.attrValue = '';\n state.attributeIsType = false;\n return 'punctuation';\n }\n }\n\n function attrsContinued(stream, state) {\n if (state.isAttrs) {\n if (ATTRS_NEST[stream.peek()]) {\n state.attrsNest.push(ATTRS_NEST[stream.peek()]);\n }\n if (state.attrsNest[state.attrsNest.length - 1] === stream.peek()) {\n state.attrsNest.pop();\n } else if (stream.eat(')')) {\n state.isAttrs = false;\n return 'punctuation';\n }\n if (state.inAttributeName && stream.match(/^[^=,\\)!]+/)) {\n if (stream.peek() === '=' || stream.peek() === '!') {\n state.inAttributeName = false;\n state.jsState = CodeMirror.startState(jsMode);\n if (state.lastTag === 'script' && stream.current().trim().toLowerCase() === 'type') {\n state.attributeIsType = true;\n } else {\n state.attributeIsType = false;\n }\n }\n return 'attribute';\n }\n\n var tok = jsMode.token(stream, state.jsState);\n if (state.attributeIsType && tok === 'string') {\n state.scriptType = stream.current().toString();\n }\n if (state.attrsNest.length === 0 && (tok === 'string' || tok === 'variable' || tok === 'keyword')) {\n try {\n Function('', 'var x ' + state.attrValue.replace(/,\\s*$/, '').replace(/^!/, ''));\n state.inAttributeName = true;\n state.attrValue = '';\n stream.backUp(stream.current().length);\n return attrsContinued(stream, state);\n } catch (ex) {\n //not the end of an attribute\n }\n }\n state.attrValue += stream.current();\n return tok || true;\n }\n }\n\n function attributesBlock(stream, state) {\n if (stream.match(/^&attributes\\b/)) {\n state.javaScriptArguments = true;\n state.javaScriptArgumentsDepth = 0;\n return 'keyword';\n }\n }\n\n function indent(stream) {\n if (stream.sol() && stream.eatSpace()) {\n return 'indent';\n }\n }\n\n function comment(stream, state) {\n if (stream.match(/^ *\\/\\/(-)?([^\\n]*)/)) {\n state.indentOf = stream.indentation();\n state.indentToken = 'comment';\n return 'comment';\n }\n }\n\n function colon(stream) {\n if (stream.match(/^: */)) {\n return 'colon';\n }\n }\n\n function text(stream, state) {\n if (stream.match(/^(?:\\| ?| )([^\\n]+)/)) {\n return 'string';\n }\n if (stream.match(/^(<[^\\n]*)/, false)) {\n // html string\n setInnerMode(stream, state, 'htmlmixed');\n state.innerModeForLine = true;\n return innerMode(stream, state, true);\n }\n }\n\n function dot(stream, state) {\n if (stream.eat('.')) {\n var innerMode = null;\n if (state.lastTag === 'script' && state.scriptType.toLowerCase().indexOf('javascript') != -1) {\n innerMode = state.scriptType.toLowerCase().replace(/\"|'/g, '');\n } else if (state.lastTag === 'style') {\n innerMode = 'css';\n }\n setInnerMode(stream, state, innerMode);\n return 'dot';\n }\n }\n\n function fail(stream) {\n stream.next();\n return null;\n }\n\n\n function setInnerMode(stream, state, mode) {\n mode = CodeMirror.mimeModes[mode] || mode;\n mode = config.innerModes ? config.innerModes(mode) || mode : mode;\n mode = CodeMirror.mimeModes[mode] || mode;\n mode = CodeMirror.getMode(config, mode);\n state.indentOf = stream.indentation();\n\n if (mode && mode.name !== 'null') {\n state.innerMode = mode;\n } else {\n state.indentToken = 'string';\n }\n }\n function innerMode(stream, state, force) {\n if (stream.indentation() > state.indentOf || (state.innerModeForLine && !stream.sol()) || force) {\n if (state.innerMode) {\n if (!state.innerState) {\n state.innerState = state.innerMode.startState ? CodeMirror.startState(state.innerMode, stream.indentation()) : {};\n }\n return stream.hideFirstChars(state.indentOf + 2, function () {\n return state.innerMode.token(stream, state.innerState) || true;\n });\n } else {\n stream.skipToEnd();\n return state.indentToken;\n }\n } else if (stream.sol()) {\n state.indentOf = Infinity;\n state.indentToken = null;\n state.innerMode = null;\n state.innerState = null;\n }\n }\n function restOfLine(stream, state) {\n if (stream.sol()) {\n // if restOfLine was set at end of line, ignore it\n state.restOfLine = '';\n }\n if (state.restOfLine) {\n stream.skipToEnd();\n var tok = state.restOfLine;\n state.restOfLine = '';\n return tok;\n }\n }\n\n\n function startState() {\n return new State();\n }\n function copyState(state) {\n return state.copy();\n }\n /**\n * Get the next token in the stream\n *\n * @param {Stream} stream\n * @param {State} state\n */\n function nextToken(stream, state) {\n var tok = innerMode(stream, state)\n || restOfLine(stream, state)\n || interpolationContinued(stream, state)\n || includeFilteredContinued(stream, state)\n || eachContinued(stream, state)\n || attrsContinued(stream, state)\n || javaScript(stream, state)\n || javaScriptArguments(stream, state)\n || callArguments(stream, state)\n\n || yieldStatement(stream)\n || doctype(stream)\n || interpolation(stream, state)\n || caseStatement(stream, state)\n || when(stream, state)\n || defaultStatement(stream)\n || extendsStatement(stream, state)\n || append(stream, state)\n || prepend(stream, state)\n || block(stream, state)\n || include(stream, state)\n || includeFiltered(stream, state)\n || mixin(stream, state)\n || call(stream, state)\n || conditional(stream, state)\n || each(stream, state)\n || whileStatement(stream, state)\n || tag(stream, state)\n || filter(stream, state)\n || code(stream, state)\n || id(stream)\n || className(stream)\n || attrs(stream, state)\n || attributesBlock(stream, state)\n || indent(stream)\n || text(stream, state)\n || comment(stream, state)\n || colon(stream)\n || dot(stream, state)\n || fail(stream);\n\n return tok === true ? null : tok;\n }\n return {\n startState: startState,\n copyState: copyState,\n token: nextToken\n };\n}, 'javascript', 'css', 'htmlmixed');\n\nCodeMirror.defineMIME('text/x-pug', 'pug');\nCodeMirror.defineMIME('text/x-jade', 'pug');\n\n});\n"]}