{"version":3,"sources":["webpack:///./webpack/new/node_modules/markdown-it/index.js","webpack:///./webpack/new/node_modules/markdown-it/lib/index.js","webpack:///./webpack/new/node_modules/mdurl/encode.js","webpack:///./webpack/new/node_modules/mdurl/decode.js","webpack:///./webpack/new/node_modules/mdurl/format.js","webpack:///./webpack/new/node_modules/mdurl/parse.js","webpack:///./webpack/new/node_modules/uc.micro/properties/Any/regex.js","webpack:///./webpack/new/node_modules/uc.micro/categories/Cc/regex.js","webpack:///./webpack/new/node_modules/uc.micro/categories/Cf/regex.js","webpack:///./webpack/new/node_modules/uc.micro/categories/Z/regex.js","webpack:///./webpack/new/node_modules/markdown-it/lib/helpers/index.js","webpack:///./webpack/new/node_modules/markdown-it/lib/helpers/parse_link_label.js","webpack:///./webpack/new/node_modules/markdown-it/lib/helpers/parse_link_destination.js","webpack:///./webpack/new/node_modules/markdown-it/lib/helpers/parse_link_title.js","webpack:///./webpack/new/node_modules/markdown-it/lib/renderer.js","webpack:///./webpack/new/node_modules/markdown-it/lib/parser_core.js","webpack:///./webpack/new/node_modules/markdown-it/lib/rules_core/normalize.js","webpack:///./webpack/new/node_modules/markdown-it/lib/rules_core/block.js","webpack:///./webpack/new/node_modules/markdown-it/lib/rules_core/inline.js","webpack:///./webpack/new/node_modules/markdown-it/lib/rules_core/linkify.js","webpack:///./webpack/new/node_modules/markdown-it/lib/rules_core/replacements.js","webpack:///./webpack/new/node_modules/markdown-it/lib/rules_core/smartquotes.js","webpack:///./webpack/new/node_modules/markdown-it/lib/rules_core/state_core.js","webpack:///./webpack/new/node_modules/markdown-it/lib/parser_block.js","webpack:///./webpack/new/node_modules/markdown-it/lib/rules_block/table.js","webpack:///./webpack/new/node_modules/markdown-it/lib/rules_block/code.js","webpack:///./webpack/new/node_modules/markdown-it/lib/rules_block/fence.js","webpack:///./webpack/new/node_modules/markdown-it/lib/rules_block/blockquote.js","webpack:///./webpack/new/node_modules/markdown-it/lib/rules_block/hr.js","webpack:///./webpack/new/node_modules/markdown-it/lib/rules_block/list.js","webpack:///./webpack/new/node_modules/markdown-it/lib/rules_block/reference.js","webpack:///./webpack/new/node_modules/markdown-it/lib/rules_block/html_block.js","webpack:///./webpack/new/node_modules/markdown-it/lib/common/html_blocks.js","webpack:///./webpack/new/node_modules/markdown-it/lib/rules_block/heading.js","webpack:///./webpack/new/node_modules/markdown-it/lib/rules_block/lheading.js","webpack:///./webpack/new/node_modules/markdown-it/lib/rules_block/paragraph.js","webpack:///./webpack/new/node_modules/markdown-it/lib/rules_block/state_block.js","webpack:///./webpack/new/node_modules/markdown-it/lib/parser_inline.js","webpack:///./webpack/new/node_modules/markdown-it/lib/rules_inline/text.js","webpack:///./webpack/new/node_modules/markdown-it/lib/rules_inline/newline.js","webpack:///./webpack/new/node_modules/markdown-it/lib/rules_inline/escape.js","webpack:///./webpack/new/node_modules/markdown-it/lib/rules_inline/backticks.js","webpack:///./webpack/new/node_modules/markdown-it/lib/rules_inline/link.js","webpack:///./webpack/new/node_modules/markdown-it/lib/rules_inline/image.js","webpack:///./webpack/new/node_modules/markdown-it/lib/rules_inline/autolink.js","webpack:///./webpack/new/node_modules/markdown-it/lib/rules_inline/html_inline.js","webpack:///./webpack/new/node_modules/markdown-it/lib/rules_inline/entity.js","webpack:///./webpack/new/node_modules/markdown-it/lib/rules_inline/balance_pairs.js","webpack:///./webpack/new/node_modules/markdown-it/lib/rules_inline/text_collapse.js","webpack:///./webpack/new/node_modules/markdown-it/lib/rules_inline/state_inline.js","webpack:///./webpack/new/node_modules/linkify-it/build/index.cjs.js","webpack:///./webpack/new/node_modules/punycode/punycode.js","webpack:///./webpack/new/node_modules/markdown-it/lib/presets/default.js","webpack:///./webpack/new/node_modules/markdown-it/lib/presets/zero.js","webpack:///./webpack/new/node_modules/markdown-it/lib/presets/commonmark.js","webpack:///./webpack/new/node_modules/markdown-it-ins/index.js","webpack:///./js/Core/StringCustomizationHelper.js","webpack:///./webpack/new/node_modules/markdown-it/lib/common/utils.js","webpack:///./webpack/new/node_modules/markdown-it/lib/ruler.js","webpack:///./webpack/new/node_modules/markdown-it/lib/token.js","webpack:///./webpack/new/node_modules/markdown-it/lib/common/entities.js","webpack:///./webpack/new/node_modules/uc.micro/categories/P/regex.js","webpack:///./webpack/new/node_modules/mdurl/index.js","webpack:///./webpack/new/node_modules/uc.micro/index.js","webpack:///./webpack/new/node_modules/markdown-it/lib/common/html_re.js","webpack:///./webpack/new/node_modules/markdown-it/lib/rules_inline/strikethrough.js","webpack:///./webpack/new/node_modules/markdown-it/lib/rules_inline/emphasis.js"],"names":["module","exports","utils","helpers","Renderer","ParserCore","ParserBlock","ParserInline","LinkifyIt","mdurl","punycode","config","default","zero","commonmark","BAD_PROTO_RE","GOOD_DATA_RE","validateLink","url","str","trim","toLowerCase","test","RECODE_HOSTNAME_FOR","normalizeLink","parsed","parse","hostname","protocol","indexOf","toASCII","er","encode","format","normalizeLinkText","toUnicode","decode","defaultChars","MarkdownIt","presetName","options","this","isString","inline","block","core","renderer","linkify","assign","configure","set","prototype","presets","self","Error","components","Object","keys","forEach","name","rules","ruler","enableOnly","rules2","ruler2","enable","list","ignoreInvalid","result","Array","isArray","chain","concat","missed","filter","length","disable","use","plugin","args","slice","call","arguments","apply","src","env","state","State","process","tokens","render","parseInline","inlineMode","renderInline","encodeCache","string","exclude","keepEscaped","i","l","code","nextCode","cache","ch","String","fromCharCode","push","toString","toUpperCase","charCodeAt","getEncodeCache","encodeURIComponent","componentChars","decodeCache","getDecodeCache","replace","seq","b1","b2","b3","b4","chr","parseInt","slashes","auth","port","pathname","search","hash","Url","protocolPattern","portPattern","simplePathPattern","unwise","autoEscape","nonHostChars","hostEndingChars","hostnamePartPattern","hostnamePartStart","hostlessProtocol","slashedProtocol","slashesDenoteHost","lowerProto","hec","rest","split","simplePath","exec","proto","substr","match","atSign","hostEnd","lastIndexOf","host","parseHost","ipv6Hostname","hostparts","part","newpart","j","k","validParts","notHost","bit","unshift","join","qm","u","parseLinkLabel","parseLinkDestination","parseLinkTitle","start","disableNested","level","found","marker","prevPos","labelEnd","max","posMax","oldPos","pos","md","skipToken","unescapeAll","ok","lines","escapeHtml","default_rules","code_inline","idx","slf","token","renderAttrs","content","code_block","fence","highlighted","arr","tmpAttrs","tmpToken","info","langName","langAttrs","highlight","attrIndex","attrs","langPrefix","image","renderInlineAsText","children","renderToken","hardbreak","xhtmlOut","softbreak","breaks","text","html_block","html_inline","nextToken","needLf","hidden","nesting","tag","type","len","Ruler","_rules","Core","getRules","NEWLINES_RE","NULL_RE","Token","map","tok","arrayReplaceAt","isLinkClose","currentToken","nodes","ln","lastPos","htmlLinkLevel","fullUrl","urlText","links","blockTokens","pretest","schema","index","markup","lastIndex","RARE_RE","SCOPED_ABBR_TEST_RE","SCOPED_ABBR_RE","SCOPED_ABBR","c","r","p","tm","replaceFn","replace_scoped","inlineTokens","inside_autolink","replace_rare","blkIdx","typographer","isWhiteSpace","isPunctChar","isMdAsciiPunct","QUOTE_TEST_RE","QUOTE_RE","replaceAt","process_inlines","t","thisLevel","item","lastChar","nextChar","isLastPunctChar","isNextPunctChar","isLastWhiteSpace","isNextWhiteSpace","canOpen","canClose","isSingle","stack","openQuote","closeQuote","OUTER","single","quotes","StateCore","alt","tokenize","startLine","endLine","line","hasEmptyLines","maxNesting","skipEmptyLines","sCount","blkIndent","tight","isEmpty","outTokens","lineMax","isSpace","getLine","bMarks","tShift","eMarks","escapedSplit","isEscaped","current","substring","silent","lineText","nextLine","columns","columnCount","aligns","tableLines","tbodyLines","oldParentType","terminate","terminatorRules","firstCh","secondCh","shift","pop","parentType","last","getLines","params","mem","haveEndMarker","skipChars","skipSpaces","adjustTab","initial","lastLineEmpty","offset","oldBMarks","oldBSCount","oldIndent","oldSCount","oldTShift","spaceAfterMarker","isOutdented","oldLineMax","bsCount","cnt","skipBulletListMarker","skipOrderedListMarker","contentStart","indent","indentAfterMarker","isOrdered","itemLines","listLines","listTokIdx","markerCharCode","markerValue","oldListIndent","oldTight","posAfterMarker","prevEmptyEnd","isTerminatingParagraph","listIndent","Number","Math","min","markTightParagraphs","normalizeReference","_endLine","destEndPos","destEndLineNo","href","label","res","title","references","block_names","HTML_OPEN_CLOSE_TAG_RE","HTML_SEQUENCES","RegExp","source","html","tmp","skipSpacesBack","skipCharsBack","StateBlock","s","indent_found","ddIndent","from","begin","end","keepLastLF","lineIndent","first","queue","lineStart","_rules2","postProcess","pending","pushPending","isTerminatorChar","pmax","ESCAPED","matchStart","matchEnd","openerLength","closerLength","backticksScanned","backticks","labelStart","ref","parseReference","EMAIL_RE","AUTOLINK_RE","HTML_TAG_RE","lc","isLetter","entities","has","isValidEntityCode","fromCodePoint","DIGITAL_RE","NAMED_RE","processDelimiters","delimiters","closerIdx","openerIdx","closer","opener","minOpenerIdx","newMinOpenerIdx","isOddMatch","lastJump","openersBottom","close","hasOwnProperty","open","jump","curr","tokens_meta","StateInline","pendingLevel","_prev_delimiters","token_meta","scanDelims","canSplitWord","count","can_open","can_close","left_flanking","right_flanking","uc_micro","require","obj","sources","key","_class","isFunction","escapeRE","defaultOptions","fuzzyLink","fuzzyEmail","fuzzyIP","defaultSchemas","validate","tail","re","http","src_auth","src_host_port_strict","src_path","no_http","src_domain","src_domain_root","src_port","src_host_terminator","mailto","src_email_name","src_host_strict","tlds_default","compile","opts","src_Any","Any","src_Cc","Cc","src_Z","Z","src_P","P","src_ZPCc","src_ZCc","src_pseudo_letter","src_ip4","src_xn","src_host","tpl_host_fuzzy","tpl_host_no_ip_fuzzy","tpl_host_fuzzy_strict","tpl_host_port_fuzzy_strict","tpl_host_port_no_ip_fuzzy_strict","tpl_host_fuzzy_test","tpl_email_fuzzy","tpl_link_fuzzy","tpl_link_no_ip_fuzzy","reFactory","__opts__","tlds","__tlds__","untpl","tpl","src_tlds","onCompile","__tlds_replaced__","email_fuzzy","email_fuzzy_global","link_fuzzy","link_fuzzy_global","link_no_ip_fuzzy","link_no_ip_fuzzy_global","host_fuzzy_test","aliases","schemaError","val","__compiled__","__schemas__","compiled","link","isRegExp","createValidator","normalize","alias","slist","schema_test","schema_search","schema_at_start","Match","raw","schemas","reduce","acc","add","definition","m","testSchemaAt","type_schemed","type_fuzzy_link","type_fuzzy_email","choose","a","b","indexes","candidates","candidate","matchAtStart","keepOld","sort","el","reverse","root","nodeType","freeGlobal","global","window","maxInt","regexPunycode","regexNonASCII","regexSeparators","errors","floor","stringFromCharCode","error","RangeError","array","fn","mapDomain","parts","ucs2decode","value","extra","output","counter","ucs2encode","digitToBasic","digit","flag","adapt","delta","numPoints","firstTime","baseMinusTMin","base","input","out","basic","oldi","w","baseMinusT","codePoint","inputLength","n","bias","splice","handledCPCount","basicLength","q","currentValue","handledCPCountPlusOne","qMinusT","startDelim","endDelim","loneMarkers","before","scanned","Constants","MarkdownToHtmlConverter","EstsError","StringCustomizationHelper","resolveConditionalAccessPageErrorName","errorCode","ApplicationUsedIsNotAnApprovedAppRequiredByConditionalAccess","BlockedByConditionalAccess","BlockedByConditionalAccessForRemoteDeviceFlow","BrokerAppNotInstalled","BrokerAppNotInstalledDeviceAuthenticationFailed","DeviceIsNotWorkplaceJoined","DeviceIsNotWorkplaceJoinedForMamApp","DeviceNotCompliant","DeviceNotCompliantBrowserNotSupported","DeviceNotCompliantDeviceCompliantRequired","DeviceNotCompliantDeviceManagementRequired","DeviceNotDomainJoined","DeviceNotDomainJoinedBrowserNotSupported","ProofUpBlockedDueToRisk","ProofUpBlockedDueToUserRisk","RemediateCompliantApp","RemediateDeviceStateManagedBrowserRequired","RemediateDeviceStateWorkplaceJoinRequired","resolveProofUpRedirectPageErrorName","AuthenticatorAppRegistrationRequiredInterrupt","AuthenticatorAppRegistrationEnforcementInterrupt","UserStrongAuthEnrollmentRequiredInterrupt","UserStrongAuthClientAuthNRequiredInterrupt","AdminConsentRequired","AdminConsentRequiredRequestAccess","resolveErrorPageErrorName","RequiredDeviceStateNotSupported","parseMarkdownString","stringToConvert","customStringResolver","stringsArray","stringId","getAttributeCollectionString","attributeId","getAttributeCollectionOptionString","optionId","parseAttributeCollectionOptionString","customString","parseCustomHeader","errorName","parseCustomBody","customBody","_hasOwnProperty","object","surrogate1","surrogate2","UNESCAPE_MD_RE","UNESCAPE_ALL_RE","DIGITAL_ENTITY_TEST_RE","HTML_ESCAPE_TEST_RE","HTML_ESCAPE_REPLACE_RE","HTML_REPLACEMENTS","replaceUnsafeChar","REGEXP_ESCAPE_RE","UNICODE_PUNCT_RE","lib","ucmicro","TypeError","unescapeMd","escaped","entity","replaceEntityPattern","newElements","__rules__","__cache__","__find__","__compile__","chains","rule","enabled","altName","at","opt","beforeName","ruleName","after","afterName","chainName","meta","attrPush","attrData","attrSet","attrGet","attrJoin","Cf","open_tag","close_tag","isStrong"],"mappings":"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","file":"content/js/asyncchunk/convergederror_stringcustomizationhelper_c9ebcc9c16fd3c820c05.js","sourcesContent":["'use strict';\n\n\nmodule.exports = require('./lib/');\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 // add '%' to exclude list because of https://github.com/markdown-it/markdown-it/issues/720\n return mdurl.decode(mdurl.format(parsed), mdurl.decode.defaultChars + '%');\n}\n\n\n/**\n * class MarkdownIt\n *\n * Main parser/renderer class.\n *\n * ##### Usage\n *\n * ```javascript\n * // node.js, \"classic\" way:\n * var MarkdownIt = require('markdown-it'),\n * md = new MarkdownIt();\n * var result = md.render('# markdown-it rulezz!');\n *\n * // node.js, the same, but with sugar:\n * var md = require('markdown-it')();\n * var result = md.render('# markdown-it rulezz!');\n *\n * // browser without AMD, added to \"window\" on script load\n * // Note, there are no dash.\n * var md = window.markdownit();\n * var result = md.render('# markdown-it rulezz!');\n * ```\n *\n * Single line rendering, without paragraph wrap:\n *\n * ```javascript\n * var md = require('markdown-it')();\n * var result = md.renderInline('__markdown-it__ rulezz!');\n * ```\n **/\n\n/**\n * new MarkdownIt([presetName, options])\n * - presetName (String): optional, `commonmark` / `zero`\n * - options (Object)\n *\n * Creates parser instanse with given config. Can be called without `new`.\n *\n * ##### presetName\n *\n * MarkdownIt provides named presets as a convenience to quickly\n * enable/disable active syntax rules and options for common use cases.\n *\n * - [\"commonmark\"](https://github.com/markdown-it/markdown-it/blob/master/lib/presets/commonmark.js) -\n * configures parser to strict [CommonMark](http://commonmark.org/) mode.\n * - [default](https://github.com/markdown-it/markdown-it/blob/master/lib/presets/default.js) -\n * similar to GFM, used when no preset name given. Enables all available rules,\n * but still without html, typographer & autolinker.\n * - [\"zero\"](https://github.com/markdown-it/markdown-it/blob/master/lib/presets/zero.js) -\n * all rules disabled. Useful to quickly setup your config via `.enable()`.\n * For example, when you need only `bold` and `italic` markup and nothing else.\n *\n * ##### options:\n *\n * - __html__ - `false`. Set `true` to enable HTML tags in source. Be careful!\n * That's not safe! You may need external sanitizer to protect output from XSS.\n * It's better to extend features via plugins, instead of enabling HTML.\n * - __xhtmlOut__ - `false`. Set `true` to add '/' when closing single tags\n * (`
`). This is needed only for full CommonMark compatibility. In real\n * world you will need HTML output.\n * - __breaks__ - `false`. Set `true` to convert `\\n` in paragraphs into `
`.\n * - __langPrefix__ - `language-`. CSS language class prefix for fenced blocks.\n * Can be useful for external highlighters.\n * - __linkify__ - `false`. Set `true` to autoconvert URL-like text to links.\n * - __typographer__ - `false`. Set `true` to enable [some language-neutral\n * replacement](https://github.com/markdown-it/markdown-it/blob/master/lib/rules_core/replacements.js) +\n * quotes beautification (smartquotes).\n * - __quotes__ - `“”‘’`, String or Array. Double + single quotes replacement\n * pairs, when typographer enabled and smartquotes on. For example, you can\n * use `'«»„“'` for Russian, `'„“‚‘'` for German, and\n * `['«\\xA0', '\\xA0»', '‹\\xA0', '\\xA0›']` for French (including nbsp).\n * - __highlight__ - `null`. Highlighter function for fenced code blocks.\n * Highlighter `function (str, lang)` should return escaped HTML. It can also\n * return empty string if the source was not changed and should be escaped\n * externaly. If result starts with `):\n *\n * ```javascript\n * var hljs = require('highlight.js') // https://highlightjs.org/\n *\n * // Actual default values\n * var md = require('markdown-it')({\n * highlight: function (str, lang) {\n * if (lang && hljs.getLanguage(lang)) {\n * try {\n * return '
' +\n *                hljs.highlight(str, { language: lang, ignoreIllegals: true }).value +\n *                '
';\n * } catch (__) {}\n * }\n *\n * return '
' + md.utils.escapeHtml(str) + '
';\n * }\n * });\n * ```\n *\n **/\nfunction MarkdownIt(presetName, options) {\n if (!(this instanceof MarkdownIt)) {\n return new MarkdownIt(presetName, options);\n }\n\n if (!options) {\n if (!utils.isString(presetName)) {\n options = presetName || {};\n presetName = 'default';\n }\n }\n\n /**\n * MarkdownIt#inline -> ParserInline\n *\n * Instance of [[ParserInline]]. You may need it to add new rules when\n * writing plugins. For simple rules control use [[MarkdownIt.disable]] and\n * [[MarkdownIt.enable]].\n **/\n this.inline = new ParserInline();\n\n /**\n * MarkdownIt#block -> ParserBlock\n *\n * Instance of [[ParserBlock]]. You may need it to add new rules when\n * writing plugins. For simple rules control use [[MarkdownIt.disable]] and\n * [[MarkdownIt.enable]].\n **/\n this.block = new ParserBlock();\n\n /**\n * MarkdownIt#core -> Core\n *\n * Instance of [[Core]] chain executor. You may need it to add new rules when\n * writing plugins. For simple rules control use [[MarkdownIt.disable]] and\n * [[MarkdownIt.enable]].\n **/\n this.core = new ParserCore();\n\n /**\n * MarkdownIt#renderer -> Renderer\n *\n * Instance of [[Renderer]]. Use it to modify output look. Or to add rendering\n * rules for new token types, generated by plugins.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')();\n *\n * function myToken(tokens, idx, options, env, self) {\n * //...\n * return result;\n * };\n *\n * md.renderer.rules['my_token'] = myToken\n * ```\n *\n * See [[Renderer]] docs and [source code](https://github.com/markdown-it/markdown-it/blob/master/lib/renderer.js).\n **/\n this.renderer = new Renderer();\n\n /**\n * MarkdownIt#linkify -> LinkifyIt\n *\n * [linkify-it](https://github.com/markdown-it/linkify-it) instance.\n * Used by [linkify](https://github.com/markdown-it/markdown-it/blob/master/lib/rules_core/linkify.js)\n * rule.\n **/\n this.linkify = new LinkifyIt();\n\n /**\n * MarkdownIt#validateLink(url) -> Boolean\n *\n * Link validation function. CommonMark allows too much in links. By default\n * we disable `javascript:`, `vbscript:`, `file:` schemas, and almost all `data:...` schemas\n * except some embedded image types.\n *\n * You can change this behaviour:\n *\n * ```javascript\n * var md = require('markdown-it')();\n * // enable everything\n * md.validateLink = function () { return true; }\n * ```\n **/\n this.validateLink = validateLink;\n\n /**\n * MarkdownIt#normalizeLink(url) -> String\n *\n * Function used to encode link url to a machine-readable format,\n * which includes url-encoding, punycode, etc.\n **/\n this.normalizeLink = normalizeLink;\n\n /**\n * MarkdownIt#normalizeLinkText(url) -> String\n *\n * Function used to decode link url to a human-readable format`\n **/\n this.normalizeLinkText = normalizeLinkText;\n\n\n // Expose utils & helpers for easy acces from plugins\n\n /**\n * MarkdownIt#utils -> utils\n *\n * Assorted utility functions, useful to write plugins. See details\n * [here](https://github.com/markdown-it/markdown-it/blob/master/lib/common/utils.js).\n **/\n this.utils = utils;\n\n /**\n * MarkdownIt#helpers -> helpers\n *\n * Link components parser functions, useful to write plugins. See details\n * [here](https://github.com/markdown-it/markdown-it/blob/master/lib/helpers).\n **/\n this.helpers = utils.assign({}, helpers);\n\n\n this.options = {};\n this.configure(presetName);\n\n if (options) { this.set(options); }\n}\n\n\n/** chainable\n * MarkdownIt.set(options)\n *\n * Set parser options (in the same format as in constructor). Probably, you\n * will never need it, but you can change options after constructor call.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')()\n * .set({ html: true, breaks: true })\n * .set({ typographer, true });\n * ```\n *\n * __Note:__ To achieve the best possible performance, don't modify a\n * `markdown-it` instance options on the fly. If you need multiple configurations\n * it's best to create multiple instances and initialize each with separate\n * config.\n **/\nMarkdownIt.prototype.set = function (options) {\n utils.assign(this.options, options);\n return this;\n};\n\n\n/** chainable, internal\n * MarkdownIt.configure(presets)\n *\n * Batch load of all options and compenent settings. This is internal method,\n * and you probably will not need it. But if you will - see available presets\n * and data structure [here](https://github.com/markdown-it/markdown-it/tree/master/lib/presets)\n *\n * We strongly recommend to use presets instead of direct config loads. That\n * will give better compatibility with next versions.\n **/\nMarkdownIt.prototype.configure = function (presets) {\n var self = this, presetName;\n\n if (utils.isString(presets)) {\n presetName = presets;\n presets = config[presetName];\n if (!presets) { throw new Error('Wrong `markdown-it` preset \"' + presetName + '\", check name'); }\n }\n\n if (!presets) { throw new Error('Wrong `markdown-it` preset, can\\'t be empty'); }\n\n if (presets.options) { self.set(presets.options); }\n\n if (presets.components) {\n Object.keys(presets.components).forEach(function (name) {\n if (presets.components[name].rules) {\n self[name].ruler.enableOnly(presets.components[name].rules);\n }\n if (presets.components[name].rules2) {\n self[name].ruler2.enableOnly(presets.components[name].rules2);\n }\n });\n }\n return this;\n};\n\n\n/** chainable\n * MarkdownIt.enable(list, ignoreInvalid)\n * - list (String|Array): rule name or list of rule names to enable\n * - ignoreInvalid (Boolean): set `true` to ignore errors when rule not found.\n *\n * Enable list or rules. It will automatically find appropriate components,\n * containing rules with given names. If rule not found, and `ignoreInvalid`\n * not set - throws exception.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')()\n * .enable(['sub', 'sup'])\n * .disable('smartquotes');\n * ```\n **/\nMarkdownIt.prototype.enable = function (list, ignoreInvalid) {\n var result = [];\n\n if (!Array.isArray(list)) { list = [ list ]; }\n\n [ 'core', 'block', 'inline' ].forEach(function (chain) {\n result = result.concat(this[chain].ruler.enable(list, true));\n }, this);\n\n result = result.concat(this.inline.ruler2.enable(list, true));\n\n var missed = list.filter(function (name) { return result.indexOf(name) < 0; });\n\n if (missed.length && !ignoreInvalid) {\n throw new Error('MarkdownIt. Failed to enable unknown rule(s): ' + missed);\n }\n\n return this;\n};\n\n\n/** chainable\n * MarkdownIt.disable(list, ignoreInvalid)\n * - list (String|Array): rule name or list of rule names to disable.\n * - ignoreInvalid (Boolean): set `true` to ignore errors when rule not found.\n *\n * The same as [[MarkdownIt.enable]], but turn specified rules off.\n **/\nMarkdownIt.prototype.disable = function (list, ignoreInvalid) {\n var result = [];\n\n if (!Array.isArray(list)) { list = [ list ]; }\n\n [ 'core', 'block', 'inline' ].forEach(function (chain) {\n result = result.concat(this[chain].ruler.disable(list, true));\n }, this);\n\n result = result.concat(this.inline.ruler2.disable(list, true));\n\n var missed = list.filter(function (name) { return result.indexOf(name) < 0; });\n\n if (missed.length && !ignoreInvalid) {\n throw new Error('MarkdownIt. Failed to disable unknown rule(s): ' + missed);\n }\n return this;\n};\n\n\n/** chainable\n * MarkdownIt.use(plugin, params)\n *\n * Load specified plugin with given params into current parser instance.\n * It's just a sugar to call `plugin(md, params)` with curring.\n *\n * ##### Example\n *\n * ```javascript\n * var iterator = require('markdown-it-for-inline');\n * var md = require('markdown-it')()\n * .use(iterator, 'foo_replace', 'text', function (tokens, idx) {\n * tokens[idx].content = tokens[idx].content.replace(/foo/g, 'bar');\n * });\n * ```\n **/\nMarkdownIt.prototype.use = function (plugin /*, params, ... */) {\n var args = [ this ].concat(Array.prototype.slice.call(arguments, 1));\n plugin.apply(plugin, args);\n return this;\n};\n\n\n/** internal\n * MarkdownIt.parse(src, env) -> Array\n * - src (String): source string\n * - env (Object): environment sandbox\n *\n * Parse input string and return list of block tokens (special token type\n * \"inline\" will contain list of inline tokens). You should not call this\n * method directly, until you write custom renderer (for example, to produce\n * AST).\n *\n * `env` is used to pass data between \"distributed\" rules and return additional\n * metadata like reference info, needed for the renderer. It also can be used to\n * inject data in specific cases. Usually, you will be ok to pass `{}`,\n * and then pass updated object to renderer.\n **/\nMarkdownIt.prototype.parse = function (src, env) {\n if (typeof src !== 'string') {\n throw new Error('Input data should be a String');\n }\n\n var state = new this.core.State(src, this, env);\n\n this.core.process(state);\n\n return state.tokens;\n};\n\n\n/**\n * MarkdownIt.render(src [, env]) -> String\n * - src (String): source string\n * - env (Object): environment sandbox\n *\n * Render markdown string into html. It does all magic for you :).\n *\n * `env` can be used to inject additional metadata (`{}` by default).\n * But you will not need it with high probability. See also comment\n * in [[MarkdownIt.parse]].\n **/\nMarkdownIt.prototype.render = function (src, env) {\n env = env || {};\n\n return this.renderer.render(this.parse(src, env), this.options, env);\n};\n\n\n/** internal\n * MarkdownIt.parseInline(src, env) -> Array\n * - src (String): source string\n * - env (Object): environment sandbox\n *\n * The same as [[MarkdownIt.parse]] but skip all block rules. It returns the\n * block tokens list with the single `inline` element, containing parsed inline\n * tokens in `children` property. Also updates `env` object.\n **/\nMarkdownIt.prototype.parseInline = function (src, env) {\n var state = new this.core.State(src, this, env);\n\n state.inlineMode = true;\n this.core.process(state);\n\n return state.tokens;\n};\n\n\n/**\n * MarkdownIt.renderInline(src [, env]) -> String\n * - src (String): source string\n * - env (Object): environment sandbox\n *\n * Similar to [[MarkdownIt.render]] but for single paragraph content. Result\n * will NOT be wrapped into `

` tags.\n **/\nMarkdownIt.prototype.renderInline = function (src, env) {\n env = env || {};\n\n return this.renderer.render(this.parseInline(src, env), this.options, env);\n};\n\n\nmodule.exports = MarkdownIt;\n","\n'use strict';\n\n\nvar encodeCache = {};\n\n\n// Create a lookup array where anything but characters in `chars` string\n// and alphanumeric chars is percent-encoded.\n//\nfunction getEncodeCache(exclude) {\n var i, ch, cache = encodeCache[exclude];\n if (cache) { return cache; }\n\n cache = encodeCache[exclude] = [];\n\n for (i = 0; i < 128; i++) {\n ch = String.fromCharCode(i);\n\n if (/^[0-9a-z]$/i.test(ch)) {\n // always allow unencoded alphanumeric characters\n cache.push(ch);\n } else {\n cache.push('%' + ('0' + i.toString(16).toUpperCase()).slice(-2));\n }\n }\n\n for (i = 0; i < exclude.length; i++) {\n cache[exclude.charCodeAt(i)] = exclude[i];\n }\n\n return cache;\n}\n\n\n// Encode unsafe characters with percent-encoding, skipping already\n// encoded sequences.\n//\n// - string - string to encode\n// - exclude - list of characters to ignore (in addition to a-zA-Z0-9)\n// - keepEscaped - don't encode '%' in a correct escape sequence (default: true)\n//\nfunction encode(string, exclude, keepEscaped) {\n var i, l, code, nextCode, cache,\n result = '';\n\n if (typeof exclude !== 'string') {\n // encode(string, keepEscaped)\n keepEscaped = exclude;\n exclude = encode.defaultChars;\n }\n\n if (typeof keepEscaped === 'undefined') {\n keepEscaped = true;\n }\n\n cache = getEncodeCache(exclude);\n\n for (i = 0, l = string.length; i < l; i++) {\n code = string.charCodeAt(i);\n\n if (keepEscaped && code === 0x25 /* % */ && i + 2 < l) {\n if (/^[0-9a-f]{2}$/i.test(string.slice(i + 1, i + 3))) {\n result += string.slice(i, i + 3);\n i += 2;\n continue;\n }\n }\n\n if (code < 128) {\n result += cache[code];\n continue;\n }\n\n if (code >= 0xD800 && code <= 0xDFFF) {\n if (code >= 0xD800 && code <= 0xDBFF && i + 1 < l) {\n nextCode = string.charCodeAt(i + 1);\n if (nextCode >= 0xDC00 && nextCode <= 0xDFFF) {\n result += encodeURIComponent(string[i] + string[i + 1]);\n i++;\n continue;\n }\n }\n result += '%EF%BF%BD';\n continue;\n }\n\n result += encodeURIComponent(string[i]);\n }\n\n return result;\n}\n\nencode.defaultChars = \";/?:@&=+$,-_.!~*'()#\";\nencode.componentChars = \"-_.!~*'()\";\n\n\nmodule.exports = encode;\n","\n'use strict';\n\n\n/* eslint-disable no-bitwise */\n\nvar decodeCache = {};\n\nfunction getDecodeCache(exclude) {\n var i, ch, cache = decodeCache[exclude];\n if (cache) { return cache; }\n\n cache = decodeCache[exclude] = [];\n\n for (i = 0; i < 128; i++) {\n ch = String.fromCharCode(i);\n cache.push(ch);\n }\n\n for (i = 0; i < exclude.length; i++) {\n ch = exclude.charCodeAt(i);\n cache[ch] = '%' + ('0' + ch.toString(16).toUpperCase()).slice(-2);\n }\n\n return cache;\n}\n\n\n// Decode percent-encoded string.\n//\nfunction decode(string, exclude) {\n var cache;\n\n if (typeof exclude !== 'string') {\n exclude = decode.defaultChars;\n }\n\n cache = getDecodeCache(exclude);\n\n return string.replace(/(%[a-f0-9]{2})+/gi, function(seq) {\n var i, l, b1, b2, b3, b4, chr,\n result = '';\n\n for (i = 0, l = seq.length; i < l; i += 3) {\n b1 = parseInt(seq.slice(i + 1, i + 3), 16);\n\n if (b1 < 0x80) {\n result += cache[b1];\n continue;\n }\n\n if ((b1 & 0xE0) === 0xC0 && (i + 3 < l)) {\n // 110xxxxx 10xxxxxx\n b2 = parseInt(seq.slice(i + 4, i + 6), 16);\n\n if ((b2 & 0xC0) === 0x80) {\n chr = ((b1 << 6) & 0x7C0) | (b2 & 0x3F);\n\n if (chr < 0x80) {\n result += '\\ufffd\\ufffd';\n } else {\n result += String.fromCharCode(chr);\n }\n\n i += 3;\n continue;\n }\n }\n\n if ((b1 & 0xF0) === 0xE0 && (i + 6 < l)) {\n // 1110xxxx 10xxxxxx 10xxxxxx\n b2 = parseInt(seq.slice(i + 4, i + 6), 16);\n b3 = parseInt(seq.slice(i + 7, i + 9), 16);\n\n if ((b2 & 0xC0) === 0x80 && (b3 & 0xC0) === 0x80) {\n chr = ((b1 << 12) & 0xF000) | ((b2 << 6) & 0xFC0) | (b3 & 0x3F);\n\n if (chr < 0x800 || (chr >= 0xD800 && chr <= 0xDFFF)) {\n result += '\\ufffd\\ufffd\\ufffd';\n } else {\n result += String.fromCharCode(chr);\n }\n\n i += 6;\n continue;\n }\n }\n\n if ((b1 & 0xF8) === 0xF0 && (i + 9 < l)) {\n // 111110xx 10xxxxxx 10xxxxxx 10xxxxxx\n b2 = parseInt(seq.slice(i + 4, i + 6), 16);\n b3 = parseInt(seq.slice(i + 7, i + 9), 16);\n b4 = parseInt(seq.slice(i + 10, i + 12), 16);\n\n if ((b2 & 0xC0) === 0x80 && (b3 & 0xC0) === 0x80 && (b4 & 0xC0) === 0x80) {\n chr = ((b1 << 18) & 0x1C0000) | ((b2 << 12) & 0x3F000) | ((b3 << 6) & 0xFC0) | (b4 & 0x3F);\n\n if (chr < 0x10000 || chr > 0x10FFFF) {\n result += '\\ufffd\\ufffd\\ufffd\\ufffd';\n } else {\n chr -= 0x10000;\n result += String.fromCharCode(0xD800 + (chr >> 10), 0xDC00 + (chr & 0x3FF));\n }\n\n i += 9;\n continue;\n }\n }\n\n result += '\\ufffd';\n }\n\n return result;\n });\n}\n\n\ndecode.defaultChars = ';/?:@&=+$,#';\ndecode.componentChars = '';\n\n\nmodule.exports = decode;\n","\n'use strict';\n\n\nmodule.exports = function format(url) {\n var result = '';\n\n result += url.protocol || '';\n result += url.slashes ? '//' : '';\n result += url.auth ? url.auth + '@' : '';\n\n if (url.hostname && url.hostname.indexOf(':') !== -1) {\n // ipv6 address\n result += '[' + url.hostname + ']';\n } else {\n result += url.hostname || '';\n }\n\n result += url.port ? ':' + url.port : '';\n result += url.pathname || '';\n result += url.search || '';\n result += url.hash || '';\n\n return result;\n};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n//\n// Changes from joyent/node:\n//\n// 1. No leading slash in paths,\n// e.g. in `url.parse('http://foo?bar')` pathname is ``, not `/`\n//\n// 2. Backslashes are not replaced with slashes,\n// so `http:\\\\example.org\\` is treated like a relative path\n//\n// 3. Trailing colon is treated like a part of the path,\n// i.e. in `http://example.org:foo` pathname is `:foo`\n//\n// 4. Nothing is URL-encoded in the resulting object,\n// (in joyent/node some chars in auth and paths are encoded)\n//\n// 5. `url.parse()` does not have `parseQueryString` argument\n//\n// 6. Removed extraneous result properties: `host`, `path`, `query`, etc.,\n// which can be constructed using other parts of the url.\n//\n\n\nfunction Url() {\n this.protocol = null;\n this.slashes = null;\n this.auth = null;\n this.port = null;\n this.hostname = null;\n this.hash = null;\n this.search = null;\n this.pathname = null;\n}\n\n// Reference: RFC 3986, RFC 1808, RFC 2396\n\n// define these here so at least they only have to be\n// compiled once on the first module load.\nvar protocolPattern = /^([a-z0-9.+-]+:)/i,\n portPattern = /:[0-9]*$/,\n\n // Special case for a simple path URL\n simplePathPattern = /^(\\/\\/?(?!\\/)[^\\?\\s]*)(\\?[^\\s]*)?$/,\n\n // RFC 2396: characters reserved for delimiting URLs.\n // We actually just auto-escape these.\n delims = [ '<', '>', '\"', '`', ' ', '\\r', '\\n', '\\t' ],\n\n // RFC 2396: characters not allowed for various reasons.\n unwise = [ '{', '}', '|', '\\\\', '^', '`' ].concat(delims),\n\n // Allowed by RFCs, but cause of XSS attacks. Always escape these.\n autoEscape = [ '\\'' ].concat(unwise),\n // Characters that are never ever allowed in a hostname.\n // Note that any invalid chars are also handled, but these\n // are the ones that are *expected* to be seen, so we fast-path\n // them.\n nonHostChars = [ '%', '/', '?', ';', '#' ].concat(autoEscape),\n hostEndingChars = [ '/', '?', '#' ],\n hostnameMaxLen = 255,\n hostnamePartPattern = /^[+a-z0-9A-Z_-]{0,63}$/,\n hostnamePartStart = /^([+a-z0-9A-Z_-]{0,63})(.*)$/,\n // protocols that can allow \"unsafe\" and \"unwise\" chars.\n /* eslint-disable no-script-url */\n // protocols that never have a hostname.\n hostlessProtocol = {\n 'javascript': true,\n 'javascript:': true\n },\n // protocols that always contain a // bit.\n slashedProtocol = {\n 'http': true,\n 'https': true,\n 'ftp': true,\n 'gopher': true,\n 'file': true,\n 'http:': true,\n 'https:': true,\n 'ftp:': true,\n 'gopher:': true,\n 'file:': true\n };\n /* eslint-enable no-script-url */\n\nfunction urlParse(url, slashesDenoteHost) {\n if (url && url instanceof Url) { return url; }\n\n var u = new Url();\n u.parse(url, slashesDenoteHost);\n return u;\n}\n\nUrl.prototype.parse = function(url, slashesDenoteHost) {\n var i, l, lowerProto, hec, slashes,\n rest = url;\n\n // trim before proceeding.\n // This is to support parse stuff like \" http://foo.com \\n\"\n rest = rest.trim();\n\n if (!slashesDenoteHost && url.split('#').length === 1) {\n // Try fast path regexp\n var simplePath = simplePathPattern.exec(rest);\n if (simplePath) {\n this.pathname = simplePath[1];\n if (simplePath[2]) {\n this.search = simplePath[2];\n }\n return this;\n }\n }\n\n var proto = protocolPattern.exec(rest);\n if (proto) {\n proto = proto[0];\n lowerProto = proto.toLowerCase();\n this.protocol = proto;\n rest = rest.substr(proto.length);\n }\n\n // figure out if it's got a host\n // user@server is *always* interpreted as a hostname, and url\n // resolution will treat //foo/bar as host=foo,path=bar because that's\n // how the browser resolves relative URLs.\n if (slashesDenoteHost || proto || rest.match(/^\\/\\/[^@\\/]+@[^@\\/]+/)) {\n slashes = rest.substr(0, 2) === '//';\n if (slashes && !(proto && hostlessProtocol[proto])) {\n rest = rest.substr(2);\n this.slashes = true;\n }\n }\n\n if (!hostlessProtocol[proto] &&\n (slashes || (proto && !slashedProtocol[proto]))) {\n\n // there's a hostname.\n // the first instance of /, ?, ;, or # ends the host.\n //\n // If there is an @ in the hostname, then non-host chars *are* allowed\n // to the left of the last @ sign, unless some host-ending character\n // comes *before* the @-sign.\n // URLs are obnoxious.\n //\n // ex:\n // http://a@b@c/ => user:a@b host:c\n // http://a@b?@c => user:a host:c path:/?@c\n\n // v0.12 TODO(isaacs): This is not quite how Chrome does things.\n // Review our test case against browsers more comprehensively.\n\n // find the first instance of any hostEndingChars\n var hostEnd = -1;\n for (i = 0; i < hostEndingChars.length; i++) {\n hec = rest.indexOf(hostEndingChars[i]);\n if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) {\n hostEnd = hec;\n }\n }\n\n // at this point, either we have an explicit point where the\n // auth portion cannot go past, or the last @ char is the decider.\n var auth, atSign;\n if (hostEnd === -1) {\n // atSign can be anywhere.\n atSign = rest.lastIndexOf('@');\n } else {\n // atSign must be in auth portion.\n // http://a@b/c@d => host:b auth:a path:/c@d\n atSign = rest.lastIndexOf('@', hostEnd);\n }\n\n // Now we have a portion which is definitely the auth.\n // Pull that off.\n if (atSign !== -1) {\n auth = rest.slice(0, atSign);\n rest = rest.slice(atSign + 1);\n this.auth = auth;\n }\n\n // the host is the remaining to the left of the first non-host char\n hostEnd = -1;\n for (i = 0; i < nonHostChars.length; i++) {\n hec = rest.indexOf(nonHostChars[i]);\n if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) {\n hostEnd = hec;\n }\n }\n // if we still have not hit it, then the entire thing is a host.\n if (hostEnd === -1) {\n hostEnd = rest.length;\n }\n\n if (rest[hostEnd - 1] === ':') { hostEnd--; }\n var host = rest.slice(0, hostEnd);\n rest = rest.slice(hostEnd);\n\n // pull out port.\n this.parseHost(host);\n\n // we've indicated that there is a hostname,\n // so even if it's empty, it has to be present.\n this.hostname = this.hostname || '';\n\n // if hostname begins with [ and ends with ]\n // assume that it's an IPv6 address.\n var ipv6Hostname = this.hostname[0] === '[' &&\n this.hostname[this.hostname.length - 1] === ']';\n\n // validate a little.\n if (!ipv6Hostname) {\n var hostparts = this.hostname.split(/\\./);\n for (i = 0, l = hostparts.length; i < l; i++) {\n var part = hostparts[i];\n if (!part) { continue; }\n if (!part.match(hostnamePartPattern)) {\n var newpart = '';\n for (var j = 0, k = part.length; j < k; j++) {\n if (part.charCodeAt(j) > 127) {\n // we replace non-ASCII char with a temporary placeholder\n // we need this to make sure size of hostname is not\n // broken by replacing non-ASCII by nothing\n newpart += 'x';\n } else {\n newpart += part[j];\n }\n }\n // we test again with ASCII char only\n if (!newpart.match(hostnamePartPattern)) {\n var validParts = hostparts.slice(0, i);\n var notHost = hostparts.slice(i + 1);\n var bit = part.match(hostnamePartStart);\n if (bit) {\n validParts.push(bit[1]);\n notHost.unshift(bit[2]);\n }\n if (notHost.length) {\n rest = notHost.join('.') + rest;\n }\n this.hostname = validParts.join('.');\n break;\n }\n }\n }\n }\n\n if (this.hostname.length > hostnameMaxLen) {\n this.hostname = '';\n }\n\n // strip [ and ] from the hostname\n // the host field still retains them, though\n if (ipv6Hostname) {\n this.hostname = this.hostname.substr(1, this.hostname.length - 2);\n }\n }\n\n // chop off from the tail first.\n var hash = rest.indexOf('#');\n if (hash !== -1) {\n // got a fragment string.\n this.hash = rest.substr(hash);\n rest = rest.slice(0, hash);\n }\n var qm = rest.indexOf('?');\n if (qm !== -1) {\n this.search = rest.substr(qm);\n rest = rest.slice(0, qm);\n }\n if (rest) { this.pathname = rest; }\n if (slashedProtocol[lowerProto] &&\n this.hostname && !this.pathname) {\n this.pathname = '';\n }\n\n return this;\n};\n\nUrl.prototype.parseHost = function(host) {\n var port = portPattern.exec(host);\n if (port) {\n port = port[0];\n if (port !== ':') {\n this.port = port.substr(1);\n }\n host = host.substr(0, host.length - port.length);\n }\n if (host) { this.hostname = host; }\n};\n\nmodule.exports = urlParse;\n","module.exports=/[\\0-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]/","module.exports=/[\\0-\\x1F\\x7F-\\x9F]/","module.exports=/[\\xAD\\u0600-\\u0605\\u061C\\u06DD\\u070F\\u08E2\\u180E\\u200B-\\u200F\\u202A-\\u202E\\u2060-\\u2064\\u2066-\\u206F\\uFEFF\\uFFF9-\\uFFFB]|\\uD804[\\uDCBD\\uDCCD]|\\uD82F[\\uDCA0-\\uDCA3]|\\uD834[\\uDD73-\\uDD7A]|\\uDB40[\\uDC01\\uDC20-\\uDC7F]/","module.exports=/[ \\xA0\\u1680\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000]/","// 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","// Parse link label\n//\n// this function assumes that first character (\"[\") already matches;\n// returns the end of the label\n//\n'use strict';\n\nmodule.exports = function parseLinkLabel(state, start, disableNested) {\n var level, found, marker, prevPos,\n labelEnd = -1,\n max = state.posMax,\n oldPos = state.pos;\n\n state.pos = start + 1;\n level = 1;\n\n while (state.pos < max) {\n marker = state.src.charCodeAt(state.pos);\n if (marker === 0x5D /* ] */) {\n level--;\n if (level === 0) {\n found = true;\n break;\n }\n }\n\n prevPos = state.pos;\n state.md.inline.skipToken(state);\n if (marker === 0x5B /* [ */) {\n if (prevPos === state.pos - 1) {\n // increase level if we find text `[`, which is not a part of any token\n level++;\n } else if (disableNested) {\n state.pos = oldPos;\n return -1;\n }\n }\n }\n\n if (found) {\n labelEnd = state.pos;\n }\n\n // restore old state\n state.pos = oldPos;\n\n return labelEnd;\n};\n","// Parse link destination\n//\n'use strict';\n\n\nvar unescapeAll = require('../common/utils').unescapeAll;\n\n\nmodule.exports = function parseLinkDestination(str, pos, max) {\n var code, level,\n lines = 0,\n start = pos,\n result = {\n ok: false,\n pos: 0,\n lines: 0,\n str: ''\n };\n\n if (str.charCodeAt(pos) === 0x3C /* < */) {\n pos++;\n while (pos < max) {\n code = str.charCodeAt(pos);\n if (code === 0x0A /* \\n */) { return result; }\n if (code === 0x3C /* < */) { return result; }\n if (code === 0x3E /* > */) {\n result.pos = pos + 1;\n result.str = unescapeAll(str.slice(start + 1, pos));\n result.ok = true;\n return result;\n }\n if (code === 0x5C /* \\ */ && pos + 1 < max) {\n pos += 2;\n continue;\n }\n\n pos++;\n }\n\n // no closing '>'\n return result;\n }\n\n // this should be ... } else { ... branch\n\n level = 0;\n while (pos < max) {\n code = str.charCodeAt(pos);\n\n if (code === 0x20) { break; }\n\n // ascii control characters\n if (code < 0x20 || code === 0x7F) { break; }\n\n if (code === 0x5C /* \\ */ && pos + 1 < max) {\n if (str.charCodeAt(pos + 1) === 0x20) { break; }\n pos += 2;\n continue;\n }\n\n if (code === 0x28 /* ( */) {\n level++;\n if (level > 32) { return result; }\n }\n\n if (code === 0x29 /* ) */) {\n if (level === 0) { break; }\n level--;\n }\n\n pos++;\n }\n\n if (start === pos) { return result; }\n if (level !== 0) { return result; }\n\n result.str = unescapeAll(str.slice(start, pos));\n result.lines = lines;\n result.pos = pos;\n result.ok = true;\n return result;\n};\n","// Parse link title\n//\n'use strict';\n\n\nvar unescapeAll = require('../common/utils').unescapeAll;\n\n\nmodule.exports = function parseLinkTitle(str, pos, max) {\n var code,\n marker,\n lines = 0,\n start = pos,\n result = {\n ok: false,\n pos: 0,\n lines: 0,\n str: ''\n };\n\n if (pos >= max) { return result; }\n\n marker = str.charCodeAt(pos);\n\n if (marker !== 0x22 /* \" */ && marker !== 0x27 /* ' */ && marker !== 0x28 /* ( */) { return result; }\n\n pos++;\n\n // if opening marker is \"(\", switch it to closing marker \")\"\n if (marker === 0x28) { marker = 0x29; }\n\n while (pos < max) {\n code = str.charCodeAt(pos);\n if (code === marker) {\n result.pos = pos + 1;\n result.lines = lines;\n result.str = unescapeAll(str.slice(start + 1, pos));\n result.ok = true;\n return result;\n } else if (code === 0x28 /* ( */ && marker === 0x29 /* ) */) {\n return result;\n } else if (code === 0x0A) {\n lines++;\n } else if (code === 0x5C /* \\ */ && pos + 1 < max) {\n pos++;\n if (str.charCodeAt(pos) === 0x0A) {\n lines++;\n }\n }\n\n pos++;\n }\n\n return result;\n};\n","/**\n * class Renderer\n *\n * Generates HTML from parsed token stream. Each instance has independent\n * copy of rules. Those can be rewritten with ease. Also, you can add new\n * rules if you create plugin and adds new token types.\n **/\n'use strict';\n\n\nvar assign = require('./common/utils').assign;\nvar unescapeAll = require('./common/utils').unescapeAll;\nvar escapeHtml = require('./common/utils').escapeHtml;\n\n\n////////////////////////////////////////////////////////////////////////////////\n\nvar default_rules = {};\n\n\ndefault_rules.code_inline = function (tokens, idx, options, env, slf) {\n var token = tokens[idx];\n\n return '' +\n escapeHtml(tokens[idx].content) +\n '';\n};\n\n\ndefault_rules.code_block = function (tokens, idx, options, env, slf) {\n var token = tokens[idx];\n\n return '' +\n escapeHtml(tokens[idx].content) +\n '\\n';\n};\n\n\ndefault_rules.fence = function (tokens, idx, options, env, slf) {\n var token = tokens[idx],\n info = token.info ? unescapeAll(token.info).trim() : '',\n langName = '',\n langAttrs = '',\n highlighted, i, arr, tmpAttrs, tmpToken;\n\n if (info) {\n arr = info.split(/(\\s+)/g);\n langName = arr[0];\n langAttrs = arr.slice(2).join('');\n }\n\n if (options.highlight) {\n highlighted = options.highlight(token.content, langName, langAttrs) || escapeHtml(token.content);\n } else {\n highlighted = escapeHtml(token.content);\n }\n\n if (highlighted.indexOf(''\n + highlighted\n + '\\n';\n }\n\n\n return '

'\n        + highlighted\n        + '
\\n';\n};\n\n\ndefault_rules.image = function (tokens, idx, options, env, slf) {\n var token = tokens[idx];\n\n // \"alt\" attr MUST be set, even if empty. Because it's mandatory and\n // should be placed on proper position for tests.\n //\n // Replace content with actual value\n\n token.attrs[token.attrIndex('alt')][1] =\n slf.renderInlineAsText(token.children, options, env);\n\n return slf.renderToken(tokens, idx, options);\n};\n\n\ndefault_rules.hardbreak = function (tokens, idx, options /*, env */) {\n return options.xhtmlOut ? '
\\n' : '
\\n';\n};\ndefault_rules.softbreak = function (tokens, idx, options /*, env */) {\n return options.breaks ? (options.xhtmlOut ? '
\\n' : '
\\n') : '\\n';\n};\n\n\ndefault_rules.text = function (tokens, idx /*, options, env */) {\n return escapeHtml(tokens[idx].content);\n};\n\n\ndefault_rules.html_block = function (tokens, idx /*, options, env */) {\n return tokens[idx].content;\n};\ndefault_rules.html_inline = function (tokens, idx /*, options, env */) {\n return tokens[idx].content;\n};\n\n\n/**\n * new Renderer()\n *\n * Creates new [[Renderer]] instance and fill [[Renderer#rules]] with defaults.\n **/\nfunction Renderer() {\n\n /**\n * Renderer#rules -> Object\n *\n * Contains render rules for tokens. Can be updated and extended.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')();\n *\n * md.renderer.rules.strong_open = function () { return ''; };\n * md.renderer.rules.strong_close = function () { return ''; };\n *\n * var result = md.renderInline(...);\n * ```\n *\n * Each rule is called as independent static function with fixed signature:\n *\n * ```javascript\n * function my_token_render(tokens, idx, options, env, renderer) {\n * // ...\n * return renderedHTML;\n * }\n * ```\n *\n * See [source code](https://github.com/markdown-it/markdown-it/blob/master/lib/renderer.js)\n * for more details and examples.\n **/\n this.rules = assign({}, default_rules);\n}\n\n\n/**\n * Renderer.renderAttrs(token) -> String\n *\n * Render token attributes to string.\n **/\nRenderer.prototype.renderAttrs = function renderAttrs(token) {\n var i, l, result;\n\n if (!token.attrs) { return ''; }\n\n result = '';\n\n for (i = 0, l = token.attrs.length; i < l; i++) {\n result += ' ' + escapeHtml(token.attrs[i][0]) + '=\"' + escapeHtml(token.attrs[i][1]) + '\"';\n }\n\n return result;\n};\n\n\n/**\n * Renderer.renderToken(tokens, idx, options) -> String\n * - tokens (Array): list of tokens\n * - idx (Numbed): token index to render\n * - options (Object): params of parser instance\n *\n * Default token renderer. Can be overriden by custom function\n * in [[Renderer#rules]].\n **/\nRenderer.prototype.renderToken = function renderToken(tokens, idx, options) {\n var nextToken,\n result = '',\n needLf = false,\n token = tokens[idx];\n\n // Tight list paragraphs\n if (token.hidden) {\n return '';\n }\n\n // Insert a newline between hidden paragraph and subsequent opening\n // block-level tag.\n //\n // For example, here we should insert a newline before blockquote:\n // - a\n // >\n //\n if (token.block && token.nesting !== -1 && idx && tokens[idx - 1].hidden) {\n result += '\\n';\n }\n\n // Add token name, e.g. ``.\n //\n needLf = false;\n }\n }\n }\n }\n\n result += needLf ? '>\\n' : '>';\n\n return result;\n};\n\n\n/**\n * Renderer.renderInline(tokens, options, env) -> String\n * - tokens (Array): list on block tokens to 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 } else if (tokens[i].type === 'softbreak') {\n result += '\\n';\n }\n }\n\n return result;\n};\n\n\n/**\n * Renderer.render(tokens, options, env) -> String\n * - tokens (Array): list on block tokens to 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","/** 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","// Normalize input string\n\n'use strict';\n\n\n// https://spec.commonmark.org/0.29/#line-ending\nvar NEWLINES_RE = /\\r\\n?|\\n/g;\nvar NULL_RE = /\\0/g;\n\n\nmodule.exports = function normalize(state) {\n var str;\n\n // Normalize newlines\n str = state.src.replace(NEWLINES_RE, '\\n');\n\n // Replace NULL characters\n str = str.replace(NULL_RE, '\\uFFFD');\n\n state.src = str;\n};\n","'use strict';\n\n\nmodule.exports = function block(state) {\n var token;\n\n if (state.inlineMode) {\n token = new state.Token('inline', '', 0);\n token.content = state.src;\n token.map = [ 0, 1 ];\n token.children = [];\n state.tokens.push(token);\n } else {\n state.md.block.parse(state.src, state.md, state.env, state.tokens);\n }\n};\n","'use strict';\n\nmodule.exports = function inline(state) {\n var tokens = state.tokens, tok, i, l;\n\n // Parse inlines\n for (i = 0, l = tokens.length; i < l; i++) {\n tok = tokens[i];\n if (tok.type === 'inline') {\n state.md.inline.parse(tok.content, state.md, state.env, tok.children);\n }\n }\n};\n","// Replace link-like texts with link nodes.\n//\n// Currently restricted by `md.validateLink()` to http/https/ftp\n//\n'use strict';\n\n\nvar arrayReplaceAt = require('../common/utils').arrayReplaceAt;\n\n\nfunction isLinkOpen(str) {\n return /^\\s]/i.test(str);\n}\nfunction isLinkClose(str) {\n return /^<\\/a\\s*>/i.test(str);\n}\n\n\nmodule.exports = function linkify(state) {\n var i, j, l, tokens, token, currentToken, nodes, ln, text, pos, lastPos,\n level, htmlLinkLevel, url, fullUrl, urlText,\n blockTokens = state.tokens,\n links;\n\n if (!state.md.options.linkify) { return; }\n\n for (j = 0, l = blockTokens.length; j < l; j++) {\n if (blockTokens[j].type !== 'inline' ||\n !state.md.linkify.pretest(blockTokens[j].content)) {\n continue;\n }\n\n tokens = blockTokens[j].children;\n\n htmlLinkLevel = 0;\n\n // We scan from the end, to keep position when new tags added.\n // Use reversed logic in links start/end match\n for (i = tokens.length - 1; i >= 0; i--) {\n currentToken = tokens[i];\n\n // Skip content of markdown links\n if (currentToken.type === 'link_close') {\n i--;\n while (tokens[i].level !== currentToken.level && tokens[i].type !== 'link_open') {\n i--;\n }\n continue;\n }\n\n // Skip content of html tag links\n if (currentToken.type === 'html_inline') {\n if (isLinkOpen(currentToken.content) && htmlLinkLevel > 0) {\n htmlLinkLevel--;\n }\n if (isLinkClose(currentToken.content)) {\n htmlLinkLevel++;\n }\n }\n if (htmlLinkLevel > 0) { continue; }\n\n if (currentToken.type === 'text' && state.md.linkify.test(currentToken.content)) {\n\n text = currentToken.content;\n links = state.md.linkify.match(text);\n\n // Now split string to nodes\n nodes = [];\n level = currentToken.level;\n lastPos = 0;\n\n 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","// Simple typographic replacements\n//\n// (c) (C) → ©\n// (tm) (TM) → ™\n// (r) (R) → ®\n// +- → ±\n// (p) (P) -> §\n// ... → … (also ?.... → ?.., !.... → !..)\n// ???????? → ???, !!!!! → !!!, `,,` → `,`\n// -- → –, --- → —\n//\n'use strict';\n\n// TODO:\n// - fractionals 1/2, 1/4, 3/4 -> ½, ¼, ¾\n// - 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, inside_autolink = 0;\n\n for (i = inlineTokens.length - 1; i >= 0; i--) {\n token = inlineTokens[i];\n\n if (token.type === 'text' && !inside_autolink) {\n token.content = token.content.replace(SCOPED_ABBR_RE, replaceFn);\n }\n\n if (token.type === 'link_open' && token.info === 'auto') {\n inside_autolink--;\n }\n\n if (token.type === 'link_close' && token.info === 'auto') {\n inside_autolink++;\n }\n }\n}\n\nfunction replace_rare(inlineTokens) {\n var i, token, inside_autolink = 0;\n\n for (i = inlineTokens.length - 1; i >= 0; i--) {\n token = inlineTokens[i];\n\n if (token.type === 'text' && !inside_autolink) {\n if (RARE_RE.test(token.content)) {\n token.content = token.content\n .replace(/\\+-/g, '±')\n // .., ..., ....... -> …\n // but ?..... & !..... -> ?.. & !..\n .replace(/\\.{2,}/g, '…').replace(/([?!])…/g, '$1..')\n .replace(/([?!]){4,}/g, '$1$1$1').replace(/,{2,}/g, ',')\n // em-dash\n .replace(/(^|[^-])---(?=[^-]|$)/mg, '$1\\u2014')\n // en-dash\n .replace(/(^|\\s)--(?=\\s|$)/mg, '$1\\u2013')\n .replace(/(^|[^-\\s])--(?=[^-\\s]|$)/mg, '$1\\u2013');\n }\n }\n\n if (token.type === 'link_open' && token.info === 'auto') {\n inside_autolink--;\n }\n\n if (token.type === 'link_close' && token.info === 'auto') {\n inside_autolink++;\n }\n }\n}\n\n\nmodule.exports = function replace(state) {\n var blkIdx;\n\n if (!state.md.options.typographer) { return; }\n\n for (blkIdx = state.tokens.length - 1; blkIdx >= 0; blkIdx--) {\n\n if (state.tokens[blkIdx].type !== 'inline') { continue; }\n\n if (SCOPED_ABBR_TEST_RE.test(state.tokens[blkIdx].content)) {\n replace_scoped(state.tokens[blkIdx].children);\n }\n\n if (RARE_RE.test(state.tokens[blkIdx].content)) {\n replace_rare(state.tokens[blkIdx].children);\n }\n\n }\n};\n","// Convert straight quotation marks to typographic ones\n//\n'use strict';\n\n\nvar isWhiteSpace = require('../common/utils').isWhiteSpace;\nvar isPunctChar = require('../common/utils').isPunctChar;\nvar isMdAsciiPunct = require('../common/utils').isMdAsciiPunct;\n\nvar QUOTE_TEST_RE = /['\"]/;\nvar QUOTE_RE = /['\"]/g;\nvar APOSTROPHE = '\\u2019'; /* ’ */\n\n\nfunction replaceAt(str, index, ch) {\n return str.substr(0, index) + ch + str.substr(index + 1);\n}\n\nfunction process_inlines(tokens, state) {\n var i, token, text, t, pos, max, thisLevel, item, lastChar, nextChar,\n isLastPunctChar, isNextPunctChar, isLastWhiteSpace, isNextWhiteSpace,\n canOpen, canClose, j, isSingle, stack, openQuote, closeQuote;\n\n stack = [];\n\n for (i = 0; i < tokens.length; i++) {\n token = tokens[i];\n\n thisLevel = tokens[i].level;\n\n for (j = stack.length - 1; j >= 0; j--) {\n if (stack[j].level <= thisLevel) { break; }\n }\n stack.length = j + 1;\n\n if (token.type !== 'text') { continue; }\n\n text = token.content;\n pos = 0;\n max = text.length;\n\n /*eslint no-labels:0,block-scoped-var:0*/\n OUTER:\n while (pos < max) {\n QUOTE_RE.lastIndex = pos;\n t = QUOTE_RE.exec(text);\n if (!t) { break; }\n\n canOpen = canClose = true;\n pos = t.index + 1;\n isSingle = (t[0] === \"'\");\n\n // Find previous character,\n // default to space if it's the beginning of the line\n //\n lastChar = 0x20;\n\n if (t.index - 1 >= 0) {\n lastChar = text.charCodeAt(t.index - 1);\n } else {\n for (j = i - 1; j >= 0; j--) {\n if (tokens[j].type === 'softbreak' || tokens[j].type === 'hardbreak') break; // lastChar defaults to 0x20\n if (!tokens[j].content) continue; // should skip all tokens except 'text', 'html_inline' or 'code_inline'\n\n lastChar = tokens[j].content.charCodeAt(tokens[j].content.length - 1);\n break;\n }\n }\n\n // Find next character,\n // default to space if it's the end of the line\n //\n nextChar = 0x20;\n\n if (pos < max) {\n nextChar = text.charCodeAt(pos);\n } else {\n for (j = i + 1; j < tokens.length; j++) {\n if (tokens[j].type === 'softbreak' || tokens[j].type === 'hardbreak') break; // nextChar defaults to 0x20\n if (!tokens[j].content) continue; // should skip all tokens except 'text', 'html_inline' or 'code_inline'\n\n nextChar = tokens[j].content.charCodeAt(0);\n break;\n }\n }\n\n isLastPunctChar = isMdAsciiPunct(lastChar) || isPunctChar(String.fromCharCode(lastChar));\n isNextPunctChar = isMdAsciiPunct(nextChar) || isPunctChar(String.fromCharCode(nextChar));\n\n isLastWhiteSpace = isWhiteSpace(lastChar);\n isNextWhiteSpace = isWhiteSpace(nextChar);\n\n if (isNextWhiteSpace) {\n canOpen = false;\n } else if (isNextPunctChar) {\n if (!(isLastWhiteSpace || isLastPunctChar)) {\n canOpen = false;\n }\n }\n\n if (isLastWhiteSpace) {\n canClose = false;\n } else if (isLastPunctChar) {\n if (!(isNextWhiteSpace || isNextPunctChar)) {\n canClose = false;\n }\n }\n\n if (nextChar === 0x22 /* \" */ && t[0] === '\"') {\n if (lastChar >= 0x30 /* 0 */ && lastChar <= 0x39 /* 9 */) {\n // special case: 1\"\" - count first quote as an inch\n canClose = canOpen = false;\n }\n }\n\n if (canOpen && canClose) {\n // Replace quotes in the middle of punctuation sequence, but not\n // in the middle of the words, i.e.:\n //\n // 1. foo \" bar \" baz - not replaced\n // 2. foo-\"-bar-\"-baz - replaced\n // 3. foo\"bar\"baz - not replaced\n //\n canOpen = isLastPunctChar;\n canClose = isNextPunctChar;\n }\n\n if (!canOpen && !canClose) {\n // middle of word\n if (isSingle) {\n token.content = replaceAt(token.content, t.index, APOSTROPHE);\n }\n continue;\n }\n\n if (canClose) {\n // this could be a closing quote, rewind the stack to get a match\n for (j = stack.length - 1; j >= 0; j--) {\n item = stack[j];\n if (stack[j].level < thisLevel) { break; }\n if (item.single === isSingle && stack[j].level === thisLevel) {\n item = stack[j];\n\n if (isSingle) {\n openQuote = state.md.options.quotes[2];\n closeQuote = state.md.options.quotes[3];\n } else {\n openQuote = state.md.options.quotes[0];\n closeQuote = state.md.options.quotes[1];\n }\n\n // replace token.content *before* tokens[item.token].content,\n // because, if they are pointing at the same token, replaceAt\n // could mess up indices when quote length != 1\n token.content = replaceAt(token.content, t.index, closeQuote);\n tokens[item.token].content = replaceAt(\n tokens[item.token].content, item.pos, openQuote);\n\n pos += closeQuote.length - 1;\n if (item.token === i) { pos += openQuote.length - 1; }\n\n text = token.content;\n max = text.length;\n\n stack.length = j;\n continue OUTER;\n }\n }\n }\n\n if (canOpen) {\n stack.push({\n token: i,\n pos: t.index,\n single: isSingle,\n level: thisLevel\n });\n } else if (canClose && isSingle) {\n token.content = replaceAt(token.content, t.index, APOSTROPHE);\n }\n }\n }\n}\n\n\nmodule.exports = function smartquotes(state) {\n /*eslint max-depth:0*/\n var blkIdx;\n\n if (!state.md.options.typographer) { return; }\n\n for (blkIdx = state.tokens.length - 1; blkIdx >= 0; blkIdx--) {\n\n if (state.tokens[blkIdx].type !== 'inline' ||\n !QUOTE_TEST_RE.test(state.tokens[blkIdx].content)) {\n continue;\n }\n\n process_inlines(state.tokens[blkIdx].children, state);\n }\n};\n","// 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', 'blockquote', 'list' ] ],\n [ 'hr', require('./rules_block/hr'), [ 'paragraph', 'reference', 'blockquote', 'list' ] ],\n [ 'list', require('./rules_block/list'), [ 'paragraph', 'reference', 'blockquote' ] ],\n [ 'reference', require('./rules_block/reference') ],\n [ 'html_block', require('./rules_block/html_block'), [ 'paragraph', 'reference', 'blockquote' ] ],\n [ 'heading', require('./rules_block/heading'), [ 'paragraph', 'reference', 'blockquote' ] ],\n [ 'lheading', require('./rules_block/lheading') ],\n [ 'paragraph', require('./rules_block/paragraph') ]\n];\n\n\n/**\n * new ParserBlock()\n **/\nfunction ParserBlock() {\n /**\n * ParserBlock#ruler -> Ruler\n *\n * [[Ruler]] instance. Keep configuration of block rules.\n **/\n this.ruler = new Ruler();\n\n for (var i = 0; i < _rules.length; i++) {\n this.ruler.push(_rules[i][0], _rules[i][1], { alt: (_rules[i][2] || []).slice() });\n }\n}\n\n\n// Generate tokens for input range\n//\nParserBlock.prototype.tokenize = function (state, startLine, endLine) {\n var ok, i,\n rules = this.ruler.getRules(''),\n len = rules.length,\n line = startLine,\n hasEmptyLines = false,\n maxNesting = state.md.options.maxNesting;\n\n while (line < endLine) {\n state.line = line = state.skipEmptyLines(line);\n if (line >= endLine) { break; }\n\n // Termination condition for nested calls.\n // Nested calls currently used for blockquotes & lists\n if (state.sCount[line] < state.blkIndent) { break; }\n\n // If nesting level exceeded - skip tail to the end. That's not ordinary\n // situation and we should not care about content.\n if (state.level >= maxNesting) {\n state.line = endLine;\n break;\n }\n\n // Try all possible rules.\n // On success, rule should:\n //\n // - update `state.line`\n // - update `state.tokens`\n // - return true\n\n for (i = 0; i < len; i++) {\n ok = rules[i](state, line, endLine, false);\n if (ok) { break; }\n }\n\n // set state.tight if we had an empty line before current tag\n // i.e. latest empty line should not count\n state.tight = !hasEmptyLines;\n\n // paragraph might \"eat\" one newline after it in nested lists\n if (state.isEmpty(state.line - 1)) {\n hasEmptyLines = true;\n }\n\n line = state.line;\n\n if (line < endLine && state.isEmpty(line)) {\n hasEmptyLines = true;\n line++;\n state.line = line;\n }\n }\n};\n\n\n/**\n * ParserBlock.parse(str, md, env, outTokens)\n *\n * Process input string and push block tokens into `outTokens`\n **/\nParserBlock.prototype.parse = function (src, md, env, outTokens) {\n var state;\n\n if (!src) { return; }\n\n state = new this.State(src, md, env, outTokens);\n\n this.tokenize(state, state.line, state.lineMax);\n};\n\n\nParserBlock.prototype.State = require('./rules_block/state_block');\n\n\nmodule.exports = ParserBlock;\n","// GFM table, https://github.github.com/gfm/#tables-extension-\n\n'use strict';\n\nvar isSpace = require('../common/utils').isSpace;\n\n\nfunction getLine(state, line) {\n var pos = state.bMarks[line] + state.tShift[line],\n max = state.eMarks[line];\n\n return state.src.substr(pos, max - pos);\n}\n\nfunction escapedSplit(str) {\n var result = [],\n pos = 0,\n max = str.length,\n ch,\n isEscaped = false,\n lastPos = 0,\n current = '';\n\n ch = str.charCodeAt(pos);\n\n while (pos < max) {\n if (ch === 0x7c/* | */) {\n if (!isEscaped) {\n // pipe separating cells, '|'\n result.push(current + str.substring(lastPos, pos));\n current = '';\n lastPos = pos + 1;\n } else {\n // escaped pipe, '\\|'\n current += str.substring(lastPos, pos - 1);\n lastPos = pos;\n }\n }\n\n isEscaped = (ch === 0x5c/* \\ */);\n pos++;\n\n ch = str.charCodeAt(pos);\n }\n\n result.push(current + str.substring(lastPos));\n\n return result;\n}\n\n\nmodule.exports = function table(state, startLine, endLine, silent) {\n var ch, lineText, pos, i, l, nextLine, columns, columnCount, token,\n aligns, t, tableLines, tbodyLines, oldParentType, terminate,\n terminatorRules, firstCh, secondCh;\n\n // should have at least two lines\n if (startLine + 2 > endLine) { return false; }\n\n nextLine = startLine + 1;\n\n if (state.sCount[nextLine] < state.blkIndent) { return false; }\n\n // if it's indented more than 3 spaces, it should be a code block\n if (state.sCount[nextLine] - state.blkIndent >= 4) { return false; }\n\n // first character of the second line should be '|', '-', ':',\n // and no other characters are allowed but spaces;\n // basically, this is the equivalent of /^[-:|][-:|\\s]*$/ regexp\n\n pos = state.bMarks[nextLine] + state.tShift[nextLine];\n if (pos >= state.eMarks[nextLine]) { return false; }\n\n firstCh = state.src.charCodeAt(pos++);\n if (firstCh !== 0x7C/* | */ && firstCh !== 0x2D/* - */ && firstCh !== 0x3A/* : */) { return false; }\n\n if (pos >= state.eMarks[nextLine]) { return false; }\n\n secondCh = state.src.charCodeAt(pos++);\n if (secondCh !== 0x7C/* | */ && secondCh !== 0x2D/* - */ && secondCh !== 0x3A/* : */ && !isSpace(secondCh)) {\n return false;\n }\n\n // if first character is '-', then second character must not be a space\n // (due to parsing ambiguity with list)\n if (firstCh === 0x2D/* - */ && isSpace(secondCh)) { return false; }\n\n while (pos < state.eMarks[nextLine]) {\n ch = state.src.charCodeAt(pos);\n\n if (ch !== 0x7C/* | */ && ch !== 0x2D/* - */ && ch !== 0x3A/* : */ && !isSpace(ch)) { return false; }\n\n pos++;\n }\n\n lineText = getLine(state, startLine + 1);\n\n columns = lineText.split('|');\n aligns = [];\n for (i = 0; i < columns.length; i++) {\n t = columns[i].trim();\n if (!t) {\n // allow empty columns before and after table, but not in between columns;\n // e.g. allow ` |---| `, disallow ` ---||--- `\n if (i === 0 || i === columns.length - 1) {\n continue;\n } else {\n return false;\n }\n }\n\n if (!/^:?-+:?$/.test(t)) { return false; }\n if (t.charCodeAt(t.length - 1) === 0x3A/* : */) {\n aligns.push(t.charCodeAt(0) === 0x3A/* : */ ? 'center' : 'right');\n } else if (t.charCodeAt(0) === 0x3A/* : */) {\n aligns.push('left');\n } else {\n aligns.push('');\n }\n }\n\n lineText = getLine(state, startLine).trim();\n if (lineText.indexOf('|') === -1) { return false; }\n if (state.sCount[startLine] - state.blkIndent >= 4) { return false; }\n columns = escapedSplit(lineText);\n if (columns.length && columns[0] === '') columns.shift();\n if (columns.length && columns[columns.length - 1] === '') columns.pop();\n\n // header row will define an amount of columns in the entire table,\n // and align row should be exactly the same (the rest of the rows can differ)\n columnCount = columns.length;\n if (columnCount === 0 || columnCount !== aligns.length) { return false; }\n\n if (silent) { return true; }\n\n oldParentType = state.parentType;\n state.parentType = 'table';\n\n // use 'blockquote' lists for termination because it's\n // the most similar to tables\n terminatorRules = state.md.block.ruler.getRules('blockquote');\n\n token = state.push('table_open', 'table', 1);\n token.map = tableLines = [ startLine, 0 ];\n\n token = state.push('thead_open', 'thead', 1);\n token.map = [ startLine, startLine + 1 ];\n\n token = state.push('tr_open', 'tr', 1);\n token.map = [ startLine, startLine + 1 ];\n\n for (i = 0; i < columns.length; i++) {\n token = state.push('th_open', 'th', 1);\n if (aligns[i]) {\n token.attrs = [ [ 'style', 'text-align:' + aligns[i] ] ];\n }\n\n token = state.push('inline', '', 0);\n token.content = columns[i].trim();\n token.children = [];\n\n token = state.push('th_close', 'th', -1);\n }\n\n token = state.push('tr_close', 'tr', -1);\n token = state.push('thead_close', 'thead', -1);\n\n for (nextLine = startLine + 2; nextLine < endLine; nextLine++) {\n if (state.sCount[nextLine] < state.blkIndent) { break; }\n\n terminate = false;\n for (i = 0, l = terminatorRules.length; i < l; i++) {\n if (terminatorRules[i](state, nextLine, endLine, true)) {\n terminate = true;\n break;\n }\n }\n\n if (terminate) { break; }\n lineText = getLine(state, nextLine).trim();\n if (!lineText) { break; }\n if (state.sCount[nextLine] - state.blkIndent >= 4) { break; }\n columns = escapedSplit(lineText);\n if (columns.length && columns[0] === '') columns.shift();\n if (columns.length && columns[columns.length - 1] === '') columns.pop();\n\n if (nextLine === startLine + 2) {\n token = state.push('tbody_open', 'tbody', 1);\n token.map = tbodyLines = [ startLine + 2, 0 ];\n }\n\n token = state.push('tr_open', 'tr', 1);\n token.map = [ nextLine, nextLine + 1 ];\n\n for (i = 0; i < columnCount; i++) {\n token = state.push('td_open', 'td', 1);\n if (aligns[i]) {\n token.attrs = [ [ 'style', 'text-align:' + aligns[i] ] ];\n }\n\n token = state.push('inline', '', 0);\n token.content = columns[i] ? columns[i].trim() : '';\n token.children = [];\n\n token = state.push('td_close', 'td', -1);\n }\n token = state.push('tr_close', 'tr', -1);\n }\n\n if (tbodyLines) {\n token = state.push('tbody_close', 'tbody', -1);\n tbodyLines[1] = nextLine;\n }\n\n token = state.push('table_close', 'table', -1);\n tableLines[1] = nextLine;\n\n state.parentType = oldParentType;\n state.line = nextLine;\n return true;\n};\n","// Code block (4 spaces padded)\n\n'use strict';\n\n\nmodule.exports = function code(state, startLine, endLine/*, silent*/) {\n var nextLine, last, token;\n\n if (state.sCount[startLine] - state.blkIndent < 4) { return false; }\n\n last = nextLine = startLine + 1;\n\n while (nextLine < endLine) {\n if (state.isEmpty(nextLine)) {\n nextLine++;\n continue;\n }\n\n if (state.sCount[nextLine] - state.blkIndent >= 4) {\n nextLine++;\n last = nextLine;\n continue;\n }\n break;\n }\n\n state.line = last;\n\n token = state.push('code_block', 'code', 0);\n token.content = state.getLines(startLine, last, 4 + state.blkIndent, false) + '\\n';\n token.map = [ startLine, state.line ];\n\n return true;\n};\n","// fences (``` lang, ~~~ lang)\n\n'use strict';\n\n\nmodule.exports = function fence(state, startLine, endLine, silent) {\n var marker, len, params, nextLine, mem, token, markup,\n haveEndMarker = false,\n pos = state.bMarks[startLine] + state.tShift[startLine],\n max = state.eMarks[startLine];\n\n // if it's indented more than 3 spaces, it should be a code block\n if (state.sCount[startLine] - state.blkIndent >= 4) { return false; }\n\n if (pos + 3 > max) { return false; }\n\n marker = state.src.charCodeAt(pos);\n\n if (marker !== 0x7E/* ~ */ && marker !== 0x60 /* ` */) {\n return false;\n }\n\n // scan marker length\n mem = pos;\n pos = state.skipChars(pos, marker);\n\n len = pos - mem;\n\n if (len < 3) { return false; }\n\n markup = state.src.slice(mem, pos);\n params = state.src.slice(pos, max);\n\n if (marker === 0x60 /* ` */) {\n if (params.indexOf(String.fromCharCode(marker)) >= 0) {\n return false;\n }\n }\n\n // Since start is found, we can report success here in validation mode\n if (silent) { return true; }\n\n // search end of block\n nextLine = startLine;\n\n for (;;) {\n nextLine++;\n if (nextLine >= endLine) {\n // unclosed block should be autoclosed by end of document.\n // also block seems to be autoclosed by end of parent\n break;\n }\n\n pos = mem = state.bMarks[nextLine] + state.tShift[nextLine];\n max = state.eMarks[nextLine];\n\n if (pos < max && state.sCount[nextLine] < state.blkIndent) {\n // non-empty line with negative indent should stop the list:\n // - ```\n // test\n break;\n }\n\n if (state.src.charCodeAt(pos) !== marker) { continue; }\n\n if (state.sCount[nextLine] - state.blkIndent >= 4) {\n // closing fence should be indented less than 4 spaces\n continue;\n }\n\n pos = state.skipChars(pos, marker);\n\n // closing code fence must be at least as long as the opening one\n if (pos - mem < len) { continue; }\n\n // make sure tail has spaces only\n pos = state.skipSpaces(pos);\n\n if (pos < max) { continue; }\n\n haveEndMarker = true;\n // found!\n break;\n }\n\n // If a fence has heading spaces, they should be removed from its inner block\n len = state.sCount[startLine];\n\n state.line = nextLine + (haveEndMarker ? 1 : 0);\n\n token = state.push('fence', 'code', 0);\n token.info = params;\n token.content = state.getLines(startLine + 1, nextLine, len, true);\n token.markup = markup;\n token.map = [ startLine, state.line ];\n\n return true;\n};\n","// Block quotes\n\n'use strict';\n\nvar isSpace = require('../common/utils').isSpace;\n\n\nmodule.exports = function blockquote(state, startLine, endLine, silent) {\n var adjustTab,\n ch,\n i,\n initial,\n l,\n lastLineEmpty,\n lines,\n nextLine,\n offset,\n oldBMarks,\n oldBSCount,\n oldIndent,\n oldParentType,\n oldSCount,\n oldTShift,\n spaceAfterMarker,\n terminate,\n terminatorRules,\n token,\n isOutdented,\n oldLineMax = state.lineMax,\n pos = state.bMarks[startLine] + state.tShift[startLine],\n max = state.eMarks[startLine];\n\n // if it's indented more than 3 spaces, it should be a code block\n if (state.sCount[startLine] - state.blkIndent >= 4) { return false; }\n\n // check the block quote marker\n if (state.src.charCodeAt(pos++) !== 0x3E/* > */) { return false; }\n\n // we know that it's going to be a valid blockquote,\n // so no point trying to find the end of it in silent mode\n if (silent) { return true; }\n\n // set offset past spaces and \">\"\n initial = offset = state.sCount[startLine] + 1;\n\n // skip one optional space after '>'\n if (state.src.charCodeAt(pos) === 0x20 /* space */) {\n // ' > test '\n // ^ -- position start of line here:\n pos++;\n initial++;\n offset++;\n adjustTab = false;\n spaceAfterMarker = true;\n } else if (state.src.charCodeAt(pos) === 0x09 /* tab */) {\n spaceAfterMarker = true;\n\n if ((state.bsCount[startLine] + offset) % 4 === 3) {\n // ' >\\t test '\n // ^ -- position start of line here (tab has width===1)\n pos++;\n initial++;\n offset++;\n adjustTab = false;\n } else {\n // ' >\\t test '\n // ^ -- position start of line here + shift bsCount slightly\n // to make extra space appear\n adjustTab = true;\n }\n } else {\n spaceAfterMarker = false;\n }\n\n oldBMarks = [ state.bMarks[startLine] ];\n state.bMarks[startLine] = pos;\n\n while (pos < max) {\n ch = state.src.charCodeAt(pos);\n\n if (isSpace(ch)) {\n if (ch === 0x09) {\n offset += 4 - (offset + state.bsCount[startLine] + (adjustTab ? 1 : 0)) % 4;\n } else {\n offset++;\n }\n } else {\n break;\n }\n\n pos++;\n }\n\n oldBSCount = [ state.bsCount[startLine] ];\n state.bsCount[startLine] = state.sCount[startLine] + 1 + (spaceAfterMarker ? 1 : 0);\n\n lastLineEmpty = pos >= max;\n\n oldSCount = [ state.sCount[startLine] ];\n state.sCount[startLine] = offset - initial;\n\n oldTShift = [ state.tShift[startLine] ];\n state.tShift[startLine] = pos - state.bMarks[startLine];\n\n terminatorRules = state.md.block.ruler.getRules('blockquote');\n\n oldParentType = state.parentType;\n state.parentType = 'blockquote';\n\n // Search the end of the block\n //\n // Block ends with either:\n // 1. an empty line outside:\n // ```\n // > test\n //\n // ```\n // 2. an empty line inside:\n // ```\n // >\n // test\n // ```\n // 3. another tag:\n // ```\n // > test\n // - - -\n // ```\n for (nextLine = startLine + 1; nextLine < endLine; nextLine++) {\n // check if it's outdented, i.e. it's inside list item and indented\n // less than said list item:\n //\n // ```\n // 1. anything\n // > current blockquote\n // 2. checking this line\n // ```\n isOutdented = state.sCount[nextLine] < state.blkIndent;\n\n pos = state.bMarks[nextLine] + state.tShift[nextLine];\n max = state.eMarks[nextLine];\n\n if (pos >= max) {\n // Case 1: line is not inside the blockquote, and this line is empty.\n break;\n }\n\n if (state.src.charCodeAt(pos++) === 0x3E/* > */ && !isOutdented) {\n // This line is inside the blockquote.\n\n // set offset past spaces and \">\"\n initial = offset = state.sCount[nextLine] + 1;\n\n // skip one optional space after '>'\n if (state.src.charCodeAt(pos) === 0x20 /* space */) {\n // ' > test '\n // ^ -- position start of line here:\n pos++;\n initial++;\n offset++;\n adjustTab = false;\n spaceAfterMarker = true;\n } else if (state.src.charCodeAt(pos) === 0x09 /* tab */) {\n spaceAfterMarker = true;\n\n if ((state.bsCount[nextLine] + offset) % 4 === 3) {\n // ' >\\t test '\n // ^ -- position start of line here (tab has width===1)\n pos++;\n initial++;\n offset++;\n adjustTab = false;\n } else {\n // ' >\\t test '\n // ^ -- position start of line here + shift bsCount slightly\n // to make extra space appear\n adjustTab = true;\n }\n } else {\n spaceAfterMarker = false;\n }\n\n oldBMarks.push(state.bMarks[nextLine]);\n state.bMarks[nextLine] = pos;\n\n while (pos < max) {\n ch = state.src.charCodeAt(pos);\n\n if (isSpace(ch)) {\n if (ch === 0x09) {\n offset += 4 - (offset + state.bsCount[nextLine] + (adjustTab ? 1 : 0)) % 4;\n } else {\n offset++;\n }\n } else {\n break;\n }\n\n pos++;\n }\n\n lastLineEmpty = pos >= max;\n\n oldBSCount.push(state.bsCount[nextLine]);\n state.bsCount[nextLine] = state.sCount[nextLine] + 1 + (spaceAfterMarker ? 1 : 0);\n\n oldSCount.push(state.sCount[nextLine]);\n state.sCount[nextLine] = offset - initial;\n\n oldTShift.push(state.tShift[nextLine]);\n state.tShift[nextLine] = pos - state.bMarks[nextLine];\n continue;\n }\n\n // Case 2: line is not inside the blockquote, and the last line was empty.\n if (lastLineEmpty) { break; }\n\n // Case 3: another tag found.\n terminate = false;\n for (i = 0, l = terminatorRules.length; i < l; i++) {\n if (terminatorRules[i](state, nextLine, endLine, true)) {\n terminate = true;\n break;\n }\n }\n\n if (terminate) {\n // Quirk to enforce \"hard termination mode\" for paragraphs;\n // normally if you call `tokenize(state, startLine, nextLine)`,\n // paragraphs will look below nextLine for paragraph continuation,\n // but if blockquote is terminated by another tag, they shouldn't\n state.lineMax = nextLine;\n\n if (state.blkIndent !== 0) {\n // state.blkIndent was non-zero, we now set it to zero,\n // so we need to re-calculate all offsets to appear as\n // if indent wasn't changed\n oldBMarks.push(state.bMarks[nextLine]);\n oldBSCount.push(state.bsCount[nextLine]);\n oldTShift.push(state.tShift[nextLine]);\n oldSCount.push(state.sCount[nextLine]);\n state.sCount[nextLine] -= state.blkIndent;\n }\n\n break;\n }\n\n oldBMarks.push(state.bMarks[nextLine]);\n oldBSCount.push(state.bsCount[nextLine]);\n oldTShift.push(state.tShift[nextLine]);\n oldSCount.push(state.sCount[nextLine]);\n\n // A negative indentation means that this is a paragraph continuation\n //\n state.sCount[nextLine] = -1;\n }\n\n oldIndent = state.blkIndent;\n state.blkIndent = 0;\n\n token = state.push('blockquote_open', 'blockquote', 1);\n token.markup = '>';\n token.map = lines = [ startLine, 0 ];\n\n state.md.block.tokenize(state, startLine, nextLine);\n\n token = state.push('blockquote_close', 'blockquote', -1);\n token.markup = '>';\n\n state.lineMax = oldLineMax;\n state.parentType = oldParentType;\n lines[1] = state.line;\n\n // Restore original tShift; this might not be necessary since the parser\n // has already been here, but just to make sure we can do that.\n for (i = 0; i < oldTShift.length; i++) {\n state.bMarks[i + startLine] = oldBMarks[i];\n state.tShift[i + startLine] = oldTShift[i];\n state.sCount[i + startLine] = oldSCount[i];\n state.bsCount[i + startLine] = oldBSCount[i];\n }\n state.blkIndent = oldIndent;\n\n return true;\n};\n","// Horizontal rule\n\n'use strict';\n\nvar isSpace = require('../common/utils').isSpace;\n\n\nmodule.exports = function hr(state, startLine, endLine, silent) {\n var marker, cnt, ch, token,\n pos = state.bMarks[startLine] + state.tShift[startLine],\n max = state.eMarks[startLine];\n\n // if it's indented more than 3 spaces, it should be a code block\n if (state.sCount[startLine] - state.blkIndent >= 4) { return false; }\n\n marker = state.src.charCodeAt(pos++);\n\n // Check hr marker\n if (marker !== 0x2A/* * */ &&\n marker !== 0x2D/* - */ &&\n marker !== 0x5F/* _ */) {\n return false;\n }\n\n // markers can be mixed with spaces, but there should be at least 3 of them\n\n cnt = 1;\n while (pos < max) {\n ch = state.src.charCodeAt(pos++);\n if (ch !== marker && !isSpace(ch)) { return false; }\n if (ch === marker) { cnt++; }\n }\n\n if (cnt < 3) { return false; }\n\n if (silent) { return true; }\n\n state.line = startLine + 1;\n\n token = state.push('hr', 'hr', 0);\n token.map = [ startLine, state.line ];\n token.markup = Array(cnt + 1).join(String.fromCharCode(marker));\n\n return true;\n};\n","// Lists\n\n'use strict';\n\nvar isSpace = require('../common/utils').isSpace;\n\n\n// Search `[-+*][\\n ]`, returns next pos after marker on success\n// or -1 on fail.\nfunction skipBulletListMarker(state, startLine) {\n var marker, pos, max, ch;\n\n pos = state.bMarks[startLine] + state.tShift[startLine];\n max = state.eMarks[startLine];\n\n marker = state.src.charCodeAt(pos++);\n // Check bullet\n if (marker !== 0x2A/* * */ &&\n marker !== 0x2D/* - */ &&\n marker !== 0x2B/* + */) {\n return -1;\n }\n\n if (pos < max) {\n ch = state.src.charCodeAt(pos);\n\n if (!isSpace(ch)) {\n // \" -test \" - is not a list item\n return -1;\n }\n }\n\n return pos;\n}\n\n// Search `\\d+[.)][\\n ]`, returns next pos after marker on success\n// or -1 on fail.\nfunction skipOrderedListMarker(state, startLine) {\n var ch,\n start = state.bMarks[startLine] + state.tShift[startLine],\n pos = start,\n max = state.eMarks[startLine];\n\n // List marker should have at least 2 chars (digit + dot)\n if (pos + 1 >= max) { return -1; }\n\n ch = state.src.charCodeAt(pos++);\n\n if (ch < 0x30/* 0 */ || ch > 0x39/* 9 */) { return -1; }\n\n for (;;) {\n // EOL -> fail\n if (pos >= max) { return -1; }\n\n ch = state.src.charCodeAt(pos++);\n\n if (ch >= 0x30/* 0 */ && ch <= 0x39/* 9 */) {\n\n // List marker should have no more than 9 digits\n // (prevents integer overflow in browsers)\n if (pos - start >= 10) { return -1; }\n\n continue;\n }\n\n // found valid marker\n if (ch === 0x29/* ) */ || ch === 0x2e/* . */) {\n break;\n }\n\n return -1;\n }\n\n\n if (pos < max) {\n ch = state.src.charCodeAt(pos);\n\n if (!isSpace(ch)) {\n // \" 1.test \" - is not a list item\n return -1;\n }\n }\n return pos;\n}\n\nfunction markTightParagraphs(state, idx) {\n var i, l,\n level = state.level + 2;\n\n for (i = idx + 2, l = state.tokens.length - 2; i < l; i++) {\n if (state.tokens[i].level === level && state.tokens[i].type === 'paragraph_open') {\n state.tokens[i + 2].hidden = true;\n state.tokens[i].hidden = true;\n i += 2;\n }\n }\n}\n\n\nmodule.exports = function list(state, startLine, endLine, silent) {\n var ch,\n contentStart,\n i,\n indent,\n indentAfterMarker,\n initial,\n isOrdered,\n itemLines,\n l,\n listLines,\n listTokIdx,\n markerCharCode,\n markerValue,\n max,\n nextLine,\n offset,\n oldListIndent,\n oldParentType,\n oldSCount,\n oldTShift,\n oldTight,\n pos,\n posAfterMarker,\n prevEmptyEnd,\n start,\n terminate,\n terminatorRules,\n token,\n isTerminatingParagraph = false,\n tight = true;\n\n // if it's indented more than 3 spaces, it should be a code block\n if (state.sCount[startLine] - state.blkIndent >= 4) { return false; }\n\n // Special case:\n // - item 1\n // - item 2\n // - item 3\n // - item 4\n // - this one is a paragraph continuation\n if (state.listIndent >= 0 &&\n state.sCount[startLine] - state.listIndent >= 4 &&\n state.sCount[startLine] < state.blkIndent) {\n return false;\n }\n\n // limit conditions when list can interrupt\n // a paragraph (validation mode only)\n if (silent && state.parentType === 'paragraph') {\n // Next list item should still terminate previous list item;\n //\n // This code can fail if plugins use blkIndent as well as lists,\n // but I hope the spec gets fixed long before that happens.\n //\n if (state.tShift[startLine] >= state.blkIndent) {\n isTerminatingParagraph = true;\n }\n }\n\n // Detect list type and position after marker\n if ((posAfterMarker = skipOrderedListMarker(state, startLine)) >= 0) {\n isOrdered = true;\n start = state.bMarks[startLine] + state.tShift[startLine];\n markerValue = Number(state.src.slice(start, posAfterMarker - 1));\n\n // If we're starting a new ordered list right after\n // a paragraph, it should start with 1.\n if (isTerminatingParagraph && markerValue !== 1) return false;\n\n } else if ((posAfterMarker = skipBulletListMarker(state, startLine)) >= 0) {\n isOrdered = false;\n\n } else {\n return false;\n }\n\n // If we're starting a new unordered list right after\n // a paragraph, first line should not be empty.\n if (isTerminatingParagraph) {\n if (state.skipSpaces(posAfterMarker) >= state.eMarks[startLine]) return false;\n }\n\n // We should terminate list on style change. Remember first one to compare.\n markerCharCode = state.src.charCodeAt(posAfterMarker - 1);\n\n // For validation mode we can terminate immediately\n if (silent) { return true; }\n\n // Start list\n listTokIdx = state.tokens.length;\n\n if (isOrdered) {\n token = state.push('ordered_list_open', 'ol', 1);\n if (markerValue !== 1) {\n token.attrs = [ [ 'start', markerValue ] ];\n }\n\n } else {\n token = state.push('bullet_list_open', 'ul', 1);\n }\n\n token.map = listLines = [ startLine, 0 ];\n token.markup = String.fromCharCode(markerCharCode);\n\n //\n // Iterate list items\n //\n\n nextLine = startLine;\n prevEmptyEnd = false;\n terminatorRules = state.md.block.ruler.getRules('list');\n\n oldParentType = state.parentType;\n state.parentType = 'list';\n\n while (nextLine < endLine) {\n pos = posAfterMarker;\n max = state.eMarks[nextLine];\n\n initial = offset = state.sCount[nextLine] + posAfterMarker - (state.bMarks[startLine] + state.tShift[startLine]);\n\n while (pos < max) {\n ch = state.src.charCodeAt(pos);\n\n if (ch === 0x09) {\n offset += 4 - (offset + state.bsCount[nextLine]) % 4;\n } else if (ch === 0x20) {\n offset++;\n } else {\n break;\n }\n\n pos++;\n }\n\n contentStart = pos;\n\n if (contentStart >= max) {\n // trimming space in \"- \\n 3\" case, indent is 1 here\n indentAfterMarker = 1;\n } else {\n indentAfterMarker = offset - initial;\n }\n\n // If we have more than 4 spaces, the indent is 1\n // (the rest is just indented code block)\n if (indentAfterMarker > 4) { indentAfterMarker = 1; }\n\n // \" - test\"\n // ^^^^^ - calculating total length of this thing\n indent = initial + indentAfterMarker;\n\n // Run subparser & write tokens\n token = state.push('list_item_open', 'li', 1);\n token.markup = String.fromCharCode(markerCharCode);\n token.map = itemLines = [ startLine, 0 ];\n if (isOrdered) {\n token.info = state.src.slice(start, posAfterMarker - 1);\n }\n\n // change current state, then restore it after parser subcall\n oldTight = state.tight;\n oldTShift = state.tShift[startLine];\n oldSCount = state.sCount[startLine];\n\n // - example list\n // ^ listIndent position will be here\n // ^ blkIndent position will be here\n //\n oldListIndent = state.listIndent;\n state.listIndent = state.blkIndent;\n state.blkIndent = indent;\n\n state.tight = true;\n state.tShift[startLine] = contentStart - state.bMarks[startLine];\n state.sCount[startLine] = offset;\n\n if (contentStart >= max && state.isEmpty(startLine + 1)) {\n // workaround for this case\n // (list item is empty, list terminates before \"foo\"):\n // ~~~~~~~~\n // -\n //\n // foo\n // ~~~~~~~~\n state.line = Math.min(state.line + 2, endLine);\n } else {\n state.md.block.tokenize(state, startLine, endLine, true);\n }\n\n // If any of list item is tight, mark list as tight\n if (!state.tight || prevEmptyEnd) {\n tight = false;\n }\n // Item become loose if finish with empty line,\n // but we should filter last element, because it means list finish\n prevEmptyEnd = (state.line - startLine) > 1 && state.isEmpty(state.line - 1);\n\n state.blkIndent = state.listIndent;\n state.listIndent = oldListIndent;\n state.tShift[startLine] = oldTShift;\n state.sCount[startLine] = oldSCount;\n state.tight = oldTight;\n\n token = state.push('list_item_close', 'li', -1);\n token.markup = String.fromCharCode(markerCharCode);\n\n nextLine = startLine = state.line;\n itemLines[1] = nextLine;\n contentStart = state.bMarks[startLine];\n\n if (nextLine >= endLine) { break; }\n\n //\n // Try to check if list is terminated or continued.\n //\n if (state.sCount[nextLine] < state.blkIndent) { break; }\n\n // if it's indented more than 3 spaces, it should be a code block\n if (state.sCount[startLine] - state.blkIndent >= 4) { break; }\n\n // fail if terminating block found\n terminate = false;\n for (i = 0, l = terminatorRules.length; i < l; i++) {\n if (terminatorRules[i](state, nextLine, endLine, true)) {\n terminate = true;\n break;\n }\n }\n if (terminate) { break; }\n\n // fail if list has another type\n if (isOrdered) {\n posAfterMarker = skipOrderedListMarker(state, nextLine);\n if (posAfterMarker < 0) { break; }\n start = state.bMarks[nextLine] + state.tShift[nextLine];\n } else {\n posAfterMarker = skipBulletListMarker(state, nextLine);\n if (posAfterMarker < 0) { break; }\n }\n\n if (markerCharCode !== state.src.charCodeAt(posAfterMarker - 1)) { break; }\n }\n\n // Finalize list\n if (isOrdered) {\n token = state.push('ordered_list_close', 'ol', -1);\n } else {\n token = state.push('bullet_list_close', 'ul', -1);\n }\n token.markup = String.fromCharCode(markerCharCode);\n\n listLines[1] = nextLine;\n state.line = nextLine;\n\n state.parentType = oldParentType;\n\n // mark paragraphs tight if needed\n if (tight) {\n markTightParagraphs(state, listTokIdx);\n }\n\n return true;\n};\n","'use strict';\n\n\nvar normalizeReference = require('../common/utils').normalizeReference;\nvar isSpace = require('../common/utils').isSpace;\n\n\nmodule.exports = function reference(state, startLine, _endLine, silent) {\n var ch,\n destEndPos,\n destEndLineNo,\n endLine,\n href,\n i,\n l,\n label,\n labelEnd,\n oldParentType,\n res,\n start,\n str,\n terminate,\n terminatorRules,\n title,\n lines = 0,\n pos = state.bMarks[startLine] + state.tShift[startLine],\n max = state.eMarks[startLine],\n nextLine = startLine + 1;\n\n // if it's indented more than 3 spaces, it should be a code block\n if (state.sCount[startLine] - state.blkIndent >= 4) { return false; }\n\n if (state.src.charCodeAt(pos) !== 0x5B/* [ */) { return false; }\n\n // Simple check to quickly interrupt scan on [link](url) at the start of line.\n // Can be useful on practice: https://github.com/markdown-it/markdown-it/issues/54\n while (++pos < max) {\n if (state.src.charCodeAt(pos) === 0x5D /* ] */ &&\n state.src.charCodeAt(pos - 1) !== 0x5C/* \\ */) {\n if (pos + 1 === max) { return false; }\n if (state.src.charCodeAt(pos + 1) !== 0x3A/* : */) { return false; }\n break;\n }\n }\n\n endLine = state.lineMax;\n\n // jump line-by-line until empty one or EOF\n terminatorRules = state.md.block.ruler.getRules('reference');\n\n oldParentType = state.parentType;\n state.parentType = 'reference';\n\n for (; nextLine < endLine && !state.isEmpty(nextLine); nextLine++) {\n // this would be a code block normally, but after paragraph\n // it's considered a lazy continuation regardless of what's there\n if (state.sCount[nextLine] - state.blkIndent > 3) { continue; }\n\n // quirk for blockquotes, this line should already be checked by that rule\n if (state.sCount[nextLine] < 0) { continue; }\n\n // Some tags can terminate paragraph without empty line.\n terminate = false;\n for (i = 0, l = terminatorRules.length; i < l; i++) {\n if (terminatorRules[i](state, nextLine, endLine, true)) {\n terminate = true;\n break;\n }\n }\n if (terminate) { break; }\n }\n\n str = state.getLines(startLine, nextLine, state.blkIndent, false).trim();\n max = str.length;\n\n for (pos = 1; pos < max; pos++) {\n ch = str.charCodeAt(pos);\n if (ch === 0x5B /* [ */) {\n return false;\n } else if (ch === 0x5D /* ] */) {\n labelEnd = pos;\n break;\n } else if (ch === 0x0A /* \\n */) {\n lines++;\n } else if (ch === 0x5C /* \\ */) {\n pos++;\n if (pos < max && str.charCodeAt(pos) === 0x0A) {\n lines++;\n }\n }\n }\n\n if (labelEnd < 0 || str.charCodeAt(labelEnd + 1) !== 0x3A/* : */) { return false; }\n\n // [label]: destination 'title'\n // ^^^ skip optional whitespace here\n for (pos = labelEnd + 2; pos < max; pos++) {\n ch = str.charCodeAt(pos);\n if (ch === 0x0A) {\n lines++;\n } else if (isSpace(ch)) {\n /*eslint no-empty:0*/\n } else {\n break;\n }\n }\n\n // [label]: destination 'title'\n // ^^^^^^^^^^^ parse this\n res = state.md.helpers.parseLinkDestination(str, pos, max);\n if (!res.ok) { return false; }\n\n href = state.md.normalizeLink(res.str);\n if (!state.md.validateLink(href)) { return false; }\n\n pos = res.pos;\n lines += res.lines;\n\n // save cursor state, we could require to rollback later\n destEndPos = pos;\n destEndLineNo = lines;\n\n // [label]: destination 'title'\n // ^^^ skipping those spaces\n start = pos;\n for (; pos < max; pos++) {\n ch = str.charCodeAt(pos);\n if (ch === 0x0A) {\n lines++;\n } else if (isSpace(ch)) {\n /*eslint no-empty:0*/\n } else {\n break;\n }\n }\n\n // [label]: destination 'title'\n // ^^^^^^^ parse this\n res = state.md.helpers.parseLinkTitle(str, pos, max);\n if (pos < max && start !== pos && res.ok) {\n title = res.str;\n pos = res.pos;\n lines += res.lines;\n } else {\n title = '';\n pos = destEndPos;\n lines = destEndLineNo;\n }\n\n // skip trailing spaces until the rest of the line\n while (pos < max) {\n ch = str.charCodeAt(pos);\n if (!isSpace(ch)) { break; }\n pos++;\n }\n\n if (pos < max && str.charCodeAt(pos) !== 0x0A) {\n if (title) {\n // garbage at the end of the line after title,\n // but it could still be a valid reference if we roll back\n title = '';\n pos = destEndPos;\n lines = destEndLineNo;\n while (pos < max) {\n ch = str.charCodeAt(pos);\n if (!isSpace(ch)) { break; }\n pos++;\n }\n }\n }\n\n if (pos < max && str.charCodeAt(pos) !== 0x0A) {\n // garbage at the end of the line\n return false;\n }\n\n label = normalizeReference(str.slice(1, labelEnd));\n if (!label) {\n // CommonMark 0.20 disallows empty labels\n return false;\n }\n\n // Reference can not terminate anything. This check is for safety only.\n /*istanbul ignore if*/\n if (silent) { return true; }\n\n if (typeof state.env.references === 'undefined') {\n state.env.references = {};\n }\n if (typeof state.env.references[label] === 'undefined') {\n state.env.references[label] = { title: title, href: href };\n }\n\n state.parentType = oldParentType;\n\n state.line = startLine + lines + 1;\n return true;\n};\n","// HTML block\n\n'use strict';\n\n\nvar block_names = require('../common/html_blocks');\nvar HTML_OPEN_CLOSE_TAG_RE = require('../common/html_re').HTML_OPEN_CLOSE_TAG_RE;\n\n// An array of opening and corresponding closing sequences for html tags,\n// last argument defines whether it can terminate a paragraph or not\n//\nvar HTML_SEQUENCES = [\n [ /^<(script|pre|style|textarea)(?=(\\s|>|$))/i, /<\\/(script|pre|style|textarea)>/i, true ],\n [ /^/, true ],\n [ /^<\\?/, /\\?>/, true ],\n [ /^/, true ],\n [ /^/, true ],\n [ new RegExp('^|$))', 'i'), /^$/, true ],\n [ new RegExp(HTML_OPEN_CLOSE_TAG_RE.source + '\\\\s*$'), /^$/, false ]\n];\n\n\nmodule.exports = function html_block(state, startLine, endLine, silent) {\n var i, nextLine, token, lineText,\n pos = state.bMarks[startLine] + state.tShift[startLine],\n max = state.eMarks[startLine];\n\n // if it's indented more than 3 spaces, it should be a code block\n if (state.sCount[startLine] - state.blkIndent >= 4) { return false; }\n\n if (!state.md.options.html) { return false; }\n\n if (state.src.charCodeAt(pos) !== 0x3C/* < */) { return false; }\n\n lineText = state.src.slice(pos, max);\n\n for (i = 0; i < HTML_SEQUENCES.length; i++) {\n if (HTML_SEQUENCES[i][0].test(lineText)) { break; }\n }\n\n if (i === HTML_SEQUENCES.length) { return false; }\n\n if (silent) {\n // true if this sequence can be a terminator, false otherwise\n return HTML_SEQUENCES[i][2];\n }\n\n nextLine = startLine + 1;\n\n // If we are here - we detected HTML block.\n // Let's roll down till block end.\n if (!HTML_SEQUENCES[i][1].test(lineText)) {\n for (; nextLine < endLine; nextLine++) {\n if (state.sCount[nextLine] < state.blkIndent) { break; }\n\n pos = state.bMarks[nextLine] + state.tShift[nextLine];\n max = state.eMarks[nextLine];\n lineText = state.src.slice(pos, max);\n\n if (HTML_SEQUENCES[i][1].test(lineText)) {\n if (lineText.length !== 0) { nextLine++; }\n break;\n }\n }\n }\n\n state.line = nextLine;\n\n token = state.push('html_block', '', 0);\n token.map = [ startLine, nextLine ];\n token.content = state.getLines(startLine, nextLine, state.blkIndent, true);\n\n return true;\n};\n","// List of valid html blocks names, accorting to commonmark spec\n// http://jgm.github.io/CommonMark/spec.html#html-blocks\n\n'use strict';\n\n\nmodule.exports = [\n 'address',\n 'article',\n 'aside',\n 'base',\n 'basefont',\n 'blockquote',\n 'body',\n 'caption',\n 'center',\n 'col',\n 'colgroup',\n 'dd',\n 'details',\n 'dialog',\n 'dir',\n 'div',\n 'dl',\n 'dt',\n 'fieldset',\n 'figcaption',\n 'figure',\n 'footer',\n 'form',\n 'frame',\n 'frameset',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'head',\n 'header',\n 'hr',\n 'html',\n 'iframe',\n 'legend',\n 'li',\n 'link',\n 'main',\n 'menu',\n 'menuitem',\n 'nav',\n 'noframes',\n 'ol',\n 'optgroup',\n 'option',\n 'p',\n 'param',\n 'section',\n 'source',\n 'summary',\n 'table',\n 'tbody',\n 'td',\n 'tfoot',\n 'th',\n 'thead',\n 'title',\n 'tr',\n 'track',\n 'ul'\n];\n","// heading (#, ##, ...)\n\n'use strict';\n\nvar isSpace = require('../common/utils').isSpace;\n\n\nmodule.exports = function heading(state, startLine, endLine, silent) {\n var ch, level, tmp, token,\n pos = state.bMarks[startLine] + state.tShift[startLine],\n max = state.eMarks[startLine];\n\n // if it's indented more than 3 spaces, it should be a code block\n if (state.sCount[startLine] - state.blkIndent >= 4) { return false; }\n\n ch = state.src.charCodeAt(pos);\n\n if (ch !== 0x23/* # */ || pos >= max) { return false; }\n\n // count heading level\n level = 1;\n ch = state.src.charCodeAt(++pos);\n while (ch === 0x23/* # */ && pos < max && level <= 6) {\n level++;\n ch = state.src.charCodeAt(++pos);\n }\n\n if (level > 6 || (pos < max && !isSpace(ch))) { return false; }\n\n if (silent) { return true; }\n\n // Let's cut tails like ' ### ' from the end of string\n\n max = state.skipSpacesBack(max, pos);\n tmp = state.skipCharsBack(max, 0x23, pos); // #\n if (tmp > pos && isSpace(state.src.charCodeAt(tmp - 1))) {\n max = tmp;\n }\n\n state.line = startLine + 1;\n\n token = state.push('heading_open', 'h' + String(level), 1);\n token.markup = '########'.slice(0, level);\n token.map = [ startLine, state.line ];\n\n token = state.push('inline', '', 0);\n token.content = state.src.slice(pos, max).trim();\n token.map = [ startLine, state.line ];\n token.children = [];\n\n token = state.push('heading_close', 'h' + String(level), -1);\n token.markup = '########'.slice(0, level);\n\n return true;\n};\n","// lheading (---, ===)\n\n'use strict';\n\n\nmodule.exports = function lheading(state, startLine, endLine/*, silent*/) {\n var content, terminate, i, l, token, pos, max, level, marker,\n nextLine = startLine + 1, oldParentType,\n terminatorRules = state.md.block.ruler.getRules('paragraph');\n\n // if it's indented more than 3 spaces, it should be a code block\n if (state.sCount[startLine] - state.blkIndent >= 4) { return false; }\n\n oldParentType = state.parentType;\n state.parentType = 'paragraph'; // use paragraph to match terminatorRules\n\n // jump line-by-line until empty one or EOF\n for (; nextLine < endLine && !state.isEmpty(nextLine); nextLine++) {\n // this would be a code block normally, but after paragraph\n // it's considered a lazy continuation regardless of what's there\n if (state.sCount[nextLine] - state.blkIndent > 3) { continue; }\n\n //\n // Check for underline in setext header\n //\n if (state.sCount[nextLine] >= state.blkIndent) {\n pos = state.bMarks[nextLine] + state.tShift[nextLine];\n max = state.eMarks[nextLine];\n\n if (pos < max) {\n marker = state.src.charCodeAt(pos);\n\n if (marker === 0x2D/* - */ || marker === 0x3D/* = */) {\n pos = state.skipChars(pos, marker);\n pos = state.skipSpaces(pos);\n\n if (pos >= max) {\n level = (marker === 0x3D/* = */ ? 1 : 2);\n break;\n }\n }\n }\n }\n\n // quirk for blockquotes, this line should already be checked by that rule\n if (state.sCount[nextLine] < 0) { continue; }\n\n // Some tags can terminate paragraph without empty line.\n terminate = false;\n for (i = 0, l = terminatorRules.length; i < l; i++) {\n if (terminatorRules[i](state, nextLine, endLine, true)) {\n terminate = true;\n break;\n }\n }\n if (terminate) { break; }\n }\n\n if (!level) {\n // Didn't find valid underline\n return false;\n }\n\n content = state.getLines(startLine, nextLine, state.blkIndent, false).trim();\n\n state.line = nextLine + 1;\n\n token = state.push('heading_open', 'h' + String(level), 1);\n token.markup = String.fromCharCode(marker);\n token.map = [ startLine, state.line ];\n\n token = state.push('inline', '', 0);\n token.content = content;\n token.map = [ startLine, state.line - 1 ];\n token.children = [];\n\n token = state.push('heading_close', 'h' + String(level), -1);\n token.markup = String.fromCharCode(marker);\n\n state.parentType = oldParentType;\n\n return true;\n};\n","// Paragraph\n\n'use strict';\n\n\nmodule.exports = function paragraph(state, startLine/*, endLine*/) {\n var content, terminate, i, l, token, oldParentType,\n nextLine = startLine + 1,\n terminatorRules = state.md.block.ruler.getRules('paragraph'),\n endLine = state.lineMax;\n\n oldParentType = state.parentType;\n state.parentType = 'paragraph';\n\n // jump line-by-line until empty one or EOF\n for (; nextLine < endLine && !state.isEmpty(nextLine); nextLine++) {\n // this would be a code block normally, but after paragraph\n // it's considered a lazy continuation regardless of what's there\n if (state.sCount[nextLine] - state.blkIndent > 3) { continue; }\n\n // quirk for blockquotes, this line should already be checked by that rule\n if (state.sCount[nextLine] < 0) { continue; }\n\n // Some tags can terminate paragraph without empty line.\n terminate = false;\n for (i = 0, l = terminatorRules.length; i < l; i++) {\n if (terminatorRules[i](state, nextLine, endLine, true)) {\n terminate = true;\n break;\n }\n }\n if (terminate) { break; }\n }\n\n content = state.getLines(startLine, nextLine, state.blkIndent, false).trim();\n\n state.line = nextLine;\n\n token = state.push('paragraph_open', 'p', 1);\n token.map = [ startLine, state.line ];\n\n token = state.push('inline', '', 0);\n token.content = content;\n token.map = [ startLine, state.line ];\n token.children = [];\n\n token = state.push('paragraph_close', 'p', -1);\n\n state.parentType = oldParentType;\n\n return true;\n};\n","// Parser state class\n\n'use strict';\n\nvar Token = require('../token');\nvar isSpace = require('../common/utils').isSpace;\n\n\nfunction StateBlock(src, md, env, tokens) {\n var ch, s, start, pos, len, indent, offset, indent_found;\n\n this.src = src;\n\n // link to parser instance\n this.md = md;\n\n this.env = env;\n\n //\n // Internal state vartiables\n //\n\n this.tokens = tokens;\n\n this.bMarks = []; // line begin offsets for fast jumps\n this.eMarks = []; // line end offsets for fast jumps\n this.tShift = []; // offsets of the first non-space characters (tabs not expanded)\n this.sCount = []; // indents for each line (tabs expanded)\n\n // An amount of virtual spaces (tabs expanded) between beginning\n // of each line (bMarks) and real beginning of that line.\n //\n // It exists only as a hack because blockquotes override bMarks\n // losing information in the process.\n //\n // It's used only when expanding tabs, you can think about it as\n // an initial tab length, e.g. bsCount=21 applied to string `\\t123`\n // means first tab should be expanded to 4-21%4 === 3 spaces.\n //\n this.bsCount = [];\n\n // block parser variables\n this.blkIndent = 0; // required block content indent (for example, if we are\n // inside a list, it would be positioned after list marker)\n this.line = 0; // line index in src\n this.lineMax = 0; // lines count\n this.tight = false; // loose/tight mode for lists\n this.ddIndent = -1; // indent of the current dd block (-1 if there isn't any)\n this.listIndent = -1; // indent of the current list block (-1 if there isn't any)\n\n // can be 'blockquote', 'list', 'root', 'paragraph' or 'reference'\n // used in lists to determine if they interrupt a paragraph\n this.parentType = 'root';\n\n this.level = 0;\n\n // renderer\n this.result = '';\n\n // Create caches\n // Generate markers.\n s = this.src;\n indent_found = false;\n\n for (start = pos = indent = offset = 0, len = s.length; pos < len; pos++) {\n ch = s.charCodeAt(pos);\n\n if (!indent_found) {\n if (isSpace(ch)) {\n indent++;\n\n if (ch === 0x09) {\n offset += 4 - offset % 4;\n } else {\n offset++;\n }\n continue;\n } else {\n indent_found = true;\n }\n }\n\n if (ch === 0x0A || pos === len - 1) {\n if (ch !== 0x0A) { pos++; }\n this.bMarks.push(start);\n this.eMarks.push(pos);\n this.tShift.push(indent);\n this.sCount.push(offset);\n this.bsCount.push(0);\n\n indent_found = false;\n indent = 0;\n offset = 0;\n start = pos + 1;\n }\n }\n\n // Push fake entry to simplify cache bounds checks\n this.bMarks.push(s.length);\n this.eMarks.push(s.length);\n this.tShift.push(0);\n this.sCount.push(0);\n this.bsCount.push(0);\n\n this.lineMax = this.bMarks.length - 1; // don't count last fake line\n}\n\n// Push new token to \"stream\".\n//\nStateBlock.prototype.push = function (type, tag, nesting) {\n var token = new Token(type, tag, nesting);\n token.block = true;\n\n if (nesting < 0) this.level--; // closing tag\n token.level = this.level;\n if (nesting > 0) this.level++; // opening tag\n\n this.tokens.push(token);\n return token;\n};\n\nStateBlock.prototype.isEmpty = function isEmpty(line) {\n return this.bMarks[line] + this.tShift[line] >= this.eMarks[line];\n};\n\nStateBlock.prototype.skipEmptyLines = function skipEmptyLines(from) {\n for (var max = this.lineMax; from < max; from++) {\n if (this.bMarks[from] + this.tShift[from] < this.eMarks[from]) {\n break;\n }\n }\n return from;\n};\n\n// Skip spaces from given position.\nStateBlock.prototype.skipSpaces = function skipSpaces(pos) {\n var ch;\n\n for (var max = this.src.length; pos < max; pos++) {\n ch = this.src.charCodeAt(pos);\n if (!isSpace(ch)) { break; }\n }\n return pos;\n};\n\n// Skip spaces from given position in reverse.\nStateBlock.prototype.skipSpacesBack = function skipSpacesBack(pos, min) {\n if (pos <= min) { return pos; }\n\n while (pos > min) {\n if (!isSpace(this.src.charCodeAt(--pos))) { return pos + 1; }\n }\n return pos;\n};\n\n// Skip char codes from given position\nStateBlock.prototype.skipChars = function skipChars(pos, code) {\n for (var max = this.src.length; pos < max; pos++) {\n if (this.src.charCodeAt(pos) !== code) { break; }\n }\n return pos;\n};\n\n// Skip char codes reverse from given position - 1\nStateBlock.prototype.skipCharsBack = function skipCharsBack(pos, code, min) {\n if (pos <= min) { return pos; }\n\n while (pos > min) {\n if (code !== this.src.charCodeAt(--pos)) { return pos + 1; }\n }\n return pos;\n};\n\n// cut lines range from source.\nStateBlock.prototype.getLines = function getLines(begin, end, indent, keepLastLF) {\n var i, lineIndent, ch, first, last, queue, lineStart,\n line = begin;\n\n if (begin >= end) {\n return '';\n }\n\n queue = new Array(end - begin);\n\n for (i = 0; line < end; line++, i++) {\n lineIndent = 0;\n lineStart = first = this.bMarks[line];\n\n if (line + 1 < end || keepLastLF) {\n // No need for bounds check because we have fake entry on tail.\n last = this.eMarks[line] + 1;\n } else {\n last = this.eMarks[line];\n }\n\n while (first < last && lineIndent < indent) {\n ch = this.src.charCodeAt(first);\n\n if (isSpace(ch)) {\n if (ch === 0x09) {\n lineIndent += 4 - (lineIndent + this.bsCount[line]) % 4;\n } else {\n lineIndent++;\n }\n } else if (first - lineStart < this.tShift[line]) {\n // patched tShift masked characters to look like spaces (blockquotes, list markers)\n lineIndent++;\n } else {\n break;\n }\n\n first++;\n }\n\n if (lineIndent > indent) {\n // partially expanding tabs in code blocks, e.g '\\t\\tfoobar'\n // with indent=2 becomes ' \\tfoobar'\n queue[i] = new Array(lineIndent - indent + 1).join(' ') + this.src.slice(first, last);\n } else {\n queue[i] = this.src.slice(first, last);\n }\n }\n\n return queue.join('');\n};\n\n// re-export Token class to use in block rules\nStateBlock.prototype.Token = Token;\n\n\nmodule.exports = StateBlock;\n","/** internal\n * class 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","// 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","// Proceess '\\n'\n\n'use strict';\n\nvar isSpace = require('../common/utils').isSpace;\n\n\nmodule.exports = function newline(state, silent) {\n var pmax, max, 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 && isSpace(state.src.charCodeAt(pos))) { pos++; }\n\n state.pos = pos;\n return true;\n};\n","// Process escaped chars and hardbreaks\n\n'use strict';\n\nvar isSpace = require('../common/utils').isSpace;\n\nvar ESCAPED = [];\n\nfor (var i = 0; i < 256; i++) { ESCAPED.push(0); }\n\n'\\\\!\"#$%&\\'()*+,./:;<=>?@[]^_`{|}~-'\n .split('').forEach(function (ch) { ESCAPED[ch.charCodeAt(0)] = 1; });\n\n\nmodule.exports = function escape(state, silent) {\n var 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","// Parse backticks\n\n'use strict';\n\n\nmodule.exports = function backtick(state, silent) {\n var start, max, marker, token, matchStart, matchEnd, openerLength, closerLength,\n pos = state.pos,\n ch = state.src.charCodeAt(pos);\n\n if (ch !== 0x60/* ` */) { return false; }\n\n start = pos;\n pos++;\n max = state.posMax;\n\n // scan marker length\n while (pos < max && state.src.charCodeAt(pos) === 0x60/* ` */) { pos++; }\n\n marker = state.src.slice(start, pos);\n openerLength = marker.length;\n\n if (state.backticksScanned && (state.backticks[openerLength] || 0) <= start) {\n if (!silent) state.pending += marker;\n state.pos += openerLength;\n return true;\n }\n\n matchStart = matchEnd = pos;\n\n // Nothing found in the cache, scan until the end of the line (or until marker is found)\n while ((matchStart = state.src.indexOf('`', matchEnd)) !== -1) {\n matchEnd = matchStart + 1;\n\n // scan marker length\n while (matchEnd < max && state.src.charCodeAt(matchEnd) === 0x60/* ` */) { matchEnd++; }\n\n closerLength = matchEnd - matchStart;\n\n if (closerLength === openerLength) {\n // Found matching closer length.\n if (!silent) {\n token = state.push('code_inline', 'code', 0);\n token.markup = marker;\n token.content = state.src.slice(pos, matchStart)\n .replace(/\\n/g, ' ')\n .replace(/^ (.+) $/, '$1');\n }\n state.pos = matchEnd;\n return true;\n }\n\n // Some different length found, put it in cache as upper limit of where closer can be found\n state.backticks[closerLength] = matchStart;\n }\n\n // Scanned through the end, didn't find anything\n state.backticksScanned = true;\n\n if (!silent) state.pending += marker;\n state.pos += openerLength;\n return true;\n};\n","// Process [link]( \"stuff\")\n\n'use strict';\n\nvar normalizeReference = require('../common/utils').normalizeReference;\nvar isSpace = require('../common/utils').isSpace;\n\n\nmodule.exports = function link(state, silent) {\n var attrs,\n code,\n label,\n labelEnd,\n labelStart,\n pos,\n res,\n ref,\n token,\n href = '',\n title = '',\n oldPos = state.pos,\n max = state.posMax,\n start = state.pos,\n parseReference = true;\n\n if (state.src.charCodeAt(state.pos) !== 0x5B/* [ */) { return false; }\n\n labelStart = state.pos + 1;\n labelEnd = state.md.helpers.parseLinkLabel(state, state.pos, true);\n\n // parser failed to find ']', so it's not a valid link\n if (labelEnd < 0) { return false; }\n\n pos = labelEnd + 1;\n if (pos < max && state.src.charCodeAt(pos) === 0x28/* ( */) {\n //\n // Inline link\n //\n\n // might have found a valid shortcut link, disable reference parsing\n parseReference = false;\n\n // [link]( \"title\" )\n // ^^ skipping these spaces\n pos++;\n for (; pos < max; pos++) {\n code = state.src.charCodeAt(pos);\n if (!isSpace(code) && code !== 0x0A) { break; }\n }\n if (pos >= max) { return false; }\n\n // [link]( \"title\" )\n // ^^^^^^ parsing link destination\n start = pos;\n res = state.md.helpers.parseLinkDestination(state.src, pos, state.posMax);\n if (res.ok) {\n href = state.md.normalizeLink(res.str);\n if (state.md.validateLink(href)) {\n pos = res.pos;\n } else {\n href = '';\n }\n\n // [link]( \"title\" )\n // ^^ skipping these spaces\n start = pos;\n for (; pos < max; pos++) {\n code = state.src.charCodeAt(pos);\n if (!isSpace(code) && code !== 0x0A) { break; }\n }\n\n // [link]( \"title\" )\n // ^^^^^^^ parsing link title\n res = state.md.helpers.parseLinkTitle(state.src, pos, state.posMax);\n if (pos < max && start !== pos && res.ok) {\n title = res.str;\n pos = res.pos;\n\n // [link]( \"title\" )\n // ^^ skipping these spaces\n for (; pos < max; pos++) {\n code = state.src.charCodeAt(pos);\n if (!isSpace(code) && code !== 0x0A) { break; }\n }\n }\n }\n\n if (pos >= max || state.src.charCodeAt(pos) !== 0x29/* ) */) {\n // parsing a valid shortcut link failed, fallback to reference\n parseReference = true;\n }\n pos++;\n }\n\n if (parseReference) {\n //\n // Link reference\n //\n if (typeof state.env.references === 'undefined') { return false; }\n\n if (pos < max && state.src.charCodeAt(pos) === 0x5B/* [ */) {\n start = pos + 1;\n pos = state.md.helpers.parseLinkLabel(state, pos);\n if (pos >= 0) {\n label = state.src.slice(start, pos++);\n } else {\n pos = labelEnd + 1;\n }\n } else {\n pos = labelEnd + 1;\n }\n\n // covers label === '' and label === undefined\n // (collapsed reference link and shortcut reference link respectively)\n if (!label) { label = state.src.slice(labelStart, labelEnd); }\n\n ref = state.env.references[normalizeReference(label)];\n if (!ref) {\n state.pos = oldPos;\n return false;\n }\n href = ref.href;\n title = ref.title;\n }\n\n //\n // We found the end of the link, and know for a fact it's a valid link;\n // so all that's left to do is to call tokenizer.\n //\n if (!silent) {\n state.pos = labelStart;\n state.posMax = labelEnd;\n\n token = state.push('link_open', 'a', 1);\n token.attrs = attrs = [ [ 'href', href ] ];\n if (title) {\n attrs.push([ 'title', title ]);\n }\n\n state.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","// Process ![image]( \"title\")\n\n'use strict';\n\nvar normalizeReference = require('../common/utils').normalizeReference;\nvar isSpace = require('../common/utils').isSpace;\n\n\nmodule.exports = function image(state, silent) {\n var attrs,\n code,\n content,\n label,\n labelEnd,\n labelStart,\n pos,\n ref,\n res,\n title,\n token,\n tokens,\n start,\n href = '',\n oldPos = state.pos,\n max = state.posMax;\n\n if (state.src.charCodeAt(state.pos) !== 0x21/* ! */) { return false; }\n if (state.src.charCodeAt(state.pos + 1) !== 0x5B/* [ */) { return false; }\n\n labelStart = state.pos + 2;\n labelEnd = state.md.helpers.parseLinkLabel(state, state.pos + 1, false);\n\n // parser failed to find ']', so it's not a valid link\n if (labelEnd < 0) { return false; }\n\n pos = labelEnd + 1;\n if (pos < max && state.src.charCodeAt(pos) === 0x28/* ( */) {\n //\n // Inline link\n //\n\n // [link]( \"title\" )\n // ^^ skipping these spaces\n pos++;\n for (; pos < max; pos++) {\n code = state.src.charCodeAt(pos);\n if (!isSpace(code) && code !== 0x0A) { break; }\n }\n if (pos >= max) { return false; }\n\n // [link]( \"title\" )\n // ^^^^^^ parsing link destination\n start = pos;\n res = state.md.helpers.parseLinkDestination(state.src, pos, state.posMax);\n if (res.ok) {\n href = state.md.normalizeLink(res.str);\n if (state.md.validateLink(href)) {\n pos = res.pos;\n } else {\n href = '';\n }\n }\n\n // [link]( \"title\" )\n // ^^ skipping these spaces\n start = pos;\n for (; pos < max; pos++) {\n code = state.src.charCodeAt(pos);\n if (!isSpace(code) && code !== 0x0A) { break; }\n }\n\n // [link]( \"title\" )\n // ^^^^^^^ parsing link title\n res = state.md.helpers.parseLinkTitle(state.src, pos, state.posMax);\n if (pos < max && start !== pos && res.ok) {\n title = res.str;\n pos = res.pos;\n\n // [link]( \"title\" )\n // ^^ skipping these spaces\n for (; pos < max; pos++) {\n code = state.src.charCodeAt(pos);\n if (!isSpace(code) && code !== 0x0A) { break; }\n }\n } else {\n title = '';\n }\n\n if (pos >= max || state.src.charCodeAt(pos) !== 0x29/* ) */) {\n state.pos = oldPos;\n return false;\n }\n pos++;\n } else {\n //\n // Link reference\n //\n if (typeof state.env.references === 'undefined') { return false; }\n\n if (pos < max && state.src.charCodeAt(pos) === 0x5B/* [ */) {\n start = pos + 1;\n pos = state.md.helpers.parseLinkLabel(state, pos);\n if (pos >= 0) {\n label = state.src.slice(start, pos++);\n } else {\n pos = labelEnd + 1;\n }\n } else {\n pos = labelEnd + 1;\n }\n\n // covers label === '' and label === undefined\n // (collapsed reference link and shortcut reference link respectively)\n if (!label) { label = state.src.slice(labelStart, labelEnd); }\n\n ref = state.env.references[normalizeReference(label)];\n if (!ref) {\n state.pos = oldPos;\n return false;\n }\n href = ref.href;\n title = ref.title;\n }\n\n //\n // We found the end of the link, and know for a fact it's a valid link;\n // so all that's left to do is to call tokenizer.\n //\n if (!silent) {\n content = state.src.slice(labelStart, labelEnd);\n\n state.md.inline.parse(\n content,\n state.md,\n state.env,\n tokens = []\n );\n\n token = state.push('image', 'img', 0);\n token.attrs = attrs = [ [ 'src', href ], [ 'alt', '' ] ];\n token.children = tokens;\n token.content = content;\n\n if (title) {\n attrs.push([ 'title', title ]);\n }\n }\n\n state.pos = pos;\n state.posMax = max;\n return true;\n};\n","// Process autolinks ''\n\n'use strict';\n\n\n/*eslint max-len:0*/\nvar EMAIL_RE = /^([a-zA-Z0-9.!#$%&'*+\\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*)$/;\nvar AUTOLINK_RE = /^([a-zA-Z][a-zA-Z0-9+.\\-]{1,31}):([^<>\\x00-\\x20]*)$/;\n\n\nmodule.exports = function autolink(state, silent) {\n var url, fullUrl, token, ch, start, max,\n pos = state.pos;\n\n if (state.src.charCodeAt(pos) !== 0x3C/* < */) { return false; }\n\n start = state.pos;\n max = state.posMax;\n\n for (;;) {\n if (++pos >= max) return false;\n\n ch = state.src.charCodeAt(pos);\n\n if (ch === 0x3C /* < */) return false;\n if (ch === 0x3E /* > */) break;\n }\n\n url = state.src.slice(start + 1, pos);\n\n if (AUTOLINK_RE.test(url)) {\n fullUrl = state.md.normalizeLink(url);\n if (!state.md.validateLink(fullUrl)) { return false; }\n\n if (!silent) {\n token = state.push('link_open', 'a', 1);\n token.attrs = [ [ 'href', fullUrl ] ];\n token.markup = 'autolink';\n token.info = 'auto';\n\n token = state.push('text', '', 0);\n token.content = state.md.normalizeLinkText(url);\n\n token = state.push('link_close', 'a', -1);\n token.markup = 'autolink';\n token.info = 'auto';\n }\n\n state.pos += url.length + 2;\n return true;\n }\n\n if (EMAIL_RE.test(url)) {\n fullUrl = state.md.normalizeLink('mailto:' + url);\n if (!state.md.validateLink(fullUrl)) { return false; }\n\n if (!silent) {\n token = state.push('link_open', 'a', 1);\n token.attrs = [ [ 'href', fullUrl ] ];\n token.markup = 'autolink';\n token.info = 'auto';\n\n token = state.push('text', '', 0);\n token.content = state.md.normalizeLinkText(url);\n\n token = state.push('link_close', 'a', -1);\n token.markup = 'autolink';\n token.info = 'auto';\n }\n\n state.pos += url.length + 2;\n return true;\n }\n\n return false;\n};\n","// Process html tags\n\n'use strict';\n\n\nvar HTML_TAG_RE = require('../common/html_re').HTML_TAG_RE;\n\n\nfunction 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 html entity - {, ¯, ", ...\n\n'use strict';\n\nvar entities = require('../common/entities');\nvar has = require('../common/utils').has;\nvar isValidEntityCode = require('../common/utils').isValidEntityCode;\nvar fromCodePoint = require('../common/utils').fromCodePoint;\n\n\nvar DIGITAL_RE = /^&#((?:x[a-f0-9]{1,6}|[0-9]{1,7}));/i;\nvar NAMED_RE = /^&([a-z][a-z0-9]{1,31});/i;\n\n\nmodule.exports = function entity(state, silent) {\n var ch, code, match, 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","// For each opening emphasis-like marker find a matching closing one\n//\n'use strict';\n\n\nfunction processDelimiters(state, delimiters) {\n var closerIdx, openerIdx, closer, opener, minOpenerIdx, newMinOpenerIdx,\n isOddMatch, lastJump,\n openersBottom = {},\n max = delimiters.length;\n\n for (closerIdx = 0; closerIdx < max; closerIdx++) {\n closer = delimiters[closerIdx];\n\n // Length is only used for emphasis-specific \"rule of 3\",\n // if it's not defined (in strikethrough or 3rd party plugins),\n // we can default it to 0 to disable those checks.\n //\n closer.length = closer.length || 0;\n\n if (!closer.close) continue;\n\n // Previously calculated lower bounds (previous fails)\n // for each marker, each delimiter length modulo 3,\n // and for whether this closer can be an opener;\n // https://github.com/commonmark/cmark/commit/34250e12ccebdc6372b8b49c44fab57c72443460\n if (!openersBottom.hasOwnProperty(closer.marker)) {\n openersBottom[closer.marker] = [ -1, -1, -1, -1, -1, -1 ];\n }\n\n minOpenerIdx = openersBottom[closer.marker][(closer.open ? 3 : 0) + (closer.length % 3)];\n\n openerIdx = closerIdx - closer.jump - 1;\n\n // avoid crash if `closer.jump` is pointing outside of the array, see #742\n if (openerIdx < -1) openerIdx = -1;\n\n newMinOpenerIdx = openerIdx;\n\n for (; openerIdx > minOpenerIdx; openerIdx -= opener.jump + 1) {\n opener = delimiters[openerIdx];\n\n if (opener.marker !== closer.marker) continue;\n\n if (opener.open && opener.end < 0) {\n\n isOddMatch = false;\n\n // from spec:\n //\n // If one of the delimiters can both open and close emphasis, then the\n // sum of the lengths of the delimiter runs containing the opening and\n // closing delimiters must not be a multiple of 3 unless both lengths\n // are multiples of 3.\n //\n if (opener.close || closer.open) {\n if ((opener.length + closer.length) % 3 === 0) {\n if (opener.length % 3 !== 0 || closer.length % 3 !== 0) {\n isOddMatch = true;\n }\n }\n }\n\n if (!isOddMatch) {\n // If previous delimiter cannot be an opener, we can safely skip\n // the entire sequence in future checks. This is required to make\n // sure algorithm has linear complexity (see *_*_*_*_*_... case).\n //\n lastJump = openerIdx > 0 && !delimiters[openerIdx - 1].open ?\n delimiters[openerIdx - 1].jump + 1 :\n 0;\n\n closer.jump = closerIdx - openerIdx + lastJump;\n closer.open = false;\n opener.end = closerIdx;\n opener.jump = lastJump;\n opener.close = false;\n newMinOpenerIdx = -1;\n break;\n }\n }\n }\n\n if (newMinOpenerIdx !== -1) {\n // If match for this delimiter run failed, we want to set lower bound for\n // future lookups. This is required to make sure algorithm has linear\n // complexity.\n //\n // See details here:\n // https://github.com/commonmark/cmark/issues/178#issuecomment-270417442\n //\n openersBottom[closer.marker][(closer.open ? 3 : 0) + ((closer.length || 0) % 3)] = newMinOpenerIdx;\n }\n }\n}\n\n\nmodule.exports = function link_pairs(state) {\n var curr,\n tokens_meta = state.tokens_meta,\n max = state.tokens_meta.length;\n\n processDelimiters(state, state.delimiters);\n\n for (curr = 0; curr < max; curr++) {\n if (tokens_meta[curr] && tokens_meta[curr].delimiters) {\n processDelimiters(state, tokens_meta[curr].delimiters);\n }\n }\n};\n","// Clean up tokens after emphasis and strikethrough postprocessing:\n// merge adjacent text nodes into one and re-calculate all token levels\n//\n// This is necessary because initially emphasis delimiter markers (*, _, ~)\n// are treated as their own separate text tokens. Then emphasis rule either\n// leaves them as text (needed to merge with adjacent text) or turns them\n// into opening/closing tags (which messes up levels inside).\n//\n'use strict';\n\n\nmodule.exports = function text_collapse(state) {\n var curr, last,\n level = 0,\n tokens = state.tokens,\n max = state.tokens.length;\n\n for (curr = last = 0; curr < max; curr++) {\n // re-calculate levels after emphasis/strikethrough turns some text nodes\n // into opening/closing tags\n if (tokens[curr].nesting < 0) level--; // closing tag\n tokens[curr].level = level;\n if (tokens[curr].nesting > 0) level++; // opening tag\n\n if (tokens[curr].type === 'text' &&\n curr + 1 < max &&\n tokens[curr + 1].type === 'text') {\n\n // collapse two adjacent text nodes\n tokens[curr + 1].content = tokens[curr].content + tokens[curr + 1].content;\n } else {\n if (curr !== last) { tokens[last] = tokens[curr]; }\n\n last++;\n }\n }\n\n if (curr !== last) {\n tokens.length = last;\n }\n};\n","// Inline parser state\n\n'use strict';\n\n\nvar Token = require('../token');\nvar isWhiteSpace = require('../common/utils').isWhiteSpace;\nvar isPunctChar = require('../common/utils').isPunctChar;\nvar isMdAsciiPunct = require('../common/utils').isMdAsciiPunct;\n\n\nfunction StateInline(src, md, env, outTokens) {\n this.src = src;\n this.env = env;\n this.md = md;\n this.tokens = outTokens;\n this.tokens_meta = Array(outTokens.length);\n\n this.pos = 0;\n this.posMax = this.src.length;\n this.level = 0;\n this.pending = '';\n this.pendingLevel = 0;\n\n // Stores { start: end } pairs. Useful for backtrack\n // optimization of pairs parse (emphasis, strikes).\n this.cache = {};\n\n // List of emphasis-like delimiters for current tag\n this.delimiters = [];\n\n // Stack of delimiter lists for upper level tags\n this._prev_delimiters = [];\n\n // backtick length => last seen position\n this.backticks = {};\n this.backticksScanned = false;\n}\n\n\n// Flush pending text\n//\nStateInline.prototype.pushPending = function () {\n var token = new Token('text', '', 0);\n token.content = this.pending;\n token.level = this.pendingLevel;\n this.tokens.push(token);\n this.pending = '';\n return token;\n};\n\n\n// Push new token to \"stream\".\n// If pending text exists - flush it as text token\n//\nStateInline.prototype.push = function (type, tag, nesting) {\n if (this.pending) {\n this.pushPending();\n }\n\n var token = new Token(type, tag, nesting);\n var token_meta = null;\n\n if (nesting < 0) {\n // closing tag\n this.level--;\n this.delimiters = this._prev_delimiters.pop();\n }\n\n token.level = this.level;\n\n if (nesting > 0) {\n // opening tag\n this.level++;\n this._prev_delimiters.push(this.delimiters);\n this.delimiters = [];\n token_meta = { delimiters: this.delimiters };\n }\n\n this.pendingLevel = this.level;\n this.tokens.push(token);\n this.tokens_meta.push(token_meta);\n return token;\n};\n\n\n// Scan a sequence of emphasis-like markers, and determine whether\n// it can start an emphasis sequence or end an emphasis sequence.\n//\n// - start - position to scan from (it should point at a valid marker);\n// - canSplitWord - determine if these markers can be found inside a word\n//\nStateInline.prototype.scanDelims = function (start, canSplitWord) {\n var pos = start, lastChar, nextChar, count, can_open, can_close,\n isLastWhiteSpace, isLastPunctChar,\n isNextWhiteSpace, isNextPunctChar,\n left_flanking = true,\n right_flanking = true,\n max = this.posMax,\n marker = this.src.charCodeAt(start);\n\n // treat beginning of the line as a whitespace\n lastChar = start > 0 ? this.src.charCodeAt(start - 1) : 0x20;\n\n while (pos < max && this.src.charCodeAt(pos) === marker) { pos++; }\n\n count = pos - start;\n\n // treat end of the line as a whitespace\n nextChar = pos < max ? this.src.charCodeAt(pos) : 0x20;\n\n isLastPunctChar = isMdAsciiPunct(lastChar) || isPunctChar(String.fromCharCode(lastChar));\n isNextPunctChar = isMdAsciiPunct(nextChar) || isPunctChar(String.fromCharCode(nextChar));\n\n isLastWhiteSpace = isWhiteSpace(lastChar);\n isNextWhiteSpace = isWhiteSpace(nextChar);\n\n if (isNextWhiteSpace) {\n left_flanking = false;\n } else if (isNextPunctChar) {\n if (!(isLastWhiteSpace || isLastPunctChar)) {\n left_flanking = false;\n }\n }\n\n if (isLastWhiteSpace) {\n right_flanking = false;\n } else if (isLastPunctChar) {\n if (!(isNextWhiteSpace || isNextPunctChar)) {\n right_flanking = false;\n }\n }\n\n if (!canSplitWord) {\n can_open = left_flanking && (!right_flanking || isLastPunctChar);\n can_close = right_flanking && (!left_flanking || isNextPunctChar);\n } else {\n can_open = left_flanking;\n can_close = right_flanking;\n }\n\n return {\n can_open: can_open,\n can_close: can_close,\n length: count\n };\n};\n\n\n// re-export Token class to use in block rules\nStateInline.prototype.Token = Token;\n\n\nmodule.exports = StateInline;\n","'use strict';\n\nvar uc_micro = require('uc.micro');\n\nfunction reFactory (opts) {\n const re = {};\n opts = opts || {};\n\n re.src_Any = uc_micro.Any.source;\n re.src_Cc = uc_micro.Cc.source;\n re.src_Z = uc_micro.Z.source;\n re.src_P = uc_micro.P.source;\n\n // \\p{\\Z\\P\\Cc\\CF} (white spaces + control + format + punctuation)\n re.src_ZPCc = [re.src_Z, re.src_P, re.src_Cc].join('|');\n\n // \\p{\\Z\\Cc} (white spaces + control)\n re.src_ZCc = [re.src_Z, re.src_Cc].join('|');\n\n // Experimental. List of chars, completely prohibited in links\n // because can separate it from other part of text\n const text_separators = '[><\\uff5c]';\n\n // All possible word characters (everything without punctuation, spaces & controls)\n // Defined via punctuation & spaces to save space\n // Should be something like \\p{\\L\\N\\S\\M} (\\w but without `_`)\n re.src_pseudo_letter = `(?:(?!${text_separators}|${re.src_ZPCc})${re.src_Any})`;\n // The same as abothe but without [0-9]\n // var src_pseudo_letter_non_d = '(?:(?![0-9]|' + src_ZPCc + ')' + src_Any + ')';\n\n re.src_ip4 =\n\n '(?:(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)';\n\n // Prohibit any of \"@/[]()\" in user/pass to avoid wrong domain fetch.\n // Length is capped to exclude possible rescans till the end and avoid O(n^2)\n // DoS. No standard limit, just take something reasonable.\n re.src_auth = `(?:(?:(?!${re.src_ZCc}|[@/\\\\[\\\\]()]).){1,50}@)?`;\n\n re.src_port =\n\n '(?::(?:6(?:[0-4]\\\\d{3}|5(?:[0-4]\\\\d{2}|5(?:[0-2]\\\\d|3[0-5])))|[1-5]?\\\\d{1,4}))?';\n\n re.src_host_terminator =\n\n `(?=$|${text_separators}|${re.src_ZPCc})` +\n `(?!${opts['---'] ? '-(?!--)|' : '-|'}_|:\\\\d|\\\\.-|\\\\.(?!$|${re.src_ZPCc}))`;\n\n re.src_path =\n\n '(?:' +\n '[/?#]' +\n '(?:' +\n `(?!${re.src_ZCc}|${text_separators}|[()[\\\\]{}.,\"'?!\\\\-;]).|` +\n `\\\\[(?:(?!${re.src_ZCc}|\\\\]).)*\\\\]|` +\n `\\\\((?:(?!${re.src_ZCc}|[)]).)*\\\\)|` +\n `\\\\{(?:(?!${re.src_ZCc}|[}]).)*\\\\}|` +\n `\\\\\"(?:(?!${re.src_ZCc}|[\"]).)+\\\\\"|` +\n `\\\\'(?:(?!${re.src_ZCc}|[']).)+\\\\'|` +\n\n // allow `I'm_king` if no pair found\n `\\\\'(?=${re.src_pseudo_letter}|[-])|` +\n\n // google has many dots in \"google search\" links (#66, #81).\n // github has ... in commit range links,\n // Restrict to\n // - english\n // - percent-encoded\n // - parts of file path\n // - params separator\n // until more examples found.\n '\\\\.{2,}[a-zA-Z0-9%/&]|' +\n\n `\\\\.(?!${re.src_ZCc}|[.]|$)|` +\n (opts['---']\n ? '\\\\-(?!--(?:[^-]|$))(?:-*)|' // `---` => long dash, terminate\n : '\\\\-+|'\n ) +\n // allow `,,,` in paths\n `,(?!${re.src_ZCc}|$)|` +\n\n // allow `;` if not followed by space-like char\n `;(?!${re.src_ZCc}|$)|` +\n\n // allow `!!!` in paths, but not at the end\n `\\\\!+(?!${re.src_ZCc}|[!]|$)|` +\n\n `\\\\?(?!${re.src_ZCc}|[?]|$)` +\n ')+' +\n '|\\\\/' +\n ')?';\n\n // Allow anything in markdown spec, forbid quote (\") at the first position\n // because emails enclosed in quotes are far more common\n // Max name length capped to 64 chars (RFC 5321). This also prevents O(n^2)\n // rescans to the end on inputs like `mailto:mailto:...`\n re.src_email_name =\n\n '[\\\\-;:&=\\\\+\\\\$,\\\\.a-zA-Z0-9_][\\\\-;:&=\\\\+\\\\$,\\\\\"\\\\.a-zA-Z0-9_]{0,63}';\n\n re.src_xn =\n\n 'xn--[a-z0-9\\\\-]{1,59}';\n\n // More to read about domain names\n // http://serverfault.com/questions/638260/\n\n re.src_domain_root =\n\n // Allow letters & digits (http://test1)\n '(?:' +\n re.src_xn +\n '|' +\n `${re.src_pseudo_letter}{1,63}` +\n ')';\n\n re.src_domain =\n\n '(?:' +\n re.src_xn +\n '|' +\n `(?:${re.src_pseudo_letter})` +\n '|' +\n `(?:${re.src_pseudo_letter}(?:-|${re.src_pseudo_letter}){0,61}${re.src_pseudo_letter})` +\n ')';\n\n re.src_host =\n\n '(?:' +\n // Don't need IP check, because digits are already allowed in normal domain names\n // src_ip4 +\n // '|' +\n `(?:(?:(?:${re.src_domain})\\\\.)*${re.src_domain})`/* _root */ +\n ')';\n\n re.tpl_host_fuzzy =\n\n '(?:' +\n re.src_ip4 +\n '|' +\n `(?:(?:(?:${re.src_domain})\\\\.)+(?:%TLDS%))` +\n ')';\n\n re.tpl_host_no_ip_fuzzy =\n\n `(?:(?:(?:${re.src_domain})\\\\.)+(?:%TLDS%))`;\n\n re.src_host_strict =\n\n re.src_host + re.src_host_terminator;\n\n re.tpl_host_fuzzy_strict =\n\n re.tpl_host_fuzzy + re.src_host_terminator;\n\n re.src_host_port_strict =\n\n re.src_host + re.src_port + re.src_host_terminator;\n\n re.tpl_host_port_fuzzy_strict =\n\n re.tpl_host_fuzzy + re.src_port + re.src_host_terminator;\n\n re.tpl_host_port_no_ip_fuzzy_strict =\n\n re.tpl_host_no_ip_fuzzy + re.src_port + re.src_host_terminator;\n\n //\n // Main rules\n //\n\n // Rude test fuzzy links by host, for quick deny\n re.tpl_host_fuzzy_test =\n\n `localhost|www\\\\.|\\\\.\\\\d{1,3}\\\\.|(?:\\\\.(?:%TLDS%)(?:${re.src_ZPCc}|>|$))`;\n\n re.tpl_email_fuzzy =\n\n `(^|${text_separators}|\"|\\\\(|${re.src_ZCc})` +\n `(${re.src_email_name}@${re.tpl_host_fuzzy_strict})`;\n\n re.tpl_link_fuzzy =\n // Fuzzy link can't be prepended with .:/\\- and non punctuation.\n // but can start with > (markdown blockquote)\n `(^|(?![.:/\\\\-_@])(?:[$+<=>^\\`|\\uff5c]|${re.src_ZPCc}))` +\n `((?![$+<=>^\\`|\\uff5c])${re.tpl_host_port_fuzzy_strict}${re.src_path})`;\n\n re.tpl_link_no_ip_fuzzy =\n // Fuzzy link can't be prepended with .:/\\- and non punctuation.\n // but can start with > (markdown blockquote)\n `(^|(?![.:/\\\\-_@])(?:[$+<=>^\\`|\\uff5c]|${re.src_ZPCc}))` +\n `((?![$+<=>^\\`|\\uff5c])${re.tpl_host_port_no_ip_fuzzy_strict}${re.src_path})`;\n\n return re\n}\n\n//\n// Helpers\n//\n\n// Merge objects\n//\nfunction assign (obj /* from1, from2, from3, ... */) {\n const sources = Array.prototype.slice.call(arguments, 1);\n\n sources.forEach(function (source) {\n if (!source) { return }\n\n Object.keys(source).forEach(function (key) {\n obj[key] = source[key];\n });\n });\n\n return obj\n}\n\nfunction _class (obj) { return Object.prototype.toString.call(obj) }\nfunction isString (obj) { return _class(obj) === '[object String]' }\nfunction isObject (obj) { return _class(obj) === '[object Object]' }\nfunction isRegExp (obj) { return _class(obj) === '[object RegExp]' }\nfunction isFunction (obj) { return _class(obj) === '[object Function]' }\n\nfunction escapeRE (str) { return str.replace(/[.?*+^$[\\]\\\\(){}|-]/g, '\\\\$&') }\n\n//\n\nconst defaultOptions = {\n fuzzyLink: true,\n fuzzyEmail: true,\n fuzzyIP: false\n};\n\nfunction isOptionsObj (obj) {\n return Object.keys(obj || {}).reduce(function (acc, k) {\n /* eslint-disable-next-line no-prototype-builtins */\n return acc || defaultOptions.hasOwnProperty(k)\n }, false)\n}\n\nconst defaultSchemas = {\n 'http:': {\n validate: function (text, pos, self) {\n const tail = text.slice(pos);\n\n if (!self.re.http) {\n // compile lazily, because \"host\"-containing variables can change on tlds update.\n self.re.http = new RegExp(\n `^\\\\/\\\\/${self.re.src_auth}${self.re.src_host_port_strict}${self.re.src_path}`, 'i'\n );\n }\n if (self.re.http.test(tail)) {\n return tail.match(self.re.http)[0].length\n }\n return 0\n }\n },\n 'https:': 'http:',\n 'ftp:': 'http:',\n '//': {\n validate: function (text, pos, self) {\n const tail = text.slice(pos);\n\n if (!self.re.no_http) {\n // compile lazily, because \"host\"-containing variables can change on tlds update.\n self.re.no_http = new RegExp(\n '^' +\n self.re.src_auth +\n // Don't allow single-level domains, because of false positives like '//test'\n // with code comments\n `(?:localhost|(?:(?:${self.re.src_domain})\\\\.)+${self.re.src_domain_root})` +\n self.re.src_port +\n self.re.src_host_terminator +\n self.re.src_path,\n\n 'i'\n );\n }\n\n if (self.re.no_http.test(tail)) {\n // should not be `://` & `///`, that protects from errors in protocol name\n if (pos >= 3 && text[pos - 3] === ':') { return 0 }\n if (pos >= 3 && text[pos - 3] === '/') { return 0 }\n return tail.match(self.re.no_http)[0].length\n }\n return 0\n }\n },\n 'mailto:': {\n validate: function (text, pos, self) {\n const tail = text.slice(pos);\n\n if (!self.re.mailto) {\n self.re.mailto = new RegExp(\n `^${self.re.src_email_name}@${self.re.src_host_strict}`, 'i'\n );\n }\n if (self.re.mailto.test(tail)) {\n return tail.match(self.re.mailto)[0].length\n }\n return 0\n }\n }\n};\n\n// RE pattern for 2-character tlds (autogenerated by ./support/tlds_2char_gen.js)\nconst tlds_2ch_src_re = 'a[cdefgilmnoqrstuwxz]|b[abdefghijmnorstvwyz]|c[acdfghiklmnoruvwxyz]|d[ejkmoz]|e[cegrstu]|f[ijkmor]|g[abdefghilmnpqrstuwy]|h[kmnrtu]|i[delmnoqrst]|j[emop]|k[eghimnprwyz]|l[abcikrstuvy]|m[acdeghklmnopqrstuvwxyz]|n[acefgilopruz]|om|p[aefghklmnrstwy]|qa|r[eosuw]|s[abcdeghijklmnortuvxyz]|t[cdfghjklmnortvwz]|u[agksyz]|v[aceginu]|w[fs]|y[et]|z[amw]';\n\n// DON'T try to make PRs with changes. Extend TLDs with LinkifyIt.tlds() instead\nconst tlds_default = 'biz|com|edu|gov|net|org|pro|web|xxx|aero|asia|coop|info|museum|name|shop|рф'.split('|');\n\nfunction createValidator (re) {\n return function (text, pos) {\n const tail = text.slice(pos);\n\n if (re.test(tail)) {\n return tail.match(re)[0].length\n }\n return 0\n }\n}\n\nfunction createNormalizer () {\n return function (match, self) {\n self.normalize(match);\n }\n}\n\n// Schemas compiler. Build regexps.\n//\nfunction compile (self) {\n // Load & clone RE patterns.\n const re = self.re = reFactory(self.__opts__);\n\n // Define dynamic patterns\n const tlds = self.__tlds__.slice();\n\n self.onCompile();\n\n if (!self.__tlds_replaced__) {\n tlds.push(tlds_2ch_src_re);\n }\n tlds.push(re.src_xn);\n\n re.src_tlds = tlds.join('|');\n\n function untpl (tpl) { return tpl.replace('%TLDS%', re.src_tlds) }\n\n re.email_fuzzy = RegExp(untpl(re.tpl_email_fuzzy), 'i');\n re.email_fuzzy_global = RegExp(untpl(re.tpl_email_fuzzy), 'ig');\n re.link_fuzzy = RegExp(untpl(re.tpl_link_fuzzy), 'i');\n re.link_fuzzy_global = RegExp(untpl(re.tpl_link_fuzzy), 'ig');\n re.link_no_ip_fuzzy = RegExp(untpl(re.tpl_link_no_ip_fuzzy), 'i');\n re.link_no_ip_fuzzy_global = RegExp(untpl(re.tpl_link_no_ip_fuzzy), 'ig');\n re.host_fuzzy_test = RegExp(untpl(re.tpl_host_fuzzy_test), 'i');\n\n //\n // Compile each schema\n //\n\n const aliases = [];\n\n self.__compiled__ = {}; // Reset compiled data\n\n function schemaError (name, val) {\n throw new Error(`(LinkifyIt) Invalid schema \"${name}\": ${val}`)\n }\n\n Object.keys(self.__schemas__).forEach(function (name) {\n const val = self.__schemas__[name];\n\n // skip disabled methods\n if (val === null) { return }\n\n const compiled = { validate: null, link: null };\n\n self.__compiled__[name] = compiled;\n\n if (isObject(val)) {\n if (isRegExp(val.validate)) {\n compiled.validate = createValidator(val.validate);\n } else if (isFunction(val.validate)) {\n compiled.validate = val.validate;\n } else {\n schemaError(name, val);\n }\n\n if (isFunction(val.normalize)) {\n compiled.normalize = val.normalize;\n } else if (!val.normalize) {\n compiled.normalize = createNormalizer();\n } else {\n schemaError(name, val);\n }\n\n return\n }\n\n if (isString(val)) {\n aliases.push(name);\n return\n }\n\n schemaError(name, val);\n });\n\n //\n // Compile postponed aliases\n //\n\n aliases.forEach(function (alias) {\n if (!self.__compiled__[self.__schemas__[alias]]) {\n // Silently fail on missed schemas to avoid errons on disable.\n // schemaError(alias, self.__schemas__[alias]);\n return\n }\n\n self.__compiled__[alias].validate =\n self.__compiled__[self.__schemas__[alias]].validate;\n self.__compiled__[alias].normalize =\n self.__compiled__[self.__schemas__[alias]].normalize;\n });\n\n //\n // Fake record for guessed links\n //\n self.__compiled__[''] = { validate: null, normalize: createNormalizer() };\n\n //\n // Build schema condition\n //\n const slist = Object.keys(self.__compiled__)\n .filter(function (name) {\n // Filter disabled & fake schemas\n return name.length > 0 && self.__compiled__[name]\n })\n .map(escapeRE)\n .join('|');\n // (?!_) cause 1.5x slowdown\n self.re.schema_test = RegExp(`(^|(?!_)(?:[><\\uff5c]|${re.src_ZPCc}))(${slist})`, 'i');\n self.re.schema_search = RegExp(`(^|(?!_)(?:[><\\uff5c]|${re.src_ZPCc}))(${slist})`, 'ig');\n self.re.schema_at_start = RegExp(`^${self.re.schema_search.source}`, 'i');\n\n self.re.pretest = RegExp(\n `(${self.re.schema_test.source})|(${self.re.host_fuzzy_test.source})|@`,\n 'i'\n );\n}\n\n/**\n * class Match\n *\n * Match result. Single element of array, returned by [[LinkifyIt#match]]\n **/\nfunction Match (text, schema, index, lastIndex) {\n const raw = text.slice(index, lastIndex);\n\n /**\n * Match#schema -> String\n *\n * Prefix (protocol) for matched string.\n **/\n this.schema = schema.toLowerCase();\n /**\n * Match#index -> Number\n *\n * First position of matched string.\n **/\n this.index = index;\n /**\n * Match#lastIndex -> Number\n *\n * Next position after matched string.\n **/\n this.lastIndex = lastIndex;\n /**\n * Match#raw -> String\n *\n * Matched string.\n **/\n this.raw = raw;\n /**\n * Match#text -> String\n *\n * Notmalized text of matched string.\n **/\n this.text = raw;\n /**\n * Match#url -> String\n *\n * Normalized url of matched string.\n **/\n this.url = raw;\n}\n\n/**\n * class LinkifyIt\n **/\n\n/**\n * new LinkifyIt(schemas, options)\n * - schemas (Object): Optional. Additional schemas to validate (prefix/validator)\n * - options (Object): { fuzzyLink|fuzzyEmail|fuzzyIP: true|false }\n *\n * Creates new linkifier instance with optional additional schemas.\n * Can be called without `new` keyword for convenience.\n *\n * By default understands:\n *\n * - `http(s)://...` , `ftp://...`, `mailto:...` & `//...` links\n * - \"fuzzy\" links and emails (example.com, foo@bar.com).\n *\n * `schemas` is an object, where each key/value describes protocol/rule:\n *\n * - __key__ - link prefix (usually, protocol name with `:` at the end, `skype:`\n * for example). `linkify-it` makes shure that prefix is not preceeded with\n * alphanumeric char and symbols. Only whitespaces and punctuation allowed.\n * - __value__ - rule to check tail after link prefix\n * - _String_ - just alias to existing rule\n * - _Object_\n * - _validate_ - validator function (should return matched length on success),\n * or `RegExp`.\n * - _normalize_ - optional function to normalize text & url of matched result\n * (for example, for @twitter mentions).\n *\n * `options`:\n *\n * - __fuzzyLink__ - recognige URL-s without `http(s):` prefix. Default `true`.\n * - __fuzzyIP__ - allow IPs in fuzzy links above. Can conflict with some texts\n * like version numbers. Default `false`.\n * - __fuzzyEmail__ - recognize emails without `mailto:` prefix.\n *\n **/\nfunction LinkifyIt (schemas, options) {\n if (!(this instanceof LinkifyIt)) {\n return new LinkifyIt(schemas, options)\n }\n\n if (!options) {\n if (isOptionsObj(schemas)) {\n options = schemas;\n schemas = {};\n }\n }\n\n this.__opts__ = assign({}, defaultOptions, options);\n\n this.__schemas__ = assign({}, defaultSchemas, schemas);\n this.__compiled__ = {};\n\n this.__tlds__ = tlds_default;\n this.__tlds_replaced__ = false;\n\n this.re = {};\n\n compile(this);\n}\n\n/** chainable\n * LinkifyIt#add(schema, definition)\n * - schema (String): rule name (fixed pattern prefix)\n * - definition (String|RegExp|Object): schema definition\n *\n * Add new rule definition. See constructor description for details.\n **/\nLinkifyIt.prototype.add = function add (schema, definition) {\n this.__schemas__[schema] = definition;\n compile(this);\n return this\n};\n\n/** chainable\n * LinkifyIt#set(options)\n * - options (Object): { fuzzyLink|fuzzyEmail|fuzzyIP: true|false }\n *\n * Set recognition options for links without schema.\n **/\nLinkifyIt.prototype.set = function set (options) {\n this.__opts__ = assign(this.__opts__, options);\n return this\n};\n\n/**\n * LinkifyIt#test(text) -> Boolean\n *\n * Searches linkifiable pattern and returns `true` on success or `false` on fail.\n **/\nLinkifyIt.prototype.test = function test (text) {\n if (!text.length) { return false }\n\n let m, re;\n\n // try to scan for link with schema - that's the most simple rule\n if (this.re.schema_test.test(text)) {\n re = this.re.schema_search;\n re.lastIndex = 0;\n while ((m = re.exec(text)) !== null) {\n if (this.testSchemaAt(text, m[2], re.lastIndex)) { return true }\n }\n }\n\n if (this.__opts__.fuzzyLink && this.__compiled__['http:']) {\n // guess schemaless links\n if (text.search(this.re.host_fuzzy_test) >= 0) {\n if (text.match(this.__opts__.fuzzyIP ? this.re.link_fuzzy : this.re.link_no_ip_fuzzy) !== null) {\n return true\n }\n }\n }\n\n if (this.__opts__.fuzzyEmail && this.__compiled__['mailto:']) {\n // guess schemaless emails\n if (text.indexOf('@') >= 0) {\n // We can't skip this check, because this cases are possible:\n // 192.168.1.1@gmail.com, my.in@example.com\n if (text.match(this.re.email_fuzzy) !== null) { return true }\n }\n }\n\n return false\n};\n\n/**\n * LinkifyIt#pretest(text) -> Boolean\n *\n * Very quick check, that can give false positives. Returns true if link MAY BE\n * can exists. Can be used for speed optimization, when you need to check that\n * link NOT exists.\n **/\nLinkifyIt.prototype.pretest = function pretest (text) {\n return this.re.pretest.test(text)\n};\n\n/**\n * LinkifyIt#testSchemaAt(text, name, position) -> Number\n * - text (String): text to scan\n * - name (String): rule (schema) name\n * - position (Number): text offset to check from\n *\n * Similar to [[LinkifyIt#test]] but checks only specific protocol tail exactly\n * at given position. Returns length of found pattern (0 on fail).\n **/\nLinkifyIt.prototype.testSchemaAt = function testSchemaAt (text, schema, pos) {\n // If not supported schema check requested - terminate\n if (!this.__compiled__[schema.toLowerCase()]) {\n return 0\n }\n return this.__compiled__[schema.toLowerCase()].validate(text, pos, this)\n};\n\n/**\n * LinkifyIt#match(text) -> Array|null\n *\n * Returns array of found link descriptions or `null` on fail. We strongly\n * recommend to use [[LinkifyIt#test]] first, for best speed.\n *\n * ##### Result match description\n *\n * - __schema__ - link schema, can be empty for fuzzy links, or `//` for\n * protocol-neutral links.\n * - __index__ - offset of matched text\n * - __lastIndex__ - index of next char after mathch end\n * - __raw__ - matched text\n * - __text__ - normalized text\n * - __url__ - link, generated from matched text\n **/\nLinkifyIt.prototype.match = function match (text) {\n const result = [];\n const type_schemed = [];\n const type_fuzzy_link = [];\n const type_fuzzy_email = [];\n let m, len, re;\n\n function choose (a, b) {\n if (!a) { return b }\n if (!b) { return a }\n if (a.index !== b.index) { return a.index < b.index ? a : b }\n return a.lastIndex >= b.lastIndex ? a : b\n }\n\n if (!text.length) { return null }\n\n // scan for links with schema\n if (this.re.schema_test.test(text)) {\n re = this.re.schema_search;\n re.lastIndex = 0;\n while ((m = re.exec(text)) !== null) {\n len = this.testSchemaAt(text, m[2], re.lastIndex);\n if (len) {\n type_schemed.push({\n schema: m[2],\n index: m.index + m[1].length,\n lastIndex: m.index + m[0].length + len\n });\n }\n }\n }\n\n if (this.__opts__.fuzzyLink && this.__compiled__['http:']) {\n re = this.__opts__.fuzzyIP ? this.re.link_fuzzy_global : this.re.link_no_ip_fuzzy_global;\n re.lastIndex = 0;\n while ((m = re.exec(text)) !== null) {\n type_fuzzy_link.push({\n schema: '',\n index: m.index + m[1].length,\n lastIndex: m.index + m[0].length\n });\n }\n }\n\n if (this.__opts__.fuzzyEmail && this.__compiled__['mailto:']) {\n re = this.re.email_fuzzy_global;\n re.lastIndex = 0;\n while ((m = re.exec(text)) !== null) {\n type_fuzzy_email.push({\n schema: 'mailto:',\n index: m.index + m[1].length,\n lastIndex: m.index + m[0].length\n });\n }\n }\n\n const indexes = [0, 0, 0];\n let lastIndex = 0;\n\n for (;;) {\n const candidates = [\n type_schemed[indexes[0]],\n type_fuzzy_email[indexes[1]],\n type_fuzzy_link[indexes[2]]\n ];\n\n const candidate = choose(choose(candidates[0], candidates[1]), candidates[2]);\n\n if (!candidate) { break }\n\n if (candidate === candidates[0]) {\n indexes[0]++;\n } else if (candidate === candidates[1]) {\n indexes[1]++;\n } else {\n indexes[2]++;\n }\n\n if (candidate.index < lastIndex) { continue }\n\n const match = new Match(text, candidate.schema, candidate.index, candidate.lastIndex);\n this.__compiled__[match.schema].normalize(match, this);\n result.push(match);\n lastIndex = candidate.lastIndex;\n }\n\n if (result.length) {\n return result\n }\n\n return null\n};\n\n/**\n * LinkifyIt#matchAtStart(text) -> Match|null\n *\n * Returns fully-formed (not fuzzy) link if it starts at the beginning\n * of the string, and null otherwise.\n **/\nLinkifyIt.prototype.matchAtStart = function matchAtStart (text) {\n if (!text.length) return null\n\n const m = this.re.schema_at_start.exec(text);\n if (!m) return null\n\n const len = this.testSchemaAt(text, m[2], m[0].length);\n if (!len) return null\n\n const match = new Match(text, m[2], m.index + m[1].length, m.index + m[0].length + len);\n\n this.__compiled__[match.schema].normalize(match, this);\n return match\n};\n\n/** chainable\n * LinkifyIt#tlds(list [, keepOld]) -> this\n * - list (Array): list of tlds\n * - keepOld (Boolean): merge with current list if `true` (`false` by default)\n *\n * Load (or merge) new tlds list. Those are user for fuzzy links (without prefix)\n * to avoid false positives. By default this algorythm used:\n *\n * - hostname with any 2-letter root zones are ok.\n * - biz|com|edu|gov|net|org|pro|web|xxx|aero|asia|coop|info|museum|name|shop|рф\n * are ok.\n * - encoded (`xn--...`) root zones are ok.\n *\n * If list is replaced, then exact match for 2-chars root zones will be checked.\n **/\nLinkifyIt.prototype.tlds = function tlds (list, keepOld) {\n list = Array.isArray(list) ? list : [list];\n\n if (!keepOld) {\n this.__tlds__ = list.slice();\n this.__tlds_replaced__ = true;\n compile(this);\n return this\n }\n\n this.__tlds__ = this.__tlds__.concat(list)\n .sort()\n .filter(function (el, idx, arr) {\n return el !== arr[idx - 1]\n })\n .reverse();\n\n compile(this);\n return this\n};\n\n/**\n * LinkifyIt#normalize(match)\n *\n * Default normalizer (if schema does not define it's own).\n **/\nLinkifyIt.prototype.normalize = function normalize (match) {\n // Do minimal possible changes by default. Need to collect feedback prior\n // to move forward https://github.com/markdown-it/linkify-it/issues/1\n\n if (!match.schema) { match.url = `http://${match.url}`; }\n\n if (match.schema === 'mailto:' && !/^mailto:/i.test(match.url)) {\n match.url = `mailto:${match.url}`;\n }\n};\n\n/**\n * LinkifyIt#onCompile()\n *\n * Override to modify basic RegExp-s.\n **/\nLinkifyIt.prototype.onCompile = function onCompile () {\n};\n\nmodule.exports = LinkifyIt;\n","/*! https://mths.be/punycode v1.4.1 by @mathias */\n;(function(root) {\n\n\t/** Detect free variables */\n\tvar freeExports = typeof exports == 'object' && exports &&\n\t\t!exports.nodeType && exports;\n\tvar freeModule = typeof module == 'object' && module &&\n\t\t!module.nodeType && module;\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (\n\t\tfreeGlobal.global === freeGlobal ||\n\t\tfreeGlobal.window === freeGlobal ||\n\t\tfreeGlobal.self === freeGlobal\n\t) {\n\t\troot = freeGlobal;\n\t}\n\n\t/**\n\t * The `punycode` object.\n\t * @name punycode\n\t * @type Object\n\t */\n\tvar punycode,\n\n\t/** Highest positive signed 32-bit float value */\n\tmaxInt = 2147483647, // aka. 0x7FFFFFFF or 2^31-1\n\n\t/** Bootstring parameters */\n\tbase = 36,\n\ttMin = 1,\n\ttMax = 26,\n\tskew = 38,\n\tdamp = 700,\n\tinitialBias = 72,\n\tinitialN = 128, // 0x80\n\tdelimiter = '-', // '\\x2D'\n\n\t/** Regular expressions */\n\tregexPunycode = /^xn--/,\n\tregexNonASCII = /[^\\x20-\\x7E]/, // unprintable ASCII chars + non-ASCII chars\n\tregexSeparators = /[\\x2E\\u3002\\uFF0E\\uFF61]/g, // RFC 3490 separators\n\n\t/** Error messages */\n\terrors = {\n\t\t'overflow': 'Overflow: input needs wider integers to process',\n\t\t'not-basic': 'Illegal input >= 0x80 (not a basic code point)',\n\t\t'invalid-input': 'Invalid input'\n\t},\n\n\t/** Convenience shortcuts */\n\tbaseMinusTMin = base - tMin,\n\tfloor = Math.floor,\n\tstringFromCharCode = String.fromCharCode,\n\n\t/** Temporary variable */\n\tkey;\n\n\t/*--------------------------------------------------------------------------*/\n\n\t/**\n\t * A generic error utility function.\n\t * @private\n\t * @param {String} type The error type.\n\t * @returns {Error} Throws a `RangeError` with the applicable error message.\n\t */\n\tfunction error(type) {\n\t\tthrow new RangeError(errors[type]);\n\t}\n\n\t/**\n\t * A generic `Array#map` utility function.\n\t * @private\n\t * @param {Array} array The array to iterate over.\n\t * @param {Function} callback The function that gets called for every array\n\t * item.\n\t * @returns {Array} A new array of values returned by the callback function.\n\t */\n\tfunction map(array, fn) {\n\t\tvar length = array.length;\n\t\tvar result = [];\n\t\twhile (length--) {\n\t\t\tresult[length] = fn(array[length]);\n\t\t}\n\t\treturn result;\n\t}\n\n\t/**\n\t * A simple `Array#map`-like wrapper to work with domain name strings or email\n\t * addresses.\n\t * @private\n\t * @param {String} domain The domain name or email address.\n\t * @param {Function} callback The function that gets called for every\n\t * character.\n\t * @returns {Array} A new string of characters returned by the callback\n\t * function.\n\t */\n\tfunction mapDomain(string, fn) {\n\t\tvar parts = string.split('@');\n\t\tvar result = '';\n\t\tif (parts.length > 1) {\n\t\t\t// In email addresses, only the domain name should be punycoded. Leave\n\t\t\t// the local part (i.e. everything up to `@`) intact.\n\t\t\tresult = parts[0] + '@';\n\t\t\tstring = parts[1];\n\t\t}\n\t\t// Avoid `split(regex)` for IE8 compatibility. See #17.\n\t\tstring = string.replace(regexSeparators, '\\x2E');\n\t\tvar labels = string.split('.');\n\t\tvar encoded = map(labels, fn).join('.');\n\t\treturn result + encoded;\n\t}\n\n\t/**\n\t * Creates an array containing the numeric code points of each Unicode\n\t * character in the string. While JavaScript uses UCS-2 internally,\n\t * this function will convert a pair of surrogate halves (each of which\n\t * UCS-2 exposes as separate characters) into a single code point,\n\t * matching UTF-16.\n\t * @see `punycode.ucs2.encode`\n\t * @see \n\t * @memberOf punycode.ucs2\n\t * @name decode\n\t * @param {String} string The Unicode input string (UCS-2).\n\t * @returns {Array} The new array of code points.\n\t */\n\tfunction ucs2decode(string) {\n\t\tvar output = [],\n\t\t counter = 0,\n\t\t length = string.length,\n\t\t value,\n\t\t extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t/**\n\t * Creates a string based on an array of numeric code points.\n\t * @see `punycode.ucs2.decode`\n\t * @memberOf punycode.ucs2\n\t * @name encode\n\t * @param {Array} codePoints The array of numeric code points.\n\t * @returns {String} The new Unicode string (UCS-2).\n\t */\n\tfunction ucs2encode(array) {\n\t\treturn map(array, function(value) {\n\t\t\tvar output = '';\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t\treturn output;\n\t\t}).join('');\n\t}\n\n\t/**\n\t * Converts a basic code point into a digit/integer.\n\t * @see `digitToBasic()`\n\t * @private\n\t * @param {Number} codePoint The basic numeric code point value.\n\t * @returns {Number} The numeric value of a basic code point (for use in\n\t * representing integers) in the range `0` to `base - 1`, or `base` if\n\t * the code point does not represent a value.\n\t */\n\tfunction basicToDigit(codePoint) {\n\t\tif (codePoint - 48 < 10) {\n\t\t\treturn codePoint - 22;\n\t\t}\n\t\tif (codePoint - 65 < 26) {\n\t\t\treturn codePoint - 65;\n\t\t}\n\t\tif (codePoint - 97 < 26) {\n\t\t\treturn codePoint - 97;\n\t\t}\n\t\treturn base;\n\t}\n\n\t/**\n\t * Converts a digit/integer into a basic code point.\n\t * @see `basicToDigit()`\n\t * @private\n\t * @param {Number} digit The numeric value of a basic code point.\n\t * @returns {Number} The basic code point whose value (when used for\n\t * representing integers) is `digit`, which needs to be in the range\n\t * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is\n\t * used; else, the lowercase form is used. The behavior is undefined\n\t * if `flag` is non-zero and `digit` has no uppercase form.\n\t */\n\tfunction digitToBasic(digit, flag) {\n\t\t// 0..25 map to ASCII a..z or A..Z\n\t\t// 26..35 map to ASCII 0..9\n\t\treturn digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);\n\t}\n\n\t/**\n\t * Bias adaptation function as per section 3.4 of RFC 3492.\n\t * https://tools.ietf.org/html/rfc3492#section-3.4\n\t * @private\n\t */\n\tfunction adapt(delta, numPoints, firstTime) {\n\t\tvar k = 0;\n\t\tdelta = firstTime ? floor(delta / damp) : delta >> 1;\n\t\tdelta += floor(delta / numPoints);\n\t\tfor (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {\n\t\t\tdelta = floor(delta / baseMinusTMin);\n\t\t}\n\t\treturn floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n\t}\n\n\t/**\n\t * Converts a Punycode string of ASCII-only symbols to a string of Unicode\n\t * symbols.\n\t * @memberOf punycode\n\t * @param {String} input The Punycode string of ASCII-only symbols.\n\t * @returns {String} The resulting string of Unicode symbols.\n\t */\n\tfunction decode(input) {\n\t\t// Don't use UCS-2\n\t\tvar output = [],\n\t\t inputLength = input.length,\n\t\t out,\n\t\t i = 0,\n\t\t n = initialN,\n\t\t bias = initialBias,\n\t\t basic,\n\t\t j,\n\t\t index,\n\t\t oldi,\n\t\t w,\n\t\t k,\n\t\t digit,\n\t\t t,\n\t\t /** Cached calculation results */\n\t\t baseMinusT;\n\n\t\t// Handle the basic code points: let `basic` be the number of input code\n\t\t// points before the last delimiter, or `0` if there is none, then copy\n\t\t// the first basic code points to the output.\n\n\t\tbasic = input.lastIndexOf(delimiter);\n\t\tif (basic < 0) {\n\t\t\tbasic = 0;\n\t\t}\n\n\t\tfor (j = 0; j < basic; ++j) {\n\t\t\t// if it's not a basic code point\n\t\t\tif (input.charCodeAt(j) >= 0x80) {\n\t\t\t\terror('not-basic');\n\t\t\t}\n\t\t\toutput.push(input.charCodeAt(j));\n\t\t}\n\n\t\t// Main decoding loop: start just after the last delimiter if any basic code\n\t\t// points were copied; start at the beginning otherwise.\n\n\t\tfor (index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {\n\n\t\t\t// `index` is the index of the next character to be consumed.\n\t\t\t// Decode a generalized variable-length integer into `delta`,\n\t\t\t// which gets added to `i`. The overflow checking is easier\n\t\t\t// if we increase `i` as we go, then subtract off its starting\n\t\t\t// value at the end to obtain `delta`.\n\t\t\tfor (oldi = i, w = 1, k = base; /* no condition */; k += base) {\n\n\t\t\t\tif (index >= inputLength) {\n\t\t\t\t\terror('invalid-input');\n\t\t\t\t}\n\n\t\t\t\tdigit = basicToDigit(input.charCodeAt(index++));\n\n\t\t\t\tif (digit >= base || digit > floor((maxInt - i) / w)) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\ti += digit * w;\n\t\t\t\tt = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\n\t\t\t\tif (digit < t) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tbaseMinusT = base - t;\n\t\t\t\tif (w > floor(maxInt / baseMinusT)) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\tw *= baseMinusT;\n\n\t\t\t}\n\n\t\t\tout = output.length + 1;\n\t\t\tbias = adapt(i - oldi, out, oldi == 0);\n\n\t\t\t// `i` was supposed to wrap around from `out` to `0`,\n\t\t\t// incrementing `n` each time, so we'll fix that now:\n\t\t\tif (floor(i / out) > maxInt - n) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tn += floor(i / out);\n\t\t\ti %= out;\n\n\t\t\t// Insert `n` at position `i` of the output\n\t\t\toutput.splice(i++, 0, n);\n\n\t\t}\n\n\t\treturn ucs2encode(output);\n\t}\n\n\t/**\n\t * Converts a string of Unicode symbols (e.g. a domain name label) to a\n\t * Punycode string of ASCII-only symbols.\n\t * @memberOf punycode\n\t * @param {String} input The string of Unicode symbols.\n\t * @returns {String} The resulting Punycode string of ASCII-only symbols.\n\t */\n\tfunction encode(input) {\n\t\tvar n,\n\t\t delta,\n\t\t handledCPCount,\n\t\t basicLength,\n\t\t bias,\n\t\t j,\n\t\t m,\n\t\t q,\n\t\t k,\n\t\t t,\n\t\t currentValue,\n\t\t output = [],\n\t\t /** `inputLength` will hold the number of code points in `input`. */\n\t\t inputLength,\n\t\t /** Cached calculation results */\n\t\t handledCPCountPlusOne,\n\t\t baseMinusT,\n\t\t qMinusT;\n\n\t\t// Convert the input in UCS-2 to Unicode\n\t\tinput = ucs2decode(input);\n\n\t\t// Cache the length\n\t\tinputLength = input.length;\n\n\t\t// Initialize the state\n\t\tn = initialN;\n\t\tdelta = 0;\n\t\tbias = initialBias;\n\n\t\t// Handle the basic code points\n\t\tfor (j = 0; j < inputLength; ++j) {\n\t\t\tcurrentValue = input[j];\n\t\t\tif (currentValue < 0x80) {\n\t\t\t\toutput.push(stringFromCharCode(currentValue));\n\t\t\t}\n\t\t}\n\n\t\thandledCPCount = basicLength = output.length;\n\n\t\t// `handledCPCount` is the number of code points that have been handled;\n\t\t// `basicLength` is the number of basic code points.\n\n\t\t// Finish the basic string - if it is not empty - with a delimiter\n\t\tif (basicLength) {\n\t\t\toutput.push(delimiter);\n\t\t}\n\n\t\t// Main encoding loop:\n\t\twhile (handledCPCount < inputLength) {\n\n\t\t\t// All non-basic code points < n have been handled already. Find the next\n\t\t\t// larger one:\n\t\t\tfor (m = maxInt, j = 0; j < inputLength; ++j) {\n\t\t\t\tcurrentValue = input[j];\n\t\t\t\tif (currentValue >= n && currentValue < m) {\n\t\t\t\t\tm = currentValue;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Increase `delta` enough to advance the decoder's state to ,\n\t\t\t// but guard against overflow\n\t\t\thandledCPCountPlusOne = handledCPCount + 1;\n\t\t\tif (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tdelta += (m - n) * handledCPCountPlusOne;\n\t\t\tn = m;\n\n\t\t\tfor (j = 0; j < inputLength; ++j) {\n\t\t\t\tcurrentValue = input[j];\n\n\t\t\t\tif (currentValue < n && ++delta > maxInt) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\tif (currentValue == n) {\n\t\t\t\t\t// Represent delta as a generalized variable-length integer\n\t\t\t\t\tfor (q = delta, k = base; /* no condition */; k += base) {\n\t\t\t\t\t\tt = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\t\t\t\t\t\tif (q < t) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tqMinusT = q - t;\n\t\t\t\t\t\tbaseMinusT = base - t;\n\t\t\t\t\t\toutput.push(\n\t\t\t\t\t\t\tstringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))\n\t\t\t\t\t\t);\n\t\t\t\t\t\tq = floor(qMinusT / baseMinusT);\n\t\t\t\t\t}\n\n\t\t\t\t\toutput.push(stringFromCharCode(digitToBasic(q, 0)));\n\t\t\t\t\tbias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);\n\t\t\t\t\tdelta = 0;\n\t\t\t\t\t++handledCPCount;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t++delta;\n\t\t\t++n;\n\n\t\t}\n\t\treturn output.join('');\n\t}\n\n\t/**\n\t * Converts a Punycode string representing a domain name or an email address\n\t * to Unicode. Only the Punycoded parts of the input will be converted, i.e.\n\t * it doesn't matter if you call it on a string that has already been\n\t * converted to Unicode.\n\t * @memberOf punycode\n\t * @param {String} input The Punycoded domain name or email address to\n\t * convert to Unicode.\n\t * @returns {String} The Unicode representation of the given Punycode\n\t * string.\n\t */\n\tfunction toUnicode(input) {\n\t\treturn mapDomain(input, function(string) {\n\t\t\treturn regexPunycode.test(string)\n\t\t\t\t? decode(string.slice(4).toLowerCase())\n\t\t\t\t: string;\n\t\t});\n\t}\n\n\t/**\n\t * Converts a Unicode string representing a domain name or an email address to\n\t * Punycode. Only the non-ASCII parts of the domain name will be converted,\n\t * i.e. it doesn't matter if you call it with a domain that's already in\n\t * ASCII.\n\t * @memberOf punycode\n\t * @param {String} input The domain name or email address to convert, as a\n\t * Unicode string.\n\t * @returns {String} The Punycode representation of the given domain name or\n\t * email address.\n\t */\n\tfunction toASCII(input) {\n\t\treturn mapDomain(input, function(string) {\n\t\t\treturn regexNonASCII.test(string)\n\t\t\t\t? 'xn--' + encode(string)\n\t\t\t\t: string;\n\t\t});\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\t/** Define the public API */\n\tpunycode = {\n\t\t/**\n\t\t * A string representing the current Punycode.js version number.\n\t\t * @memberOf punycode\n\t\t * @type String\n\t\t */\n\t\t'version': '1.4.1',\n\t\t/**\n\t\t * An object of methods to convert from JavaScript's internal character\n\t\t * representation (UCS-2) to Unicode code points, and back.\n\t\t * @see \n\t\t * @memberOf punycode\n\t\t * @type Object\n\t\t */\n\t\t'ucs2': {\n\t\t\t'decode': ucs2decode,\n\t\t\t'encode': ucs2encode\n\t\t},\n\t\t'decode': decode,\n\t\t'encode': encode,\n\t\t'toASCII': toASCII,\n\t\t'toUnicode': toUnicode\n\t};\n\n\t/** Expose `punycode` */\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine('punycode', function() {\n\t\t\treturn punycode;\n\t\t});\n\t} else if (freeExports && freeModule) {\n\t\tif (module.exports == freeExports) {\n\t\t\t// in Node.js, io.js, or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = punycode;\n\t\t} else {\n\t\t\t// in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (key in punycode) {\n\t\t\t\tpunycode.hasOwnProperty(key) && (freeExports[key] = punycode[key]);\n\t\t\t}\n\t\t}\n\t} else {\n\t\t// in Rhino or a web browser\n\t\troot.punycode = punycode;\n\t}\n\n}(this));\n","// markdown-it default options\n\n'use strict';\n\n\nmodule.exports = {\n options: {\n html: false, // Enable HTML tags in source\n xhtmlOut: false, // Use '/' to close single tags (
)\n breaks: false, // Convert '\\n' in paragraphs into
\n langPrefix: 'language-', // CSS language prefix for fenced blocks\n linkify: false, // autoconvert URL-like texts to links\n\n // Enable some language-neutral replacements + quotes beautification\n typographer: false,\n\n // Double + single quotes replacement pairs, when typographer enabled,\n // and smartquotes on. Could be either a String or an Array.\n //\n // For example, you can use '«»„“' for Russian, '„“‚‘' for German,\n // and ['«\\xA0', '\\xA0»', '‹\\xA0', '\\xA0›'] for French (including nbsp).\n quotes: '\\u201c\\u201d\\u2018\\u2019', /* “”‘’ */\n\n // Highlighter function. Should return escaped HTML,\n // or '' if the source string is not changed and should be escaped externaly.\n // If result starts with )\n breaks: false, // Convert '\\n' in paragraphs into
\n langPrefix: 'language-', // CSS language prefix for fenced blocks\n linkify: false, // autoconvert URL-like texts to links\n\n // Enable some language-neutral replacements + quotes beautification\n typographer: false,\n\n // Double + single quotes replacement pairs, when typographer enabled,\n // and smartquotes on. Could be either a String or an Array.\n //\n // For example, you can use '«»„“' for Russian, '„“‚‘' for German,\n // and ['«\\xA0', '\\xA0»', '‹\\xA0', '\\xA0›'] for French (including nbsp).\n quotes: '\\u201c\\u201d\\u2018\\u2019', /* “”‘’ */\n\n // Highlighter function. Should return escaped HTML,\n // or '' if the source string is not changed and should be escaped externaly.\n // If result starts with )\n breaks: false, // Convert '\\n' in paragraphs into
\n langPrefix: 'language-', // CSS language prefix for fenced blocks\n linkify: false, // autoconvert URL-like texts to links\n\n // Enable some language-neutral replacements + quotes beautification\n typographer: false,\n\n // Double + single quotes replacement pairs, when typographer enabled,\n // and smartquotes on. Could be either a String or an Array.\n //\n // For example, you can use '«»„“' for Russian, '„“‚‘' for German,\n // and ['«\\xA0', '\\xA0»', '‹\\xA0', '\\xA0›'] for French (including nbsp).\n quotes: '\\u201c\\u201d\\u2018\\u2019', /* “”‘’ */\n\n // Highlighter function. Should return escaped HTML,\n // or '' if the source string is not changed and should be escaped externaly.\n // If result starts with `~` + `~~` + `~~`, 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', function (state) {\n var curr,\n tokens_meta = state.tokens_meta,\n max = (state.tokens_meta || []).length;\n\n postProcess(state, state.delimiters);\n\n for (curr = 0; curr < max; curr++) {\n if (tokens_meta[curr] && tokens_meta[curr].delimiters) {\n postProcess(state, tokens_meta[curr].delimiters);\n }\n }\n });\n};\n","\r\n\r\nvar Constants = require(\"../Core/Constants\");\r\nvar MarkdownToHtmlConverter = null;\r\n\r\nif (!__IS_OLD_WEBPACK__)\r\n{\r\n \r\n MarkdownToHtmlConverter = require(\"markdown-it\")({\r\n html: false,\r\n linkify: false,\r\n breaks: true,\r\n typographer: true\r\n }).use(require(\"markdown-it-ins\"));\r\n}\r\n\r\nvar EstsError = Constants.EstsError;\r\nvar c_AttributeCollectionPrefix = \"Attribute_\";\r\nvar c_OptionItemPrefix = \"_Option_\";\r\nvar c_HeaderSuffix = \".Header\";\r\nvar c_BodySuffix = \".Body\";\r\n\r\n\r\nvar StringCustomizationHelper =\r\n{\r\n \r\n resolveConditionalAccessPageErrorName: function (errorCode)\r\n {\r\n switch (errorCode)\r\n {\r\n case EstsError.ApplicationUsedIsNotAnApprovedAppRequiredByConditionalAccess: return \"ApplicationUsedIsNotAnApprovedAppRequiredByConditionalAccess\";\r\n case EstsError.BlockedByConditionalAccess: return \"BlockedByConditionalAccess\";\r\n case EstsError.BlockedByConditionalAccessForRemoteDeviceFlow: return \"BlockedByConditionalAccessForRemoteDeviceFlow\";\r\n case EstsError.BrokerAppNotInstalled: return \"BrokerAppNotInstalled\";\r\n case EstsError.BrokerAppNotInstalledDeviceAuthenticationFailed: return \"BrokerAppNotInstalledDeviceAuthenticationFailed\";\r\n case EstsError.DeviceIsNotWorkplaceJoined: return \"DeviceIsNotWorkplaceJoined\";\r\n case EstsError.DeviceIsNotWorkplaceJoinedForMamApp: return \"DeviceIsNotWorkplaceJoinedForMamApp\";\r\n case EstsError.DeviceNotCompliant: return \"DeviceNotCompliant\";\r\n case EstsError.DeviceNotCompliantBrowserNotSupported: return \"DeviceNotCompliantBrowserNotSupported\";\r\n case EstsError.DeviceNotCompliantDeviceCompliantRequired: return \"DeviceNotCompliantDeviceCompliantRequired\";\r\n case EstsError.DeviceNotCompliantDeviceManagementRequired: return \"DeviceNotCompliantDeviceManagementRequired\";\r\n case EstsError.DeviceNotDomainJoined: return \"DeviceNotDomainJoined\";\r\n case EstsError.DeviceNotDomainJoinedBrowserNotSupported: return \"DeviceNotDomainJoinedBrowserNotSupported\";\r\n case EstsError.ProofUpBlockedDueToRisk: return \"ProofUpBlockedDueToRisk\";\r\n case EstsError.ProofUpBlockedDueToUserRisk: return \"ProofUpBlockedDueToUserRisk\";\r\n case EstsError.RemediateCompliantApp: return \"RemediateCompliantApp\";\r\n case EstsError.RemediateDeviceStateManagedBrowserRequired: return \"RemediateDeviceStateManagedBrowserRequired\";\r\n case EstsError.RemediateDeviceStateWorkplaceJoinRequired: return \"RemediateDeviceStateWorkplaceJoinRequired\";\r\n default: return \"\";\r\n }\r\n },\r\n\r\n \r\n resolveProofUpRedirectPageErrorName: function (errorCode)\r\n {\r\n switch (errorCode)\r\n {\r\n case EstsError.AuthenticatorAppRegistrationRequiredInterrupt: return \"AuthenticatorAppRegistrationRequiredInterrupt\";\r\n case EstsError.AuthenticatorAppRegistrationEnforcementInterrupt: return \"AuthenticatorAppRegistrationEnforcementInterrupt\";\r\n case EstsError.UserStrongAuthEnrollmentRequiredInterrupt: return \"UserStrongAuthEnrollmentRequiredInterrupt\";\r\n case EstsError.UserStrongAuthClientAuthNRequiredInterrupt: return \"UserStrongAuthClientAuthNRequiredInterrupt\";\r\n case EstsError.AdminConsentRequired: return \"AdminConsentRequired\";\r\n case EstsError.AdminConsentRequiredRequestAccess: return \"AdminConsentRequiredRequestAccess\";\r\n default: return \"\";\r\n }\r\n },\r\n\r\n \r\n resolveErrorPageErrorName: function (errorCode)\r\n {\r\n switch (errorCode)\r\n {\r\n case EstsError.RequiredDeviceStateNotSupported: return \"RequiredDeviceStateNotSupported\";\r\n case EstsError.AdminConsentRequired: return \"AdminConsentRequired\";\r\n case EstsError.AdminConsentRequiredRequestAccess: return \"AdminConsentRequiredRequestAccess\";\r\n default: return \"\";\r\n }\r\n },\r\n\r\n \r\n parseMarkdownString: function (stringToConvert)\r\n {\r\n if (MarkdownToHtmlConverter)\r\n {\r\n return MarkdownToHtmlConverter.render(stringToConvert);\r\n }\r\n\r\n return stringToConvert;\r\n },\r\n\r\n \r\n customStringResolver: function (stringsArray, stringId)\r\n {\r\n for (var i = 0; i < stringsArray.length; i++)\r\n {\r\n if (stringsArray[i].key.toLowerCase() === stringId.toLowerCase())\r\n {\r\n return stringsArray[i].value;\r\n }\r\n }\r\n\r\n return \"\";\r\n },\r\n\r\n \r\n getAttributeCollectionString: function (stringsArray, attributeId)\r\n {\r\n if (!stringsArray || !attributeId)\r\n {\r\n return;\r\n }\r\n\r\n var stringId = c_AttributeCollectionPrefix + attributeId;\r\n var customString = this.customStringResolver(stringsArray, stringId);\r\n\r\n return customString;\r\n },\r\n\r\n \r\n getAttributeCollectionOptionString: function (stringsArray, attributeId, optionId)\r\n {\r\n if (!stringsArray || !attributeId || !optionId)\r\n {\r\n return;\r\n }\r\n\r\n var stringId = c_AttributeCollectionPrefix + attributeId + c_OptionItemPrefix + optionId;\r\n var customString = this.customStringResolver(stringsArray, stringId);\r\n\r\n return customString;\r\n },\r\n\r\n \r\n parseAttributeCollectionOptionString: function (stringsArray, attributeId, optionId)\r\n {\r\n if (!optionId)\r\n {\r\n return;\r\n }\r\n\r\n var customString = this.getAttributeCollectionOptionString(stringsArray, attributeId, optionId.replace(/\\s+/g, \"\")) || optionId;\r\n\r\n \r\n \r\n var htmlOutput = this.parseMarkdownString(customString)\r\n .replace(/

/g, \"\")\r\n .replace(/<\\/p>/g, \"\")\r\n .replace(/= 0xD800 && c <= 0xDFFF) { return false; }\n // never used\n if (c >= 0xFDD0 && c <= 0xFDEF) { return false; }\n if ((c & 0xFFFF) === 0xFFFF || (c & 0xFFFF) === 0xFFFE) { return false; }\n // control codes\n if (c >= 0x00 && c <= 0x08) { return false; }\n if (c === 0x0B) { return false; }\n if (c >= 0x0E && c <= 0x1F) { return false; }\n if (c >= 0x7F && c <= 0x9F) { return false; }\n // out of range\n if (c > 0x10FFFF) { return false; }\n return true;\n}\n\nfunction fromCodePoint(c) {\n /*eslint no-bitwise:0*/\n if (c > 0xffff) {\n c -= 0x10000;\n var surrogate1 = 0xd800 + (c >> 10),\n surrogate2 = 0xdc00 + (c & 0x3ff);\n\n return String.fromCharCode(surrogate1, surrogate2);\n }\n return String.fromCharCode(c);\n}\n\n\nvar UNESCAPE_MD_RE = /\\\\([!\"#$%&'()*+,\\-.\\/:;<=>?@[\\\\\\]^_`{|}~])/g;\nvar ENTITY_RE = /&([a-z#][a-z0-9]{1,31});/gi;\nvar UNESCAPE_ALL_RE = new RegExp(UNESCAPE_MD_RE.source + '|' + ENTITY_RE.source, 'gi');\n\nvar DIGITAL_ENTITY_TEST_RE = /^#((?:x[a-f0-9]{1,8}|[0-9]{1,8}))/i;\n\nvar entities = require('./entities');\n\nfunction replaceEntityPattern(match, name) {\n var code = 0;\n\n if (has(entities, name)) {\n return entities[name];\n }\n\n if (name.charCodeAt(0) === 0x23/* # */ && DIGITAL_ENTITY_TEST_RE.test(name)) {\n code = name[1].toLowerCase() === 'x' ?\n parseInt(name.slice(2), 16) : parseInt(name.slice(1), 10);\n\n if (isValidEntityCode(code)) {\n return fromCodePoint(code);\n }\n }\n\n return match;\n}\n\n/*function replaceEntities(str) {\n if (str.indexOf('&') < 0) { return str; }\n\n return str.replace(ENTITY_RE, replaceEntityPattern);\n}*/\n\nfunction unescapeMd(str) {\n if (str.indexOf('\\\\') < 0) { return str; }\n return str.replace(UNESCAPE_MD_RE, '$1');\n}\n\nfunction unescapeAll(str) {\n if (str.indexOf('\\\\') < 0 && str.indexOf('&') < 0) { return str; }\n\n return str.replace(UNESCAPE_ALL_RE, function (match, escaped, entity) {\n if (escaped) { return escaped; }\n return replaceEntityPattern(match, entity);\n });\n}\n\n////////////////////////////////////////////////////////////////////////////////\n\nvar HTML_ESCAPE_TEST_RE = /[&<>\"]/;\nvar HTML_ESCAPE_REPLACE_RE = /[&<>\"]/g;\nvar HTML_REPLACEMENTS = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"'\n};\n\nfunction replaceUnsafeChar(ch) {\n return HTML_REPLACEMENTS[ch];\n}\n\nfunction escapeHtml(str) {\n if (HTML_ESCAPE_TEST_RE.test(str)) {\n return str.replace(HTML_ESCAPE_REPLACE_RE, replaceUnsafeChar);\n }\n return str;\n}\n\n////////////////////////////////////////////////////////////////////////////////\n\nvar REGEXP_ESCAPE_RE = /[.?*+^$[\\]\\\\(){}|-]/g;\n\nfunction escapeRE(str) {\n return str.replace(REGEXP_ESCAPE_RE, '\\\\$&');\n}\n\n////////////////////////////////////////////////////////////////////////////////\n\nfunction isSpace(code) {\n switch (code) {\n case 0x09:\n case 0x20:\n return true;\n }\n return false;\n}\n\n// Zs (unicode class) || [\\t\\f\\v\\r\\n]\nfunction isWhiteSpace(code) {\n if (code >= 0x2000 && code <= 0x200A) { return true; }\n switch (code) {\n case 0x09: // \\t\n case 0x0A: // \\n\n case 0x0B: // \\v\n case 0x0C: // \\f\n case 0x0D: // \\r\n case 0x20:\n case 0xA0:\n case 0x1680:\n case 0x202F:\n case 0x205F:\n case 0x3000:\n return true;\n }\n return false;\n}\n\n////////////////////////////////////////////////////////////////////////////////\n\n/*eslint-disable max-len*/\nvar UNICODE_PUNCT_RE = require('uc.micro/categories/P/regex');\n\n// Currently without astral characters support.\nfunction isPunctChar(ch) {\n return UNICODE_PUNCT_RE.test(ch);\n}\n\n\n// Markdown ASCII punctuation characters.\n//\n// !, \", #, $, %, &, ', (, ), *, +, ,, -, ., /, :, ;, <, =, >, ?, @, [, \\, ], ^, _, `, {, |, }, or ~\n// http://spec.commonmark.org/0.15/#ascii-punctuation-character\n//\n// Don't confuse with unicode punctuation !!! It lacks some chars in ascii range.\n//\nfunction isMdAsciiPunct(ch) {\n switch (ch) {\n case 0x21/* ! */:\n case 0x22/* \" */:\n case 0x23/* # */:\n case 0x24/* $ */:\n case 0x25/* % */:\n case 0x26/* & */:\n case 0x27/* ' */:\n case 0x28/* ( */:\n case 0x29/* ) */:\n case 0x2A/* * */:\n case 0x2B/* + */:\n case 0x2C/* , */:\n case 0x2D/* - */:\n case 0x2E/* . */:\n case 0x2F/* / */:\n case 0x3A/* : */:\n case 0x3B/* ; */:\n case 0x3C/* < */:\n case 0x3D/* = */:\n case 0x3E/* > */:\n case 0x3F/* ? */:\n case 0x40/* @ */:\n case 0x5B/* [ */:\n case 0x5C/* \\ */:\n case 0x5D/* ] */:\n case 0x5E/* ^ */:\n case 0x5F/* _ */:\n case 0x60/* ` */:\n case 0x7B/* { */:\n case 0x7C/* | */:\n case 0x7D/* } */:\n case 0x7E/* ~ */:\n return true;\n default:\n return false;\n }\n}\n\n// Hepler to unify [reference labels].\n//\nfunction normalizeReference(str) {\n // Trim and collapse whitespace\n //\n str = str.trim().replace(/\\s+/g, ' ');\n\n // In node v10 'ẞ'.toLowerCase() === 'Ṿ', which is presumed to be a bug\n // fixed in v12 (couldn't find any details).\n //\n // So treat this one as a special case\n // (remove this when node v10 is no longer supported).\n //\n if ('ẞ'.toLowerCase() === 'Ṿ') {\n str = str.replace(/ẞ/g, 'ß');\n }\n\n // .toLowerCase().toUpperCase() should get rid of all differences\n // between letter variants.\n //\n // Simple .toLowerCase() doesn't normalize 125 code points correctly,\n // and .toUpperCase doesn't normalize 6 of them (list of exceptions:\n // İ, ϴ, ẞ, Ω, K, Å - those are already uppercased, but have differently\n // uppercased versions).\n //\n // Here's an example showing how it happens. Lets take greek letter omega:\n // uppercase U+0398 (Θ), U+03f4 (ϴ) and lowercase U+03b8 (θ), U+03d1 (ϑ)\n //\n // Unicode entries:\n // 0398;GREEK CAPITAL LETTER THETA;Lu;0;L;;;;;N;;;;03B8;\n // 03B8;GREEK SMALL LETTER THETA;Ll;0;L;;;;;N;;;0398;;0398\n // 03D1;GREEK THETA SYMBOL;Ll;0;L; 03B8;;;;N;GREEK SMALL LETTER SCRIPT THETA;;0398;;0398\n // 03F4;GREEK CAPITAL THETA SYMBOL;Lu;0;L; 0398;;;;N;;;;03B8;\n //\n // Case-insensitive comparison should treat all of them as equivalent.\n //\n // But .toLowerCase() doesn't change ϑ (it's already lowercase),\n // and .toUpperCase() doesn't change ϴ (already uppercase).\n //\n // Applying first lower then upper case normalizes any character:\n // '\\u0398\\u03f4\\u03b8\\u03d1'.toLowerCase().toUpperCase() === '\\u0398\\u0398\\u0398\\u0398'\n //\n // Note: this is equivalent to unicode case folding; unicode normalization\n // is a different step that is not required here.\n //\n // Final result should be uppercased, because it's later stored in an object\n // (this avoid a conflict with Object.prototype members,\n // most notably, `__proto__`)\n //\n return str.toLowerCase().toUpperCase();\n}\n\n////////////////////////////////////////////////////////////////////////////////\n\n// Re-export libraries commonly used in both markdown-it and its plugins,\n// so plugins won't have to depend on them explicitly, which reduces their\n// bundled size (e.g. a browser build).\n//\nexports.lib = {};\nexports.lib.mdurl = require('mdurl');\nexports.lib.ucmicro = require('uc.micro');\n\nexports.assign = assign;\nexports.isString = isString;\nexports.has = has;\nexports.unescapeMd = unescapeMd;\nexports.unescapeAll = unescapeAll;\nexports.isValidEntityCode = isValidEntityCode;\nexports.fromCodePoint = fromCodePoint;\n// exports.replaceEntities = replaceEntities;\nexports.escapeHtml = escapeHtml;\nexports.arrayReplaceAt = arrayReplaceAt;\nexports.isSpace = isSpace;\nexports.isWhiteSpace = isWhiteSpace;\nexports.isMdAsciiPunct = isMdAsciiPunct;\nexports.isPunctChar = isPunctChar;\nexports.escapeRE = escapeRE;\nexports.normalizeReference = normalizeReference;\n","/**\n * class Ruler\n *\n * Helper class, used by [[MarkdownIt#core]], [[MarkdownIt#block]] and\n * [[MarkdownIt#inline]] to manage sequences of functions (rules):\n *\n * - keep rules in defined order\n * - assign the name to each rule\n * - enable/disable rules\n * - add/replace rules\n * - allow assign rules to additional named chains (in the same)\n * - cacheing lists of active rules\n *\n * You will not need use this class directly until write plugins. For simple\n * rules control use [[MarkdownIt.disable]], [[MarkdownIt.enable]] and\n * [[MarkdownIt.use]].\n **/\n'use strict';\n\n\n/**\n * new Ruler()\n **/\nfunction Ruler() {\n // List of added rules. Each element is:\n //\n // {\n // name: XXX,\n // enabled: Boolean,\n // fn: Function(),\n // alt: [ name2, name3 ]\n // }\n //\n this.__rules__ = [];\n\n // Cached rule chains.\n //\n // First level - chain name, '' for default.\n // Second level - diginal anchor for fast filtering by charcodes.\n //\n this.__cache__ = null;\n}\n\n////////////////////////////////////////////////////////////////////////////////\n// Helper methods, should not be used directly\n\n\n// Find rule index by name\n//\nRuler.prototype.__find__ = function (name) {\n for (var i = 0; i < this.__rules__.length; i++) {\n if (this.__rules__[i].name === name) {\n return i;\n }\n }\n return -1;\n};\n\n\n// Build rules lookup cache\n//\nRuler.prototype.__compile__ = function () {\n var self = this;\n var chains = [ '' ];\n\n // collect unique names\n self.__rules__.forEach(function (rule) {\n if (!rule.enabled) { return; }\n\n rule.alt.forEach(function (altName) {\n if (chains.indexOf(altName) < 0) {\n chains.push(altName);\n }\n });\n });\n\n self.__cache__ = {};\n\n chains.forEach(function (chain) {\n self.__cache__[chain] = [];\n self.__rules__.forEach(function (rule) {\n if (!rule.enabled) { return; }\n\n if (chain && rule.alt.indexOf(chain) < 0) { return; }\n\n self.__cache__[chain].push(rule.fn);\n });\n });\n};\n\n\n/**\n * Ruler.at(name, fn [, options])\n * - name (String): rule name to replace.\n * - fn (Function): new rule function.\n * - options (Object): new rule options (not mandatory).\n *\n * Replace rule by name with new function & options. Throws error if name not\n * found.\n *\n * ##### Options:\n *\n * - __alt__ - array with names of \"alternate\" chains.\n *\n * ##### Example\n *\n * Replace existing typographer replacement rule with new one:\n *\n * ```javascript\n * var md = require('markdown-it')();\n *\n * md.core.ruler.at('replacements', function replace(state) {\n * //...\n * });\n * ```\n **/\nRuler.prototype.at = function (name, fn, options) {\n var index = this.__find__(name);\n var opt = options || {};\n\n if (index === -1) { throw new Error('Parser rule not found: ' + name); }\n\n this.__rules__[index].fn = fn;\n this.__rules__[index].alt = opt.alt || [];\n this.__cache__ = null;\n};\n\n\n/**\n * Ruler.before(beforeName, ruleName, fn [, options])\n * - beforeName (String): new rule will be added before this one.\n * - ruleName (String): name of added rule.\n * - fn (Function): rule function.\n * - options (Object): rule options (not mandatory).\n *\n * Add new rule to chain before one with given name. See also\n * [[Ruler.after]], [[Ruler.push]].\n *\n * ##### Options:\n *\n * - __alt__ - array with names of \"alternate\" chains.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')();\n *\n * md.block.ruler.before('paragraph', 'my_rule', function replace(state) {\n * //...\n * });\n * ```\n **/\nRuler.prototype.before = function (beforeName, ruleName, fn, options) {\n var index = this.__find__(beforeName);\n var opt = options || {};\n\n if (index === -1) { throw new Error('Parser rule not found: ' + beforeName); }\n\n this.__rules__.splice(index, 0, {\n name: ruleName,\n enabled: true,\n fn: fn,\n alt: opt.alt || []\n });\n\n this.__cache__ = null;\n};\n\n\n/**\n * Ruler.after(afterName, ruleName, fn [, options])\n * - afterName (String): new rule will be added after this one.\n * - ruleName (String): name of added rule.\n * - fn (Function): rule function.\n * - options (Object): rule options (not mandatory).\n *\n * Add new rule to chain after one with given name. See also\n * [[Ruler.before]], [[Ruler.push]].\n *\n * ##### Options:\n *\n * - __alt__ - array with names of \"alternate\" chains.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')();\n *\n * md.inline.ruler.after('text', 'my_rule', function replace(state) {\n * //...\n * });\n * ```\n **/\nRuler.prototype.after = function (afterName, ruleName, fn, options) {\n var index = this.__find__(afterName);\n var opt = options || {};\n\n if (index === -1) { throw new Error('Parser rule not found: ' + afterName); }\n\n this.__rules__.splice(index + 1, 0, {\n name: ruleName,\n enabled: true,\n fn: fn,\n alt: opt.alt || []\n });\n\n this.__cache__ = null;\n};\n\n/**\n * Ruler.push(ruleName, fn [, options])\n * - ruleName (String): name of added rule.\n * - fn (Function): rule function.\n * - options (Object): rule options (not mandatory).\n *\n * Push new rule to the end of chain. See also\n * [[Ruler.before]], [[Ruler.after]].\n *\n * ##### Options:\n *\n * - __alt__ - array with names of \"alternate\" chains.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')();\n *\n * md.core.ruler.push('my_rule', function replace(state) {\n * //...\n * });\n * ```\n **/\nRuler.prototype.push = function (ruleName, fn, options) {\n var opt = options || {};\n\n this.__rules__.push({\n name: ruleName,\n enabled: true,\n fn: fn,\n alt: opt.alt || []\n });\n\n this.__cache__ = null;\n};\n\n\n/**\n * Ruler.enable(list [, ignoreInvalid]) -> Array\n * - list (String|Array): list of rule names to enable.\n * - ignoreInvalid (Boolean): set `true` to ignore errors when rule not found.\n *\n * Enable rules with given names. If any rule name not found - throw Error.\n * Errors can be disabled by second param.\n *\n * Returns list of found rule names (if no exception happened).\n *\n * See also [[Ruler.disable]], [[Ruler.enableOnly]].\n **/\nRuler.prototype.enable = function (list, ignoreInvalid) {\n if (!Array.isArray(list)) { list = [ list ]; }\n\n var result = [];\n\n // Search by name and enable\n list.forEach(function (name) {\n var idx = this.__find__(name);\n\n if (idx < 0) {\n if (ignoreInvalid) { return; }\n throw new Error('Rules manager: invalid rule name ' + name);\n }\n this.__rules__[idx].enabled = true;\n result.push(name);\n }, this);\n\n this.__cache__ = null;\n return result;\n};\n\n\n/**\n * Ruler.enableOnly(list [, ignoreInvalid])\n * - list (String|Array): list of rule names to enable (whitelist).\n * - ignoreInvalid (Boolean): set `true` to ignore errors when rule not found.\n *\n * Enable rules with given names, and disable everything else. If any rule name\n * not found - throw Error. Errors can be disabled by second param.\n *\n * See also [[Ruler.disable]], [[Ruler.enable]].\n **/\nRuler.prototype.enableOnly = function (list, ignoreInvalid) {\n if (!Array.isArray(list)) { list = [ list ]; }\n\n this.__rules__.forEach(function (rule) { rule.enabled = false; });\n\n this.enable(list, ignoreInvalid);\n};\n\n\n/**\n * Ruler.disable(list [, ignoreInvalid]) -> Array\n * - list (String|Array): list of rule names to disable.\n * - ignoreInvalid (Boolean): set `true` to ignore errors when rule not found.\n *\n * Disable rules with given names. If any rule name not found - throw Error.\n * Errors can be disabled by second param.\n *\n * Returns list of found rule names (if no exception happened).\n *\n * See also [[Ruler.enable]], [[Ruler.enableOnly]].\n **/\nRuler.prototype.disable = function (list, ignoreInvalid) {\n if (!Array.isArray(list)) { list = [ list ]; }\n\n var result = [];\n\n // Search by name and disable\n list.forEach(function (name) {\n var idx = this.__find__(name);\n\n if (idx < 0) {\n if (ignoreInvalid) { return; }\n throw new Error('Rules manager: invalid rule name ' + name);\n }\n this.__rules__[idx].enabled = false;\n result.push(name);\n }, this);\n\n this.__cache__ = null;\n return result;\n};\n\n\n/**\n * Ruler.getRules(chainName) -> Array\n *\n * Return array of active functions (rules) for given chain name. It analyzes\n * rules configuration, compiles caches if not exists and returns result.\n *\n * Default chain name is `''` (empty string). It can't be skipped. That's\n * done intentionally, to keep signature monomorphic for high speed.\n **/\nRuler.prototype.getRules = function (chainName) {\n if (this.__cache__ === null) {\n this.__compile__();\n }\n\n // Chain can be empty, if rules disabled. But we still have to return Array.\n return this.__cache__[chainName] || [];\n};\n\nmodule.exports = Ruler;\n","// Token class\n\n'use strict';\n\n\n/**\n * class Token\n **/\n\n/**\n * new Token(type, tag, nesting)\n *\n * Create new token and fill passed properties.\n **/\nfunction Token(type, tag, nesting) {\n /**\n * Token#type -> String\n *\n * Type of the token (string, e.g. \"paragraph_open\")\n **/\n this.type = type;\n\n /**\n * Token#tag -> String\n *\n * html tag name, e.g. \"p\"\n **/\n this.tag = tag;\n\n /**\n * Token#attrs -> Array\n *\n * Html attributes. Format: `[ [ name1, value1 ], [ name2, value2 ] ]`\n **/\n this.attrs = null;\n\n /**\n * Token#map -> Array\n *\n * Source map info. Format: `[ line_begin, line_end ]`\n **/\n this.map = null;\n\n /**\n * Token#nesting -> Number\n *\n * Level change (number in {-1, 0, 1} set), where:\n *\n * - `1` means the tag is opening\n * - `0` means the tag is self-closing\n * - `-1` means the tag is closing\n **/\n this.nesting = nesting;\n\n /**\n * Token#level -> Number\n *\n * nesting level, the same as `state.level`\n **/\n this.level = 0;\n\n /**\n * Token#children -> Array\n *\n * An array of child nodes (inline and img tokens)\n **/\n this.children = null;\n\n /**\n * Token#content -> String\n *\n * In a case of self-closing tag (code, html, fence, etc.),\n * it has contents of this tag.\n **/\n this.content = '';\n\n /**\n * Token#markup -> String\n *\n * '*' or '_' for emphasis, fence string for fence, etc.\n **/\n this.markup = '';\n\n /**\n * Token#info -> String\n *\n * Additional information:\n *\n * - Info string for \"fence\" tokens\n * - The value \"auto\" for autolink \"link_open\" and \"link_close\" tokens\n * - The string value of the item marker for ordered-list \"list_item_open\" tokens\n **/\n this.info = '';\n\n /**\n * Token#meta -> Object\n *\n * A place for plugins to store an arbitrary data\n **/\n this.meta = null;\n\n /**\n * Token#block -> Boolean\n *\n * True for block-level tokens, false for inline tokens.\n * Used in renderer to calculate line breaks\n **/\n this.block = false;\n\n /**\n * Token#hidden -> Boolean\n *\n * If it's true, ignore this element when rendering. Used for tight lists\n * to hide paragraphs.\n **/\n this.hidden = false;\n}\n\n\n/**\n * Token.attrIndex(name) -> Number\n *\n * Search attribute index by name.\n **/\nToken.prototype.attrIndex = function attrIndex(name) {\n var attrs, i, len;\n\n if (!this.attrs) { return -1; }\n\n attrs = this.attrs;\n\n for (i = 0, len = attrs.length; i < len; i++) {\n if (attrs[i][0] === name) { return i; }\n }\n return -1;\n};\n\n\n/**\n * Token.attrPush(attrData)\n *\n * Add `[ name, value ]` attribute to list. Init attrs if necessary\n **/\nToken.prototype.attrPush = function attrPush(attrData) {\n if (this.attrs) {\n this.attrs.push(attrData);\n } else {\n this.attrs = [ attrData ];\n }\n};\n\n\n/**\n * Token.attrSet(name, value)\n *\n * Set `name` attribute to `value`. Override old value if exists.\n **/\nToken.prototype.attrSet = function attrSet(name, value) {\n var idx = this.attrIndex(name),\n attrData = [ name, value ];\n\n if (idx < 0) {\n this.attrPush(attrData);\n } else {\n this.attrs[idx] = attrData;\n }\n};\n\n\n/**\n * Token.attrGet(name)\n *\n * Get the value of attribute `name`, or null if it does not exist.\n **/\nToken.prototype.attrGet = function attrGet(name) {\n var idx = this.attrIndex(name), value = null;\n if (idx >= 0) {\n value = this.attrs[idx][1];\n }\n return value;\n};\n\n\n/**\n * Token.attrJoin(name, value)\n *\n * Join value to existing attribute via space. Or create new attribute if not\n * exists. Useful to operate with token classes.\n **/\nToken.prototype.attrJoin = function attrJoin(name, value) {\n var idx = this.attrIndex(name);\n\n if (idx < 0) {\n this.attrPush([ name, value ]);\n } else {\n this.attrs[idx][1] = this.attrs[idx][1] + ' ' + value;\n }\n};\n\n\nmodule.exports = Token;\n","// HTML5 entities map: { name -> utf16string }\n//\n'use strict';\n\n/*eslint quotes:0*/\nmodule.exports = require('entities/lib/maps/entities.json');\n","module.exports=/[!-#%-\\*,-\\/:;\\?@\\[-\\]_\\{\\}\\xA1\\xA7\\xAB\\xB6\\xB7\\xBB\\xBF\\u037E\\u0387\\u055A-\\u055F\\u0589\\u058A\\u05BE\\u05C0\\u05C3\\u05C6\\u05F3\\u05F4\\u0609\\u060A\\u060C\\u060D\\u061B\\u061E\\u061F\\u066A-\\u066D\\u06D4\\u0700-\\u070D\\u07F7-\\u07F9\\u0830-\\u083E\\u085E\\u0964\\u0965\\u0970\\u09FD\\u0A76\\u0AF0\\u0C84\\u0DF4\\u0E4F\\u0E5A\\u0E5B\\u0F04-\\u0F12\\u0F14\\u0F3A-\\u0F3D\\u0F85\\u0FD0-\\u0FD4\\u0FD9\\u0FDA\\u104A-\\u104F\\u10FB\\u1360-\\u1368\\u1400\\u166D\\u166E\\u169B\\u169C\\u16EB-\\u16ED\\u1735\\u1736\\u17D4-\\u17D6\\u17D8-\\u17DA\\u1800-\\u180A\\u1944\\u1945\\u1A1E\\u1A1F\\u1AA0-\\u1AA6\\u1AA8-\\u1AAD\\u1B5A-\\u1B60\\u1BFC-\\u1BFF\\u1C3B-\\u1C3F\\u1C7E\\u1C7F\\u1CC0-\\u1CC7\\u1CD3\\u2010-\\u2027\\u2030-\\u2043\\u2045-\\u2051\\u2053-\\u205E\\u207D\\u207E\\u208D\\u208E\\u2308-\\u230B\\u2329\\u232A\\u2768-\\u2775\\u27C5\\u27C6\\u27E6-\\u27EF\\u2983-\\u2998\\u29D8-\\u29DB\\u29FC\\u29FD\\u2CF9-\\u2CFC\\u2CFE\\u2CFF\\u2D70\\u2E00-\\u2E2E\\u2E30-\\u2E4E\\u3001-\\u3003\\u3008-\\u3011\\u3014-\\u301F\\u3030\\u303D\\u30A0\\u30FB\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA673\\uA67E\\uA6F2-\\uA6F7\\uA874-\\uA877\\uA8CE\\uA8CF\\uA8F8-\\uA8FA\\uA8FC\\uA92E\\uA92F\\uA95F\\uA9C1-\\uA9CD\\uA9DE\\uA9DF\\uAA5C-\\uAA5F\\uAADE\\uAADF\\uAAF0\\uAAF1\\uABEB\\uFD3E\\uFD3F\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE61\\uFE63\\uFE68\\uFE6A\\uFE6B\\uFF01-\\uFF03\\uFF05-\\uFF0A\\uFF0C-\\uFF0F\\uFF1A\\uFF1B\\uFF1F\\uFF20\\uFF3B-\\uFF3D\\uFF3F\\uFF5B\\uFF5D\\uFF5F-\\uFF65]|\\uD800[\\uDD00-\\uDD02\\uDF9F\\uDFD0]|\\uD801\\uDD6F|\\uD802[\\uDC57\\uDD1F\\uDD3F\\uDE50-\\uDE58\\uDE7F\\uDEF0-\\uDEF6\\uDF39-\\uDF3F\\uDF99-\\uDF9C]|\\uD803[\\uDF55-\\uDF59]|\\uD804[\\uDC47-\\uDC4D\\uDCBB\\uDCBC\\uDCBE-\\uDCC1\\uDD40-\\uDD43\\uDD74\\uDD75\\uDDC5-\\uDDC8\\uDDCD\\uDDDB\\uDDDD-\\uDDDF\\uDE38-\\uDE3D\\uDEA9]|\\uD805[\\uDC4B-\\uDC4F\\uDC5B\\uDC5D\\uDCC6\\uDDC1-\\uDDD7\\uDE41-\\uDE43\\uDE60-\\uDE6C\\uDF3C-\\uDF3E]|\\uD806[\\uDC3B\\uDE3F-\\uDE46\\uDE9A-\\uDE9C\\uDE9E-\\uDEA2]|\\uD807[\\uDC41-\\uDC45\\uDC70\\uDC71\\uDEF7\\uDEF8]|\\uD809[\\uDC70-\\uDC74]|\\uD81A[\\uDE6E\\uDE6F\\uDEF5\\uDF37-\\uDF3B\\uDF44]|\\uD81B[\\uDE97-\\uDE9A]|\\uD82F\\uDC9F|\\uD836[\\uDE87-\\uDE8B]|\\uD83A[\\uDD5E\\uDD5F]/","'use strict';\n\n\nmodule.exports.encode = require('./encode');\nmodule.exports.decode = require('./decode');\nmodule.exports.format = require('./format');\nmodule.exports.parse = require('./parse');\n","'use strict';\n\nexports.Any = require('./properties/Any/regex');\nexports.Cc = require('./categories/Cc/regex');\nexports.Cf = require('./categories/Cf/regex');\nexports.P = require('./categories/P/regex');\nexports.Z = require('./categories/Z/regex');\n","// Regexps to match html elements\n\n'use strict';\n\nvar attr_name = '[a-zA-Z_:][a-zA-Z0-9:._-]*';\n\nvar unquoted = '[^\"\\'=<>`\\\\x00-\\\\x20]+';\nvar single_quoted = \"'[^']*'\";\nvar double_quoted = '\"[^\"]*\"';\n\nvar attr_value = '(?:' + unquoted + '|' + single_quoted + '|' + double_quoted + ')';\n\nvar attribute = '(?:\\\\s+' + attr_name + '(?:\\\\s*=\\\\s*' + attr_value + ')?)';\n\nvar open_tag = '<[A-Za-z][A-Za-z0-9\\\\-]*' + attribute + '*\\\\s*\\\\/?>';\n\nvar close_tag = '<\\\\/[A-Za-z][A-Za-z0-9\\\\-]*\\\\s*>';\nvar comment = '|';\nvar processing = '<[?][\\\\s\\\\S]*?[?]>';\nvar declaration = ']*>';\nvar cdata = '';\n\nvar HTML_TAG_RE = new RegExp('^(?:' + open_tag + '|' + close_tag + '|' + comment +\n '|' + processing + '|' + declaration + '|' + cdata + ')');\nvar HTML_OPEN_CLOSE_TAG_RE = new RegExp('^(?:' + open_tag + '|' + close_tag + ')');\n\nmodule.exports.HTML_TAG_RE = HTML_TAG_RE;\nmodule.exports.HTML_OPEN_CLOSE_TAG_RE = HTML_OPEN_CLOSE_TAG_RE;\n","// ~~strike through~~\n//\n'use strict';\n\n\n// Insert each marker as a separate text token, and add it to delimiter list\n//\nmodule.exports.tokenize = function strikethrough(state, silent) {\n var i, scanned, token, len, ch,\n start = state.pos,\n marker = state.src.charCodeAt(start);\n\n if (silent) { return false; }\n\n if (marker !== 0x7E/* ~ */) { return false; }\n\n scanned = state.scanDelims(state.pos, true);\n len = scanned.length;\n ch = String.fromCharCode(marker);\n\n if (len < 2) { return false; }\n\n if (len % 2) {\n token = state.push('text', '', 0);\n token.content = ch;\n len--;\n }\n\n for (i = 0; i < len; i += 2) {\n token = state.push('text', '', 0);\n token.content = ch + ch;\n\n state.delimiters.push({\n marker: marker,\n length: 0, // disable \"rule of 3\" length checks meant for emphasis\n jump: i / 2, // for `~~` 1 marker = 2 characters\n token: state.tokens.length - 1,\n end: -1,\n open: scanned.can_open,\n close: scanned.can_close\n });\n }\n\n state.pos += scanned.length;\n\n return true;\n};\n\n\nfunction postProcess(state, delimiters) {\n var i, j,\n startDelim,\n endDelim,\n token,\n loneMarkers = [],\n max = delimiters.length;\n\n for (i = 0; i < max; i++) {\n startDelim = delimiters[i];\n\n if (startDelim.marker !== 0x7E/* ~ */) {\n continue;\n }\n\n if (startDelim.end === -1) {\n continue;\n }\n\n endDelim = delimiters[startDelim.end];\n\n token = state.tokens[startDelim.token];\n token.type = 's_open';\n token.tag = 's';\n token.nesting = 1;\n token.markup = '~~';\n token.content = '';\n\n token = state.tokens[endDelim.token];\n token.type = 's_close';\n token.tag = 's';\n token.nesting = -1;\n token.markup = '~~';\n token.content = '';\n\n if (state.tokens[endDelim.token - 1].type === 'text' &&\n state.tokens[endDelim.token - 1].content === '~') {\n\n loneMarkers.push(endDelim.token - 1);\n }\n }\n\n // If a marker sequence has an odd number of characters, it's splitted\n // like this: `~~~~~` -> `~` + `~~` + `~~`, leaving one marker at the\n // start of the sequence.\n //\n // So, we have to move all those markers after subsequent s_close tags.\n //\n while (loneMarkers.length) {\n i = loneMarkers.pop();\n j = i + 1;\n\n while (j < state.tokens.length && state.tokens[j].type === 's_close') {\n j++;\n }\n\n j--;\n\n if (i !== j) {\n token = state.tokens[j];\n state.tokens[j] = state.tokens[i];\n state.tokens[i] = token;\n }\n }\n}\n\n\n// Walk through delimiter list and replace text tokens with tags\n//\nmodule.exports.postProcess = function strikethrough(state) {\n var curr,\n tokens_meta = state.tokens_meta,\n max = state.tokens_meta.length;\n\n postProcess(state, state.delimiters);\n\n for (curr = 0; curr < max; curr++) {\n if (tokens_meta[curr] && tokens_meta[curr].delimiters) {\n postProcess(state, tokens_meta[curr].delimiters);\n }\n }\n};\n","// Process *this* and _that_\n//\n'use strict';\n\n\n// Insert each marker as a separate text token, and add it to delimiter list\n//\nmodule.exports.tokenize = function emphasis(state, silent) {\n var i, scanned, token,\n start = state.pos,\n marker = state.src.charCodeAt(start);\n\n if (silent) { return false; }\n\n if (marker !== 0x5F /* _ */ && marker !== 0x2A /* * */) { return false; }\n\n scanned = state.scanDelims(state.pos, marker === 0x2A);\n\n for (i = 0; i < scanned.length; i++) {\n token = state.push('text', '', 0);\n token.content = String.fromCharCode(marker);\n\n state.delimiters.push({\n // Char code of the starting marker (number).\n //\n marker: marker,\n\n // Total length of these series of delimiters.\n //\n length: scanned.length,\n\n // 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 // If this delimiter is matched as a valid opener, `end` will be\n // equal to its position, otherwise it's `-1`.\n //\n end: -1,\n\n // Boolean flags that determine if this delimiter could open or close\n // an emphasis.\n //\n open: scanned.can_open,\n close: scanned.can_close\n });\n }\n\n state.pos += scanned.length;\n\n return true;\n};\n\n\nfunction postProcess(state, delimiters) {\n var i,\n startDelim,\n endDelim,\n token,\n ch,\n isStrong,\n max = delimiters.length;\n\n for (i = max - 1; i >= 0; i--) {\n startDelim = delimiters[i];\n\n if (startDelim.marker !== 0x5F/* _ */ && startDelim.marker !== 0x2A/* * */) {\n continue;\n }\n\n // Process only opening markers\n if (startDelim.end === -1) {\n continue;\n }\n\n endDelim = delimiters[startDelim.end];\n\n // If the previous delimiter has the same marker and is adjacent to this one,\n // merge those into one strong delimiter.\n //\n // `whatever` -> `whatever`\n //\n isStrong = i > 0 &&\n delimiters[i - 1].end === startDelim.end + 1 &&\n 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\n\n// Walk through delimiter list and replace text tokens with tags\n//\nmodule.exports.postProcess = function emphasis(state) {\n var curr,\n tokens_meta = state.tokens_meta,\n max = state.tokens_meta.length;\n\n postProcess(state, state.delimiters);\n\n for (curr = 0; curr < max; curr++) {\n if (tokens_meta[curr] && tokens_meta[curr].delimiters) {\n postProcess(state, tokens_meta[curr].delimiters);\n }\n }\n};\n"],"sourceRoot":""}