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