1{"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"]}