1{"version":3,"sources":["../../node_modules/codemirror/mode/xml/xml.js"],"names":["mod","exports","module","require","define","amd","CodeMirror","htmlConfig","autoSelfClosers","area","base","br","col","command","embed","frame","hr","img","input","keygen","link","meta","param","source","track","wbr","menuitem","implicitlyClosed","dd","li","optgroup","option","p","rp","rt","tbody","td","tfoot","th","tr","contextGrabbers","dt","address","article","aside","blockquote","dir","div","dl","fieldset","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","menu","nav","ol","pre","section","table","ul","thead","doNotIndent","allowUnquoted","allowMissing","caseFold","xmlConfig","allowMissingTagName","defineMode","editorConf","config_","indentUnit","config","defaults","htmlMode","prop","type","setStyle","inText","stream","state","chain","parser","tokenize","ch","next","eat","match","inBlock","eatWhile","doctype","inTag","ok","isInText","baseState","tagName","tagStart","test","inAttribute","stringStartCol","column","quote","closure","eol","isInAttribute","style","terminator","depth","Context","startOfLine","this","prev","context","indent","indented","hasOwnProperty","noIndent","popContext","maybePopContext","nextTagName","parentTagName","tagNameState","closeTagNameState","current","attrState","matchClosing","closeState","closeStateErr","_stream","attrEqState","attrValueState","attrContinuedState","startState","baseIndent","token","sol","indentation","eatSpace","textAfter","fullLine","Pass","length","multilineTagIndentPastTag","multilineTagIndentFactor","alignCDATA","tagAfter","exec","grabbers","electricInput","blockCommentStart","blockCommentEnd","configuration","helperType","skipAttribute","xmlCurrentTag","name","close","xmlCurrentContext","cx","push","reverse","defineMIME","mimeModes"],"mappings":"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","file":"xml.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\nvar htmlConfig = {\n  autoSelfClosers: {'area': true, 'base': true, 'br': true, 'col': true, 'command': true,\n                    'embed': true, 'frame': true, 'hr': true, 'img': true, 'input': true,\n                    'keygen': true, 'link': true, 'meta': true, 'param': true, 'source': true,\n                    'track': true, 'wbr': true, 'menuitem': true},\n  implicitlyClosed: {'dd': true, 'li': true, 'optgroup': true, 'option': true, 'p': true,\n                     'rp': true, 'rt': true, 'tbody': true, 'td': true, 'tfoot': true,\n                     'th': true, 'tr': true},\n  contextGrabbers: {\n    'dd': {'dd': true, 'dt': true},\n    'dt': {'dd': true, 'dt': true},\n    'li': {'li': true},\n    'option': {'option': true, 'optgroup': true},\n    'optgroup': {'optgroup': true},\n    'p': {'address': true, 'article': true, 'aside': true, 'blockquote': true, 'dir': true,\n          'div': true, 'dl': true, 'fieldset': true, 'footer': true, 'form': true,\n          'h1': true, 'h2': true, 'h3': true, 'h4': true, 'h5': true, 'h6': true,\n          'header': true, 'hgroup': true, 'hr': true, 'menu': true, 'nav': true, 'ol': true,\n          'p': true, 'pre': true, 'section': true, 'table': true, 'ul': true},\n    'rp': {'rp': true, 'rt': true},\n    'rt': {'rp': true, 'rt': true},\n    'tbody': {'tbody': true, 'tfoot': true},\n    'td': {'td': true, 'th': true},\n    'tfoot': {'tbody': true},\n    'th': {'td': true, 'th': true},\n    'thead': {'tbody': true, 'tfoot': true},\n    'tr': {'tr': true}\n  },\n  doNotIndent: {\"pre\": true},\n  allowUnquoted: true,\n  allowMissing: true,\n  caseFold: true\n}\n\nvar xmlConfig = {\n  autoSelfClosers: {},\n  implicitlyClosed: {},\n  contextGrabbers: {},\n  doNotIndent: {},\n  allowUnquoted: false,\n  allowMissing: false,\n  allowMissingTagName: false,\n  caseFold: false\n}\n\nCodeMirror.defineMode(\"xml\", function(editorConf, config_) {\n  var indentUnit = editorConf.indentUnit\n  var config = {}\n  var defaults = config_.htmlMode ? htmlConfig : xmlConfig\n  for (var prop in defaults) config[prop] = defaults[prop]\n  for (var prop in config_) config[prop] = config_[prop]\n\n  // Return variables for tokenizers\n  var type, setStyle;\n\n  function inText(stream, state) {\n    function chain(parser) {\n      state.tokenize = parser;\n      return parser(stream, state);\n    }\n\n    var ch = stream.next();\n    if (ch == \"<\") {\n      if (stream.eat(\"!\")) {\n        if (stream.eat(\"[\")) {\n          if (stream.match(\"CDATA[\")) return chain(inBlock(\"atom\", \"]]>\"));\n          else return null;\n        } else if (stream.match(\"--\")) {\n          return chain(inBlock(\"comment\", \"-->\"));\n        } else if (stream.match(\"DOCTYPE\", true, true)) {\n          stream.eatWhile(/[\\w\\._\\-]/);\n          return chain(doctype(1));\n        } else {\n          return null;\n        }\n      } else if (stream.eat(\"?\")) {\n        stream.eatWhile(/[\\w\\._\\-]/);\n        state.tokenize = inBlock(\"meta\", \"?>\");\n        return \"meta\";\n      } else {\n        type = stream.eat(\"/\") ? \"closeTag\" : \"openTag\";\n        state.tokenize = inTag;\n        return \"tag bracket\";\n      }\n    } else if (ch == \"&\") {\n      var ok;\n      if (stream.eat(\"#\")) {\n        if (stream.eat(\"x\")) {\n          ok = stream.eatWhile(/[a-fA-F\\d]/) && stream.eat(\";\");\n        } else {\n          ok = stream.eatWhile(/[\\d]/) && stream.eat(\";\");\n        }\n      } else {\n        ok = stream.eatWhile(/[\\w\\.\\-:]/) && stream.eat(\";\");\n      }\n      return ok ? \"atom\" : \"error\";\n    } else {\n      stream.eatWhile(/[^&<]/);\n      return null;\n    }\n  }\n  inText.isInText = true;\n\n  function inTag(stream, state) {\n    var ch = stream.next();\n    if (ch == \">\" || (ch == \"/\" && stream.eat(\">\"))) {\n      state.tokenize = inText;\n      type = ch == \">\" ? \"endTag\" : \"selfcloseTag\";\n      return \"tag bracket\";\n    } else if (ch == \"=\") {\n      type = \"equals\";\n      return null;\n    } else if (ch == \"<\") {\n      state.tokenize = inText;\n      state.state = baseState;\n      state.tagName = state.tagStart = null;\n      var next = state.tokenize(stream, state);\n      return next ? next + \" tag error\" : \"tag error\";\n    } else if (/[\\'\\\"]/.test(ch)) {\n      state.tokenize = inAttribute(ch);\n      state.stringStartCol = stream.column();\n      return state.tokenize(stream, state);\n    } else {\n      stream.match(/^[^\\s\\u00a0=<>\\\"\\']*[^\\s\\u00a0=<>\\\"\\'\\/]/);\n      return \"word\";\n    }\n  }\n\n  function inAttribute(quote) {\n    var closure = function(stream, state) {\n      while (!stream.eol()) {\n        if (stream.next() == quote) {\n          state.tokenize = inTag;\n          break;\n        }\n      }\n      return \"string\";\n    };\n    closure.isInAttribute = true;\n    return closure;\n  }\n\n  function inBlock(style, terminator) {\n    return function(stream, state) {\n      while (!stream.eol()) {\n        if (stream.match(terminator)) {\n          state.tokenize = inText;\n          break;\n        }\n        stream.next();\n      }\n      return style;\n    }\n  }\n\n  function doctype(depth) {\n    return function(stream, state) {\n      var ch;\n      while ((ch = stream.next()) != null) {\n        if (ch == \"<\") {\n          state.tokenize = doctype(depth + 1);\n          return state.tokenize(stream, state);\n        } else if (ch == \">\") {\n          if (depth == 1) {\n            state.tokenize = inText;\n            break;\n          } else {\n            state.tokenize = doctype(depth - 1);\n            return state.tokenize(stream, state);\n          }\n        }\n      }\n      return \"meta\";\n    };\n  }\n\n  function Context(state, tagName, startOfLine) {\n    this.prev = state.context;\n    this.tagName = tagName;\n    this.indent = state.indented;\n    this.startOfLine = startOfLine;\n    if (config.doNotIndent.hasOwnProperty(tagName) || (state.context && state.context.noIndent))\n      this.noIndent = true;\n  }\n  function popContext(state) {\n    if (state.context) state.context = state.context.prev;\n  }\n  function maybePopContext(state, nextTagName) {\n    var parentTagName;\n    while (true) {\n      if (!state.context) {\n        return;\n      }\n      parentTagName = state.context.tagName;\n      if (!config.contextGrabbers.hasOwnProperty(parentTagName) ||\n          !config.contextGrabbers[parentTagName].hasOwnProperty(nextTagName)) {\n        return;\n      }\n      popContext(state);\n    }\n  }\n\n  function baseState(type, stream, state) {\n    if (type == \"openTag\") {\n      state.tagStart = stream.column();\n      return tagNameState;\n    } else if (type == \"closeTag\") {\n      return closeTagNameState;\n    } else {\n      return baseState;\n    }\n  }\n  function tagNameState(type, stream, state) {\n    if (type == \"word\") {\n      state.tagName = stream.current();\n      setStyle = \"tag\";\n      return attrState;\n    } else if (config.allowMissingTagName && type == \"endTag\") {\n      setStyle = \"tag bracket\";\n      return attrState(type, stream, state);\n    } else {\n      setStyle = \"error\";\n      return tagNameState;\n    }\n  }\n  function closeTagNameState(type, stream, state) {\n    if (type == \"word\") {\n      var tagName = stream.current();\n      if (state.context && state.context.tagName != tagName &&\n          config.implicitlyClosed.hasOwnProperty(state.context.tagName))\n        popContext(state);\n      if ((state.context && state.context.tagName == tagName) || config.matchClosing === false) {\n        setStyle = \"tag\";\n        return closeState;\n      } else {\n        setStyle = \"tag error\";\n        return closeStateErr;\n      }\n    } else if (config.allowMissingTagName && type == \"endTag\") {\n      setStyle = \"tag bracket\";\n      return closeState(type, stream, state);\n    } else {\n      setStyle = \"error\";\n      return closeStateErr;\n    }\n  }\n\n  function closeState(type, _stream, state) {\n    if (type != \"endTag\") {\n      setStyle = \"error\";\n      return closeState;\n    }\n    popContext(state);\n    return baseState;\n  }\n  function closeStateErr(type, stream, state) {\n    setStyle = \"error\";\n    return closeState(type, stream, state);\n  }\n\n  function attrState(type, _stream, state) {\n    if (type == \"word\") {\n      setStyle = \"attribute\";\n      return attrEqState;\n    } else if (type == \"endTag\" || type == \"selfcloseTag\") {\n      var tagName = state.tagName, tagStart = state.tagStart;\n      state.tagName = state.tagStart = null;\n      if (type == \"selfcloseTag\" ||\n          config.autoSelfClosers.hasOwnProperty(tagName)) {\n        maybePopContext(state, tagName);\n      } else {\n        maybePopContext(state, tagName);\n        state.context = new Context(state, tagName, tagStart == state.indented);\n      }\n      return baseState;\n    }\n    setStyle = \"error\";\n    return attrState;\n  }\n  function attrEqState(type, stream, state) {\n    if (type == \"equals\") return attrValueState;\n    if (!config.allowMissing) setStyle = \"error\";\n    return attrState(type, stream, state);\n  }\n  function attrValueState(type, stream, state) {\n    if (type == \"string\") return attrContinuedState;\n    if (type == \"word\" && config.allowUnquoted) {setStyle = \"string\"; return attrState;}\n    setStyle = \"error\";\n    return attrState(type, stream, state);\n  }\n  function attrContinuedState(type, stream, state) {\n    if (type == \"string\") return attrContinuedState;\n    return attrState(type, stream, state);\n  }\n\n  return {\n    startState: function(baseIndent) {\n      var state = {tokenize: inText,\n                   state: baseState,\n                   indented: baseIndent || 0,\n                   tagName: null, tagStart: null,\n                   context: null}\n      if (baseIndent != null) state.baseIndent = baseIndent\n      return state\n    },\n\n    token: function(stream, state) {\n      if (!state.tagName && stream.sol())\n        state.indented = stream.indentation();\n\n      if (stream.eatSpace()) return null;\n      type = null;\n      var style = state.tokenize(stream, state);\n      if ((style || type) && style != \"comment\") {\n        setStyle = null;\n        state.state = state.state(type || style, stream, state);\n        if (setStyle)\n          style = setStyle == \"error\" ? style + \" error\" : setStyle;\n      }\n      return style;\n    },\n\n    indent: function(state, textAfter, fullLine) {\n      var context = state.context;\n      // Indent multi-line strings (e.g. css).\n      if (state.tokenize.isInAttribute) {\n        if (state.tagStart == state.indented)\n          return state.stringStartCol + 1;\n        else\n          return state.indented + indentUnit;\n      }\n      if (context && context.noIndent) return CodeMirror.Pass;\n      if (state.tokenize != inTag && state.tokenize != inText)\n        return fullLine ? fullLine.match(/^(\\s*)/)[0].length : 0;\n      // Indent the starts of attribute names.\n      if (state.tagName) {\n        if (config.multilineTagIndentPastTag !== false)\n          return state.tagStart + state.tagName.length + 2;\n        else\n          return state.tagStart + indentUnit * (config.multilineTagIndentFactor || 1);\n      }\n      if (config.alignCDATA && /<!\\[CDATA\\[/.test(textAfter)) return 0;\n      var tagAfter = textAfter && /^<(\\/)?([\\w_:\\.-]*)/.exec(textAfter);\n      if (tagAfter && tagAfter[1]) { // Closing tag spotted\n        while (context) {\n          if (context.tagName == tagAfter[2]) {\n            context = context.prev;\n            break;\n          } else if (config.implicitlyClosed.hasOwnProperty(context.tagName)) {\n            context = context.prev;\n          } else {\n            break;\n          }\n        }\n      } else if (tagAfter) { // Opening tag spotted\n        while (context) {\n          var grabbers = config.contextGrabbers[context.tagName];\n          if (grabbers && grabbers.hasOwnProperty(tagAfter[2]))\n            context = context.prev;\n          else\n            break;\n        }\n      }\n      while (context && context.prev && !context.startOfLine)\n        context = context.prev;\n      if (context) return context.indent + indentUnit;\n      else return state.baseIndent || 0;\n    },\n\n    electricInput: /<\\/[\\s\\w:]+>$/,\n    blockCommentStart: \"<!--\",\n    blockCommentEnd: \"-->\",\n\n    configuration: config.htmlMode ? \"html\" : \"xml\",\n    helperType: config.htmlMode ? \"html\" : \"xml\",\n\n    skipAttribute: function(state) {\n      if (state.state == attrValueState)\n        state.state = attrState\n    },\n\n    xmlCurrentTag: function(state) {\n      return state.tagName ? {name: state.tagName, close: state.type == \"closeTag\"} : null\n    },\n\n    xmlCurrentContext: function(state) {\n      var context = []\n      for (var cx = state.context; cx; cx = cx.prev)\n        if (cx.tagName) context.push(cx.tagName)\n      return context.reverse()\n    }\n  };\n});\n\nCodeMirror.defineMIME(\"text/xml\", \"xml\");\nCodeMirror.defineMIME(\"application/xml\", \"xml\");\nif (!CodeMirror.mimeModes.hasOwnProperty(\"text/html\"))\n  CodeMirror.defineMIME(\"text/html\", {name: \"xml\", htmlMode: true});\n\n});\n"]}