{"version":3,"file":"RelativeTimestamp.90afb36e.mjs","sources":["../../../../../../node_modules/@skeletonlabs/skeleton/dist/components/AppBar/AppBar.svelte","../../../../../../src/components/BarButton.svelte","../../../../../../node_modules/commonmark/lib/node.js","../../../../../../node_modules/mdurl/encode.js","../../../../../../node_modules/entities/lib/decode_codepoint.js","../../../../../../node_modules/entities/lib/decode.js","../../../../../../node_modules/entities/lib/encode.js","../../../../../../node_modules/entities/lib/index.js","../../../../../../node_modules/commonmark/lib/common.js","../../../../../../node_modules/commonmark/lib/from-code-point.js","../../../../../../node_modules/string.prototype.repeat/repeat.js","../../../../../../node_modules/commonmark/lib/inlines.js","../../../../../../node_modules/commonmark/lib/blocks.js","../../../../../../node_modules/commonmark/lib/render/renderer.js","../../../../../../node_modules/commonmark/lib/render/html.js","../../../../../../node_modules/commonmark/lib/render/xml.js","../../../../../../src/components/Markdown.svelte","../../../../../../src/components/UpvoteBadge.svelte","../../../../../../src/components/PostThumbnailLarge.svelte","../../../../../../src/components/UserBadge.svelte","../../../../../../src/components/CommunityBadge.svelte","../../../../../../src/lib/time.ts","../../../../../../src/components/RelativeTimestamp.svelte"],"sourcesContent":["\n\n
\n\t\n\t
\n\t\t\n\t\t{#if $$slots.lead}\n\t\t\t
\n\t\t{/if}\n\t\t\n\t\t
\n\t\t\n\t\t{#if $$slots.trail}\n\t\t\t
\n\t\t{/if}\n\t
\n\t\n\t{#if $$slots.headline}\n\t\t
\n\t{/if}\n
\n","\n\n\n {\n dispatch(\"click\")\n if (active != null) {\n active = !active\n }\n }}\n target={tag == \"a\" ? \"_blank\" : undefined}\n role={tag == \"a\" ? \"button\" : undefined}\n type={tag == \"button\" ? \"button\" : undefined}\n {href}\n {disabled}\n>\n \n {#if icon}\n \n {/if}\n \n \n {label || \"\"}\n \n\n","\"use strict\";\n\nfunction isContainer(node) {\n switch (node._type) {\n case \"document\":\n case \"block_quote\":\n case \"list\":\n case \"item\":\n case \"paragraph\":\n case \"heading\":\n case \"emph\":\n case \"strong\":\n case \"link\":\n case \"image\":\n case \"custom_inline\":\n case \"custom_block\":\n return true;\n default:\n return false;\n }\n}\n\nvar resumeAt = function(node, entering) {\n this.current = node;\n this.entering = entering === true;\n};\n\nvar next = function() {\n var cur = this.current;\n var entering = this.entering;\n\n if (cur === null) {\n return null;\n }\n\n var container = isContainer(cur);\n\n if (entering && container) {\n if (cur._firstChild) {\n this.current = cur._firstChild;\n this.entering = true;\n } else {\n // stay on node but exit\n this.entering = false;\n }\n } else if (cur === this.root) {\n this.current = null;\n } else if (cur._next === null) {\n this.current = cur._parent;\n this.entering = false;\n } else {\n this.current = cur._next;\n this.entering = true;\n }\n\n return { entering: entering, node: cur };\n};\n\nvar NodeWalker = function(root) {\n return {\n current: root,\n root: root,\n entering: true,\n next: next,\n resumeAt: resumeAt\n };\n};\n\nvar Node = function(nodeType, sourcepos) {\n this._type = nodeType;\n this._parent = null;\n this._firstChild = null;\n this._lastChild = null;\n this._prev = null;\n this._next = null;\n this._sourcepos = sourcepos;\n this._lastLineBlank = false;\n this._lastLineChecked = false;\n this._open = true;\n this._string_content = null;\n this._literal = null;\n this._listData = {};\n this._info = null;\n this._destination = null;\n this._title = null;\n this._isFenced = false;\n this._fenceChar = null;\n this._fenceLength = 0;\n this._fenceOffset = null;\n this._level = null;\n this._onEnter = null;\n this._onExit = null;\n};\n\nvar proto = Node.prototype;\n\nObject.defineProperty(proto, \"isContainer\", {\n get: function() {\n return isContainer(this);\n }\n});\n\nObject.defineProperty(proto, \"type\", {\n get: function() {\n return this._type;\n }\n});\n\nObject.defineProperty(proto, \"firstChild\", {\n get: function() {\n return this._firstChild;\n }\n});\n\nObject.defineProperty(proto, \"lastChild\", {\n get: function() {\n return this._lastChild;\n }\n});\n\nObject.defineProperty(proto, \"next\", {\n get: function() {\n return this._next;\n }\n});\n\nObject.defineProperty(proto, \"prev\", {\n get: function() {\n return this._prev;\n }\n});\n\nObject.defineProperty(proto, \"parent\", {\n get: function() {\n return this._parent;\n }\n});\n\nObject.defineProperty(proto, \"sourcepos\", {\n get: function() {\n return this._sourcepos;\n }\n});\n\nObject.defineProperty(proto, \"literal\", {\n get: function() {\n return this._literal;\n },\n set: function(s) {\n this._literal = s;\n }\n});\n\nObject.defineProperty(proto, \"destination\", {\n get: function() {\n return this._destination;\n },\n set: function(s) {\n this._destination = s;\n }\n});\n\nObject.defineProperty(proto, \"title\", {\n get: function() {\n return this._title;\n },\n set: function(s) {\n this._title = s;\n }\n});\n\nObject.defineProperty(proto, \"info\", {\n get: function() {\n return this._info;\n },\n set: function(s) {\n this._info = s;\n }\n});\n\nObject.defineProperty(proto, \"level\", {\n get: function() {\n return this._level;\n },\n set: function(s) {\n this._level = s;\n }\n});\n\nObject.defineProperty(proto, \"listType\", {\n get: function() {\n return this._listData.type;\n },\n set: function(t) {\n this._listData.type = t;\n }\n});\n\nObject.defineProperty(proto, \"listTight\", {\n get: function() {\n return this._listData.tight;\n },\n set: function(t) {\n this._listData.tight = t;\n }\n});\n\nObject.defineProperty(proto, \"listStart\", {\n get: function() {\n return this._listData.start;\n },\n set: function(n) {\n this._listData.start = n;\n }\n});\n\nObject.defineProperty(proto, \"listDelimiter\", {\n get: function() {\n return this._listData.delimiter;\n },\n set: function(delim) {\n this._listData.delimiter = delim;\n }\n});\n\nObject.defineProperty(proto, \"onEnter\", {\n get: function() {\n return this._onEnter;\n },\n set: function(s) {\n this._onEnter = s;\n }\n});\n\nObject.defineProperty(proto, \"onExit\", {\n get: function() {\n return this._onExit;\n },\n set: function(s) {\n this._onExit = s;\n }\n});\n\nNode.prototype.appendChild = function(child) {\n child.unlink();\n child._parent = this;\n if (this._lastChild) {\n this._lastChild._next = child;\n child._prev = this._lastChild;\n this._lastChild = child;\n } else {\n this._firstChild = child;\n this._lastChild = child;\n }\n};\n\nNode.prototype.prependChild = function(child) {\n child.unlink();\n child._parent = this;\n if (this._firstChild) {\n this._firstChild._prev = child;\n child._next = this._firstChild;\n this._firstChild = child;\n } else {\n this._firstChild = child;\n this._lastChild = child;\n }\n};\n\nNode.prototype.unlink = function() {\n if (this._prev) {\n this._prev._next = this._next;\n } else if (this._parent) {\n this._parent._firstChild = this._next;\n }\n if (this._next) {\n this._next._prev = this._prev;\n } else if (this._parent) {\n this._parent._lastChild = this._prev;\n }\n this._parent = null;\n this._next = null;\n this._prev = null;\n};\n\nNode.prototype.insertAfter = function(sibling) {\n sibling.unlink();\n sibling._next = this._next;\n if (sibling._next) {\n sibling._next._prev = sibling;\n }\n sibling._prev = this;\n this._next = sibling;\n sibling._parent = this._parent;\n if (!sibling._next) {\n sibling._parent._lastChild = sibling;\n }\n};\n\nNode.prototype.insertBefore = function(sibling) {\n sibling.unlink();\n sibling._prev = this._prev;\n if (sibling._prev) {\n sibling._prev._next = sibling;\n }\n sibling._next = this;\n this._prev = sibling;\n sibling._parent = this._parent;\n if (!sibling._prev) {\n sibling._parent._firstChild = sibling;\n }\n};\n\nNode.prototype.walker = function() {\n var walker = new NodeWalker(this);\n return walker;\n};\n\nexport default Node;\n\n/* Example of use of walker:\n\n var walker = w.walker();\n var event;\n\n while (event = walker.next()) {\n console.log(event.entering, event.node.type);\n }\n\n */\n","\n'use strict';\n\n\nvar encodeCache = {};\n\n\n// Create a lookup array where anything but characters in `chars` string\n// and alphanumeric chars is percent-encoded.\n//\nfunction getEncodeCache(exclude) {\n var i, ch, cache = encodeCache[exclude];\n if (cache) { return cache; }\n\n cache = encodeCache[exclude] = [];\n\n for (i = 0; i < 128; i++) {\n ch = String.fromCharCode(i);\n\n if (/^[0-9a-z]$/i.test(ch)) {\n // always allow unencoded alphanumeric characters\n cache.push(ch);\n } else {\n cache.push('%' + ('0' + i.toString(16).toUpperCase()).slice(-2));\n }\n }\n\n for (i = 0; i < exclude.length; i++) {\n cache[exclude.charCodeAt(i)] = exclude[i];\n }\n\n return cache;\n}\n\n\n// Encode unsafe characters with percent-encoding, skipping already\n// encoded sequences.\n//\n// - string - string to encode\n// - exclude - list of characters to ignore (in addition to a-zA-Z0-9)\n// - keepEscaped - don't encode '%' in a correct escape sequence (default: true)\n//\nfunction encode(string, exclude, keepEscaped) {\n var i, l, code, nextCode, cache,\n result = '';\n\n if (typeof exclude !== 'string') {\n // encode(string, keepEscaped)\n keepEscaped = exclude;\n exclude = encode.defaultChars;\n }\n\n if (typeof keepEscaped === 'undefined') {\n keepEscaped = true;\n }\n\n cache = getEncodeCache(exclude);\n\n for (i = 0, l = string.length; i < l; i++) {\n code = string.charCodeAt(i);\n\n if (keepEscaped && code === 0x25 /* % */ && i + 2 < l) {\n if (/^[0-9a-f]{2}$/i.test(string.slice(i + 1, i + 3))) {\n result += string.slice(i, i + 3);\n i += 2;\n continue;\n }\n }\n\n if (code < 128) {\n result += cache[code];\n continue;\n }\n\n if (code >= 0xD800 && code <= 0xDFFF) {\n if (code >= 0xD800 && code <= 0xDBFF && i + 1 < l) {\n nextCode = string.charCodeAt(i + 1);\n if (nextCode >= 0xDC00 && nextCode <= 0xDFFF) {\n result += encodeURIComponent(string[i] + string[i + 1]);\n i++;\n continue;\n }\n }\n result += '%EF%BF%BD';\n continue;\n }\n\n result += encodeURIComponent(string[i]);\n }\n\n return result;\n}\n\nencode.defaultChars = \";/?:@&=+$,-_.!~*'()#\";\nencode.componentChars = \"-_.!~*'()\";\n\n\nmodule.exports = encode;\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar decode_json_1 = __importDefault(require(\"./maps/decode.json\"));\n// modified version of https://github.com/mathiasbynens/he/blob/master/src/he.js#L94-L119\nfunction decodeCodePoint(codePoint) {\n if ((codePoint >= 0xd800 && codePoint <= 0xdfff) || codePoint > 0x10ffff) {\n return \"\\uFFFD\";\n }\n if (codePoint in decode_json_1.default) {\n codePoint = decode_json_1.default[codePoint];\n }\n var output = \"\";\n if (codePoint > 0xffff) {\n codePoint -= 0x10000;\n output += String.fromCharCode(((codePoint >>> 10) & 0x3ff) | 0xd800);\n codePoint = 0xdc00 | (codePoint & 0x3ff);\n }\n output += String.fromCharCode(codePoint);\n return output;\n}\nexports.default = decodeCodePoint;\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.decodeHTML = exports.decodeHTMLStrict = exports.decodeXML = void 0;\nvar entities_json_1 = __importDefault(require(\"./maps/entities.json\"));\nvar legacy_json_1 = __importDefault(require(\"./maps/legacy.json\"));\nvar xml_json_1 = __importDefault(require(\"./maps/xml.json\"));\nvar decode_codepoint_1 = __importDefault(require(\"./decode_codepoint\"));\nexports.decodeXML = getStrictDecoder(xml_json_1.default);\nexports.decodeHTMLStrict = getStrictDecoder(entities_json_1.default);\nfunction getStrictDecoder(map) {\n var keys = Object.keys(map).join(\"|\");\n var replace = getReplacer(map);\n keys += \"|#[xX][\\\\da-fA-F]+|#\\\\d+\";\n var re = new RegExp(\"&(?:\" + keys + \");\", \"g\");\n return function (str) { return String(str).replace(re, replace); };\n}\nvar sorter = function (a, b) { return (a < b ? 1 : -1); };\nexports.decodeHTML = (function () {\n var legacy = Object.keys(legacy_json_1.default).sort(sorter);\n var keys = Object.keys(entities_json_1.default).sort(sorter);\n for (var i = 0, j = 0; i < keys.length; i++) {\n if (legacy[j] === keys[i]) {\n keys[i] += \";?\";\n j++;\n }\n else {\n keys[i] += \";\";\n }\n }\n var re = new RegExp(\"&(?:\" + keys.join(\"|\") + \"|#[xX][\\\\da-fA-F]+;?|#\\\\d+;?)\", \"g\");\n var replace = getReplacer(entities_json_1.default);\n function replacer(str) {\n if (str.substr(-1) !== \";\")\n str += \";\";\n return replace(str);\n }\n //TODO consider creating a merged map\n return function (str) { return String(str).replace(re, replacer); };\n})();\nfunction getReplacer(map) {\n return function replace(str) {\n if (str.charAt(1) === \"#\") {\n var secondChar = str.charAt(2);\n if (secondChar === \"X\" || secondChar === \"x\") {\n return decode_codepoint_1.default(parseInt(str.substr(3), 16));\n }\n return decode_codepoint_1.default(parseInt(str.substr(2), 10));\n }\n return map[str.slice(1, -1)];\n };\n}\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.escape = exports.encodeHTML = exports.encodeXML = void 0;\nvar xml_json_1 = __importDefault(require(\"./maps/xml.json\"));\nvar inverseXML = getInverseObj(xml_json_1.default);\nvar xmlReplacer = getInverseReplacer(inverseXML);\nexports.encodeXML = getInverse(inverseXML, xmlReplacer);\nvar entities_json_1 = __importDefault(require(\"./maps/entities.json\"));\nvar inverseHTML = getInverseObj(entities_json_1.default);\nvar htmlReplacer = getInverseReplacer(inverseHTML);\nexports.encodeHTML = getInverse(inverseHTML, htmlReplacer);\nfunction getInverseObj(obj) {\n return Object.keys(obj)\n .sort()\n .reduce(function (inverse, name) {\n inverse[obj[name]] = \"&\" + name + \";\";\n return inverse;\n }, {});\n}\nfunction getInverseReplacer(inverse) {\n var single = [];\n var multiple = [];\n for (var _i = 0, _a = Object.keys(inverse); _i < _a.length; _i++) {\n var k = _a[_i];\n if (k.length === 1) {\n // Add value to single array\n single.push(\"\\\\\" + k);\n }\n else {\n // Add value to multiple array\n multiple.push(k);\n }\n }\n // Add ranges to single characters.\n single.sort();\n for (var start = 0; start < single.length - 1; start++) {\n // Find the end of a run of characters\n var end = start;\n while (end < single.length - 1 &&\n single[end].charCodeAt(1) + 1 === single[end + 1].charCodeAt(1)) {\n end += 1;\n }\n var count = 1 + end - start;\n // We want to replace at least three characters\n if (count < 3)\n continue;\n single.splice(start, count, single[start] + \"-\" + single[end]);\n }\n multiple.unshift(\"[\" + single.join(\"\") + \"]\");\n return new RegExp(multiple.join(\"|\"), \"g\");\n}\nvar reNonASCII = /(?:[\\x80-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])/g;\nfunction singleCharReplacer(c) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return \"&#x\" + c.codePointAt(0).toString(16).toUpperCase() + \";\";\n}\nfunction getInverse(inverse, re) {\n return function (data) {\n return data\n .replace(re, function (name) { return inverse[name]; })\n .replace(reNonASCII, singleCharReplacer);\n };\n}\nvar reXmlChars = getInverseReplacer(inverseXML);\nfunction escape(data) {\n return data\n .replace(reXmlChars, singleCharReplacer)\n .replace(reNonASCII, singleCharReplacer);\n}\nexports.escape = escape;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.encode = exports.decodeStrict = exports.decode = void 0;\nvar decode_1 = require(\"./decode\");\nvar encode_1 = require(\"./encode\");\n/**\n * Decodes a string with entities.\n *\n * @param data String to decode.\n * @param level Optional level to decode at. 0 = XML, 1 = HTML. Default is 0.\n */\nfunction decode(data, level) {\n return (!level || level <= 0 ? decode_1.decodeXML : decode_1.decodeHTML)(data);\n}\nexports.decode = decode;\n/**\n * Decodes a string with entities. Does not allow missing trailing semicolons for entities.\n *\n * @param data String to decode.\n * @param level Optional level to decode at. 0 = XML, 1 = HTML. Default is 0.\n */\nfunction decodeStrict(data, level) {\n return (!level || level <= 0 ? decode_1.decodeXML : decode_1.decodeHTMLStrict)(data);\n}\nexports.decodeStrict = decodeStrict;\n/**\n * Encodes a string with entities.\n *\n * @param data String to encode.\n * @param level Optional level to encode at. 0 = XML, 1 = HTML. Default is 0.\n */\nfunction encode(data, level) {\n return (!level || level <= 0 ? encode_1.encodeXML : encode_1.encodeHTML)(data);\n}\nexports.encode = encode;\nvar encode_2 = require(\"./encode\");\nObject.defineProperty(exports, \"encodeXML\", { enumerable: true, get: function () { return encode_2.encodeXML; } });\nObject.defineProperty(exports, \"encodeHTML\", { enumerable: true, get: function () { return encode_2.encodeHTML; } });\nObject.defineProperty(exports, \"escape\", { enumerable: true, get: function () { return encode_2.escape; } });\n// Legacy aliases\nObject.defineProperty(exports, \"encodeHTML4\", { enumerable: true, get: function () { return encode_2.encodeHTML; } });\nObject.defineProperty(exports, \"encodeHTML5\", { enumerable: true, get: function () { return encode_2.encodeHTML; } });\nvar decode_2 = require(\"./decode\");\nObject.defineProperty(exports, \"decodeXML\", { enumerable: true, get: function () { return decode_2.decodeXML; } });\nObject.defineProperty(exports, \"decodeHTML\", { enumerable: true, get: function () { return decode_2.decodeHTML; } });\nObject.defineProperty(exports, \"decodeHTMLStrict\", { enumerable: true, get: function () { return decode_2.decodeHTMLStrict; } });\n// Legacy aliases\nObject.defineProperty(exports, \"decodeHTML4\", { enumerable: true, get: function () { return decode_2.decodeHTML; } });\nObject.defineProperty(exports, \"decodeHTML5\", { enumerable: true, get: function () { return decode_2.decodeHTML; } });\nObject.defineProperty(exports, \"decodeHTML4Strict\", { enumerable: true, get: function () { return decode_2.decodeHTMLStrict; } });\nObject.defineProperty(exports, \"decodeHTML5Strict\", { enumerable: true, get: function () { return decode_2.decodeHTMLStrict; } });\nObject.defineProperty(exports, \"decodeXMLStrict\", { enumerable: true, get: function () { return decode_2.decodeXML; } });\n","\"use strict\";\n\nimport encode from \"mdurl/encode.js\";\nimport { decodeHTML } from \"entities\";\n\nvar C_BACKSLASH = 92;\n\nvar ENTITY = \"&(?:#x[a-f0-9]{1,6}|#[0-9]{1,7}|[a-z][a-z0-9]{1,31});\";\n\nvar TAGNAME = \"[A-Za-z][A-Za-z0-9-]*\";\nvar ATTRIBUTENAME = \"[a-zA-Z_:][a-zA-Z0-9:._-]*\";\nvar UNQUOTEDVALUE = \"[^\\\"'=<>`\\\\x00-\\\\x20]+\";\nvar SINGLEQUOTEDVALUE = \"'[^']*'\";\nvar DOUBLEQUOTEDVALUE = '\"[^\"]*\"';\nvar ATTRIBUTEVALUE =\n \"(?:\" +\n UNQUOTEDVALUE +\n \"|\" +\n SINGLEQUOTEDVALUE +\n \"|\" +\n DOUBLEQUOTEDVALUE +\n \")\";\nvar ATTRIBUTEVALUESPEC = \"(?:\" + \"\\\\s*=\" + \"\\\\s*\" + ATTRIBUTEVALUE + \")\";\nvar ATTRIBUTE = \"(?:\" + \"\\\\s+\" + ATTRIBUTENAME + ATTRIBUTEVALUESPEC + \"?)\";\nvar OPENTAG = \"<\" + TAGNAME + ATTRIBUTE + \"*\" + \"\\\\s*/?>\";\nvar CLOSETAG = \"]\";\nvar HTMLCOMMENT = \"|\";\nvar PROCESSINGINSTRUCTION = \"[<][?][\\\\s\\\\S]*?[?][>]\";\nvar DECLARATION = \"]*>\";\nvar CDATA = \"\";\nvar HTMLTAG =\n \"(?:\" +\n OPENTAG +\n \"|\" +\n CLOSETAG +\n \"|\" +\n HTMLCOMMENT +\n \"|\" +\n PROCESSINGINSTRUCTION +\n \"|\" +\n DECLARATION +\n \"|\" +\n CDATA +\n \")\";\nvar reHtmlTag = new RegExp(\"^\" + HTMLTAG);\n\nvar reBackslashOrAmp = /[\\\\&]/;\n\nvar ESCAPABLE = \"[!\\\"#$%&'()*+,./:;<=>?@[\\\\\\\\\\\\]^_`{|}~-]\";\n\nvar reEntityOrEscapedChar = new RegExp(\"\\\\\\\\\" + ESCAPABLE + \"|\" + ENTITY, \"gi\");\n\nvar XMLSPECIAL = '[&<>\"]';\n\nvar reXmlSpecial = new RegExp(XMLSPECIAL, \"g\");\n\nvar unescapeChar = function(s) {\n if (s.charCodeAt(0) === C_BACKSLASH) {\n return s.charAt(1);\n } else {\n return decodeHTML(s);\n }\n};\n\n// Replace entities and backslash escapes with literal characters.\nvar unescapeString = function(s) {\n if (reBackslashOrAmp.test(s)) {\n return s.replace(reEntityOrEscapedChar, unescapeChar);\n } else {\n return s;\n }\n};\n\nvar normalizeURI = function(uri) {\n try {\n return encode(uri);\n } catch (err) {\n return uri;\n }\n};\n\nvar replaceUnsafeChar = function(s) {\n switch (s) {\n case \"&\":\n return \"&\";\n case \"<\":\n return \"<\";\n case \">\":\n return \">\";\n case '\"':\n return \""\";\n default:\n return s;\n }\n};\n\nvar escapeXml = function(s) {\n if (reXmlSpecial.test(s)) {\n return s.replace(reXmlSpecial, replaceUnsafeChar);\n } else {\n return s;\n }\n};\n\nexport {\n unescapeString,\n normalizeURI,\n escapeXml,\n reHtmlTag,\n OPENTAG,\n CLOSETAG,\n ENTITY,\n ESCAPABLE\n};\n","\"use strict\";\n\n// derived from https://github.com/mathiasbynens/String.fromCodePoint\n/*! http://mths.be/fromcodepoint v0.2.1 by @mathias */\n\nvar _fromCodePoint;\n\nexport default function fromCodePoint(_) {\n return _fromCodePoint(_);\n}\n\nif (String.fromCodePoint) {\n _fromCodePoint = function(_) {\n try {\n return String.fromCodePoint(_);\n } catch (e) {\n if (e instanceof RangeError) {\n return String.fromCharCode(0xfffd);\n }\n throw e;\n }\n };\n} else {\n var stringFromCharCode = String.fromCharCode;\n var floor = Math.floor;\n _fromCodePoint = function() {\n var MAX_SIZE = 0x4000;\n var codeUnits = [];\n var highSurrogate;\n var lowSurrogate;\n var index = -1;\n var length = arguments.length;\n if (!length) {\n return \"\";\n }\n var result = \"\";\n while (++index < length) {\n var codePoint = Number(arguments[index]);\n if (\n !isFinite(codePoint) || // `NaN`, `+Infinity`, or `-Infinity`\n codePoint < 0 || // not a valid Unicode code point\n codePoint > 0x10ffff || // not a valid Unicode code point\n floor(codePoint) !== codePoint // not an integer\n ) {\n return String.fromCharCode(0xfffd);\n }\n if (codePoint <= 0xffff) {\n // BMP code point\n codeUnits.push(codePoint);\n } else {\n // Astral code point; split in surrogate halves\n // http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae\n codePoint -= 0x10000;\n highSurrogate = (codePoint >> 10) + 0xd800;\n lowSurrogate = (codePoint % 0x400) + 0xdc00;\n codeUnits.push(highSurrogate, lowSurrogate);\n }\n if (index + 1 === length || codeUnits.length > MAX_SIZE) {\n result += stringFromCharCode.apply(null, codeUnits);\n codeUnits.length = 0;\n }\n }\n return result;\n };\n}\n","/*! http://mths.be/repeat v0.2.0 by @mathias */\nif (!String.prototype.repeat) {\n\t(function() {\n\t\t'use strict'; // needed to support `apply`/`call` with `undefined`/`null`\n\t\tvar defineProperty = (function() {\n\t\t\t// IE 8 only supports `Object.defineProperty` on DOM elements\n\t\t\ttry {\n\t\t\t\tvar object = {};\n\t\t\t\tvar $defineProperty = Object.defineProperty;\n\t\t\t\tvar result = $defineProperty(object, object, object) && $defineProperty;\n\t\t\t} catch(error) {}\n\t\t\treturn result;\n\t\t}());\n\t\tvar repeat = function(count) {\n\t\t\tif (this == null) {\n\t\t\t\tthrow TypeError();\n\t\t\t}\n\t\t\tvar string = String(this);\n\t\t\t// `ToInteger`\n\t\t\tvar n = count ? Number(count) : 0;\n\t\t\tif (n != n) { // better `isNaN`\n\t\t\t\tn = 0;\n\t\t\t}\n\t\t\t// Account for out-of-bounds indices\n\t\t\tif (n < 0 || n == Infinity) {\n\t\t\t\tthrow RangeError();\n\t\t\t}\n\t\t\tvar result = '';\n\t\t\twhile (n) {\n\t\t\t\tif (n % 2 == 1) {\n\t\t\t\t\tresult += string;\n\t\t\t\t}\n\t\t\t\tif (n > 1) {\n\t\t\t\t\tstring += string;\n\t\t\t\t}\n\t\t\t\tn >>= 1;\n\t\t\t}\n\t\t\treturn result;\n\t\t};\n\t\tif (defineProperty) {\n\t\t\tdefineProperty(String.prototype, 'repeat', {\n\t\t\t\t'value': repeat,\n\t\t\t\t'configurable': true,\n\t\t\t\t'writable': true\n\t\t\t});\n\t\t} else {\n\t\t\tString.prototype.repeat = repeat;\n\t\t}\n\t}());\n}\n","\"use strict\";\n\nimport Node from \"./node.js\";\nimport * as common from \"./common.js\";\nimport fromCodePoint from \"./from-code-point.js\";\nimport { decodeHTML } from \"entities\";\nimport \"string.prototype.repeat\"; // Polyfill for String.prototype.repeat\n\nvar normalizeURI = common.normalizeURI;\nvar unescapeString = common.unescapeString;\n\n// Constants for character codes:\n\nvar C_NEWLINE = 10;\nvar C_ASTERISK = 42;\nvar C_UNDERSCORE = 95;\nvar C_BACKTICK = 96;\nvar C_OPEN_BRACKET = 91;\nvar C_CLOSE_BRACKET = 93;\nvar C_LESSTHAN = 60;\nvar C_BANG = 33;\nvar C_BACKSLASH = 92;\nvar C_AMPERSAND = 38;\nvar C_OPEN_PAREN = 40;\nvar C_CLOSE_PAREN = 41;\nvar C_COLON = 58;\nvar C_SINGLEQUOTE = 39;\nvar C_DOUBLEQUOTE = 34;\n\n// Some regexps used in inline parser:\n\nvar ESCAPABLE = common.ESCAPABLE;\nvar ESCAPED_CHAR = \"\\\\\\\\\" + ESCAPABLE;\n\nvar ENTITY = common.ENTITY;\nvar reHtmlTag = common.reHtmlTag;\n\nvar rePunctuation = new RegExp(\n /^[!\"#$%&'()*+,\\-./:;<=>?@\\[\\]\\\\^_`{|}~\\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);\n\nvar reLinkTitle = new RegExp(\n '^(?:\"(' +\n ESCAPED_CHAR +\n '|[^\"\\\\x00])*\"' +\n \"|\" +\n \"'(\" +\n ESCAPED_CHAR +\n \"|[^'\\\\x00])*'\" +\n \"|\" +\n \"\\\\((\" +\n ESCAPED_CHAR +\n \"|[^()\\\\x00])*\\\\))\"\n);\n\nvar reLinkDestinationBraces = /^(?:<(?:[^<>\\n\\\\\\x00]|\\\\.)*>)/;\n\nvar reEscapable = new RegExp(\"^\" + ESCAPABLE);\n\nvar reEntityHere = new RegExp(\"^\" + ENTITY, \"i\");\n\nvar reTicks = /`+/;\n\nvar reTicksHere = /^`+/;\n\nvar reEllipses = /\\.\\.\\./g;\n\nvar reDash = /--+/g;\n\nvar reEmailAutolink = /^<([a-zA-Z0-9.!#$%&'*+\\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*)>/;\n\nvar reAutolink = /^<[A-Za-z][A-Za-z0-9.+-]{1,31}:[^<>\\x00-\\x20]*>/i;\n\nvar reSpnl = /^ *(?:\\n *)?/;\n\nvar reWhitespaceChar = /^[ \\t\\n\\x0b\\x0c\\x0d]/;\n\nvar reUnicodeWhitespaceChar = /^\\s/;\n\nvar reFinalSpace = / *$/;\n\nvar reInitialSpace = /^ */;\n\nvar reSpaceAtEndOfLine = /^ *(?:\\n|$)/;\n\nvar reLinkLabel = /^\\[(?:[^\\\\\\[\\]]|\\\\.){0,1000}\\]/s;\n\n// Matches a string of non-special characters.\nvar reMain = /^[^\\n`\\[\\]\\\\!<&*_'\"]+/m;\n\nvar text = function(s) {\n var node = new Node(\"text\");\n node._literal = s;\n return node;\n};\n\n// normalize a reference in reference link (remove []s, trim,\n// collapse internal space, unicode case fold.\n// See commonmark/commonmark.js#168.\nvar normalizeReference = function(string) {\n return string\n .slice(1, string.length - 1)\n .trim()\n .replace(/[ \\t\\r\\n]+/, \" \")\n .toLowerCase()\n .toUpperCase();\n};\n\n// INLINE PARSER\n\n// These are methods of an InlineParser object, defined below.\n// An InlineParser keeps track of a subject (a string to be\n// parsed) and a position in that subject.\n\n// If re matches at current position in the subject, advance\n// position in subject and return the match; otherwise return null.\nvar match = function(re) {\n var m = re.exec(this.subject.slice(this.pos));\n if (m === null) {\n return null;\n } else {\n this.pos += m.index + m[0].length;\n return m[0];\n }\n};\n\n// Returns the code for the character at the current subject position, or -1\n// there are no more characters.\nvar peek = function() {\n if (this.pos < this.subject.length) {\n return this.subject.charCodeAt(this.pos);\n } else {\n return -1;\n }\n};\n\n// Parse zero or more space characters, including at most one newline\nvar spnl = function() {\n this.match(reSpnl);\n return true;\n};\n\n// All of the parsers below try to match something at the current position\n// in the subject. If they succeed in matching anything, they\n// return the inline matched, advancing the subject.\n\n// Attempt to parse backticks, adding either a backtick code span or a\n// literal sequence of backticks.\nvar parseBackticks = function(block) {\n var ticks = this.match(reTicksHere);\n if (ticks === null) {\n return false;\n }\n var afterOpenTicks = this.pos;\n var matched;\n var node;\n var contents;\n while ((matched = this.match(reTicks)) !== null) {\n if (matched === ticks) {\n node = new Node(\"code\");\n contents = this.subject\n .slice(afterOpenTicks, this.pos - ticks.length)\n .replace(/\\n/gm, \" \");\n if (\n contents.length > 0 &&\n contents.match(/[^ ]/) !== null &&\n contents[0] == \" \" &&\n contents[contents.length - 1] == \" \"\n ) {\n node._literal = contents.slice(1, contents.length - 1);\n } else {\n node._literal = contents;\n }\n block.appendChild(node);\n return true;\n }\n }\n // If we got here, we didn't match a closing backtick sequence.\n this.pos = afterOpenTicks;\n block.appendChild(text(ticks));\n return true;\n};\n\n// Parse a backslash-escaped special character, adding either the escaped\n// character, a hard line break (if the backslash is followed by a newline),\n// or a literal backslash to the block's children. Assumes current character\n// is a backslash.\nvar parseBackslash = function(block) {\n var subj = this.subject;\n var node;\n this.pos += 1;\n if (this.peek() === C_NEWLINE) {\n this.pos += 1;\n node = new Node(\"linebreak\");\n block.appendChild(node);\n } else if (reEscapable.test(subj.charAt(this.pos))) {\n block.appendChild(text(subj.charAt(this.pos)));\n this.pos += 1;\n } else {\n block.appendChild(text(\"\\\\\"));\n }\n return true;\n};\n\n// Attempt to parse an autolink (URL or email in pointy brackets).\nvar parseAutolink = function(block) {\n var m;\n var dest;\n var node;\n if ((m = this.match(reEmailAutolink))) {\n dest = m.slice(1, m.length - 1);\n node = new Node(\"link\");\n node._destination = normalizeURI(\"mailto:\" + dest);\n node._title = \"\";\n node.appendChild(text(dest));\n block.appendChild(node);\n return true;\n } else if ((m = this.match(reAutolink))) {\n dest = m.slice(1, m.length - 1);\n node = new Node(\"link\");\n node._destination = normalizeURI(dest);\n node._title = \"\";\n node.appendChild(text(dest));\n block.appendChild(node);\n return true;\n } else {\n return false;\n }\n};\n\n// Attempt to parse a raw HTML tag.\nvar parseHtmlTag = function(block) {\n var m = this.match(reHtmlTag);\n if (m === null) {\n return false;\n } else {\n var node = new Node(\"html_inline\");\n node._literal = m;\n block.appendChild(node);\n return true;\n }\n};\n\n// Scan a sequence of characters with code cc, and return information about\n// the number of delimiters and whether they are positioned such that\n// they can open and/or close emphasis or strong emphasis. A utility\n// function for strong/emph parsing.\nvar scanDelims = function(cc) {\n var numdelims = 0;\n var char_before, char_after, cc_after;\n var startpos = this.pos;\n var left_flanking, right_flanking, can_open, can_close;\n var after_is_whitespace,\n after_is_punctuation,\n before_is_whitespace,\n before_is_punctuation;\n\n if (cc === C_SINGLEQUOTE || cc === C_DOUBLEQUOTE) {\n numdelims++;\n this.pos++;\n } else {\n while (this.peek() === cc) {\n numdelims++;\n this.pos++;\n }\n }\n\n if (numdelims === 0) {\n return null;\n }\n\n char_before = startpos === 0 ? \"\\n\" : this.subject.charAt(startpos - 1);\n\n cc_after = this.peek();\n if (cc_after === -1) {\n char_after = \"\\n\";\n } else {\n char_after = fromCodePoint(cc_after);\n }\n\n after_is_whitespace = reUnicodeWhitespaceChar.test(char_after);\n after_is_punctuation = rePunctuation.test(char_after);\n before_is_whitespace = reUnicodeWhitespaceChar.test(char_before);\n before_is_punctuation = rePunctuation.test(char_before);\n\n left_flanking =\n !after_is_whitespace &&\n (!after_is_punctuation ||\n before_is_whitespace ||\n before_is_punctuation);\n right_flanking =\n !before_is_whitespace &&\n (!before_is_punctuation || after_is_whitespace || after_is_punctuation);\n if (cc === C_UNDERSCORE) {\n can_open = left_flanking && (!right_flanking || before_is_punctuation);\n can_close = right_flanking && (!left_flanking || after_is_punctuation);\n } else if (cc === C_SINGLEQUOTE || cc === C_DOUBLEQUOTE) {\n can_open = left_flanking && !right_flanking;\n can_close = right_flanking;\n } else {\n can_open = left_flanking;\n can_close = right_flanking;\n }\n this.pos = startpos;\n return { numdelims: numdelims, can_open: can_open, can_close: can_close };\n};\n\n// Handle a delimiter marker for emphasis or a quote.\nvar handleDelim = function(cc, block) {\n var res = this.scanDelims(cc);\n if (!res) {\n return false;\n }\n var numdelims = res.numdelims;\n var startpos = this.pos;\n var contents;\n\n this.pos += numdelims;\n if (cc === C_SINGLEQUOTE) {\n contents = \"\\u2019\";\n } else if (cc === C_DOUBLEQUOTE) {\n contents = \"\\u201C\";\n } else {\n contents = this.subject.slice(startpos, this.pos);\n }\n var node = text(contents);\n block.appendChild(node);\n\n // Add entry to stack for this opener\n if (\n (res.can_open || res.can_close) &&\n (this.options.smart || (cc !== C_SINGLEQUOTE && cc !== C_DOUBLEQUOTE))\n ) {\n this.delimiters = {\n cc: cc,\n numdelims: numdelims,\n origdelims: numdelims,\n node: node,\n previous: this.delimiters,\n next: null,\n can_open: res.can_open,\n can_close: res.can_close\n };\n if (this.delimiters.previous !== null) {\n this.delimiters.previous.next = this.delimiters;\n }\n }\n\n return true;\n};\n\nvar removeDelimiter = function(delim) {\n if (delim.previous !== null) {\n delim.previous.next = delim.next;\n }\n if (delim.next === null) {\n // top of stack\n this.delimiters = delim.previous;\n } else {\n delim.next.previous = delim.previous;\n }\n};\n\nvar removeDelimitersBetween = function(bottom, top) {\n if (bottom.next !== top) {\n bottom.next = top;\n top.previous = bottom;\n }\n};\n\nvar processEmphasis = function(stack_bottom) {\n var opener, closer, old_closer;\n var opener_inl, closer_inl;\n var tempstack;\n var use_delims;\n var tmp, next;\n var opener_found;\n var openers_bottom = [];\n var openers_bottom_index;\n var odd_match = false;\n\n for (var i = 0; i < 8; i++) {\n openers_bottom[i] = stack_bottom;\n }\n // find first closer above stack_bottom:\n closer = this.delimiters;\n while (closer !== null && closer.previous !== stack_bottom) {\n closer = closer.previous;\n }\n // move forward, looking for closers, and handling each\n while (closer !== null) {\n var closercc = closer.cc;\n if (!closer.can_close) {\n closer = closer.next;\n } else {\n // found emphasis closer. now look back for first matching opener:\n opener = closer.previous;\n opener_found = false;\n switch (closercc) {\n case C_SINGLEQUOTE:\n openers_bottom_index = 0;\n break;\n case C_DOUBLEQUOTE:\n openers_bottom_index = 1;\n break;\n case C_UNDERSCORE:\n openers_bottom_index = 2;\n break;\n case C_ASTERISK:\n openers_bottom_index = 3 + (closer.can_open ? 3 : 0)\n + (closer.origdelims % 3);\n break;\n }\n while (\n opener !== null &&\n opener !== stack_bottom &&\n opener !== openers_bottom[openers_bottom_index]\n ) {\n odd_match =\n (closer.can_open || opener.can_close) &&\n closer.origdelims % 3 !== 0 &&\n (opener.origdelims + closer.origdelims) % 3 === 0;\n if (opener.cc === closer.cc && opener.can_open && !odd_match) {\n opener_found = true;\n break;\n }\n opener = opener.previous;\n }\n old_closer = closer;\n\n if (closercc === C_ASTERISK || closercc === C_UNDERSCORE) {\n if (!opener_found) {\n closer = closer.next;\n } else {\n // calculate actual number of delimiters used from closer\n use_delims =\n closer.numdelims >= 2 && opener.numdelims >= 2 ? 2 : 1;\n\n opener_inl = opener.node;\n closer_inl = closer.node;\n\n // remove used delimiters from stack elts and inlines\n opener.numdelims -= use_delims;\n closer.numdelims -= use_delims;\n opener_inl._literal = opener_inl._literal.slice(\n 0,\n opener_inl._literal.length - use_delims\n );\n closer_inl._literal = closer_inl._literal.slice(\n 0,\n closer_inl._literal.length - use_delims\n );\n\n // build contents for new emph element\n var emph = new Node(use_delims === 1 ? \"emph\" : \"strong\");\n\n tmp = opener_inl._next;\n while (tmp && tmp !== closer_inl) {\n next = tmp._next;\n tmp.unlink();\n emph.appendChild(tmp);\n tmp = next;\n }\n\n opener_inl.insertAfter(emph);\n\n // remove elts between opener and closer in delimiters stack\n removeDelimitersBetween(opener, closer);\n\n // if opener has 0 delims, remove it and the inline\n if (opener.numdelims === 0) {\n opener_inl.unlink();\n this.removeDelimiter(opener);\n }\n\n if (closer.numdelims === 0) {\n closer_inl.unlink();\n tempstack = closer.next;\n this.removeDelimiter(closer);\n closer = tempstack;\n }\n }\n } else if (closercc === C_SINGLEQUOTE) {\n closer.node._literal = \"\\u2019\";\n if (opener_found) {\n opener.node._literal = \"\\u2018\";\n }\n closer = closer.next;\n } else if (closercc === C_DOUBLEQUOTE) {\n closer.node._literal = \"\\u201D\";\n if (opener_found) {\n opener.node.literal = \"\\u201C\";\n }\n closer = closer.next;\n }\n if (!opener_found) {\n // Set lower bound for future searches for openers:\n openers_bottom[openers_bottom_index] =\n old_closer.previous;\n if (!old_closer.can_open) {\n // We can remove a closer that can't be an opener,\n // once we've seen there's no matching opener:\n this.removeDelimiter(old_closer);\n }\n }\n }\n }\n\n // remove all delimiters\n while (this.delimiters !== null && this.delimiters !== stack_bottom) {\n this.removeDelimiter(this.delimiters);\n }\n};\n\n// Attempt to parse link title (sans quotes), returning the string\n// or null if no match.\nvar parseLinkTitle = function() {\n var title = this.match(reLinkTitle);\n if (title === null) {\n return null;\n } else {\n // chop off quotes from title and unescape:\n return unescapeString(title.substr(1, title.length - 2));\n }\n};\n\n// Attempt to parse link destination, returning the string or\n// null if no match.\nvar parseLinkDestination = function() {\n var res = this.match(reLinkDestinationBraces);\n if (res === null) {\n if (this.peek() === C_LESSTHAN) {\n return null;\n }\n // TODO handrolled parser; res should be null or the string\n var savepos = this.pos;\n var openparens = 0;\n var c;\n while ((c = this.peek()) !== -1) {\n if (\n c === C_BACKSLASH &&\n reEscapable.test(this.subject.charAt(this.pos + 1))\n ) {\n this.pos += 1;\n if (this.peek() !== -1) {\n this.pos += 1;\n }\n } else if (c === C_OPEN_PAREN) {\n this.pos += 1;\n openparens += 1;\n } else if (c === C_CLOSE_PAREN) {\n if (openparens < 1) {\n break;\n } else {\n this.pos += 1;\n openparens -= 1;\n }\n } else if (reWhitespaceChar.exec(fromCodePoint(c)) !== null) {\n break;\n } else {\n this.pos += 1;\n }\n }\n if (this.pos === savepos && c !== C_CLOSE_PAREN) {\n return null;\n }\n if (openparens !== 0) {\n return null;\n }\n res = this.subject.substr(savepos, this.pos - savepos);\n return normalizeURI(unescapeString(res));\n } else {\n // chop off surrounding <..>:\n return normalizeURI(unescapeString(res.substr(1, res.length - 2)));\n }\n};\n\n// Attempt to parse a link label, returning number of characters parsed.\nvar parseLinkLabel = function() {\n var m = this.match(reLinkLabel);\n if (m === null || m.length > 1001) {\n return 0;\n } else {\n return m.length;\n }\n};\n\n// Add open bracket to delimiter stack and add a text node to block's children.\nvar parseOpenBracket = function(block) {\n var startpos = this.pos;\n this.pos += 1;\n\n var node = text(\"[\");\n block.appendChild(node);\n\n // Add entry to stack for this opener\n this.addBracket(node, startpos, false);\n return true;\n};\n\n// IF next character is [, and ! delimiter to delimiter stack and\n// add a text node to block's children. Otherwise just add a text node.\nvar parseBang = function(block) {\n var startpos = this.pos;\n this.pos += 1;\n if (this.peek() === C_OPEN_BRACKET) {\n this.pos += 1;\n\n var node = text(\"![\");\n block.appendChild(node);\n\n // Add entry to stack for this opener\n this.addBracket(node, startpos + 1, true);\n } else {\n block.appendChild(text(\"!\"));\n }\n return true;\n};\n\n// Try to match close bracket against an opening in the delimiter\n// stack. Add either a link or image, or a plain [ character,\n// to block's children. If there is a matching delimiter,\n// remove it from the delimiter stack.\nvar parseCloseBracket = function(block) {\n var startpos;\n var is_image;\n var dest;\n var title;\n var matched = false;\n var reflabel;\n var opener;\n\n this.pos += 1;\n startpos = this.pos;\n\n // get last [ or ![\n opener = this.brackets;\n\n if (opener === null) {\n // no matched opener, just return a literal\n block.appendChild(text(\"]\"));\n return true;\n }\n\n if (!opener.active) {\n // no matched opener, just return a literal\n block.appendChild(text(\"]\"));\n // take opener off brackets stack\n this.removeBracket();\n return true;\n }\n\n // If we got here, open is a potential opener\n is_image = opener.image;\n\n // Check to see if we have a link/image\n\n var savepos = this.pos;\n\n // Inline link?\n if (this.peek() === C_OPEN_PAREN) {\n this.pos++;\n if (\n this.spnl() &&\n (dest = this.parseLinkDestination()) !== null &&\n this.spnl() &&\n // make sure there's a space before the title:\n ((reWhitespaceChar.test(this.subject.charAt(this.pos - 1)) &&\n (title = this.parseLinkTitle())) ||\n true) &&\n this.spnl() &&\n this.peek() === C_CLOSE_PAREN\n ) {\n this.pos += 1;\n matched = true;\n } else {\n this.pos = savepos;\n }\n }\n\n if (!matched) {\n // Next, see if there's a link label\n var beforelabel = this.pos;\n var n = this.parseLinkLabel();\n if (n > 2) {\n reflabel = this.subject.slice(beforelabel, beforelabel + n);\n } else if (!opener.bracketAfter) {\n // Empty or missing second label means to use the first label as the reference.\n // The reference must not contain a bracket. If we know there's a bracket, we don't even bother checking it.\n reflabel = this.subject.slice(opener.index, startpos);\n }\n if (n === 0) {\n // If shortcut reference link, rewind before spaces we skipped.\n this.pos = savepos;\n }\n\n if (reflabel) {\n // lookup rawlabel in refmap\n var link = this.refmap[normalizeReference(reflabel)];\n if (link) {\n dest = link.destination;\n title = link.title;\n matched = true;\n }\n }\n }\n\n if (matched) {\n var node = new Node(is_image ? \"image\" : \"link\");\n node._destination = dest;\n node._title = title || \"\";\n\n var tmp, next;\n tmp = opener.node._next;\n while (tmp) {\n next = tmp._next;\n tmp.unlink();\n node.appendChild(tmp);\n tmp = next;\n }\n block.appendChild(node);\n this.processEmphasis(opener.previousDelimiter);\n this.removeBracket();\n opener.node.unlink();\n\n // We remove this bracket and processEmphasis will remove later delimiters.\n // Now, for a link, we also deactivate earlier link openers.\n // (no links in links)\n if (!is_image) {\n opener = this.brackets;\n while (opener !== null) {\n if (!opener.image) {\n opener.active = false; // deactivate this opener\n }\n opener = opener.previous;\n }\n }\n\n return true;\n } else {\n // no match\n\n this.removeBracket(); // remove this opener from stack\n this.pos = startpos;\n block.appendChild(text(\"]\"));\n return true;\n }\n};\n\nvar addBracket = function(node, index, image) {\n if (this.brackets !== null) {\n this.brackets.bracketAfter = true;\n }\n this.brackets = {\n node: node,\n previous: this.brackets,\n previousDelimiter: this.delimiters,\n index: index,\n image: image,\n active: true\n };\n};\n\nvar removeBracket = function() {\n this.brackets = this.brackets.previous;\n};\n\n// Attempt to parse an entity.\nvar parseEntity = function(block) {\n var m;\n if ((m = this.match(reEntityHere))) {\n block.appendChild(text(decodeHTML(m)));\n return true;\n } else {\n return false;\n }\n};\n\n// Parse a run of ordinary characters, or a single character with\n// a special meaning in markdown, as a plain string.\nvar parseString = function(block) {\n var m;\n if ((m = this.match(reMain))) {\n if (this.options.smart) {\n block.appendChild(\n text(\n m\n .replace(reEllipses, \"\\u2026\")\n .replace(reDash, function(chars) {\n var enCount = 0;\n var emCount = 0;\n if (chars.length % 3 === 0) {\n // If divisible by 3, use all em dashes\n emCount = chars.length / 3;\n } else if (chars.length % 2 === 0) {\n // If divisible by 2, use all en dashes\n enCount = chars.length / 2;\n } else if (chars.length % 3 === 2) {\n // If 2 extra dashes, use en dash for last 2; em dashes for rest\n enCount = 1;\n emCount = (chars.length - 2) / 3;\n } else {\n // Use en dashes for last 4 hyphens; em dashes for rest\n enCount = 2;\n emCount = (chars.length - 4) / 3;\n }\n return (\n \"\\u2014\".repeat(emCount) +\n \"\\u2013\".repeat(enCount)\n );\n })\n )\n );\n } else {\n block.appendChild(text(m));\n }\n return true;\n } else {\n return false;\n }\n};\n\n// Parse a newline. If it was preceded by two spaces, return a hard\n// line break; otherwise a soft line break.\nvar parseNewline = function(block) {\n this.pos += 1; // assume we're at a \\n\n // check previous node for trailing spaces\n var lastc = block._lastChild;\n if (\n lastc &&\n lastc.type === \"text\" &&\n lastc._literal[lastc._literal.length - 1] === \" \"\n ) {\n var hardbreak = lastc._literal[lastc._literal.length - 2] === \" \";\n lastc._literal = lastc._literal.replace(reFinalSpace, \"\");\n block.appendChild(new Node(hardbreak ? \"linebreak\" : \"softbreak\"));\n } else {\n block.appendChild(new Node(\"softbreak\"));\n }\n this.match(reInitialSpace); // gobble leading spaces in next line\n return true;\n};\n\n// Attempt to parse a link reference, modifying refmap.\nvar parseReference = function(s, refmap) {\n this.subject = s;\n this.pos = 0;\n var rawlabel;\n var dest;\n var title;\n var matchChars;\n var startpos = this.pos;\n\n // label:\n matchChars = this.parseLinkLabel();\n if (matchChars === 0) {\n return 0;\n } else {\n rawlabel = this.subject.substr(0, matchChars);\n }\n\n // colon:\n if (this.peek() === C_COLON) {\n this.pos++;\n } else {\n this.pos = startpos;\n return 0;\n }\n\n // link url\n this.spnl();\n\n dest = this.parseLinkDestination();\n if (dest === null) {\n this.pos = startpos;\n return 0;\n }\n\n var beforetitle = this.pos;\n this.spnl();\n if (this.pos !== beforetitle) {\n title = this.parseLinkTitle();\n }\n if (title === null) {\n title = \"\";\n // rewind before spaces\n this.pos = beforetitle;\n }\n\n // make sure we're at line end:\n var atLineEnd = true;\n if (this.match(reSpaceAtEndOfLine) === null) {\n if (title === \"\") {\n atLineEnd = false;\n } else {\n // the potential title we found is not at the line end,\n // but it could still be a legal link reference if we\n // discard the title\n title = \"\";\n // rewind before spaces\n this.pos = beforetitle;\n // and instead check if the link URL is at the line end\n atLineEnd = this.match(reSpaceAtEndOfLine) !== null;\n }\n }\n\n if (!atLineEnd) {\n this.pos = startpos;\n return 0;\n }\n\n var normlabel = normalizeReference(rawlabel);\n if (normlabel === \"\") {\n // label must contain non-whitespace characters\n this.pos = startpos;\n return 0;\n }\n\n if (!refmap[normlabel]) {\n refmap[normlabel] = { destination: dest, title: title };\n }\n return this.pos - startpos;\n};\n\n// Parse the next inline element in subject, advancing subject position.\n// On success, add the result to block's children and return true.\n// On failure, return false.\nvar parseInline = function(block) {\n var res = false;\n var c = this.peek();\n if (c === -1) {\n return false;\n }\n switch (c) {\n case C_NEWLINE:\n res = this.parseNewline(block);\n break;\n case C_BACKSLASH:\n res = this.parseBackslash(block);\n break;\n case C_BACKTICK:\n res = this.parseBackticks(block);\n break;\n case C_ASTERISK:\n case C_UNDERSCORE:\n res = this.handleDelim(c, block);\n break;\n case C_SINGLEQUOTE:\n case C_DOUBLEQUOTE:\n res = this.options.smart && this.handleDelim(c, block);\n break;\n case C_OPEN_BRACKET:\n res = this.parseOpenBracket(block);\n break;\n case C_BANG:\n res = this.parseBang(block);\n break;\n case C_CLOSE_BRACKET:\n res = this.parseCloseBracket(block);\n break;\n case C_LESSTHAN:\n res = this.parseAutolink(block) || this.parseHtmlTag(block);\n break;\n case C_AMPERSAND:\n res = this.parseEntity(block);\n break;\n default:\n res = this.parseString(block);\n break;\n }\n if (!res) {\n this.pos += 1;\n block.appendChild(text(fromCodePoint(c)));\n }\n\n return true;\n};\n\n// Parse string content in block into inline children,\n// using refmap to resolve references.\nvar parseInlines = function(block) {\n this.subject = block._string_content.trim();\n this.pos = 0;\n this.delimiters = null;\n this.brackets = null;\n while (this.parseInline(block)) {}\n block._string_content = null; // allow raw string to be garbage collected\n this.processEmphasis(null);\n};\n\n// The InlineParser object.\nfunction InlineParser(options) {\n return {\n subject: \"\",\n delimiters: null, // used by handleDelim method\n brackets: null,\n pos: 0,\n refmap: {},\n match: match,\n peek: peek,\n spnl: spnl,\n parseBackticks: parseBackticks,\n parseBackslash: parseBackslash,\n parseAutolink: parseAutolink,\n parseHtmlTag: parseHtmlTag,\n scanDelims: scanDelims,\n handleDelim: handleDelim,\n parseLinkTitle: parseLinkTitle,\n parseLinkDestination: parseLinkDestination,\n parseLinkLabel: parseLinkLabel,\n parseOpenBracket: parseOpenBracket,\n parseBang: parseBang,\n parseCloseBracket: parseCloseBracket,\n addBracket: addBracket,\n removeBracket: removeBracket,\n parseEntity: parseEntity,\n parseString: parseString,\n parseNewline: parseNewline,\n parseReference: parseReference,\n parseInline: parseInline,\n processEmphasis: processEmphasis,\n removeDelimiter: removeDelimiter,\n options: options || {},\n parse: parseInlines\n };\n}\n\nexport default InlineParser;\n","\"use strict\";\n\nimport Node from \"./node.js\";\nimport { unescapeString, OPENTAG, CLOSETAG } from \"./common.js\";\nimport InlineParser from \"./inlines.js\";\n\nvar CODE_INDENT = 4;\n\nvar C_TAB = 9;\nvar C_NEWLINE = 10;\nvar C_GREATERTHAN = 62;\nvar C_LESSTHAN = 60;\nvar C_SPACE = 32;\nvar C_OPEN_BRACKET = 91;\n\nvar reHtmlBlockOpen = [\n /./, // dummy for 0\n /^<(?:script|pre|textarea|style)(?:\\s|>|$)/i,\n /^/,\n /\\?>/,\n />/,\n /\\]\\]>/\n];\n\nvar reThematicBreak = /^(?:\\*[ \\t]*){3,}$|^(?:_[ \\t]*){3,}$|^(?:-[ \\t]*){3,}$/;\n\nvar reMaybeSpecial = /^[#`~*+_=<>0-9-]/;\n\nvar reNonSpace = /[^ \\t\\f\\v\\r\\n]/;\n\nvar reBulletListMarker = /^[*+-]/;\n\nvar reOrderedListMarker = /^(\\d{1,9})([.)])/;\n\nvar reATXHeadingMarker = /^#{1,6}(?:[ \\t]+|$)/;\n\nvar reCodeFence = /^`{3,}(?!.*`)|^~{3,}/;\n\nvar reClosingCodeFence = /^(?:`{3,}|~{3,})(?= *$)/;\n\nvar reSetextHeadingLine = /^(?:=+|-+)[ \\t]*$/;\n\nvar reLineEnding = /\\r\\n|\\n|\\r/;\n\n// Returns true if string contains only space characters.\nvar isBlank = function(s) {\n return !reNonSpace.test(s);\n};\n\nvar isSpaceOrTab = function(c) {\n return c === C_SPACE || c === C_TAB;\n};\n\nvar peek = function(ln, pos) {\n if (pos < ln.length) {\n return ln.charCodeAt(pos);\n } else {\n return -1;\n }\n};\n\n// DOC PARSER\n\n// These are methods of a Parser object, defined below.\n\n// Returns true if block ends with a blank line, descending if needed\n// into lists and sublists.\nvar endsWithBlankLine = function(block) {\n while (block) {\n if (block._lastLineBlank) {\n return true;\n }\n var t = block.type;\n if (!block._lastLineChecked && (t === \"list\" || t === \"item\")) {\n block._lastLineChecked = true;\n block = block._lastChild;\n } else {\n block._lastLineChecked = true;\n break;\n }\n }\n return false;\n};\n\n// Add a line to the block at the tip. We assume the tip\n// can accept lines -- that check should be done before calling this.\nvar addLine = function() {\n if (this.partiallyConsumedTab) {\n this.offset += 1; // skip over tab\n // add space characters:\n var charsToTab = 4 - (this.column % 4);\n this.tip._string_content += \" \".repeat(charsToTab);\n }\n this.tip._string_content += this.currentLine.slice(this.offset) + \"\\n\";\n};\n\n// Add block of type tag as a child of the tip. If the tip can't\n// accept children, close and finalize it and try its parent,\n// and so on til we find a block that can accept children.\nvar addChild = function(tag, offset) {\n while (!this.blocks[this.tip.type].canContain(tag)) {\n this.finalize(this.tip, this.lineNumber - 1);\n }\n\n var column_number = offset + 1; // offset 0 = column 1\n var newBlock = new Node(tag, [\n [this.lineNumber, column_number],\n [0, 0]\n ]);\n newBlock._string_content = \"\";\n this.tip.appendChild(newBlock);\n this.tip = newBlock;\n return newBlock;\n};\n\n// Parse a list marker and return data on the marker (type,\n// start, delimiter, bullet character, padding) or null.\nvar parseListMarker = function(parser, container) {\n var rest = parser.currentLine.slice(parser.nextNonspace);\n var match;\n var nextc;\n var spacesStartCol;\n var spacesStartOffset;\n var data = {\n type: null,\n tight: true, // lists are tight by default\n bulletChar: null,\n start: null,\n delimiter: null,\n padding: null,\n markerOffset: parser.indent\n };\n if (parser.indent >= 4) {\n return null;\n }\n if ((match = rest.match(reBulletListMarker))) {\n data.type = \"bullet\";\n data.bulletChar = match[0][0];\n } else if (\n (match = rest.match(reOrderedListMarker)) &&\n (container.type !== \"paragraph\" || match[1] == 1)\n ) {\n data.type = \"ordered\";\n data.start = parseInt(match[1]);\n data.delimiter = match[2];\n } else {\n return null;\n }\n // make sure we have spaces after\n nextc = peek(parser.currentLine, parser.nextNonspace + match[0].length);\n if (!(nextc === -1 || nextc === C_TAB || nextc === C_SPACE)) {\n return null;\n }\n\n // if it interrupts paragraph, make sure first line isn't blank\n if (\n container.type === \"paragraph\" &&\n !parser.currentLine\n .slice(parser.nextNonspace + match[0].length)\n .match(reNonSpace)\n ) {\n return null;\n }\n\n // we've got a match! advance offset and calculate padding\n parser.advanceNextNonspace(); // to start of marker\n parser.advanceOffset(match[0].length, true); // to end of marker\n spacesStartCol = parser.column;\n spacesStartOffset = parser.offset;\n do {\n parser.advanceOffset(1, true);\n nextc = peek(parser.currentLine, parser.offset);\n } while (parser.column - spacesStartCol < 5 && isSpaceOrTab(nextc));\n var blank_item = peek(parser.currentLine, parser.offset) === -1;\n var spaces_after_marker = parser.column - spacesStartCol;\n if (spaces_after_marker >= 5 || spaces_after_marker < 1 || blank_item) {\n data.padding = match[0].length + 1;\n parser.column = spacesStartCol;\n parser.offset = spacesStartOffset;\n if (isSpaceOrTab(peek(parser.currentLine, parser.offset))) {\n parser.advanceOffset(1, true);\n }\n } else {\n data.padding = match[0].length + spaces_after_marker;\n }\n return data;\n};\n\n// Returns true if the two list items are of the same type,\n// with the same delimiter and bullet character. This is used\n// in agglomerating list items into lists.\nvar listsMatch = function(list_data, item_data) {\n return (\n list_data.type === item_data.type &&\n list_data.delimiter === item_data.delimiter &&\n list_data.bulletChar === item_data.bulletChar\n );\n};\n\n// Finalize and close any unmatched blocks.\nvar closeUnmatchedBlocks = function() {\n if (!this.allClosed) {\n // finalize any blocks not matched\n while (this.oldtip !== this.lastMatchedContainer) {\n var parent = this.oldtip._parent;\n this.finalize(this.oldtip, this.lineNumber - 1);\n this.oldtip = parent;\n }\n this.allClosed = true;\n }\n};\n\n// 'finalize' is run when the block is closed.\n// 'continue' is run to check whether the block is continuing\n// at a certain line and offset (e.g. whether a block quote\n// contains a `>`. It returns 0 for matched, 1 for not matched,\n// and 2 for \"we've dealt with this line completely, go to next.\"\nvar blocks = {\n document: {\n continue: function() {\n return 0;\n },\n finalize: function() {\n return;\n },\n canContain: function(t) {\n return t !== \"item\";\n },\n acceptsLines: false\n },\n list: {\n continue: function() {\n return 0;\n },\n finalize: function(parser, block) {\n var item = block._firstChild;\n while (item) {\n // check for non-final list item ending with blank line:\n if (endsWithBlankLine(item) && item._next) {\n block._listData.tight = false;\n break;\n }\n // recurse into children of list item, to see if there are\n // spaces between any of them:\n var subitem = item._firstChild;\n while (subitem) {\n if (\n endsWithBlankLine(subitem) &&\n (item._next || subitem._next)\n ) {\n block._listData.tight = false;\n break;\n }\n subitem = subitem._next;\n }\n item = item._next;\n }\n },\n canContain: function(t) {\n return t === \"item\";\n },\n acceptsLines: false\n },\n block_quote: {\n continue: function(parser) {\n var ln = parser.currentLine;\n if (\n !parser.indented &&\n peek(ln, parser.nextNonspace) === C_GREATERTHAN\n ) {\n parser.advanceNextNonspace();\n parser.advanceOffset(1, false);\n if (isSpaceOrTab(peek(ln, parser.offset))) {\n parser.advanceOffset(1, true);\n }\n } else {\n return 1;\n }\n return 0;\n },\n finalize: function() {\n return;\n },\n canContain: function(t) {\n return t !== \"item\";\n },\n acceptsLines: false\n },\n item: {\n continue: function(parser, container) {\n if (parser.blank) {\n if (container._firstChild == null) {\n // Blank line after empty list item\n return 1;\n } else {\n parser.advanceNextNonspace();\n }\n } else if (\n parser.indent >=\n container._listData.markerOffset + container._listData.padding\n ) {\n parser.advanceOffset(\n container._listData.markerOffset +\n container._listData.padding,\n true\n );\n } else {\n return 1;\n }\n return 0;\n },\n finalize: function() {\n return;\n },\n canContain: function(t) {\n return t !== \"item\";\n },\n acceptsLines: false\n },\n heading: {\n continue: function() {\n // a heading can never container > 1 line, so fail to match:\n return 1;\n },\n finalize: function() {\n return;\n },\n canContain: function() {\n return false;\n },\n acceptsLines: false\n },\n thematic_break: {\n continue: function() {\n // a thematic break can never container > 1 line, so fail to match:\n return 1;\n },\n finalize: function() {\n return;\n },\n canContain: function() {\n return false;\n },\n acceptsLines: false\n },\n code_block: {\n continue: function(parser, container) {\n var ln = parser.currentLine;\n var indent = parser.indent;\n if (container._isFenced) {\n // fenced\n var match =\n indent <= 3 &&\n ln.charAt(parser.nextNonspace) === container._fenceChar &&\n ln.slice(parser.nextNonspace).match(reClosingCodeFence);\n if (match && match[0].length >= container._fenceLength) {\n // closing fence - we're at end of line, so we can return\n parser.lastLineLength =\n parser.offset + indent + match[0].length;\n parser.finalize(container, parser.lineNumber);\n return 2;\n } else {\n // skip optional spaces of fence offset\n var i = container._fenceOffset;\n while (i > 0 && isSpaceOrTab(peek(ln, parser.offset))) {\n parser.advanceOffset(1, true);\n i--;\n }\n }\n } else {\n // indented\n if (indent >= CODE_INDENT) {\n parser.advanceOffset(CODE_INDENT, true);\n } else if (parser.blank) {\n parser.advanceNextNonspace();\n } else {\n return 1;\n }\n }\n return 0;\n },\n finalize: function(parser, block) {\n if (block._isFenced) {\n // fenced\n // first line becomes info string\n var content = block._string_content;\n var newlinePos = content.indexOf(\"\\n\");\n var firstLine = content.slice(0, newlinePos);\n var rest = content.slice(newlinePos + 1);\n block.info = unescapeString(firstLine.trim());\n block._literal = rest;\n } else {\n // indented\n block._literal = block._string_content.replace(\n /(\\n *)+$/,\n \"\\n\"\n );\n }\n block._string_content = null; // allow GC\n },\n canContain: function() {\n return false;\n },\n acceptsLines: true\n },\n html_block: {\n continue: function(parser, container) {\n return parser.blank &&\n (container._htmlBlockType === 6 ||\n container._htmlBlockType === 7)\n ? 1\n : 0;\n },\n finalize: function(parser, block) {\n block._literal = block._string_content.replace(/(\\n *)+$/, \"\");\n block._string_content = null; // allow GC\n },\n canContain: function() {\n return false;\n },\n acceptsLines: true\n },\n paragraph: {\n continue: function(parser) {\n return parser.blank ? 1 : 0;\n },\n finalize: function(parser, block) {\n var pos;\n var hasReferenceDefs = false;\n\n // try parsing the beginning as link reference definitions:\n while (\n peek(block._string_content, 0) === C_OPEN_BRACKET &&\n (pos = parser.inlineParser.parseReference(\n block._string_content,\n parser.refmap\n ))\n ) {\n block._string_content = block._string_content.slice(pos);\n hasReferenceDefs = true;\n }\n if (hasReferenceDefs && isBlank(block._string_content)) {\n block.unlink();\n }\n },\n canContain: function() {\n return false;\n },\n acceptsLines: true\n }\n};\n\n// block start functions. Return values:\n// 0 = no match\n// 1 = matched container, keep going\n// 2 = matched leaf, no more block starts\nvar blockStarts = [\n // block quote\n function(parser) {\n if (\n !parser.indented &&\n peek(parser.currentLine, parser.nextNonspace) === C_GREATERTHAN\n ) {\n parser.advanceNextNonspace();\n parser.advanceOffset(1, false);\n // optional following space\n if (isSpaceOrTab(peek(parser.currentLine, parser.offset))) {\n parser.advanceOffset(1, true);\n }\n parser.closeUnmatchedBlocks();\n parser.addChild(\"block_quote\", parser.nextNonspace);\n return 1;\n } else {\n return 0;\n }\n },\n\n // ATX heading\n function(parser) {\n var match;\n if (\n !parser.indented &&\n (match = parser.currentLine\n .slice(parser.nextNonspace)\n .match(reATXHeadingMarker))\n ) {\n parser.advanceNextNonspace();\n parser.advanceOffset(match[0].length, false);\n parser.closeUnmatchedBlocks();\n var container = parser.addChild(\"heading\", parser.nextNonspace);\n container.level = match[0].trim().length; // number of #s\n // remove trailing ###s:\n container._string_content = parser.currentLine\n .slice(parser.offset)\n .replace(/^[ \\t]*#+[ \\t]*$/, \"\")\n .replace(/[ \\t]+#+[ \\t]*$/, \"\");\n parser.advanceOffset(parser.currentLine.length - parser.offset);\n return 2;\n } else {\n return 0;\n }\n },\n\n // Fenced code block\n function(parser) {\n var match;\n if (\n !parser.indented &&\n (match = parser.currentLine\n .slice(parser.nextNonspace)\n .match(reCodeFence))\n ) {\n var fenceLength = match[0].length;\n parser.closeUnmatchedBlocks();\n var container = parser.addChild(\"code_block\", parser.nextNonspace);\n container._isFenced = true;\n container._fenceLength = fenceLength;\n container._fenceChar = match[0][0];\n container._fenceOffset = parser.indent;\n parser.advanceNextNonspace();\n parser.advanceOffset(fenceLength, false);\n return 2;\n } else {\n return 0;\n }\n },\n\n // HTML block\n function(parser, container) {\n if (\n !parser.indented &&\n peek(parser.currentLine, parser.nextNonspace) === C_LESSTHAN\n ) {\n var s = parser.currentLine.slice(parser.nextNonspace);\n var blockType;\n\n for (blockType = 1; blockType <= 7; blockType++) {\n if (\n reHtmlBlockOpen[blockType].test(s) &&\n (blockType < 7 || (container.type !== \"paragraph\" &&\n !(!parser.allClosed && !parser.blank &&\n parser.tip.type === \"paragraph\") // maybe lazy\n ))\n ) {\n parser.closeUnmatchedBlocks();\n // We don't adjust parser.offset;\n // spaces are part of the HTML block:\n var b = parser.addChild(\"html_block\", parser.offset);\n b._htmlBlockType = blockType;\n return 2;\n }\n }\n }\n\n return 0;\n },\n\n // Setext heading\n function(parser, container) {\n var match;\n if (\n !parser.indented &&\n container.type === \"paragraph\" &&\n (match = parser.currentLine\n .slice(parser.nextNonspace)\n .match(reSetextHeadingLine))\n ) {\n parser.closeUnmatchedBlocks();\n // resolve reference link definitiosn\n var pos;\n while (\n peek(container._string_content, 0) === C_OPEN_BRACKET &&\n (pos = parser.inlineParser.parseReference(\n container._string_content,\n parser.refmap\n ))\n ) {\n container._string_content = container._string_content.slice(\n pos\n );\n }\n if (container._string_content.length > 0) {\n var heading = new Node(\"heading\", container.sourcepos);\n heading.level = match[0][0] === \"=\" ? 1 : 2;\n heading._string_content = container._string_content;\n container.insertAfter(heading);\n container.unlink();\n parser.tip = heading;\n parser.advanceOffset(\n parser.currentLine.length - parser.offset,\n false\n );\n return 2;\n } else {\n return 0;\n }\n } else {\n return 0;\n }\n },\n\n // thematic break\n function(parser) {\n if (\n !parser.indented &&\n reThematicBreak.test(parser.currentLine.slice(parser.nextNonspace))\n ) {\n parser.closeUnmatchedBlocks();\n parser.addChild(\"thematic_break\", parser.nextNonspace);\n parser.advanceOffset(\n parser.currentLine.length - parser.offset,\n false\n );\n return 2;\n } else {\n return 0;\n }\n },\n\n // list item\n function(parser, container) {\n var data;\n\n if (\n (!parser.indented || container.type === \"list\") &&\n (data = parseListMarker(parser, container))\n ) {\n parser.closeUnmatchedBlocks();\n\n // add the list if needed\n if (\n parser.tip.type !== \"list\" ||\n !listsMatch(container._listData, data)\n ) {\n container = parser.addChild(\"list\", parser.nextNonspace);\n container._listData = data;\n }\n\n // add the list item\n container = parser.addChild(\"item\", parser.nextNonspace);\n container._listData = data;\n return 1;\n } else {\n return 0;\n }\n },\n\n // indented code block\n function(parser) {\n if (\n parser.indented &&\n parser.tip.type !== \"paragraph\" &&\n !parser.blank\n ) {\n // indented code\n parser.advanceOffset(CODE_INDENT, true);\n parser.closeUnmatchedBlocks();\n parser.addChild(\"code_block\", parser.offset);\n return 2;\n } else {\n return 0;\n }\n }\n];\n\nvar advanceOffset = function(count, columns) {\n var currentLine = this.currentLine;\n var charsToTab, charsToAdvance;\n var c;\n while (count > 0 && (c = currentLine[this.offset])) {\n if (c === \"\\t\") {\n charsToTab = 4 - (this.column % 4);\n if (columns) {\n this.partiallyConsumedTab = charsToTab > count;\n charsToAdvance = charsToTab > count ? count : charsToTab;\n this.column += charsToAdvance;\n this.offset += this.partiallyConsumedTab ? 0 : 1;\n count -= charsToAdvance;\n } else {\n this.partiallyConsumedTab = false;\n this.column += charsToTab;\n this.offset += 1;\n count -= 1;\n }\n } else {\n this.partiallyConsumedTab = false;\n this.offset += 1;\n this.column += 1; // assume ascii; block starts are ascii\n count -= 1;\n }\n }\n};\n\nvar advanceNextNonspace = function() {\n this.offset = this.nextNonspace;\n this.column = this.nextNonspaceColumn;\n this.partiallyConsumedTab = false;\n};\n\nvar findNextNonspace = function() {\n var currentLine = this.currentLine;\n var i = this.offset;\n var cols = this.column;\n var c;\n\n while ((c = currentLine.charAt(i)) !== \"\") {\n if (c === \" \") {\n i++;\n cols++;\n } else if (c === \"\\t\") {\n i++;\n cols += 4 - (cols % 4);\n } else {\n break;\n }\n }\n this.blank = c === \"\\n\" || c === \"\\r\" || c === \"\";\n this.nextNonspace = i;\n this.nextNonspaceColumn = cols;\n this.indent = this.nextNonspaceColumn - this.column;\n this.indented = this.indent >= CODE_INDENT;\n};\n\n// Analyze a line of text and update the document appropriately.\n// We parse markdown text by calling this on each line of input,\n// then finalizing the document.\nvar incorporateLine = function(ln) {\n var all_matched = true;\n var t;\n\n var container = this.doc;\n this.oldtip = this.tip;\n this.offset = 0;\n this.column = 0;\n this.blank = false;\n this.partiallyConsumedTab = false;\n this.lineNumber += 1;\n\n // replace NUL characters for security\n if (ln.indexOf(\"\\u0000\") !== -1) {\n ln = ln.replace(/\\0/g, \"\\uFFFD\");\n }\n\n this.currentLine = ln;\n\n // For each containing block, try to parse the associated line start.\n // Bail out on failure: container will point to the last matching block.\n // Set all_matched to false if not all containers match.\n var lastChild;\n while ((lastChild = container._lastChild) && lastChild._open) {\n container = lastChild;\n\n this.findNextNonspace();\n\n switch (this.blocks[container.type].continue(this, container)) {\n case 0: // we've matched, keep going\n break;\n case 1: // we've failed to match a block\n all_matched = false;\n break;\n case 2: // we've hit end of line for fenced code close and can return\n return;\n default:\n throw \"continue returned illegal value, must be 0, 1, or 2\";\n }\n if (!all_matched) {\n container = container._parent; // back up to last matching block\n break;\n }\n }\n\n this.allClosed = container === this.oldtip;\n this.lastMatchedContainer = container;\n\n var matchedLeaf =\n container.type !== \"paragraph\" && blocks[container.type].acceptsLines;\n var starts = this.blockStarts;\n var startsLen = starts.length;\n // Unless last matched container is a code block, try new container starts,\n // adding children to the last matched container:\n while (!matchedLeaf) {\n this.findNextNonspace();\n\n // this is a little performance optimization:\n if (\n !this.indented &&\n !reMaybeSpecial.test(ln.slice(this.nextNonspace))\n ) {\n this.advanceNextNonspace();\n break;\n }\n\n var i = 0;\n while (i < startsLen) {\n var res = starts[i](this, container);\n if (res === 1) {\n container = this.tip;\n break;\n } else if (res === 2) {\n container = this.tip;\n matchedLeaf = true;\n break;\n } else {\n i++;\n }\n }\n\n if (i === startsLen) {\n // nothing matched\n this.advanceNextNonspace();\n break;\n }\n }\n\n // What remains at the offset is a text line. Add the text to the\n // appropriate container.\n\n // First check for a lazy paragraph continuation:\n if (!this.allClosed && !this.blank && this.tip.type === \"paragraph\") {\n // lazy paragraph continuation\n this.addLine();\n } else {\n // not a lazy continuation\n\n // finalize any blocks not matched\n this.closeUnmatchedBlocks();\n if (this.blank && container.lastChild) {\n container.lastChild._lastLineBlank = true;\n }\n\n t = container.type;\n\n // Block quote lines are never blank as they start with >\n // and we don't count blanks in fenced code for purposes of tight/loose\n // lists or breaking out of lists. We also don't set _lastLineBlank\n // on an empty list item, or if we just closed a fenced block.\n var lastLineBlank =\n this.blank &&\n !(\n t === \"block_quote\" ||\n (t === \"code_block\" && container._isFenced) ||\n (t === \"item\" &&\n !container._firstChild &&\n container.sourcepos[0][0] === this.lineNumber)\n );\n\n // propagate lastLineBlank up through parents:\n var cont = container;\n while (cont) {\n cont._lastLineBlank = lastLineBlank;\n cont = cont._parent;\n }\n\n if (this.blocks[t].acceptsLines) {\n this.addLine();\n // if HtmlBlock, check for end condition\n if (\n t === \"html_block\" &&\n container._htmlBlockType >= 1 &&\n container._htmlBlockType <= 5 &&\n reHtmlBlockClose[container._htmlBlockType].test(\n this.currentLine.slice(this.offset)\n )\n ) {\n this.lastLineLength = ln.length;\n this.finalize(container, this.lineNumber);\n }\n } else if (this.offset < ln.length && !this.blank) {\n // create paragraph container for line\n container = this.addChild(\"paragraph\", this.offset);\n this.advanceNextNonspace();\n this.addLine();\n }\n }\n this.lastLineLength = ln.length;\n};\n\n// Finalize a block. Close it and do any necessary postprocessing,\n// e.g. creating string_content from strings, setting the 'tight'\n// or 'loose' status of a list, and parsing the beginnings\n// of paragraphs for reference definitions. Reset the tip to the\n// parent of the closed block.\nvar finalize = function(block, lineNumber) {\n var above = block._parent;\n block._open = false;\n block.sourcepos[1] = [lineNumber, this.lastLineLength];\n\n this.blocks[block.type].finalize(this, block);\n\n this.tip = above;\n};\n\n// Walk through a block & children recursively, parsing string content\n// into inline content where appropriate.\nvar processInlines = function(block) {\n var node, event, t;\n var walker = block.walker();\n this.inlineParser.refmap = this.refmap;\n this.inlineParser.options = this.options;\n while ((event = walker.next())) {\n node = event.node;\n t = node.type;\n if (!event.entering && (t === \"paragraph\" || t === \"heading\")) {\n this.inlineParser.parse(node);\n }\n }\n};\n\nvar Document = function() {\n var doc = new Node(\"document\", [\n [1, 1],\n [0, 0]\n ]);\n return doc;\n};\n\n// The main parsing function. Returns a parsed document AST.\nvar parse = function(input) {\n this.doc = new Document();\n this.tip = this.doc;\n this.refmap = {};\n this.lineNumber = 0;\n this.lastLineLength = 0;\n this.offset = 0;\n this.column = 0;\n this.lastMatchedContainer = this.doc;\n this.currentLine = \"\";\n if (this.options.time) {\n console.time(\"preparing input\");\n }\n var lines = input.split(reLineEnding);\n var len = lines.length;\n if (input.charCodeAt(input.length - 1) === C_NEWLINE) {\n // ignore last blank line created by final newline\n len -= 1;\n }\n if (this.options.time) {\n console.timeEnd(\"preparing input\");\n }\n if (this.options.time) {\n console.time(\"block parsing\");\n }\n for (var i = 0; i < len; i++) {\n this.incorporateLine(lines[i]);\n }\n while (this.tip) {\n this.finalize(this.tip, len);\n }\n if (this.options.time) {\n console.timeEnd(\"block parsing\");\n }\n if (this.options.time) {\n console.time(\"inline parsing\");\n }\n this.processInlines(this.doc);\n if (this.options.time) {\n console.timeEnd(\"inline parsing\");\n }\n return this.doc;\n};\n\n// The Parser object.\nfunction Parser(options) {\n return {\n doc: new Document(),\n blocks: blocks,\n blockStarts: blockStarts,\n tip: this.doc,\n oldtip: this.doc,\n currentLine: \"\",\n lineNumber: 0,\n offset: 0,\n column: 0,\n nextNonspace: 0,\n nextNonspaceColumn: 0,\n indent: 0,\n indented: false,\n blank: false,\n partiallyConsumedTab: false,\n allClosed: true,\n lastMatchedContainer: this.doc,\n refmap: {},\n lastLineLength: 0,\n inlineParser: new InlineParser(options),\n findNextNonspace: findNextNonspace,\n advanceOffset: advanceOffset,\n advanceNextNonspace: advanceNextNonspace,\n addLine: addLine,\n addChild: addChild,\n incorporateLine: incorporateLine,\n finalize: finalize,\n processInlines: processInlines,\n closeUnmatchedBlocks: closeUnmatchedBlocks,\n parse: parse,\n options: options || {}\n };\n}\n\nexport default Parser;\n","\"use strict\";\n\nfunction Renderer() {}\n\n/**\n * Walks the AST and calls member methods for each Node type.\n *\n * @param ast {Node} The root of the abstract syntax tree.\n */\nfunction render(ast) {\n var walker = ast.walker(),\n event,\n type;\n\n this.buffer = \"\";\n this.lastOut = \"\\n\";\n\n while ((event = walker.next())) {\n type = event.node.type;\n if (this[type]) {\n this[type](event.node, event.entering);\n }\n }\n return this.buffer;\n}\n\n/**\n * Concatenate a literal string to the buffer.\n *\n * @param str {String} The string to concatenate.\n */\nfunction lit(str) {\n this.buffer += str;\n this.lastOut = str;\n}\n\n/**\n * Output a newline to the buffer.\n */\nfunction cr() {\n if (this.lastOut !== \"\\n\") {\n this.lit(\"\\n\");\n }\n}\n\n/**\n * Concatenate a string to the buffer possibly escaping the content.\n *\n * Concrete renderer implementations should override this method.\n *\n * @param str {String} The string to concatenate.\n */\nfunction out(str) {\n this.lit(str);\n}\n\n/**\n * Escape a string for the target renderer.\n *\n * Abstract function that should be implemented by concrete\n * renderer implementations.\n *\n * @param str {String} The string to escape.\n */\nfunction esc(str) {\n return str;\n}\n\nRenderer.prototype.render = render;\nRenderer.prototype.out = out;\nRenderer.prototype.lit = lit;\nRenderer.prototype.cr = cr;\nRenderer.prototype.esc = esc;\n\nexport default Renderer;\n","\"use strict\";\n\nimport { escapeXml } from \"../common.js\";\nimport Renderer from \"./renderer.js\";\n\nvar reUnsafeProtocol = /^javascript:|vbscript:|file:|data:/i;\nvar reSafeDataProtocol = /^data:image\\/(?:png|gif|jpeg|webp)/i;\n\nvar potentiallyUnsafe = function(url) {\n return reUnsafeProtocol.test(url) && !reSafeDataProtocol.test(url);\n};\n\n// Helper function to produce an HTML tag.\nfunction tag(name, attrs, selfclosing) {\n if (this.disableTags > 0) {\n return;\n }\n this.buffer += \"<\" + name;\n if (attrs && attrs.length > 0) {\n var i = 0;\n var attrib;\n while ((attrib = attrs[i]) !== undefined) {\n this.buffer += \" \" + attrib[0] + '=\"' + attrib[1] + '\"';\n i++;\n }\n }\n if (selfclosing) {\n this.buffer += \" /\";\n }\n this.buffer += \">\";\n this.lastOut = \">\";\n}\n\nfunction HtmlRenderer(options) {\n options = options || {};\n // by default, soft breaks are rendered as newlines in HTML\n options.softbreak = options.softbreak || \"\\n\";\n // set to \"
\" to make them hard breaks\n // set to \" \" if you want to ignore line wrapping in source\n this.esc = options.esc || escapeXml;\n // escape html with a custom function\n // else use escapeXml\n\n this.disableTags = 0;\n this.lastOut = \"\\n\";\n this.options = options;\n}\n\n/* Node methods */\n\nfunction text(node) {\n this.out(node.literal);\n}\n\nfunction softbreak() {\n this.lit(this.options.softbreak);\n}\n\nfunction linebreak() {\n this.tag(\"br\", [], true);\n this.cr();\n}\n\nfunction link(node, entering) {\n var attrs = this.attrs(node);\n if (entering) {\n if (!(this.options.safe && potentiallyUnsafe(node.destination))) {\n attrs.push([\"href\", this.esc(node.destination)]);\n }\n if (node.title) {\n attrs.push([\"title\", this.esc(node.title)]);\n }\n this.tag(\"a\", attrs);\n } else {\n this.tag(\"/a\");\n }\n}\n\nfunction image(node, entering) {\n if (entering) {\n if (this.disableTags === 0) {\n if (this.options.safe && potentiallyUnsafe(node.destination)) {\n this.lit('\"');\n');\n }\n }\n}\n\nfunction emph(node, entering) {\n this.tag(entering ? \"em\" : \"/em\");\n}\n\nfunction strong(node, entering) {\n this.tag(entering ? \"strong\" : \"/strong\");\n}\n\nfunction paragraph(node, entering) {\n var grandparent = node.parent.parent,\n attrs = this.attrs(node);\n if (grandparent !== null && grandparent.type === \"list\") {\n if (grandparent.listTight) {\n return;\n }\n }\n if (entering) {\n this.cr();\n this.tag(\"p\", attrs);\n } else {\n this.tag(\"/p\");\n this.cr();\n }\n}\n\nfunction heading(node, entering) {\n var tagname = \"h\" + node.level,\n attrs = this.attrs(node);\n if (entering) {\n this.cr();\n this.tag(tagname, attrs);\n } else {\n this.tag(\"/\" + tagname);\n this.cr();\n }\n}\n\nfunction code(node) {\n this.tag(\"code\");\n this.out(node.literal);\n this.tag(\"/code\");\n}\n\nfunction code_block(node) {\n var info_words = node.info ? node.info.split(/\\s+/) : [],\n attrs = this.attrs(node);\n if (info_words.length > 0 && info_words[0].length > 0) {\n attrs.push([\"class\", \"language-\" + this.esc(info_words[0])]);\n }\n this.cr();\n this.tag(\"pre\");\n this.tag(\"code\", attrs);\n this.out(node.literal);\n this.tag(\"/code\");\n this.tag(\"/pre\");\n this.cr();\n}\n\nfunction thematic_break(node) {\n var attrs = this.attrs(node);\n this.cr();\n this.tag(\"hr\", attrs, true);\n this.cr();\n}\n\nfunction block_quote(node, entering) {\n var attrs = this.attrs(node);\n if (entering) {\n this.cr();\n this.tag(\"blockquote\", attrs);\n this.cr();\n } else {\n this.cr();\n this.tag(\"/blockquote\");\n this.cr();\n }\n}\n\nfunction list(node, entering) {\n var tagname = node.listType === \"bullet\" ? \"ul\" : \"ol\",\n attrs = this.attrs(node);\n\n if (entering) {\n var start = node.listStart;\n if (start !== null && start !== 1) {\n attrs.push([\"start\", start.toString()]);\n }\n this.cr();\n this.tag(tagname, attrs);\n this.cr();\n } else {\n this.cr();\n this.tag(\"/\" + tagname);\n this.cr();\n }\n}\n\nfunction item(node, entering) {\n var attrs = this.attrs(node);\n if (entering) {\n this.tag(\"li\", attrs);\n } else {\n this.tag(\"/li\");\n this.cr();\n }\n}\n\nfunction html_inline(node) {\n if (this.options.safe) {\n this.lit(\"\");\n } else {\n this.lit(node.literal);\n }\n}\n\nfunction html_block(node) {\n this.cr();\n if (this.options.safe) {\n this.lit(\"\");\n } else {\n this.lit(node.literal);\n }\n this.cr();\n}\n\nfunction custom_inline(node, entering) {\n if (entering && node.onEnter) {\n this.lit(node.onEnter);\n } else if (!entering && node.onExit) {\n this.lit(node.onExit);\n }\n}\n\nfunction custom_block(node, entering) {\n this.cr();\n if (entering && node.onEnter) {\n this.lit(node.onEnter);\n } else if (!entering && node.onExit) {\n this.lit(node.onExit);\n }\n this.cr();\n}\n\n/* Helper methods */\n\nfunction out(s) {\n this.lit(this.esc(s));\n}\n\nfunction attrs(node) {\n var att = [];\n if (this.options.sourcepos) {\n var pos = node.sourcepos;\n if (pos) {\n att.push([\n \"data-sourcepos\",\n String(pos[0][0]) +\n \":\" +\n String(pos[0][1]) +\n \"-\" +\n String(pos[1][0]) +\n \":\" +\n String(pos[1][1])\n ]);\n }\n }\n return att;\n}\n\n// quick browser-compatible inheritance\nHtmlRenderer.prototype = Object.create(Renderer.prototype);\n\nHtmlRenderer.prototype.text = text;\nHtmlRenderer.prototype.html_inline = html_inline;\nHtmlRenderer.prototype.html_block = html_block;\nHtmlRenderer.prototype.softbreak = softbreak;\nHtmlRenderer.prototype.linebreak = linebreak;\nHtmlRenderer.prototype.link = link;\nHtmlRenderer.prototype.image = image;\nHtmlRenderer.prototype.emph = emph;\nHtmlRenderer.prototype.strong = strong;\nHtmlRenderer.prototype.paragraph = paragraph;\nHtmlRenderer.prototype.heading = heading;\nHtmlRenderer.prototype.code = code;\nHtmlRenderer.prototype.code_block = code_block;\nHtmlRenderer.prototype.thematic_break = thematic_break;\nHtmlRenderer.prototype.block_quote = block_quote;\nHtmlRenderer.prototype.list = list;\nHtmlRenderer.prototype.item = item;\nHtmlRenderer.prototype.custom_inline = custom_inline;\nHtmlRenderer.prototype.custom_block = custom_block;\n\nHtmlRenderer.prototype.esc = escapeXml;\n\nHtmlRenderer.prototype.out = out;\nHtmlRenderer.prototype.tag = tag;\nHtmlRenderer.prototype.attrs = attrs;\n\nexport default HtmlRenderer;\n","\"use strict\";\n\nimport Renderer from \"./renderer.js\";\nimport { escapeXml } from \"../common.js\";\n\nvar reXMLTag = /\\<[^>]*\\>/;\n\nfunction toTagName(s) {\n return s.replace(/([a-z])([A-Z])/g, \"$1_$2\").toLowerCase();\n}\n\nfunction XmlRenderer(options) {\n options = options || {};\n\n this.disableTags = 0;\n this.lastOut = \"\\n\";\n\n this.indentLevel = 0;\n this.indent = \" \";\n \n this.esc = options.esc || escapeXml;\n // escape html with a custom function\n // else use escapeXml\n\n this.options = options;\n}\n\nfunction render(ast) {\n this.buffer = \"\";\n\n var attrs;\n var tagname;\n var walker = ast.walker();\n var event, node, entering;\n var container;\n var selfClosing;\n var nodetype;\n\n var options = this.options;\n\n if (options.time) {\n console.time(\"rendering\");\n }\n\n this.buffer += '\\n';\n this.buffer += '\\n';\n\n while ((event = walker.next())) {\n entering = event.entering;\n node = event.node;\n nodetype = node.type;\n\n container = node.isContainer;\n\n selfClosing =\n nodetype === \"thematic_break\" ||\n nodetype === \"linebreak\" ||\n nodetype === \"softbreak\";\n\n tagname = toTagName(nodetype);\n\n if (entering) {\n attrs = [];\n\n switch (nodetype) {\n case \"document\":\n attrs.push([\"xmlns\", \"http://commonmark.org/xml/1.0\"]);\n break;\n case \"list\":\n if (node.listType !== null) {\n attrs.push([\"type\", node.listType.toLowerCase()]);\n }\n if (node.listStart !== null) {\n attrs.push([\"start\", String(node.listStart)]);\n }\n if (node.listTight !== null) {\n attrs.push([\n \"tight\",\n node.listTight ? \"true\" : \"false\"\n ]);\n }\n var delim = node.listDelimiter;\n if (delim !== null) {\n var delimword = \"\";\n if (delim === \".\") {\n delimword = \"period\";\n } else {\n delimword = \"paren\";\n }\n attrs.push([\"delimiter\", delimword]);\n }\n break;\n case \"code_block\":\n if (node.info) {\n attrs.push([\"info\", node.info]);\n }\n break;\n case \"heading\":\n attrs.push([\"level\", String(node.level)]);\n break;\n case \"link\":\n case \"image\":\n attrs.push([\"destination\", node.destination]);\n attrs.push([\"title\", node.title]);\n break;\n case \"custom_inline\":\n case \"custom_block\":\n attrs.push([\"on_enter\", node.onEnter]);\n attrs.push([\"on_exit\", node.onExit]);\n break;\n default:\n break;\n }\n if (options.sourcepos) {\n var pos = node.sourcepos;\n if (pos) {\n attrs.push([\n \"sourcepos\",\n String(pos[0][0]) +\n \":\" +\n String(pos[0][1]) +\n \"-\" +\n String(pos[1][0]) +\n \":\" +\n String(pos[1][1])\n ]);\n }\n }\n\n this.cr();\n this.out(this.tag(tagname, attrs, selfClosing));\n if (container) {\n this.indentLevel += 1;\n } else if (!container && !selfClosing) {\n var lit = node.literal;\n if (lit) {\n this.out(this.esc(lit));\n }\n this.out(this.tag(\"/\" + tagname));\n }\n } else {\n this.indentLevel -= 1;\n this.cr();\n this.out(this.tag(\"/\" + tagname));\n }\n }\n if (options.time) {\n console.timeEnd(\"rendering\");\n }\n this.buffer += \"\\n\";\n return this.buffer;\n}\n\nfunction out(s) {\n if (this.disableTags > 0) {\n this.buffer += s.replace(reXMLTag, \"\");\n } else {\n this.buffer += s;\n }\n this.lastOut = s;\n}\n\nfunction cr() {\n if (this.lastOut !== \"\\n\") {\n this.buffer += \"\\n\";\n this.lastOut = \"\\n\";\n for (var i = this.indentLevel; i > 0; i--) {\n this.buffer += this.indent;\n }\n }\n}\n\n// Helper function to produce an XML tag.\nfunction tag(name, attrs, selfclosing) {\n var result = \"<\" + name;\n if (attrs && attrs.length > 0) {\n var i = 0;\n var attrib;\n while ((attrib = attrs[i]) !== undefined) {\n result += \" \" + attrib[0] + '=\"' + this.esc(attrib[1]) + '\"';\n i++;\n }\n }\n if (selfclosing) {\n result += \" /\";\n }\n result += \">\";\n return result;\n}\n\n// quick browser-compatible inheritance\nXmlRenderer.prototype = Object.create(Renderer.prototype);\n\nXmlRenderer.prototype.render = render;\nXmlRenderer.prototype.out = out;\nXmlRenderer.prototype.cr = cr;\nXmlRenderer.prototype.tag = tag;\nXmlRenderer.prototype.esc = escapeXml;\n\nexport default XmlRenderer;\n","\n\n\n\n\n
\n {@html markdownToHTML(markdown)}\n
\n","\n\n\n\n
\n toggleVoteDelta(+1, upvoted)}\n >\n \n {item.counts.score}\n \n {#if canDownvote}\n toggleVoteDelta(-1, downvoted)}\n >\n \n \n {/if}\n
\n","\n\n{#if fullThumbnailURL}\n
\n {#if prefetchedURL}\n \n {/if}\n (loaded = true)}\n on:error={() => (loaded = true)}\n src={fullThumbnailURL}\n alt=\" \"\n />\n {#if !loaded}\n
\n \n
\n {/if}\n
\n{/if}\n","\n\n\n \n {user.display_name || user.name}\n {#if user.admin}\n \n {/if}\n\n\n\n","\n\n\n \n {community.title}\n\n","const relativeTimes = {\n short: new Intl.RelativeTimeFormat(undefined, {\n style: \"short\",\n numeric: \"auto\",\n }),\n long: new Intl.RelativeTimeFormat(undefined, {\n style: \"long\",\n numeric: \"auto\",\n }),\n}\n\nexport const Duration = {\n second: 1000,\n minute: 60 * 1000,\n hour: 60 * 60 * 1000,\n day: 24 * 60 * 60 * 1000,\n}\n\nexport function relative(\n date: Date,\n style: \"short\" | \"long\" = \"long\",\n now = Date.now(),\n): string {\n const formatter = relativeTimes[style]\n\n let delta = date.getTime() - now\n let unit: string\n if (Math.abs(delta) < Duration.minute) {\n delta = Math.round(delta / Duration.second)\n unit = \"second\"\n } else if (Math.abs(delta) < Duration.hour) {\n delta = Math.round(delta / Duration.minute)\n unit = \"minute\"\n } else if (Math.abs(delta) < Duration.day) {\n delta = Math.round(delta / Duration.hour)\n unit = \"hour\"\n } else {\n delta = Math.round(delta / Duration.day)\n unit = \"day\"\n }\n\n return formatter.format(delta, unit as any)\n}\n\nexport function absolute(date: Date): string {\n return date.toLocaleString(undefined, {\n dateStyle: \"full\",\n timeStyle: \"long\",\n })\n}\n","\n\n\n"],"names":["ctx","insert_hydration","target","div","anchor","if_block0","create_if_block_2","if_block1","create_if_block_1","if_block2","create_if_block","div2","append_hydration","div1","div0","cBase","cRowMain","cRowHeadline","cSlotLead","cSlotDefault","cSlotTrail","background","$$props","border","padding","shadow","spacing","gridColumns","gap","regionRowMain","regionRowHeadline","slotLead","slotDefault","slotTrail","label","labelledby","classesBase","$$invalidate","classesRowMain","classesRowHeadline","classesSlotLead","classesSlotDefault","classesSlotTrail","t_value","dirty","set_data","t","svelte_element_target_value","svelte_element_role_value","svelte_element_type_value","svelte_element","svelte_element_data","toggle_class","get_spread_update","svelte_element_levels","svelte_element_class_value","current","create_dynamic_element","icon","tooltip","active","href","disabled","className","dispatch","createEventDispatcher","tag","isContainer","node","resumeAt","entering","next","cur","container","NodeWalker","root","Node","nodeType","sourcepos","proto","s","n","delim","child","sibling","walker","encodeCache","getEncodeCache","exclude","i","ch","cache","encode","string","keepEscaped","l","code","nextCode","result","encode_1","__importDefault","this","mod","decode_codepoint","decode_json_1","require$$0","decodeCodePoint","codePoint","output","decode","entities_json_1","legacy_json_1","require$$1","xml_json_1","require$$2","decode_codepoint_1","require$$3","getStrictDecoder","map","keys","replace","getReplacer","re","str","sorter","a","b","legacy","j","replacer","secondChar","inverseXML","getInverseObj","xmlReplacer","getInverseReplacer","getInverse","inverseHTML","htmlReplacer","obj","inverse","name","single","multiple","_i","_a","k","start","end","count","reNonASCII","singleCharReplacer","c","data","reXmlChars","escape","exports","decode_1","level","decodeStrict","encode_2","decode_2","C_BACKSLASH","ENTITY","TAGNAME","ATTRIBUTENAME","UNQUOTEDVALUE","SINGLEQUOTEDVALUE","DOUBLEQUOTEDVALUE","ATTRIBUTEVALUE","ATTRIBUTEVALUESPEC","ATTRIBUTE","OPENTAG","CLOSETAG","HTMLCOMMENT","PROCESSINGINSTRUCTION","DECLARATION","CDATA","HTMLTAG","reHtmlTag","reBackslashOrAmp","ESCAPABLE","reEntityOrEscapedChar","XMLSPECIAL","reXmlSpecial","unescapeChar","decodeHTML","unescapeString","normalizeURI","uri","replaceUnsafeChar","escapeXml","_fromCodePoint","fromCodePoint","_","stringFromCharCode","floor","MAX_SIZE","codeUnits","highSurrogate","lowSurrogate","index","length","defineProperty","object","$defineProperty","repeat","common.normalizeURI","common.unescapeString","C_NEWLINE","C_ASTERISK","C_UNDERSCORE","C_BACKTICK","C_OPEN_BRACKET","C_CLOSE_BRACKET","C_LESSTHAN","C_BANG","C_AMPERSAND","C_OPEN_PAREN","C_CLOSE_PAREN","C_COLON","C_SINGLEQUOTE","C_DOUBLEQUOTE","common.ESCAPABLE","ESCAPED_CHAR","common.ENTITY","common.reHtmlTag","rePunctuation","reLinkTitle","reLinkDestinationBraces","reEscapable","reEntityHere","reTicks","reTicksHere","reEllipses","reDash","reEmailAutolink","reAutolink","reSpnl","reWhitespaceChar","reUnicodeWhitespaceChar","reFinalSpace","reInitialSpace","reSpaceAtEndOfLine","reLinkLabel","reMain","text","normalizeReference","match","m","peek","spnl","parseBackticks","block","ticks","afterOpenTicks","matched","contents","parseBackslash","subj","parseAutolink","dest","parseHtmlTag","scanDelims","cc","numdelims","char_before","char_after","cc_after","startpos","left_flanking","right_flanking","can_open","can_close","after_is_whitespace","after_is_punctuation","before_is_whitespace","before_is_punctuation","handleDelim","res","removeDelimiter","removeDelimitersBetween","bottom","top","processEmphasis","stack_bottom","opener","closer","old_closer","opener_inl","closer_inl","tempstack","use_delims","tmp","opener_found","openers_bottom","openers_bottom_index","odd_match","closercc","emph","parseLinkTitle","title","parseLinkDestination","savepos","openparens","parseLinkLabel","parseOpenBracket","parseBang","parseCloseBracket","is_image","reflabel","beforelabel","link","addBracket","image","removeBracket","parseEntity","parseString","chars","enCount","emCount","parseNewline","lastc","hardbreak","parseReference","refmap","rawlabel","matchChars","beforetitle","atLineEnd","normlabel","parseInline","parseInlines","InlineParser","options","CODE_INDENT","C_TAB","C_GREATERTHAN","C_SPACE","reHtmlBlockOpen","reHtmlBlockClose","reThematicBreak","reMaybeSpecial","reNonSpace","reBulletListMarker","reOrderedListMarker","reATXHeadingMarker","reCodeFence","reClosingCodeFence","reSetextHeadingLine","reLineEnding","isBlank","isSpaceOrTab","ln","pos","endsWithBlankLine","addLine","charsToTab","addChild","offset","column_number","newBlock","parseListMarker","parser","rest","nextc","spacesStartCol","spacesStartOffset","blank_item","spaces_after_marker","listsMatch","list_data","item_data","closeUnmatchedBlocks","parent","blocks","item","subitem","indent","content","newlinePos","firstLine","hasReferenceDefs","blockStarts","fenceLength","blockType","heading","advanceOffset","columns","currentLine","charsToAdvance","advanceNextNonspace","findNextNonspace","cols","incorporateLine","all_matched","lastChild","matchedLeaf","starts","startsLen","lastLineBlank","cont","finalize","lineNumber","above","processInlines","event","Document","doc","parse","input","lines","len","Parser","Renderer","render","ast","type","lit","cr","out","esc","reUnsafeProtocol","reSafeDataProtocol","potentiallyUnsafe","url","attrs","selfclosing","attrib","HtmlRenderer","softbreak","linebreak","strong","paragraph","grandparent","tagname","code_block","info_words","thematic_break","block_quote","list","html_inline","html_block","custom_inline","custom_block","att","reXMLTag","toTagName","XmlRenderer","selfClosing","nodetype","delimword","raw_value","markdownToHTML","commonmark.Parser","renderer","commonmark.HtmlRenderer","md","parsed","walk","f","markdown","style","inline","attr","button_1","button_1_class_value","t1","t1_value","post","comment","canDownvote","classes","klass","voting","toggleVoteDelta","delta","state","loggedIn","infoToast","score","$client","$profile","_b","err","errorToast","upvoted","downvoted","button","upvotedClasses","downvotedClasses","img","img_class_value","img_src_value","prefetchedURL","imageClass","loaded","load_handler","error_handler","fullThumbnailURL","postThumbnailURL","imageClassDefault","thumbnailURL","if_block","span","user","width","id","parseUserActorID","avatar_changes","community","parseCommunityActorID","relativeTimes","Duration","relative","date","now","formatter","unit","absolute","time","time_datetime_value","time_title_value","tzlessRegex","date_"],"mappings":"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","x_google_ignoreList":[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15]}