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