{"version":3,"sources":["jsdelivr-header.js","/wp/plugins/form-maker/trunk/js/layout/xml.js"],"names":[],"mappings":"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","file":"/wp/plugins/form-maker/trunk/js/layout/xml.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /wp/plugins/form-maker/trunk/js/layout/xml.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","// 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 lower(tagName) {\n    return tagName && tagName.toLowerCase();\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(lower(parentTagName)) ||\n          !config.contextGrabbers[lower(parentTagName)].hasOwnProperty(lower(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(lower(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(lower(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(lower(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[lower(context.tagName)];\n          if (grabbers && grabbers.hasOwnProperty(lower(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        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"]}