{"version":3,"file":"c_markdown-it_c1a0043d.1695271849080.js","sources":["../../node_modules/markdown-it/lib/common/entities.js","../../node_modules/markdown-it/lib/common/utils.js","../../node_modules/markdown-it/lib/helpers/parse_link_label.js","../../node_modules/markdown-it/lib/helpers/parse_link_destination.js","../../node_modules/markdown-it/lib/helpers/parse_link_title.js","../../node_modules/markdown-it/lib/helpers/index.js","../../node_modules/markdown-it/lib/renderer.js","../../node_modules/markdown-it/lib/ruler.js","../../node_modules/markdown-it/lib/rules_core/normalize.js","../../node_modules/markdown-it/lib/rules_core/block.js","../../node_modules/markdown-it/lib/rules_core/inline.js","../../node_modules/markdown-it/lib/rules_core/linkify.js","../../node_modules/markdown-it/lib/rules_core/replacements.js","../../node_modules/markdown-it/lib/rules_core/smartquotes.js","../../node_modules/markdown-it/lib/rules_core/text_join.js","../../node_modules/markdown-it/lib/token.js","../../node_modules/markdown-it/lib/rules_core/state_core.js","../../node_modules/markdown-it/lib/parser_core.js","../../node_modules/markdown-it/lib/rules_block/table.js","../../node_modules/markdown-it/lib/rules_block/code.js","../../node_modules/markdown-it/lib/rules_block/fence.js","../../node_modules/markdown-it/lib/rules_block/blockquote.js","../../node_modules/markdown-it/lib/rules_block/hr.js","../../node_modules/markdown-it/lib/rules_block/list.js","../../node_modules/markdown-it/lib/rules_block/reference.js","../../node_modules/markdown-it/lib/common/html_blocks.js","../../node_modules/markdown-it/lib/common/html_re.js","../../node_modules/markdown-it/lib/rules_block/html_block.js","../../node_modules/markdown-it/lib/rules_block/heading.js","../../node_modules/markdown-it/lib/rules_block/lheading.js","../../node_modules/markdown-it/lib/rules_block/paragraph.js","../../node_modules/markdown-it/lib/rules_block/state_block.js","../../node_modules/markdown-it/lib/parser_block.js","../../node_modules/markdown-it/lib/rules_inline/text.js","../../node_modules/markdown-it/lib/rules_inline/linkify.js","../../node_modules/markdown-it/lib/rules_inline/newline.js","../../node_modules/markdown-it/lib/rules_inline/escape.js","../../node_modules/markdown-it/lib/rules_inline/backticks.js","../../node_modules/markdown-it/lib/rules_inline/strikethrough.js","../../node_modules/markdown-it/lib/rules_inline/emphasis.js","../../node_modules/markdown-it/lib/rules_inline/link.js","../../node_modules/markdown-it/lib/rules_inline/image.js","../../node_modules/markdown-it/lib/rules_inline/autolink.js","../../node_modules/markdown-it/lib/rules_inline/html_inline.js","../../node_modules/markdown-it/lib/rules_inline/entity.js","../../node_modules/markdown-it/lib/rules_inline/balance_pairs.js","../../node_modules/markdown-it/lib/rules_inline/fragments_join.js","../../node_modules/markdown-it/lib/rules_inline/state_inline.js","../../node_modules/markdown-it/lib/parser_inline.js","../../node_modules/markdown-it/lib/presets/default.js","../../node_modules/markdown-it/lib/presets/zero.js","../../node_modules/markdown-it/lib/presets/commonmark.js","../../node_modules/markdown-it/lib/index.js","../../node_modules/markdown-it/index.js"],"sourcesContent":["// HTML5 entities map: { name -> utf16string }\n//\n'use strict';\n\n/*eslint quotes:0*/\nmodule.exports = require('entities/lib/maps/entities.json');\n","// Utilities\n//\n'use strict';\n\n\nfunction _class(obj) { return Object.prototype.toString.call(obj); }\n\nfunction isString(obj) { return _class(obj) === '[object String]'; }\n\nvar _hasOwnProperty = Object.prototype.hasOwnProperty;\n\nfunction has(object, key) {\n return _hasOwnProperty.call(object, key);\n}\n\n// Merge objects\n//\nfunction assign(obj /*from1, from2, from3, ...*/) {\n var sources = Array.prototype.slice.call(arguments, 1);\n\n sources.forEach(function (source) {\n if (!source) { return; }\n\n if (typeof source !== 'object') {\n throw new TypeError(source + 'must be object');\n }\n\n Object.keys(source).forEach(function (key) {\n obj[key] = source[key];\n });\n });\n\n return obj;\n}\n\n// Remove element from array and put another array at those position.\n// Useful for some operations with tokens\nfunction arrayReplaceAt(src, pos, newElements) {\n return [].concat(src.slice(0, pos), newElements, src.slice(pos + 1));\n}\n\n////////////////////////////////////////////////////////////////////////////////\n\nfunction isValidEntityCode(c) {\n /*eslint no-bitwise:0*/\n // broken sequence\n if (c >= 0xD800 && c <= 0xDFFF) { return false; }\n // never used\n if (c >= 0xFDD0 && c <= 0xFDEF) { return false; }\n if ((c & 0xFFFF) === 0xFFFF || (c & 0xFFFF) === 0xFFFE) { return false; }\n // control codes\n if (c >= 0x00 && c <= 0x08) { return false; }\n if (c === 0x0B) { return false; }\n if (c >= 0x0E && c <= 0x1F) { return false; }\n if (c >= 0x7F && c <= 0x9F) { return false; }\n // out of range\n if (c > 0x10FFFF) { return false; }\n return true;\n}\n\nfunction fromCodePoint(c) {\n /*eslint no-bitwise:0*/\n if (c > 0xffff) {\n c -= 0x10000;\n var surrogate1 = 0xd800 + (c >> 10),\n surrogate2 = 0xdc00 + (c & 0x3ff);\n\n return String.fromCharCode(surrogate1, surrogate2);\n }\n return String.fromCharCode(c);\n}\n\n\nvar UNESCAPE_MD_RE = /\\\\([!\"#$%&'()*+,\\-.\\/:;<=>?@[\\\\\\]^_`{|}~])/g;\nvar ENTITY_RE = /&([a-z#][a-z0-9]{1,31});/gi;\nvar UNESCAPE_ALL_RE = new RegExp(UNESCAPE_MD_RE.source + '|' + ENTITY_RE.source, 'gi');\n\nvar DIGITAL_ENTITY_TEST_RE = /^#((?:x[a-f0-9]{1,8}|[0-9]{1,8}))/i;\n\nvar entities = require('./entities');\n\nfunction replaceEntityPattern(match, name) {\n var code = 0;\n\n if (has(entities, name)) {\n return entities[name];\n }\n\n if (name.charCodeAt(0) === 0x23/* # */ && DIGITAL_ENTITY_TEST_RE.test(name)) {\n code = name[1].toLowerCase() === 'x' ?\n parseInt(name.slice(2), 16) : parseInt(name.slice(1), 10);\n\n if (isValidEntityCode(code)) {\n return fromCodePoint(code);\n }\n }\n\n return match;\n}\n\n/*function replaceEntities(str) {\n if (str.indexOf('&') < 0) { return str; }\n\n return str.replace(ENTITY_RE, replaceEntityPattern);\n}*/\n\nfunction unescapeMd(str) {\n if (str.indexOf('\\\\') < 0) { return str; }\n return str.replace(UNESCAPE_MD_RE, '$1');\n}\n\nfunction unescapeAll(str) {\n if (str.indexOf('\\\\') < 0 && str.indexOf('&') < 0) { return str; }\n\n return str.replace(UNESCAPE_ALL_RE, function (match, escaped, entity) {\n if (escaped) { return escaped; }\n return replaceEntityPattern(match, entity);\n });\n}\n\n////////////////////////////////////////////////////////////////////////////////\n\nvar HTML_ESCAPE_TEST_RE = /[&<>\"]/;\nvar HTML_ESCAPE_REPLACE_RE = /[&<>\"]/g;\nvar HTML_REPLACEMENTS = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"'\n};\n\nfunction replaceUnsafeChar(ch) {\n return HTML_REPLACEMENTS[ch];\n}\n\nfunction escapeHtml(str) {\n if (HTML_ESCAPE_TEST_RE.test(str)) {\n return str.replace(HTML_ESCAPE_REPLACE_RE, replaceUnsafeChar);\n }\n return str;\n}\n\n////////////////////////////////////////////////////////////////////////////////\n\nvar REGEXP_ESCAPE_RE = /[.?*+^$[\\]\\\\(){}|-]/g;\n\nfunction escapeRE(str) {\n return str.replace(REGEXP_ESCAPE_RE, '\\\\$&');\n}\n\n////////////////////////////////////////////////////////////////////////////////\n\nfunction isSpace(code) {\n switch (code) {\n case 0x09:\n case 0x20:\n return true;\n }\n return false;\n}\n\n// Zs (unicode class) || [\\t\\f\\v\\r\\n]\nfunction isWhiteSpace(code) {\n if (code >= 0x2000 && code <= 0x200A) { return true; }\n switch (code) {\n case 0x09: // \\t\n case 0x0A: // \\n\n case 0x0B: // \\v\n case 0x0C: // \\f\n case 0x0D: // \\r\n case 0x20:\n case 0xA0:\n case 0x1680:\n case 0x202F:\n case 0x205F:\n case 0x3000:\n return true;\n }\n return false;\n}\n\n////////////////////////////////////////////////////////////////////////////////\n\n/*eslint-disable max-len*/\nvar UNICODE_PUNCT_RE = require('uc.micro/categories/P/regex');\n\n// Currently without astral characters support.\nfunction isPunctChar(ch) {\n return UNICODE_PUNCT_RE.test(ch);\n}\n\n\n// Markdown ASCII punctuation characters.\n//\n// !, \", #, $, %, &, ', (, ), *, +, ,, -, ., /, :, ;, <, =, >, ?, @, [, \\, ], ^, _, `, {, |, }, or ~\n// http://spec.commonmark.org/0.15/#ascii-punctuation-character\n//\n// Don't confuse with unicode punctuation !!! It lacks some chars in ascii range.\n//\nfunction isMdAsciiPunct(ch) {\n switch (ch) {\n case 0x21/* ! */:\n case 0x22/* \" */:\n case 0x23/* # */:\n case 0x24/* $ */:\n case 0x25/* % */:\n case 0x26/* & */:\n case 0x27/* ' */:\n case 0x28/* ( */:\n case 0x29/* ) */:\n case 0x2A/* * */:\n case 0x2B/* + */:\n case 0x2C/* , */:\n case 0x2D/* - */:\n case 0x2E/* . */:\n case 0x2F/* / */:\n case 0x3A/* : */:\n case 0x3B/* ; */:\n case 0x3C/* < */:\n case 0x3D/* = */:\n case 0x3E/* > */:\n case 0x3F/* ? */:\n case 0x40/* @ */:\n case 0x5B/* [ */:\n case 0x5C/* \\ */:\n case 0x5D/* ] */:\n case 0x5E/* ^ */:\n case 0x5F/* _ */:\n case 0x60/* ` */:\n case 0x7B/* { */:\n case 0x7C/* | */:\n case 0x7D/* } */:\n case 0x7E/* ~ */:\n return true;\n default:\n return false;\n }\n}\n\n// Hepler to unify [reference labels].\n//\nfunction normalizeReference(str) {\n // Trim and collapse whitespace\n //\n str = str.trim().replace(/\\s+/g, ' ');\n\n // In node v10 'ẞ'.toLowerCase() === 'Ṿ', which is presumed to be a bug\n // fixed in v12 (couldn't find any details).\n //\n // So treat this one as a special case\n // (remove this when node v10 is no longer supported).\n //\n if ('ẞ'.toLowerCase() === 'Ṿ') {\n str = str.replace(/ẞ/g, 'ß');\n }\n\n // .toLowerCase().toUpperCase() should get rid of all differences\n // between letter variants.\n //\n // Simple .toLowerCase() doesn't normalize 125 code points correctly,\n // and .toUpperCase doesn't normalize 6 of them (list of exceptions:\n // İ, ϴ, ẞ, Ω, K, Å - those are already uppercased, but have differently\n // uppercased versions).\n //\n // Here's an example showing how it happens. Lets take greek letter omega:\n // uppercase U+0398 (Θ), U+03f4 (ϴ) and lowercase U+03b8 (θ), U+03d1 (ϑ)\n //\n // Unicode entries:\n // 0398;GREEK CAPITAL LETTER THETA;Lu;0;L;;;;;N;;;;03B8;\n // 03B8;GREEK SMALL LETTER THETA;Ll;0;L;;;;;N;;;0398;;0398\n // 03D1;GREEK THETA SYMBOL;Ll;0;L; 03B8;;;;N;GREEK SMALL LETTER SCRIPT THETA;;0398;;0398\n // 03F4;GREEK CAPITAL THETA SYMBOL;Lu;0;L; 0398;;;;N;;;;03B8;\n //\n // Case-insensitive comparison should treat all of them as equivalent.\n //\n // But .toLowerCase() doesn't change ϑ (it's already lowercase),\n // and .toUpperCase() doesn't change ϴ (already uppercase).\n //\n // Applying first lower then upper case normalizes any character:\n // '\\u0398\\u03f4\\u03b8\\u03d1'.toLowerCase().toUpperCase() === '\\u0398\\u0398\\u0398\\u0398'\n //\n // Note: this is equivalent to unicode case folding; unicode normalization\n // is a different step that is not required here.\n //\n // Final result should be uppercased, because it's later stored in an object\n // (this avoid a conflict with Object.prototype members,\n // most notably, `__proto__`)\n //\n return str.toLowerCase().toUpperCase();\n}\n\n////////////////////////////////////////////////////////////////////////////////\n\n// Re-export libraries commonly used in both markdown-it and its plugins,\n// so plugins won't have to depend on them explicitly, which reduces their\n// bundled size (e.g. a browser build).\n//\nexports.lib = {};\nexports.lib.mdurl = require('mdurl');\nexports.lib.ucmicro = require('uc.micro');\n\nexports.assign = assign;\nexports.isString = isString;\nexports.has = has;\nexports.unescapeMd = unescapeMd;\nexports.unescapeAll = unescapeAll;\nexports.isValidEntityCode = isValidEntityCode;\nexports.fromCodePoint = fromCodePoint;\n// exports.replaceEntities = replaceEntities;\nexports.escapeHtml = escapeHtml;\nexports.arrayReplaceAt = arrayReplaceAt;\nexports.isSpace = isSpace;\nexports.isWhiteSpace = isWhiteSpace;\nexports.isMdAsciiPunct = isMdAsciiPunct;\nexports.isPunctChar = isPunctChar;\nexports.escapeRE = escapeRE;\nexports.normalizeReference = normalizeReference;\n","// Parse link label\n//\n// this function assumes that first character (\"[\") already matches;\n// returns the end of the label\n//\n'use strict';\n\nmodule.exports = function parseLinkLabel(state, start, disableNested) {\n var level, found, marker, prevPos,\n labelEnd = -1,\n max = state.posMax,\n oldPos = state.pos;\n\n state.pos = start + 1;\n level = 1;\n\n while (state.pos < max) {\n marker = state.src.charCodeAt(state.pos);\n if (marker === 0x5D /* ] */) {\n level--;\n if (level === 0) {\n found = true;\n break;\n }\n }\n\n prevPos = state.pos;\n state.md.inline.skipToken(state);\n if (marker === 0x5B /* [ */) {\n if (prevPos === state.pos - 1) {\n // increase level if we find text `[`, which is not a part of any token\n level++;\n } else if (disableNested) {\n state.pos = oldPos;\n return -1;\n }\n }\n }\n\n if (found) {\n labelEnd = state.pos;\n }\n\n // restore old state\n state.pos = oldPos;\n\n return labelEnd;\n};\n","// Parse link destination\n//\n'use strict';\n\n\nvar unescapeAll = require('../common/utils').unescapeAll;\n\n\nmodule.exports = function parseLinkDestination(str, pos, max) {\n var code, level,\n lines = 0,\n start = pos,\n result = {\n ok: false,\n pos: 0,\n lines: 0,\n str: ''\n };\n\n if (str.charCodeAt(pos) === 0x3C /* < */) {\n pos++;\n while (pos < max) {\n code = str.charCodeAt(pos);\n if (code === 0x0A /* \\n */) { return result; }\n if (code === 0x3C /* < */) { return result; }\n if (code === 0x3E /* > */) {\n result.pos = pos + 1;\n result.str = unescapeAll(str.slice(start + 1, pos));\n result.ok = true;\n return result;\n }\n if (code === 0x5C /* \\ */ && pos + 1 < max) {\n pos += 2;\n continue;\n }\n\n pos++;\n }\n\n // no closing '>'\n return result;\n }\n\n // this should be ... } else { ... branch\n\n level = 0;\n while (pos < max) {\n code = str.charCodeAt(pos);\n\n if (code === 0x20) { break; }\n\n // ascii control characters\n if (code < 0x20 || code === 0x7F) { break; }\n\n if (code === 0x5C /* \\ */ && pos + 1 < max) {\n if (str.charCodeAt(pos + 1) === 0x20) { break; }\n pos += 2;\n continue;\n }\n\n if (code === 0x28 /* ( */) {\n level++;\n if (level > 32) { return result; }\n }\n\n if (code === 0x29 /* ) */) {\n if (level === 0) { break; }\n level--;\n }\n\n pos++;\n }\n\n if (start === pos) { return result; }\n if (level !== 0) { return result; }\n\n result.str = unescapeAll(str.slice(start, pos));\n result.lines = lines;\n result.pos = pos;\n result.ok = true;\n return result;\n};\n","// Parse link title\n//\n'use strict';\n\n\nvar unescapeAll = require('../common/utils').unescapeAll;\n\n\nmodule.exports = function parseLinkTitle(str, pos, max) {\n var code,\n marker,\n lines = 0,\n start = pos,\n result = {\n ok: false,\n pos: 0,\n lines: 0,\n str: ''\n };\n\n if (pos >= max) { return result; }\n\n marker = str.charCodeAt(pos);\n\n if (marker !== 0x22 /* \" */ && marker !== 0x27 /* ' */ && marker !== 0x28 /* ( */) { return result; }\n\n pos++;\n\n // if opening marker is \"(\", switch it to closing marker \")\"\n if (marker === 0x28) { marker = 0x29; }\n\n while (pos < max) {\n code = str.charCodeAt(pos);\n if (code === marker) {\n result.pos = pos + 1;\n result.lines = lines;\n result.str = unescapeAll(str.slice(start + 1, pos));\n result.ok = true;\n return result;\n } else if (code === 0x28 /* ( */ && marker === 0x29 /* ) */) {\n return result;\n } else if (code === 0x0A) {\n lines++;\n } else if (code === 0x5C /* \\ */ && pos + 1 < max) {\n pos++;\n if (str.charCodeAt(pos) === 0x0A) {\n lines++;\n }\n }\n\n pos++;\n }\n\n return result;\n};\n","// Just a shortcut for bulk export\n'use strict';\n\n\nexports.parseLinkLabel = require('./parse_link_label');\nexports.parseLinkDestination = require('./parse_link_destination');\nexports.parseLinkTitle = require('./parse_link_title');\n","/**\n * class Renderer\n *\n * Generates HTML from parsed token stream. Each instance has independent\n * copy of rules. Those can be rewritten with ease. Also, you can add new\n * rules if you create plugin and adds new token types.\n **/\n'use strict';\n\n\nvar assign = require('./common/utils').assign;\nvar unescapeAll = require('./common/utils').unescapeAll;\nvar escapeHtml = require('./common/utils').escapeHtml;\n\n\n////////////////////////////////////////////////////////////////////////////////\n\nvar default_rules = {};\n\n\ndefault_rules.code_inline = function (tokens, idx, options, env, slf) {\n var token = tokens[idx];\n\n return '' +\n escapeHtml(tokens[idx].content) +\n '';\n};\n\n\ndefault_rules.code_block = function (tokens, idx, options, env, slf) {\n var token = tokens[idx];\n\n return '' +\n escapeHtml(tokens[idx].content) +\n '\\n';\n};\n\n\ndefault_rules.fence = function (tokens, idx, options, env, slf) {\n var token = tokens[idx],\n info = token.info ? unescapeAll(token.info).trim() : '',\n langName = '',\n langAttrs = '',\n highlighted, i, arr, tmpAttrs, tmpToken;\n\n if (info) {\n arr = info.split(/(\\s+)/g);\n langName = arr[0];\n langAttrs = arr.slice(2).join('');\n }\n\n if (options.highlight) {\n highlighted = options.highlight(token.content, langName, langAttrs) || escapeHtml(token.content);\n } else {\n highlighted = escapeHtml(token.content);\n }\n\n if (highlighted.indexOf(''\n + highlighted\n + '\\n';\n }\n\n\n return '
'\n        + highlighted\n        + '
\\n';\n};\n\n\ndefault_rules.image = function (tokens, idx, options, env, slf) {\n var token = tokens[idx];\n\n // \"alt\" attr MUST be set, even if empty. Because it's mandatory and\n // should be placed on proper position for tests.\n //\n // Replace content with actual value\n\n token.attrs[token.attrIndex('alt')][1] =\n slf.renderInlineAsText(token.children, options, env);\n\n return slf.renderToken(tokens, idx, options);\n};\n\n\ndefault_rules.hardbreak = function (tokens, idx, options /*, env */) {\n return options.xhtmlOut ? '
\\n' : '
\\n';\n};\ndefault_rules.softbreak = function (tokens, idx, options /*, env */) {\n return options.breaks ? (options.xhtmlOut ? '
\\n' : '
\\n') : '\\n';\n};\n\n\ndefault_rules.text = function (tokens, idx /*, options, env */) {\n return escapeHtml(tokens[idx].content);\n};\n\n\ndefault_rules.html_block = function (tokens, idx /*, options, env */) {\n return tokens[idx].content;\n};\ndefault_rules.html_inline = function (tokens, idx /*, options, env */) {\n return tokens[idx].content;\n};\n\n\n/**\n * new Renderer()\n *\n * Creates new [[Renderer]] instance and fill [[Renderer#rules]] with defaults.\n **/\nfunction Renderer() {\n\n /**\n * Renderer#rules -> Object\n *\n * Contains render rules for tokens. Can be updated and extended.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')();\n *\n * md.renderer.rules.strong_open = function () { return ''; };\n * md.renderer.rules.strong_close = function () { return ''; };\n *\n * var result = md.renderInline(...);\n * ```\n *\n * Each rule is called as independent static function with fixed signature:\n *\n * ```javascript\n * function my_token_render(tokens, idx, options, env, renderer) {\n * // ...\n * return renderedHTML;\n * }\n * ```\n *\n * See [source code](https://github.com/markdown-it/markdown-it/blob/master/lib/renderer.js)\n * for more details and examples.\n **/\n this.rules = assign({}, default_rules);\n}\n\n\n/**\n * Renderer.renderAttrs(token) -> String\n *\n * Render token attributes to string.\n **/\nRenderer.prototype.renderAttrs = function renderAttrs(token) {\n var i, l, result;\n\n if (!token.attrs) { return ''; }\n\n result = '';\n\n for (i = 0, l = token.attrs.length; i < l; i++) {\n result += ' ' + escapeHtml(token.attrs[i][0]) + '=\"' + escapeHtml(token.attrs[i][1]) + '\"';\n }\n\n return result;\n};\n\n\n/**\n * Renderer.renderToken(tokens, idx, options) -> String\n * - tokens (Array): list of tokens\n * - idx (Numbed): token index to render\n * - options (Object): params of parser instance\n *\n * Default token renderer. Can be overriden by custom function\n * in [[Renderer#rules]].\n **/\nRenderer.prototype.renderToken = function renderToken(tokens, idx, options) {\n var nextToken,\n result = '',\n needLf = false,\n token = tokens[idx];\n\n // Tight list paragraphs\n if (token.hidden) {\n return '';\n }\n\n // Insert a newline between hidden paragraph and subsequent opening\n // block-level tag.\n //\n // For example, here we should insert a newline before blockquote:\n // - a\n // >\n //\n if (token.block && token.nesting !== -1 && idx && tokens[idx - 1].hidden) {\n result += '\\n';\n }\n\n // Add token name, e.g. ``.\n //\n needLf = false;\n }\n }\n }\n }\n\n result += needLf ? '>\\n' : '>';\n\n return result;\n};\n\n\n/**\n * Renderer.renderInline(tokens, options, env) -> String\n * - tokens (Array): list on block tokens to render\n * - options (Object): params of parser instance\n * - env (Object): additional data from parsed input (references, for example)\n *\n * The same as [[Renderer.render]], but for single token of `inline` type.\n **/\nRenderer.prototype.renderInline = function (tokens, options, env) {\n var type,\n result = '',\n rules = this.rules;\n\n for (var i = 0, len = tokens.length; i < len; i++) {\n type = tokens[i].type;\n\n if (typeof rules[type] !== 'undefined') {\n result += rules[type](tokens, i, options, env, this);\n } else {\n result += this.renderToken(tokens, i, options);\n }\n }\n\n return result;\n};\n\n\n/** internal\n * Renderer.renderInlineAsText(tokens, options, env) -> String\n * - tokens (Array): list on block tokens to render\n * - options (Object): params of parser instance\n * - env (Object): additional data from parsed input (references, for example)\n *\n * Special kludge for image `alt` attributes to conform CommonMark spec.\n * Don't try to use it! Spec requires to show `alt` content with stripped markup,\n * instead of simple escaping.\n **/\nRenderer.prototype.renderInlineAsText = function (tokens, options, env) {\n var result = '';\n\n for (var i = 0, len = tokens.length; i < len; i++) {\n if (tokens[i].type === 'text') {\n result += tokens[i].content;\n } else if (tokens[i].type === 'image') {\n result += this.renderInlineAsText(tokens[i].children, options, env);\n } else if (tokens[i].type === 'softbreak') {\n result += '\\n';\n }\n }\n\n return result;\n};\n\n\n/**\n * Renderer.render(tokens, options, env) -> String\n * - tokens (Array): list on block tokens to render\n * - options (Object): params of parser instance\n * - env (Object): additional data from parsed input (references, for example)\n *\n * Takes token stream and generates HTML. Probably, you will never need to call\n * this method directly.\n **/\nRenderer.prototype.render = function (tokens, options, env) {\n var i, len, type,\n result = '',\n rules = this.rules;\n\n for (i = 0, len = tokens.length; i < len; i++) {\n type = tokens[i].type;\n\n if (type === 'inline') {\n result += this.renderInline(tokens[i].children, options, env);\n } else if (typeof rules[type] !== 'undefined') {\n result += rules[tokens[i].type](tokens, i, options, env, this);\n } else {\n result += this.renderToken(tokens, i, options, env);\n }\n }\n\n return result;\n};\n\nmodule.exports = Renderer;\n","/**\n * class Ruler\n *\n * Helper class, used by [[MarkdownIt#core]], [[MarkdownIt#block]] and\n * [[MarkdownIt#inline]] to manage sequences of functions (rules):\n *\n * - keep rules in defined order\n * - assign the name to each rule\n * - enable/disable rules\n * - add/replace rules\n * - allow assign rules to additional named chains (in the same)\n * - cacheing lists of active rules\n *\n * You will not need use this class directly until write plugins. For simple\n * rules control use [[MarkdownIt.disable]], [[MarkdownIt.enable]] and\n * [[MarkdownIt.use]].\n **/\n'use strict';\n\n\n/**\n * new Ruler()\n **/\nfunction Ruler() {\n // List of added rules. Each element is:\n //\n // {\n // name: XXX,\n // enabled: Boolean,\n // fn: Function(),\n // alt: [ name2, name3 ]\n // }\n //\n this.__rules__ = [];\n\n // Cached rule chains.\n //\n // First level - chain name, '' for default.\n // Second level - diginal anchor for fast filtering by charcodes.\n //\n this.__cache__ = null;\n}\n\n////////////////////////////////////////////////////////////////////////////////\n// Helper methods, should not be used directly\n\n\n// Find rule index by name\n//\nRuler.prototype.__find__ = function (name) {\n for (var i = 0; i < this.__rules__.length; i++) {\n if (this.__rules__[i].name === name) {\n return i;\n }\n }\n return -1;\n};\n\n\n// Build rules lookup cache\n//\nRuler.prototype.__compile__ = function () {\n var self = this;\n var chains = [ '' ];\n\n // collect unique names\n self.__rules__.forEach(function (rule) {\n if (!rule.enabled) { return; }\n\n rule.alt.forEach(function (altName) {\n if (chains.indexOf(altName) < 0) {\n chains.push(altName);\n }\n });\n });\n\n self.__cache__ = {};\n\n chains.forEach(function (chain) {\n self.__cache__[chain] = [];\n self.__rules__.forEach(function (rule) {\n if (!rule.enabled) { return; }\n\n if (chain && rule.alt.indexOf(chain) < 0) { return; }\n\n self.__cache__[chain].push(rule.fn);\n });\n });\n};\n\n\n/**\n * Ruler.at(name, fn [, options])\n * - name (String): rule name to replace.\n * - fn (Function): new rule function.\n * - options (Object): new rule options (not mandatory).\n *\n * Replace rule by name with new function & options. Throws error if name not\n * found.\n *\n * ##### Options:\n *\n * - __alt__ - array with names of \"alternate\" chains.\n *\n * ##### Example\n *\n * Replace existing typographer replacement rule with new one:\n *\n * ```javascript\n * var md = require('markdown-it')();\n *\n * md.core.ruler.at('replacements', function replace(state) {\n * //...\n * });\n * ```\n **/\nRuler.prototype.at = function (name, fn, options) {\n var index = this.__find__(name);\n var opt = options || {};\n\n if (index === -1) { throw new Error('Parser rule not found: ' + name); }\n\n this.__rules__[index].fn = fn;\n this.__rules__[index].alt = opt.alt || [];\n this.__cache__ = null;\n};\n\n\n/**\n * Ruler.before(beforeName, ruleName, fn [, options])\n * - beforeName (String): new rule will be added before this one.\n * - ruleName (String): name of added rule.\n * - fn (Function): rule function.\n * - options (Object): rule options (not mandatory).\n *\n * Add new rule to chain before one with given name. See also\n * [[Ruler.after]], [[Ruler.push]].\n *\n * ##### Options:\n *\n * - __alt__ - array with names of \"alternate\" chains.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')();\n *\n * md.block.ruler.before('paragraph', 'my_rule', function replace(state) {\n * //...\n * });\n * ```\n **/\nRuler.prototype.before = function (beforeName, ruleName, fn, options) {\n var index = this.__find__(beforeName);\n var opt = options || {};\n\n if (index === -1) { throw new Error('Parser rule not found: ' + beforeName); }\n\n this.__rules__.splice(index, 0, {\n name: ruleName,\n enabled: true,\n fn: fn,\n alt: opt.alt || []\n });\n\n this.__cache__ = null;\n};\n\n\n/**\n * Ruler.after(afterName, ruleName, fn [, options])\n * - afterName (String): new rule will be added after this one.\n * - ruleName (String): name of added rule.\n * - fn (Function): rule function.\n * - options (Object): rule options (not mandatory).\n *\n * Add new rule to chain after one with given name. See also\n * [[Ruler.before]], [[Ruler.push]].\n *\n * ##### Options:\n *\n * - __alt__ - array with names of \"alternate\" chains.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')();\n *\n * md.inline.ruler.after('text', 'my_rule', function replace(state) {\n * //...\n * });\n * ```\n **/\nRuler.prototype.after = function (afterName, ruleName, fn, options) {\n var index = this.__find__(afterName);\n var opt = options || {};\n\n if (index === -1) { throw new Error('Parser rule not found: ' + afterName); }\n\n this.__rules__.splice(index + 1, 0, {\n name: ruleName,\n enabled: true,\n fn: fn,\n alt: opt.alt || []\n });\n\n this.__cache__ = null;\n};\n\n/**\n * Ruler.push(ruleName, fn [, options])\n * - ruleName (String): name of added rule.\n * - fn (Function): rule function.\n * - options (Object): rule options (not mandatory).\n *\n * Push new rule to the end of chain. See also\n * [[Ruler.before]], [[Ruler.after]].\n *\n * ##### Options:\n *\n * - __alt__ - array with names of \"alternate\" chains.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')();\n *\n * md.core.ruler.push('my_rule', function replace(state) {\n * //...\n * });\n * ```\n **/\nRuler.prototype.push = function (ruleName, fn, options) {\n var opt = options || {};\n\n this.__rules__.push({\n name: ruleName,\n enabled: true,\n fn: fn,\n alt: opt.alt || []\n });\n\n this.__cache__ = null;\n};\n\n\n/**\n * Ruler.enable(list [, ignoreInvalid]) -> Array\n * - list (String|Array): list of rule names to enable.\n * - ignoreInvalid (Boolean): set `true` to ignore errors when rule not found.\n *\n * Enable rules with given names. If any rule name not found - throw Error.\n * Errors can be disabled by second param.\n *\n * Returns list of found rule names (if no exception happened).\n *\n * See also [[Ruler.disable]], [[Ruler.enableOnly]].\n **/\nRuler.prototype.enable = function (list, ignoreInvalid) {\n if (!Array.isArray(list)) { list = [ list ]; }\n\n var result = [];\n\n // Search by name and enable\n list.forEach(function (name) {\n var idx = this.__find__(name);\n\n if (idx < 0) {\n if (ignoreInvalid) { return; }\n throw new Error('Rules manager: invalid rule name ' + name);\n }\n this.__rules__[idx].enabled = true;\n result.push(name);\n }, this);\n\n this.__cache__ = null;\n return result;\n};\n\n\n/**\n * Ruler.enableOnly(list [, ignoreInvalid])\n * - list (String|Array): list of rule names to enable (whitelist).\n * - ignoreInvalid (Boolean): set `true` to ignore errors when rule not found.\n *\n * Enable rules with given names, and disable everything else. If any rule name\n * not found - throw Error. Errors can be disabled by second param.\n *\n * See also [[Ruler.disable]], [[Ruler.enable]].\n **/\nRuler.prototype.enableOnly = function (list, ignoreInvalid) {\n if (!Array.isArray(list)) { list = [ list ]; }\n\n this.__rules__.forEach(function (rule) { rule.enabled = false; });\n\n this.enable(list, ignoreInvalid);\n};\n\n\n/**\n * Ruler.disable(list [, ignoreInvalid]) -> Array\n * - list (String|Array): list of rule names to disable.\n * - ignoreInvalid (Boolean): set `true` to ignore errors when rule not found.\n *\n * Disable rules with given names. If any rule name not found - throw Error.\n * Errors can be disabled by second param.\n *\n * Returns list of found rule names (if no exception happened).\n *\n * See also [[Ruler.enable]], [[Ruler.enableOnly]].\n **/\nRuler.prototype.disable = function (list, ignoreInvalid) {\n if (!Array.isArray(list)) { list = [ list ]; }\n\n var result = [];\n\n // Search by name and disable\n list.forEach(function (name) {\n var idx = this.__find__(name);\n\n if (idx < 0) {\n if (ignoreInvalid) { return; }\n throw new Error('Rules manager: invalid rule name ' + name);\n }\n this.__rules__[idx].enabled = false;\n result.push(name);\n }, this);\n\n this.__cache__ = null;\n return result;\n};\n\n\n/**\n * Ruler.getRules(chainName) -> Array\n *\n * Return array of active functions (rules) for given chain name. It analyzes\n * rules configuration, compiles caches if not exists and returns result.\n *\n * Default chain name is `''` (empty string). It can't be skipped. That's\n * done intentionally, to keep signature monomorphic for high speed.\n **/\nRuler.prototype.getRules = function (chainName) {\n if (this.__cache__ === null) {\n this.__compile__();\n }\n\n // Chain can be empty, if rules disabled. But we still have to return Array.\n return this.__cache__[chainName] || [];\n};\n\nmodule.exports = Ruler;\n","// Normalize input string\n\n'use strict';\n\n\n// https://spec.commonmark.org/0.29/#line-ending\nvar NEWLINES_RE = /\\r\\n?|\\n/g;\nvar NULL_RE = /\\0/g;\n\n\nmodule.exports = function normalize(state) {\n var str;\n\n // Normalize newlines\n str = state.src.replace(NEWLINES_RE, '\\n');\n\n // Replace NULL characters\n str = str.replace(NULL_RE, '\\uFFFD');\n\n state.src = str;\n};\n","'use strict';\n\n\nmodule.exports = function block(state) {\n var token;\n\n if (state.inlineMode) {\n token = new state.Token('inline', '', 0);\n token.content = state.src;\n token.map = [ 0, 1 ];\n token.children = [];\n state.tokens.push(token);\n } else {\n state.md.block.parse(state.src, state.md, state.env, state.tokens);\n }\n};\n","'use strict';\n\nmodule.exports = function inline(state) {\n var tokens = state.tokens, tok, i, l;\n\n // Parse inlines\n for (i = 0, l = tokens.length; i < l; i++) {\n tok = tokens[i];\n if (tok.type === 'inline') {\n state.md.inline.parse(tok.content, state.md, state.env, tok.children);\n }\n }\n};\n","// Replace link-like texts with link nodes.\n//\n// Currently restricted by `md.validateLink()` to http/https/ftp\n//\n'use strict';\n\n\nvar arrayReplaceAt = require('../common/utils').arrayReplaceAt;\n\n\nfunction isLinkOpen(str) {\n return /^\\s]/i.test(str);\n}\nfunction isLinkClose(str) {\n return /^<\\/a\\s*>/i.test(str);\n}\n\n\nmodule.exports = function linkify(state) {\n var i, j, l, tokens, token, currentToken, nodes, ln, text, pos, lastPos,\n level, htmlLinkLevel, url, fullUrl, urlText,\n blockTokens = state.tokens,\n links;\n\n if (!state.md.options.linkify) { return; }\n\n for (j = 0, l = blockTokens.length; j < l; j++) {\n if (blockTokens[j].type !== 'inline' ||\n !state.md.linkify.pretest(blockTokens[j].content)) {\n continue;\n }\n\n tokens = blockTokens[j].children;\n\n htmlLinkLevel = 0;\n\n // We scan from the end, to keep position when new tags added.\n // Use reversed logic in links start/end match\n for (i = tokens.length - 1; i >= 0; i--) {\n currentToken = tokens[i];\n\n // Skip content of markdown links\n if (currentToken.type === 'link_close') {\n i--;\n while (tokens[i].level !== currentToken.level && tokens[i].type !== 'link_open') {\n i--;\n }\n continue;\n }\n\n // Skip content of html tag links\n if (currentToken.type === 'html_inline') {\n if (isLinkOpen(currentToken.content) && htmlLinkLevel > 0) {\n htmlLinkLevel--;\n }\n if (isLinkClose(currentToken.content)) {\n htmlLinkLevel++;\n }\n }\n if (htmlLinkLevel > 0) { continue; }\n\n if (currentToken.type === 'text' && state.md.linkify.test(currentToken.content)) {\n\n text = currentToken.content;\n links = state.md.linkify.match(text);\n\n // Now split string to nodes\n nodes = [];\n level = currentToken.level;\n lastPos = 0;\n\n // forbid escape sequence at the start of the string,\n // this avoids http\\://example.com/ from being linkified as\n // http://example.com/\n if (links.length > 0 &&\n links[0].index === 0 &&\n i > 0 &&\n tokens[i - 1].type === 'text_special') {\n links = links.slice(1);\n }\n\n for (ln = 0; ln < links.length; ln++) {\n url = links[ln].url;\n fullUrl = state.md.normalizeLink(url);\n if (!state.md.validateLink(fullUrl)) { continue; }\n\n urlText = links[ln].text;\n\n // Linkifier might send raw hostnames like \"example.com\", where url\n // starts with domain name. So we prepend http:// in those cases,\n // and remove it afterwards.\n //\n if (!links[ln].schema) {\n urlText = state.md.normalizeLinkText('http://' + urlText).replace(/^http:\\/\\//, '');\n } else if (links[ln].schema === 'mailto:' && !/^mailto:/i.test(urlText)) {\n urlText = state.md.normalizeLinkText('mailto:' + urlText).replace(/^mailto:/, '');\n } else {\n urlText = state.md.normalizeLinkText(urlText);\n }\n\n pos = links[ln].index;\n\n if (pos > lastPos) {\n token = new state.Token('text', '', 0);\n token.content = text.slice(lastPos, pos);\n token.level = level;\n nodes.push(token);\n }\n\n token = new state.Token('link_open', 'a', 1);\n token.attrs = [ [ 'href', fullUrl ] ];\n token.level = level++;\n token.markup = 'linkify';\n token.info = 'auto';\n nodes.push(token);\n\n token = new state.Token('text', '', 0);\n token.content = urlText;\n token.level = level;\n nodes.push(token);\n\n token = new state.Token('link_close', 'a', -1);\n token.level = --level;\n token.markup = 'linkify';\n token.info = 'auto';\n nodes.push(token);\n\n lastPos = links[ln].lastIndex;\n }\n if (lastPos < text.length) {\n token = new state.Token('text', '', 0);\n token.content = text.slice(lastPos);\n token.level = level;\n nodes.push(token);\n }\n\n // replace current node\n blockTokens[j].children = tokens = arrayReplaceAt(tokens, i, nodes);\n }\n }\n }\n};\n","// Simple typographic replacements\n//\n// (c) (C) → ©\n// (tm) (TM) → ™\n// (r) (R) → ®\n// +- → ±\n// (p) (P) -> §\n// ... → … (also ?.... → ?.., !.... → !..)\n// ???????? → ???, !!!!! → !!!, `,,` → `,`\n// -- → –, --- → —\n//\n'use strict';\n\n// TODO:\n// - fractionals 1/2, 1/4, 3/4 -> ½, ¼, ¾\n// - multiplications 2 x 4 -> 2 × 4\n\nvar RARE_RE = /\\+-|\\.\\.|\\?\\?\\?\\?|!!!!|,,|--/;\n\n// Workaround for phantomjs - need regex without /g flag,\n// or root check will fail every second time\nvar SCOPED_ABBR_TEST_RE = /\\((c|tm|r)\\)/i;\n\nvar SCOPED_ABBR_RE = /\\((c|tm|r)\\)/ig;\nvar SCOPED_ABBR = {\n c: '©',\n r: '®',\n tm: '™'\n};\n\nfunction replaceFn(match, name) {\n return SCOPED_ABBR[name.toLowerCase()];\n}\n\nfunction replace_scoped(inlineTokens) {\n var i, token, inside_autolink = 0;\n\n for (i = inlineTokens.length - 1; i >= 0; i--) {\n token = inlineTokens[i];\n\n if (token.type === 'text' && !inside_autolink) {\n token.content = token.content.replace(SCOPED_ABBR_RE, replaceFn);\n }\n\n if (token.type === 'link_open' && token.info === 'auto') {\n inside_autolink--;\n }\n\n if (token.type === 'link_close' && token.info === 'auto') {\n inside_autolink++;\n }\n }\n}\n\nfunction replace_rare(inlineTokens) {\n var i, token, inside_autolink = 0;\n\n for (i = inlineTokens.length - 1; i >= 0; i--) {\n token = inlineTokens[i];\n\n if (token.type === 'text' && !inside_autolink) {\n if (RARE_RE.test(token.content)) {\n token.content = token.content\n .replace(/\\+-/g, '±')\n // .., ..., ....... -> …\n // but ?..... & !..... -> ?.. & !..\n .replace(/\\.{2,}/g, '…').replace(/([?!])…/g, '$1..')\n .replace(/([?!]){4,}/g, '$1$1$1').replace(/,{2,}/g, ',')\n // em-dash\n .replace(/(^|[^-])---(?=[^-]|$)/mg, '$1\\u2014')\n // en-dash\n .replace(/(^|\\s)--(?=\\s|$)/mg, '$1\\u2013')\n .replace(/(^|[^-\\s])--(?=[^-\\s]|$)/mg, '$1\\u2013');\n }\n }\n\n if (token.type === 'link_open' && token.info === 'auto') {\n inside_autolink--;\n }\n\n if (token.type === 'link_close' && token.info === 'auto') {\n inside_autolink++;\n }\n }\n}\n\n\nmodule.exports = function replace(state) {\n var blkIdx;\n\n if (!state.md.options.typographer) { return; }\n\n for (blkIdx = state.tokens.length - 1; blkIdx >= 0; blkIdx--) {\n\n if (state.tokens[blkIdx].type !== 'inline') { continue; }\n\n if (SCOPED_ABBR_TEST_RE.test(state.tokens[blkIdx].content)) {\n replace_scoped(state.tokens[blkIdx].children);\n }\n\n if (RARE_RE.test(state.tokens[blkIdx].content)) {\n replace_rare(state.tokens[blkIdx].children);\n }\n\n }\n};\n","// Convert straight quotation marks to typographic ones\n//\n'use strict';\n\n\nvar isWhiteSpace = require('../common/utils').isWhiteSpace;\nvar isPunctChar = require('../common/utils').isPunctChar;\nvar isMdAsciiPunct = require('../common/utils').isMdAsciiPunct;\n\nvar QUOTE_TEST_RE = /['\"]/;\nvar QUOTE_RE = /['\"]/g;\nvar APOSTROPHE = '\\u2019'; /* ’ */\n\n\nfunction replaceAt(str, index, ch) {\n return str.slice(0, index) + ch + str.slice(index + 1);\n}\n\nfunction process_inlines(tokens, state) {\n var i, token, text, t, pos, max, thisLevel, item, lastChar, nextChar,\n isLastPunctChar, isNextPunctChar, isLastWhiteSpace, isNextWhiteSpace,\n canOpen, canClose, j, isSingle, stack, openQuote, closeQuote;\n\n stack = [];\n\n for (i = 0; i < tokens.length; i++) {\n token = tokens[i];\n\n thisLevel = tokens[i].level;\n\n for (j = stack.length - 1; j >= 0; j--) {\n if (stack[j].level <= thisLevel) { break; }\n }\n stack.length = j + 1;\n\n if (token.type !== 'text') { continue; }\n\n text = token.content;\n pos = 0;\n max = text.length;\n\n /*eslint no-labels:0,block-scoped-var:0*/\n OUTER:\n while (pos < max) {\n QUOTE_RE.lastIndex = pos;\n t = QUOTE_RE.exec(text);\n if (!t) { break; }\n\n canOpen = canClose = true;\n pos = t.index + 1;\n isSingle = (t[0] === \"'\");\n\n // Find previous character,\n // default to space if it's the beginning of the line\n //\n lastChar = 0x20;\n\n if (t.index - 1 >= 0) {\n lastChar = text.charCodeAt(t.index - 1);\n } else {\n for (j = i - 1; j >= 0; j--) {\n if (tokens[j].type === 'softbreak' || tokens[j].type === 'hardbreak') break; // lastChar defaults to 0x20\n if (!tokens[j].content) continue; // should skip all tokens except 'text', 'html_inline' or 'code_inline'\n\n lastChar = tokens[j].content.charCodeAt(tokens[j].content.length - 1);\n break;\n }\n }\n\n // Find next character,\n // default to space if it's the end of the line\n //\n nextChar = 0x20;\n\n if (pos < max) {\n nextChar = text.charCodeAt(pos);\n } else {\n for (j = i + 1; j < tokens.length; j++) {\n if (tokens[j].type === 'softbreak' || tokens[j].type === 'hardbreak') break; // nextChar defaults to 0x20\n if (!tokens[j].content) continue; // should skip all tokens except 'text', 'html_inline' or 'code_inline'\n\n nextChar = tokens[j].content.charCodeAt(0);\n break;\n }\n }\n\n isLastPunctChar = isMdAsciiPunct(lastChar) || isPunctChar(String.fromCharCode(lastChar));\n isNextPunctChar = isMdAsciiPunct(nextChar) || isPunctChar(String.fromCharCode(nextChar));\n\n isLastWhiteSpace = isWhiteSpace(lastChar);\n isNextWhiteSpace = isWhiteSpace(nextChar);\n\n if (isNextWhiteSpace) {\n canOpen = false;\n } else if (isNextPunctChar) {\n if (!(isLastWhiteSpace || isLastPunctChar)) {\n canOpen = false;\n }\n }\n\n if (isLastWhiteSpace) {\n canClose = false;\n } else if (isLastPunctChar) {\n if (!(isNextWhiteSpace || isNextPunctChar)) {\n canClose = false;\n }\n }\n\n if (nextChar === 0x22 /* \" */ && t[0] === '\"') {\n if (lastChar >= 0x30 /* 0 */ && lastChar <= 0x39 /* 9 */) {\n // special case: 1\"\" - count first quote as an inch\n canClose = canOpen = false;\n }\n }\n\n if (canOpen && canClose) {\n // Replace quotes in the middle of punctuation sequence, but not\n // in the middle of the words, i.e.:\n //\n // 1. foo \" bar \" baz - not replaced\n // 2. foo-\"-bar-\"-baz - replaced\n // 3. foo\"bar\"baz - not replaced\n //\n canOpen = isLastPunctChar;\n canClose = isNextPunctChar;\n }\n\n if (!canOpen && !canClose) {\n // middle of word\n if (isSingle) {\n token.content = replaceAt(token.content, t.index, APOSTROPHE);\n }\n continue;\n }\n\n if (canClose) {\n // this could be a closing quote, rewind the stack to get a match\n for (j = stack.length - 1; j >= 0; j--) {\n item = stack[j];\n if (stack[j].level < thisLevel) { break; }\n if (item.single === isSingle && stack[j].level === thisLevel) {\n item = stack[j];\n\n if (isSingle) {\n openQuote = state.md.options.quotes[2];\n closeQuote = state.md.options.quotes[3];\n } else {\n openQuote = state.md.options.quotes[0];\n closeQuote = state.md.options.quotes[1];\n }\n\n // replace token.content *before* tokens[item.token].content,\n // because, if they are pointing at the same token, replaceAt\n // could mess up indices when quote length != 1\n token.content = replaceAt(token.content, t.index, closeQuote);\n tokens[item.token].content = replaceAt(\n tokens[item.token].content, item.pos, openQuote);\n\n pos += closeQuote.length - 1;\n if (item.token === i) { pos += openQuote.length - 1; }\n\n text = token.content;\n max = text.length;\n\n stack.length = j;\n continue OUTER;\n }\n }\n }\n\n if (canOpen) {\n stack.push({\n token: i,\n pos: t.index,\n single: isSingle,\n level: thisLevel\n });\n } else if (canClose && isSingle) {\n token.content = replaceAt(token.content, t.index, APOSTROPHE);\n }\n }\n }\n}\n\n\nmodule.exports = function smartquotes(state) {\n /*eslint max-depth:0*/\n var blkIdx;\n\n if (!state.md.options.typographer) { return; }\n\n for (blkIdx = state.tokens.length - 1; blkIdx >= 0; blkIdx--) {\n\n if (state.tokens[blkIdx].type !== 'inline' ||\n !QUOTE_TEST_RE.test(state.tokens[blkIdx].content)) {\n continue;\n }\n\n process_inlines(state.tokens[blkIdx].children, state);\n }\n};\n","// Join raw text tokens with the rest of the text\n//\n// This is set as a separate rule to provide an opportunity for plugins\n// to run text replacements after text join, but before escape join.\n//\n// For example, `\\:)` shouldn't be replaced with an emoji.\n//\n'use strict';\n\n\nmodule.exports = function text_join(state) {\n var j, l, tokens, curr, max, last,\n blockTokens = state.tokens;\n\n for (j = 0, l = blockTokens.length; j < l; j++) {\n if (blockTokens[j].type !== 'inline') continue;\n\n tokens = blockTokens[j].children;\n max = tokens.length;\n\n for (curr = 0; curr < max; curr++) {\n if (tokens[curr].type === 'text_special') {\n tokens[curr].type = 'text';\n }\n }\n\n for (curr = last = 0; curr < max; curr++) {\n if (tokens[curr].type === 'text' &&\n curr + 1 < max &&\n tokens[curr + 1].type === 'text') {\n\n // collapse two adjacent text nodes\n tokens[curr + 1].content = tokens[curr].content + tokens[curr + 1].content;\n } else {\n if (curr !== last) { tokens[last] = tokens[curr]; }\n\n last++;\n }\n }\n\n if (curr !== last) {\n tokens.length = last;\n }\n }\n};\n","// Token class\n\n'use strict';\n\n\n/**\n * class Token\n **/\n\n/**\n * new Token(type, tag, nesting)\n *\n * Create new token and fill passed properties.\n **/\nfunction Token(type, tag, nesting) {\n /**\n * Token#type -> String\n *\n * Type of the token (string, e.g. \"paragraph_open\")\n **/\n this.type = type;\n\n /**\n * Token#tag -> String\n *\n * html tag name, e.g. \"p\"\n **/\n this.tag = tag;\n\n /**\n * Token#attrs -> Array\n *\n * Html attributes. Format: `[ [ name1, value1 ], [ name2, value2 ] ]`\n **/\n this.attrs = null;\n\n /**\n * Token#map -> Array\n *\n * Source map info. Format: `[ line_begin, line_end ]`\n **/\n this.map = null;\n\n /**\n * Token#nesting -> Number\n *\n * Level change (number in {-1, 0, 1} set), where:\n *\n * - `1` means the tag is opening\n * - `0` means the tag is self-closing\n * - `-1` means the tag is closing\n **/\n this.nesting = nesting;\n\n /**\n * Token#level -> Number\n *\n * nesting level, the same as `state.level`\n **/\n this.level = 0;\n\n /**\n * Token#children -> Array\n *\n * An array of child nodes (inline and img tokens)\n **/\n this.children = null;\n\n /**\n * Token#content -> String\n *\n * In a case of self-closing tag (code, html, fence, etc.),\n * it has contents of this tag.\n **/\n this.content = '';\n\n /**\n * Token#markup -> String\n *\n * '*' or '_' for emphasis, fence string for fence, etc.\n **/\n this.markup = '';\n\n /**\n * Token#info -> String\n *\n * Additional information:\n *\n * - Info string for \"fence\" tokens\n * - The value \"auto\" for autolink \"link_open\" and \"link_close\" tokens\n * - The string value of the item marker for ordered-list \"list_item_open\" tokens\n **/\n this.info = '';\n\n /**\n * Token#meta -> Object\n *\n * A place for plugins to store an arbitrary data\n **/\n this.meta = null;\n\n /**\n * Token#block -> Boolean\n *\n * True for block-level tokens, false for inline tokens.\n * Used in renderer to calculate line breaks\n **/\n this.block = false;\n\n /**\n * Token#hidden -> Boolean\n *\n * If it's true, ignore this element when rendering. Used for tight lists\n * to hide paragraphs.\n **/\n this.hidden = false;\n}\n\n\n/**\n * Token.attrIndex(name) -> Number\n *\n * Search attribute index by name.\n **/\nToken.prototype.attrIndex = function attrIndex(name) {\n var attrs, i, len;\n\n if (!this.attrs) { return -1; }\n\n attrs = this.attrs;\n\n for (i = 0, len = attrs.length; i < len; i++) {\n if (attrs[i][0] === name) { return i; }\n }\n return -1;\n};\n\n\n/**\n * Token.attrPush(attrData)\n *\n * Add `[ name, value ]` attribute to list. Init attrs if necessary\n **/\nToken.prototype.attrPush = function attrPush(attrData) {\n if (this.attrs) {\n this.attrs.push(attrData);\n } else {\n this.attrs = [ attrData ];\n }\n};\n\n\n/**\n * Token.attrSet(name, value)\n *\n * Set `name` attribute to `value`. Override old value if exists.\n **/\nToken.prototype.attrSet = function attrSet(name, value) {\n var idx = this.attrIndex(name),\n attrData = [ name, value ];\n\n if (idx < 0) {\n this.attrPush(attrData);\n } else {\n this.attrs[idx] = attrData;\n }\n};\n\n\n/**\n * Token.attrGet(name)\n *\n * Get the value of attribute `name`, or null if it does not exist.\n **/\nToken.prototype.attrGet = function attrGet(name) {\n var idx = this.attrIndex(name), value = null;\n if (idx >= 0) {\n value = this.attrs[idx][1];\n }\n return value;\n};\n\n\n/**\n * Token.attrJoin(name, value)\n *\n * Join value to existing attribute via space. Or create new attribute if not\n * exists. Useful to operate with token classes.\n **/\nToken.prototype.attrJoin = function attrJoin(name, value) {\n var idx = this.attrIndex(name);\n\n if (idx < 0) {\n this.attrPush([ name, value ]);\n } else {\n this.attrs[idx][1] = this.attrs[idx][1] + ' ' + value;\n }\n};\n\n\nmodule.exports = Token;\n","// Core state object\n//\n'use strict';\n\nvar Token = require('../token');\n\n\nfunction StateCore(src, md, env) {\n this.src = src;\n this.env = env;\n this.tokens = [];\n this.inlineMode = false;\n this.md = md; // link to parser instance\n}\n\n// re-export Token class to use in core rules\nStateCore.prototype.Token = Token;\n\n\nmodule.exports = StateCore;\n","/** internal\n * class Core\n *\n * Top-level rules executor. Glues block/inline parsers and does intermediate\n * transformations.\n **/\n'use strict';\n\n\nvar Ruler = require('./ruler');\n\n\nvar _rules = [\n [ 'normalize', require('./rules_core/normalize') ],\n [ 'block', require('./rules_core/block') ],\n [ 'inline', require('./rules_core/inline') ],\n [ 'linkify', require('./rules_core/linkify') ],\n [ 'replacements', require('./rules_core/replacements') ],\n [ 'smartquotes', require('./rules_core/smartquotes') ],\n // `text_join` finds `text_special` tokens (for escape sequences)\n // and joins them with the rest of the text\n [ 'text_join', require('./rules_core/text_join') ]\n];\n\n\n/**\n * new Core()\n **/\nfunction Core() {\n /**\n * Core#ruler -> Ruler\n *\n * [[Ruler]] instance. Keep configuration of core rules.\n **/\n this.ruler = new Ruler();\n\n for (var i = 0; i < _rules.length; i++) {\n this.ruler.push(_rules[i][0], _rules[i][1]);\n }\n}\n\n\n/**\n * Core.process(state)\n *\n * Executes core chain rules.\n **/\nCore.prototype.process = function (state) {\n var i, l, rules;\n\n rules = this.ruler.getRules('');\n\n for (i = 0, l = rules.length; i < l; i++) {\n rules[i](state);\n }\n};\n\nCore.prototype.State = require('./rules_core/state_core');\n\n\nmodule.exports = Core;\n","// GFM table, https://github.github.com/gfm/#tables-extension-\n\n'use strict';\n\nvar isSpace = require('../common/utils').isSpace;\n\n\nfunction getLine(state, line) {\n var pos = state.bMarks[line] + state.tShift[line],\n max = state.eMarks[line];\n\n return state.src.slice(pos, max);\n}\n\nfunction escapedSplit(str) {\n var result = [],\n pos = 0,\n max = str.length,\n ch,\n isEscaped = false,\n lastPos = 0,\n current = '';\n\n ch = str.charCodeAt(pos);\n\n while (pos < max) {\n if (ch === 0x7c/* | */) {\n if (!isEscaped) {\n // pipe separating cells, '|'\n result.push(current + str.substring(lastPos, pos));\n current = '';\n lastPos = pos + 1;\n } else {\n // escaped pipe, '\\|'\n current += str.substring(lastPos, pos - 1);\n lastPos = pos;\n }\n }\n\n isEscaped = (ch === 0x5c/* \\ */);\n pos++;\n\n ch = str.charCodeAt(pos);\n }\n\n result.push(current + str.substring(lastPos));\n\n return result;\n}\n\n\nmodule.exports = function table(state, startLine, endLine, silent) {\n var ch, lineText, pos, i, l, nextLine, columns, columnCount, token,\n aligns, t, tableLines, tbodyLines, oldParentType, terminate,\n terminatorRules, firstCh, secondCh;\n\n // should have at least two lines\n if (startLine + 2 > endLine) { return false; }\n\n nextLine = startLine + 1;\n\n if (state.sCount[nextLine] < state.blkIndent) { return false; }\n\n // if it's indented more than 3 spaces, it should be a code block\n if (state.sCount[nextLine] - state.blkIndent >= 4) { return false; }\n\n // first character of the second line should be '|', '-', ':',\n // and no other characters are allowed but spaces;\n // basically, this is the equivalent of /^[-:|][-:|\\s]*$/ regexp\n\n pos = state.bMarks[nextLine] + state.tShift[nextLine];\n if (pos >= state.eMarks[nextLine]) { return false; }\n\n firstCh = state.src.charCodeAt(pos++);\n if (firstCh !== 0x7C/* | */ && firstCh !== 0x2D/* - */ && firstCh !== 0x3A/* : */) { return false; }\n\n if (pos >= state.eMarks[nextLine]) { return false; }\n\n secondCh = state.src.charCodeAt(pos++);\n if (secondCh !== 0x7C/* | */ && secondCh !== 0x2D/* - */ && secondCh !== 0x3A/* : */ && !isSpace(secondCh)) {\n return false;\n }\n\n // if first character is '-', then second character must not be a space\n // (due to parsing ambiguity with list)\n if (firstCh === 0x2D/* - */ && isSpace(secondCh)) { return false; }\n\n while (pos < state.eMarks[nextLine]) {\n ch = state.src.charCodeAt(pos);\n\n if (ch !== 0x7C/* | */ && ch !== 0x2D/* - */ && ch !== 0x3A/* : */ && !isSpace(ch)) { return false; }\n\n pos++;\n }\n\n lineText = getLine(state, startLine + 1);\n\n columns = lineText.split('|');\n aligns = [];\n for (i = 0; i < columns.length; i++) {\n t = columns[i].trim();\n if (!t) {\n // allow empty columns before and after table, but not in between columns;\n // e.g. allow ` |---| `, disallow ` ---||--- `\n if (i === 0 || i === columns.length - 1) {\n continue;\n } else {\n return false;\n }\n }\n\n if (!/^:?-+:?$/.test(t)) { return false; }\n if (t.charCodeAt(t.length - 1) === 0x3A/* : */) {\n aligns.push(t.charCodeAt(0) === 0x3A/* : */ ? 'center' : 'right');\n } else if (t.charCodeAt(0) === 0x3A/* : */) {\n aligns.push('left');\n } else {\n aligns.push('');\n }\n }\n\n lineText = getLine(state, startLine).trim();\n if (lineText.indexOf('|') === -1) { return false; }\n if (state.sCount[startLine] - state.blkIndent >= 4) { return false; }\n columns = escapedSplit(lineText);\n if (columns.length && columns[0] === '') columns.shift();\n if (columns.length && columns[columns.length - 1] === '') columns.pop();\n\n // header row will define an amount of columns in the entire table,\n // and align row should be exactly the same (the rest of the rows can differ)\n columnCount = columns.length;\n if (columnCount === 0 || columnCount !== aligns.length) { return false; }\n\n if (silent) { return true; }\n\n oldParentType = state.parentType;\n state.parentType = 'table';\n\n // use 'blockquote' lists for termination because it's\n // the most similar to tables\n terminatorRules = state.md.block.ruler.getRules('blockquote');\n\n token = state.push('table_open', 'table', 1);\n token.map = tableLines = [ startLine, 0 ];\n\n token = state.push('thead_open', 'thead', 1);\n token.map = [ startLine, startLine + 1 ];\n\n token = state.push('tr_open', 'tr', 1);\n token.map = [ startLine, startLine + 1 ];\n\n for (i = 0; i < columns.length; i++) {\n token = state.push('th_open', 'th', 1);\n if (aligns[i]) {\n token.attrs = [ [ 'style', 'text-align:' + aligns[i] ] ];\n }\n\n token = state.push('inline', '', 0);\n token.content = columns[i].trim();\n token.children = [];\n\n token = state.push('th_close', 'th', -1);\n }\n\n token = state.push('tr_close', 'tr', -1);\n token = state.push('thead_close', 'thead', -1);\n\n for (nextLine = startLine + 2; nextLine < endLine; nextLine++) {\n if (state.sCount[nextLine] < state.blkIndent) { break; }\n\n terminate = false;\n for (i = 0, l = terminatorRules.length; i < l; i++) {\n if (terminatorRules[i](state, nextLine, endLine, true)) {\n terminate = true;\n break;\n }\n }\n\n if (terminate) { break; }\n lineText = getLine(state, nextLine).trim();\n if (!lineText) { break; }\n if (state.sCount[nextLine] - state.blkIndent >= 4) { break; }\n columns = escapedSplit(lineText);\n if (columns.length && columns[0] === '') columns.shift();\n if (columns.length && columns[columns.length - 1] === '') columns.pop();\n\n if (nextLine === startLine + 2) {\n token = state.push('tbody_open', 'tbody', 1);\n token.map = tbodyLines = [ startLine + 2, 0 ];\n }\n\n token = state.push('tr_open', 'tr', 1);\n token.map = [ nextLine, nextLine + 1 ];\n\n for (i = 0; i < columnCount; i++) {\n token = state.push('td_open', 'td', 1);\n if (aligns[i]) {\n token.attrs = [ [ 'style', 'text-align:' + aligns[i] ] ];\n }\n\n token = state.push('inline', '', 0);\n token.content = columns[i] ? columns[i].trim() : '';\n token.children = [];\n\n token = state.push('td_close', 'td', -1);\n }\n token = state.push('tr_close', 'tr', -1);\n }\n\n if (tbodyLines) {\n token = state.push('tbody_close', 'tbody', -1);\n tbodyLines[1] = nextLine;\n }\n\n token = state.push('table_close', 'table', -1);\n tableLines[1] = nextLine;\n\n state.parentType = oldParentType;\n state.line = nextLine;\n return true;\n};\n","// Code block (4 spaces padded)\n\n'use strict';\n\n\nmodule.exports = function code(state, startLine, endLine/*, silent*/) {\n var nextLine, last, token;\n\n if (state.sCount[startLine] - state.blkIndent < 4) { return false; }\n\n last = nextLine = startLine + 1;\n\n while (nextLine < endLine) {\n if (state.isEmpty(nextLine)) {\n nextLine++;\n continue;\n }\n\n if (state.sCount[nextLine] - state.blkIndent >= 4) {\n nextLine++;\n last = nextLine;\n continue;\n }\n break;\n }\n\n state.line = last;\n\n token = state.push('code_block', 'code', 0);\n token.content = state.getLines(startLine, last, 4 + state.blkIndent, false) + '\\n';\n token.map = [ startLine, state.line ];\n\n return true;\n};\n","// fences (``` lang, ~~~ lang)\n\n'use strict';\n\n\nmodule.exports = function fence(state, startLine, endLine, silent) {\n var marker, len, params, nextLine, mem, token, markup,\n haveEndMarker = false,\n pos = state.bMarks[startLine] + state.tShift[startLine],\n max = state.eMarks[startLine];\n\n // if it's indented more than 3 spaces, it should be a code block\n if (state.sCount[startLine] - state.blkIndent >= 4) { return false; }\n\n if (pos + 3 > max) { return false; }\n\n marker = state.src.charCodeAt(pos);\n\n if (marker !== 0x7E/* ~ */ && marker !== 0x60 /* ` */) {\n return false;\n }\n\n // scan marker length\n mem = pos;\n pos = state.skipChars(pos, marker);\n\n len = pos - mem;\n\n if (len < 3) { return false; }\n\n markup = state.src.slice(mem, pos);\n params = state.src.slice(pos, max);\n\n if (marker === 0x60 /* ` */) {\n if (params.indexOf(String.fromCharCode(marker)) >= 0) {\n return false;\n }\n }\n\n // Since start is found, we can report success here in validation mode\n if (silent) { return true; }\n\n // search end of block\n nextLine = startLine;\n\n for (;;) {\n nextLine++;\n if (nextLine >= endLine) {\n // unclosed block should be autoclosed by end of document.\n // also block seems to be autoclosed by end of parent\n break;\n }\n\n pos = mem = state.bMarks[nextLine] + state.tShift[nextLine];\n max = state.eMarks[nextLine];\n\n if (pos < max && state.sCount[nextLine] < state.blkIndent) {\n // non-empty line with negative indent should stop the list:\n // - ```\n // test\n break;\n }\n\n if (state.src.charCodeAt(pos) !== marker) { continue; }\n\n if (state.sCount[nextLine] - state.blkIndent >= 4) {\n // closing fence should be indented less than 4 spaces\n continue;\n }\n\n pos = state.skipChars(pos, marker);\n\n // closing code fence must be at least as long as the opening one\n if (pos - mem < len) { continue; }\n\n // make sure tail has spaces only\n pos = state.skipSpaces(pos);\n\n if (pos < max) { continue; }\n\n haveEndMarker = true;\n // found!\n break;\n }\n\n // If a fence has heading spaces, they should be removed from its inner block\n len = state.sCount[startLine];\n\n state.line = nextLine + (haveEndMarker ? 1 : 0);\n\n token = state.push('fence', 'code', 0);\n token.info = params;\n token.content = state.getLines(startLine + 1, nextLine, len, true);\n token.markup = markup;\n token.map = [ startLine, state.line ];\n\n return true;\n};\n","// Block quotes\n\n'use strict';\n\nvar isSpace = require('../common/utils').isSpace;\n\n\nmodule.exports = function blockquote(state, startLine, endLine, silent) {\n var adjustTab,\n ch,\n i,\n initial,\n l,\n lastLineEmpty,\n lines,\n nextLine,\n offset,\n oldBMarks,\n oldBSCount,\n oldIndent,\n oldParentType,\n oldSCount,\n oldTShift,\n spaceAfterMarker,\n terminate,\n terminatorRules,\n token,\n isOutdented,\n oldLineMax = state.lineMax,\n pos = state.bMarks[startLine] + state.tShift[startLine],\n max = state.eMarks[startLine];\n\n // if it's indented more than 3 spaces, it should be a code block\n if (state.sCount[startLine] - state.blkIndent >= 4) { return false; }\n\n // check the block quote marker\n if (state.src.charCodeAt(pos++) !== 0x3E/* > */) { return false; }\n\n // we know that it's going to be a valid blockquote,\n // so no point trying to find the end of it in silent mode\n if (silent) { return true; }\n\n // set offset past spaces and \">\"\n initial = offset = state.sCount[startLine] + 1;\n\n // skip one optional space after '>'\n if (state.src.charCodeAt(pos) === 0x20 /* space */) {\n // ' > test '\n // ^ -- position start of line here:\n pos++;\n initial++;\n offset++;\n adjustTab = false;\n spaceAfterMarker = true;\n } else if (state.src.charCodeAt(pos) === 0x09 /* tab */) {\n spaceAfterMarker = true;\n\n if ((state.bsCount[startLine] + offset) % 4 === 3) {\n // ' >\\t test '\n // ^ -- position start of line here (tab has width===1)\n pos++;\n initial++;\n offset++;\n adjustTab = false;\n } else {\n // ' >\\t test '\n // ^ -- position start of line here + shift bsCount slightly\n // to make extra space appear\n adjustTab = true;\n }\n } else {\n spaceAfterMarker = false;\n }\n\n oldBMarks = [ state.bMarks[startLine] ];\n state.bMarks[startLine] = pos;\n\n while (pos < max) {\n ch = state.src.charCodeAt(pos);\n\n if (isSpace(ch)) {\n if (ch === 0x09) {\n offset += 4 - (offset + state.bsCount[startLine] + (adjustTab ? 1 : 0)) % 4;\n } else {\n offset++;\n }\n } else {\n break;\n }\n\n pos++;\n }\n\n oldBSCount = [ state.bsCount[startLine] ];\n state.bsCount[startLine] = state.sCount[startLine] + 1 + (spaceAfterMarker ? 1 : 0);\n\n lastLineEmpty = pos >= max;\n\n oldSCount = [ state.sCount[startLine] ];\n state.sCount[startLine] = offset - initial;\n\n oldTShift = [ state.tShift[startLine] ];\n state.tShift[startLine] = pos - state.bMarks[startLine];\n\n terminatorRules = state.md.block.ruler.getRules('blockquote');\n\n oldParentType = state.parentType;\n state.parentType = 'blockquote';\n\n // Search the end of the block\n //\n // Block ends with either:\n // 1. an empty line outside:\n // ```\n // > test\n //\n // ```\n // 2. an empty line inside:\n // ```\n // >\n // test\n // ```\n // 3. another tag:\n // ```\n // > test\n // - - -\n // ```\n for (nextLine = startLine + 1; nextLine < endLine; nextLine++) {\n // check if it's outdented, i.e. it's inside list item and indented\n // less than said list item:\n //\n // ```\n // 1. anything\n // > current blockquote\n // 2. checking this line\n // ```\n isOutdented = state.sCount[nextLine] < state.blkIndent;\n\n pos = state.bMarks[nextLine] + state.tShift[nextLine];\n max = state.eMarks[nextLine];\n\n if (pos >= max) {\n // Case 1: line is not inside the blockquote, and this line is empty.\n break;\n }\n\n if (state.src.charCodeAt(pos++) === 0x3E/* > */ && !isOutdented) {\n // This line is inside the blockquote.\n\n // set offset past spaces and \">\"\n initial = offset = state.sCount[nextLine] + 1;\n\n // skip one optional space after '>'\n if (state.src.charCodeAt(pos) === 0x20 /* space */) {\n // ' > test '\n // ^ -- position start of line here:\n pos++;\n initial++;\n offset++;\n adjustTab = false;\n spaceAfterMarker = true;\n } else if (state.src.charCodeAt(pos) === 0x09 /* tab */) {\n spaceAfterMarker = true;\n\n if ((state.bsCount[nextLine] + offset) % 4 === 3) {\n // ' >\\t test '\n // ^ -- position start of line here (tab has width===1)\n pos++;\n initial++;\n offset++;\n adjustTab = false;\n } else {\n // ' >\\t test '\n // ^ -- position start of line here + shift bsCount slightly\n // to make extra space appear\n adjustTab = true;\n }\n } else {\n spaceAfterMarker = false;\n }\n\n oldBMarks.push(state.bMarks[nextLine]);\n state.bMarks[nextLine] = pos;\n\n while (pos < max) {\n ch = state.src.charCodeAt(pos);\n\n if (isSpace(ch)) {\n if (ch === 0x09) {\n offset += 4 - (offset + state.bsCount[nextLine] + (adjustTab ? 1 : 0)) % 4;\n } else {\n offset++;\n }\n } else {\n break;\n }\n\n pos++;\n }\n\n lastLineEmpty = pos >= max;\n\n oldBSCount.push(state.bsCount[nextLine]);\n state.bsCount[nextLine] = state.sCount[nextLine] + 1 + (spaceAfterMarker ? 1 : 0);\n\n oldSCount.push(state.sCount[nextLine]);\n state.sCount[nextLine] = offset - initial;\n\n oldTShift.push(state.tShift[nextLine]);\n state.tShift[nextLine] = pos - state.bMarks[nextLine];\n continue;\n }\n\n // Case 2: line is not inside the blockquote, and the last line was empty.\n if (lastLineEmpty) { break; }\n\n // Case 3: another tag found.\n terminate = false;\n for (i = 0, l = terminatorRules.length; i < l; i++) {\n if (terminatorRules[i](state, nextLine, endLine, true)) {\n terminate = true;\n break;\n }\n }\n\n if (terminate) {\n // Quirk to enforce \"hard termination mode\" for paragraphs;\n // normally if you call `tokenize(state, startLine, nextLine)`,\n // paragraphs will look below nextLine for paragraph continuation,\n // but if blockquote is terminated by another tag, they shouldn't\n state.lineMax = nextLine;\n\n if (state.blkIndent !== 0) {\n // state.blkIndent was non-zero, we now set it to zero,\n // so we need to re-calculate all offsets to appear as\n // if indent wasn't changed\n oldBMarks.push(state.bMarks[nextLine]);\n oldBSCount.push(state.bsCount[nextLine]);\n oldTShift.push(state.tShift[nextLine]);\n oldSCount.push(state.sCount[nextLine]);\n state.sCount[nextLine] -= state.blkIndent;\n }\n\n break;\n }\n\n oldBMarks.push(state.bMarks[nextLine]);\n oldBSCount.push(state.bsCount[nextLine]);\n oldTShift.push(state.tShift[nextLine]);\n oldSCount.push(state.sCount[nextLine]);\n\n // A negative indentation means that this is a paragraph continuation\n //\n state.sCount[nextLine] = -1;\n }\n\n oldIndent = state.blkIndent;\n state.blkIndent = 0;\n\n token = state.push('blockquote_open', 'blockquote', 1);\n token.markup = '>';\n token.map = lines = [ startLine, 0 ];\n\n state.md.block.tokenize(state, startLine, nextLine);\n\n token = state.push('blockquote_close', 'blockquote', -1);\n token.markup = '>';\n\n state.lineMax = oldLineMax;\n state.parentType = oldParentType;\n lines[1] = state.line;\n\n // Restore original tShift; this might not be necessary since the parser\n // has already been here, but just to make sure we can do that.\n for (i = 0; i < oldTShift.length; i++) {\n state.bMarks[i + startLine] = oldBMarks[i];\n state.tShift[i + startLine] = oldTShift[i];\n state.sCount[i + startLine] = oldSCount[i];\n state.bsCount[i + startLine] = oldBSCount[i];\n }\n state.blkIndent = oldIndent;\n\n return true;\n};\n","// Horizontal rule\n\n'use strict';\n\nvar isSpace = require('../common/utils').isSpace;\n\n\nmodule.exports = function hr(state, startLine, endLine, silent) {\n var marker, cnt, ch, token,\n pos = state.bMarks[startLine] + state.tShift[startLine],\n max = state.eMarks[startLine];\n\n // if it's indented more than 3 spaces, it should be a code block\n if (state.sCount[startLine] - state.blkIndent >= 4) { return false; }\n\n marker = state.src.charCodeAt(pos++);\n\n // Check hr marker\n if (marker !== 0x2A/* * */ &&\n marker !== 0x2D/* - */ &&\n marker !== 0x5F/* _ */) {\n return false;\n }\n\n // markers can be mixed with spaces, but there should be at least 3 of them\n\n cnt = 1;\n while (pos < max) {\n ch = state.src.charCodeAt(pos++);\n if (ch !== marker && !isSpace(ch)) { return false; }\n if (ch === marker) { cnt++; }\n }\n\n if (cnt < 3) { return false; }\n\n if (silent) { return true; }\n\n state.line = startLine + 1;\n\n token = state.push('hr', 'hr', 0);\n token.map = [ startLine, state.line ];\n token.markup = Array(cnt + 1).join(String.fromCharCode(marker));\n\n return true;\n};\n","// Lists\n\n'use strict';\n\nvar isSpace = require('../common/utils').isSpace;\n\n\n// Search `[-+*][\\n ]`, returns next pos after marker on success\n// or -1 on fail.\nfunction skipBulletListMarker(state, startLine) {\n var marker, pos, max, ch;\n\n pos = state.bMarks[startLine] + state.tShift[startLine];\n max = state.eMarks[startLine];\n\n marker = state.src.charCodeAt(pos++);\n // Check bullet\n if (marker !== 0x2A/* * */ &&\n marker !== 0x2D/* - */ &&\n marker !== 0x2B/* + */) {\n return -1;\n }\n\n if (pos < max) {\n ch = state.src.charCodeAt(pos);\n\n if (!isSpace(ch)) {\n // \" -test \" - is not a list item\n return -1;\n }\n }\n\n return pos;\n}\n\n// Search `\\d+[.)][\\n ]`, returns next pos after marker on success\n// or -1 on fail.\nfunction skipOrderedListMarker(state, startLine) {\n var ch,\n start = state.bMarks[startLine] + state.tShift[startLine],\n pos = start,\n max = state.eMarks[startLine];\n\n // List marker should have at least 2 chars (digit + dot)\n if (pos + 1 >= max) { return -1; }\n\n ch = state.src.charCodeAt(pos++);\n\n if (ch < 0x30/* 0 */ || ch > 0x39/* 9 */) { return -1; }\n\n for (;;) {\n // EOL -> fail\n if (pos >= max) { return -1; }\n\n ch = state.src.charCodeAt(pos++);\n\n if (ch >= 0x30/* 0 */ && ch <= 0x39/* 9 */) {\n\n // List marker should have no more than 9 digits\n // (prevents integer overflow in browsers)\n if (pos - start >= 10) { return -1; }\n\n continue;\n }\n\n // found valid marker\n if (ch === 0x29/* ) */ || ch === 0x2e/* . */) {\n break;\n }\n\n return -1;\n }\n\n\n if (pos < max) {\n ch = state.src.charCodeAt(pos);\n\n if (!isSpace(ch)) {\n // \" 1.test \" - is not a list item\n return -1;\n }\n }\n return pos;\n}\n\nfunction markTightParagraphs(state, idx) {\n var i, l,\n level = state.level + 2;\n\n for (i = idx + 2, l = state.tokens.length - 2; i < l; i++) {\n if (state.tokens[i].level === level && state.tokens[i].type === 'paragraph_open') {\n state.tokens[i + 2].hidden = true;\n state.tokens[i].hidden = true;\n i += 2;\n }\n }\n}\n\n\nmodule.exports = function list(state, startLine, endLine, silent) {\n var ch,\n contentStart,\n i,\n indent,\n indentAfterMarker,\n initial,\n isOrdered,\n itemLines,\n l,\n listLines,\n listTokIdx,\n markerCharCode,\n markerValue,\n max,\n nextLine,\n offset,\n oldListIndent,\n oldParentType,\n oldSCount,\n oldTShift,\n oldTight,\n pos,\n posAfterMarker,\n prevEmptyEnd,\n start,\n terminate,\n terminatorRules,\n token,\n isTerminatingParagraph = false,\n tight = true;\n\n // if it's indented more than 3 spaces, it should be a code block\n if (state.sCount[startLine] - state.blkIndent >= 4) { return false; }\n\n // Special case:\n // - item 1\n // - item 2\n // - item 3\n // - item 4\n // - this one is a paragraph continuation\n if (state.listIndent >= 0 &&\n state.sCount[startLine] - state.listIndent >= 4 &&\n state.sCount[startLine] < state.blkIndent) {\n return false;\n }\n\n // limit conditions when list can interrupt\n // a paragraph (validation mode only)\n if (silent && state.parentType === 'paragraph') {\n // Next list item should still terminate previous list item;\n //\n // This code can fail if plugins use blkIndent as well as lists,\n // but I hope the spec gets fixed long before that happens.\n //\n if (state.sCount[startLine] >= state.blkIndent) {\n isTerminatingParagraph = true;\n }\n }\n\n // Detect list type and position after marker\n if ((posAfterMarker = skipOrderedListMarker(state, startLine)) >= 0) {\n isOrdered = true;\n start = state.bMarks[startLine] + state.tShift[startLine];\n markerValue = Number(state.src.slice(start, posAfterMarker - 1));\n\n // If we're starting a new ordered list right after\n // a paragraph, it should start with 1.\n if (isTerminatingParagraph && markerValue !== 1) return false;\n\n } else if ((posAfterMarker = skipBulletListMarker(state, startLine)) >= 0) {\n isOrdered = false;\n\n } else {\n return false;\n }\n\n // If we're starting a new unordered list right after\n // a paragraph, first line should not be empty.\n if (isTerminatingParagraph) {\n if (state.skipSpaces(posAfterMarker) >= state.eMarks[startLine]) return false;\n }\n\n // We should terminate list on style change. Remember first one to compare.\n markerCharCode = state.src.charCodeAt(posAfterMarker - 1);\n\n // For validation mode we can terminate immediately\n if (silent) { return true; }\n\n // Start list\n listTokIdx = state.tokens.length;\n\n if (isOrdered) {\n token = state.push('ordered_list_open', 'ol', 1);\n if (markerValue !== 1) {\n token.attrs = [ [ 'start', markerValue ] ];\n }\n\n } else {\n token = state.push('bullet_list_open', 'ul', 1);\n }\n\n token.map = listLines = [ startLine, 0 ];\n token.markup = String.fromCharCode(markerCharCode);\n\n //\n // Iterate list items\n //\n\n nextLine = startLine;\n prevEmptyEnd = false;\n terminatorRules = state.md.block.ruler.getRules('list');\n\n oldParentType = state.parentType;\n state.parentType = 'list';\n\n while (nextLine < endLine) {\n pos = posAfterMarker;\n max = state.eMarks[nextLine];\n\n initial = offset = state.sCount[nextLine] + posAfterMarker - (state.bMarks[startLine] + state.tShift[startLine]);\n\n while (pos < max) {\n ch = state.src.charCodeAt(pos);\n\n if (ch === 0x09) {\n offset += 4 - (offset + state.bsCount[nextLine]) % 4;\n } else if (ch === 0x20) {\n offset++;\n } else {\n break;\n }\n\n pos++;\n }\n\n contentStart = pos;\n\n if (contentStart >= max) {\n // trimming space in \"- \\n 3\" case, indent is 1 here\n indentAfterMarker = 1;\n } else {\n indentAfterMarker = offset - initial;\n }\n\n // If we have more than 4 spaces, the indent is 1\n // (the rest is just indented code block)\n if (indentAfterMarker > 4) { indentAfterMarker = 1; }\n\n // \" - test\"\n // ^^^^^ - calculating total length of this thing\n indent = initial + indentAfterMarker;\n\n // Run subparser & write tokens\n token = state.push('list_item_open', 'li', 1);\n token.markup = String.fromCharCode(markerCharCode);\n token.map = itemLines = [ startLine, 0 ];\n if (isOrdered) {\n token.info = state.src.slice(start, posAfterMarker - 1);\n }\n\n // change current state, then restore it after parser subcall\n oldTight = state.tight;\n oldTShift = state.tShift[startLine];\n oldSCount = state.sCount[startLine];\n\n // - example list\n // ^ listIndent position will be here\n // ^ blkIndent position will be here\n //\n oldListIndent = state.listIndent;\n state.listIndent = state.blkIndent;\n state.blkIndent = indent;\n\n state.tight = true;\n state.tShift[startLine] = contentStart - state.bMarks[startLine];\n state.sCount[startLine] = offset;\n\n if (contentStart >= max && state.isEmpty(startLine + 1)) {\n // workaround for this case\n // (list item is empty, list terminates before \"foo\"):\n // ~~~~~~~~\n // -\n //\n // foo\n // ~~~~~~~~\n state.line = Math.min(state.line + 2, endLine);\n } else {\n state.md.block.tokenize(state, startLine, endLine, true);\n }\n\n // If any of list item is tight, mark list as tight\n if (!state.tight || prevEmptyEnd) {\n tight = false;\n }\n // Item become loose if finish with empty line,\n // but we should filter last element, because it means list finish\n prevEmptyEnd = (state.line - startLine) > 1 && state.isEmpty(state.line - 1);\n\n state.blkIndent = state.listIndent;\n state.listIndent = oldListIndent;\n state.tShift[startLine] = oldTShift;\n state.sCount[startLine] = oldSCount;\n state.tight = oldTight;\n\n token = state.push('list_item_close', 'li', -1);\n token.markup = String.fromCharCode(markerCharCode);\n\n nextLine = startLine = state.line;\n itemLines[1] = nextLine;\n contentStart = state.bMarks[startLine];\n\n if (nextLine >= endLine) { break; }\n\n //\n // Try to check if list is terminated or continued.\n //\n if (state.sCount[nextLine] < state.blkIndent) { break; }\n\n // if it's indented more than 3 spaces, it should be a code block\n if (state.sCount[startLine] - state.blkIndent >= 4) { break; }\n\n // fail if terminating block found\n terminate = false;\n for (i = 0, l = terminatorRules.length; i < l; i++) {\n if (terminatorRules[i](state, nextLine, endLine, true)) {\n terminate = true;\n break;\n }\n }\n if (terminate) { break; }\n\n // fail if list has another type\n if (isOrdered) {\n posAfterMarker = skipOrderedListMarker(state, nextLine);\n if (posAfterMarker < 0) { break; }\n start = state.bMarks[nextLine] + state.tShift[nextLine];\n } else {\n posAfterMarker = skipBulletListMarker(state, nextLine);\n if (posAfterMarker < 0) { break; }\n }\n\n if (markerCharCode !== state.src.charCodeAt(posAfterMarker - 1)) { break; }\n }\n\n // Finalize list\n if (isOrdered) {\n token = state.push('ordered_list_close', 'ol', -1);\n } else {\n token = state.push('bullet_list_close', 'ul', -1);\n }\n token.markup = String.fromCharCode(markerCharCode);\n\n listLines[1] = nextLine;\n state.line = nextLine;\n\n state.parentType = oldParentType;\n\n // mark paragraphs tight if needed\n if (tight) {\n markTightParagraphs(state, listTokIdx);\n }\n\n return true;\n};\n","'use strict';\n\n\nvar normalizeReference = require('../common/utils').normalizeReference;\nvar isSpace = require('../common/utils').isSpace;\n\n\nmodule.exports = function reference(state, startLine, _endLine, silent) {\n var ch,\n destEndPos,\n destEndLineNo,\n endLine,\n href,\n i,\n l,\n label,\n labelEnd,\n oldParentType,\n res,\n start,\n str,\n terminate,\n terminatorRules,\n title,\n lines = 0,\n pos = state.bMarks[startLine] + state.tShift[startLine],\n max = state.eMarks[startLine],\n nextLine = startLine + 1;\n\n // if it's indented more than 3 spaces, it should be a code block\n if (state.sCount[startLine] - state.blkIndent >= 4) { return false; }\n\n if (state.src.charCodeAt(pos) !== 0x5B/* [ */) { return false; }\n\n // Simple check to quickly interrupt scan on [link](url) at the start of line.\n // Can be useful on practice: https://github.com/markdown-it/markdown-it/issues/54\n while (++pos < max) {\n if (state.src.charCodeAt(pos) === 0x5D /* ] */ &&\n state.src.charCodeAt(pos - 1) !== 0x5C/* \\ */) {\n if (pos + 1 === max) { return false; }\n if (state.src.charCodeAt(pos + 1) !== 0x3A/* : */) { return false; }\n break;\n }\n }\n\n endLine = state.lineMax;\n\n // jump line-by-line until empty one or EOF\n terminatorRules = state.md.block.ruler.getRules('reference');\n\n oldParentType = state.parentType;\n state.parentType = 'reference';\n\n for (; nextLine < endLine && !state.isEmpty(nextLine); nextLine++) {\n // this would be a code block normally, but after paragraph\n // it's considered a lazy continuation regardless of what's there\n if (state.sCount[nextLine] - state.blkIndent > 3) { continue; }\n\n // quirk for blockquotes, this line should already be checked by that rule\n if (state.sCount[nextLine] < 0) { continue; }\n\n // Some tags can terminate paragraph without empty line.\n terminate = false;\n for (i = 0, l = terminatorRules.length; i < l; i++) {\n if (terminatorRules[i](state, nextLine, endLine, true)) {\n terminate = true;\n break;\n }\n }\n if (terminate) { break; }\n }\n\n str = state.getLines(startLine, nextLine, state.blkIndent, false).trim();\n max = str.length;\n\n for (pos = 1; pos < max; pos++) {\n ch = str.charCodeAt(pos);\n if (ch === 0x5B /* [ */) {\n return false;\n } else if (ch === 0x5D /* ] */) {\n labelEnd = pos;\n break;\n } else if (ch === 0x0A /* \\n */) {\n lines++;\n } else if (ch === 0x5C /* \\ */) {\n pos++;\n if (pos < max && str.charCodeAt(pos) === 0x0A) {\n lines++;\n }\n }\n }\n\n if (labelEnd < 0 || str.charCodeAt(labelEnd + 1) !== 0x3A/* : */) { return false; }\n\n // [label]: destination 'title'\n // ^^^ skip optional whitespace here\n for (pos = labelEnd + 2; pos < max; pos++) {\n ch = str.charCodeAt(pos);\n if (ch === 0x0A) {\n lines++;\n } else if (isSpace(ch)) {\n /*eslint no-empty:0*/\n } else {\n break;\n }\n }\n\n // [label]: destination 'title'\n // ^^^^^^^^^^^ parse this\n res = state.md.helpers.parseLinkDestination(str, pos, max);\n if (!res.ok) { return false; }\n\n href = state.md.normalizeLink(res.str);\n if (!state.md.validateLink(href)) { return false; }\n\n pos = res.pos;\n lines += res.lines;\n\n // save cursor state, we could require to rollback later\n destEndPos = pos;\n destEndLineNo = lines;\n\n // [label]: destination 'title'\n // ^^^ skipping those spaces\n start = pos;\n for (; pos < max; pos++) {\n ch = str.charCodeAt(pos);\n if (ch === 0x0A) {\n lines++;\n } else if (isSpace(ch)) {\n /*eslint no-empty:0*/\n } else {\n break;\n }\n }\n\n // [label]: destination 'title'\n // ^^^^^^^ parse this\n res = state.md.helpers.parseLinkTitle(str, pos, max);\n if (pos < max && start !== pos && res.ok) {\n title = res.str;\n pos = res.pos;\n lines += res.lines;\n } else {\n title = '';\n pos = destEndPos;\n lines = destEndLineNo;\n }\n\n // skip trailing spaces until the rest of the line\n while (pos < max) {\n ch = str.charCodeAt(pos);\n if (!isSpace(ch)) { break; }\n pos++;\n }\n\n if (pos < max && str.charCodeAt(pos) !== 0x0A) {\n if (title) {\n // garbage at the end of the line after title,\n // but it could still be a valid reference if we roll back\n title = '';\n pos = destEndPos;\n lines = destEndLineNo;\n while (pos < max) {\n ch = str.charCodeAt(pos);\n if (!isSpace(ch)) { break; }\n pos++;\n }\n }\n }\n\n if (pos < max && str.charCodeAt(pos) !== 0x0A) {\n // garbage at the end of the line\n return false;\n }\n\n label = normalizeReference(str.slice(1, labelEnd));\n if (!label) {\n // CommonMark 0.20 disallows empty labels\n return false;\n }\n\n // Reference can not terminate anything. This check is for safety only.\n /*istanbul ignore if*/\n if (silent) { return true; }\n\n if (typeof state.env.references === 'undefined') {\n state.env.references = {};\n }\n if (typeof state.env.references[label] === 'undefined') {\n state.env.references[label] = { title: title, href: href };\n }\n\n state.parentType = oldParentType;\n\n state.line = startLine + lines + 1;\n return true;\n};\n","// List of valid html blocks names, accorting to commonmark spec\n// http://jgm.github.io/CommonMark/spec.html#html-blocks\n\n'use strict';\n\n\nmodule.exports = [\n 'address',\n 'article',\n 'aside',\n 'base',\n 'basefont',\n 'blockquote',\n 'body',\n 'caption',\n 'center',\n 'col',\n 'colgroup',\n 'dd',\n 'details',\n 'dialog',\n 'dir',\n 'div',\n 'dl',\n 'dt',\n 'fieldset',\n 'figcaption',\n 'figure',\n 'footer',\n 'form',\n 'frame',\n 'frameset',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'head',\n 'header',\n 'hr',\n 'html',\n 'iframe',\n 'legend',\n 'li',\n 'link',\n 'main',\n 'menu',\n 'menuitem',\n 'nav',\n 'noframes',\n 'ol',\n 'optgroup',\n 'option',\n 'p',\n 'param',\n 'section',\n 'source',\n 'summary',\n 'table',\n 'tbody',\n 'td',\n 'tfoot',\n 'th',\n 'thead',\n 'title',\n 'tr',\n 'track',\n 'ul'\n];\n","// Regexps to match html elements\n\n'use strict';\n\nvar attr_name = '[a-zA-Z_:][a-zA-Z0-9:._-]*';\n\nvar unquoted = '[^\"\\'=<>`\\\\x00-\\\\x20]+';\nvar single_quoted = \"'[^']*'\";\nvar double_quoted = '\"[^\"]*\"';\n\nvar attr_value = '(?:' + unquoted + '|' + single_quoted + '|' + double_quoted + ')';\n\nvar attribute = '(?:\\\\s+' + attr_name + '(?:\\\\s*=\\\\s*' + attr_value + ')?)';\n\nvar open_tag = '<[A-Za-z][A-Za-z0-9\\\\-]*' + attribute + '*\\\\s*\\\\/?>';\n\nvar close_tag = '<\\\\/[A-Za-z][A-Za-z0-9\\\\-]*\\\\s*>';\nvar comment = '|';\nvar processing = '<[?][\\\\s\\\\S]*?[?]>';\nvar declaration = ']*>';\nvar cdata = '';\n\nvar HTML_TAG_RE = new RegExp('^(?:' + open_tag + '|' + close_tag + '|' + comment +\n '|' + processing + '|' + declaration + '|' + cdata + ')');\nvar HTML_OPEN_CLOSE_TAG_RE = new RegExp('^(?:' + open_tag + '|' + close_tag + ')');\n\nmodule.exports.HTML_TAG_RE = HTML_TAG_RE;\nmodule.exports.HTML_OPEN_CLOSE_TAG_RE = HTML_OPEN_CLOSE_TAG_RE;\n","// HTML block\n\n'use strict';\n\n\nvar block_names = require('../common/html_blocks');\nvar HTML_OPEN_CLOSE_TAG_RE = require('../common/html_re').HTML_OPEN_CLOSE_TAG_RE;\n\n// An array of opening and corresponding closing sequences for html tags,\n// last argument defines whether it can terminate a paragraph or not\n//\nvar HTML_SEQUENCES = [\n [ /^<(script|pre|style|textarea)(?=(\\s|>|$))/i, /<\\/(script|pre|style|textarea)>/i, true ],\n [ /^/, true ],\n [ /^<\\?/, /\\?>/, true ],\n [ /^/, true ],\n [ /^/, true ],\n [ new RegExp('^|$))', 'i'), /^$/, true ],\n [ new RegExp(HTML_OPEN_CLOSE_TAG_RE.source + '\\\\s*$'), /^$/, false ]\n];\n\n\nmodule.exports = function html_block(state, startLine, endLine, silent) {\n var i, nextLine, token, lineText,\n pos = state.bMarks[startLine] + state.tShift[startLine],\n max = state.eMarks[startLine];\n\n // if it's indented more than 3 spaces, it should be a code block\n if (state.sCount[startLine] - state.blkIndent >= 4) { return false; }\n\n if (!state.md.options.html) { return false; }\n\n if (state.src.charCodeAt(pos) !== 0x3C/* < */) { return false; }\n\n lineText = state.src.slice(pos, max);\n\n for (i = 0; i < HTML_SEQUENCES.length; i++) {\n if (HTML_SEQUENCES[i][0].test(lineText)) { break; }\n }\n\n if (i === HTML_SEQUENCES.length) { return false; }\n\n if (silent) {\n // true if this sequence can be a terminator, false otherwise\n return HTML_SEQUENCES[i][2];\n }\n\n nextLine = startLine + 1;\n\n // If we are here - we detected HTML block.\n // Let's roll down till block end.\n if (!HTML_SEQUENCES[i][1].test(lineText)) {\n for (; nextLine < endLine; nextLine++) {\n if (state.sCount[nextLine] < state.blkIndent) { break; }\n\n pos = state.bMarks[nextLine] + state.tShift[nextLine];\n max = state.eMarks[nextLine];\n lineText = state.src.slice(pos, max);\n\n if (HTML_SEQUENCES[i][1].test(lineText)) {\n if (lineText.length !== 0) { nextLine++; }\n break;\n }\n }\n }\n\n state.line = nextLine;\n\n token = state.push('html_block', '', 0);\n token.map = [ startLine, nextLine ];\n token.content = state.getLines(startLine, nextLine, state.blkIndent, true);\n\n return true;\n};\n","// heading (#, ##, ...)\n\n'use strict';\n\nvar isSpace = require('../common/utils').isSpace;\n\n\nmodule.exports = function heading(state, startLine, endLine, silent) {\n var ch, level, tmp, token,\n pos = state.bMarks[startLine] + state.tShift[startLine],\n max = state.eMarks[startLine];\n\n // if it's indented more than 3 spaces, it should be a code block\n if (state.sCount[startLine] - state.blkIndent >= 4) { return false; }\n\n ch = state.src.charCodeAt(pos);\n\n if (ch !== 0x23/* # */ || pos >= max) { return false; }\n\n // count heading level\n level = 1;\n ch = state.src.charCodeAt(++pos);\n while (ch === 0x23/* # */ && pos < max && level <= 6) {\n level++;\n ch = state.src.charCodeAt(++pos);\n }\n\n if (level > 6 || (pos < max && !isSpace(ch))) { return false; }\n\n if (silent) { return true; }\n\n // Let's cut tails like ' ### ' from the end of string\n\n max = state.skipSpacesBack(max, pos);\n tmp = state.skipCharsBack(max, 0x23, pos); // #\n if (tmp > pos && isSpace(state.src.charCodeAt(tmp - 1))) {\n max = tmp;\n }\n\n state.line = startLine + 1;\n\n token = state.push('heading_open', 'h' + String(level), 1);\n token.markup = '########'.slice(0, level);\n token.map = [ startLine, state.line ];\n\n token = state.push('inline', '', 0);\n token.content = state.src.slice(pos, max).trim();\n token.map = [ startLine, state.line ];\n token.children = [];\n\n token = state.push('heading_close', 'h' + String(level), -1);\n token.markup = '########'.slice(0, level);\n\n return true;\n};\n","// lheading (---, ===)\n\n'use strict';\n\n\nmodule.exports = function lheading(state, startLine, endLine/*, silent*/) {\n var content, terminate, i, l, token, pos, max, level, marker,\n nextLine = startLine + 1, oldParentType,\n terminatorRules = state.md.block.ruler.getRules('paragraph');\n\n // if it's indented more than 3 spaces, it should be a code block\n if (state.sCount[startLine] - state.blkIndent >= 4) { return false; }\n\n oldParentType = state.parentType;\n state.parentType = 'paragraph'; // use paragraph to match terminatorRules\n\n // jump line-by-line until empty one or EOF\n for (; nextLine < endLine && !state.isEmpty(nextLine); nextLine++) {\n // this would be a code block normally, but after paragraph\n // it's considered a lazy continuation regardless of what's there\n if (state.sCount[nextLine] - state.blkIndent > 3) { continue; }\n\n //\n // Check for underline in setext header\n //\n if (state.sCount[nextLine] >= state.blkIndent) {\n pos = state.bMarks[nextLine] + state.tShift[nextLine];\n max = state.eMarks[nextLine];\n\n if (pos < max) {\n marker = state.src.charCodeAt(pos);\n\n if (marker === 0x2D/* - */ || marker === 0x3D/* = */) {\n pos = state.skipChars(pos, marker);\n pos = state.skipSpaces(pos);\n\n if (pos >= max) {\n level = (marker === 0x3D/* = */ ? 1 : 2);\n break;\n }\n }\n }\n }\n\n // quirk for blockquotes, this line should already be checked by that rule\n if (state.sCount[nextLine] < 0) { continue; }\n\n // Some tags can terminate paragraph without empty line.\n terminate = false;\n for (i = 0, l = terminatorRules.length; i < l; i++) {\n if (terminatorRules[i](state, nextLine, endLine, true)) {\n terminate = true;\n break;\n }\n }\n if (terminate) { break; }\n }\n\n if (!level) {\n // Didn't find valid underline\n return false;\n }\n\n content = state.getLines(startLine, nextLine, state.blkIndent, false).trim();\n\n state.line = nextLine + 1;\n\n token = state.push('heading_open', 'h' + String(level), 1);\n token.markup = String.fromCharCode(marker);\n token.map = [ startLine, state.line ];\n\n token = state.push('inline', '', 0);\n token.content = content;\n token.map = [ startLine, state.line - 1 ];\n token.children = [];\n\n token = state.push('heading_close', 'h' + String(level), -1);\n token.markup = String.fromCharCode(marker);\n\n state.parentType = oldParentType;\n\n return true;\n};\n","// Paragraph\n\n'use strict';\n\n\nmodule.exports = function paragraph(state, startLine/*, endLine*/) {\n var content, terminate, i, l, token, oldParentType,\n nextLine = startLine + 1,\n terminatorRules = state.md.block.ruler.getRules('paragraph'),\n endLine = state.lineMax;\n\n oldParentType = state.parentType;\n state.parentType = 'paragraph';\n\n // jump line-by-line until empty one or EOF\n for (; nextLine < endLine && !state.isEmpty(nextLine); nextLine++) {\n // this would be a code block normally, but after paragraph\n // it's considered a lazy continuation regardless of what's there\n if (state.sCount[nextLine] - state.blkIndent > 3) { continue; }\n\n // quirk for blockquotes, this line should already be checked by that rule\n if (state.sCount[nextLine] < 0) { continue; }\n\n // Some tags can terminate paragraph without empty line.\n terminate = false;\n for (i = 0, l = terminatorRules.length; i < l; i++) {\n if (terminatorRules[i](state, nextLine, endLine, true)) {\n terminate = true;\n break;\n }\n }\n if (terminate) { break; }\n }\n\n content = state.getLines(startLine, nextLine, state.blkIndent, false).trim();\n\n state.line = nextLine;\n\n token = state.push('paragraph_open', 'p', 1);\n token.map = [ startLine, state.line ];\n\n token = state.push('inline', '', 0);\n token.content = content;\n token.map = [ startLine, state.line ];\n token.children = [];\n\n token = state.push('paragraph_close', 'p', -1);\n\n state.parentType = oldParentType;\n\n return true;\n};\n","// Parser state class\n\n'use strict';\n\nvar Token = require('../token');\nvar isSpace = require('../common/utils').isSpace;\n\n\nfunction StateBlock(src, md, env, tokens) {\n var ch, s, start, pos, len, indent, offset, indent_found;\n\n this.src = src;\n\n // link to parser instance\n this.md = md;\n\n this.env = env;\n\n //\n // Internal state vartiables\n //\n\n this.tokens = tokens;\n\n this.bMarks = []; // line begin offsets for fast jumps\n this.eMarks = []; // line end offsets for fast jumps\n this.tShift = []; // offsets of the first non-space characters (tabs not expanded)\n this.sCount = []; // indents for each line (tabs expanded)\n\n // An amount of virtual spaces (tabs expanded) between beginning\n // of each line (bMarks) and real beginning of that line.\n //\n // It exists only as a hack because blockquotes override bMarks\n // losing information in the process.\n //\n // It's used only when expanding tabs, you can think about it as\n // an initial tab length, e.g. bsCount=21 applied to string `\\t123`\n // means first tab should be expanded to 4-21%4 === 3 spaces.\n //\n this.bsCount = [];\n\n // block parser variables\n this.blkIndent = 0; // required block content indent (for example, if we are\n // inside a list, it would be positioned after list marker)\n this.line = 0; // line index in src\n this.lineMax = 0; // lines count\n this.tight = false; // loose/tight mode for lists\n this.ddIndent = -1; // indent of the current dd block (-1 if there isn't any)\n this.listIndent = -1; // indent of the current list block (-1 if there isn't any)\n\n // can be 'blockquote', 'list', 'root', 'paragraph' or 'reference'\n // used in lists to determine if they interrupt a paragraph\n this.parentType = 'root';\n\n this.level = 0;\n\n // renderer\n this.result = '';\n\n // Create caches\n // Generate markers.\n s = this.src;\n indent_found = false;\n\n for (start = pos = indent = offset = 0, len = s.length; pos < len; pos++) {\n ch = s.charCodeAt(pos);\n\n if (!indent_found) {\n if (isSpace(ch)) {\n indent++;\n\n if (ch === 0x09) {\n offset += 4 - offset % 4;\n } else {\n offset++;\n }\n continue;\n } else {\n indent_found = true;\n }\n }\n\n if (ch === 0x0A || pos === len - 1) {\n if (ch !== 0x0A) { pos++; }\n this.bMarks.push(start);\n this.eMarks.push(pos);\n this.tShift.push(indent);\n this.sCount.push(offset);\n this.bsCount.push(0);\n\n indent_found = false;\n indent = 0;\n offset = 0;\n start = pos + 1;\n }\n }\n\n // Push fake entry to simplify cache bounds checks\n this.bMarks.push(s.length);\n this.eMarks.push(s.length);\n this.tShift.push(0);\n this.sCount.push(0);\n this.bsCount.push(0);\n\n this.lineMax = this.bMarks.length - 1; // don't count last fake line\n}\n\n// Push new token to \"stream\".\n//\nStateBlock.prototype.push = function (type, tag, nesting) {\n var token = new Token(type, tag, nesting);\n token.block = true;\n\n if (nesting < 0) this.level--; // closing tag\n token.level = this.level;\n if (nesting > 0) this.level++; // opening tag\n\n this.tokens.push(token);\n return token;\n};\n\nStateBlock.prototype.isEmpty = function isEmpty(line) {\n return this.bMarks[line] + this.tShift[line] >= this.eMarks[line];\n};\n\nStateBlock.prototype.skipEmptyLines = function skipEmptyLines(from) {\n for (var max = this.lineMax; from < max; from++) {\n if (this.bMarks[from] + this.tShift[from] < this.eMarks[from]) {\n break;\n }\n }\n return from;\n};\n\n// Skip spaces from given position.\nStateBlock.prototype.skipSpaces = function skipSpaces(pos) {\n var ch;\n\n for (var max = this.src.length; pos < max; pos++) {\n ch = this.src.charCodeAt(pos);\n if (!isSpace(ch)) { break; }\n }\n return pos;\n};\n\n// Skip spaces from given position in reverse.\nStateBlock.prototype.skipSpacesBack = function skipSpacesBack(pos, min) {\n if (pos <= min) { return pos; }\n\n while (pos > min) {\n if (!isSpace(this.src.charCodeAt(--pos))) { return pos + 1; }\n }\n return pos;\n};\n\n// Skip char codes from given position\nStateBlock.prototype.skipChars = function skipChars(pos, code) {\n for (var max = this.src.length; pos < max; pos++) {\n if (this.src.charCodeAt(pos) !== code) { break; }\n }\n return pos;\n};\n\n// Skip char codes reverse from given position - 1\nStateBlock.prototype.skipCharsBack = function skipCharsBack(pos, code, min) {\n if (pos <= min) { return pos; }\n\n while (pos > min) {\n if (code !== this.src.charCodeAt(--pos)) { return pos + 1; }\n }\n return pos;\n};\n\n// cut lines range from source.\nStateBlock.prototype.getLines = function getLines(begin, end, indent, keepLastLF) {\n var i, lineIndent, ch, first, last, queue, lineStart,\n line = begin;\n\n if (begin >= end) {\n return '';\n }\n\n queue = new Array(end - begin);\n\n for (i = 0; line < end; line++, i++) {\n lineIndent = 0;\n lineStart = first = this.bMarks[line];\n\n if (line + 1 < end || keepLastLF) {\n // No need for bounds check because we have fake entry on tail.\n last = this.eMarks[line] + 1;\n } else {\n last = this.eMarks[line];\n }\n\n while (first < last && lineIndent < indent) {\n ch = this.src.charCodeAt(first);\n\n if (isSpace(ch)) {\n if (ch === 0x09) {\n lineIndent += 4 - (lineIndent + this.bsCount[line]) % 4;\n } else {\n lineIndent++;\n }\n } else if (first - lineStart < this.tShift[line]) {\n // patched tShift masked characters to look like spaces (blockquotes, list markers)\n lineIndent++;\n } else {\n break;\n }\n\n first++;\n }\n\n if (lineIndent > indent) {\n // partially expanding tabs in code blocks, e.g '\\t\\tfoobar'\n // with indent=2 becomes ' \\tfoobar'\n queue[i] = new Array(lineIndent - indent + 1).join(' ') + this.src.slice(first, last);\n } else {\n queue[i] = this.src.slice(first, last);\n }\n }\n\n return queue.join('');\n};\n\n// re-export Token class to use in block rules\nStateBlock.prototype.Token = Token;\n\n\nmodule.exports = StateBlock;\n","/** internal\n * class ParserBlock\n *\n * Block-level tokenizer.\n **/\n'use strict';\n\n\nvar Ruler = require('./ruler');\n\n\nvar _rules = [\n // First 2 params - rule name & source. Secondary array - list of rules,\n // which can be terminated by this one.\n [ 'table', require('./rules_block/table'), [ 'paragraph', 'reference' ] ],\n [ 'code', require('./rules_block/code') ],\n [ 'fence', require('./rules_block/fence'), [ 'paragraph', 'reference', 'blockquote', 'list' ] ],\n [ 'blockquote', require('./rules_block/blockquote'), [ 'paragraph', 'reference', 'blockquote', 'list' ] ],\n [ 'hr', require('./rules_block/hr'), [ 'paragraph', 'reference', 'blockquote', 'list' ] ],\n [ 'list', require('./rules_block/list'), [ 'paragraph', 'reference', 'blockquote' ] ],\n [ 'reference', require('./rules_block/reference') ],\n [ 'html_block', require('./rules_block/html_block'), [ 'paragraph', 'reference', 'blockquote' ] ],\n [ 'heading', require('./rules_block/heading'), [ 'paragraph', 'reference', 'blockquote' ] ],\n [ 'lheading', require('./rules_block/lheading') ],\n [ 'paragraph', require('./rules_block/paragraph') ]\n];\n\n\n/**\n * new ParserBlock()\n **/\nfunction ParserBlock() {\n /**\n * ParserBlock#ruler -> Ruler\n *\n * [[Ruler]] instance. Keep configuration of block rules.\n **/\n this.ruler = new Ruler();\n\n for (var i = 0; i < _rules.length; i++) {\n this.ruler.push(_rules[i][0], _rules[i][1], { alt: (_rules[i][2] || []).slice() });\n }\n}\n\n\n// Generate tokens for input range\n//\nParserBlock.prototype.tokenize = function (state, startLine, endLine) {\n var ok, i,\n rules = this.ruler.getRules(''),\n len = rules.length,\n line = startLine,\n hasEmptyLines = false,\n maxNesting = state.md.options.maxNesting;\n\n while (line < endLine) {\n state.line = line = state.skipEmptyLines(line);\n if (line >= endLine) { break; }\n\n // Termination condition for nested calls.\n // Nested calls currently used for blockquotes & lists\n if (state.sCount[line] < state.blkIndent) { break; }\n\n // If nesting level exceeded - skip tail to the end. That's not ordinary\n // situation and we should not care about content.\n if (state.level >= maxNesting) {\n state.line = endLine;\n break;\n }\n\n // Try all possible rules.\n // On success, rule should:\n //\n // - update `state.line`\n // - update `state.tokens`\n // - return true\n\n for (i = 0; i < len; i++) {\n ok = rules[i](state, line, endLine, false);\n if (ok) { break; }\n }\n\n // set state.tight if we had an empty line before current tag\n // i.e. latest empty line should not count\n state.tight = !hasEmptyLines;\n\n // paragraph might \"eat\" one newline after it in nested lists\n if (state.isEmpty(state.line - 1)) {\n hasEmptyLines = true;\n }\n\n line = state.line;\n\n if (line < endLine && state.isEmpty(line)) {\n hasEmptyLines = true;\n line++;\n state.line = line;\n }\n }\n};\n\n\n/**\n * ParserBlock.parse(str, md, env, outTokens)\n *\n * Process input string and push block tokens into `outTokens`\n **/\nParserBlock.prototype.parse = function (src, md, env, outTokens) {\n var state;\n\n if (!src) { return; }\n\n state = new this.State(src, md, env, outTokens);\n\n this.tokenize(state, state.line, state.lineMax);\n};\n\n\nParserBlock.prototype.State = require('./rules_block/state_block');\n\n\nmodule.exports = ParserBlock;\n","// Skip text characters for text token, place those to pending buffer\n// and increment current pos\n\n'use strict';\n\n\n// Rule to skip pure text\n// '{}$%@~+=:' reserved for extentions\n\n// !, \", #, $, %, &, ', (, ), *, +, ,, -, ., /, :, ;, <, =, >, ?, @, [, \\, ], ^, _, `, {, |, }, or ~\n\n// !!!! Don't confuse with \"Markdown ASCII Punctuation\" chars\n// http://spec.commonmark.org/0.15/#ascii-punctuation-character\nfunction isTerminatorChar(ch) {\n switch (ch) {\n case 0x0A/* \\n */:\n case 0x21/* ! */:\n case 0x23/* # */:\n case 0x24/* $ */:\n case 0x25/* % */:\n case 0x26/* & */:\n case 0x2A/* * */:\n case 0x2B/* + */:\n case 0x2D/* - */:\n case 0x3A/* : */:\n case 0x3C/* < */:\n case 0x3D/* = */:\n case 0x3E/* > */:\n case 0x40/* @ */:\n case 0x5B/* [ */:\n case 0x5C/* \\ */:\n case 0x5D/* ] */:\n case 0x5E/* ^ */:\n case 0x5F/* _ */:\n case 0x60/* ` */:\n case 0x7B/* { */:\n case 0x7D/* } */:\n case 0x7E/* ~ */:\n return true;\n default:\n return false;\n }\n}\n\nmodule.exports = function text(state, silent) {\n var pos = state.pos;\n\n while (pos < state.posMax && !isTerminatorChar(state.src.charCodeAt(pos))) {\n pos++;\n }\n\n if (pos === state.pos) { return false; }\n\n if (!silent) { state.pending += state.src.slice(state.pos, pos); }\n\n state.pos = pos;\n\n return true;\n};\n\n// Alternative implementation, for memory.\n//\n// It costs 10% of performance, but allows extend terminators list, if place it\n// to `ParcerInline` property. Probably, will switch to it sometime, such\n// flexibility required.\n\n/*\nvar TERMINATOR_RE = /[\\n!#$%&*+\\-:<=>@[\\\\\\]^_`{}~]/;\n\nmodule.exports = function text(state, silent) {\n var pos = state.pos,\n idx = state.src.slice(pos).search(TERMINATOR_RE);\n\n // first char is terminator -> empty text\n if (idx === 0) { return false; }\n\n // no terminator -> text till end of string\n if (idx < 0) {\n if (!silent) { state.pending += state.src.slice(pos); }\n state.pos = state.src.length;\n return true;\n }\n\n if (!silent) { state.pending += state.src.slice(pos, pos + idx); }\n\n state.pos += idx;\n\n return true;\n};*/\n","// Process links like https://example.org/\n\n'use strict';\n\n\n// RFC3986: scheme = ALPHA *( ALPHA / DIGIT / \"+\" / \"-\" / \".\" )\nvar SCHEME_RE = /(?:^|[^a-z0-9.+-])([a-z][a-z0-9.+-]*)$/i;\n\n\nmodule.exports = function linkify(state, silent) {\n var pos, max, match, proto, link, url, fullUrl, token;\n\n if (!state.md.options.linkify) return false;\n if (state.linkLevel > 0) return false;\n\n pos = state.pos;\n max = state.posMax;\n\n if (pos + 3 > max) return false;\n if (state.src.charCodeAt(pos) !== 0x3A/* : */) return false;\n if (state.src.charCodeAt(pos + 1) !== 0x2F/* / */) return false;\n if (state.src.charCodeAt(pos + 2) !== 0x2F/* / */) return false;\n\n match = state.pending.match(SCHEME_RE);\n if (!match) return false;\n\n proto = match[1];\n\n link = state.md.linkify.matchAtStart(state.src.slice(pos - proto.length));\n if (!link) return false;\n\n url = link.url;\n\n // disallow '*' at the end of the link (conflicts with emphasis)\n url = url.replace(/\\*+$/, '');\n\n fullUrl = state.md.normalizeLink(url);\n if (!state.md.validateLink(fullUrl)) return false;\n\n if (!silent) {\n state.pending = state.pending.slice(0, -proto.length);\n\n token = state.push('link_open', 'a', 1);\n token.attrs = [ [ 'href', fullUrl ] ];\n token.markup = 'linkify';\n token.info = 'auto';\n\n token = state.push('text', '', 0);\n token.content = state.md.normalizeLinkText(url);\n\n token = state.push('link_close', 'a', -1);\n token.markup = 'linkify';\n token.info = 'auto';\n }\n\n state.pos += url.length - proto.length;\n return true;\n};\n","// Proceess '\\n'\n\n'use strict';\n\nvar isSpace = require('../common/utils').isSpace;\n\n\nmodule.exports = function newline(state, silent) {\n var pmax, max, ws, pos = state.pos;\n\n if (state.src.charCodeAt(pos) !== 0x0A/* \\n */) { return false; }\n\n pmax = state.pending.length - 1;\n max = state.posMax;\n\n // ' \\n' -> hardbreak\n // Lookup in pending chars is bad practice! Don't copy to other rules!\n // Pending string is stored in concat mode, indexed lookups will cause\n // convertion to flat mode.\n if (!silent) {\n if (pmax >= 0 && state.pending.charCodeAt(pmax) === 0x20) {\n if (pmax >= 1 && state.pending.charCodeAt(pmax - 1) === 0x20) {\n // Find whitespaces tail of pending chars.\n ws = pmax - 1;\n while (ws >= 1 && state.pending.charCodeAt(ws - 1) === 0x20) ws--;\n\n state.pending = state.pending.slice(0, ws);\n state.push('hardbreak', 'br', 0);\n } else {\n state.pending = state.pending.slice(0, -1);\n state.push('softbreak', 'br', 0);\n }\n\n } else {\n state.push('softbreak', 'br', 0);\n }\n }\n\n pos++;\n\n // skip heading spaces for next line\n while (pos < max && isSpace(state.src.charCodeAt(pos))) { pos++; }\n\n state.pos = pos;\n return true;\n};\n","// Process escaped chars and hardbreaks\n\n'use strict';\n\nvar isSpace = require('../common/utils').isSpace;\n\nvar ESCAPED = [];\n\nfor (var i = 0; i < 256; i++) { ESCAPED.push(0); }\n\n'\\\\!\"#$%&\\'()*+,./:;<=>?@[]^_`{|}~-'\n .split('').forEach(function (ch) { ESCAPED[ch.charCodeAt(0)] = 1; });\n\n\nmodule.exports = function escape(state, silent) {\n var ch1, ch2, origStr, escapedStr, token, pos = state.pos, max = state.posMax;\n\n if (state.src.charCodeAt(pos) !== 0x5C/* \\ */) return false;\n pos++;\n\n // '\\' at the end of the inline block\n if (pos >= max) return false;\n\n ch1 = state.src.charCodeAt(pos);\n\n if (ch1 === 0x0A) {\n if (!silent) {\n state.push('hardbreak', 'br', 0);\n }\n\n pos++;\n // skip leading whitespaces from next line\n while (pos < max) {\n ch1 = state.src.charCodeAt(pos);\n if (!isSpace(ch1)) break;\n pos++;\n }\n\n state.pos = pos;\n return true;\n }\n\n escapedStr = state.src[pos];\n\n if (ch1 >= 0xD800 && ch1 <= 0xDBFF && pos + 1 < max) {\n ch2 = state.src.charCodeAt(pos + 1);\n\n if (ch2 >= 0xDC00 && ch2 <= 0xDFFF) {\n escapedStr += state.src[pos + 1];\n pos++;\n }\n }\n\n origStr = '\\\\' + escapedStr;\n\n if (!silent) {\n token = state.push('text_special', '', 0);\n\n if (ch1 < 256 && ESCAPED[ch1] !== 0) {\n token.content = escapedStr;\n } else {\n token.content = origStr;\n }\n\n token.markup = origStr;\n token.info = 'escape';\n }\n\n state.pos = pos + 1;\n return true;\n};\n","// Parse backticks\n\n'use strict';\n\n\nmodule.exports = function backtick(state, silent) {\n var start, max, marker, token, matchStart, matchEnd, openerLength, closerLength,\n pos = state.pos,\n ch = state.src.charCodeAt(pos);\n\n if (ch !== 0x60/* ` */) { return false; }\n\n start = pos;\n pos++;\n max = state.posMax;\n\n // scan marker length\n while (pos < max && state.src.charCodeAt(pos) === 0x60/* ` */) { pos++; }\n\n marker = state.src.slice(start, pos);\n openerLength = marker.length;\n\n if (state.backticksScanned && (state.backticks[openerLength] || 0) <= start) {\n if (!silent) state.pending += marker;\n state.pos += openerLength;\n return true;\n }\n\n matchStart = matchEnd = pos;\n\n // Nothing found in the cache, scan until the end of the line (or until marker is found)\n while ((matchStart = state.src.indexOf('`', matchEnd)) !== -1) {\n matchEnd = matchStart + 1;\n\n // scan marker length\n while (matchEnd < max && state.src.charCodeAt(matchEnd) === 0x60/* ` */) { matchEnd++; }\n\n closerLength = matchEnd - matchStart;\n\n if (closerLength === openerLength) {\n // Found matching closer length.\n if (!silent) {\n token = state.push('code_inline', 'code', 0);\n token.markup = marker;\n token.content = state.src.slice(pos, matchStart)\n .replace(/\\n/g, ' ')\n .replace(/^ (.+) $/, '$1');\n }\n state.pos = matchEnd;\n return true;\n }\n\n // Some different length found, put it in cache as upper limit of where closer can be found\n state.backticks[closerLength] = matchStart;\n }\n\n // Scanned through the end, didn't find anything\n state.backticksScanned = true;\n\n if (!silent) state.pending += marker;\n state.pos += openerLength;\n return true;\n};\n","// ~~strike through~~\n//\n'use strict';\n\n\n// Insert each marker as a separate text token, and add it to delimiter list\n//\nmodule.exports.tokenize = function strikethrough(state, silent) {\n var i, scanned, token, len, ch,\n start = state.pos,\n marker = state.src.charCodeAt(start);\n\n if (silent) { return false; }\n\n if (marker !== 0x7E/* ~ */) { return false; }\n\n scanned = state.scanDelims(state.pos, true);\n len = scanned.length;\n ch = String.fromCharCode(marker);\n\n if (len < 2) { return false; }\n\n if (len % 2) {\n token = state.push('text', '', 0);\n token.content = ch;\n len--;\n }\n\n for (i = 0; i < len; i += 2) {\n token = state.push('text', '', 0);\n token.content = ch + ch;\n\n state.delimiters.push({\n marker: marker,\n length: 0, // disable \"rule of 3\" length checks meant for emphasis\n token: state.tokens.length - 1,\n end: -1,\n open: scanned.can_open,\n close: scanned.can_close\n });\n }\n\n state.pos += scanned.length;\n\n return true;\n};\n\n\nfunction postProcess(state, delimiters) {\n var i, j,\n startDelim,\n endDelim,\n token,\n loneMarkers = [],\n max = delimiters.length;\n\n for (i = 0; i < max; i++) {\n startDelim = delimiters[i];\n\n if (startDelim.marker !== 0x7E/* ~ */) {\n continue;\n }\n\n if (startDelim.end === -1) {\n continue;\n }\n\n endDelim = delimiters[startDelim.end];\n\n token = state.tokens[startDelim.token];\n token.type = 's_open';\n token.tag = 's';\n token.nesting = 1;\n token.markup = '~~';\n token.content = '';\n\n token = state.tokens[endDelim.token];\n token.type = 's_close';\n token.tag = 's';\n token.nesting = -1;\n token.markup = '~~';\n token.content = '';\n\n if (state.tokens[endDelim.token - 1].type === 'text' &&\n state.tokens[endDelim.token - 1].content === '~') {\n\n loneMarkers.push(endDelim.token - 1);\n }\n }\n\n // If a marker sequence has an odd number of characters, it's splitted\n // like this: `~~~~~` -> `~` + `~~` + `~~`, leaving one marker at the\n // start of the sequence.\n //\n // So, we have to move all those markers after subsequent s_close tags.\n //\n while (loneMarkers.length) {\n i = loneMarkers.pop();\n j = i + 1;\n\n while (j < state.tokens.length && state.tokens[j].type === 's_close') {\n j++;\n }\n\n j--;\n\n if (i !== j) {\n token = state.tokens[j];\n state.tokens[j] = state.tokens[i];\n state.tokens[i] = token;\n }\n }\n}\n\n\n// Walk through delimiter list and replace text tokens with tags\n//\nmodule.exports.postProcess = function strikethrough(state) {\n var curr,\n tokens_meta = state.tokens_meta,\n max = state.tokens_meta.length;\n\n postProcess(state, state.delimiters);\n\n for (curr = 0; curr < max; curr++) {\n if (tokens_meta[curr] && tokens_meta[curr].delimiters) {\n postProcess(state, tokens_meta[curr].delimiters);\n }\n }\n};\n","// Process *this* and _that_\n//\n'use strict';\n\n\n// Insert each marker as a separate text token, and add it to delimiter list\n//\nmodule.exports.tokenize = function emphasis(state, silent) {\n var i, scanned, token,\n start = state.pos,\n marker = state.src.charCodeAt(start);\n\n if (silent) { return false; }\n\n if (marker !== 0x5F /* _ */ && marker !== 0x2A /* * */) { return false; }\n\n scanned = state.scanDelims(state.pos, marker === 0x2A);\n\n for (i = 0; i < scanned.length; i++) {\n token = state.push('text', '', 0);\n token.content = String.fromCharCode(marker);\n\n state.delimiters.push({\n // Char code of the starting marker (number).\n //\n marker: marker,\n\n // Total length of these series of delimiters.\n //\n length: scanned.length,\n\n // A position of the token this delimiter corresponds to.\n //\n token: state.tokens.length - 1,\n\n // If this delimiter is matched as a valid opener, `end` will be\n // equal to its position, otherwise it's `-1`.\n //\n end: -1,\n\n // Boolean flags that determine if this delimiter could open or close\n // an emphasis.\n //\n open: scanned.can_open,\n close: scanned.can_close\n });\n }\n\n state.pos += scanned.length;\n\n return true;\n};\n\n\nfunction postProcess(state, delimiters) {\n var i,\n startDelim,\n endDelim,\n token,\n ch,\n isStrong,\n max = delimiters.length;\n\n for (i = max - 1; i >= 0; i--) {\n startDelim = delimiters[i];\n\n if (startDelim.marker !== 0x5F/* _ */ && startDelim.marker !== 0x2A/* * */) {\n continue;\n }\n\n // Process only opening markers\n if (startDelim.end === -1) {\n continue;\n }\n\n endDelim = delimiters[startDelim.end];\n\n // If the previous delimiter has the same marker and is adjacent to this one,\n // merge those into one strong delimiter.\n //\n // `whatever` -> `whatever`\n //\n isStrong = i > 0 &&\n delimiters[i - 1].end === startDelim.end + 1 &&\n // check that first two markers match and adjacent\n delimiters[i - 1].marker === startDelim.marker &&\n delimiters[i - 1].token === startDelim.token - 1 &&\n // check that last two markers are adjacent (we can safely assume they match)\n delimiters[startDelim.end + 1].token === endDelim.token + 1;\n\n ch = String.fromCharCode(startDelim.marker);\n\n token = state.tokens[startDelim.token];\n token.type = isStrong ? 'strong_open' : 'em_open';\n token.tag = isStrong ? 'strong' : 'em';\n token.nesting = 1;\n token.markup = isStrong ? ch + ch : ch;\n token.content = '';\n\n token = state.tokens[endDelim.token];\n token.type = isStrong ? 'strong_close' : 'em_close';\n token.tag = isStrong ? 'strong' : 'em';\n token.nesting = -1;\n token.markup = isStrong ? ch + ch : ch;\n token.content = '';\n\n if (isStrong) {\n state.tokens[delimiters[i - 1].token].content = '';\n state.tokens[delimiters[startDelim.end + 1].token].content = '';\n i--;\n }\n }\n}\n\n\n// Walk through delimiter list and replace text tokens with tags\n//\nmodule.exports.postProcess = function emphasis(state) {\n var curr,\n tokens_meta = state.tokens_meta,\n max = state.tokens_meta.length;\n\n postProcess(state, state.delimiters);\n\n for (curr = 0; curr < max; curr++) {\n if (tokens_meta[curr] && tokens_meta[curr].delimiters) {\n postProcess(state, tokens_meta[curr].delimiters);\n }\n }\n};\n","// Process [link]( \"stuff\")\n\n'use strict';\n\nvar normalizeReference = require('../common/utils').normalizeReference;\nvar isSpace = require('../common/utils').isSpace;\n\n\nmodule.exports = function link(state, silent) {\n var attrs,\n code,\n label,\n labelEnd,\n labelStart,\n pos,\n res,\n ref,\n token,\n href = '',\n title = '',\n oldPos = state.pos,\n max = state.posMax,\n start = state.pos,\n parseReference = true;\n\n if (state.src.charCodeAt(state.pos) !== 0x5B/* [ */) { return false; }\n\n labelStart = state.pos + 1;\n labelEnd = state.md.helpers.parseLinkLabel(state, state.pos, true);\n\n // parser failed to find ']', so it's not a valid link\n if (labelEnd < 0) { return false; }\n\n pos = labelEnd + 1;\n if (pos < max && state.src.charCodeAt(pos) === 0x28/* ( */) {\n //\n // Inline link\n //\n\n // might have found a valid shortcut link, disable reference parsing\n parseReference = false;\n\n // [link]( \"title\" )\n // ^^ skipping these spaces\n pos++;\n for (; pos < max; pos++) {\n code = state.src.charCodeAt(pos);\n if (!isSpace(code) && code !== 0x0A) { break; }\n }\n if (pos >= max) { return false; }\n\n // [link]( \"title\" )\n // ^^^^^^ parsing link destination\n start = pos;\n res = state.md.helpers.parseLinkDestination(state.src, pos, state.posMax);\n if (res.ok) {\n href = state.md.normalizeLink(res.str);\n if (state.md.validateLink(href)) {\n pos = res.pos;\n } else {\n href = '';\n }\n\n // [link]( \"title\" )\n // ^^ skipping these spaces\n start = pos;\n for (; pos < max; pos++) {\n code = state.src.charCodeAt(pos);\n if (!isSpace(code) && code !== 0x0A) { break; }\n }\n\n // [link]( \"title\" )\n // ^^^^^^^ parsing link title\n res = state.md.helpers.parseLinkTitle(state.src, pos, state.posMax);\n if (pos < max && start !== pos && res.ok) {\n title = res.str;\n pos = res.pos;\n\n // [link]( \"title\" )\n // ^^ skipping these spaces\n for (; pos < max; pos++) {\n code = state.src.charCodeAt(pos);\n if (!isSpace(code) && code !== 0x0A) { break; }\n }\n }\n }\n\n if (pos >= max || state.src.charCodeAt(pos) !== 0x29/* ) */) {\n // parsing a valid shortcut link failed, fallback to reference\n parseReference = true;\n }\n pos++;\n }\n\n if (parseReference) {\n //\n // Link reference\n //\n if (typeof state.env.references === 'undefined') { return false; }\n\n if (pos < max && state.src.charCodeAt(pos) === 0x5B/* [ */) {\n start = pos + 1;\n pos = state.md.helpers.parseLinkLabel(state, pos);\n if (pos >= 0) {\n label = state.src.slice(start, pos++);\n } else {\n pos = labelEnd + 1;\n }\n } else {\n pos = labelEnd + 1;\n }\n\n // covers label === '' and label === undefined\n // (collapsed reference link and shortcut reference link respectively)\n if (!label) { label = state.src.slice(labelStart, labelEnd); }\n\n ref = state.env.references[normalizeReference(label)];\n if (!ref) {\n state.pos = oldPos;\n return false;\n }\n href = ref.href;\n title = ref.title;\n }\n\n //\n // We found the end of the link, and know for a fact it's a valid link;\n // so all that's left to do is to call tokenizer.\n //\n if (!silent) {\n state.pos = labelStart;\n state.posMax = labelEnd;\n\n token = state.push('link_open', 'a', 1);\n token.attrs = attrs = [ [ 'href', href ] ];\n if (title) {\n attrs.push([ 'title', title ]);\n }\n\n state.linkLevel++;\n state.md.inline.tokenize(state);\n state.linkLevel--;\n\n token = state.push('link_close', 'a', -1);\n }\n\n state.pos = pos;\n state.posMax = max;\n return true;\n};\n","// Process ![image]( \"title\")\n\n'use strict';\n\nvar normalizeReference = require('../common/utils').normalizeReference;\nvar isSpace = require('../common/utils').isSpace;\n\n\nmodule.exports = function image(state, silent) {\n var attrs,\n code,\n content,\n label,\n labelEnd,\n labelStart,\n pos,\n ref,\n res,\n title,\n token,\n tokens,\n start,\n href = '',\n oldPos = state.pos,\n max = state.posMax;\n\n if (state.src.charCodeAt(state.pos) !== 0x21/* ! */) { return false; }\n if (state.src.charCodeAt(state.pos + 1) !== 0x5B/* [ */) { return false; }\n\n labelStart = state.pos + 2;\n labelEnd = state.md.helpers.parseLinkLabel(state, state.pos + 1, false);\n\n // parser failed to find ']', so it's not a valid link\n if (labelEnd < 0) { return false; }\n\n pos = labelEnd + 1;\n if (pos < max && state.src.charCodeAt(pos) === 0x28/* ( */) {\n //\n // Inline link\n //\n\n // [link]( \"title\" )\n // ^^ skipping these spaces\n pos++;\n for (; pos < max; pos++) {\n code = state.src.charCodeAt(pos);\n if (!isSpace(code) && code !== 0x0A) { break; }\n }\n if (pos >= max) { return false; }\n\n // [link]( \"title\" )\n // ^^^^^^ parsing link destination\n start = pos;\n res = state.md.helpers.parseLinkDestination(state.src, pos, state.posMax);\n if (res.ok) {\n href = state.md.normalizeLink(res.str);\n if (state.md.validateLink(href)) {\n pos = res.pos;\n } else {\n href = '';\n }\n }\n\n // [link]( \"title\" )\n // ^^ skipping these spaces\n start = pos;\n for (; pos < max; pos++) {\n code = state.src.charCodeAt(pos);\n if (!isSpace(code) && code !== 0x0A) { break; }\n }\n\n // [link]( \"title\" )\n // ^^^^^^^ parsing link title\n res = state.md.helpers.parseLinkTitle(state.src, pos, state.posMax);\n if (pos < max && start !== pos && res.ok) {\n title = res.str;\n pos = res.pos;\n\n // [link]( \"title\" )\n // ^^ skipping these spaces\n for (; pos < max; pos++) {\n code = state.src.charCodeAt(pos);\n if (!isSpace(code) && code !== 0x0A) { break; }\n }\n } else {\n title = '';\n }\n\n if (pos >= max || state.src.charCodeAt(pos) !== 0x29/* ) */) {\n state.pos = oldPos;\n return false;\n }\n pos++;\n } else {\n //\n // Link reference\n //\n if (typeof state.env.references === 'undefined') { return false; }\n\n if (pos < max && state.src.charCodeAt(pos) === 0x5B/* [ */) {\n start = pos + 1;\n pos = state.md.helpers.parseLinkLabel(state, pos);\n if (pos >= 0) {\n label = state.src.slice(start, pos++);\n } else {\n pos = labelEnd + 1;\n }\n } else {\n pos = labelEnd + 1;\n }\n\n // covers label === '' and label === undefined\n // (collapsed reference link and shortcut reference link respectively)\n if (!label) { label = state.src.slice(labelStart, labelEnd); }\n\n ref = state.env.references[normalizeReference(label)];\n if (!ref) {\n state.pos = oldPos;\n return false;\n }\n href = ref.href;\n title = ref.title;\n }\n\n //\n // We found the end of the link, and know for a fact it's a valid link;\n // so all that's left to do is to call tokenizer.\n //\n if (!silent) {\n content = state.src.slice(labelStart, labelEnd);\n\n state.md.inline.parse(\n content,\n state.md,\n state.env,\n tokens = []\n );\n\n token = state.push('image', 'img', 0);\n token.attrs = attrs = [ [ 'src', href ], [ 'alt', '' ] ];\n token.children = tokens;\n token.content = content;\n\n if (title) {\n attrs.push([ 'title', title ]);\n }\n }\n\n state.pos = pos;\n state.posMax = max;\n return true;\n};\n","// Process autolinks ''\n\n'use strict';\n\n\n/*eslint max-len:0*/\nvar EMAIL_RE = /^([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])?)*)$/;\nvar AUTOLINK_RE = /^([a-zA-Z][a-zA-Z0-9+.\\-]{1,31}):([^<>\\x00-\\x20]*)$/;\n\n\nmodule.exports = function autolink(state, silent) {\n var url, fullUrl, token, ch, start, max,\n pos = state.pos;\n\n if (state.src.charCodeAt(pos) !== 0x3C/* < */) { return false; }\n\n start = state.pos;\n max = state.posMax;\n\n for (;;) {\n if (++pos >= max) return false;\n\n ch = state.src.charCodeAt(pos);\n\n if (ch === 0x3C /* < */) return false;\n if (ch === 0x3E /* > */) break;\n }\n\n url = state.src.slice(start + 1, pos);\n\n if (AUTOLINK_RE.test(url)) {\n fullUrl = state.md.normalizeLink(url);\n if (!state.md.validateLink(fullUrl)) { return false; }\n\n if (!silent) {\n token = state.push('link_open', 'a', 1);\n token.attrs = [ [ 'href', fullUrl ] ];\n token.markup = 'autolink';\n token.info = 'auto';\n\n token = state.push('text', '', 0);\n token.content = state.md.normalizeLinkText(url);\n\n token = state.push('link_close', 'a', -1);\n token.markup = 'autolink';\n token.info = 'auto';\n }\n\n state.pos += url.length + 2;\n return true;\n }\n\n if (EMAIL_RE.test(url)) {\n fullUrl = state.md.normalizeLink('mailto:' + url);\n if (!state.md.validateLink(fullUrl)) { return false; }\n\n if (!silent) {\n token = state.push('link_open', 'a', 1);\n token.attrs = [ [ 'href', fullUrl ] ];\n token.markup = 'autolink';\n token.info = 'auto';\n\n token = state.push('text', '', 0);\n token.content = state.md.normalizeLinkText(url);\n\n token = state.push('link_close', 'a', -1);\n token.markup = 'autolink';\n token.info = 'auto';\n }\n\n state.pos += url.length + 2;\n return true;\n }\n\n return false;\n};\n","// Process html tags\n\n'use strict';\n\n\nvar HTML_TAG_RE = require('../common/html_re').HTML_TAG_RE;\n\n\nfunction isLinkOpen(str) {\n return /^\\s]/i.test(str);\n}\nfunction isLinkClose(str) {\n return /^<\\/a\\s*>/i.test(str);\n}\n\n\nfunction isLetter(ch) {\n /*eslint no-bitwise:0*/\n var lc = ch | 0x20; // to lower case\n return (lc >= 0x61/* a */) && (lc <= 0x7a/* z */);\n}\n\n\nmodule.exports = function html_inline(state, silent) {\n var ch, match, max, token,\n pos = state.pos;\n\n if (!state.md.options.html) { return false; }\n\n // Check start\n max = state.posMax;\n if (state.src.charCodeAt(pos) !== 0x3C/* < */ ||\n pos + 2 >= max) {\n return false;\n }\n\n // Quick fail on second char\n ch = state.src.charCodeAt(pos + 1);\n if (ch !== 0x21/* ! */ &&\n ch !== 0x3F/* ? */ &&\n ch !== 0x2F/* / */ &&\n !isLetter(ch)) {\n return false;\n }\n\n match = state.src.slice(pos).match(HTML_TAG_RE);\n if (!match) { return false; }\n\n if (!silent) {\n token = state.push('html_inline', '', 0);\n token.content = state.src.slice(pos, pos + match[0].length);\n\n if (isLinkOpen(token.content)) state.linkLevel++;\n if (isLinkClose(token.content)) state.linkLevel--;\n }\n state.pos += match[0].length;\n return true;\n};\n","// Process html entity - {, ¯, ", ...\n\n'use strict';\n\nvar entities = require('../common/entities');\nvar has = require('../common/utils').has;\nvar isValidEntityCode = require('../common/utils').isValidEntityCode;\nvar fromCodePoint = require('../common/utils').fromCodePoint;\n\n\nvar DIGITAL_RE = /^&#((?:x[a-f0-9]{1,6}|[0-9]{1,7}));/i;\nvar NAMED_RE = /^&([a-z][a-z0-9]{1,31});/i;\n\n\nmodule.exports = function entity(state, silent) {\n var ch, code, match, token, pos = state.pos, max = state.posMax;\n\n if (state.src.charCodeAt(pos) !== 0x26/* & */) return false;\n\n if (pos + 1 >= max) return false;\n\n ch = state.src.charCodeAt(pos + 1);\n\n if (ch === 0x23 /* # */) {\n match = state.src.slice(pos).match(DIGITAL_RE);\n if (match) {\n if (!silent) {\n code = match[1][0].toLowerCase() === 'x' ? parseInt(match[1].slice(1), 16) : parseInt(match[1], 10);\n\n token = state.push('text_special', '', 0);\n token.content = isValidEntityCode(code) ? fromCodePoint(code) : fromCodePoint(0xFFFD);\n token.markup = match[0];\n token.info = 'entity';\n }\n state.pos += match[0].length;\n return true;\n }\n } else {\n match = state.src.slice(pos).match(NAMED_RE);\n if (match) {\n if (has(entities, match[1])) {\n if (!silent) {\n token = state.push('text_special', '', 0);\n token.content = entities[match[1]];\n token.markup = match[0];\n token.info = 'entity';\n }\n state.pos += match[0].length;\n return true;\n }\n }\n }\n\n return false;\n};\n","// For each opening emphasis-like marker find a matching closing one\n//\n'use strict';\n\n\nfunction processDelimiters(state, delimiters) {\n var closerIdx, openerIdx, closer, opener, minOpenerIdx, newMinOpenerIdx,\n isOddMatch, lastJump,\n openersBottom = {},\n max = delimiters.length;\n\n if (!max) return;\n\n // headerIdx is the first delimiter of the current (where closer is) delimiter run\n var headerIdx = 0;\n var lastTokenIdx = -2; // needs any value lower than -1\n var jumps = [];\n\n for (closerIdx = 0; closerIdx < max; closerIdx++) {\n closer = delimiters[closerIdx];\n\n jumps.push(0);\n\n // markers belong to same delimiter run if:\n // - they have adjacent tokens\n // - AND markers are the same\n //\n if (delimiters[headerIdx].marker !== closer.marker || lastTokenIdx !== closer.token - 1) {\n headerIdx = closerIdx;\n }\n\n lastTokenIdx = closer.token;\n\n // Length is only used for emphasis-specific \"rule of 3\",\n // if it's not defined (in strikethrough or 3rd party plugins),\n // we can default it to 0 to disable those checks.\n //\n closer.length = closer.length || 0;\n\n if (!closer.close) continue;\n\n // Previously calculated lower bounds (previous fails)\n // for each marker, each delimiter length modulo 3,\n // and for whether this closer can be an opener;\n // https://github.com/commonmark/cmark/commit/34250e12ccebdc6372b8b49c44fab57c72443460\n if (!openersBottom.hasOwnProperty(closer.marker)) {\n openersBottom[closer.marker] = [ -1, -1, -1, -1, -1, -1 ];\n }\n\n minOpenerIdx = openersBottom[closer.marker][(closer.open ? 3 : 0) + (closer.length % 3)];\n\n openerIdx = headerIdx - jumps[headerIdx] - 1;\n\n newMinOpenerIdx = openerIdx;\n\n for (; openerIdx > minOpenerIdx; openerIdx -= jumps[openerIdx] + 1) {\n opener = delimiters[openerIdx];\n\n if (opener.marker !== closer.marker) continue;\n\n if (opener.open && opener.end < 0) {\n\n isOddMatch = false;\n\n // from spec:\n //\n // If one of the delimiters can both open and close emphasis, then the\n // sum of the lengths of the delimiter runs containing the opening and\n // closing delimiters must not be a multiple of 3 unless both lengths\n // are multiples of 3.\n //\n if (opener.close || closer.open) {\n if ((opener.length + closer.length) % 3 === 0) {\n if (opener.length % 3 !== 0 || closer.length % 3 !== 0) {\n isOddMatch = true;\n }\n }\n }\n\n if (!isOddMatch) {\n // If previous delimiter cannot be an opener, we can safely skip\n // the entire sequence in future checks. This is required to make\n // sure algorithm has linear complexity (see *_*_*_*_*_... case).\n //\n lastJump = openerIdx > 0 && !delimiters[openerIdx - 1].open ?\n jumps[openerIdx - 1] + 1 :\n 0;\n\n jumps[closerIdx] = closerIdx - openerIdx + lastJump;\n jumps[openerIdx] = lastJump;\n\n closer.open = false;\n opener.end = closerIdx;\n opener.close = false;\n newMinOpenerIdx = -1;\n // treat next token as start of run,\n // it optimizes skips in **<...>**a**<...>** pathological case\n lastTokenIdx = -2;\n break;\n }\n }\n }\n\n if (newMinOpenerIdx !== -1) {\n // If match for this delimiter run failed, we want to set lower bound for\n // future lookups. This is required to make sure algorithm has linear\n // complexity.\n //\n // See details here:\n // https://github.com/commonmark/cmark/issues/178#issuecomment-270417442\n //\n openersBottom[closer.marker][(closer.open ? 3 : 0) + ((closer.length || 0) % 3)] = newMinOpenerIdx;\n }\n }\n}\n\n\nmodule.exports = function link_pairs(state) {\n var curr,\n tokens_meta = state.tokens_meta,\n max = state.tokens_meta.length;\n\n processDelimiters(state, state.delimiters);\n\n for (curr = 0; curr < max; curr++) {\n if (tokens_meta[curr] && tokens_meta[curr].delimiters) {\n processDelimiters(state, tokens_meta[curr].delimiters);\n }\n }\n};\n","// Clean up tokens after emphasis and strikethrough postprocessing:\n// merge adjacent text nodes into one and re-calculate all token levels\n//\n// This is necessary because initially emphasis delimiter markers (*, _, ~)\n// are treated as their own separate text tokens. Then emphasis rule either\n// leaves them as text (needed to merge with adjacent text) or turns them\n// into opening/closing tags (which messes up levels inside).\n//\n'use strict';\n\n\nmodule.exports = function fragments_join(state) {\n var curr, last,\n level = 0,\n tokens = state.tokens,\n max = state.tokens.length;\n\n for (curr = last = 0; curr < max; curr++) {\n // re-calculate levels after emphasis/strikethrough turns some text nodes\n // into opening/closing tags\n if (tokens[curr].nesting < 0) level--; // closing tag\n tokens[curr].level = level;\n if (tokens[curr].nesting > 0) level++; // opening tag\n\n if (tokens[curr].type === 'text' &&\n curr + 1 < max &&\n tokens[curr + 1].type === 'text') {\n\n // collapse two adjacent text nodes\n tokens[curr + 1].content = tokens[curr].content + tokens[curr + 1].content;\n } else {\n if (curr !== last) { tokens[last] = tokens[curr]; }\n\n last++;\n }\n }\n\n if (curr !== last) {\n tokens.length = last;\n }\n};\n","// Inline parser state\n\n'use strict';\n\n\nvar Token = require('../token');\nvar isWhiteSpace = require('../common/utils').isWhiteSpace;\nvar isPunctChar = require('../common/utils').isPunctChar;\nvar isMdAsciiPunct = require('../common/utils').isMdAsciiPunct;\n\n\nfunction StateInline(src, md, env, outTokens) {\n this.src = src;\n this.env = env;\n this.md = md;\n this.tokens = outTokens;\n this.tokens_meta = Array(outTokens.length);\n\n this.pos = 0;\n this.posMax = this.src.length;\n this.level = 0;\n this.pending = '';\n this.pendingLevel = 0;\n\n // Stores { start: end } pairs. Useful for backtrack\n // optimization of pairs parse (emphasis, strikes).\n this.cache = {};\n\n // List of emphasis-like delimiters for current tag\n this.delimiters = [];\n\n // Stack of delimiter lists for upper level tags\n this._prev_delimiters = [];\n\n // backtick length => last seen position\n this.backticks = {};\n this.backticksScanned = false;\n\n // Counter used to disable inline linkify-it execution\n // inside and markdown links\n this.linkLevel = 0;\n}\n\n\n// Flush pending text\n//\nStateInline.prototype.pushPending = function () {\n var token = new Token('text', '', 0);\n token.content = this.pending;\n token.level = this.pendingLevel;\n this.tokens.push(token);\n this.pending = '';\n return token;\n};\n\n\n// Push new token to \"stream\".\n// If pending text exists - flush it as text token\n//\nStateInline.prototype.push = function (type, tag, nesting) {\n if (this.pending) {\n this.pushPending();\n }\n\n var token = new Token(type, tag, nesting);\n var token_meta = null;\n\n if (nesting < 0) {\n // closing tag\n this.level--;\n this.delimiters = this._prev_delimiters.pop();\n }\n\n token.level = this.level;\n\n if (nesting > 0) {\n // opening tag\n this.level++;\n this._prev_delimiters.push(this.delimiters);\n this.delimiters = [];\n token_meta = { delimiters: this.delimiters };\n }\n\n this.pendingLevel = this.level;\n this.tokens.push(token);\n this.tokens_meta.push(token_meta);\n return token;\n};\n\n\n// Scan a sequence of emphasis-like markers, and determine whether\n// it can start an emphasis sequence or end an emphasis sequence.\n//\n// - start - position to scan from (it should point at a valid marker);\n// - canSplitWord - determine if these markers can be found inside a word\n//\nStateInline.prototype.scanDelims = function (start, canSplitWord) {\n var pos = start, lastChar, nextChar, count, can_open, can_close,\n isLastWhiteSpace, isLastPunctChar,\n isNextWhiteSpace, isNextPunctChar,\n left_flanking = true,\n right_flanking = true,\n max = this.posMax,\n marker = this.src.charCodeAt(start);\n\n // treat beginning of the line as a whitespace\n lastChar = start > 0 ? this.src.charCodeAt(start - 1) : 0x20;\n\n while (pos < max && this.src.charCodeAt(pos) === marker) { pos++; }\n\n count = pos - start;\n\n // treat end of the line as a whitespace\n nextChar = pos < max ? this.src.charCodeAt(pos) : 0x20;\n\n isLastPunctChar = isMdAsciiPunct(lastChar) || isPunctChar(String.fromCharCode(lastChar));\n isNextPunctChar = isMdAsciiPunct(nextChar) || isPunctChar(String.fromCharCode(nextChar));\n\n isLastWhiteSpace = isWhiteSpace(lastChar);\n isNextWhiteSpace = isWhiteSpace(nextChar);\n\n if (isNextWhiteSpace) {\n left_flanking = false;\n } else if (isNextPunctChar) {\n if (!(isLastWhiteSpace || isLastPunctChar)) {\n left_flanking = false;\n }\n }\n\n if (isLastWhiteSpace) {\n right_flanking = false;\n } else if (isLastPunctChar) {\n if (!(isNextWhiteSpace || isNextPunctChar)) {\n right_flanking = false;\n }\n }\n\n if (!canSplitWord) {\n can_open = left_flanking && (!right_flanking || isLastPunctChar);\n can_close = right_flanking && (!left_flanking || isNextPunctChar);\n } else {\n can_open = left_flanking;\n can_close = right_flanking;\n }\n\n return {\n can_open: can_open,\n can_close: can_close,\n length: count\n };\n};\n\n\n// re-export Token class to use in block rules\nStateInline.prototype.Token = Token;\n\n\nmodule.exports = StateInline;\n","/** internal\n * class ParserInline\n *\n * Tokenizes paragraph content.\n **/\n'use strict';\n\n\nvar Ruler = require('./ruler');\n\n\n////////////////////////////////////////////////////////////////////////////////\n// Parser rules\n\nvar _rules = [\n [ 'text', require('./rules_inline/text') ],\n [ 'linkify', require('./rules_inline/linkify') ],\n [ 'newline', require('./rules_inline/newline') ],\n [ 'escape', require('./rules_inline/escape') ],\n [ 'backticks', require('./rules_inline/backticks') ],\n [ 'strikethrough', require('./rules_inline/strikethrough').tokenize ],\n [ 'emphasis', require('./rules_inline/emphasis').tokenize ],\n [ 'link', require('./rules_inline/link') ],\n [ 'image', require('./rules_inline/image') ],\n [ 'autolink', require('./rules_inline/autolink') ],\n [ 'html_inline', require('./rules_inline/html_inline') ],\n [ 'entity', require('./rules_inline/entity') ]\n];\n\n// `rule2` ruleset was created specifically for emphasis/strikethrough\n// post-processing and may be changed in the future.\n//\n// Don't use this for anything except pairs (plugins working with `balance_pairs`).\n//\nvar _rules2 = [\n [ 'balance_pairs', require('./rules_inline/balance_pairs') ],\n [ 'strikethrough', require('./rules_inline/strikethrough').postProcess ],\n [ 'emphasis', require('./rules_inline/emphasis').postProcess ],\n // rules for pairs separate '**' into its own text tokens, which may be left unused,\n // rule below merges unused segments back with the rest of the text\n [ 'fragments_join', require('./rules_inline/fragments_join') ]\n];\n\n\n/**\n * new ParserInline()\n **/\nfunction ParserInline() {\n var i;\n\n /**\n * ParserInline#ruler -> Ruler\n *\n * [[Ruler]] instance. Keep configuration of inline rules.\n **/\n this.ruler = new Ruler();\n\n for (i = 0; i < _rules.length; i++) {\n this.ruler.push(_rules[i][0], _rules[i][1]);\n }\n\n /**\n * ParserInline#ruler2 -> Ruler\n *\n * [[Ruler]] instance. Second ruler used for post-processing\n * (e.g. in emphasis-like rules).\n **/\n this.ruler2 = new Ruler();\n\n for (i = 0; i < _rules2.length; i++) {\n this.ruler2.push(_rules2[i][0], _rules2[i][1]);\n }\n}\n\n\n// Skip single token by running all rules in validation mode;\n// returns `true` if any rule reported success\n//\nParserInline.prototype.skipToken = function (state) {\n var ok, i, pos = state.pos,\n rules = this.ruler.getRules(''),\n len = rules.length,\n maxNesting = state.md.options.maxNesting,\n cache = state.cache;\n\n\n if (typeof cache[pos] !== 'undefined') {\n state.pos = cache[pos];\n return;\n }\n\n if (state.level < maxNesting) {\n for (i = 0; i < len; i++) {\n // Increment state.level and decrement it later to limit recursion.\n // It's harmless to do here, because no tokens are created. But ideally,\n // we'd need a separate private state variable for this purpose.\n //\n state.level++;\n ok = rules[i](state, true);\n state.level--;\n\n if (ok) { break; }\n }\n } else {\n // Too much nesting, just skip until the end of the paragraph.\n //\n // NOTE: this will cause links to behave incorrectly in the following case,\n // when an amount of `[` is exactly equal to `maxNesting + 1`:\n //\n // [[[[[[[[[[[[[[[[[[[[[foo]()\n //\n // TODO: remove this workaround when CM standard will allow nested links\n // (we can replace it by preventing links from being parsed in\n // validation mode)\n //\n state.pos = state.posMax;\n }\n\n if (!ok) { state.pos++; }\n cache[pos] = state.pos;\n};\n\n\n// Generate tokens for input range\n//\nParserInline.prototype.tokenize = function (state) {\n var ok, i,\n rules = this.ruler.getRules(''),\n len = rules.length,\n end = state.posMax,\n maxNesting = state.md.options.maxNesting;\n\n while (state.pos < end) {\n // Try all possible rules.\n // On success, rule should:\n //\n // - update `state.pos`\n // - update `state.tokens`\n // - return true\n\n if (state.level < maxNesting) {\n for (i = 0; i < len; i++) {\n ok = rules[i](state, false);\n if (ok) { break; }\n }\n }\n\n if (ok) {\n if (state.pos >= end) { break; }\n continue;\n }\n\n state.pending += state.src[state.pos++];\n }\n\n if (state.pending) {\n state.pushPending();\n }\n};\n\n\n/**\n * ParserInline.parse(str, md, env, outTokens)\n *\n * Process input string and push inline tokens into `outTokens`\n **/\nParserInline.prototype.parse = function (str, md, env, outTokens) {\n var i, rules, len;\n var state = new this.State(str, md, env, outTokens);\n\n this.tokenize(state);\n\n rules = this.ruler2.getRules('');\n len = rules.length;\n\n for (i = 0; i < len; i++) {\n rules[i](state);\n }\n};\n\n\nParserInline.prototype.State = require('./rules_inline/state_inline');\n\n\nmodule.exports = ParserInline;\n","// markdown-it default options\n\n'use strict';\n\n\nmodule.exports = {\n options: {\n html: false, // Enable HTML tags in source\n xhtmlOut: false, // Use '/' to close single tags (
)\n breaks: false, // Convert '\\n' in paragraphs into
\n langPrefix: 'language-', // CSS language prefix for fenced blocks\n linkify: false, // autoconvert URL-like texts to links\n\n // Enable some language-neutral replacements + quotes beautification\n typographer: false,\n\n // Double + single quotes replacement pairs, when typographer enabled,\n // and smartquotes on. Could be either a String or an Array.\n //\n // For example, you can use '«»„“' for Russian, '„“‚‘' for German,\n // and ['«\\xA0', '\\xA0»', '‹\\xA0', '\\xA0›'] for French (including nbsp).\n quotes: '\\u201c\\u201d\\u2018\\u2019', /* “”‘’ */\n\n // Highlighter function. Should return escaped HTML,\n // or '' if the source string is not changed and should be escaped externaly.\n // If result starts with )\n breaks: false, // Convert '\\n' in paragraphs into
\n langPrefix: 'language-', // CSS language prefix for fenced blocks\n linkify: false, // autoconvert URL-like texts to links\n\n // Enable some language-neutral replacements + quotes beautification\n typographer: false,\n\n // Double + single quotes replacement pairs, when typographer enabled,\n // and smartquotes on. Could be either a String or an Array.\n //\n // For example, you can use '«»„“' for Russian, '„“‚‘' for German,\n // and ['«\\xA0', '\\xA0»', '‹\\xA0', '\\xA0›'] for French (including nbsp).\n quotes: '\\u201c\\u201d\\u2018\\u2019', /* “”‘’ */\n\n // Highlighter function. Should return escaped HTML,\n // or '' if the source string is not changed and should be escaped externaly.\n // If result starts with )\n breaks: false, // Convert '\\n' in paragraphs into
\n langPrefix: 'language-', // CSS language prefix for fenced blocks\n linkify: false, // autoconvert URL-like texts to links\n\n // Enable some language-neutral replacements + quotes beautification\n typographer: false,\n\n // Double + single quotes replacement pairs, when typographer enabled,\n // and smartquotes on. Could be either a String or an Array.\n //\n // For example, you can use '«»„“' for Russian, '„“‚‘' for German,\n // and ['«\\xA0', '\\xA0»', '‹\\xA0', '\\xA0›'] for French (including nbsp).\n quotes: '\\u201c\\u201d\\u2018\\u2019', /* “”‘’ */\n\n // Highlighter function. Should return escaped HTML,\n // or '' if the source string is not changed and should be escaped externaly.\n // If result starts with = 0) {\n try {\n parsed.hostname = punycode.toASCII(parsed.hostname);\n } catch (er) { /**/ }\n }\n }\n\n return mdurl.encode(mdurl.format(parsed));\n}\n\nfunction normalizeLinkText(url) {\n var parsed = mdurl.parse(url, true);\n\n if (parsed.hostname) {\n // Encode hostnames in urls like:\n // `http://host/`, `https://host/`, `mailto:user@host`, `//host/`\n //\n // We don't encode unknown schemas, because it's likely that we encode\n // something we shouldn't (e.g. `skype:name` treated as `skype:host`)\n //\n if (!parsed.protocol || RECODE_HOSTNAME_FOR.indexOf(parsed.protocol) >= 0) {\n try {\n parsed.hostname = punycode.toUnicode(parsed.hostname);\n } catch (er) { /**/ }\n }\n }\n\n // add '%' to exclude list because of https://github.com/markdown-it/markdown-it/issues/720\n return mdurl.decode(mdurl.format(parsed), mdurl.decode.defaultChars + '%');\n}\n\n\n/**\n * class MarkdownIt\n *\n * Main parser/renderer class.\n *\n * ##### Usage\n *\n * ```javascript\n * // node.js, \"classic\" way:\n * var MarkdownIt = require('markdown-it'),\n * md = new MarkdownIt();\n * var result = md.render('# markdown-it rulezz!');\n *\n * // node.js, the same, but with sugar:\n * var md = require('markdown-it')();\n * var result = md.render('# markdown-it rulezz!');\n *\n * // browser without AMD, added to \"window\" on script load\n * // Note, there are no dash.\n * var md = window.markdownit();\n * var result = md.render('# markdown-it rulezz!');\n * ```\n *\n * Single line rendering, without paragraph wrap:\n *\n * ```javascript\n * var md = require('markdown-it')();\n * var result = md.renderInline('__markdown-it__ rulezz!');\n * ```\n **/\n\n/**\n * new MarkdownIt([presetName, options])\n * - presetName (String): optional, `commonmark` / `zero`\n * - options (Object)\n *\n * Creates parser instanse with given config. Can be called without `new`.\n *\n * ##### presetName\n *\n * MarkdownIt provides named presets as a convenience to quickly\n * enable/disable active syntax rules and options for common use cases.\n *\n * - [\"commonmark\"](https://github.com/markdown-it/markdown-it/blob/master/lib/presets/commonmark.js) -\n * configures parser to strict [CommonMark](http://commonmark.org/) mode.\n * - [default](https://github.com/markdown-it/markdown-it/blob/master/lib/presets/default.js) -\n * similar to GFM, used when no preset name given. Enables all available rules,\n * but still without html, typographer & autolinker.\n * - [\"zero\"](https://github.com/markdown-it/markdown-it/blob/master/lib/presets/zero.js) -\n * all rules disabled. Useful to quickly setup your config via `.enable()`.\n * For example, when you need only `bold` and `italic` markup and nothing else.\n *\n * ##### options:\n *\n * - __html__ - `false`. Set `true` to enable HTML tags in source. Be careful!\n * That's not safe! You may need external sanitizer to protect output from XSS.\n * It's better to extend features via plugins, instead of enabling HTML.\n * - __xhtmlOut__ - `false`. Set `true` to add '/' when closing single tags\n * (`
`). This is needed only for full CommonMark compatibility. In real\n * world you will need HTML output.\n * - __breaks__ - `false`. Set `true` to convert `\\n` in paragraphs into `
`.\n * - __langPrefix__ - `language-`. CSS language class prefix for fenced blocks.\n * Can be useful for external highlighters.\n * - __linkify__ - `false`. Set `true` to autoconvert URL-like text to links.\n * - __typographer__ - `false`. Set `true` to enable [some language-neutral\n * replacement](https://github.com/markdown-it/markdown-it/blob/master/lib/rules_core/replacements.js) +\n * quotes beautification (smartquotes).\n * - __quotes__ - `“”‘’`, String or Array. Double + single quotes replacement\n * pairs, when typographer enabled and smartquotes on. For example, you can\n * use `'«»„“'` for Russian, `'„“‚‘'` for German, and\n * `['«\\xA0', '\\xA0»', '‹\\xA0', '\\xA0›']` for French (including nbsp).\n * - __highlight__ - `null`. Highlighter function for fenced code blocks.\n * Highlighter `function (str, lang)` should return escaped HTML. It can also\n * return empty string if the source was not changed and should be escaped\n * externaly. If result starts with `):\n *\n * ```javascript\n * var hljs = require('highlight.js') // https://highlightjs.org/\n *\n * // Actual default values\n * var md = require('markdown-it')({\n * highlight: function (str, lang) {\n * if (lang && hljs.getLanguage(lang)) {\n * try {\n * return '
' +\n *                hljs.highlight(str, { language: lang, ignoreIllegals: true }).value +\n *                '
';\n * } catch (__) {}\n * }\n *\n * return '
' + md.utils.escapeHtml(str) + '
';\n * }\n * });\n * ```\n *\n **/\nfunction MarkdownIt(presetName, options) {\n if (!(this instanceof MarkdownIt)) {\n return new MarkdownIt(presetName, options);\n }\n\n if (!options) {\n if (!utils.isString(presetName)) {\n options = presetName || {};\n presetName = 'default';\n }\n }\n\n /**\n * MarkdownIt#inline -> ParserInline\n *\n * Instance of [[ParserInline]]. You may need it to add new rules when\n * writing plugins. For simple rules control use [[MarkdownIt.disable]] and\n * [[MarkdownIt.enable]].\n **/\n this.inline = new ParserInline();\n\n /**\n * MarkdownIt#block -> ParserBlock\n *\n * Instance of [[ParserBlock]]. You may need it to add new rules when\n * writing plugins. For simple rules control use [[MarkdownIt.disable]] and\n * [[MarkdownIt.enable]].\n **/\n this.block = new ParserBlock();\n\n /**\n * MarkdownIt#core -> Core\n *\n * Instance of [[Core]] chain executor. You may need it to add new rules when\n * writing plugins. For simple rules control use [[MarkdownIt.disable]] and\n * [[MarkdownIt.enable]].\n **/\n this.core = new ParserCore();\n\n /**\n * MarkdownIt#renderer -> Renderer\n *\n * Instance of [[Renderer]]. Use it to modify output look. Or to add rendering\n * rules for new token types, generated by plugins.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')();\n *\n * function myToken(tokens, idx, options, env, self) {\n * //...\n * return result;\n * };\n *\n * md.renderer.rules['my_token'] = myToken\n * ```\n *\n * See [[Renderer]] docs and [source code](https://github.com/markdown-it/markdown-it/blob/master/lib/renderer.js).\n **/\n this.renderer = new Renderer();\n\n /**\n * MarkdownIt#linkify -> LinkifyIt\n *\n * [linkify-it](https://github.com/markdown-it/linkify-it) instance.\n * Used by [linkify](https://github.com/markdown-it/markdown-it/blob/master/lib/rules_core/linkify.js)\n * rule.\n **/\n this.linkify = new LinkifyIt();\n\n /**\n * MarkdownIt#validateLink(url) -> Boolean\n *\n * Link validation function. CommonMark allows too much in links. By default\n * we disable `javascript:`, `vbscript:`, `file:` schemas, and almost all `data:...` schemas\n * except some embedded image types.\n *\n * You can change this behaviour:\n *\n * ```javascript\n * var md = require('markdown-it')();\n * // enable everything\n * md.validateLink = function () { return true; }\n * ```\n **/\n this.validateLink = validateLink;\n\n /**\n * MarkdownIt#normalizeLink(url) -> String\n *\n * Function used to encode link url to a machine-readable format,\n * which includes url-encoding, punycode, etc.\n **/\n this.normalizeLink = normalizeLink;\n\n /**\n * MarkdownIt#normalizeLinkText(url) -> String\n *\n * Function used to decode link url to a human-readable format`\n **/\n this.normalizeLinkText = normalizeLinkText;\n\n\n // Expose utils & helpers for easy acces from plugins\n\n /**\n * MarkdownIt#utils -> utils\n *\n * Assorted utility functions, useful to write plugins. See details\n * [here](https://github.com/markdown-it/markdown-it/blob/master/lib/common/utils.js).\n **/\n this.utils = utils;\n\n /**\n * MarkdownIt#helpers -> helpers\n *\n * Link components parser functions, useful to write plugins. See details\n * [here](https://github.com/markdown-it/markdown-it/blob/master/lib/helpers).\n **/\n this.helpers = utils.assign({}, helpers);\n\n\n this.options = {};\n this.configure(presetName);\n\n if (options) { this.set(options); }\n}\n\n\n/** chainable\n * MarkdownIt.set(options)\n *\n * Set parser options (in the same format as in constructor). Probably, you\n * will never need it, but you can change options after constructor call.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')()\n * .set({ html: true, breaks: true })\n * .set({ typographer, true });\n * ```\n *\n * __Note:__ To achieve the best possible performance, don't modify a\n * `markdown-it` instance options on the fly. If you need multiple configurations\n * it's best to create multiple instances and initialize each with separate\n * config.\n **/\nMarkdownIt.prototype.set = function (options) {\n utils.assign(this.options, options);\n return this;\n};\n\n\n/** chainable, internal\n * MarkdownIt.configure(presets)\n *\n * Batch load of all options and compenent settings. This is internal method,\n * and you probably will not need it. But if you will - see available presets\n * and data structure [here](https://github.com/markdown-it/markdown-it/tree/master/lib/presets)\n *\n * We strongly recommend to use presets instead of direct config loads. That\n * will give better compatibility with next versions.\n **/\nMarkdownIt.prototype.configure = function (presets) {\n var self = this, presetName;\n\n if (utils.isString(presets)) {\n presetName = presets;\n presets = config[presetName];\n if (!presets) { throw new Error('Wrong `markdown-it` preset \"' + presetName + '\", check name'); }\n }\n\n if (!presets) { throw new Error('Wrong `markdown-it` preset, can\\'t be empty'); }\n\n if (presets.options) { self.set(presets.options); }\n\n if (presets.components) {\n Object.keys(presets.components).forEach(function (name) {\n if (presets.components[name].rules) {\n self[name].ruler.enableOnly(presets.components[name].rules);\n }\n if (presets.components[name].rules2) {\n self[name].ruler2.enableOnly(presets.components[name].rules2);\n }\n });\n }\n return this;\n};\n\n\n/** chainable\n * MarkdownIt.enable(list, ignoreInvalid)\n * - list (String|Array): rule name or list of rule names to enable\n * - ignoreInvalid (Boolean): set `true` to ignore errors when rule not found.\n *\n * Enable list or rules. It will automatically find appropriate components,\n * containing rules with given names. If rule not found, and `ignoreInvalid`\n * not set - throws exception.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')()\n * .enable(['sub', 'sup'])\n * .disable('smartquotes');\n * ```\n **/\nMarkdownIt.prototype.enable = function (list, ignoreInvalid) {\n var result = [];\n\n if (!Array.isArray(list)) { list = [ list ]; }\n\n [ 'core', 'block', 'inline' ].forEach(function (chain) {\n result = result.concat(this[chain].ruler.enable(list, true));\n }, this);\n\n result = result.concat(this.inline.ruler2.enable(list, true));\n\n var missed = list.filter(function (name) { return result.indexOf(name) < 0; });\n\n if (missed.length && !ignoreInvalid) {\n throw new Error('MarkdownIt. Failed to enable unknown rule(s): ' + missed);\n }\n\n return this;\n};\n\n\n/** chainable\n * MarkdownIt.disable(list, ignoreInvalid)\n * - list (String|Array): rule name or list of rule names to disable.\n * - ignoreInvalid (Boolean): set `true` to ignore errors when rule not found.\n *\n * The same as [[MarkdownIt.enable]], but turn specified rules off.\n **/\nMarkdownIt.prototype.disable = function (list, ignoreInvalid) {\n var result = [];\n\n if (!Array.isArray(list)) { list = [ list ]; }\n\n [ 'core', 'block', 'inline' ].forEach(function (chain) {\n result = result.concat(this[chain].ruler.disable(list, true));\n }, this);\n\n result = result.concat(this.inline.ruler2.disable(list, true));\n\n var missed = list.filter(function (name) { return result.indexOf(name) < 0; });\n\n if (missed.length && !ignoreInvalid) {\n throw new Error('MarkdownIt. Failed to disable unknown rule(s): ' + missed);\n }\n return this;\n};\n\n\n/** chainable\n * MarkdownIt.use(plugin, params)\n *\n * Load specified plugin with given params into current parser instance.\n * It's just a sugar to call `plugin(md, params)` with curring.\n *\n * ##### Example\n *\n * ```javascript\n * var iterator = require('markdown-it-for-inline');\n * var md = require('markdown-it')()\n * .use(iterator, 'foo_replace', 'text', function (tokens, idx) {\n * tokens[idx].content = tokens[idx].content.replace(/foo/g, 'bar');\n * });\n * ```\n **/\nMarkdownIt.prototype.use = function (plugin /*, params, ... */) {\n var args = [ this ].concat(Array.prototype.slice.call(arguments, 1));\n plugin.apply(plugin, args);\n return this;\n};\n\n\n/** internal\n * MarkdownIt.parse(src, env) -> Array\n * - src (String): source string\n * - env (Object): environment sandbox\n *\n * Parse input string and return list of block tokens (special token type\n * \"inline\" will contain list of inline tokens). You should not call this\n * method directly, until you write custom renderer (for example, to produce\n * AST).\n *\n * `env` is used to pass data between \"distributed\" rules and return additional\n * metadata like reference info, needed for the renderer. It also can be used to\n * inject data in specific cases. Usually, you will be ok to pass `{}`,\n * and then pass updated object to renderer.\n **/\nMarkdownIt.prototype.parse = function (src, env) {\n if (typeof src !== 'string') {\n throw new Error('Input data should be a String');\n }\n\n var state = new this.core.State(src, this, env);\n\n this.core.process(state);\n\n return state.tokens;\n};\n\n\n/**\n * MarkdownIt.render(src [, env]) -> String\n * - src (String): source string\n * - env (Object): environment sandbox\n *\n * Render markdown string into html. It does all magic for you :).\n *\n * `env` can be used to inject additional metadata (`{}` by default).\n * But you will not need it with high probability. See also comment\n * in [[MarkdownIt.parse]].\n **/\nMarkdownIt.prototype.render = function (src, env) {\n env = env || {};\n\n return this.renderer.render(this.parse(src, env), this.options, env);\n};\n\n\n/** internal\n * MarkdownIt.parseInline(src, env) -> Array\n * - src (String): source string\n * - env (Object): environment sandbox\n *\n * The same as [[MarkdownIt.parse]] but skip all block rules. It returns the\n * block tokens list with the single `inline` element, containing parsed inline\n * tokens in `children` property. Also updates `env` object.\n **/\nMarkdownIt.prototype.parseInline = function (src, env) {\n var state = new this.core.State(src, this, env);\n\n state.inlineMode = true;\n this.core.process(state);\n\n return state.tokens;\n};\n\n\n/**\n * MarkdownIt.renderInline(src [, env]) -> String\n * - src (String): source string\n * - env (Object): environment sandbox\n *\n * Similar to [[MarkdownIt.render]] but for single paragraph content. Result\n * will NOT be wrapped into `

` tags.\n **/\nMarkdownIt.prototype.renderInline = function (src, env) {\n env = env || {};\n\n return this.renderer.render(this.parseInline(src, env), this.options, env);\n};\n\n\nmodule.exports = MarkdownIt;\n","'use strict';\n\n\nmodule.exports = require('./lib/');\n"],"names":["entities","require$$0","_class","obj","isString","_hasOwnProperty","has","object","key","assign","sources","source","arrayReplaceAt","src","pos","newElements","isValidEntityCode","c","fromCodePoint","surrogate1","surrogate2","UNESCAPE_MD_RE","ENTITY_RE","UNESCAPE_ALL_RE","DIGITAL_ENTITY_TEST_RE","replaceEntityPattern","match","name","code","unescapeMd","str","unescapeAll","escaped","entity","HTML_ESCAPE_TEST_RE","HTML_ESCAPE_REPLACE_RE","HTML_REPLACEMENTS","replaceUnsafeChar","ch","escapeHtml","REGEXP_ESCAPE_RE","escapeRE","isSpace","isWhiteSpace","UNICODE_PUNCT_RE","require$$1","isPunctChar","isMdAsciiPunct","normalizeReference","exports","require$$2","require$$3","parse_link_label","state","start","disableNested","level","found","marker","prevPos","labelEnd","max","oldPos","parse_link_destination","lines","result","parse_link_title","helpers","default_rules","tokens","idx","options","env","slf","token","info","langName","langAttrs","highlighted","i","arr","tmpAttrs","tmpToken","Renderer","l","nextToken","needLf","type","rules","len","renderer","Ruler","self","chains","rule","altName","chain","fn","index","opt","beforeName","ruleName","afterName","list","ignoreInvalid","chainName","ruler","NEWLINES_RE","NULL_RE","normalize","block","inline","tok","isLinkOpen","isLinkClose","linkify","j","currentToken","nodes","ln","text","lastPos","htmlLinkLevel","url","fullUrl","urlText","blockTokens","links","RARE_RE","SCOPED_ABBR_TEST_RE","SCOPED_ABBR_RE","SCOPED_ABBR","replaceFn","replace_scoped","inlineTokens","inside_autolink","replace_rare","replacements","blkIdx","QUOTE_TEST_RE","QUOTE_RE","APOSTROPHE","replaceAt","process_inlines","t","thisLevel","item","lastChar","nextChar","isLastPunctChar","isNextPunctChar","isLastWhiteSpace","isNextWhiteSpace","canOpen","canClose","isSingle","stack","openQuote","closeQuote","OUTER","smartquotes","text_join","curr","last","Token","tag","nesting","attrs","attrData","value","StateCore","md","state_core","_rules","require$$4","require$$5","require$$6","require$$7","Core","require$$8","parser_core","getLine","line","escapedSplit","isEscaped","current","table","startLine","endLine","silent","lineText","nextLine","columns","columnCount","aligns","tableLines","tbodyLines","oldParentType","terminate","terminatorRules","firstCh","secondCh","fence","params","mem","markup","haveEndMarker","blockquote","adjustTab","initial","lastLineEmpty","offset","oldBMarks","oldBSCount","oldIndent","oldSCount","oldTShift","spaceAfterMarker","isOutdented","oldLineMax","hr","cnt","skipBulletListMarker","skipOrderedListMarker","markTightParagraphs","contentStart","indent","indentAfterMarker","isOrdered","itemLines","listLines","listTokIdx","markerCharCode","markerValue","oldListIndent","oldTight","posAfterMarker","prevEmptyEnd","isTerminatingParagraph","tight","reference","_endLine","destEndPos","destEndLineNo","href","label","res","title","html_blocks","attr_name","unquoted","single_quoted","double_quoted","attr_value","attribute","open_tag","close_tag","comment","processing","declaration","cdata","HTML_TAG_RE","HTML_OPEN_CLOSE_TAG_RE","html_re","block_names","HTML_SEQUENCES","html_block","heading","tmp","lheading","content","paragraph","StateBlock","s","indent_found","from","min","begin","end","keepLastLF","lineIndent","first","queue","lineStart","state_block","require$$9","require$$10","require$$11","ParserBlock","ok","hasEmptyLines","maxNesting","outTokens","require$$12","parser_block","isTerminatorChar","SCHEME_RE","proto","link","newline","pmax","ws","ESCAPED","_escape","ch1","ch2","origStr","escapedStr","backticks","matchStart","matchEnd","openerLength","closerLength","strikethrough","scanned","postProcess","delimiters","startDelim","endDelim","loneMarkers","tokens_meta","emphasis","isStrong","labelStart","ref","parseReference","image","EMAIL_RE","AUTOLINK_RE","autolink","isLetter","lc","html_inline","DIGITAL_RE","NAMED_RE","processDelimiters","closerIdx","openerIdx","closer","opener","minOpenerIdx","newMinOpenerIdx","isOddMatch","lastJump","openersBottom","headerIdx","lastTokenIdx","jumps","balance_pairs","fragments_join","StateInline","token_meta","canSplitWord","count","can_open","can_close","left_flanking","right_flanking","state_inline","_rules2","require$$13","require$$14","ParserInline","cache","require$$15","parser_inline","_default","zero","commonmark","utils","ParserCore","LinkifyIt","mdurl","punycode","config","BAD_PROTO_RE","GOOD_DATA_RE","validateLink","RECODE_HOSTNAME_FOR","normalizeLink","parsed","er","normalizeLinkText","MarkdownIt","presetName","presets","missed","plugin","args","lib","markdownIt"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53]}