1{"version":3,"sources":["../../node_modules/codemirror/mode/markdown/markdown.js"],"names":["mod","exports","module","require","define","amd","CodeMirror","defineMode","cmCfg","modeCfg","htmlMode","getMode","htmlModeMissing","name","findModeByName","found","mime","mimes","mode","highlightFormatting","undefined","maxBlockquoteDepth","taskLists","strikethrough","emoji","fencedCodeBlockHighlighting","fencedCodeBlockDefaultMode","xml","tokenTypeOverrides","tokenTypes","header","code","quote","list1","list2","list3","hr","image","imageAltText","imageMarker","formatting","linkInline","linkEmail","linkText","linkHref","em","strong","tokenType","hasOwnProperty","hrRE","listRE","taskListRE","atxHeaderRE","allowAtxHeaderWithoutSpace","setextHeaderRE","textRE","fencedCodeRE","linkDefRE","punctuation","expandedTab","switchInline","stream","state","f","inline","switchBlock","block","lineIsEmpty","line","test","string","blankLine","linkTitle","indentedCode","htmlBlock","exit","inner","innerMode","htmlState","tagStart","context","tokenize","isInText","inlineNormal","blockNormal","trailingSpace","trailingSpaceNewLine","prevLine","thisLine","firstTokenOnLine","column","indentation","prevLineLineIsEmpty","prevLineIsIndentedCode","prevLineIsHr","prevLineIsList","list","maxNonCodeIndentation","listStack","length","lineIndentation","indentationDiff","pop","allowsInlineContinuation","fencedCodeEnd","isHr","match","skipToEnd","eatSpace","getType","eat","setext","listType","current","push","taskList","fencedEndRE","RegExp","localMode","localState","startState","local","lookAhead","charAt","peek","footnoteLink","style","token","md_inside","indexOf","currListInd","hasExitedList","maxFencedEndInd","returnType","styles","i","taskOpen","join","taskClosed","listMod","handleText","text","ch","next","matchCh","replace","regex","previousFormatting","eatWhile","count","t","type","formattingEscape","end","pos","atts","substring","start","backUp","len","before","after","leftFlanking","rightFlanking","setEm","setStrong","retType","getLinkHrefInside","linkRE",")","]","endChar","returnState","footnoteLinkInside","footnoteUrl","copyState","s","slice","indent","textAfter","Pass","blockCommentStart","blockCommentEnd","closeBrackets","fold","defineMIME"],"mappings":"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","file":"markdown.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\"), require(\"../xml/xml\"), require(\"../meta\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../../lib/codemirror\", \"../xml/xml\", \"../meta\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n\"use strict\";\n\nCodeMirror.defineMode(\"markdown\", function(cmCfg, modeCfg) {\n\n  var htmlMode = CodeMirror.getMode(cmCfg, \"text/html\");\n  var htmlModeMissing = htmlMode.name == \"null\"\n\n  function getMode(name) {\n    if (CodeMirror.findModeByName) {\n      var found = CodeMirror.findModeByName(name);\n      if (found) name = found.mime || found.mimes[0];\n    }\n    var mode = CodeMirror.getMode(cmCfg, name);\n    return mode.name == \"null\" ? null : mode;\n  }\n\n  // Should characters that affect highlighting be highlighted separate?\n  // Does not include characters that will be output (such as `1.` and `-` for lists)\n  if (modeCfg.highlightFormatting === undefined)\n    modeCfg.highlightFormatting = false;\n\n  // Maximum number of nested blockquotes. Set to 0 for infinite nesting.\n  // Excess `>` will emit `error` token.\n  if (modeCfg.maxBlockquoteDepth === undefined)\n    modeCfg.maxBlockquoteDepth = 0;\n\n  // Turn on task lists? (\"- [ ] \" and \"- [x] \")\n  if (modeCfg.taskLists === undefined) modeCfg.taskLists = false;\n\n  // Turn on strikethrough syntax\n  if (modeCfg.strikethrough === undefined)\n    modeCfg.strikethrough = false;\n\n  if (modeCfg.emoji === undefined)\n    modeCfg.emoji = false;\n\n  if (modeCfg.fencedCodeBlockHighlighting === undefined)\n    modeCfg.fencedCodeBlockHighlighting = true;\n\n  if (modeCfg.fencedCodeBlockDefaultMode === undefined)\n    modeCfg.fencedCodeBlockDefaultMode = 'text/plain';\n\n  if (modeCfg.xml === undefined)\n    modeCfg.xml = true;\n\n  // Allow token types to be overridden by user-provided token types.\n  if (modeCfg.tokenTypeOverrides === undefined)\n    modeCfg.tokenTypeOverrides = {};\n\n  var tokenTypes = {\n    header: \"header\",\n    code: \"comment\",\n    quote: \"quote\",\n    list1: \"variable-2\",\n    list2: \"variable-3\",\n    list3: \"keyword\",\n    hr: \"hr\",\n    image: \"image\",\n    imageAltText: \"image-alt-text\",\n    imageMarker: \"image-marker\",\n    formatting: \"formatting\",\n    linkInline: \"link\",\n    linkEmail: \"link\",\n    linkText: \"link\",\n    linkHref: \"string\",\n    em: \"em\",\n    strong: \"strong\",\n    strikethrough: \"strikethrough\",\n    emoji: \"builtin\"\n  };\n\n  for (var tokenType in tokenTypes) {\n    if (tokenTypes.hasOwnProperty(tokenType) && modeCfg.tokenTypeOverrides[tokenType]) {\n      tokenTypes[tokenType] = modeCfg.tokenTypeOverrides[tokenType];\n    }\n  }\n\n  var hrRE = /^([*\\-_])(?:\\s*\\1){2,}\\s*$/\n  ,   listRE = /^(?:[*\\-+]|^[0-9]+([.)]))\\s+/\n  ,   taskListRE = /^\\[(x| )\\](?=\\s)/i // Must follow listRE\n  ,   atxHeaderRE = modeCfg.allowAtxHeaderWithoutSpace ? /^(#+)/ : /^(#+)(?: |$)/\n  ,   setextHeaderRE = /^ {0,3}(?:\\={1,}|-{2,})\\s*$/\n  ,   textRE = /^[^#!\\[\\]*_\\\\<>` \"'(~:]+/\n  ,   fencedCodeRE = /^(~~~+|```+)[ \\t]*([\\w\\/+#-]*)[^\\n`]*$/\n  ,   linkDefRE = /^\\s*\\[[^\\]]+?\\]:.*$/ // naive link-definition\n  ,   punctuation = /[!\"#$%&'()*+,\\-.\\/:;<=>?@\\[\\\\\\]^_`{|}~\\xA1\\xA7\\xAB\\xB6\\xB7\\xBB\\xBF\\u037E\\u0387\\u055A-\\u055F\\u0589\\u058A\\u05BE\\u05C0\\u05C3\\u05C6\\u05F3\\u05F4\\u0609\\u060A\\u060C\\u060D\\u061B\\u061E\\u061F\\u066A-\\u066D\\u06D4\\u0700-\\u070D\\u07F7-\\u07F9\\u0830-\\u083E\\u085E\\u0964\\u0965\\u0970\\u0AF0\\u0DF4\\u0E4F\\u0E5A\\u0E5B\\u0F04-\\u0F12\\u0F14\\u0F3A-\\u0F3D\\u0F85\\u0FD0-\\u0FD4\\u0FD9\\u0FDA\\u104A-\\u104F\\u10FB\\u1360-\\u1368\\u1400\\u166D\\u166E\\u169B\\u169C\\u16EB-\\u16ED\\u1735\\u1736\\u17D4-\\u17D6\\u17D8-\\u17DA\\u1800-\\u180A\\u1944\\u1945\\u1A1E\\u1A1F\\u1AA0-\\u1AA6\\u1AA8-\\u1AAD\\u1B5A-\\u1B60\\u1BFC-\\u1BFF\\u1C3B-\\u1C3F\\u1C7E\\u1C7F\\u1CC0-\\u1CC7\\u1CD3\\u2010-\\u2027\\u2030-\\u2043\\u2045-\\u2051\\u2053-\\u205E\\u207D\\u207E\\u208D\\u208E\\u2308-\\u230B\\u2329\\u232A\\u2768-\\u2775\\u27C5\\u27C6\\u27E6-\\u27EF\\u2983-\\u2998\\u29D8-\\u29DB\\u29FC\\u29FD\\u2CF9-\\u2CFC\\u2CFE\\u2CFF\\u2D70\\u2E00-\\u2E2E\\u2E30-\\u2E42\\u3001-\\u3003\\u3008-\\u3011\\u3014-\\u301F\\u3030\\u303D\\u30A0\\u30FB\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA673\\uA67E\\uA6F2-\\uA6F7\\uA874-\\uA877\\uA8CE\\uA8CF\\uA8F8-\\uA8FA\\uA8FC\\uA92E\\uA92F\\uA95F\\uA9C1-\\uA9CD\\uA9DE\\uA9DF\\uAA5C-\\uAA5F\\uAADE\\uAADF\\uAAF0\\uAAF1\\uABEB\\uFD3E\\uFD3F\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE61\\uFE63\\uFE68\\uFE6A\\uFE6B\\uFF01-\\uFF03\\uFF05-\\uFF0A\\uFF0C-\\uFF0F\\uFF1A\\uFF1B\\uFF1F\\uFF20\\uFF3B-\\uFF3D\\uFF3F\\uFF5B\\uFF5D\\uFF5F-\\uFF65]|\\uD800[\\uDD00-\\uDD02\\uDF9F\\uDFD0]|\\uD801\\uDD6F|\\uD802[\\uDC57\\uDD1F\\uDD3F\\uDE50-\\uDE58\\uDE7F\\uDEF0-\\uDEF6\\uDF39-\\uDF3F\\uDF99-\\uDF9C]|\\uD804[\\uDC47-\\uDC4D\\uDCBB\\uDCBC\\uDCBE-\\uDCC1\\uDD40-\\uDD43\\uDD74\\uDD75\\uDDC5-\\uDDC9\\uDDCD\\uDDDB\\uDDDD-\\uDDDF\\uDE38-\\uDE3D\\uDEA9]|\\uD805[\\uDCC6\\uDDC1-\\uDDD7\\uDE41-\\uDE43\\uDF3C-\\uDF3E]|\\uD809[\\uDC70-\\uDC74]|\\uD81A[\\uDE6E\\uDE6F\\uDEF5\\uDF37-\\uDF3B\\uDF44]|\\uD82F\\uDC9F|\\uD836[\\uDE87-\\uDE8B]/\n  ,   expandedTab = \"    \" // CommonMark specifies tab as 4 spaces\n\n  function switchInline(stream, state, f) {\n    state.f = state.inline = f;\n    return f(stream, state);\n  }\n\n  function switchBlock(stream, state, f) {\n    state.f = state.block = f;\n    return f(stream, state);\n  }\n\n  function lineIsEmpty(line) {\n    return !line || !/\\S/.test(line.string)\n  }\n\n  // Blocks\n\n  function blankLine(state) {\n    // Reset linkTitle state\n    state.linkTitle = false;\n    state.linkHref = false;\n    state.linkText = false;\n    // Reset EM state\n    state.em = false;\n    // Reset STRONG state\n    state.strong = false;\n    // Reset strikethrough state\n    state.strikethrough = false;\n    // Reset state.quote\n    state.quote = 0;\n    // Reset state.indentedCode\n    state.indentedCode = false;\n    if (state.f == htmlBlock) {\n      var exit = htmlModeMissing\n      if (!exit) {\n        var inner = CodeMirror.innerMode(htmlMode, state.htmlState)\n        exit = inner.mode.name == \"xml\" && inner.state.tagStart === null &&\n          (!inner.state.context && inner.state.tokenize.isInText)\n      }\n      if (exit) {\n        state.f = inlineNormal;\n        state.block = blockNormal;\n        state.htmlState = null;\n      }\n    }\n    // Reset state.trailingSpace\n    state.trailingSpace = 0;\n    state.trailingSpaceNewLine = false;\n    // Mark this line as blank\n    state.prevLine = state.thisLine\n    state.thisLine = {stream: null}\n    return null;\n  }\n\n  function blockNormal(stream, state) {\n    var firstTokenOnLine = stream.column() === state.indentation;\n    var prevLineLineIsEmpty = lineIsEmpty(state.prevLine.stream);\n    var prevLineIsIndentedCode = state.indentedCode;\n    var prevLineIsHr = state.prevLine.hr;\n    var prevLineIsList = state.list !== false;\n    var maxNonCodeIndentation = (state.listStack[state.listStack.length - 1] || 0) + 3;\n\n    state.indentedCode = false;\n\n    var lineIndentation = state.indentation;\n    // compute once per line (on first token)\n    if (state.indentationDiff === null) {\n      state.indentationDiff = state.indentation;\n      if (prevLineIsList) {\n        state.list = null;\n        // While this list item's marker's indentation is less than the deepest\n        //  list item's content's indentation,pop the deepest list item\n        //  indentation off the stack, and update block indentation state\n        while (lineIndentation < state.listStack[state.listStack.length - 1]) {\n          state.listStack.pop();\n          if (state.listStack.length) {\n            state.indentation = state.listStack[state.listStack.length - 1];\n          // less than the first list's indent -> the line is no longer a list\n          } else {\n            state.list = false;\n          }\n        }\n        if (state.list !== false) {\n          state.indentationDiff = lineIndentation - state.listStack[state.listStack.length - 1]\n        }\n      }\n    }\n\n    // not comprehensive (currently only for setext detection purposes)\n    var allowsInlineContinuation = (\n        !prevLineLineIsEmpty && !prevLineIsHr && !state.prevLine.header &&\n        (!prevLineIsList || !prevLineIsIndentedCode) &&\n        !state.prevLine.fencedCodeEnd\n    );\n\n    var isHr = (state.list === false || prevLineIsHr || prevLineLineIsEmpty) &&\n      state.indentation <= maxNonCodeIndentation && stream.match(hrRE);\n\n    var match = null;\n    if (state.indentationDiff >= 4 && (prevLineIsIndentedCode || state.prevLine.fencedCodeEnd ||\n         state.prevLine.header || prevLineLineIsEmpty)) {\n      stream.skipToEnd();\n      state.indentedCode = true;\n      return tokenTypes.code;\n    } else if (stream.eatSpace()) {\n      return null;\n    } else if (firstTokenOnLine && state.indentation <= maxNonCodeIndentation && (match = stream.match(atxHeaderRE)) && match[1].length <= 6) {\n      state.quote = 0;\n      state.header = match[1].length;\n      state.thisLine.header = true;\n      if (modeCfg.highlightFormatting) state.formatting = \"header\";\n      state.f = state.inline;\n      return getType(state);\n    } else if (state.indentation <= maxNonCodeIndentation && stream.eat('>')) {\n      state.quote = firstTokenOnLine ? 1 : state.quote + 1;\n      if (modeCfg.highlightFormatting) state.formatting = \"quote\";\n      stream.eatSpace();\n      return getType(state);\n    } else if (!isHr && !state.setext && firstTokenOnLine && state.indentation <= maxNonCodeIndentation && (match = stream.match(listRE))) {\n      var listType = match[1] ? \"ol\" : \"ul\";\n\n      state.indentation = lineIndentation + stream.current().length;\n      state.list = true;\n      state.quote = 0;\n\n      // Add this list item's content's indentation to the stack\n      state.listStack.push(state.indentation);\n      // Reset inline styles which shouldn't propagate aross list items\n      state.em = false;\n      state.strong = false;\n      state.code = false;\n      state.strikethrough = false;\n\n      if (modeCfg.taskLists && stream.match(taskListRE, false)) {\n        state.taskList = true;\n      }\n      state.f = state.inline;\n      if (modeCfg.highlightFormatting) state.formatting = [\"list\", \"list-\" + listType];\n      return getType(state);\n    } else if (firstTokenOnLine && state.indentation <= maxNonCodeIndentation && (match = stream.match(fencedCodeRE, true))) {\n      state.quote = 0;\n      state.fencedEndRE = new RegExp(match[1] + \"+ *$\");\n      // try switching mode\n      state.localMode = modeCfg.fencedCodeBlockHighlighting && getMode(match[2] || modeCfg.fencedCodeBlockDefaultMode );\n      if (state.localMode) state.localState = CodeMirror.startState(state.localMode);\n      state.f = state.block = local;\n      if (modeCfg.highlightFormatting) state.formatting = \"code-block\";\n      state.code = -1\n      return getType(state);\n    // SETEXT has lowest block-scope precedence after HR, so check it after\n    //  the others (code, blockquote, list...)\n    } else if (\n      // if setext set, indicates line after ---/===\n      state.setext || (\n        // line before ---/===\n        (!allowsInlineContinuation || !prevLineIsList) && !state.quote && state.list === false &&\n        !state.code && !isHr && !linkDefRE.test(stream.string) &&\n        (match = stream.lookAhead(1)) && (match = match.match(setextHeaderRE))\n      )\n    ) {\n      if ( !state.setext ) {\n        state.header = match[0].charAt(0) == '=' ? 1 : 2;\n        state.setext = state.header;\n      } else {\n        state.header = state.setext;\n        // has no effect on type so we can reset it now\n        state.setext = 0;\n        stream.skipToEnd();\n        if (modeCfg.highlightFormatting) state.formatting = \"header\";\n      }\n      state.thisLine.header = true;\n      state.f = state.inline;\n      return getType(state);\n    } else if (isHr) {\n      stream.skipToEnd();\n      state.hr = true;\n      state.thisLine.hr = true;\n      return tokenTypes.hr;\n    } else if (stream.peek() === '[') {\n      return switchInline(stream, state, footnoteLink);\n    }\n\n    return switchInline(stream, state, state.inline);\n  }\n\n  function htmlBlock(stream, state) {\n    var style = htmlMode.token(stream, state.htmlState);\n    if (!htmlModeMissing) {\n      var inner = CodeMirror.innerMode(htmlMode, state.htmlState)\n      if ((inner.mode.name == \"xml\" && inner.state.tagStart === null &&\n           (!inner.state.context && inner.state.tokenize.isInText)) ||\n          (state.md_inside && stream.current().indexOf(\">\") > -1)) {\n        state.f = inlineNormal;\n        state.block = blockNormal;\n        state.htmlState = null;\n      }\n    }\n    return style;\n  }\n\n  function local(stream, state) {\n    var currListInd = state.listStack[state.listStack.length - 1] || 0;\n    var hasExitedList = state.indentation < currListInd;\n    var maxFencedEndInd = currListInd + 3;\n    if (state.fencedEndRE && state.indentation <= maxFencedEndInd && (hasExitedList || stream.match(state.fencedEndRE))) {\n      if (modeCfg.highlightFormatting) state.formatting = \"code-block\";\n      var returnType;\n      if (!hasExitedList) returnType = getType(state)\n      state.localMode = state.localState = null;\n      state.block = blockNormal;\n      state.f = inlineNormal;\n      state.fencedEndRE = null;\n      state.code = 0\n      state.thisLine.fencedCodeEnd = true;\n      if (hasExitedList) return switchBlock(stream, state, state.block);\n      return returnType;\n    } else if (state.localMode) {\n      return state.localMode.token(stream, state.localState);\n    } else {\n      stream.skipToEnd();\n      return tokenTypes.code;\n    }\n  }\n\n  // Inline\n  function getType(state) {\n    var styles = [];\n\n    if (state.formatting) {\n      styles.push(tokenTypes.formatting);\n\n      if (typeof state.formatting === \"string\") state.formatting = [state.formatting];\n\n      for (var i = 0; i < state.formatting.length; i++) {\n        styles.push(tokenTypes.formatting + \"-\" + state.formatting[i]);\n\n        if (state.formatting[i] === \"header\") {\n          styles.push(tokenTypes.formatting + \"-\" + state.formatting[i] + \"-\" + state.header);\n        }\n\n        // Add `formatting-quote` and `formatting-quote-#` for blockquotes\n        // Add `error` instead if the maximum blockquote nesting depth is passed\n        if (state.formatting[i] === \"quote\") {\n          if (!modeCfg.maxBlockquoteDepth || modeCfg.maxBlockquoteDepth >= state.quote) {\n            styles.push(tokenTypes.formatting + \"-\" + state.formatting[i] + \"-\" + state.quote);\n          } else {\n            styles.push(\"error\");\n          }\n        }\n      }\n    }\n\n    if (state.taskOpen) {\n      styles.push(\"meta\");\n      return styles.length ? styles.join(' ') : null;\n    }\n    if (state.taskClosed) {\n      styles.push(\"property\");\n      return styles.length ? styles.join(' ') : null;\n    }\n\n    if (state.linkHref) {\n      styles.push(tokenTypes.linkHref, \"url\");\n    } else { // Only apply inline styles to non-url text\n      if (state.strong) { styles.push(tokenTypes.strong); }\n      if (state.em) { styles.push(tokenTypes.em); }\n      if (state.strikethrough) { styles.push(tokenTypes.strikethrough); }\n      if (state.emoji) { styles.push(tokenTypes.emoji); }\n      if (state.linkText) { styles.push(tokenTypes.linkText); }\n      if (state.code) { styles.push(tokenTypes.code); }\n      if (state.image) { styles.push(tokenTypes.image); }\n      if (state.imageAltText) { styles.push(tokenTypes.imageAltText, \"link\"); }\n      if (state.imageMarker) { styles.push(tokenTypes.imageMarker); }\n    }\n\n    if (state.header) { styles.push(tokenTypes.header, tokenTypes.header + \"-\" + state.header); }\n\n    if (state.quote) {\n      styles.push(tokenTypes.quote);\n\n      // Add `quote-#` where the maximum for `#` is modeCfg.maxBlockquoteDepth\n      if (!modeCfg.maxBlockquoteDepth || modeCfg.maxBlockquoteDepth >= state.quote) {\n        styles.push(tokenTypes.quote + \"-\" + state.quote);\n      } else {\n        styles.push(tokenTypes.quote + \"-\" + modeCfg.maxBlockquoteDepth);\n      }\n    }\n\n    if (state.list !== false) {\n      var listMod = (state.listStack.length - 1) % 3;\n      if (!listMod) {\n        styles.push(tokenTypes.list1);\n      } else if (listMod === 1) {\n        styles.push(tokenTypes.list2);\n      } else {\n        styles.push(tokenTypes.list3);\n      }\n    }\n\n    if (state.trailingSpaceNewLine) {\n      styles.push(\"trailing-space-new-line\");\n    } else if (state.trailingSpace) {\n      styles.push(\"trailing-space-\" + (state.trailingSpace % 2 ? \"a\" : \"b\"));\n    }\n\n    return styles.length ? styles.join(' ') : null;\n  }\n\n  function handleText(stream, state) {\n    if (stream.match(textRE, true)) {\n      return getType(state);\n    }\n    return undefined;\n  }\n\n  function inlineNormal(stream, state) {\n    var style = state.text(stream, state);\n    if (typeof style !== 'undefined')\n      return style;\n\n    if (state.list) { // List marker (*, +, -, 1., etc)\n      state.list = null;\n      return getType(state);\n    }\n\n    if (state.taskList) {\n      var taskOpen = stream.match(taskListRE, true)[1] === \" \";\n      if (taskOpen) state.taskOpen = true;\n      else state.taskClosed = true;\n      if (modeCfg.highlightFormatting) state.formatting = \"task\";\n      state.taskList = false;\n      return getType(state);\n    }\n\n    state.taskOpen = false;\n    state.taskClosed = false;\n\n    if (state.header && stream.match(/^#+$/, true)) {\n      if (modeCfg.highlightFormatting) state.formatting = \"header\";\n      return getType(state);\n    }\n\n    var ch = stream.next();\n\n    // Matches link titles present on next line\n    if (state.linkTitle) {\n      state.linkTitle = false;\n      var matchCh = ch;\n      if (ch === '(') {\n        matchCh = ')';\n      }\n      matchCh = (matchCh+'').replace(/([.?*+^\\[\\]\\\\(){}|-])/g, \"\\\\$1\");\n      var regex = '^\\\\s*(?:[^' + matchCh + '\\\\\\\\]+|\\\\\\\\\\\\\\\\|\\\\\\\\.)' + matchCh;\n      if (stream.match(new RegExp(regex), true)) {\n        return tokenTypes.linkHref;\n      }\n    }\n\n    // If this block is changed, it may need to be updated in GFM mode\n    if (ch === '`') {\n      var previousFormatting = state.formatting;\n      if (modeCfg.highlightFormatting) state.formatting = \"code\";\n      stream.eatWhile('`');\n      var count = stream.current().length\n      if (state.code == 0 && (!state.quote || count == 1)) {\n        state.code = count\n        return getType(state)\n      } else if (count == state.code) { // Must be exact\n        var t = getType(state)\n        state.code = 0\n        return t\n      } else {\n        state.formatting = previousFormatting\n        return getType(state)\n      }\n    } else if (state.code) {\n      return getType(state);\n    }\n\n    if (ch === '\\\\') {\n      stream.next();\n      if (modeCfg.highlightFormatting) {\n        var type = getType(state);\n        var formattingEscape = tokenTypes.formatting + \"-escape\";\n        return type ? type + \" \" + formattingEscape : formattingEscape;\n      }\n    }\n\n    if (ch === '!' && stream.match(/\\[[^\\]]*\\] ?(?:\\(|\\[)/, false)) {\n      state.imageMarker = true;\n      state.image = true;\n      if (modeCfg.highlightFormatting) state.formatting = \"image\";\n      return getType(state);\n    }\n\n    if (ch === '[' && state.imageMarker && stream.match(/[^\\]]*\\](\\(.*?\\)| ?\\[.*?\\])/, false)) {\n      state.imageMarker = false;\n      state.imageAltText = true\n      if (modeCfg.highlightFormatting) state.formatting = \"image\";\n      return getType(state);\n    }\n\n    if (ch === ']' && state.imageAltText) {\n      if (modeCfg.highlightFormatting) state.formatting = \"image\";\n      var type = getType(state);\n      state.imageAltText = false;\n      state.image = false;\n      state.inline = state.f = linkHref;\n      return type;\n    }\n\n    if (ch === '[' && !state.image) {\n      if (state.linkText && stream.match(/^.*?\\]/)) return getType(state)\n      state.linkText = true;\n      if (modeCfg.highlightFormatting) state.formatting = \"link\";\n      return getType(state);\n    }\n\n    if (ch === ']' && state.linkText) {\n      if (modeCfg.highlightFormatting) state.formatting = \"link\";\n      var type = getType(state);\n      state.linkText = false;\n      state.inline = state.f = stream.match(/\\(.*?\\)| ?\\[.*?\\]/, false) ? linkHref : inlineNormal\n      return type;\n    }\n\n    if (ch === '<' && stream.match(/^(https?|ftps?):\\/\\/(?:[^\\\\>]|\\\\.)+>/, false)) {\n      state.f = state.inline = linkInline;\n      if (modeCfg.highlightFormatting) state.formatting = \"link\";\n      var type = getType(state);\n      if (type){\n        type += \" \";\n      } else {\n        type = \"\";\n      }\n      return type + tokenTypes.linkInline;\n    }\n\n    if (ch === '<' && stream.match(/^[^> \\\\]+@(?:[^\\\\>]|\\\\.)+>/, false)) {\n      state.f = state.inline = linkInline;\n      if (modeCfg.highlightFormatting) state.formatting = \"link\";\n      var type = getType(state);\n      if (type){\n        type += \" \";\n      } else {\n        type = \"\";\n      }\n      return type + tokenTypes.linkEmail;\n    }\n\n    if (modeCfg.xml && ch === '<' && stream.match(/^(!--|\\?|!\\[CDATA\\[|[a-z][a-z0-9-]*(?:\\s+[a-z_:.\\-]+(?:\\s*=\\s*[^>]+)?)*\\s*(?:>|$))/i, false)) {\n      var end = stream.string.indexOf(\">\", stream.pos);\n      if (end != -1) {\n        var atts = stream.string.substring(stream.start, end);\n        if (/markdown\\s*=\\s*('|\"){0,1}1('|\"){0,1}/.test(atts)) state.md_inside = true;\n      }\n      stream.backUp(1);\n      state.htmlState = CodeMirror.startState(htmlMode);\n      return switchBlock(stream, state, htmlBlock);\n    }\n\n    if (modeCfg.xml && ch === '<' && stream.match(/^\\/\\w*?>/)) {\n      state.md_inside = false;\n      return \"tag\";\n    } else if (ch === \"*\" || ch === \"_\") {\n      var len = 1, before = stream.pos == 1 ? \" \" : stream.string.charAt(stream.pos - 2)\n      while (len < 3 && stream.eat(ch)) len++\n      var after = stream.peek() || \" \"\n      // See http://spec.commonmark.org/0.27/#emphasis-and-strong-emphasis\n      var leftFlanking = !/\\s/.test(after) && (!punctuation.test(after) || /\\s/.test(before) || punctuation.test(before))\n      var rightFlanking = !/\\s/.test(before) && (!punctuation.test(before) || /\\s/.test(after) || punctuation.test(after))\n      var setEm = null, setStrong = null\n      if (len % 2) { // Em\n        if (!state.em && leftFlanking && (ch === \"*\" || !rightFlanking || punctuation.test(before)))\n          setEm = true\n        else if (state.em == ch && rightFlanking && (ch === \"*\" || !leftFlanking || punctuation.test(after)))\n          setEm = false\n      }\n      if (len > 1) { // Strong\n        if (!state.strong && leftFlanking && (ch === \"*\" || !rightFlanking || punctuation.test(before)))\n          setStrong = true\n        else if (state.strong == ch && rightFlanking && (ch === \"*\" || !leftFlanking || punctuation.test(after)))\n          setStrong = false\n      }\n      if (setStrong != null || setEm != null) {\n        if (modeCfg.highlightFormatting) state.formatting = setEm == null ? \"strong\" : setStrong == null ? \"em\" : \"strong em\"\n        if (setEm === true) state.em = ch\n        if (setStrong === true) state.strong = ch\n        var t = getType(state)\n        if (setEm === false) state.em = false\n        if (setStrong === false) state.strong = false\n        return t\n      }\n    } else if (ch === ' ') {\n      if (stream.eat('*') || stream.eat('_')) { // Probably surrounded by spaces\n        if (stream.peek() === ' ') { // Surrounded by spaces, ignore\n          return getType(state);\n        } else { // Not surrounded by spaces, back up pointer\n          stream.backUp(1);\n        }\n      }\n    }\n\n    if (modeCfg.strikethrough) {\n      if (ch === '~' && stream.eatWhile(ch)) {\n        if (state.strikethrough) {// Remove strikethrough\n          if (modeCfg.highlightFormatting) state.formatting = \"strikethrough\";\n          var t = getType(state);\n          state.strikethrough = false;\n          return t;\n        } else if (stream.match(/^[^\\s]/, false)) {// Add strikethrough\n          state.strikethrough = true;\n          if (modeCfg.highlightFormatting) state.formatting = \"strikethrough\";\n          return getType(state);\n        }\n      } else if (ch === ' ') {\n        if (stream.match(/^~~/, true)) { // Probably surrounded by space\n          if (stream.peek() === ' ') { // Surrounded by spaces, ignore\n            return getType(state);\n          } else { // Not surrounded by spaces, back up pointer\n            stream.backUp(2);\n          }\n        }\n      }\n    }\n\n    if (modeCfg.emoji && ch === \":\" && stream.match(/^(?:[a-z_\\d+][a-z_\\d+-]*|\\-[a-z_\\d+][a-z_\\d+-]*):/)) {\n      state.emoji = true;\n      if (modeCfg.highlightFormatting) state.formatting = \"emoji\";\n      var retType = getType(state);\n      state.emoji = false;\n      return retType;\n    }\n\n    if (ch === ' ') {\n      if (stream.match(/^ +$/, false)) {\n        state.trailingSpace++;\n      } else if (state.trailingSpace) {\n        state.trailingSpaceNewLine = true;\n      }\n    }\n\n    return getType(state);\n  }\n\n  function linkInline(stream, state) {\n    var ch = stream.next();\n\n    if (ch === \">\") {\n      state.f = state.inline = inlineNormal;\n      if (modeCfg.highlightFormatting) state.formatting = \"link\";\n      var type = getType(state);\n      if (type){\n        type += \" \";\n      } else {\n        type = \"\";\n      }\n      return type + tokenTypes.linkInline;\n    }\n\n    stream.match(/^[^>]+/, true);\n\n    return tokenTypes.linkInline;\n  }\n\n  function linkHref(stream, state) {\n    // Check if space, and return NULL if so (to avoid marking the space)\n    if(stream.eatSpace()){\n      return null;\n    }\n    var ch = stream.next();\n    if (ch === '(' || ch === '[') {\n      state.f = state.inline = getLinkHrefInside(ch === \"(\" ? \")\" : \"]\");\n      if (modeCfg.highlightFormatting) state.formatting = \"link-string\";\n      state.linkHref = true;\n      return getType(state);\n    }\n    return 'error';\n  }\n\n  var linkRE = {\n    \")\": /^(?:[^\\\\\\(\\)]|\\\\.|\\((?:[^\\\\\\(\\)]|\\\\.)*\\))*?(?=\\))/,\n    \"]\": /^(?:[^\\\\\\[\\]]|\\\\.|\\[(?:[^\\\\\\[\\]]|\\\\.)*\\])*?(?=\\])/\n  }\n\n  function getLinkHrefInside(endChar) {\n    return function(stream, state) {\n      var ch = stream.next();\n\n      if (ch === endChar) {\n        state.f = state.inline = inlineNormal;\n        if (modeCfg.highlightFormatting) state.formatting = \"link-string\";\n        var returnState = getType(state);\n        state.linkHref = false;\n        return returnState;\n      }\n\n      stream.match(linkRE[endChar])\n      state.linkHref = true;\n      return getType(state);\n    };\n  }\n\n  function footnoteLink(stream, state) {\n    if (stream.match(/^([^\\]\\\\]|\\\\.)*\\]:/, false)) {\n      state.f = footnoteLinkInside;\n      stream.next(); // Consume [\n      if (modeCfg.highlightFormatting) state.formatting = \"link\";\n      state.linkText = true;\n      return getType(state);\n    }\n    return switchInline(stream, state, inlineNormal);\n  }\n\n  function footnoteLinkInside(stream, state) {\n    if (stream.match(/^\\]:/, true)) {\n      state.f = state.inline = footnoteUrl;\n      if (modeCfg.highlightFormatting) state.formatting = \"link\";\n      var returnType = getType(state);\n      state.linkText = false;\n      return returnType;\n    }\n\n    stream.match(/^([^\\]\\\\]|\\\\.)+/, true);\n\n    return tokenTypes.linkText;\n  }\n\n  function footnoteUrl(stream, state) {\n    // Check if space, and return NULL if so (to avoid marking the space)\n    if(stream.eatSpace()){\n      return null;\n    }\n    // Match URL\n    stream.match(/^[^\\s]+/, true);\n    // Check for link title\n    if (stream.peek() === undefined) { // End of line, set flag to check next line\n      state.linkTitle = true;\n    } else { // More content on line, check if link title\n      stream.match(/^(?:\\s+(?:\"(?:[^\"\\\\]|\\\\\\\\|\\\\.)+\"|'(?:[^'\\\\]|\\\\\\\\|\\\\.)+'|\\((?:[^)\\\\]|\\\\\\\\|\\\\.)+\\)))?/, true);\n    }\n    state.f = state.inline = inlineNormal;\n    return tokenTypes.linkHref + \" url\";\n  }\n\n  var mode = {\n    startState: function() {\n      return {\n        f: blockNormal,\n\n        prevLine: {stream: null},\n        thisLine: {stream: null},\n\n        block: blockNormal,\n        htmlState: null,\n        indentation: 0,\n\n        inline: inlineNormal,\n        text: handleText,\n\n        formatting: false,\n        linkText: false,\n        linkHref: false,\n        linkTitle: false,\n        code: 0,\n        em: false,\n        strong: false,\n        header: 0,\n        setext: 0,\n        hr: false,\n        taskList: false,\n        list: false,\n        listStack: [],\n        quote: 0,\n        trailingSpace: 0,\n        trailingSpaceNewLine: false,\n        strikethrough: false,\n        emoji: false,\n        fencedEndRE: null\n      };\n    },\n\n    copyState: function(s) {\n      return {\n        f: s.f,\n\n        prevLine: s.prevLine,\n        thisLine: s.thisLine,\n\n        block: s.block,\n        htmlState: s.htmlState && CodeMirror.copyState(htmlMode, s.htmlState),\n        indentation: s.indentation,\n\n        localMode: s.localMode,\n        localState: s.localMode ? CodeMirror.copyState(s.localMode, s.localState) : null,\n\n        inline: s.inline,\n        text: s.text,\n        formatting: false,\n        linkText: s.linkText,\n        linkTitle: s.linkTitle,\n        linkHref: s.linkHref,\n        code: s.code,\n        em: s.em,\n        strong: s.strong,\n        strikethrough: s.strikethrough,\n        emoji: s.emoji,\n        header: s.header,\n        setext: s.setext,\n        hr: s.hr,\n        taskList: s.taskList,\n        list: s.list,\n        listStack: s.listStack.slice(0),\n        quote: s.quote,\n        indentedCode: s.indentedCode,\n        trailingSpace: s.trailingSpace,\n        trailingSpaceNewLine: s.trailingSpaceNewLine,\n        md_inside: s.md_inside,\n        fencedEndRE: s.fencedEndRE\n      };\n    },\n\n    token: function(stream, state) {\n\n      // Reset state.formatting\n      state.formatting = false;\n\n      if (stream != state.thisLine.stream) {\n        state.header = 0;\n        state.hr = false;\n\n        if (stream.match(/^\\s*$/, true)) {\n          blankLine(state);\n          return null;\n        }\n\n        state.prevLine = state.thisLine\n        state.thisLine = {stream: stream}\n\n        // Reset state.taskList\n        state.taskList = false;\n\n        // Reset state.trailingSpace\n        state.trailingSpace = 0;\n        state.trailingSpaceNewLine = false;\n\n        if (!state.localState) {\n          state.f = state.block;\n          if (state.f != htmlBlock) {\n            var indentation = stream.match(/^\\s*/, true)[0].replace(/\\t/g, expandedTab).length;\n            state.indentation = indentation;\n            state.indentationDiff = null;\n            if (indentation > 0) return null;\n          }\n        }\n      }\n      return state.f(stream, state);\n    },\n\n    innerMode: function(state) {\n      if (state.block == htmlBlock) return {state: state.htmlState, mode: htmlMode};\n      if (state.localState) return {state: state.localState, mode: state.localMode};\n      return {state: state, mode: mode};\n    },\n\n    indent: function(state, textAfter, line) {\n      if (state.block == htmlBlock && htmlMode.indent) return htmlMode.indent(state.htmlState, textAfter, line)\n      if (state.localState && state.localMode.indent) return state.localMode.indent(state.localState, textAfter, line)\n      return CodeMirror.Pass\n    },\n\n    blankLine: blankLine,\n\n    getType: getType,\n\n    blockCommentStart: \"<!--\",\n    blockCommentEnd: \"-->\",\n    closeBrackets: \"()[]{}''\\\"\\\"``\",\n    fold: \"markdown\"\n  };\n  return mode;\n}, \"xml\");\n\nCodeMirror.defineMIME(\"text/markdown\", \"markdown\");\n\nCodeMirror.defineMIME(\"text/x-markdown\", \"markdown\");\n\n});\n"]}