{"version":3,"sources":["webpack:///./node_modules/markdown-it/lib/common/utils.js","webpack:///./node_modules/markdown-it-emoji/lib/render.js","webpack:///./node_modules/markdown-it/lib/rules_block/heading.js","webpack:///./node_modules/markdown-it/lib/index.js","webpack:///./node_modules/markdown-it/lib/token.js","webpack:///./node_modules/markdown-it/lib/rules_inline/state_inline.js","webpack:///./node_modules/markdown-it/lib/rules_block/lheading.js","webpack:///./node_modules/markdown-it/lib/presets/zero.js","webpack:///./node_modules/markdown-it/lib/rules_inline/text_collapse.js","webpack:///./node_modules/markdown-it/lib/rules_inline/autolink.js","webpack:///./node_modules/markdown-it-toc-and-anchor/dist/index.js","webpack:///./node_modules/markdown-it/lib/rules_core/block.js","webpack:///./node_modules/markdown-it-emoji/index.js","webpack:///./node_modules/markdown-it-emoji/lib/normalize_opts.js","webpack:///./node_modules/markdown-it/lib/rules_inline/newline.js","webpack:///./node_modules/markdown-it/lib/presets/commonmark.js","webpack:///./node_modules/markdown-it/lib/rules_block/paragraph.js","webpack:///./node_modules/markdown-it/lib/ruler.js","webpack:///./node_modules/markdown-it-emoji/lib/replace.js","webpack:///./node_modules/markdown-it/lib/rules_inline/backticks.js","webpack:///./node_modules/markdown-it/lib/rules_block/list.js","webpack:///./node_modules/markdown-it-mark/index.js","webpack:///./node_modules/markdown-it/lib/rules_core/normalize.js","webpack:///./node_modules/markdown-it/lib/parser_inline.js","webpack:///./node_modules/markdown-it-abbr/index.js","webpack:///./node_modules/markdown-it-sub/index.js","webpack:///./node_modules/markdown-it/lib/helpers/index.js","webpack:///./node_modules/markdown-it/lib/common/html_re.js","webpack:///./node_modules/markdown-it/lib/rules_inline/entity.js","webpack:///./node_modules/markdown-it/lib/rules_block/html_block.js","webpack:///./node_modules/markdown-it/lib/rules_inline/escape.js","webpack:///./node_modules/markdown-it/lib/rules_core/state_core.js","webpack:///./node_modules/markdown-it/lib/parser_block.js","webpack:///./node_modules/markdown-it-sup/index.js","webpack:///./node_modules/markdown-it/lib/renderer.js","webpack:///./node_modules/markdown-it/lib/helpers/parse_link_title.js","webpack:///./node_modules/markdown-it/lib/rules_block/table.js","webpack:///./node_modules/markdown-it/lib/rules_block/state_block.js","webpack:///./node_modules/markdown-it/lib/rules_inline/balance_pairs.js","webpack:///./node_modules/markdown-it/lib/presets/default.js","webpack:///./node_modules/markdown-it/lib/rules_inline/strikethrough.js","webpack:///./node_modules/markdown-it/lib/rules_inline/image.js","webpack:///./node_modules/markdown-it/lib/rules_core/linkify.js","webpack:///./node_modules/markdown-it/lib/rules_block/code.js","webpack:///./node_modules/markdown-it/lib/rules_core/inline.js","webpack:///./node_modules/markdown-it-katex/index.js","webpack:///./node_modules/markdown-it/lib/parser_core.js","webpack:///./node_modules/markdown-it-emoji/lib/data/shortcuts.js","webpack:///./node_modules/match-at/lib/matchAt.js","webpack:///./node_modules/markdown-it/lib/rules_core/smartquotes.js","webpack:///./node_modules/markdown-it/lib/rules_inline/text.js","webpack:///./node_modules/markdown-it/lib/rules_core/replacements.js","webpack:///./node_modules/markdown-it/lib/common/entities.js","webpack:///./node_modules/markdown-it-task-lists/index.js","webpack:///./node_modules/markdown-it/lib/rules_block/fence.js","webpack:///./node_modules/markdown-it/lib/rules_inline/html_inline.js","webpack:///./node_modules/markdown-it/lib/rules_inline/emphasis.js","webpack:///./node_modules/markdown-it/lib/rules_inline/link.js","webpack:///./node_modules/markdown-it-ins/index.js","webpack:///./node_modules/markdown-it/index.js","webpack:///./node_modules/markdown-it/lib/rules_block/reference.js","webpack:///./node_modules/markdown-it/lib/helpers/parse_link_label.js","webpack:///./node_modules/markdown-it/lib/common/html_blocks.js","webpack:///./node_modules/markdown-it/lib/helpers/parse_link_destination.js","webpack:///./node_modules/markdown-it-footnote/index.js","webpack:///./node_modules/markdown-it/lib/rules_block/blockquote.js","webpack:///./node_modules/markdown-it/lib/rules_block/hr.js","webpack:///./node_modules/markdown-it-deflist/index.js"],"names":["_class","obj","Object","prototype","toString","call","isString","_hasOwnProperty","hasOwnProperty","has","object","key","assign","sources","Array","slice","arguments","forEach","source","TypeError","keys","arrayReplaceAt","src","pos","newElements","concat","isValidEntityCode","c","fromCodePoint","surrogate1","surrogate2","String","fromCharCode","UNESCAPE_MD_RE","ENTITY_RE","UNESCAPE_ALL_RE","RegExp","DIGITAL_ENTITY_TEST_RE","entities","replaceEntityPattern","match","name","code","charCodeAt","test","toLowerCase","parseInt","unescapeMd","str","indexOf","replace","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","isPunctChar","isMdAsciiPunct","normalizeReference","trim","toUpperCase","exports","lib","mdurl","ucmicro","module","tokens","idx","content","state","startLine","endLine","silent","level","tmp","token","bMarks","tShift","max","eMarks","skipSpacesBack","skipCharsBack","line","push","markup","map","children","utils","helpers","Renderer","ParserCore","ParserBlock","ParserInline","LinkifyIt","punycode","config","zero","commonmark","BAD_PROTO_RE","GOOD_DATA_RE","validateLink","url","RECODE_HOSTNAME_FOR","normalizeLink","parsed","parse","hostname","protocol","toASCII","er","encode","format","normalizeLinkText","toUnicode","decode","MarkdownIt","presetName","options","this","inline","block","core","renderer","linkify","configure","set","presets","self","Error","components","rules","ruler","enableOnly","rules2","ruler2","enable","list","ignoreInvalid","result","isArray","chain","missed","filter","length","disable","use","plugin","args","apply","env","State","process","render","parseInline","inlineMode","renderInline","Token","type","tag","nesting","attrs","info","meta","hidden","attrIndex","i","len","attrPush","attrData","attrSet","value","attrGet","attrJoin","StateInline","md","outTokens","posMax","pending","pendingLevel","cache","delimiters","pushPending","scanDelims","start","canSplitWord","lastChar","nextChar","count","can_open","can_close","isLastWhiteSpace","isLastPunctChar","isNextWhiteSpace","isNextPunctChar","left_flanking","right_flanking","marker","terminate","l","nextLine","terminatorRules","getRules","isEmpty","sCount","blkIndent","skipChars","skipSpaces","getLines","html","xhtmlOut","breaks","langPrefix","typographer","quotes","highlight","maxNesting","curr","last","EMAIL_RE","AUTOLINK_RE","tail","linkMatch","emailMatch","fullUrl","defineProperty","default","_default","_clone","_interopRequireDefault","_uslug","_token","__esModule","_typeof","Symbol","iterator","constructor","_toConsumableArray","arr","_arrayWithoutHoles","_iterableToArray","_nonIterableSpread","iter","from","arr2","_objectSpread","target","ownKeys","getOwnPropertySymbols","sym","getOwnPropertyDescriptor","enumerable","_defineProperty","configurable","writable","TOC","TOC_RE","markdownItSecondInstance","headingIds","tocHtml","repeat","string","num","join","makeSafe","slugifyFn","space","renderAnchorLinkSymbol","anchorLinkSymbolClassName","anchorLinkSymbol","renderAnchorLink","anchor","anchorClassName","openLinkToken","closeLinkToken","wrapHeadingTextInAnchor","unshift","_tokens$children","linkTokens","actionOnArray","false","true","anchorLinkSpace","anchorLinkBefore","treeToMarkdownBulletList","tree","indent","undefined","item","indentation","node","heading","contentWithoutAnchor","nodes","generateTocMarkdownFromArray","headings","tocFirstLevel","tocLastLevel","lastItem","toc","tocClassName","tocCallback","anchorLink","resetIds","tocArray","tocMarkdown","tocTokens","slugify","heading_close","_tocAnchor","reduce","acc","t","anchorLinkPrefix","substr","after","exec","m","originalHeadingOpen","heading_open","_len","_key","renderToken","_len2","_key2","toc_open","toc_close","toc_body","emojies_defs","emojies_shortcuts","emoji_html","emoji_replace","normalize_opts","defaults","defs","shortcuts","enabled","opts","emoji","scanRE","replaceRE","quoteRE","emojies","alias","names","sort","reverse","pmax","lineMax","Ruler","__rules__","__cache__","__find__","__compile__","chains","rule","alt","altName","fn","at","index","opt","before","beforeName","ruleName","splice","afterName","chainName","ucm","ZPCc","Z","P","Cc","splitTextToken","text","last_pos","offset","emoji_name","j","blockTokens","autolinkLevel","matchStart","matchEnd","skipBulletListMarker","skipOrderedListMarker","markTightParagraphs","initial","oldTShift","oldIndent","oldLIndent","oldTight","oldParentType","posAfterMarker","indentAfterMarker","markerValue","markerCharCode","isOrdered","contentStart","listTokIdx","prevEmptyEnd","listLines","itemLines","tight","Number","parentType","Math","min","tokenize","scanned","jump","end","open","close","postProcess","startDelim","endDelim","loneMarkers","pop","NEWLINES_RE","NULL_RE","_rules","_rules2","skipToken","ok","OTHER_CHARS","UNICODE_SPACE_RE","abbr_def","label","title","labelStart","labelEnd","abbreviations","abbr_replace","reg","regText","regSimple","currentToken","x","a","b","split","lastIndex","UNESCAPE_RE","subscript","found","parseLinkLabel","parseLinkDestination","parseLinkTitle","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","DIGITAL_RE","NAMED_RE","block_names","HTML_SEQUENCES","lineText","ESCAPED","StateCore","hasEmptyLines","skipEmptyLines","superscript","default_rules","code_inline","slf","renderAttrs","code_block","fence","highlighted","tmpAttrs","tmpToken","langName","image","renderInlineAsText","hardbreak","softbreak","html_block","html_inline","nextToken","needLf","lines","getLine","escapedSplit","escapes","lastPos","backTicked","lastBackTick","substring","columns","columnCount","aligns","tableLines","tbodyLines","StateBlock","s","indent_found","ddIndent","begin","keepLastLF","lineIndent","first","queue","lineStart","lastDelim","currDelim","ref","res","href","oldPos","references","isLinkOpen","isLinkClose","ln","htmlLinkLevel","urlText","links","pretest","schema","emptyLines","tok","katex","isValidDelim","prevChar","math_inline","math_block","firstLine","lastLine","next","lastIndexOf","katexInline","latex","displayMode","renderToString","error","throwOnError","console","log","inlineRenderer","katexBlock","blockRenderer","Core","angry","blush","broken_heart","confused","cry","frowning","heart","imp","innocent","joy","kissing","laughing","neutral_face","open_mouth","rage","smile","smiley","smiling_imp","sob","stuck_out_tongue","sunglasses","sweat","sweat_smile","unamused","wink","getRelocatable","re","__matchAtRelocatable","flags","ignoreCase","multiline","unicode","matchAt","global","sticky","reloc","QUOTE_TEST_RE","QUOTE_RE","APOSTROPHE","replaceAt","process_inlines","thisLevel","canOpen","canClose","isSingle","stack","openQuote","closeQuote","OUTER","single","blkIdx","isTerminatorChar","RARE_RE","SCOPED_ABBR_TEST_RE","SCOPED_ABBR_RE","SCOPED_ABBR","r","p","tm","replaceFn","replace_scoped","inlineTokens","replace_rare","disableCheckboxes","useLabelWrapper","useLabelAfter","attr","parentToken","targetLevel","isTodoItem","isInline","isParagraph","isListItem","startsWithTodoMarkdown","todoify","TokenConstructor","makeCheckbox","id","ceil","random","afterLabel","beginLabel","endLabel","checkbox","disabledAttr","for","labelAfter","params","mem","haveEndMarker","isLetter","lc","isStrong","_endLine","destEndPos","destEndLineNo","disableNested","prevPos","_footnote_ref","n","subId","_footnote_block_open","_footnote_block_close","_footnote_open","_footnote_close","_footnote_anchor","footnote_def","oldBMark","oldSCount","posAfterColon","footnotes","refs","footnote_inline","footnoteId","footnote_ref","footnoteSubId","footnote_tail","lastParagraph","current","currentLabel","insideRef","refTokens","footnote_block_open","footnote_block_close","footnote_open","footnote_close","footnote_anchor","lastLineEmpty","oldBMarks","cnt","skipMarker","deflist","ddLine","dtLine","oldDDIndent"],"mappings":"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","file":"js/chunk-57420ace.1e02c13b.js","sourcesContent":["// 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)\n :\n parseInt(name.slice(1), 10);\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 // use .toUpperCase() instead of .toLowerCase()\n // here to avoid a conflict with Object.prototype\n // members (most notably, `__proto__`)\n return str.trim().replace(/\\s+/g, ' ').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","'use strict';\n\nmodule.exports = function emoji_html(tokens, idx /*, options, env */) {\n return tokens[idx].content;\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 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 && ch !== 0x20/* space */)) { 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","// Main parser class\n\n'use strict';\n\n\nvar utils = require('./common/utils');\nvar helpers = require('./helpers');\nvar Renderer = require('./renderer');\nvar ParserCore = require('./parser_core');\nvar ParserBlock = require('./parser_block');\nvar ParserInline = require('./parser_inline');\nvar LinkifyIt = require('linkify-it');\nvar mdurl = require('mdurl');\nvar punycode = require('punycode');\n\n\nvar config = {\n 'default': require('./presets/default'),\n zero: require('./presets/zero'),\n commonmark: require('./presets/commonmark')\n};\n\n////////////////////////////////////////////////////////////////////////////////\n//\n// This validator can prohibit more than really needed to prevent XSS. It's a\n// tradeoff to keep code simple and to be secure by default.\n//\n// If you need different setup - override validator method as you wish. Or\n// replace it with dummy function and use external sanitizer.\n//\n\nvar BAD_PROTO_RE = /^(vbscript|javascript|file|data):/;\nvar GOOD_DATA_RE = /^data:image\\/(gif|png|jpeg|webp);/;\n\nfunction validateLink(url) {\n // url should be normalized at this point, and existing entities are decoded\n var str = url.trim().toLowerCase();\n\n return BAD_PROTO_RE.test(str) ? (GOOD_DATA_RE.test(str) ? true : false) : true;\n}\n\n////////////////////////////////////////////////////////////////////////////////\n\n\nvar RECODE_HOSTNAME_FOR = [ 'http:', 'https:', 'mailto:' ];\n\nfunction normalizeLink(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.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 return mdurl.decode(mdurl.format(parsed));\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(lang, str, 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 = 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 with - 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 returns 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 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","// 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 * fence infostring\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","// 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\n this.pos = 0;\n this.posMax = this.src.length;\n this.level = 0;\n this.pending = '';\n this.pendingLevel = 0;\n\n this.cache = {}; // Stores { start: end } pairs. Useful for backtrack\n // optimization of pairs parse (emphasis, strikes).\n\n this.delimiters = []; // Emphasis-like delimiters\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\n if (nesting < 0) { this.level--; }\n token.level = this.level;\n if (nesting > 0) { this.level++; }\n\n this.pendingLevel = this.level;\n this.tokens.push(token);\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","// 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,\n terminatorRules = state.md.block.ruler.getRules('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 //\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 return true;\n};\n","// \"Zero\" preset, with nothing enabled. Useful for manual configuring of simple\n// modes. For example, to parse bold/italic only.\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\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 tail, linkMatch, emailMatch, url, fullUrl, token,\n pos = state.pos;\n\n if (state.src.charCodeAt(pos) !== 0x3C/* < */) { return false; }\n\n tail = state.src.slice(pos);\n\n if (tail.indexOf('>') < 0) { return false; }\n\n if (AUTOLINK_RE.test(tail)) {\n linkMatch = tail.match(AUTOLINK_RE);\n\n url = linkMatch[0].slice(1, -1);\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 += linkMatch[0].length;\n return true;\n }\n\n if (EMAIL_RE.test(tail)) {\n emailMatch = tail.match(EMAIL_RE);\n\n url = emailMatch[0].slice(1, -1);\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 += emailMatch[0].length;\n return true;\n }\n\n return false;\n};\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = _default;\n\nvar _clone = _interopRequireDefault(require(\"clone\"));\n\nvar _uslug = _interopRequireDefault(require(\"uslug\"));\n\nvar _token = _interopRequireDefault(require(\"markdown-it/lib/token\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance\"); }\n\nfunction _iterableToArray(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \"[object Arguments]\") return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar TOC = \"@[toc]\";\nvar TOC_RE = /^@\\[toc\\]/im;\n\nvar markdownItSecondInstance = function markdownItSecondInstance() {};\n\nvar headingIds = {};\nvar tocHtml = \"\";\n\nvar repeat = function repeat(string, num) {\n return new Array(num + 1).join(string);\n};\n\nvar makeSafe = function makeSafe(string, headingIds, slugifyFn) {\n var key = slugifyFn(string); // slugify\n\n if (!headingIds[key]) {\n headingIds[key] = 0;\n }\n\n headingIds[key]++;\n return key + (headingIds[key] > 1 ? \"-\".concat(headingIds[key]) : \"\");\n};\n\nvar space = function space() {\n return _objectSpread({}, new _token.default(\"text\", \"\", 0), {\n content: \" \"\n });\n};\n\nvar renderAnchorLinkSymbol = function renderAnchorLinkSymbol(options) {\n if (options.anchorLinkSymbolClassName) {\n return [_objectSpread({}, new _token.default(\"span_open\", \"span\", 1), {\n attrs: [[\"class\", options.anchorLinkSymbolClassName]]\n }), _objectSpread({}, new _token.default(\"text\", \"\", 0), {\n content: options.anchorLinkSymbol\n }), new _token.default(\"span_close\", \"span\", -1)];\n } else {\n return [_objectSpread({}, new _token.default(\"text\", \"\", 0), {\n content: options.anchorLinkSymbol\n })];\n }\n};\n\nvar renderAnchorLink = function renderAnchorLink(anchor, options, tokens, idx) {\n var attrs = [];\n\n if (options.anchorClassName != null) {\n attrs.push([\"class\", options.anchorClassName]);\n }\n\n attrs.push([\"href\", \"#\".concat(anchor)]);\n\n var openLinkToken = _objectSpread({}, new _token.default(\"link_open\", \"a\", 1), {\n attrs: attrs\n });\n\n var closeLinkToken = new _token.default(\"link_close\", \"a\", -1);\n\n if (options.wrapHeadingTextInAnchor) {\n tokens[idx + 1].children.unshift(openLinkToken);\n tokens[idx + 1].children.push(closeLinkToken);\n } else {\n var _tokens$children;\n\n var linkTokens = [openLinkToken].concat(_toConsumableArray(renderAnchorLinkSymbol(options)), [closeLinkToken]); // `push` or `unshift` according to anchorLinkBefore option\n // space is at the opposite side.\n\n var actionOnArray = {\n false: \"push\",\n true: \"unshift\"\n }; // insert space between anchor link and heading ?\n\n if (options.anchorLinkSpace) {\n linkTokens[actionOnArray[!options.anchorLinkBefore]](space());\n }\n\n (_tokens$children = tokens[idx + 1].children)[actionOnArray[options.anchorLinkBefore]].apply(_tokens$children, _toConsumableArray(linkTokens));\n }\n};\n\nvar treeToMarkdownBulletList = function treeToMarkdownBulletList(tree) {\n var indent = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n return tree.map(function (item) {\n var indentation = \" \";\n var node = \"\".concat(repeat(indentation, indent), \"*\");\n\n if (item.heading.content) {\n var contentWithoutAnchor = item.heading.content.replace(/\\[([^\\]]*)\\]\\([^)]*\\)/g, \"$1\");\n node += \" \" + \"[\".concat(contentWithoutAnchor, \"](#\").concat(item.heading.anchor, \")\\n\");\n } else {\n node += \"\\n\";\n }\n\n if (item.nodes.length) {\n node += treeToMarkdownBulletList(item.nodes, indent + 1);\n }\n\n return node;\n }).join(\"\");\n};\n\nvar generateTocMarkdownFromArray = function generateTocMarkdownFromArray(headings, options) {\n var tree = {\n nodes: []\n }; // create an ast\n\n headings.forEach(function (heading) {\n if (heading.level < options.tocFirstLevel || heading.level > options.tocLastLevel) {\n return;\n }\n\n var i = 1;\n var lastItem = tree;\n\n for (; i < heading.level - options.tocFirstLevel + 1; i++) {\n if (lastItem.nodes.length === 0) {\n lastItem.nodes.push({\n heading: {},\n nodes: []\n });\n }\n\n lastItem = lastItem.nodes[lastItem.nodes.length - 1];\n }\n\n lastItem.nodes.push({\n heading: heading,\n nodes: []\n });\n });\n return treeToMarkdownBulletList(tree.nodes);\n};\n\nfunction _default(md, options) {\n options = _objectSpread({\n toc: true,\n tocClassName: \"markdownIt-TOC\",\n tocFirstLevel: 1,\n tocLastLevel: 6,\n tocCallback: null,\n anchorLink: true,\n anchorLinkSymbol: \"#\",\n anchorLinkBefore: true,\n anchorClassName: \"markdownIt-Anchor\",\n resetIds: true,\n anchorLinkSpace: true,\n anchorLinkSymbolClassName: null,\n wrapHeadingTextInAnchor: false\n }, options);\n markdownItSecondInstance = (0, _clone.default)(md); // initialize key ids for each instance\n\n headingIds = {};\n md.core.ruler.push(\"init_toc\", function (state) {\n var tokens = state.tokens; // reset key ids for each document\n\n if (options.resetIds) {\n headingIds = {};\n }\n\n var tocArray = [];\n var tocMarkdown = \"\";\n var tocTokens = [];\n var slugifyFn = typeof options.slugify === \"function\" && options.slugify || _uslug.default;\n\n for (var i = 0; i < tokens.length; i++) {\n if (tokens[i].type !== \"heading_close\") {\n continue;\n }\n\n var heading = tokens[i - 1];\n var heading_close = tokens[i];\n\n if (heading.type === \"inline\") {\n var content = void 0;\n\n if (heading.children && heading.children.length > 0 && heading.children[0].type === \"link_open\") {\n // headings that contain links have to be processed\n // differently since nested links aren't allowed in markdown\n content = heading.children[1].content;\n heading._tocAnchor = makeSafe(content, headingIds, slugifyFn);\n } else {\n content = heading.content;\n heading._tocAnchor = makeSafe(heading.children.reduce(function (acc, t) {\n return acc + t.content;\n }, \"\"), headingIds, slugifyFn);\n }\n\n if (options.anchorLinkPrefix) {\n heading._tocAnchor = options.anchorLinkPrefix + heading._tocAnchor;\n }\n\n tocArray.push({\n content: content,\n anchor: heading._tocAnchor,\n level: +heading_close.tag.substr(1, 1)\n });\n }\n }\n\n tocMarkdown = generateTocMarkdownFromArray(tocArray, options);\n tocTokens = markdownItSecondInstance.parse(tocMarkdown, {}); // Adding tocClassName to 'ul' element\n\n if (_typeof(tocTokens[0]) === \"object\" && tocTokens[0].type === \"bullet_list_open\") {\n var attrs = tocTokens[0].attrs = tocTokens[0].attrs || [];\n\n if (options.tocClassName != null) {\n attrs.push([\"class\", options.tocClassName]);\n }\n }\n\n tocHtml = markdownItSecondInstance.renderer.render(tocTokens, markdownItSecondInstance.options);\n\n if (typeof state.env.tocCallback === \"function\") {\n state.env.tocCallback.call(undefined, tocMarkdown, tocArray, tocHtml);\n } else if (typeof options.tocCallback === \"function\") {\n options.tocCallback.call(undefined, tocMarkdown, tocArray, tocHtml);\n } else if (typeof md.options.tocCallback === \"function\") {\n md.options.tocCallback.call(undefined, tocMarkdown, tocArray, tocHtml);\n }\n });\n md.inline.ruler.after(\"emphasis\", \"toc\", function (state, silent) {\n var token;\n var match;\n\n if ( // Reject if the token does not start with @[\n state.src.charCodeAt(state.pos) !== 0x40 || state.src.charCodeAt(state.pos + 1) !== 0x5b || // Don’t run any pairs in validation mode\n silent) {\n return false;\n } // Detect TOC markdown\n\n\n match = TOC_RE.exec(state.src);\n match = !match ? [] : match.filter(function (m) {\n return m;\n });\n\n if (match.length < 1) {\n return false;\n } // Build content\n\n\n token = state.push(\"toc_open\", \"toc\", 1);\n token.markup = TOC;\n token = state.push(\"toc_body\", \"\", 0);\n token = state.push(\"toc_close\", \"toc\", -1); // Update pos so the parser can continue\n\n state.pos = state.pos + 6;\n return true;\n });\n\n var originalHeadingOpen = md.renderer.rules.heading_open || function () {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n var tokens = args[0],\n idx = args[1],\n options = args[2],\n self = args[4];\n return self.renderToken(tokens, idx, options);\n };\n\n md.renderer.rules.heading_open = function () {\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n var tokens = args[0],\n idx = args[1];\n var attrs = tokens[idx].attrs = tokens[idx].attrs || [];\n var anchor = tokens[idx + 1]._tocAnchor;\n attrs.push([\"id\", anchor]);\n\n if (options.anchorLink) {\n renderAnchorLink.apply(void 0, [anchor, options].concat(args));\n }\n\n return originalHeadingOpen.apply(this, args);\n };\n\n md.renderer.rules.toc_open = function () {\n return \"\";\n };\n\n md.renderer.rules.toc_close = function () {\n return \"\";\n };\n\n md.renderer.rules.toc_body = function () {\n return \"\";\n };\n\n if (options.toc) {\n md.renderer.rules.toc_body = function () {\n return tocHtml;\n };\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\n\nvar emojies_defs = require('./lib/data/full.json');\nvar emojies_shortcuts = require('./lib/data/shortcuts');\nvar emoji_html = require('./lib/render');\nvar emoji_replace = require('./lib/replace');\nvar normalize_opts = require('./lib/normalize_opts');\n\n\nmodule.exports = function emoji_plugin(md, options) {\n var defaults = {\n defs: emojies_defs,\n shortcuts: emojies_shortcuts,\n enabled: []\n };\n\n var opts = normalize_opts(md.utils.assign({}, defaults, options || {}));\n\n md.renderer.rules.emoji = emoji_html;\n\n md.core.ruler.push('emoji', emoji_replace(md, opts.defs, opts.shortcuts, opts.scanRE, opts.replaceRE));\n};\n","// Convert input options to more useable format\n// and compile search regexp\n\n'use strict';\n\n\nfunction quoteRE(str) {\n return str.replace(/[.?*+^$[\\]\\\\(){}|-]/g, '\\\\$&');\n}\n\n\nmodule.exports = function normalize_opts(options) {\n var emojies = options.defs,\n shortcuts;\n\n // Filter emojies by whitelist, if needed\n if (options.enabled.length) {\n emojies = Object.keys(emojies).reduce(function (acc, key) {\n if (options.enabled.indexOf(key) >= 0) {\n acc[key] = emojies[key];\n }\n return acc;\n }, {});\n }\n\n // Flatten shortcuts to simple object: { alias: emoji_name }\n shortcuts = Object.keys(options.shortcuts).reduce(function (acc, key) {\n // Skip aliases for filtered emojies, to reduce regexp\n if (!emojies[key]) { return acc; }\n\n if (Array.isArray(options.shortcuts[key])) {\n options.shortcuts[key].forEach(function (alias) {\n acc[alias] = key;\n });\n return acc;\n }\n\n acc[options.shortcuts[key]] = key;\n return acc;\n }, {});\n\n // Compile regexp\n var names = Object.keys(emojies)\n .map(function (name) { return ':' + name + ':'; })\n .concat(Object.keys(shortcuts))\n .sort()\n .reverse()\n .map(function (name) { return quoteRE(name); })\n .join('|');\n var scanRE = RegExp(names);\n var replaceRE = RegExp(names, 'g');\n\n return {\n defs: emojies,\n shortcuts: shortcuts,\n scanRE: scanRE,\n replaceRE: replaceRE\n };\n};\n","// Proceess '\\n'\n\n'use strict';\n\nmodule.exports = function newline(state, silent) {\n var pmax, max, 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 state.pending = state.pending.replace(/ +$/, '');\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 && state.src.charCodeAt(pos) === 0x20) { pos++; }\n\n state.pos = pos;\n return true;\n};\n","// Commonmark default options\n\n'use strict';\n\n\nmodule.exports = {\n options: {\n html: true, // Enable HTML tags in source\n xhtmlOut: true, // 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 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 return true;\n};\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 typorgapher 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","// Emojies & shortcuts replacement logic.\n//\n// Note: In theory, it could be faster to parse :smile: in inline chain and\n// leave only shortcuts here. But, who care...\n//\n\n'use strict';\n\n\nmodule.exports = function create_rule(md, emojies, shortcuts, scanRE, replaceRE) {\n var arrayReplaceAt = md.utils.arrayReplaceAt,\n ucm = md.utils.lib.ucmicro,\n ZPCc = new RegExp([ ucm.Z.source, ucm.P.source, ucm.Cc.source ].join('|'));\n\n function splitTextToken(text, level, Token) {\n var token, last_pos = 0, nodes = [];\n\n text.replace(replaceRE, function (match, offset, src) {\n var emoji_name;\n // Validate emoji name\n if (shortcuts.hasOwnProperty(match)) {\n // replace shortcut with full name\n emoji_name = shortcuts[match];\n\n // Don't allow letters before any shortcut (as in no \":/\" in http://)\n if (offset > 0 && !ZPCc.test(src[offset - 1])) {\n return;\n }\n\n // Don't allow letters after any shortcut\n if (offset + match.length < src.length && !ZPCc.test(src[offset + match.length])) {\n return;\n }\n } else {\n emoji_name = match.slice(1, -1);\n }\n\n // Add new tokens to pending list\n if (offset > last_pos) {\n token = new Token('text', '', 0);\n token.content = text.slice(last_pos, offset);\n nodes.push(token);\n }\n\n token = new Token('emoji', '', 0);\n token.markup = emoji_name;\n token.content = emojies[emoji_name];\n nodes.push(token);\n\n last_pos = offset + match.length;\n });\n\n if (last_pos < text.length) {\n token = new Token('text', '', 0);\n token.content = text.slice(last_pos);\n nodes.push(token);\n }\n\n return nodes;\n }\n\n return function emoji_replace(state) {\n var i, j, l, tokens, token,\n blockTokens = state.tokens,\n autolinkLevel = 0;\n\n for (j = 0, l = blockTokens.length; j < l; j++) {\n if (blockTokens[j].type !== 'inline') { continue; }\n tokens = blockTokens[j].children;\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 token = tokens[i];\n\n if (token.type === 'link_open' || token.type === 'link_close') {\n if (token.info === 'auto') { autolinkLevel -= token.nesting; }\n }\n\n if (token.type === 'text' && autolinkLevel === 0 && scanRE.test(token.content)) {\n // replace current node\n blockTokens[j].children = tokens = arrayReplaceAt(\n tokens, i, splitTextToken(token.content, token.level, state.Token)\n );\n }\n }\n }\n };\n};\n","// Parse backticks\n\n'use strict';\n\nmodule.exports = function backtick(state, silent) {\n var start, max, marker, matchStart, matchEnd, token,\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 while (pos < max && state.src.charCodeAt(pos) === 0x60/* ` */) { pos++; }\n\n marker = state.src.slice(start, pos);\n\n matchStart = matchEnd = pos;\n\n while ((matchStart = state.src.indexOf('`', matchEnd)) !== -1) {\n matchEnd = matchStart + 1;\n\n while (matchEnd < max && state.src.charCodeAt(matchEnd) === 0x60/* ` */) { matchEnd++; }\n\n if (matchEnd - matchStart === marker.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 .trim();\n }\n state.pos = matchEnd;\n return true;\n }\n }\n\n if (!silent) { state.pending += marker; }\n state.pos += marker.length;\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 arter 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 arter 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 nextLine,\n initial,\n offset,\n indent,\n oldTShift,\n oldIndent,\n oldLIndent,\n oldTight,\n oldParentType,\n start,\n posAfterMarker,\n ch,\n pos,\n max,\n indentAfterMarker,\n markerValue,\n markerCharCode,\n isOrdered,\n contentStart,\n listTokIdx,\n prevEmptyEnd,\n listLines,\n itemLines,\n tight = true,\n terminatorRules,\n token,\n i, l, terminate;\n\n // Detect list type and position after marker\n if ((posAfterMarker = skipOrderedListMarker(state, startLine)) >= 0) {\n isOrdered = true;\n } else if ((posAfterMarker = skipBulletListMarker(state, startLine)) >= 0) {\n isOrdered = false;\n } else {\n 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 start = state.bMarks[startLine] + state.tShift[startLine];\n markerValue = Number(state.src.substr(start, posAfterMarker - start - 1));\n\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 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 (isSpace(ch)) {\n if (ch === 0x09) {\n offset += 4 - offset % 4;\n } else {\n offset++;\n }\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\n oldIndent = state.blkIndent;\n oldTight = state.tight;\n oldTShift = state.tShift[startLine];\n oldLIndent = state.sCount[startLine];\n oldParentType = state.parentType;\n state.blkIndent = indent;\n state.tight = true;\n state.parentType = 'list';\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 = oldIndent;\n state.tShift[startLine] = oldTShift;\n state.sCount[startLine] = oldLIndent;\n state.tight = oldTight;\n state.parentType = oldParentType;\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 if (state.isEmpty(nextLine)) {\n break;\n }\n\n //\n // Try to check if list is terminated or continued.\n //\n if (state.sCount[nextLine] < state.blkIndent) { 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 } 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 // Finilize 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 // mark paragraphs tight if needed\n if (tight) {\n markTightParagraphs(state, listTokIdx);\n }\n\n return true;\n};\n","'use strict';\n\n\nmodule.exports = function ins_plugin(md) {\n // Insert each marker as a separate text token, and add it to delimiter list\n //\n function tokenize(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 !== 0x3D/* = */) { 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 jump: i,\n token: state.tokens.length - 1,\n level: state.level,\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\n // Walk through delimiter list and replace text tokens with tags\n //\n function postProcess(state) {\n var i, j,\n startDelim,\n endDelim,\n token,\n loneMarkers = [],\n delimiters = state.delimiters,\n max = state.delimiters.length;\n\n for (i = 0; i < max; i++) {\n startDelim = delimiters[i];\n\n if (startDelim.marker !== 0x3D/* = */) {\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 = 'mark_open';\n token.tag = 'mark';\n token.nesting = 1;\n token.markup = '==';\n token.content = '';\n\n token = state.tokens[endDelim.token];\n token.type = 'mark_close';\n token.tag = 'mark';\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 === 'mark_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 md.inline.ruler.before('emphasis', 'mark', tokenize);\n md.inline.ruler2.before('emphasis', 'mark', postProcess);\n};\n","// Normalize input string\n\n'use strict';\n\n\nvar NEWLINES_RE = /\\r[\\n\\u0085]?|[\\u2424\\u2028\\u0085]/g;\nvar NULL_RE = /\\u0000/g;\n\n\nmodule.exports = function inline(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","/** 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 [ '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\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 [ 'text_collapse', require('./rules_inline/text_collapse') ]\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","// Enclose abbreviations in tags\n//\n'use strict';\n\n\nmodule.exports = function sub_plugin(md) {\n var escapeRE = md.utils.escapeRE,\n arrayReplaceAt = md.utils.arrayReplaceAt;\n\n // ASCII characters in Cc, Sc, Sm, Sk categories we should terminate on;\n // you can check character classes here:\n // http://www.unicode.org/Public/UNIDATA/UnicodeData.txt\n var OTHER_CHARS = ' \\r\\n$+<=>^`|~';\n\n var UNICODE_PUNCT_RE = md.utils.lib.ucmicro.P.source;\n var UNICODE_SPACE_RE = md.utils.lib.ucmicro.Z.source;\n\n\n function abbr_def(state, startLine, endLine, silent) {\n var label, title, ch, labelStart, labelEnd,\n pos = state.bMarks[startLine] + state.tShift[startLine],\n max = state.eMarks[startLine];\n\n if (pos + 2 >= max) { return false; }\n\n if (state.src.charCodeAt(pos++) !== 0x2A/* * */) { return false; }\n if (state.src.charCodeAt(pos++) !== 0x5B/* [ */) { return false; }\n\n labelStart = pos;\n\n for (; pos < max; pos++) {\n ch = state.src.charCodeAt(pos);\n if (ch === 0x5B /* [ */) {\n return false;\n } else if (ch === 0x5D /* ] */) {\n labelEnd = pos;\n break;\n } else if (ch === 0x5C /* \\ */) {\n pos++;\n }\n }\n\n if (labelEnd < 0 || state.src.charCodeAt(labelEnd + 1) !== 0x3A/* : */) {\n return false;\n }\n\n if (silent) { return true; }\n\n label = state.src.slice(labelStart, labelEnd).replace(/\\\\(.)/g, '$1');\n title = state.src.slice(labelEnd + 2, max).trim();\n if (label.length === 0) { return false; }\n if (title.length === 0) { return false; }\n if (!state.env.abbreviations) { state.env.abbreviations = {}; }\n // prepend ':' to avoid conflict with Object.prototype members\n if (typeof state.env.abbreviations[':' + label] === 'undefined') {\n state.env.abbreviations[':' + label] = title;\n }\n\n state.line = startLine + 1;\n return true;\n }\n\n\n function abbr_replace(state) {\n var i, j, l, tokens, token, text, nodes, pos, reg, m, regText, regSimple,\n currentToken,\n blockTokens = state.tokens;\n\n if (!state.env.abbreviations) { return; }\n\n regSimple = new RegExp('(?:' +\n Object.keys(state.env.abbreviations).map(function (x) {\n return x.substr(1);\n }).sort(function (a, b) {\n return b.length - a.length;\n }).map(escapeRE).join('|') +\n ')');\n\n regText = '(^|' + UNICODE_PUNCT_RE + '|' + UNICODE_SPACE_RE +\n '|[' + OTHER_CHARS.split('').map(escapeRE).join('') + '])'\n + '(' + Object.keys(state.env.abbreviations).map(function (x) {\n return x.substr(1);\n }).sort(function (a, b) {\n return b.length - a.length;\n }).map(escapeRE).join('|') + ')'\n + '($|' + UNICODE_PUNCT_RE + '|' + UNICODE_SPACE_RE +\n '|[' + OTHER_CHARS.split('').map(escapeRE).join('') + '])';\n\n reg = new RegExp(regText, 'g');\n\n for (j = 0, l = blockTokens.length; j < l; j++) {\n if (blockTokens[j].type !== 'inline') { continue; }\n tokens = blockTokens[j].children;\n\n // We scan from the end, to keep position when new tags added.\n for (i = tokens.length - 1; i >= 0; i--) {\n currentToken = tokens[i];\n if (currentToken.type !== 'text') { continue; }\n\n pos = 0;\n text = currentToken.content;\n reg.lastIndex = 0;\n nodes = [];\n\n // fast regexp run to determine whether there are any abbreviated words\n // in the current token\n if (!regSimple.test(text)) { continue; }\n\n while ((m = reg.exec(text))) {\n if (m.index > 0 || m[1].length > 0) {\n token = new state.Token('text', '', 0);\n token.content = text.slice(pos, m.index + m[1].length);\n nodes.push(token);\n }\n\n token = new state.Token('abbr_open', 'abbr', 1);\n token.attrs = [ [ 'title', state.env.abbreviations[':' + m[2]] ] ];\n nodes.push(token);\n\n token = new state.Token('text', '', 0);\n token.content = m[2];\n nodes.push(token);\n\n token = new state.Token('abbr_close', 'abbr', -1);\n nodes.push(token);\n\n reg.lastIndex -= m[3].length;\n pos = reg.lastIndex;\n }\n\n if (!nodes.length) { continue; }\n\n if (pos < text.length) {\n token = new state.Token('text', '', 0);\n token.content = text.slice(pos);\n nodes.push(token);\n }\n\n // replace current node\n blockTokens[j].children = tokens = arrayReplaceAt(tokens, i, nodes);\n }\n }\n }\n\n md.block.ruler.before('reference', 'abbr_def', abbr_def, { alt: [ 'paragraph', 'reference' ] });\n\n md.core.ruler.after('linkify', 'abbr_replace', abbr_replace);\n};\n","// Process ~subscript~\n\n'use strict';\n\n// same as UNESCAPE_MD_RE plus a space\nvar UNESCAPE_RE = /\\\\([ \\\\!\"#$%&'()*+,.\\/:;<=>?@[\\]^_`{|}~-])/g;\n\n\nfunction subscript(state, silent) {\n var found,\n content,\n token,\n max = state.posMax,\n start = state.pos;\n\n if (state.src.charCodeAt(start) !== 0x7E/* ~ */) { return false; }\n if (silent) { return false; } // don't run any pairs in validation mode\n if (start + 2 >= max) { return false; }\n\n state.pos = start + 1;\n\n while (state.pos < max) {\n if (state.src.charCodeAt(state.pos) === 0x7E/* ~ */) {\n found = true;\n break;\n }\n\n state.md.inline.skipToken(state);\n }\n\n if (!found || start + 1 === state.pos) {\n state.pos = start;\n return false;\n }\n\n content = state.src.slice(start + 1, state.pos);\n\n // don't allow unescaped spaces/newlines inside\n if (content.match(/(^|[^\\\\])(\\\\\\\\)*\\s/)) {\n state.pos = start;\n return false;\n }\n\n // found!\n state.posMax = state.pos;\n state.pos = start + 1;\n\n // Earlier we checked !silent, but this implementation does not need it\n token = state.push('sub_open', 'sub', 1);\n token.markup = '~';\n\n token = state.push('text', '', 0);\n token.content = content.replace(UNESCAPE_RE, '$1');\n\n token = state.push('sub_close', 'sub', -1);\n token.markup = '~';\n\n state.pos = state.posMax + 1;\n state.posMax = max;\n return true;\n}\n\n\nmodule.exports = function sub_plugin(md) {\n md.inline.ruler.after('emphasis', 'sub', subscript);\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","// 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 = '<[?].*?[?]>';\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","// 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,8}|[0-9]{1,8}));/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, pos = state.pos, max = state.posMax;\n\n if (state.src.charCodeAt(pos) !== 0x26/* & */) { return false; }\n\n if (pos + 1 < max) {\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 state.pending += isValidEntityCode(code) ? fromCodePoint(code) : fromCodePoint(0xFFFD);\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) { state.pending += entities[match[1]]; }\n state.pos += match[0].length;\n return true;\n }\n }\n }\n }\n\n if (!silent) { state.pending += '&'; }\n state.pos++;\n return true;\n};\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)(?=(\\s|>|$))/i, /<\\/(script|pre|style)>/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 (!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","// Proceess 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 ch, pos = state.pos, max = state.posMax;\n\n if (state.src.charCodeAt(pos) !== 0x5C/* \\ */) { return false; }\n\n pos++;\n\n if (pos < max) {\n ch = state.src.charCodeAt(pos);\n\n if (ch < 256 && ESCAPED[ch] !== 0) {\n if (!silent) { state.pending += state.src[pos]; }\n state.pos += 2;\n return true;\n }\n\n if (ch === 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 ch = state.src.charCodeAt(pos);\n if (!isSpace(ch)) { break; }\n pos++;\n }\n\n state.pos = pos;\n return true;\n }\n }\n\n if (!silent) { state.pending += '\\\\'; }\n state.pos++;\n return true;\n};\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 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', '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 [ 'heading', require('./rules_block/heading'), [ 'paragraph', 'reference', 'blockquote' ] ],\n [ 'lheading', require('./rules_block/lheading') ],\n [ 'html_block', require('./rules_block/html_block'), [ 'paragraph', 'reference', 'blockquote' ] ],\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 iff 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\n // two empty lines should stop the parser in list mode\n if (line < endLine && state.parentType === 'list' && state.isEmpty(line)) { break; }\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","// Process ^superscript^\n\n'use strict';\n\n// same as UNESCAPE_MD_RE plus a space\nvar UNESCAPE_RE = /\\\\([ \\\\!\"#$%&'()*+,.\\/:;<=>?@[\\]^_`{|}~-])/g;\n\nfunction superscript(state, silent) {\n var found,\n content,\n token,\n max = state.posMax,\n start = state.pos;\n\n if (state.src.charCodeAt(start) !== 0x5E/* ^ */) { return false; }\n if (silent) { return false; } // don't run any pairs in validation mode\n if (start + 2 >= max) { return false; }\n\n state.pos = start + 1;\n\n while (state.pos < max) {\n if (state.src.charCodeAt(state.pos) === 0x5E/* ^ */) {\n found = true;\n break;\n }\n\n state.md.inline.skipToken(state);\n }\n\n if (!found || start + 1 === state.pos) {\n state.pos = start;\n return false;\n }\n\n content = state.src.slice(start + 1, state.pos);\n\n // don't allow unescaped spaces/newlines inside\n if (content.match(/(^|[^\\\\])(\\\\\\\\)*\\s/)) {\n state.pos = start;\n return false;\n }\n\n // found!\n state.posMax = state.pos;\n state.pos = start + 1;\n\n // Earlier we checked !silent, but this implementation does not need it\n token = state.push('sup_open', 'sup', 1);\n token.markup = '^';\n\n token = state.push('text', '', 0);\n token.content = content.replace(UNESCAPE_RE, '$1');\n\n token = state.push('sup_close', 'sup', -1);\n token.markup = '^';\n\n state.pos = state.posMax + 1;\n state.posMax = max;\n return true;\n}\n\n\nmodule.exports = function sup_plugin(md) {\n md.inline.ruler.after('emphasis', 'sup', superscript);\n};\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 attrs = slf.renderAttrs(token);\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 attrs = slf.renderAttrs(token);\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 highlighted, i, tmpAttrs, tmpToken;\n\n if (info) {\n langName = info.split(/\\s+/g)[0];\n }\n\n if (options.highlight) {\n highlighted = options.highlight(token.content, langName) || 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 independed 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 renter\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 renter\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 }\n }\n\n return result;\n};\n\n\n/**\n * Renderer.render(tokens, options, env) -> String\n * - tokens (Array): list on block tokens to renter\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","// 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 === 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","// GFM table, non-standard\n\n'use strict';\n\n\nfunction getLine(state, line) {\n var pos = state.bMarks[line] + state.blkIndent,\n max = state.eMarks[line];\n\n return state.src.substr(pos, max - pos);\n}\n\nfunction escapedSplit(str) {\n var result = [],\n pos = 0,\n max = str.length,\n ch,\n escapes = 0,\n lastPos = 0,\n backTicked = false,\n lastBackTick = 0;\n\n ch = str.charCodeAt(pos);\n\n while (pos < max) {\n if (ch === 0x60/* ` */ && (escapes % 2 === 0)) {\n backTicked = !backTicked;\n lastBackTick = pos;\n } else if (ch === 0x7c/* | */ && (escapes % 2 === 0) && !backTicked) {\n result.push(str.substring(lastPos, pos));\n lastPos = pos + 1;\n } else if (ch === 0x5c/* \\ */) {\n escapes++;\n } else {\n escapes = 0;\n }\n\n pos++;\n\n // If there was an un-closed backtick, go back to just after\n // the last backtick, but as if it was a normal character\n if (pos === max && backTicked) {\n backTicked = false;\n pos = lastBackTick + 1;\n }\n\n ch = str.charCodeAt(pos);\n }\n\n result.push(str.substring(lastPos));\n\n return result;\n}\n\n\nmodule.exports = function table(state, startLine, endLine, silent) {\n var ch, lineText, pos, i, nextLine, columns, columnCount, token,\n aligns, t, tableLines, tbodyLines;\n\n // should have at least three 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 // first character of the second line should be '|' or '-'\n\n pos = state.bMarks[nextLine] + state.tShift[nextLine];\n if (pos >= state.eMarks[nextLine]) { return false; }\n\n ch = state.src.charCodeAt(pos);\n if (ch !== 0x7C/* | */ && ch !== 0x2D/* - */ && ch !== 0x3A/* : */) { return false; }\n\n lineText = getLine(state, startLine + 1);\n if (!/^[-:| ]+$/.test(lineText)) { return false; }\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 columns = escapedSplit(lineText.replace(/^\\||\\|$/g, ''));\n\n // header row will define an amount of columns in the entire table,\n // and align row shouldn't be smaller than that (the rest of the rows can)\n columnCount = columns.length;\n if (columnCount > aligns.length) { return false; }\n\n if (silent) { return true; }\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 token.map = [ startLine, startLine + 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.map = [ startLine, startLine + 1 ];\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 token = state.push('tbody_open', 'tbody', 1);\n token.map = tbodyLines = [ startLine + 2, 0 ];\n\n for (nextLine = startLine + 2; nextLine < endLine; nextLine++) {\n if (state.sCount[nextLine] < state.blkIndent) { break; }\n\n lineText = getLine(state, nextLine);\n if (lineText.indexOf('|') === -1) { break; }\n\n // keep spaces at beginning of line to indicate an empty first cell, but\n // strip trailing whitespace\n columns = escapedSplit(lineText.replace(/^\\||\\|\\s*$/g, ''));\n\n token = state.push('tr_open', 'tr', 1);\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 token = state.push('tbody_close', 'tbody', -1);\n token = state.push('table_close', 'table', -1);\n\n tableLines[1] = tbodyLines[1] = nextLine;\n state.line = nextLine;\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 // block parser variables\n this.blkIndent = 0; // required block content indent\n // (for example, if we are in list)\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.parentType = 'root'; // if `list`, block parser stops on two newlines\n this.ddIndent = -1; // indent of the current dd block (-1 if there isn't any)\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\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\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--; }\n token.level = this.level;\n if (nesting > 0) { this.level++; }\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 % 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 queue[i] = this.src.slice(first, last);\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","// For each opening emphasis-like marker find a matching closing one\n//\n'use strict';\n\n\nmodule.exports = function link_pairs(state) {\n var i, j, lastDelim, currDelim,\n delimiters = state.delimiters,\n max = state.delimiters.length;\n\n for (i = 0; i < max; i++) {\n lastDelim = delimiters[i];\n\n if (!lastDelim.close) { continue; }\n\n j = i - lastDelim.jump - 1;\n\n while (j >= 0) {\n currDelim = delimiters[j];\n\n if (currDelim.open &&\n currDelim.marker === lastDelim.marker &&\n currDelim.end < 0 &&\n currDelim.level === lastDelim.level) {\n\n lastDelim.jump = i - j;\n lastDelim.open = false;\n currDelim.end = i;\n currDelim.jump = 0;\n break;\n }\n\n j -= currDelim.jump + 1;\n }\n }\n};\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 `~` + `~~` + `~~`, 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","// Process ![image]( \"title\")\n\n'use strict';\n\nvar parseLinkLabel = require('../helpers/parse_link_label');\nvar parseLinkDestination = require('../helpers/parse_link_destination');\nvar parseLinkTitle = require('../helpers/parse_link_title');\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 = 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 = 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 = 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 = 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","// 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 for (ln = 0; ln < links.length; ln++) {\n\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","// Code block (4 spaces padded)\n\n'use strict';\n\n\nmodule.exports = function code(state, startLine, endLine/*, silent*/) {\n var nextLine, last, token, emptyLines = 0;\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 emptyLines++;\n\n // workaround for lists: 2 blank lines should terminate indented\n // code block, but not fenced code block\n if (emptyLines >= 2 && state.parentType === 'list') {\n break;\n }\n\n nextLine++;\n continue;\n }\n\n emptyLines = 0;\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, true);\n token.map = [ startLine, state.line ];\n\n return true;\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","/* Process inline math */\n/*\nLike markdown-it-simplemath, this is a stripped down, simplified version of:\nhttps://github.com/runarberg/markdown-it-math\n\nIt differs in that it takes (a subset of) LaTeX as input and relies on KaTeX\nfor rendering output.\n*/\n\n/*jslint node: true */\n'use strict';\n\nvar katex = require('katex');\n\n// Test if potential opening or closing delimieter\n// Assumes that there is a \"$\" at state.src[pos]\nfunction isValidDelim(state, pos) {\n var prevChar, nextChar,\n max = state.posMax,\n can_open = true,\n can_close = true;\n\n prevChar = pos > 0 ? state.src.charCodeAt(pos - 1) : -1;\n nextChar = pos + 1 <= max ? state.src.charCodeAt(pos + 1) : -1;\n\n // Check non-whitespace conditions for opening and closing, and\n // check that closing delimeter isn't followed by a number\n if (prevChar === 0x20/* \" \" */ || prevChar === 0x09/* \\t */ ||\n (nextChar >= 0x30/* \"0\" */ && nextChar <= 0x39/* \"9\" */)) {\n can_close = false;\n }\n if (nextChar === 0x20/* \" \" */ || nextChar === 0x09/* \\t */) {\n can_open = false;\n }\n\n return {\n can_open: can_open,\n can_close: can_close\n };\n}\n\nfunction math_inline(state, silent) {\n var start, match, token, res, pos, esc_count;\n\n if (state.src[state.pos] !== \"$\") { return false; }\n\n res = isValidDelim(state, state.pos);\n if (!res.can_open) {\n if (!silent) { state.pending += \"$\"; }\n state.pos += 1;\n return true;\n }\n\n // First check for and bypass all properly escaped delimieters\n // This loop will assume that the first leading backtick can not\n // be the first character in state.src, which is known since\n // we have found an opening delimieter already.\n start = state.pos + 1;\n match = start;\n while ( (match = state.src.indexOf(\"$\", match)) !== -1) {\n // Found potential $, look for escapes, pos will point to\n // first non escape when complete\n pos = match - 1;\n while (state.src[pos] === \"\\\\\") { pos -= 1; }\n\n // Even number of escapes, potential closing delimiter found\n if ( ((match - pos) % 2) == 1 ) { break; }\n match += 1;\n }\n\n // No closing delimter found. Consume $ and continue.\n if (match === -1) {\n if (!silent) { state.pending += \"$\"; }\n state.pos = start;\n return true;\n }\n\n // Check if we have empty content, ie: $$. Do not parse.\n if (match - start === 0) {\n if (!silent) { state.pending += \"$$\"; }\n state.pos = start + 1;\n return true;\n }\n\n // Check for valid closing delimiter\n res = isValidDelim(state, match);\n if (!res.can_close) {\n if (!silent) { state.pending += \"$\"; }\n state.pos = start;\n return true;\n }\n\n if (!silent) {\n token = state.push('math_inline', 'math', 0);\n token.markup = \"$\";\n token.content = state.src.slice(start, match);\n }\n\n state.pos = match + 1;\n return true;\n}\n\nfunction math_block(state, start, end, silent){\n var firstLine, lastLine, next, lastPos, found = false, token,\n pos = state.bMarks[start] + state.tShift[start],\n max = state.eMarks[start]\n\n if(pos + 2 > max){ return false; }\n if(state.src.slice(pos,pos+2)!=='$$'){ return false; }\n\n pos += 2;\n firstLine = state.src.slice(pos,max);\n\n if(silent){ return true; }\n if(firstLine.trim().slice(-2)==='$$'){\n // Single line expression\n firstLine = firstLine.trim().slice(0, -2);\n found = true;\n }\n\n for(next = start; !found; ){\n\n next++;\n\n if(next >= end){ break; }\n\n pos = state.bMarks[next]+state.tShift[next];\n max = state.eMarks[next];\n\n if(pos < max && state.tShift[next] < state.blkIndent){\n // non-empty line with negative indent should stop the list:\n break;\n }\n\n if(state.src.slice(pos,max).trim().slice(-2)==='$$'){\n lastPos = state.src.slice(0,max).lastIndexOf('$$');\n lastLine = state.src.slice(pos,lastPos);\n found = true;\n }\n\n }\n\n state.line = next + 1;\n\n token = state.push('math_block', 'math', 0);\n token.block = true;\n token.content = (firstLine && firstLine.trim() ? firstLine + '\\n' : '')\n + state.getLines(start + 1, next, state.tShift[start], true)\n + (lastLine && lastLine.trim() ? lastLine : '');\n token.map = [ start, state.line ];\n token.markup = '$$';\n return true;\n}\n\nmodule.exports = function math_plugin(md, options) {\n // Default options\n\n options = options || {};\n\n // set KaTeX as the renderer for markdown-it-simplemath\n var katexInline = function(latex){\n options.displayMode = false;\n try{\n return katex.renderToString(latex, options);\n }\n catch(error){\n if(options.throwOnError){ console.log(error); }\n return latex;\n }\n };\n\n var inlineRenderer = function(tokens, idx){\n return katexInline(tokens[idx].content);\n };\n\n var katexBlock = function(latex){\n options.displayMode = true;\n try{\n return \"

\" + katex.renderToString(latex, options) + \"

\";\n }\n catch(error){\n if(options.throwOnError){ console.log(error); }\n return latex;\n }\n }\n\n var blockRenderer = function(tokens, idx){\n return katexBlock(tokens[idx].content) + '\\n';\n }\n\n md.inline.ruler.after('escape', 'math_inline', math_inline);\n md.block.ruler.after('blockquote', 'math_block', math_block, {\n alt: [ 'paragraph', 'reference', 'blockquote', 'list' ]\n });\n md.renderer.rules.math_inline = inlineRenderer;\n md.renderer.rules.math_block = blockRenderer;\n};\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];\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","// Emoticons -> Emoji mapping.\n//\n// (!) Some patterns skipped, to avoid collisions\n// without increase matcher complicity. Than can change in future.\n//\n// Places to look for more emoticons info:\n//\n// - http://en.wikipedia.org/wiki/List_of_emoticons#Western\n// - https://github.com/wooorm/emoticon/blob/master/Support.md\n// - http://factoryjoe.com/projects/emoticons/\n//\n'use strict';\n\nmodule.exports = {\n angry: [ '>:(', '>:-(' ],\n blush: [ ':\")', ':-\")' ],\n broken_heart: [ '= 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 !== 'text') { continue; }\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 !== 'text') { continue; }\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 // treat this as the middle of the word\n canOpen = false;\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","// 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","// Simple typographyc 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// - miltiplication 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|p)\\)/i;\n\nvar SCOPED_ABBR_RE = /\\((c|tm|r|p)\\)/ig;\nvar SCOPED_ABBR = {\n c: '©',\n r: '®',\n p: '§',\n tm: '™'\n};\n\nfunction replaceFn(match, name) {\n return SCOPED_ABBR[name.toLowerCase()];\n}\n\nfunction replace_scoped(inlineTokens) {\n var i, token;\n\n for (i = inlineTokens.length - 1; i >= 0; i--) {\n token = inlineTokens[i];\n if (token.type === 'text') {\n token.content = token.content.replace(SCOPED_ABBR_RE, replaceFn);\n }\n }\n}\n\nfunction replace_rare(inlineTokens) {\n var i, token;\n\n for (i = inlineTokens.length - 1; i >= 0; i--) {\n token = inlineTokens[i];\n if (token.type === 'text') {\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$2')\n // en-dash\n .replace(/(^|\\s)--(\\s|$)/mg, '$1\\u2013$2')\n .replace(/(^|[^-\\s])--([^-\\s]|$)/mg, '$1\\u2013$2');\n }\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","// HTML5 entities map: { name -> utf16string }\n//\n'use strict';\n\n/*eslint quotes:0*/\nmodule.exports = require('entities/maps/entities.json');\n","// Markdown-it plugin to render GitHub-style task lists; see\n//\n// https://github.com/blog/1375-task-lists-in-gfm-issues-pulls-comments\n// https://github.com/blog/1825-task-lists-in-all-markdown-documents\n\nvar disableCheckboxes = true;\nvar useLabelWrapper = false;\nvar useLabelAfter = false;\n\nmodule.exports = function(md, options) {\n\tif (options) {\n\t\tdisableCheckboxes = !options.enabled;\n\t\tuseLabelWrapper = !!options.label;\n\t\tuseLabelAfter = !!options.labelAfter;\n\t}\n\n\tmd.core.ruler.after('inline', 'github-task-lists', function(state) {\n\t\tvar tokens = state.tokens;\n\t\tfor (var i = 2; i < tokens.length; i++) {\n\t\t\tif (isTodoItem(tokens, i)) {\n\t\t\t\ttodoify(tokens[i], state.Token);\n\t\t\t\tattrSet(tokens[i-2], 'class', 'task-list-item' + (!disableCheckboxes ? ' enabled' : ''));\n\t\t\t\tattrSet(tokens[parentToken(tokens, i-2)], 'class', 'contains-task-list');\n\t\t\t}\n\t\t}\n\t});\n};\n\nfunction attrSet(token, name, value) {\n\tvar index = token.attrIndex(name);\n\tvar attr = [name, value];\n\n\tif (index < 0) {\n\t\ttoken.attrPush(attr);\n\t} else {\n\t\ttoken.attrs[index] = attr;\n\t}\n}\n\nfunction parentToken(tokens, index) {\n\tvar targetLevel = tokens[index].level - 1;\n\tfor (var i = index - 1; i >= 0; i--) {\n\t\tif (tokens[i].level === targetLevel) {\n\t\t\treturn i;\n\t\t}\n\t}\n\treturn -1;\n}\n\nfunction isTodoItem(tokens, index) {\n\treturn isInline(tokens[index]) &&\n\t isParagraph(tokens[index - 1]) &&\n\t isListItem(tokens[index - 2]) &&\n\t startsWithTodoMarkdown(tokens[index]);\n}\n\nfunction todoify(token, TokenConstructor) {\n\ttoken.children.unshift(makeCheckbox(token, TokenConstructor));\n\ttoken.children[1].content = token.children[1].content.slice(3);\n\ttoken.content = token.content.slice(3);\n\n\tif (useLabelWrapper) {\n\t\tif (useLabelAfter) {\n\t\t\ttoken.children.pop();\n\n\t\t\t// Use large random number as id property of the checkbox.\n\t\t\tvar id = 'task-item-' + Math.ceil(Math.random() * (10000 * 1000) - 1000);\n\t\t\ttoken.children[0].content = token.children[0].content.slice(0, -1) + ' id=\"' + id + '\">';\n\t\t\ttoken.children.push(afterLabel(token.content, id, TokenConstructor));\n\t\t} else {\n\t\t\ttoken.children.unshift(beginLabel(TokenConstructor));\n\t\t\ttoken.children.push(endLabel(TokenConstructor));\n\t\t}\n\t}\n}\n\nfunction makeCheckbox(token, TokenConstructor) {\n\tvar checkbox = new TokenConstructor('html_inline', '', 0);\n\tvar disabledAttr = disableCheckboxes ? ' disabled=\"\" ' : '';\n\tif (token.content.indexOf('[ ] ') === 0) {\n\t\tcheckbox.content = '';\n\t} else if (token.content.indexOf('[x] ') === 0 || token.content.indexOf('[X] ') === 0) {\n\t\tcheckbox.content = '';\n\t}\n\treturn checkbox;\n}\n\n// these next two functions are kind of hacky; probably should really be a\n// true block-level token with .tag=='label'\nfunction beginLabel(TokenConstructor) {\n\tvar token = new TokenConstructor('html_inline', '', 0);\n\ttoken.content = '';\n\treturn token;\n}\n\nfunction afterLabel(content, id, TokenConstructor) {\n\tvar token = new TokenConstructor('html_inline', '', 0);\n\ttoken.content = '';\n\ttoken.attrs = [{for: id}];\n\treturn token;\n}\n\nfunction isInline(token) { return token.type === 'inline'; }\nfunction isParagraph(token) { return token.type === 'paragraph_open'; }\nfunction isListItem(token) { return token.type === 'list_item_open'; }\n\nfunction startsWithTodoMarkdown(token) {\n\t// leading whitespace in a list item is already trimmed off by markdown-it\n\treturn token.content.indexOf('[ ] ') === 0 || token.content.indexOf('[x] ') === 0 || token.content.indexOf('[X] ') === 0;\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 (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 (params.indexOf('`') >= 0) { return false; }\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","// Process html tags\n\n'use strict';\n\n\nvar HTML_TAG_RE = require('../common/html_re').HTML_TAG_RE;\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 state.pos += match[0].length;\n return true;\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 // An amount of characters before this one that's equivalent to\n // current one. In plain English: if this delimiter does not open\n // an emphasis, neither do previous `jump` characters.\n //\n // Used to skip sequences like \"*****\" in one step, for 1st asterisk\n // value will be 0, for 2nd it's 1 and so on.\n //\n jump: i,\n\n // A position of the token this delimiter corresponds to.\n //\n token: state.tokens.length - 1,\n\n // Token level.\n //\n level: state.level,\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\n// Walk through delimiter list and replace text tokens with tags\n//\nmodule.exports.postProcess = function emphasis(state) {\n var i,\n startDelim,\n endDelim,\n token,\n ch,\n isStrong,\n delimiters = state.delimiters,\n max = state.delimiters.length;\n\n for (i = 0; i < max; 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 next 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 + 1 < max &&\n delimiters[i + 1].end === startDelim.end - 1 &&\n delimiters[i + 1].token === startDelim.token + 1 &&\n delimiters[startDelim.end - 1].token === endDelim.token - 1 &&\n delimiters[i + 1].marker === startDelim.marker;\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","// Process [link]( \"stuff\")\n\n'use strict';\n\nvar parseLinkLabel = require('../helpers/parse_link_label');\nvar parseLinkDestination = require('../helpers/parse_link_destination');\nvar parseLinkTitle = require('../helpers/parse_link_title');\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 title,\n token,\n href = '',\n oldPos = state.pos,\n max = state.posMax,\n start = state.pos;\n\n if (state.src.charCodeAt(state.pos) !== 0x5B/* [ */) { return false; }\n\n labelStart = state.pos + 1;\n labelEnd = 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 // [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 = 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 = 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 = 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.md.inline.tokenize(state);\n\n token = state.push('link_close', 'a', -1);\n }\n\n state.pos = pos;\n state.posMax = max;\n return true;\n};\n","'use strict';\n\n\nmodule.exports = function ins_plugin(md) {\n // Insert each marker as a separate text token, and add it to delimiter list\n //\n function tokenize(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 !== 0x2B/* + */) { 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 jump: i,\n token: state.tokens.length - 1,\n level: state.level,\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\n // Walk through delimiter list and replace text tokens with tags\n //\n function postProcess(state) {\n var i, j,\n startDelim,\n endDelim,\n token,\n loneMarkers = [],\n delimiters = state.delimiters,\n max = state.delimiters.length;\n\n for (i = 0; i < max; i++) {\n startDelim = delimiters[i];\n\n if (startDelim.marker !== 0x2B/* + */) {\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 = 'ins_open';\n token.tag = 'ins';\n token.nesting = 1;\n token.markup = '++';\n token.content = '';\n\n token = state.tokens[endDelim.token];\n token.type = 'ins_close';\n token.tag = 'ins';\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 === 'ins_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 md.inline.ruler.before('emphasis', 'ins', tokenize);\n md.inline.ruler2.before('emphasis', 'ins', postProcess);\n};\n","'use strict';\n\n\nmodule.exports = require('./lib/');\n","'use strict';\n\n\nvar parseLinkDestination = require('../helpers/parse_link_destination');\nvar parseLinkTitle = require('../helpers/parse_link_title');\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 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 (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 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 = 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 = 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.line = startLine + lines + 1;\n return true;\n};\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","// 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 'head',\n 'header',\n 'hr',\n 'html',\n 'iframe',\n 'legend',\n 'li',\n 'link',\n 'main',\n 'menu',\n 'menuitem',\n 'meta',\n 'nav',\n 'noframes',\n 'ol',\n 'optgroup',\n 'option',\n 'p',\n 'param',\n 'pre',\n 'section',\n 'source',\n 'title',\n 'summary',\n 'table',\n 'tbody',\n 'td',\n 'tfoot',\n 'th',\n 'thead',\n 'title',\n 'tr',\n 'track',\n 'ul'\n];\n","// Parse link destination\n//\n'use strict';\n\n\nvar isSpace = require('../common/utils').isSpace;\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 */ || isSpace(code)) { 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 pos += 2;\n continue;\n }\n\n if (code === 0x28 /* ( */) {\n level++;\n if (level > 1) { break; }\n }\n\n if (code === 0x29 /* ) */) {\n level--;\n if (level < 0) { break; }\n }\n\n pos++;\n }\n\n if (start === pos) { 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","// Process footnotes\n//\n'use strict';\n\n////////////////////////////////////////////////////////////////////////////////\n// Renderer partials\n\nfunction _footnote_ref(tokens, idx) {\n var n = Number(tokens[idx].meta.id + 1).toString();\n var id = 'fnref' + n;\n if (tokens[idx].meta.subId > 0) {\n id += ':' + tokens[idx].meta.subId;\n }\n return '[' + n + ']';\n}\nfunction _footnote_block_open(tokens, idx, options) {\n return (options.xhtmlOut ? '
\\n' : '
\\n') +\n '
\\n' +\n '
    \\n';\n}\nfunction _footnote_block_close() {\n return '
\\n
\\n';\n}\nfunction _footnote_open(tokens, idx) {\n var id = Number(tokens[idx].meta.id + 1).toString();\n return '
  • ';\n}\nfunction _footnote_close() {\n return '
  • \\n';\n}\nfunction _footnote_anchor(tokens, idx) {\n var n = Number(tokens[idx].meta.id + 1).toString();\n var id = 'fnref' + n;\n if (tokens[idx].meta.subId > 0) {\n id += ':' + tokens[idx].meta.subId;\n }\n return ' \\u21a9'; /* ↩ */\n}\n\n////////////////////////////////////////////////////////////////////////////////\n\n\nmodule.exports = function sub_plugin(md) {\n var parseLinkLabel = md.helpers.parseLinkLabel,\n isSpace = md.utils.isSpace;\n\n md.renderer.rules.footnote_ref = _footnote_ref;\n md.renderer.rules.footnote_block_open = _footnote_block_open;\n md.renderer.rules.footnote_block_close = _footnote_block_close;\n md.renderer.rules.footnote_open = _footnote_open;\n md.renderer.rules.footnote_close = _footnote_close;\n md.renderer.rules.footnote_anchor = _footnote_anchor;\n\n // Process footnote block definition\n function footnote_def(state, startLine, endLine, silent) {\n var oldBMark, oldTShift, oldSCount, oldParentType, pos, label, token,\n initial, offset, ch, posAfterColon,\n start = state.bMarks[startLine] + state.tShift[startLine],\n max = state.eMarks[startLine];\n\n // line should be at least 5 chars - \"[^x]:\"\n if (start + 4 > max) { return false; }\n\n if (state.src.charCodeAt(start) !== 0x5B/* [ */) { return false; }\n if (state.src.charCodeAt(start + 1) !== 0x5E/* ^ */) { return false; }\n\n for (pos = start + 2; pos < max; pos++) {\n if (state.src.charCodeAt(pos) === 0x20) { return false; }\n if (state.src.charCodeAt(pos) === 0x5D /* ] */) {\n break;\n }\n }\n\n if (pos === start + 2) { return false; } // no empty footnote labels\n if (pos + 1 >= max || state.src.charCodeAt(++pos) !== 0x3A /* : */) { return false; }\n if (silent) { return true; }\n pos++;\n\n if (!state.env.footnotes) { state.env.footnotes = {}; }\n if (!state.env.footnotes.refs) { state.env.footnotes.refs = {}; }\n label = state.src.slice(start + 2, pos - 2);\n state.env.footnotes.refs[':' + label] = -1;\n\n token = new state.Token('footnote_reference_open', '', 1);\n token.meta = { label: label };\n token.level = state.level++;\n state.tokens.push(token);\n\n oldBMark = state.bMarks[startLine];\n oldTShift = state.tShift[startLine];\n oldSCount = state.sCount[startLine];\n oldParentType = state.parentType;\n\n posAfterColon = pos;\n initial = offset = state.sCount[startLine] + pos - (state.bMarks[startLine] + state.tShift[startLine]);\n\n while (pos < max) {\n ch = state.src.charCodeAt(pos);\n\n if (isSpace(ch)) {\n if (ch === 0x09) {\n offset += 4 - offset % 4;\n } else {\n offset++;\n }\n } else {\n break;\n }\n\n pos++;\n }\n\n state.tShift[startLine] = pos - posAfterColon;\n state.sCount[startLine] = offset - initial;\n\n state.bMarks[startLine] = posAfterColon;\n state.blkIndent += 4;\n state.parentType = 'footnote';\n\n if (state.sCount[startLine] < state.blkIndent) {\n state.sCount[startLine] += state.blkIndent;\n }\n\n state.md.block.tokenize(state, startLine, endLine, true);\n\n state.parentType = oldParentType;\n state.blkIndent -= 4;\n state.tShift[startLine] = oldTShift;\n state.sCount[startLine] = oldSCount;\n state.bMarks[startLine] = oldBMark;\n\n token = new state.Token('footnote_reference_close', '', -1);\n token.level = --state.level;\n state.tokens.push(token);\n\n return true;\n }\n\n // Process inline footnotes (^[...])\n function footnote_inline(state, silent) {\n var labelStart,\n labelEnd,\n footnoteId,\n token,\n tokens,\n max = state.posMax,\n start = state.pos;\n\n if (start + 2 >= max) { return false; }\n if (state.src.charCodeAt(start) !== 0x5E/* ^ */) { return false; }\n if (state.src.charCodeAt(start + 1) !== 0x5B/* [ */) { return false; }\n\n labelStart = start + 2;\n labelEnd = parseLinkLabel(state, start + 1);\n\n // parser failed to find ']', so it's not a valid note\n if (labelEnd < 0) { return false; }\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 if (!state.env.footnotes) { state.env.footnotes = {}; }\n if (!state.env.footnotes.list) { state.env.footnotes.list = []; }\n footnoteId = state.env.footnotes.list.length;\n\n state.md.inline.parse(\n state.src.slice(labelStart, labelEnd),\n state.md,\n state.env,\n tokens = []\n );\n\n token = state.push('footnote_ref', '', 0);\n token.meta = { id: footnoteId };\n\n state.env.footnotes.list[footnoteId] = { tokens: tokens };\n }\n\n state.pos = labelEnd + 1;\n state.posMax = max;\n return true;\n }\n\n // Process footnote references ([^...])\n function footnote_ref(state, silent) {\n var label,\n pos,\n footnoteId,\n footnoteSubId,\n token,\n max = state.posMax,\n start = state.pos;\n\n // should be at least 4 chars - \"[^x]\"\n if (start + 3 > max) { return false; }\n\n if (!state.env.footnotes || !state.env.footnotes.refs) { return false; }\n if (state.src.charCodeAt(start) !== 0x5B/* [ */) { return false; }\n if (state.src.charCodeAt(start + 1) !== 0x5E/* ^ */) { return false; }\n\n for (pos = start + 2; pos < max; pos++) {\n if (state.src.charCodeAt(pos) === 0x20) { return false; }\n if (state.src.charCodeAt(pos) === 0x0A) { return false; }\n if (state.src.charCodeAt(pos) === 0x5D /* ] */) {\n break;\n }\n }\n\n if (pos === start + 2) { return false; } // no empty footnote labels\n if (pos >= max) { return false; }\n pos++;\n\n label = state.src.slice(start + 2, pos - 1);\n if (typeof state.env.footnotes.refs[':' + label] === 'undefined') { return false; }\n\n if (!silent) {\n if (!state.env.footnotes.list) { state.env.footnotes.list = []; }\n\n if (state.env.footnotes.refs[':' + label] < 0) {\n footnoteId = state.env.footnotes.list.length;\n state.env.footnotes.list[footnoteId] = { label: label, count: 0 };\n state.env.footnotes.refs[':' + label] = footnoteId;\n } else {\n footnoteId = state.env.footnotes.refs[':' + label];\n }\n\n footnoteSubId = state.env.footnotes.list[footnoteId].count;\n state.env.footnotes.list[footnoteId].count++;\n\n token = state.push('footnote_ref', '', 0);\n token.meta = { id: footnoteId, subId: footnoteSubId };\n }\n\n state.pos = pos;\n state.posMax = max;\n return true;\n }\n\n // Glue footnote tokens to end of token stream\n function footnote_tail(state) {\n var i, l, j, t, lastParagraph, list, token, tokens, current, currentLabel,\n insideRef = false,\n refTokens = {};\n\n if (!state.env.footnotes) { return; }\n\n state.tokens = state.tokens.filter(function(tok) {\n if (tok.type === 'footnote_reference_open') {\n insideRef = true;\n current = [];\n currentLabel = tok.meta.label;\n return false;\n }\n if (tok.type === 'footnote_reference_close') {\n insideRef = false;\n // prepend ':' to avoid conflict with Object.prototype members\n refTokens[':' + currentLabel] = current;\n return false;\n }\n if (insideRef) { current.push(tok); }\n return !insideRef;\n });\n\n if (!state.env.footnotes.list) { return; }\n list = state.env.footnotes.list;\n\n token = new state.Token('footnote_block_open', '', 1);\n state.tokens.push(token);\n\n for (i = 0, l = list.length; i < l; i++) {\n token = new state.Token('footnote_open', '', 1);\n token.meta = { id: i };\n state.tokens.push(token);\n\n if (list[i].tokens) {\n tokens = [];\n\n token = new state.Token('paragraph_open', 'p', 1);\n token.block = true;\n tokens.push(token);\n\n token = new state.Token('inline', '', 0);\n token.children = list[i].tokens;\n token.content = '';\n tokens.push(token);\n\n token = new state.Token('paragraph_close', 'p', -1);\n token.block = true;\n tokens.push(token);\n\n } else if (list[i].label) {\n tokens = refTokens[':' + list[i].label];\n }\n\n state.tokens = state.tokens.concat(tokens);\n if (state.tokens[state.tokens.length - 1].type === 'paragraph_close') {\n lastParagraph = state.tokens.pop();\n } else {\n lastParagraph = null;\n }\n\n t = list[i].count > 0 ? list[i].count : 1;\n for (j = 0; j < t; j++) {\n token = new state.Token('footnote_anchor', '', 0);\n token.meta = { id: i, subId: j };\n state.tokens.push(token);\n }\n\n if (lastParagraph) {\n state.tokens.push(lastParagraph);\n }\n\n token = new state.Token('footnote_close', '', -1);\n state.tokens.push(token);\n }\n\n token = new state.Token('footnote_block_close', '', -1);\n state.tokens.push(token);\n }\n\n md.block.ruler.before('reference', 'footnote_def', footnote_def, { alt: [ 'paragraph', 'reference' ] });\n md.inline.ruler.after('image', 'footnote_inline', footnote_inline);\n md.inline.ruler.after('footnote_inline', 'footnote_ref', footnote_ref);\n md.core.ruler.after('inline', 'footnote_tail', footnote_tail);\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 nextLine, lastLineEmpty, oldTShift, oldSCount, oldBMarks, oldIndent, oldParentType, lines, initial, offset, ch,\n terminatorRules, token,\n i, l, terminate,\n pos = state.bMarks[startLine] + state.tShift[startLine],\n max = state.eMarks[startLine];\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 // skip one optional space (but not tab, check cmark impl) after '>'\n if (state.src.charCodeAt(pos) === 0x20) { pos++; }\n\n oldIndent = state.blkIndent;\n state.blkIndent = 0;\n\n // skip spaces after \">\" and re-calculate offset\n initial = offset = state.sCount[startLine] + pos - (state.bMarks[startLine] + state.tShift[startLine]);\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 % 4;\n } else {\n offset++;\n }\n } else {\n break;\n }\n\n pos++;\n }\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 // 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 if (state.sCount[nextLine] < oldIndent) { break; }\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/* > */) {\n // This line is inside the blockquote.\n\n // skip one optional space (but not tab, check cmark impl) after '>'\n if (state.src.charCodeAt(pos) === 0x20) { pos++; }\n\n // skip spaces after \">\" and re-calculate offset\n initial = offset = state.sCount[nextLine] + pos - (state.bMarks[nextLine] + state.tShift[nextLine]);\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 % 4;\n } else {\n offset++;\n }\n } else {\n break;\n }\n\n pos++;\n }\n\n lastLineEmpty = pos >= max;\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 if (terminate) { break; }\n\n oldBMarks.push(state.bMarks[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 oldParentType = state.parentType;\n state.parentType = 'blockquote';\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.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 }\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 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","// Process definition lists\n//\n'use strict';\n\n\nmodule.exports = function deflist_plugin(md) {\n var isSpace = md.utils.isSpace;\n\n // Search `[:~][\\n ]`, returns next pos after marker on success\n // or -1 on fail.\n function skipMarker(state, line) {\n var pos, marker,\n start = state.bMarks[line] + state.tShift[line],\n max = state.eMarks[line];\n\n if (start >= max) { return -1; }\n\n // Check bullet\n marker = state.src.charCodeAt(start++);\n if (marker !== 0x7E/* ~ */ && marker !== 0x3A/* : */) { return -1; }\n\n pos = state.skipSpaces(start);\n\n // require space after \":\"\n if (start === pos) { return -1; }\n\n // no empty definitions, e.g. \" : \"\n if (pos >= max) { return -1; }\n\n return start;\n }\n\n function 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 function deflist(state, startLine, endLine, silent) {\n var ch,\n contentStart,\n ddLine,\n dtLine,\n itemLines,\n listLines,\n listTokIdx,\n max,\n nextLine,\n offset,\n oldDDIndent,\n oldIndent,\n oldParentType,\n oldSCount,\n oldTShift,\n oldTight,\n pos,\n prevEmptyEnd,\n tight,\n token;\n\n if (silent) {\n // quirk: validation mode validates a dd block only, not a whole deflist\n if (state.ddIndent < 0) { return false; }\n return skipMarker(state, startLine) >= 0;\n }\n\n nextLine = startLine + 1;\n if (nextLine >= endLine) { return false; }\n\n if (state.isEmpty(nextLine)) {\n nextLine++;\n if (nextLine >= endLine) { return false; }\n }\n\n if (state.sCount[nextLine] < state.blkIndent) { return false; }\n contentStart = skipMarker(state, nextLine);\n if (contentStart < 0) { return false; }\n\n // Start list\n listTokIdx = state.tokens.length;\n tight = true;\n\n token = state.push('dl_open', 'dl', 1);\n token.map = listLines = [ startLine, 0 ];\n\n //\n // Iterate list items\n //\n\n dtLine = startLine;\n ddLine = nextLine;\n\n // One definition list can contain multiple DTs,\n // and one DT can be followed by multiple DDs.\n //\n // Thus, there is two loops here, and label is\n // needed to break out of the second one\n //\n /*eslint no-labels:0,block-scoped-var:0*/\n OUTER:\n for (;;) {\n prevEmptyEnd = false;\n\n token = state.push('dt_open', 'dt', 1);\n token.map = [ dtLine, dtLine ];\n\n token = state.push('inline', '', 0);\n token.map = [ dtLine, dtLine ];\n token.content = state.getLines(dtLine, dtLine + 1, state.blkIndent, false).trim();\n token.children = [];\n\n token = state.push('dt_close', 'dt', -1);\n\n for (;;) {\n token = state.push('dd_open', 'dd', 1);\n token.map = itemLines = [ nextLine, 0 ];\n\n pos = contentStart;\n max = state.eMarks[ddLine];\n offset = state.sCount[ddLine] + contentStart - (state.bMarks[ddLine] + state.tShift[ddLine]);\n\n while (pos < max) {\n ch = state.src.charCodeAt(pos);\n\n if (isSpace(ch)) {\n if (ch === 0x09) {\n offset += 4 - offset % 4;\n } else {\n offset++;\n }\n } else {\n break;\n }\n\n pos++;\n }\n\n contentStart = pos;\n\n oldTight = state.tight;\n oldDDIndent = state.ddIndent;\n oldIndent = state.blkIndent;\n oldTShift = state.tShift[ddLine];\n oldSCount = state.sCount[ddLine];\n oldParentType = state.parentType;\n state.blkIndent = state.ddIndent = state.sCount[ddLine] + 2;\n state.tShift[ddLine] = contentStart - state.bMarks[ddLine];\n state.sCount[ddLine] = offset;\n state.tight = true;\n state.parentType = 'deflist';\n\n state.md.block.tokenize(state, ddLine, endLine, true);\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 - ddLine) > 1 && state.isEmpty(state.line - 1);\n\n state.tShift[ddLine] = oldTShift;\n state.sCount[ddLine] = oldSCount;\n state.tight = oldTight;\n state.parentType = oldParentType;\n state.blkIndent = oldIndent;\n state.ddIndent = oldDDIndent;\n\n token = state.push('dd_close', 'dd', -1);\n\n itemLines[1] = nextLine = state.line;\n\n if (nextLine >= endLine) { break OUTER; }\n\n if (state.sCount[nextLine] < state.blkIndent) { break OUTER; }\n contentStart = skipMarker(state, nextLine);\n if (contentStart < 0) { break; }\n\n ddLine = nextLine;\n\n // go to the next loop iteration:\n // insert DD tag and repeat checking\n }\n\n if (nextLine >= endLine) { break; }\n dtLine = nextLine;\n\n if (state.isEmpty(dtLine)) { break; }\n if (state.sCount[dtLine] < state.blkIndent) { break; }\n\n ddLine = dtLine + 1;\n if (ddLine >= endLine) { break; }\n if (state.isEmpty(ddLine)) { ddLine++; }\n if (ddLine >= endLine) { break; }\n\n if (state.sCount[ddLine] < state.blkIndent) { break; }\n contentStart = skipMarker(state, ddLine);\n if (contentStart < 0) { break; }\n\n // go to the next loop iteration:\n // insert DT and DD tags and repeat checking\n }\n\n // Finilize list\n token = state.push('dl_close', 'dl', -1);\n\n listLines[1] = nextLine;\n\n state.line = nextLine;\n\n // mark paragraphs tight if needed\n if (tight) {\n markTightParagraphs(state, listTokIdx);\n }\n\n return true;\n }\n\n\n md.block.ruler.before('paragraph', 'deflist', deflist, { alt: [ 'paragraph', 'reference', 'blockquote' ] });\n};\n"],"sourceRoot":""}