1{"version":3,"sources":["../../node_modules/codemirror/mode/dtd/dtd.js"],"names":["mod","exports","module","require","define","amd","CodeMirror","defineMode","config","indentUnit","type","ret","style","tp","tokenBase","stream","state","ch","next","eat","eatWhile","tokenize","tokenSGMLComment","inBlock","match","tokenString","sc","current","substr","length","backUp","dashes","quote","escaped","terminator","eol","startState","base","baseIndent","stack","token","eatSpace","context","push","pop","indent","textAfter","n","electricChars","defineMIME"],"mappings":"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","file":"dtd.min.js","sourcesContent":["// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n/*\n  DTD mode\n  Ported to CodeMirror by Peter Kroon <plakroon@gmail.com>\n  Report bugs/issues here: https://github.com/codemirror/CodeMirror/issues\n  GitHub: @peterkroon\n*/\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(\"dtd\", function(config) {\n  var indentUnit = config.indentUnit, type;\n  function ret(style, tp) {type = tp; return style;}\n\n  function tokenBase(stream, state) {\n    var ch = stream.next();\n\n    if (ch == \"<\" && stream.eat(\"!\") ) {\n      if (stream.eatWhile(/[\\-]/)) {\n        state.tokenize = tokenSGMLComment;\n        return tokenSGMLComment(stream, state);\n      } else if (stream.eatWhile(/[\\w]/)) return ret(\"keyword\", \"doindent\");\n    } else if (ch == \"<\" && stream.eat(\"?\")) { //xml declaration\n      state.tokenize = inBlock(\"meta\", \"?>\");\n      return ret(\"meta\", ch);\n    } else if (ch == \"#\" && stream.eatWhile(/[\\w]/)) return ret(\"atom\", \"tag\");\n    else if (ch == \"|\") return ret(\"keyword\", \"seperator\");\n    else if (ch.match(/[\\(\\)\\[\\]\\-\\.,\\+\\?>]/)) return ret(null, ch);//if(ch === \">\") return ret(null, \"endtag\"); else\n    else if (ch.match(/[\\[\\]]/)) return ret(\"rule\", ch);\n    else if (ch == \"\\\"\" || ch == \"'\") {\n      state.tokenize = tokenString(ch);\n      return state.tokenize(stream, state);\n    } else if (stream.eatWhile(/[a-zA-Z\\?\\+\\d]/)) {\n      var sc = stream.current();\n      if( sc.substr(sc.length-1,sc.length).match(/\\?|\\+/) !== null )stream.backUp(1);\n      return ret(\"tag\", \"tag\");\n    } else if (ch == \"%\" || ch == \"*\" ) return ret(\"number\", \"number\");\n    else {\n      stream.eatWhile(/[\\w\\\\\\-_%.{,]/);\n      return ret(null, null);\n    }\n  }\n\n  function tokenSGMLComment(stream, state) {\n    var dashes = 0, ch;\n    while ((ch = stream.next()) != null) {\n      if (dashes >= 2 && ch == \">\") {\n        state.tokenize = tokenBase;\n        break;\n      }\n      dashes = (ch == \"-\") ? dashes + 1 : 0;\n    }\n    return ret(\"comment\", \"comment\");\n  }\n\n  function tokenString(quote) {\n    return function(stream, state) {\n      var escaped = false, ch;\n      while ((ch = stream.next()) != null) {\n        if (ch == quote && !escaped) {\n          state.tokenize = tokenBase;\n          break;\n        }\n        escaped = !escaped && ch == \"\\\\\";\n      }\n      return ret(\"string\", \"tag\");\n    };\n  }\n\n  function inBlock(style, terminator) {\n    return function(stream, state) {\n      while (!stream.eol()) {\n        if (stream.match(terminator)) {\n          state.tokenize = tokenBase;\n          break;\n        }\n        stream.next();\n      }\n      return style;\n    };\n  }\n\n  return {\n    startState: function(base) {\n      return {tokenize: tokenBase,\n              baseIndent: base || 0,\n              stack: []};\n    },\n\n    token: function(stream, state) {\n      if (stream.eatSpace()) return null;\n      var style = state.tokenize(stream, state);\n\n      var context = state.stack[state.stack.length-1];\n      if (stream.current() == \"[\" || type === \"doindent\" || type == \"[\") state.stack.push(\"rule\");\n      else if (type === \"endtag\") state.stack[state.stack.length-1] = \"endtag\";\n      else if (stream.current() == \"]\" || type == \"]\" || (type == \">\" && context == \"rule\")) state.stack.pop();\n      else if (type == \"[\") state.stack.push(\"[\");\n      return style;\n    },\n\n    indent: function(state, textAfter) {\n      var n = state.stack.length;\n\n      if( textAfter.match(/\\]\\s+|\\]/) )n=n-1;\n      else if(textAfter.substr(textAfter.length-1, textAfter.length) === \">\"){\n        if(textAfter.substr(0,1) === \"<\") {}\n        else if( type == \"doindent\" && textAfter.length > 1 ) {}\n        else if( type == \"doindent\")n--;\n        else if( type == \">\" && textAfter.length > 1) {}\n        else if( type == \"tag\" && textAfter !== \">\") {}\n        else if( type == \"tag\" && state.stack[state.stack.length-1] == \"rule\")n--;\n        else if( type == \"tag\")n++;\n        else if( textAfter === \">\" && state.stack[state.stack.length-1] == \"rule\" && type === \">\")n--;\n        else if( textAfter === \">\" && state.stack[state.stack.length-1] == \"rule\") {}\n        else if( textAfter.substr(0,1) !== \"<\" && textAfter.substr(0,1) === \">\" )n=n-1;\n        else if( textAfter === \">\") {}\n        else n=n-1;\n        //over rule them all\n        if(type == null || type == \"]\")n--;\n      }\n\n      return state.baseIndent + n * indentUnit;\n    },\n\n    electricChars: \"]>\"\n  };\n});\n\nCodeMirror.defineMIME(\"application/xml-dtd\", \"dtd\");\n\n});\n"]}