{"version":3,"sources":["../../node_modules/codemirror/mode/xquery/xquery.js"],"names":["mod","exports","module","require","define","amd","CodeMirror","defineMode","keywords","kw","type","style","operator","atom","punctuation","qualifier","kwObj",",","basic","i","l","length","types","operators","axis_specifiers","chain","stream","state","f","tokenize","tokenBase","ch","next","mightBeFunction","isEQName","isEQNameAhead","match","tokenXMLComment","tokenCDATA","tokenPreProcessing","isclose","eat","eatSpace","tagName","c","tokenTag","pushStateStack","popStateStack","isInXmlBlock","test","tokenComment","tokenString","tokenVariable","known","propertyIsEnumerable","eatWhile","foundColon","word","current","isInXmlConstructor","maybeEnd","maybeNested","nestedCount","quote","isInString","name","isInXmlAttributeBlock","isVariableChar","tokenAttribute","isIn","stack","newState","push","pop","reinstateTokenize","startState","cc","token","blockCommentStart","blockCommentEnd","defineMIME"],"mappings":"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","file":"xquery.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\"));\n else if (typeof define == \"function\" && define.amd) // AMD\n define([\"../../lib/codemirror\"], mod);\n else // Plain browser env\n mod(CodeMirror);\n})(function(CodeMirror) {\n\"use strict\";\n\nCodeMirror.defineMode(\"xquery\", function() {\n\n // The keywords object is set to the result of this self executing\n // function. Each keyword is a property of the keywords object whose\n // value is {type: atype, style: astyle}\n var keywords = function(){\n // convenience functions used to build keywords object\n function kw(type) {return {type: type, style: \"keyword\"};}\n var operator = kw(\"operator\")\n , atom = {type: \"atom\", style: \"atom\"}\n , punctuation = {type: \"punctuation\", style: null}\n , qualifier = {type: \"axis_specifier\", style: \"qualifier\"};\n\n // kwObj is what is return from this function at the end\n var kwObj = {\n ',': punctuation\n };\n\n // a list of 'basic' keywords. For each add a property to kwObj with the value of\n // {type: basic[i], style: \"keyword\"} e.g. 'after' --> {type: \"after\", style: \"keyword\"}\n var basic = ['after', 'all', 'allowing', 'ancestor', 'ancestor-or-self', 'any', 'array', 'as',\n 'ascending', 'at', 'attribute', 'base-uri', 'before', 'boundary-space', 'by', 'case', 'cast',\n 'castable', 'catch', 'child', 'collation', 'comment', 'construction', 'contains', 'content',\n 'context', 'copy', 'copy-namespaces', 'count', 'decimal-format', 'declare', 'default', 'delete',\n 'descendant', 'descendant-or-self', 'descending', 'diacritics', 'different', 'distance',\n 'document', 'document-node', 'element', 'else', 'empty', 'empty-sequence', 'encoding', 'end',\n 'entire', 'every', 'exactly', 'except', 'external', 'first', 'following', 'following-sibling',\n 'for', 'from', 'ftand', 'ftnot', 'ft-option', 'ftor', 'function', 'fuzzy', 'greatest', 'group',\n 'if', 'import', 'in', 'inherit', 'insensitive', 'insert', 'instance', 'intersect', 'into',\n 'invoke', 'is', 'item', 'language', 'last', 'lax', 'least', 'let', 'levels', 'lowercase', 'map',\n 'modify', 'module', 'most', 'namespace', 'next', 'no', 'node', 'nodes', 'no-inherit',\n 'no-preserve', 'not', 'occurs', 'of', 'only', 'option', 'order', 'ordered', 'ordering',\n 'paragraph', 'paragraphs', 'parent', 'phrase', 'preceding', 'preceding-sibling', 'preserve',\n 'previous', 'processing-instruction', 'relationship', 'rename', 'replace', 'return',\n 'revalidation', 'same', 'satisfies', 'schema', 'schema-attribute', 'schema-element', 'score',\n 'self', 'sensitive', 'sentence', 'sentences', 'sequence', 'skip', 'sliding', 'some', 'stable',\n 'start', 'stemming', 'stop', 'strict', 'strip', 'switch', 'text', 'then', 'thesaurus', 'times',\n 'to', 'transform', 'treat', 'try', 'tumbling', 'type', 'typeswitch', 'union', 'unordered',\n 'update', 'updating', 'uppercase', 'using', 'validate', 'value', 'variable', 'version',\n 'weight', 'when', 'where', 'wildcards', 'window', 'with', 'without', 'word', 'words', 'xquery'];\n for(var i=0, l=basic.length; i < l; i++) { kwObj[basic[i]] = kw(basic[i]);};\n\n // a list of types. For each add a property to kwObj with the value of\n // {type: \"atom\", style: \"atom\"}\n var types = ['xs:anyAtomicType', 'xs:anySimpleType', 'xs:anyType', 'xs:anyURI',\n 'xs:base64Binary', 'xs:boolean', 'xs:byte', 'xs:date', 'xs:dateTime', 'xs:dateTimeStamp',\n 'xs:dayTimeDuration', 'xs:decimal', 'xs:double', 'xs:duration', 'xs:ENTITIES', 'xs:ENTITY',\n 'xs:float', 'xs:gDay', 'xs:gMonth', 'xs:gMonthDay', 'xs:gYear', 'xs:gYearMonth', 'xs:hexBinary',\n 'xs:ID', 'xs:IDREF', 'xs:IDREFS', 'xs:int', 'xs:integer', 'xs:item', 'xs:java', 'xs:language',\n 'xs:long', 'xs:Name', 'xs:NCName', 'xs:negativeInteger', 'xs:NMTOKEN', 'xs:NMTOKENS',\n 'xs:nonNegativeInteger', 'xs:nonPositiveInteger', 'xs:normalizedString', 'xs:NOTATION',\n 'xs:numeric', 'xs:positiveInteger', 'xs:precisionDecimal', 'xs:QName', 'xs:short', 'xs:string',\n 'xs:time', 'xs:token', 'xs:unsignedByte', 'xs:unsignedInt', 'xs:unsignedLong',\n 'xs:unsignedShort', 'xs:untyped', 'xs:untypedAtomic', 'xs:yearMonthDuration'];\n for(var i=0, l=types.length; i < l; i++) { kwObj[types[i]] = atom;};\n\n // each operator will add a property to kwObj with value of {type: \"operator\", style: \"keyword\"}\n var operators = ['eq', 'ne', 'lt', 'le', 'gt', 'ge', ':=', '=', '>', '>=', '<', '<=', '.', '|', '?', 'and', 'or', 'div', 'idiv', 'mod', '*', '/', '+', '-'];\n for(var i=0, l=operators.length; i < l; i++) { kwObj[operators[i]] = operator;};\n\n // each axis_specifiers will add a property to kwObj with value of {type: \"axis_specifier\", style: \"qualifier\"}\n var axis_specifiers = [\"self::\", \"attribute::\", \"child::\", \"descendant::\", \"descendant-or-self::\", \"parent::\",\n \"ancestor::\", \"ancestor-or-self::\", \"following::\", \"preceding::\", \"following-sibling::\", \"preceding-sibling::\"];\n for(var i=0, l=axis_specifiers.length; i < l; i++) { kwObj[axis_specifiers[i]] = qualifier; };\n\n return kwObj;\n }();\n\n function chain(stream, state, f) {\n state.tokenize = f;\n return f(stream, state);\n }\n\n // the primary mode tokenizer\n function tokenBase(stream, state) {\n var ch = stream.next(),\n mightBeFunction = false,\n isEQName = isEQNameAhead(stream);\n\n // an XML tag (if not in some sub, chained tokenizer)\n if (ch == \"<\") {\n if(stream.match(\"!--\", true))\n return chain(stream, state, tokenXMLComment);\n\n if(stream.match(\"![CDATA\", false)) {\n state.tokenize = tokenCDATA;\n return \"tag\";\n }\n\n if(stream.match(\"?\", false)) {\n return chain(stream, state, tokenPreProcessing);\n }\n\n var isclose = stream.eat(\"/\");\n stream.eatSpace();\n var tagName = \"\", c;\n while ((c = stream.eat(/[^\\s\\u00a0=<>\\\"\\'\\/?]/))) tagName += c;\n\n return chain(stream, state, tokenTag(tagName, isclose));\n }\n // start code block\n else if(ch == \"{\") {\n pushStateStack(state, { type: \"codeblock\"});\n return null;\n }\n // end code block\n else if(ch == \"}\") {\n popStateStack(state);\n return null;\n }\n // if we're in an XML block\n else if(isInXmlBlock(state)) {\n if(ch == \">\")\n return \"tag\";\n else if(ch == \"/\" && stream.eat(\">\")) {\n popStateStack(state);\n return \"tag\";\n }\n else\n return \"variable\";\n }\n // if a number\n else if (/\\d/.test(ch)) {\n stream.match(/^\\d*(?:\\.\\d*)?(?:E[+\\-]?\\d+)?/);\n return \"atom\";\n }\n // comment start\n else if (ch === \"(\" && stream.eat(\":\")) {\n pushStateStack(state, { type: \"comment\"});\n return chain(stream, state, tokenComment);\n }\n // quoted string\n else if (!isEQName && (ch === '\"' || ch === \"'\"))\n return chain(stream, state, tokenString(ch));\n // variable\n else if(ch === \"$\") {\n return chain(stream, state, tokenVariable);\n }\n // assignment\n else if(ch ===\":\" && stream.eat(\"=\")) {\n return \"keyword\";\n }\n // open paren\n else if(ch === \"(\") {\n pushStateStack(state, { type: \"paren\"});\n return null;\n }\n // close paren\n else if(ch === \")\") {\n popStateStack(state);\n return null;\n }\n // open paren\n else if(ch === \"[\") {\n pushStateStack(state, { type: \"bracket\"});\n return null;\n }\n // close paren\n else if(ch === \"]\") {\n popStateStack(state);\n return null;\n }\n else {\n var known = keywords.propertyIsEnumerable(ch) && keywords[ch];\n\n // if there's a EQName ahead, consume the rest of the string portion, it's likely a function\n if(isEQName && ch === '\\\"') while(stream.next() !== '\"'){}\n if(isEQName && ch === '\\'') while(stream.next() !== '\\''){}\n\n // gobble up a word if the character is not known\n if(!known) stream.eatWhile(/[\\w\\$_-]/);\n\n // gobble a colon in the case that is a lib func type call fn:doc\n var foundColon = stream.eat(\":\");\n\n // if there's not a second colon, gobble another word. Otherwise, it's probably an axis specifier\n // which should get matched as a keyword\n if(!stream.eat(\":\") && foundColon) {\n stream.eatWhile(/[\\w\\$_-]/);\n }\n // if the next non whitespace character is an open paren, this is probably a function (if not a keyword of other sort)\n if(stream.match(/^[ \\t]*\\(/, false)) {\n mightBeFunction = true;\n }\n // is the word a keyword?\n var word = stream.current();\n known = keywords.propertyIsEnumerable(word) && keywords[word];\n\n // if we think it's a function call but not yet known,\n // set style to variable for now for lack of something better\n if(mightBeFunction && !known) known = {type: \"function_call\", style: \"variable def\"};\n\n // if the previous word was element, attribute, axis specifier, this word should be the name of that\n if(isInXmlConstructor(state)) {\n popStateStack(state);\n return \"variable\";\n }\n // as previously checked, if the word is element,attribute, axis specifier, call it an \"xmlconstructor\" and\n // push the stack so we know to look for it on the next word\n if(word == \"element\" || word == \"attribute\" || known.type == \"axis_specifier\") pushStateStack(state, {type: \"xmlconstructor\"});\n\n // if the word is known, return the details of that else just call this a generic 'word'\n return known ? known.style : \"variable\";\n }\n }\n\n // handle comments, including nested\n function tokenComment(stream, state) {\n var maybeEnd = false, maybeNested = false, nestedCount = 0, ch;\n while (ch = stream.next()) {\n if (ch == \")\" && maybeEnd) {\n if(nestedCount > 0)\n nestedCount--;\n else {\n popStateStack(state);\n break;\n }\n }\n else if(ch == \":\" && maybeNested) {\n nestedCount++;\n }\n maybeEnd = (ch == \":\");\n maybeNested = (ch == \"(\");\n }\n\n return \"comment\";\n }\n\n // tokenizer for string literals\n // optionally pass a tokenizer function to set state.tokenize back to when finished\n function tokenString(quote, f) {\n return function(stream, state) {\n var ch;\n\n if(isInString(state) && stream.current() == quote) {\n popStateStack(state);\n if(f) state.tokenize = f;\n return \"string\";\n }\n\n pushStateStack(state, { type: \"string\", name: quote, tokenize: tokenString(quote, f) });\n\n // if we're in a string and in an XML block, allow an embedded code block\n if(stream.match(\"{\", false) && isInXmlAttributeBlock(state)) {\n state.tokenize = tokenBase;\n return \"string\";\n }\n\n\n while (ch = stream.next()) {\n if (ch == quote) {\n popStateStack(state);\n if(f) state.tokenize = f;\n break;\n }\n else {\n // if we're in a string and in an XML block, allow an embedded code block in an attribute\n if(stream.match(\"{\", false) && isInXmlAttributeBlock(state)) {\n state.tokenize = tokenBase;\n return \"string\";\n }\n\n }\n }\n\n return \"string\";\n };\n }\n\n // tokenizer for variables\n function tokenVariable(stream, state) {\n var isVariableChar = /[\\w\\$_-]/;\n\n // a variable may start with a quoted EQName so if the next character is quote, consume to the next quote\n if(stream.eat(\"\\\"\")) {\n while(stream.next() !== '\\\"'){};\n stream.eat(\":\");\n } else {\n stream.eatWhile(isVariableChar);\n if(!stream.match(\":=\", false)) stream.eat(\":\");\n }\n stream.eatWhile(isVariableChar);\n state.tokenize = tokenBase;\n return \"variable\";\n }\n\n // tokenizer for XML tags\n function tokenTag(name, isclose) {\n return function(stream, state) {\n stream.eatSpace();\n if(isclose && stream.eat(\">\")) {\n popStateStack(state);\n state.tokenize = tokenBase;\n return \"tag\";\n }\n // self closing tag without attributes?\n if(!stream.eat(\"/\"))\n pushStateStack(state, { type: \"tag\", name: name, tokenize: tokenBase});\n if(!stream.eat(\">\")) {\n state.tokenize = tokenAttribute;\n return \"tag\";\n }\n else {\n state.tokenize = tokenBase;\n }\n return \"tag\";\n };\n }\n\n // tokenizer for XML attributes\n function tokenAttribute(stream, state) {\n var ch = stream.next();\n\n if(ch == \"/\" && stream.eat(\">\")) {\n if(isInXmlAttributeBlock(state)) popStateStack(state);\n if(isInXmlBlock(state)) popStateStack(state);\n return \"tag\";\n }\n if(ch == \">\") {\n if(isInXmlAttributeBlock(state)) popStateStack(state);\n return \"tag\";\n }\n if(ch == \"=\")\n return null;\n // quoted string\n if (ch == '\"' || ch == \"'\")\n return chain(stream, state, tokenString(ch, tokenAttribute));\n\n if(!isInXmlAttributeBlock(state))\n pushStateStack(state, { type: \"attribute\", tokenize: tokenAttribute});\n\n stream.eat(/[a-zA-Z_:]/);\n stream.eatWhile(/[-a-zA-Z0-9_:.]/);\n stream.eatSpace();\n\n // the case where the attribute has not value and the tag was closed\n if(stream.match(\">\", false) || stream.match(\"/\", false)) {\n popStateStack(state);\n state.tokenize = tokenBase;\n }\n\n return \"attribute\";\n }\n\n // handle comments, including nested\n function tokenXMLComment(stream, state) {\n var ch;\n while (ch = stream.next()) {\n if (ch == \"-\" && stream.match(\"->\", true)) {\n state.tokenize = tokenBase;\n return \"comment\";\n }\n }\n }\n\n\n // handle CDATA\n function tokenCDATA(stream, state) {\n var ch;\n while (ch = stream.next()) {\n if (ch == \"]\" && stream.match(\"]\", true)) {\n state.tokenize = tokenBase;\n return \"comment\";\n }\n }\n }\n\n // handle preprocessing instructions\n function tokenPreProcessing(stream, state) {\n var ch;\n while (ch = stream.next()) {\n if (ch == \"?\" && stream.match(\">\", true)) {\n state.tokenize = tokenBase;\n return \"comment meta\";\n }\n }\n }\n\n\n // functions to test the current context of the state\n function isInXmlBlock(state) { return isIn(state, \"tag\"); }\n function isInXmlAttributeBlock(state) { return isIn(state, \"attribute\"); }\n function isInXmlConstructor(state) { return isIn(state, \"xmlconstructor\"); }\n function isInString(state) { return isIn(state, \"string\"); }\n\n function isEQNameAhead(stream) {\n // assume we've already eaten a quote (\")\n if(stream.current() === '\"')\n return stream.match(/^[^\\\"]+\\\"\\:/, false);\n else if(stream.current() === '\\'')\n return stream.match(/^[^\\\"]+\\'\\:/, false);\n else\n return false;\n }\n\n function isIn(state, type) {\n return (state.stack.length && state.stack[state.stack.length - 1].type == type);\n }\n\n function pushStateStack(state, newState) {\n state.stack.push(newState);\n }\n\n function popStateStack(state) {\n state.stack.pop();\n var reinstateTokenize = state.stack.length && state.stack[state.stack.length-1].tokenize;\n state.tokenize = reinstateTokenize || tokenBase;\n }\n\n // the interface for the mode API\n return {\n startState: function() {\n return {\n tokenize: tokenBase,\n cc: [],\n stack: []\n };\n },\n\n token: function(stream, state) {\n if (stream.eatSpace()) return null;\n var style = state.tokenize(stream, state);\n return style;\n },\n\n blockCommentStart: \"(:\",\n blockCommentEnd: \":)\"\n\n };\n\n});\n\nCodeMirror.defineMIME(\"application/xquery\", \"xquery\");\n\n});\n"]}