1{"version":3,"sources":["../../node_modules/codemirror/mode/soy/soy.js"],"names":["mod","exports","module","require","define","amd","CodeMirror","paramData","noEndTag","soyState","tags","alias","delpackage","namespace","@param","@param?","@inject","@inject?","@state","template","variableScope","literal","msg","fallbackmsg","reduceIndent","select","plural","let","if","elseif","else","switch","case","default","foreach","ifempty","for","call","param","print","deltemplate","delcall","log","element","indentingTags","Object","keys","filter","tag","defineMode","config","textMode","getMode","modes","html","name","multilineTagIndentFactor","multilineTagIndentPastTag","attributes","text","uri","trusted_resource_uri","css","js","statementIndent","indentUnit","last","array","length","tokenUntil","stream","state","untilRegExp","sol","indent","eat","oldString","string","match","exec","substr","pos","index","result","hideFirstChars","localState","localStates","mode","token","contains","list","next","prepend","popcontext","context","scope","variables","previousContext","ref","loose","Context","this","kind","expression","push","lookupVariables","quoteKind","test","startState","scopes","copyState","concat","map","pop","skipToEnd","paramRe","current","peekChar","peek","indexOf","endTag","tagName","substring","selfClosed","prevTag","indentingTag","tagError","textAfter","line","top","Pass","innerMode","electricInput","lineComment","blockCommentStart","blockCommentEnd","blockCommentContinue","useInnerComments","fold","registerHelper","defineMIME"],"mappings":"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","file":"soy.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(\"../htmlmixed/htmlmixed\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../../lib/codemirror\", \"../htmlmixed/htmlmixed\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n  \"use strict\";\n\n  var paramData = { noEndTag: true, soyState: \"param-def\" };\n  var tags = {\n    \"alias\": { noEndTag: true },\n    \"delpackage\": { noEndTag: true },\n    \"namespace\": { noEndTag: true, soyState: \"namespace-def\" },\n    \"@param\": paramData,\n    \"@param?\": paramData,\n    \"@inject\": paramData,\n    \"@inject?\": paramData,\n    \"@state\": paramData,\n    \"template\": { soyState: \"templ-def\", variableScope: true},\n    \"literal\": { },\n    \"msg\": {},\n    \"fallbackmsg\": { noEndTag: true, reduceIndent: true},\n    \"select\": {},\n    \"plural\": {},\n    \"let\": { soyState: \"var-def\" },\n    \"if\": {},\n    \"elseif\": { noEndTag: true, reduceIndent: true},\n    \"else\": { noEndTag: true, reduceIndent: true},\n    \"switch\": {},\n    \"case\": { noEndTag: true, reduceIndent: true},\n    \"default\": { noEndTag: true, reduceIndent: true},\n    \"foreach\": { variableScope: true, soyState: \"for-loop\" },\n    \"ifempty\": { noEndTag: true, reduceIndent: true},\n    \"for\": { variableScope: true, soyState: \"for-loop\" },\n    \"call\": { soyState: \"templ-ref\" },\n    \"param\": { soyState: \"param-ref\"},\n    \"print\": { noEndTag: true },\n    \"deltemplate\": { soyState: \"templ-def\", variableScope: true},\n    \"delcall\": { soyState: \"templ-ref\" },\n    \"log\": {},\n    \"element\": { variableScope: true },\n  };\n\n  var indentingTags = Object.keys(tags).filter(function(tag) {\n    return !tags[tag].noEndTag || tags[tag].reduceIndent;\n  });\n\n  CodeMirror.defineMode(\"soy\", function(config) {\n    var textMode = CodeMirror.getMode(config, \"text/plain\");\n    var modes = {\n      html: CodeMirror.getMode(config, {name: \"text/html\", multilineTagIndentFactor: 2, multilineTagIndentPastTag: false}),\n      attributes: textMode,\n      text: textMode,\n      uri: textMode,\n      trusted_resource_uri: textMode,\n      css: CodeMirror.getMode(config, \"text/css\"),\n      js: CodeMirror.getMode(config, {name: \"text/javascript\", statementIndent: 2 * config.indentUnit})\n    };\n\n    function last(array) {\n      return array[array.length - 1];\n    }\n\n    function tokenUntil(stream, state, untilRegExp) {\n      if (stream.sol()) {\n        for (var indent = 0; indent < state.indent; indent++) {\n          if (!stream.eat(/\\s/)) break;\n        }\n        if (indent) return null;\n      }\n      var oldString = stream.string;\n      var match = untilRegExp.exec(oldString.substr(stream.pos));\n      if (match) {\n        // We don't use backUp because it backs up just the position, not the state.\n        // This uses an undocumented API.\n        stream.string = oldString.substr(0, stream.pos + match.index);\n      }\n      var result = stream.hideFirstChars(state.indent, function() {\n        var localState = last(state.localStates);\n        return localState.mode.token(stream, localState.state);\n      });\n      stream.string = oldString;\n      return result;\n    }\n\n    function contains(list, element) {\n      while (list) {\n        if (list.element === element) return true;\n        list = list.next;\n      }\n      return false;\n    }\n\n    function prepend(list, element) {\n      return {\n        element: element,\n        next: list\n      };\n    }\n\n    function popcontext(state) {\n      if (!state.context) return;\n      if (state.context.scope) {\n        state.variables = state.context.scope;\n      }\n      state.context = state.context.previousContext;\n    }\n\n    // Reference a variable `name` in `list`.\n    // Let `loose` be truthy to ignore missing identifiers.\n    function ref(list, name, loose) {\n      return contains(list, name) ? \"variable-2\" : (loose ? \"variable\" : \"variable-2 error\");\n    }\n\n    // Data for an open soy tag.\n    function Context(previousContext, tag, scope) {\n      this.previousContext = previousContext;\n      this.tag = tag;\n      this.kind = null;\n      this.scope = scope;\n    }\n\n    function expression(stream, state) {\n      var match;\n      if (stream.match(/[[]/)) {\n        state.soyState.push(\"list-literal\");\n        state.context = new Context(state.context, \"list-literal\", state.variables);\n        state.lookupVariables = false;\n        return null;\n      } else if (stream.match(/map\\b/)) {\n        state.soyState.push(\"map-literal\");\n        return \"keyword\";\n      } else if (stream.match(/record\\b/)) {\n        state.soyState.push(\"record-literal\");\n        return \"keyword\";\n      } else if (stream.match(/([\\w]+)(?=\\()/)) {\n        return \"variable callee\";\n      } else if (match = stream.match(/^[\"']/)) {\n        state.soyState.push(\"string\");\n        state.quoteKind = match[0];\n        return \"string\";\n      } else if (stream.match(/^[(]/)) {\n        state.soyState.push(\"open-parentheses\");\n        return null;\n      } else if (stream.match(/(null|true|false)(?!\\w)/) ||\n          stream.match(/0x([0-9a-fA-F]{2,})/) ||\n          stream.match(/-?([0-9]*[.])?[0-9]+(e[0-9]*)?/)) {\n        return \"atom\";\n      } else if (stream.match(/(\\||[+\\-*\\/%]|[=!]=|\\?:|[<>]=?)/)) {\n        // Tokenize filter, binary, null propagator, and equality operators.\n        return \"operator\";\n      } else if (match = stream.match(/^\\$([\\w]+)/)) {\n        return ref(state.variables, match[1], !state.lookupVariables);\n      } else if (match = stream.match(/^\\w+/)) {\n        return /^(?:as|and|or|not|in|if)$/.test(match[0]) ? \"keyword\" : null;\n      }\n\n      stream.next();\n      return null;\n    }\n\n    return {\n      startState: function() {\n        return {\n          soyState: [],\n          variables: prepend(null, 'ij'),\n          scopes: null,\n          indent: 0,\n          quoteKind: null,\n          context: null,\n          lookupVariables: true, // Is unknown variables considered an error\n          localStates: [{\n            mode: modes.html,\n            state: CodeMirror.startState(modes.html)\n          }]\n        };\n      },\n\n      copyState: function(state) {\n        return {\n          tag: state.tag, // Last seen Soy tag.\n          soyState: state.soyState.concat([]),\n          variables: state.variables,\n          context: state.context,\n          indent: state.indent, // Indentation of the following line.\n          quoteKind: state.quoteKind,\n          lookupVariables: state.lookupVariables,\n          localStates: state.localStates.map(function(localState) {\n            return {\n              mode: localState.mode,\n              state: CodeMirror.copyState(localState.mode, localState.state)\n            };\n          })\n        };\n      },\n\n      token: function(stream, state) {\n        var match;\n\n        switch (last(state.soyState)) {\n          case \"comment\":\n            if (stream.match(/^.*?\\*\\//)) {\n              state.soyState.pop();\n            } else {\n              stream.skipToEnd();\n            }\n            if (!state.context || !state.context.scope) {\n              var paramRe = /@param\\??\\s+(\\S+)/g;\n              var current = stream.current();\n              for (var match; (match = paramRe.exec(current)); ) {\n                state.variables = prepend(state.variables, match[1]);\n              }\n            }\n            return \"comment\";\n\n          case \"string\":\n            var match = stream.match(/^.*?([\"']|\\\\[\\s\\S])/);\n            if (!match) {\n              stream.skipToEnd();\n            } else if (match[1] == state.quoteKind) {\n              state.quoteKind = null;\n              state.soyState.pop();\n            }\n            return \"string\";\n        }\n\n        if (!state.soyState.length || last(state.soyState) != \"literal\") {\n          if (stream.match(/^\\/\\*/)) {\n            state.soyState.push(\"comment\");\n            return \"comment\";\n          } else if (stream.match(stream.sol() ? /^\\s*\\/\\/.*/ : /^\\s+\\/\\/.*/)) {\n            return \"comment\";\n          }\n        }\n\n        switch (last(state.soyState)) {\n          case \"templ-def\":\n            if (match = stream.match(/^\\.?([\\w]+(?!\\.[\\w]+)*)/)) {\n              state.soyState.pop();\n              return \"def\";\n            }\n            stream.next();\n            return null;\n\n          case \"templ-ref\":\n            if (match = stream.match(/(\\.?[a-zA-Z_][a-zA-Z_0-9]+)+/)) {\n              state.soyState.pop();\n              // If the first character is '.', it can only be a local template.\n              if (match[0][0] == '.') {\n                return \"variable-2\"\n              }\n              // Otherwise\n              return \"variable\";\n            }\n            if (match = stream.match(/^\\$([\\w]+)/)) {\n              state.soyState.pop();\n              return ref(state.variables, match[1], !state.lookupVariables);\n            }\n\n            stream.next();\n            return null;\n\n          case \"namespace-def\":\n            if (match = stream.match(/^\\.?([\\w\\.]+)/)) {\n              state.soyState.pop();\n              return \"variable\";\n            }\n            stream.next();\n            return null;\n\n          case \"param-def\":\n            if (match = stream.match(/^\\w+/)) {\n              state.variables = prepend(state.variables, match[0]);\n              state.soyState.pop();\n              state.soyState.push(\"param-type\");\n              return \"def\";\n            }\n            stream.next();\n            return null;\n\n          case \"param-ref\":\n            if (match = stream.match(/^\\w+/)) {\n              state.soyState.pop();\n              return \"property\";\n            }\n            stream.next();\n            return null;\n\n          case \"open-parentheses\":\n            if (stream.match(/[)]/)) {\n              state.soyState.pop();\n              return null;\n            }\n            return expression(stream, state);\n\n          case \"param-type\":\n            var peekChar = stream.peek();\n            if (\"}]=>,\".indexOf(peekChar) != -1) {\n              state.soyState.pop();\n              return null;\n            } else if (peekChar == \"[\") {\n              state.soyState.push('param-type-record');\n              return null;\n            } else if (peekChar == \"(\") {\n              state.soyState.push('param-type-template');\n              return null;\n            } else if (peekChar == \"<\") {\n              state.soyState.push('param-type-parameter');\n              return null;\n            } else if (match = stream.match(/^([\\w]+|[?])/)) {\n              return \"type\";\n            }\n            stream.next();\n            return null;\n\n          case \"param-type-record\":\n            var peekChar = stream.peek();\n            if (peekChar == \"]\") {\n              state.soyState.pop();\n              return null;\n            }\n            if (stream.match(/^\\w+/)) {\n              state.soyState.push('param-type');\n              return \"property\";\n            }\n            stream.next();\n            return null;\n\n          case \"param-type-parameter\":\n            if (stream.match(/^[>]/)) {\n              state.soyState.pop();\n              return null;\n            }\n            if (stream.match(/^[<,]/)) {\n              state.soyState.push('param-type');\n              return null;\n            }\n            stream.next();\n            return null;\n\n          case \"param-type-template\":\n            if (stream.match(/[>]/)) {\n              state.soyState.pop();\n              state.soyState.push('param-type');\n              return null;\n            }\n            if (stream.match(/^\\w+/)) {\n              state.soyState.push('param-type');\n              return \"def\";\n            }\n            stream.next();\n            return null;\n\n          case \"var-def\":\n            if (match = stream.match(/^\\$([\\w]+)/)) {\n              state.variables = prepend(state.variables, match[1]);\n              state.soyState.pop();\n              return \"def\";\n            }\n            stream.next();\n            return null;\n\n          case \"for-loop\":\n            if (stream.match(/\\bin\\b/)) {\n              state.soyState.pop();\n              return \"keyword\";\n            }\n            if (stream.peek() == \"$\") {\n              state.soyState.push('var-def');\n              return null;\n            }\n            stream.next();\n            return null;\n\n          case \"record-literal\":\n            if (stream.match(/^[)]/)) {\n              state.soyState.pop();\n              return null;\n            }\n            if (stream.match(/[(,]/)) {\n              state.soyState.push(\"map-value\")\n              state.soyState.push(\"record-key\")\n              return null;\n            }\n            stream.next()\n            return null;\n\n          case \"map-literal\":\n            if (stream.match(/^[)]/)) {\n              state.soyState.pop();\n              return null;\n            }\n            if (stream.match(/[(,]/)) {\n              state.soyState.push(\"map-value\")\n              state.soyState.push(\"map-value\")\n              return null;\n            }\n            stream.next()\n            return null;\n\n          case \"list-literal\":\n            if (stream.match(/\\]/)) {\n              state.soyState.pop();\n              state.lookupVariables = true;\n              popcontext(state);\n              return null;\n            }\n            if (stream.match(/\\bfor\\b/)) {\n              state.lookupVariables = true;\n              state.soyState.push('for-loop');\n              return \"keyword\";\n            }\n            return expression(stream, state);\n\n          case \"record-key\":\n            if (stream.match(/[\\w]+/)) {\n              return \"property\";\n            }\n            if (stream.match(/^[:]/)) {\n              state.soyState.pop();\n              return null;\n            }\n            stream.next();\n            return null;\n\n          case \"map-value\":\n            if (stream.peek() == \")\" || stream.peek() == \",\" || stream.match(/^[:)]/)) {\n              state.soyState.pop();\n              return null;\n            }\n            return expression(stream, state);\n\n          case \"import\":\n            if (stream.eat(\";\")) {\n              state.soyState.pop();\n              state.indent -= 2 * config.indentUnit;\n              return null;\n            }\n            if (stream.match(/\\w+(?=\\s+as)/)) {\n              return \"variable\";\n            }\n            if (match = stream.match(/\\w+/)) {\n              return /(from|as)/.test(match[0]) ? \"keyword\" : \"def\";\n            }\n            if (match = stream.match(/^[\"']/)) {\n              state.soyState.push(\"string\");\n              state.quoteKind = match[0];\n              return \"string\";\n            }\n            stream.next();\n            return null;\n\n          case \"tag\":\n            var endTag = state.tag[0] == \"/\";\n            var tagName = endTag ? state.tag.substring(1) : state.tag;\n            var tag = tags[tagName];\n            if (stream.match(/^\\/?}/)) {\n              var selfClosed = stream.current() == \"/}\";\n              if (selfClosed && !endTag) {\n                popcontext(state);\n              }\n              if (state.tag == \"/template\" || state.tag == \"/deltemplate\") {\n                state.variables = prepend(null, 'ij');\n                state.indent = 0;\n              } else {\n                state.indent -= config.indentUnit *\n                    (selfClosed || indentingTags.indexOf(state.tag) == -1 ? 2 : 1);\n              }\n              state.soyState.pop();\n              return \"keyword\";\n            } else if (stream.match(/^([\\w?]+)(?==)/)) {\n              if (state.context && state.context.tag == tagName && stream.current() == \"kind\" && (match = stream.match(/^=\"([^\"]+)/, false))) {\n                var kind = match[1];\n                state.context.kind = kind;\n                var mode = modes[kind] || modes.html;\n                var localState = last(state.localStates);\n                if (localState.mode.indent) {\n                  state.indent += localState.mode.indent(localState.state, \"\", \"\");\n                }\n                state.localStates.push({\n                  mode: mode,\n                  state: CodeMirror.startState(mode)\n                });\n              }\n              return \"attribute\";\n            }\n            return expression(stream, state);\n\n          case \"literal\":\n            if (stream.match(/^(?=\\{\\/literal})/)) {\n              state.soyState.pop();\n              return this.token(stream, state);\n            }\n            return tokenUntil(stream, state, /\\{\\/literal}/);\n        }\n\n        if (stream.match(/^\\{literal}/)) {\n          state.indent += config.indentUnit;\n          state.soyState.push(\"literal\");\n          state.context = new Context(state.context, \"literal\", state.variables);\n          return \"keyword\";\n\n        // A tag-keyword must be followed by whitespace, comment or a closing tag.\n        } else if (match = stream.match(/^\\{([/@\\\\]?\\w+\\??)(?=$|[\\s}]|\\/[/*])/)) {\n          var prevTag = state.tag;\n          state.tag = match[1];\n          var endTag = state.tag[0] == \"/\";\n          var indentingTag = !!tags[state.tag];\n          var tagName = endTag ? state.tag.substring(1) : state.tag;\n          var tag = tags[tagName];\n          if (state.tag != \"/switch\")\n            state.indent += ((endTag || tag && tag.reduceIndent) && prevTag != \"switch\" ? 1 : 2) * config.indentUnit;\n\n          state.soyState.push(\"tag\");\n          var tagError = false;\n          if (tag) {\n            if (!endTag) {\n              if (tag.soyState) state.soyState.push(tag.soyState);\n            }\n            // If a new tag, open a new context.\n            if (!tag.noEndTag && (indentingTag || !endTag)) {\n              state.context = new Context(state.context, state.tag, tag.variableScope ? state.variables : null);\n            // Otherwise close the current context.\n            } else if (endTag) {\n              if (!state.context || state.context.tag != tagName) {\n                tagError = true;\n              } else if (state.context) {\n                if (state.context.kind) {\n                  state.localStates.pop();\n                  var localState = last(state.localStates);\n                  if (localState.mode.indent) {\n                    state.indent -= localState.mode.indent(localState.state, \"\", \"\");\n                  }\n                }\n                popcontext(state);\n              }\n            }\n          } else if (endTag) {\n            // Assume all tags with a closing tag are defined in the config.\n            tagError = true;\n          }\n          return (tagError ? \"error \" : \"\") + \"keyword\";\n\n        // Not a tag-keyword; it's an implicit print tag.\n        } else if (stream.eat('{')) {\n          state.tag = \"print\";\n          state.indent += 2 * config.indentUnit;\n          state.soyState.push(\"tag\");\n          return \"keyword\";\n        } else if (!state.context && stream.match(/\\bimport\\b/)) {\n          state.soyState.push(\"import\");\n          state.indent += 2 * config.indentUnit;\n          return \"keyword\";\n        }\n\n        return tokenUntil(stream, state, /\\{|\\s+\\/\\/|\\/\\*/);\n      },\n\n      indent: function(state, textAfter, line) {\n        var indent = state.indent, top = last(state.soyState);\n        if (top == \"comment\") return CodeMirror.Pass;\n\n        if (top == \"literal\") {\n          if (/^\\{\\/literal}/.test(textAfter)) indent -= config.indentUnit;\n        } else {\n          if (/^\\s*\\{\\/(template|deltemplate)\\b/.test(textAfter)) return 0;\n          if (/^\\{(\\/|(fallbackmsg|elseif|else|ifempty)\\b)/.test(textAfter)) indent -= config.indentUnit;\n          if (state.tag != \"switch\" && /^\\{(case|default)\\b/.test(textAfter)) indent -= config.indentUnit;\n          if (/^\\{\\/switch\\b/.test(textAfter)) indent -= config.indentUnit;\n        }\n        var localState = last(state.localStates);\n        if (indent && localState.mode.indent) {\n          indent += localState.mode.indent(localState.state, textAfter, line);\n        }\n        return indent;\n      },\n\n      innerMode: function(state) {\n        if (state.soyState.length && last(state.soyState) != \"literal\") return null;\n        else return last(state.localStates);\n      },\n\n      electricInput: /^\\s*\\{(\\/|\\/template|\\/deltemplate|\\/switch|fallbackmsg|elseif|else|case|default|ifempty|\\/literal\\})$/,\n      lineComment: \"//\",\n      blockCommentStart: \"/*\",\n      blockCommentEnd: \"*/\",\n      blockCommentContinue: \" * \",\n      useInnerComments: false,\n      fold: \"indent\"\n    };\n  }, \"htmlmixed\");\n\n  CodeMirror.registerHelper(\"wordChars\", \"soy\", /[\\w$]/);\n\n  CodeMirror.registerHelper(\"hintWords\", \"soy\", Object.keys(tags).concat(\n      [\"css\", \"debugger\"]));\n\n  CodeMirror.defineMIME(\"text/x-soy\", \"soy\");\n});\n"]}