@markdoc/markdoc

Search for an npm package
{
"version": 3,
"sources": ["../src/grammar/tag.js", "../node_modules/markdown-it/lib/common/entities.js", "../node_modules/uc.micro/categories/P/regex.js", "../node_modules/mdurl/encode.js", "../node_modules/mdurl/decode.js", "../node_modules/mdurl/format.js", "../node_modules/mdurl/parse.js", "../node_modules/mdurl/index.js", "../node_modules/uc.micro/properties/Any/regex.js", "../node_modules/uc.micro/categories/Cc/regex.js", "../node_modules/uc.micro/categories/Cf/regex.js", "../node_modules/uc.micro/categories/Z/regex.js", "../node_modules/uc.micro/index.js", "../node_modules/markdown-it/lib/common/utils.js", "../node_modules/markdown-it/lib/helpers/parse_link_label.js", "../node_modules/markdown-it/lib/helpers/parse_link_destination.js", "../node_modules/markdown-it/lib/helpers/parse_link_title.js", "../node_modules/markdown-it/lib/helpers/index.js", "../node_modules/markdown-it/lib/renderer.js", "../node_modules/markdown-it/lib/ruler.js", "../node_modules/markdown-it/lib/rules_core/normalize.js", "../node_modules/markdown-it/lib/rules_core/block.js", "../node_modules/markdown-it/lib/rules_core/inline.js", "../node_modules/markdown-it/lib/rules_core/linkify.js", "../node_modules/markdown-it/lib/rules_core/replacements.js", "../node_modules/markdown-it/lib/rules_core/smartquotes.js", "../node_modules/markdown-it/lib/token.js", "../node_modules/markdown-it/lib/rules_core/state_core.js", "../node_modules/markdown-it/lib/parser_core.js", "../node_modules/markdown-it/lib/rules_block/table.js", "../node_modules/markdown-it/lib/rules_block/code.js", "../node_modules/markdown-it/lib/rules_block/fence.js", "../node_modules/markdown-it/lib/rules_block/blockquote.js", "../node_modules/markdown-it/lib/rules_block/hr.js", "../node_modules/markdown-it/lib/rules_block/list.js", "../node_modules/markdown-it/lib/rules_block/reference.js", "../node_modules/markdown-it/lib/common/html_blocks.js", "../node_modules/markdown-it/lib/common/html_re.js", "../node_modules/markdown-it/lib/rules_block/html_block.js", "../node_modules/markdown-it/lib/rules_block/heading.js", "../node_modules/markdown-it/lib/rules_block/lheading.js", "../node_modules/markdown-it/lib/rules_block/paragraph.js", "../node_modules/markdown-it/lib/rules_block/state_block.js", "../node_modules/markdown-it/lib/parser_block.js", "../node_modules/markdown-it/lib/rules_inline/text.js", "../node_modules/markdown-it/lib/rules_inline/newline.js", "../node_modules/markdown-it/lib/rules_inline/escape.js", "../node_modules/markdown-it/lib/rules_inline/backticks.js", "../node_modules/markdown-it/lib/rules_inline/strikethrough.js", "../node_modules/markdown-it/lib/rules_inline/emphasis.js", "../node_modules/markdown-it/lib/rules_inline/link.js", "../node_modules/markdown-it/lib/rules_inline/image.js", "../node_modules/markdown-it/lib/rules_inline/autolink.js", "../node_modules/markdown-it/lib/rules_inline/html_inline.js", "../node_modules/markdown-it/lib/rules_inline/entity.js", "../node_modules/markdown-it/lib/rules_inline/balance_pairs.js", "../node_modules/markdown-it/lib/rules_inline/text_collapse.js", "../node_modules/markdown-it/lib/rules_inline/state_inline.js", "../node_modules/markdown-it/lib/parser_inline.js", "../node_modules/linkify-it/lib/re.js", "../node_modules/linkify-it/index.js", "../node_modules/punycode/punycode.js", "../node_modules/markdown-it/lib/presets/default.js", "../node_modules/markdown-it/lib/presets/zero.js", "../node_modules/markdown-it/lib/presets/commonmark.js", "../node_modules/markdown-it/lib/index.js", "../node_modules/markdown-it/index.js", "../src/ast/base.ts", "../src/tag.ts", "../src/schema-types/class.ts", "../src/schema-types/id.ts", "../src/utils.ts", "../src/ast/variable.ts", "../src/ast/function.ts", "../src/transformer.ts", "../src/ast/node.ts", "../src/ast/index.ts", "../src/formatter.ts", "../src/tags/conditional.ts", "../src/functions/index.ts", "../src/transforms/table.ts", "../src/transforms/index.ts", "../src/parser.ts", "../src/schema.ts", "../src/renderers/html.ts", "../src/renderers/react/react.ts", "../src/renderers/react/static.ts", "../src/renderers/index.ts", "../src/tags/partial.ts", "../src/tags/table.ts", "../src/tags/slot.ts", "../src/tags/index.ts", "../src/tokenizer/index.ts", "../src/tokenizer/plugins/annotations.ts", "../src/tokenizer/plugins/frontmatter.ts", "../src/tokenizer/plugins/comments.ts", "../src/validator.ts", "../index.ts"],
"sourcesContent": ["// Generated by PEG.js v0.11.0-master.b7b87ea, https://pegjs.org/\n\n'use strict';\n\nfunction peg$subclass(child, parent) {\n function C() {\n this.constructor = child;\n }\n C.prototype = parent.prototype;\n child.prototype = new C();\n}\n\nfunction peg$SyntaxError(message, expected, found, location) {\n this.message = message;\n this.expected = expected;\n this.found = found;\n this.location = location;\n this.name = 'SyntaxError';\n\n // istanbul ignore next\n if (typeof Error.captureStackTrace === 'function') {\n Error.captureStackTrace(this, peg$SyntaxError);\n }\n}\n\npeg$subclass(peg$SyntaxError, Error);\n\npeg$SyntaxError.buildMessage = function (expected, found, location) {\n var DESCRIBE_EXPECTATION_FNS = {\n literal: function (expectation) {\n return '\"' + literalEscape(expectation.text) + '\"';\n },\n\n class: function (expectation) {\n var escapedParts = expectation.parts.map(function (part) {\n return Array.isArray(part)\n ? classEscape(part[0]) + '-' + classEscape(part[1])\n : classEscape(part);\n });\n\n return '[' + (expectation.inverted ? '^' : '') + escapedParts + ']';\n },\n\n any: function () {\n return 'any character';\n },\n\n end: function () {\n return 'end of input';\n },\n\n other: function (expectation) {\n return expectation.description;\n },\n\n not: function (expectation) {\n return 'not ' + describeExpectation(expectation.expected);\n },\n };\n\n function hex(ch) {\n return ch.charCodeAt(0).toString(16).toUpperCase();\n }\n\n function literalEscape(s) {\n return s\n .replace(/\\\\/g, '\\\\\\\\')\n .replace(/\"/g, '\\\\\"')\n .replace(/\\0/g, '\\\\0')\n .replace(/\\t/g, '\\\\t')\n .replace(/\\n/g, '\\\\n')\n .replace(/\\r/g, '\\\\r')\n .replace(/[\\x00-\\x0F]/g, function (ch) {\n return '\\\\x0' + hex(ch);\n })\n .replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function (ch) {\n return '\\\\x' + hex(ch);\n });\n }\n\n function classEscape(s) {\n return s\n .replace(/\\\\/g, '\\\\\\\\')\n .replace(/\\]/g, '\\\\]')\n .replace(/\\^/g, '\\\\^')\n .replace(/-/g, '\\\\-')\n .replace(/\\0/g, '\\\\0')\n .replace(/\\t/g, '\\\\t')\n .replace(/\\n/g, '\\\\n')\n .replace(/\\r/g, '\\\\r')\n .replace(/[\\x00-\\x0F]/g, function (ch) {\n return '\\\\x0' + hex(ch);\n })\n .replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function (ch) {\n return '\\\\x' + hex(ch);\n });\n }\n\n function describeExpectation(expectation) {\n return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation);\n }\n\n function describeExpected(expected) {\n var descriptions = expected.map(describeExpectation);\n var i, j;\n\n descriptions.sort();\n\n if (descriptions.length > 0) {\n for (i = 1, j = 1; i < descriptions.length; i++) {\n if (descriptions[i - 1] !== descriptions[i]) {\n descriptions[j] = descriptions[i];\n j++;\n }\n }\n descriptions.length = j;\n }\n\n switch (descriptions.length) {\n case 1:\n return descriptions[0];\n\n case 2:\n return descriptions[0] + ' or ' + descriptions[1];\n\n default:\n return (\n descriptions.slice(0, -1).join(', ') +\n ', or ' +\n descriptions[descriptions.length - 1]\n );\n }\n }\n\n function describeFound(found) {\n return found ? '\"' + literalEscape(found) + '\"' : 'end of input';\n }\n\n return (\n 'Expected ' +\n describeExpected(expected) +\n ' but ' +\n describeFound(found) +\n ' found.'\n );\n};\n\nfunction peg$parse(input, options) {\n options = options !== undefined ? options : {};\n\n var peg$FAILED = {};\n\n var peg$startRuleFunctions = { Top: peg$parseTop };\n var peg$startRuleFunction = peg$parseTop;\n\n var peg$c0 = '/';\n var peg$c1 = '.';\n var peg$c2 = '#';\n var peg$c3 = '=';\n var peg$c4 = '(';\n var peg$c5 = ')';\n var peg$c6 = ',';\n var peg$c7 = '[';\n var peg$c8 = ']';\n var peg$c9 = 'null';\n var peg$c10 = 'true';\n var peg$c11 = 'false';\n var peg$c12 = '{';\n var peg$c13 = '}';\n var peg$c14 = ':';\n var peg$c15 = '-';\n var peg$c16 = '\"';\n var peg$c17 = '\\\\';\n\n var peg$r0 = /^[$@]/;\n var peg$r1 = /^[0-9]/;\n var peg$r2 = /^[^\\0-\\x1F\"\\\\]/;\n var peg$r3 = /^[a-zA-Z0-9_\\-]/;\n var peg$r4 = /^[ \\n\\t]/;\n\n var peg$e0 = peg$literalExpectation('/', false);\n var peg$e1 = peg$otherExpectation('tag name');\n var peg$e2 = peg$otherExpectation('class');\n var peg$e3 = peg$otherExpectation('id');\n var peg$e4 = peg$literalExpectation('=', false);\n var peg$e5 = peg$literalExpectation('(', false);\n var peg$e6 = peg$literalExpectation(')', false);\n var peg$e7 = peg$literalExpectation(',', false);\n var peg$e8 = peg$otherExpectation('variable');\n var peg$e9 = peg$otherExpectation('null');\n var peg$e10 = peg$otherExpectation('boolean');\n var peg$e11 = peg$literalExpectation('[', false);\n var peg$e12 = peg$literalExpectation(']', false);\n var peg$e13 = peg$literalExpectation('{', false);\n var peg$e14 = peg$literalExpectation('}', false);\n var peg$e15 = peg$literalExpectation(':', false);\n var peg$e16 = peg$otherExpectation('number');\n var peg$e17 = peg$otherExpectation('string');\n var peg$e18 = peg$otherExpectation('identifier');\n var peg$e19 = peg$otherExpectation('whitespace');\n\n var peg$f0 = function (variable) {\n return { type: 'variable', meta: { variable } };\n };\n var peg$f1 = function (attributes) {\n return { type: 'annotation', meta: { attributes } };\n };\n var peg$f2 = function (tag, value) {\n return value;\n };\n var peg$f3 = function (tag, primary, attributes, close) {\n if (primary) {\n attributes = attributes || [];\n attributes.unshift({\n type: 'attribute',\n name: 'primary',\n value: primary,\n });\n }\n\n const [type, nesting] = close ? ['tag', 0] : ['tag_open', 1];\n return { type, nesting, meta: { tag, attributes } };\n };\n var peg$f4 = function (tag) {\n return { type: 'tag_close', nesting: -1, meta: { tag } };\n };\n var peg$f5 = function (head, tail) {\n return !head ? [] : [head, ...tail];\n };\n var peg$f6 = function (item) {\n return item;\n };\n var peg$f7 = function (ids) {\n return ids;\n };\n var peg$f8 = function (classes) {\n return classes;\n };\n var peg$f9 = function (attribute) {\n return attribute;\n };\n var peg$f10 = function (name) {\n return { type: 'class', name, value: true };\n };\n var peg$f11 = function (value) {\n return { type: 'attribute', name: 'id', value };\n };\n var peg$f12 = function (name, value) {\n return { type: 'attribute', name, value };\n };\n var peg$f13 = function (name, head, tail) {\n return head ? [head, ...tail] : [];\n };\n var peg$f14 = function (name, params) {\n let parameters = {};\n for (let [index, { name, value }] of params.entries())\n parameters[name || index] = value;\n return new Function(name, parameters);\n };\n var peg$f15 = function (name) {\n return name;\n };\n var peg$f16 = function (name, value) {\n return { name, value };\n };\n var peg$f17 = function (value) {\n return value;\n };\n var peg$f18 = function (prefix, head, tail) {\n if (prefix === '@') return [head, ...tail];\n return new Variable([head, ...tail]);\n };\n var peg$f19 = function () {\n return null;\n };\n var peg$f20 = function () {\n return true;\n };\n var peg$f21 = function () {\n return false;\n };\n var peg$f22 = function (head, tail) {\n return [head, ...tail];\n };\n var peg$f23 = function (value) {\n return value || [];\n };\n var peg$f24 = function (head, tail) {\n return Object.assign(head, ...tail);\n };\n var peg$f25 = function (value) {\n return value || {};\n };\n var peg$f26 = function (key, value) {\n return key === '$$mdtype' ? {} : { [key]: value };\n };\n var peg$f27 = function () {\n return parseFloat(text());\n };\n var peg$f28 = function (value) {\n return value.join('');\n };\n var peg$f29 = function (sequence) {\n return sequence;\n };\n\n var peg$currPos = 0;\n var peg$savedPos = 0;\n var peg$posDetailsCache = [{ line: 1, column: 1 }];\n var peg$expected = [];\n var peg$silentFails = 0;\n\n var peg$result;\n\n if ('startRule' in options) {\n if (!(options.startRule in peg$startRuleFunctions)) {\n throw new Error(\n 'Can\\'t start parsing from rule \"' + options.startRule + '\".'\n );\n }\n\n peg$startRuleFunction = peg$startRuleFunctions[options.startRule];\n }\n\n function text() {\n return input.substring(peg$savedPos, peg$currPos);\n }\n\n function offset() {\n return peg$savedPos;\n }\n\n function range() {\n return [peg$savedPos, peg$currPos];\n }\n\n function location() {\n return peg$computeLocation(peg$savedPos, peg$currPos);\n }\n\n function expected(description, location) {\n location =\n location !== undefined\n ? location\n : peg$computeLocation(peg$savedPos, peg$currPos);\n\n throw peg$buildStructuredError(\n [peg$otherExpectation(description)],\n input.substring(peg$savedPos, peg$currPos),\n location\n );\n }\n\n function error(message, location) {\n location =\n location !== undefined\n ? location\n : peg$computeLocation(peg$savedPos, peg$currPos);\n\n throw peg$buildSimpleError(message, location);\n }\n\n function peg$literalExpectation(text, ignoreCase) {\n return { type: 'literal', text: text, ignoreCase: ignoreCase };\n }\n\n function peg$classExpectation(parts, inverted, ignoreCase) {\n return {\n type: 'class',\n parts: parts,\n inverted: inverted,\n ignoreCase: ignoreCase,\n };\n }\n\n function peg$anyExpectation() {\n return { type: 'any' };\n }\n\n function peg$endExpectation() {\n return { type: 'end' };\n }\n\n function peg$otherExpectation(description) {\n return { type: 'other', description: description };\n }\n\n function peg$computePosDetails(pos) {\n var details = peg$posDetailsCache[pos];\n var p;\n\n if (details) {\n return details;\n } else {\n p = pos - 1;\n while (!peg$posDetailsCache[p]) {\n p--;\n }\n\n details = peg$posDetailsCache[p];\n details = {\n line: details.line,\n column: details.column,\n };\n\n while (p < pos) {\n if (input.charCodeAt(p) === 10) {\n details.line++;\n details.column = 1;\n } else {\n details.column++;\n }\n\n p++;\n }\n\n peg$posDetailsCache[pos] = details;\n\n return details;\n }\n }\n\n var peg$VALIDFILENAME =\n typeof options.filename === 'string' && options.filename.length > 0;\n function peg$computeLocation(startPos, endPos) {\n var loc = {};\n\n if (peg$VALIDFILENAME) loc.filename = options.filename;\n\n var startPosDetails = peg$computePosDetails(startPos);\n loc.start = {\n offset: startPos,\n line: startPosDetails.line,\n column: startPosDetails.column,\n };\n\n var endPosDetails = peg$computePosDetails(endPos);\n loc.end = {\n offset: endPos,\n line: endPosDetails.line,\n column: endPosDetails.column,\n };\n\n return loc;\n }\n\n function peg$begin() {\n peg$expected.push({ pos: peg$currPos, variants: [] });\n }\n\n function peg$expect(expected) {\n var top = peg$expected[peg$expected.length - 1];\n\n if (peg$currPos < top.pos) {\n return;\n }\n\n if (peg$currPos > top.pos) {\n top.pos = peg$currPos;\n top.variants = [];\n }\n\n top.variants.push(expected);\n }\n\n function peg$end(invert) {\n var expected = peg$expected.pop();\n var top = peg$expected[peg$expected.length - 1];\n var variants = expected.variants;\n\n if (top.pos !== expected.pos) {\n return;\n }\n\n if (invert) {\n variants = variants.map(function (e) {\n return e.type === 'not' ? e.expected : { type: 'not', expected: e };\n });\n }\n\n Array.prototype.push.apply(top.variants, variants);\n }\n\n function peg$buildSimpleError(message, location) {\n return new peg$SyntaxError(message, null, null, location);\n }\n\n function peg$buildStructuredError(expected, found, location) {\n return new peg$SyntaxError(\n peg$SyntaxError.buildMessage(expected, found, location),\n expected,\n found,\n location\n );\n }\n\n function peg$buildError() {\n var expected = peg$expected[0];\n var failPos = expected.pos;\n\n return peg$buildStructuredError(\n expected.variants,\n failPos < input.length ? input.charAt(failPos) : null,\n failPos < input.length\n ? peg$computeLocation(failPos, failPos + 1)\n : peg$computeLocation(failPos, failPos)\n );\n }\n\n function peg$parseTop() {\n var s0;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$parseTopLevelValue();\n if (s0 === peg$FAILED) {\n s0 = peg$parseAnnotation();\n if (s0 === peg$FAILED) {\n s0 = peg$parseTagOpen();\n if (s0 === peg$FAILED) {\n s0 = peg$parseTagClose();\n }\n }\n }\n\n return s0;\n }\n\n function peg$parseTopLevelValue() {\n var s0, s1;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n s1 = peg$parseVariable();\n if (s1 === peg$FAILED) {\n s1 = peg$parseFunction();\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f0(s1);\n }\n s0 = s1;\n\n return s0;\n }\n\n function peg$parseAnnotation() {\n var s0, s1, s2, s3;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n s1 = peg$parseTagAttributes();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parse_();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parse_();\n }\n peg$savedPos = s0;\n s0 = peg$f1(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseTagOpen() {\n var s0, s1, s2, s3, s4, s5, s6;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n s1 = peg$parseTagName();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parse_();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parse_();\n }\n s3 = peg$currPos;\n s4 = peg$parseValue();\n if (s4 !== peg$FAILED) {\n s5 = peg$parse_();\n if (s5 === peg$FAILED) {\n s5 = null;\n }\n peg$savedPos = s3;\n s3 = peg$f2(s1, s4);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n if (s3 === peg$FAILED) {\n s3 = null;\n }\n s4 = peg$parseTagAttributes();\n if (s4 === peg$FAILED) {\n s4 = null;\n }\n s5 = [];\n s6 = peg$parse_();\n while (s6 !== peg$FAILED) {\n s5.push(s6);\n s6 = peg$parse_();\n }\n rule$expects(peg$e0);\n if (input.charCodeAt(peg$currPos) === 47) {\n s6 = peg$c0;\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n }\n if (s6 === peg$FAILED) {\n s6 = null;\n }\n peg$savedPos = s0;\n s0 = peg$f3(s1, s3, s4, s6);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseTagClose() {\n var s0, s1, s2;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n rule$expects(peg$e0);\n if (input.charCodeAt(peg$currPos) === 47) {\n s1 = peg$c0;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseTagName();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f4(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseTagName() {\n var s0;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n rule$expects(peg$e1);\n peg$silentFails++;\n s0 = peg$parseIdentifier();\n peg$silentFails--;\n\n return s0;\n }\n\n function peg$parseTagAttributes() {\n var s0, s1, s2, s3;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n s1 = peg$parseTagAttributesItem();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parseTagAttributesTail();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parseTagAttributesTail();\n }\n peg$savedPos = s0;\n s0 = peg$f5(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseTagAttributesTail() {\n var s0, s1, s2;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parse_();\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parse_();\n }\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseTagAttributesItem();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f6(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseTagAttributesItem() {\n var s0, s1;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n s1 = peg$parseTagShortcutId();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f7(s1);\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parseTagShortcutClass();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f8(s1);\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parseTagAttribute();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f9(s1);\n }\n s0 = s1;\n }\n }\n\n return s0;\n }\n\n function peg$parseTagShortcutClass() {\n var s0, s1, s2;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n rule$expects(peg$e2);\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 46) {\n s1 = peg$c1;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseIdentifier();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f10(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n\n return s0;\n }\n\n function peg$parseTagShortcutId() {\n var s0, s1, s2;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n rule$expects(peg$e3);\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 35) {\n s1 = peg$c2;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseIdentifier();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f11(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n\n return s0;\n }\n\n function peg$parseTagAttribute() {\n var s0, s1, s2, s3;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n s1 = peg$parseIdentifier();\n if (s1 !== peg$FAILED) {\n rule$expects(peg$e4);\n if (input.charCodeAt(peg$currPos) === 61) {\n s2 = peg$c3;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$parseValue();\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f12(s1, s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseFunction() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n s1 = peg$parseIdentifier();\n if (s1 !== peg$FAILED) {\n rule$expects(peg$e5);\n if (input.charCodeAt(peg$currPos) === 40) {\n s2 = peg$c4;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$parse_();\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parse_();\n }\n s4 = peg$currPos;\n s5 = peg$parseFunctionParameter();\n if (s5 === peg$FAILED) {\n s5 = null;\n }\n s6 = [];\n s7 = peg$parseFunctionParameterTail();\n while (s7 !== peg$FAILED) {\n s6.push(s7);\n s7 = peg$parseFunctionParameterTail();\n }\n peg$savedPos = s4;\n s4 = peg$f13(s1, s5, s6);\n rule$expects(peg$e6);\n if (input.charCodeAt(peg$currPos) === 41) {\n s5 = peg$c5;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n }\n if (s5 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f14(s1, s4);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseFunctionParameter() {\n var s0, s1, s2, s3;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = peg$parseIdentifier();\n if (s2 !== peg$FAILED) {\n rule$expects(peg$e4);\n if (input.charCodeAt(peg$currPos) === 61) {\n s3 = peg$c3;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s1;\n s1 = peg$f15(s2);\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 === peg$FAILED) {\n s1 = null;\n }\n s2 = peg$parseValue();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f16(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseFunctionParameterTail() {\n var s0, s1, s2, s3, s4;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parse_();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parse_();\n }\n rule$expects(peg$e7);\n if (input.charCodeAt(peg$currPos) === 44) {\n s2 = peg$c6;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$parse_();\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parse_();\n }\n s4 = peg$parseFunctionParameter();\n if (s4 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f17(s4);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseTrailingComma() {\n var s0, s1, s2;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parse_();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parse_();\n }\n rule$expects(peg$e7);\n if (input.charCodeAt(peg$currPos) === 44) {\n s2 = peg$c6;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s1 = [s1, s2];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = null;\n }\n\n return s0;\n }\n\n function peg$parseVariable() {\n var s0, s1, s2, s3, s4;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n rule$expects(peg$e8);\n peg$silentFails++;\n s0 = peg$currPos;\n if (peg$r0.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseIdentifier();\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$parseVariableTail();\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parseVariableTail();\n }\n peg$savedPos = s0;\n s0 = peg$f18(s1, s2, s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n\n return s0;\n }\n\n function peg$parseVariableTail() {\n var s0, s1, s2, s3;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 46) {\n s1 = peg$c1;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseIdentifier();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f15(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 91) {\n s1 = peg$c7;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseValueNumber();\n if (s2 === peg$FAILED) {\n s2 = peg$parseValueString();\n }\n if (s2 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 93) {\n s3 = peg$c8;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f17(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n\n return s0;\n }\n\n function peg$parseValue() {\n var s0;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$parseValueNull();\n if (s0 === peg$FAILED) {\n s0 = peg$parseValueBoolean();\n if (s0 === peg$FAILED) {\n s0 = peg$parseValueString();\n if (s0 === peg$FAILED) {\n s0 = peg$parseValueNumber();\n if (s0 === peg$FAILED) {\n s0 = peg$parseValueArray();\n if (s0 === peg$FAILED) {\n s0 = peg$parseValueHash();\n if (s0 === peg$FAILED) {\n s0 = peg$parseFunction();\n if (s0 === peg$FAILED) {\n s0 = peg$parseVariable();\n }\n }\n }\n }\n }\n }\n }\n\n return s0;\n }\n\n function peg$parseValueNull() {\n var s0, s1;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n rule$expects(peg$e9);\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 4) === peg$c9) {\n s1 = peg$c9;\n peg$currPos += 4;\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f19();\n }\n s0 = s1;\n peg$silentFails--;\n\n return s0;\n }\n\n function peg$parseValueBoolean() {\n var s0, s1;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n rule$expects(peg$e10);\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 4) === peg$c10) {\n s1 = peg$c10;\n peg$currPos += 4;\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f20();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 5) === peg$c11) {\n s1 = peg$c11;\n peg$currPos += 5;\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f21();\n }\n s0 = s1;\n }\n peg$silentFails--;\n\n return s0;\n }\n\n function peg$parseValueArray() {\n var s0, s1, s2, s3, s4, s5, s6;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n rule$expects(peg$e11);\n if (input.charCodeAt(peg$currPos) === 91) {\n s1 = peg$c7;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parse_();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parse_();\n }\n s3 = peg$currPos;\n s4 = peg$parseValue();\n if (s4 !== peg$FAILED) {\n s5 = [];\n s6 = peg$parseValueArrayTail();\n while (s6 !== peg$FAILED) {\n s5.push(s6);\n s6 = peg$parseValueArrayTail();\n }\n s6 = peg$parseTrailingComma();\n peg$savedPos = s3;\n s3 = peg$f22(s4, s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n if (s3 === peg$FAILED) {\n s3 = null;\n }\n s4 = [];\n s5 = peg$parse_();\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n s5 = peg$parse_();\n }\n rule$expects(peg$e12);\n if (input.charCodeAt(peg$currPos) === 93) {\n s5 = peg$c8;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n }\n if (s5 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f23(s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseValueArrayTail() {\n var s0, s1, s2, s3, s4;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parse_();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parse_();\n }\n rule$expects(peg$e7);\n if (input.charCodeAt(peg$currPos) === 44) {\n s2 = peg$c6;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$parse_();\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parse_();\n }\n s4 = peg$parseValue();\n if (s4 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f17(s4);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseValueHash() {\n var s0, s1, s2, s3, s4, s5, s6;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n rule$expects(peg$e13);\n if (input.charCodeAt(peg$currPos) === 123) {\n s1 = peg$c12;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parse_();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parse_();\n }\n s3 = peg$currPos;\n s4 = peg$parseValueHashItem();\n if (s4 !== peg$FAILED) {\n s5 = [];\n s6 = peg$parseValueHashTail();\n while (s6 !== peg$FAILED) {\n s5.push(s6);\n s6 = peg$parseValueHashTail();\n }\n s6 = peg$parseTrailingComma();\n peg$savedPos = s3;\n s3 = peg$f24(s4, s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n if (s3 === peg$FAILED) {\n s3 = null;\n }\n s4 = [];\n s5 = peg$parse_();\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n s5 = peg$parse_();\n }\n rule$expects(peg$e14);\n if (input.charCodeAt(peg$currPos) === 125) {\n s5 = peg$c13;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n }\n if (s5 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f25(s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseValueHashTail() {\n var s0, s1, s2, s3, s4;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parse_();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parse_();\n }\n rule$expects(peg$e7);\n if (input.charCodeAt(peg$currPos) === 44) {\n s2 = peg$c6;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$parse_();\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parse_();\n }\n s4 = peg$parseValueHashItem();\n if (s4 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f6(s4);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseValueHashItem() {\n var s0, s1, s2, s3, s4;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n s1 = peg$parseIdentifier();\n if (s1 === peg$FAILED) {\n s1 = peg$parseValueString();\n }\n if (s1 !== peg$FAILED) {\n rule$expects(peg$e15);\n if (input.charCodeAt(peg$currPos) === 58) {\n s2 = peg$c14;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$parse_();\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parse_();\n }\n s4 = peg$parseValue();\n if (s4 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f26(s1, s4);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseValueNumber() {\n var s0, s1, s2, s3, s4, s5, s6;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n rule$expects(peg$e16);\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 45) {\n s1 = peg$c15;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n }\n if (s1 === peg$FAILED) {\n s1 = null;\n }\n s2 = [];\n if (peg$r1.test(input.charAt(peg$currPos))) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n }\n if (s3 !== peg$FAILED) {\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n if (peg$r1.test(input.charAt(peg$currPos))) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n }\n }\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 46) {\n s4 = peg$c1;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n s5 = [];\n if (peg$r1.test(input.charAt(peg$currPos))) {\n s6 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n }\n if (s6 !== peg$FAILED) {\n while (s6 !== peg$FAILED) {\n s5.push(s6);\n if (peg$r1.test(input.charAt(peg$currPos))) {\n s6 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n }\n }\n } else {\n s5 = peg$FAILED;\n }\n if (s5 !== peg$FAILED) {\n s4 = [s4, s5];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n if (s3 === peg$FAILED) {\n s3 = null;\n }\n peg$savedPos = s0;\n s0 = peg$f27();\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n\n return s0;\n }\n\n function peg$parseValueString() {\n var s0, s1, s2, s3;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n rule$expects(peg$e17);\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 34) {\n s1 = peg$c16;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parseValueStringChars();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parseValueStringChars();\n }\n if (input.charCodeAt(peg$currPos) === 34) {\n s3 = peg$c16;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f28(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n\n return s0;\n }\n\n function peg$parseValueStringChars() {\n var s0;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n if (peg$r2.test(input.charAt(peg$currPos))) {\n s0 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$parseValueStringEscapes();\n }\n\n return s0;\n }\n\n function peg$parseValueStringEscapes() {\n var s0, s1, s2;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 92) {\n s1 = peg$c17;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 34) {\n s2 = peg$c16;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 92) {\n s2 = peg$c17;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n }\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f29(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseIdentifier() {\n var s0, s1, s2;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n rule$expects(peg$e18);\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = [];\n if (peg$r3.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n if (peg$r3.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n }\n }\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s0 = input.substring(s0, peg$currPos);\n } else {\n s0 = s1;\n }\n peg$silentFails--;\n\n return s0;\n }\n\n function peg$parse_() {\n var s0;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n rule$expects(peg$e19);\n peg$silentFails++;\n if (peg$r4.test(input.charAt(peg$currPos))) {\n s0 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n\n return s0;\n }\n\n const { Variable, Function } = options;\n\n peg$begin();\n peg$result = peg$startRuleFunction();\n\n if (peg$result !== peg$FAILED && peg$currPos === input.length) {\n return peg$result;\n } else {\n if (peg$result !== peg$FAILED && peg$currPos < input.length) {\n peg$expect(peg$endExpectation());\n }\n\n throw peg$buildError();\n }\n}\n\nmodule.exports = {\n SyntaxError: peg$SyntaxError,\n parse: peg$parse,\n};\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]/", "\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", "'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", "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]/", "'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", "// Utilities\n//\n'use strict';\n\n\nfunction _class(obj) { return Object.prototype.toString.call(obj); }\n\nfunction isString(obj) { return _class(obj) === '[object String]'; }\n\nvar _hasOwnProperty = Object.prototype.hasOwnProperty;\n\nfunction has(object, key) {\n return _hasOwnProperty.call(object, key);\n}\n\n// Merge objects\n//\nfunction assign(obj /*from1, from2, from3, ...*/) {\n var sources = Array.prototype.slice.call(arguments, 1);\n\n sources.forEach(function (source) {\n if (!source) { return; }\n\n if (typeof source !== 'object') {\n throw new TypeError(source + 'must be object');\n }\n\n Object.keys(source).forEach(function (key) {\n obj[key] = source[key];\n });\n });\n\n return obj;\n}\n\n// Remove element from array and put another array at those position.\n// Useful for some operations with tokens\nfunction arrayReplaceAt(src, pos, newElements) {\n return [].concat(src.slice(0, pos), newElements, src.slice(pos + 1));\n}\n\n////////////////////////////////////////////////////////////////////////////////\n\nfunction isValidEntityCode(c) {\n /*eslint no-bitwise:0*/\n // broken sequence\n if (c >= 0xD800 && c <= 0xDFFF) { return false; }\n // never used\n if (c >= 0xFDD0 && c <= 0xFDEF) { return false; }\n if ((c & 0xFFFF) === 0xFFFF || (c & 0xFFFF) === 0xFFFE) { return false; }\n // control codes\n if (c >= 0x00 && c <= 0x08) { return false; }\n if (c === 0x0B) { return false; }\n if (c >= 0x0E && c <= 0x1F) { return false; }\n if (c >= 0x7F && c <= 0x9F) { return false; }\n // out of range\n if (c > 0x10FFFF) { return false; }\n return true;\n}\n\nfunction fromCodePoint(c) {\n /*eslint no-bitwise:0*/\n if (c > 0xffff) {\n c -= 0x10000;\n var surrogate1 = 0xd800 + (c >> 10),\n surrogate2 = 0xdc00 + (c & 0x3ff);\n\n return String.fromCharCode(surrogate1, surrogate2);\n }\n return String.fromCharCode(c);\n}\n\n\nvar UNESCAPE_MD_RE = /\\\\([!\"#$%&'()*+,\\-.\\/:;<=>?@[\\\\\\]^_`{|}~])/g;\nvar ENTITY_RE = /&([a-z#][a-z0-9]{1,31});/gi;\nvar UNESCAPE_ALL_RE = new RegExp(UNESCAPE_MD_RE.source + '|' + ENTITY_RE.source, 'gi');\n\nvar DIGITAL_ENTITY_TEST_RE = /^#((?:x[a-f0-9]{1,8}|[0-9]{1,8}))/i;\n\nvar entities = require('./entities');\n\nfunction replaceEntityPattern(match, name) {\n var code = 0;\n\n if (has(entities, name)) {\n return entities[name];\n }\n\n if (name.charCodeAt(0) === 0x23/* # */ && DIGITAL_ENTITY_TEST_RE.test(name)) {\n code = name[1].toLowerCase() === 'x' ?\n parseInt(name.slice(2), 16) : parseInt(name.slice(1), 10);\n\n if (isValidEntityCode(code)) {\n return fromCodePoint(code);\n }\n }\n\n return match;\n}\n\n/*function replaceEntities(str) {\n if (str.indexOf('&') < 0) { return str; }\n\n return str.replace(ENTITY_RE, replaceEntityPattern);\n}*/\n\nfunction unescapeMd(str) {\n if (str.indexOf('\\\\') < 0) { return str; }\n return str.replace(UNESCAPE_MD_RE, '$1');\n}\n\nfunction unescapeAll(str) {\n if (str.indexOf('\\\\') < 0 && str.indexOf('&') < 0) { return str; }\n\n return str.replace(UNESCAPE_ALL_RE, function (match, escaped, entity) {\n if (escaped) { return escaped; }\n return replaceEntityPattern(match, entity);\n });\n}\n\n////////////////////////////////////////////////////////////////////////////////\n\nvar HTML_ESCAPE_TEST_RE = /[&<>\"]/;\nvar HTML_ESCAPE_REPLACE_RE = /[&<>\"]/g;\nvar HTML_REPLACEMENTS = {\n '&': '&amp;',\n '<': '&lt;',\n '>': '&gt;',\n '\"': '&quot;'\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 '\u1E9E'.toLowerCase() === '\u1E7E', 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 ('\u1E9E'.toLowerCase() === '\u1E7E') {\n str = str.replace(/\u1E9E/g, '\u00DF');\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 // \u0130, \u03F4, \u1E9E, \u2126, \u212A, \u212B - 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 (\u0398), U+03f4 (\u03F4) and lowercase U+03b8 (\u03B8), U+03d1 (\u03D1)\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;<compat> 03B8;;;;N;GREEK SMALL LETTER SCRIPT THETA;;0398;;0398\n // 03F4;GREEK CAPITAL THETA SYMBOL;Lu;0;L;<compat> 0398;;;;N;;;;03B8;\n //\n // Case-insensitive comparison should treat all of them as equivalent.\n //\n // But .toLowerCase() doesn't change \u03D1 (it's already lowercase),\n // and .toUpperCase() doesn't change \u03F4 (already uppercase).\n //\n // Applying first lower then upper case normalizes any character:\n // '\\u0398\\u03f4\\u03b8\\u03d1'.toLowerCase().toUpperCase() === '\\u0398\\u0398\\u0398\\u0398'\n //\n // Note: this is equivalent to unicode case folding; unicode normalization\n // is a different step that is not required here.\n //\n // Final result should be uppercased, because it's later stored in an object\n // (this avoid a conflict with Object.prototype members,\n // most notably, `__proto__`)\n //\n return str.toLowerCase().toUpperCase();\n}\n\n////////////////////////////////////////////////////////////////////////////////\n\n// Re-export libraries commonly used in both markdown-it and its plugins,\n// so plugins won't have to depend on them explicitly, which reduces their\n// bundled size (e.g. a browser build).\n//\nexports.lib = {};\nexports.lib.mdurl = require('mdurl');\nexports.lib.ucmicro = require('uc.micro');\n\nexports.assign = assign;\nexports.isString = isString;\nexports.has = has;\nexports.unescapeMd = unescapeMd;\nexports.unescapeAll = unescapeAll;\nexports.isValidEntityCode = isValidEntityCode;\nexports.fromCodePoint = fromCodePoint;\n// exports.replaceEntities = replaceEntities;\nexports.escapeHtml = escapeHtml;\nexports.arrayReplaceAt = arrayReplaceAt;\nexports.isSpace = isSpace;\nexports.isWhiteSpace = isWhiteSpace;\nexports.isMdAsciiPunct = isMdAsciiPunct;\nexports.isPunctChar = isPunctChar;\nexports.escapeRE = escapeRE;\nexports.normalizeReference = normalizeReference;\n", "// Parse link label\n//\n// this function assumes that first character (\"[\") already matches;\n// returns the end of the label\n//\n'use strict';\n\nmodule.exports = function parseLinkLabel(state, start, disableNested) {\n var level, found, marker, prevPos,\n labelEnd = -1,\n max = state.posMax,\n oldPos = state.pos;\n\n state.pos = start + 1;\n level = 1;\n\n while (state.pos < max) {\n marker = state.src.charCodeAt(state.pos);\n if (marker === 0x5D /* ] */) {\n level--;\n if (level === 0) {\n found = true;\n break;\n }\n }\n\n prevPos = state.pos;\n state.md.inline.skipToken(state);\n if (marker === 0x5B /* [ */) {\n if (prevPos === state.pos - 1) {\n // increase level if we find text `[`, which is not a part of any token\n level++;\n } else if (disableNested) {\n state.pos = oldPos;\n return -1;\n }\n }\n }\n\n if (found) {\n labelEnd = state.pos;\n }\n\n // restore old state\n state.pos = oldPos;\n\n return labelEnd;\n};\n", "// Parse link destination\n//\n'use strict';\n\n\nvar unescapeAll = require('../common/utils').unescapeAll;\n\n\nmodule.exports = function parseLinkDestination(str, pos, max) {\n var code, level,\n lines = 0,\n start = pos,\n result = {\n ok: false,\n pos: 0,\n lines: 0,\n str: ''\n };\n\n if (str.charCodeAt(pos) === 0x3C /* < */) {\n pos++;\n while (pos < max) {\n code = str.charCodeAt(pos);\n if (code === 0x0A /* \\n */) { return result; }\n if (code === 0x3C /* < */) { return result; }\n if (code === 0x3E /* > */) {\n result.pos = pos + 1;\n result.str = unescapeAll(str.slice(start + 1, pos));\n result.ok = true;\n return result;\n }\n if (code === 0x5C /* \\ */ && pos + 1 < max) {\n pos += 2;\n continue;\n }\n\n pos++;\n }\n\n // no closing '>'\n return result;\n }\n\n // this should be ... } else { ... branch\n\n level = 0;\n while (pos < max) {\n code = str.charCodeAt(pos);\n\n if (code === 0x20) { break; }\n\n // ascii control characters\n if (code < 0x20 || code === 0x7F) { break; }\n\n if (code === 0x5C /* \\ */ && pos + 1 < max) {\n if (str.charCodeAt(pos + 1) === 0x20) { break; }\n pos += 2;\n continue;\n }\n\n if (code === 0x28 /* ( */) {\n level++;\n if (level > 32) { return result; }\n }\n\n if (code === 0x29 /* ) */) {\n if (level === 0) { break; }\n level--;\n }\n\n pos++;\n }\n\n if (start === pos) { return result; }\n if (level !== 0) { return result; }\n\n result.str = unescapeAll(str.slice(start, pos));\n result.lines = lines;\n result.pos = pos;\n result.ok = true;\n return result;\n};\n", "// Parse link title\n//\n'use strict';\n\n\nvar unescapeAll = require('../common/utils').unescapeAll;\n\n\nmodule.exports = function parseLinkTitle(str, pos, max) {\n var code,\n marker,\n lines = 0,\n start = pos,\n result = {\n ok: false,\n pos: 0,\n lines: 0,\n str: ''\n };\n\n if (pos >= max) { return result; }\n\n marker = str.charCodeAt(pos);\n\n if (marker !== 0x22 /* \" */ && marker !== 0x27 /* ' */ && marker !== 0x28 /* ( */) { return result; }\n\n pos++;\n\n // if opening marker is \"(\", switch it to closing marker \")\"\n if (marker === 0x28) { marker = 0x29; }\n\n while (pos < max) {\n code = str.charCodeAt(pos);\n if (code === marker) {\n result.pos = pos + 1;\n result.lines = lines;\n result.str = unescapeAll(str.slice(start + 1, pos));\n result.ok = true;\n return result;\n } else if (code === 0x28 /* ( */ && marker === 0x29 /* ) */) {\n return result;\n } else if (code === 0x0A) {\n lines++;\n } else if (code === 0x5C /* \\ */ && pos + 1 < max) {\n pos++;\n if (str.charCodeAt(pos) === 0x0A) {\n lines++;\n }\n }\n\n pos++;\n }\n\n return result;\n};\n", "// Just a shortcut for bulk export\n'use strict';\n\n\nexports.parseLinkLabel = require('./parse_link_label');\nexports.parseLinkDestination = require('./parse_link_destination');\nexports.parseLinkTitle = require('./parse_link_title');\n", "/**\n * class Renderer\n *\n * Generates HTML from parsed token stream. Each instance has independent\n * copy of rules. Those can be rewritten with ease. Also, you can add new\n * rules if you create plugin and adds new token types.\n **/\n'use strict';\n\n\nvar assign = require('./common/utils').assign;\nvar unescapeAll = require('./common/utils').unescapeAll;\nvar escapeHtml = require('./common/utils').escapeHtml;\n\n\n////////////////////////////////////////////////////////////////////////////////\n\nvar default_rules = {};\n\n\ndefault_rules.code_inline = function (tokens, idx, options, env, slf) {\n var token = tokens[idx];\n\n return '<code' + slf.renderAttrs(token) + '>' +\n escapeHtml(tokens[idx].content) +\n '</code>';\n};\n\n\ndefault_rules.code_block = function (tokens, idx, options, env, slf) {\n var token = tokens[idx];\n\n return '<pre' + slf.renderAttrs(token) + '><code>' +\n escapeHtml(tokens[idx].content) +\n '</code></pre>\\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('<pre') === 0) {\n return highlighted + '\\n';\n }\n\n // If language exists, inject class gently, without modifying original token.\n // May be, one day we will add .deepClone() for token and simplify this part, but\n // now we prefer to keep things local.\n if (info) {\n i = token.attrIndex('class');\n tmpAttrs = token.attrs ? token.attrs.slice() : [];\n\n if (i < 0) {\n tmpAttrs.push([ 'class', options.langPrefix + langName ]);\n } else {\n tmpAttrs[i] = tmpAttrs[i].slice();\n tmpAttrs[i][1] += ' ' + options.langPrefix + langName;\n }\n\n // Fake token just to render attributes\n tmpToken = {\n attrs: tmpAttrs\n };\n\n return '<pre><code' + slf.renderAttrs(tmpToken) + '>'\n + highlighted\n + '</code></pre>\\n';\n }\n\n\n return '<pre><code' + slf.renderAttrs(token) + '>'\n + highlighted\n + '</code></pre>\\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 ? '<br />\\n' : '<br>\\n';\n};\ndefault_rules.softbreak = function (tokens, idx, options /*, env */) {\n return options.breaks ? (options.xhtmlOut ? '<br />\\n' : '<br>\\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 '<b>'; };\n * md.renderer.rules.strong_close = function () { return '</b>'; };\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. `<img`\n result += (token.nesting === -1 ? '</' : '<') + token.tag;\n\n // Encode attributes, e.g. `<img src=\"foo\"`\n result += this.renderAttrs(token);\n\n // Add a slash for self-closing tags, e.g. `<img src=\"foo\" /`\n if (token.nesting === 0 && options.xhtmlOut) {\n result += ' /';\n }\n\n // Check if we need to add a newline after this tag\n if (token.block) {\n needLf = true;\n\n if (token.nesting === 1) {\n if (idx + 1 < tokens.length) {\n nextToken = tokens[idx + 1];\n\n if (nextToken.type === 'inline' || nextToken.hidden) {\n // Block-level tag containing an inline tag.\n //\n needLf = false;\n\n } else if (nextToken.nesting === -1 && nextToken.tag === token.tag) {\n // Opening tag + closing tag of the same type. E.g. `<li></li>`.\n //\n needLf = false;\n }\n }\n }\n }\n\n result += needLf ? '>\\n' : '>';\n\n return result;\n};\n\n\n/**\n * Renderer.renderInline(tokens, options, env) -> String\n * - tokens (Array): list on block tokens to render\n * - options (Object): params of parser instance\n * - env (Object): additional data from parsed input (references, for example)\n *\n * The same as [[Renderer.render]], but for single token of `inline` type.\n **/\nRenderer.prototype.renderInline = function (tokens, options, env) {\n var type,\n result = '',\n rules = this.rules;\n\n for (var i = 0, len = tokens.length; i < len; i++) {\n type = tokens[i].type;\n\n if (typeof rules[type] !== 'undefined') {\n result += rules[type](tokens, i, options, env, this);\n } else {\n result += this.renderToken(tokens, i, options);\n }\n }\n\n return result;\n};\n\n\n/** internal\n * Renderer.renderInlineAsText(tokens, options, env) -> String\n * - tokens (Array): list on block tokens to render\n * - options (Object): params of parser instance\n * - env (Object): additional data from parsed input (references, for example)\n *\n * Special kludge for image `alt` attributes to conform CommonMark spec.\n * Don't try to use it! Spec requires to show `alt` content with stripped markup,\n * instead of simple escaping.\n **/\nRenderer.prototype.renderInlineAsText = function (tokens, options, env) {\n var result = '';\n\n for (var i = 0, len = tokens.length; i < len; i++) {\n if (tokens[i].type === 'text') {\n result += tokens[i].content;\n } else if (tokens[i].type === 'image') {\n result += this.renderInlineAsText(tokens[i].children, options, env);\n } else if (tokens[i].type === 'softbreak') {\n result += '\\n';\n }\n }\n\n return result;\n};\n\n\n/**\n * Renderer.render(tokens, options, env) -> String\n * - tokens (Array): list on block tokens to render\n * - options (Object): params of parser instance\n * - env (Object): additional data from parsed input (references, for example)\n *\n * Takes token stream and generates HTML. Probably, you will never need to call\n * this method directly.\n **/\nRenderer.prototype.render = function (tokens, options, env) {\n var i, len, type,\n result = '',\n rules = this.rules;\n\n for (i = 0, len = tokens.length; i < len; i++) {\n type = tokens[i].type;\n\n if (type === 'inline') {\n result += this.renderInline(tokens[i].children, options, env);\n } else if (typeof rules[type] !== 'undefined') {\n result += rules[tokens[i].type](tokens, i, options, env, this);\n } else {\n result += this.renderToken(tokens, i, options, env);\n }\n }\n\n return result;\n};\n\nmodule.exports = Renderer;\n", "/**\n * class Ruler\n *\n * Helper class, used by [[MarkdownIt#core]], [[MarkdownIt#block]] and\n * [[MarkdownIt#inline]] to manage sequences of functions (rules):\n *\n * - keep rules in defined order\n * - assign the name to each rule\n * - enable/disable rules\n * - add/replace rules\n * - allow assign rules to additional named chains (in the same)\n * - cacheing lists of active rules\n *\n * You will not need use this class directly until write plugins. For simple\n * rules control use [[MarkdownIt.disable]], [[MarkdownIt.enable]] and\n * [[MarkdownIt.use]].\n **/\n'use strict';\n\n\n/**\n * new Ruler()\n **/\nfunction Ruler() {\n // List of added rules. Each element is:\n //\n // {\n // name: XXX,\n // enabled: Boolean,\n // fn: Function(),\n // alt: [ name2, name3 ]\n // }\n //\n this.__rules__ = [];\n\n // Cached rule chains.\n //\n // First level - chain name, '' for default.\n // Second level - diginal anchor for fast filtering by charcodes.\n //\n this.__cache__ = null;\n}\n\n////////////////////////////////////////////////////////////////////////////////\n// Helper methods, should not be used directly\n\n\n// Find rule index by name\n//\nRuler.prototype.__find__ = function (name) {\n for (var i = 0; i < this.__rules__.length; i++) {\n if (this.__rules__[i].name === name) {\n return i;\n }\n }\n return -1;\n};\n\n\n// Build rules lookup cache\n//\nRuler.prototype.__compile__ = function () {\n var self = this;\n var chains = [ '' ];\n\n // collect unique names\n self.__rules__.forEach(function (rule) {\n if (!rule.enabled) { return; }\n\n rule.alt.forEach(function (altName) {\n if (chains.indexOf(altName) < 0) {\n chains.push(altName);\n }\n });\n });\n\n self.__cache__ = {};\n\n chains.forEach(function (chain) {\n self.__cache__[chain] = [];\n self.__rules__.forEach(function (rule) {\n if (!rule.enabled) { return; }\n\n if (chain && rule.alt.indexOf(chain) < 0) { return; }\n\n self.__cache__[chain].push(rule.fn);\n });\n });\n};\n\n\n/**\n * Ruler.at(name, fn [, options])\n * - name (String): rule name to replace.\n * - fn (Function): new rule function.\n * - options (Object): new rule options (not mandatory).\n *\n * Replace rule by name with new function & options. Throws error if name not\n * found.\n *\n * ##### Options:\n *\n * - __alt__ - array with names of \"alternate\" chains.\n *\n * ##### Example\n *\n * Replace existing typographer replacement rule with new one:\n *\n * ```javascript\n * var md = require('markdown-it')();\n *\n * md.core.ruler.at('replacements', function replace(state) {\n * //...\n * });\n * ```\n **/\nRuler.prototype.at = function (name, fn, options) {\n var index = this.__find__(name);\n var opt = options || {};\n\n if (index === -1) { throw new Error('Parser rule not found: ' + name); }\n\n this.__rules__[index].fn = fn;\n this.__rules__[index].alt = opt.alt || [];\n this.__cache__ = null;\n};\n\n\n/**\n * Ruler.before(beforeName, ruleName, fn [, options])\n * - beforeName (String): new rule will be added before this one.\n * - ruleName (String): name of added rule.\n * - fn (Function): rule function.\n * - options (Object): rule options (not mandatory).\n *\n * Add new rule to chain before one with given name. See also\n * [[Ruler.after]], [[Ruler.push]].\n *\n * ##### Options:\n *\n * - __alt__ - array with names of \"alternate\" chains.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')();\n *\n * md.block.ruler.before('paragraph', 'my_rule', function replace(state) {\n * //...\n * });\n * ```\n **/\nRuler.prototype.before = function (beforeName, ruleName, fn, options) {\n var index = this.__find__(beforeName);\n var opt = options || {};\n\n if (index === -1) { throw new Error('Parser rule not found: ' + beforeName); }\n\n this.__rules__.splice(index, 0, {\n name: ruleName,\n enabled: true,\n fn: fn,\n alt: opt.alt || []\n });\n\n this.__cache__ = null;\n};\n\n\n/**\n * Ruler.after(afterName, ruleName, fn [, options])\n * - afterName (String): new rule will be added after this one.\n * - ruleName (String): name of added rule.\n * - fn (Function): rule function.\n * - options (Object): rule options (not mandatory).\n *\n * Add new rule to chain after one with given name. See also\n * [[Ruler.before]], [[Ruler.push]].\n *\n * ##### Options:\n *\n * - __alt__ - array with names of \"alternate\" chains.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')();\n *\n * md.inline.ruler.after('text', 'my_rule', function replace(state) {\n * //...\n * });\n * ```\n **/\nRuler.prototype.after = function (afterName, ruleName, fn, options) {\n var index = this.__find__(afterName);\n var opt = options || {};\n\n if (index === -1) { throw new Error('Parser rule not found: ' + afterName); }\n\n this.__rules__.splice(index + 1, 0, {\n name: ruleName,\n enabled: true,\n fn: fn,\n alt: opt.alt || []\n });\n\n this.__cache__ = null;\n};\n\n/**\n * Ruler.push(ruleName, fn [, options])\n * - ruleName (String): name of added rule.\n * - fn (Function): rule function.\n * - options (Object): rule options (not mandatory).\n *\n * Push new rule to the end of chain. See also\n * [[Ruler.before]], [[Ruler.after]].\n *\n * ##### Options:\n *\n * - __alt__ - array with names of \"alternate\" chains.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')();\n *\n * md.core.ruler.push('my_rule', function replace(state) {\n * //...\n * });\n * ```\n **/\nRuler.prototype.push = function (ruleName, fn, options) {\n var opt = options || {};\n\n this.__rules__.push({\n name: ruleName,\n enabled: true,\n fn: fn,\n alt: opt.alt || []\n });\n\n this.__cache__ = null;\n};\n\n\n/**\n * Ruler.enable(list [, ignoreInvalid]) -> Array\n * - list (String|Array): list of rule names to enable.\n * - ignoreInvalid (Boolean): set `true` to ignore errors when rule not found.\n *\n * Enable rules with given names. If any rule name not found - throw Error.\n * Errors can be disabled by second param.\n *\n * Returns list of found rule names (if no exception happened).\n *\n * See also [[Ruler.disable]], [[Ruler.enableOnly]].\n **/\nRuler.prototype.enable = function (list, ignoreInvalid) {\n if (!Array.isArray(list)) { list = [ list ]; }\n\n var result = [];\n\n // Search by name and enable\n list.forEach(function (name) {\n var idx = this.__find__(name);\n\n if (idx < 0) {\n if (ignoreInvalid) { return; }\n throw new Error('Rules manager: invalid rule name ' + name);\n }\n this.__rules__[idx].enabled = true;\n result.push(name);\n }, this);\n\n this.__cache__ = null;\n return result;\n};\n\n\n/**\n * Ruler.enableOnly(list [, ignoreInvalid])\n * - list (String|Array): list of rule names to enable (whitelist).\n * - ignoreInvalid (Boolean): set `true` to ignore errors when rule not found.\n *\n * Enable rules with given names, and disable everything else. If any rule name\n * not found - throw Error. Errors can be disabled by second param.\n *\n * See also [[Ruler.disable]], [[Ruler.enable]].\n **/\nRuler.prototype.enableOnly = function (list, ignoreInvalid) {\n if (!Array.isArray(list)) { list = [ list ]; }\n\n this.__rules__.forEach(function (rule) { rule.enabled = false; });\n\n this.enable(list, ignoreInvalid);\n};\n\n\n/**\n * Ruler.disable(list [, ignoreInvalid]) -> Array\n * - list (String|Array): list of rule names to disable.\n * - ignoreInvalid (Boolean): set `true` to ignore errors when rule not found.\n *\n * Disable rules with given names. If any rule name not found - throw Error.\n * Errors can be disabled by second param.\n *\n * Returns list of found rule names (if no exception happened).\n *\n * See also [[Ruler.enable]], [[Ruler.enableOnly]].\n **/\nRuler.prototype.disable = function (list, ignoreInvalid) {\n if (!Array.isArray(list)) { list = [ list ]; }\n\n var result = [];\n\n // Search by name and disable\n list.forEach(function (name) {\n var idx = this.__find__(name);\n\n if (idx < 0) {\n if (ignoreInvalid) { return; }\n throw new Error('Rules manager: invalid rule name ' + name);\n }\n this.__rules__[idx].enabled = false;\n result.push(name);\n }, this);\n\n this.__cache__ = null;\n return result;\n};\n\n\n/**\n * Ruler.getRules(chainName) -> Array\n *\n * Return array of active functions (rules) for given chain name. It analyzes\n * rules configuration, compiles caches if not exists and returns result.\n *\n * Default chain name is `''` (empty string). It can't be skipped. That's\n * done intentionally, to keep signature monomorphic for high speed.\n **/\nRuler.prototype.getRules = function (chainName) {\n if (this.__cache__ === null) {\n this.__compile__();\n }\n\n // Chain can be empty, if rules disabled. But we still have to return Array.\n return this.__cache__[chainName] || [];\n};\n\nmodule.exports = Ruler;\n", "// Normalize input string\n\n'use strict';\n\n\n// https://spec.commonmark.org/0.29/#line-ending\nvar NEWLINES_RE = /\\r\\n?|\\n/g;\nvar NULL_RE = /\\0/g;\n\n\nmodule.exports = function normalize(state) {\n var str;\n\n // Normalize newlines\n str = state.src.replace(NEWLINES_RE, '\\n');\n\n // Replace NULL characters\n str = str.replace(NULL_RE, '\\uFFFD');\n\n state.src = str;\n};\n", "'use strict';\n\n\nmodule.exports = function block(state) {\n var token;\n\n if (state.inlineMode) {\n token = new state.Token('inline', '', 0);\n token.content = state.src;\n token.map = [ 0, 1 ];\n token.children = [];\n state.tokens.push(token);\n } else {\n state.md.block.parse(state.src, state.md, state.env, state.tokens);\n }\n};\n", "'use strict';\n\nmodule.exports = function inline(state) {\n var tokens = state.tokens, tok, i, l;\n\n // Parse inlines\n for (i = 0, l = tokens.length; i < l; i++) {\n tok = tokens[i];\n if (tok.type === 'inline') {\n state.md.inline.parse(tok.content, state.md, state.env, tok.children);\n }\n }\n};\n", "// Replace link-like texts with link nodes.\n//\n// Currently restricted by `md.validateLink()` to http/https/ftp\n//\n'use strict';\n\n\nvar arrayReplaceAt = require('../common/utils').arrayReplaceAt;\n\n\nfunction isLinkOpen(str) {\n return /^<a[>\\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) \u2192 \u00A9\n// (tm) (TM) \u2192 \u2122\n// (r) (R) \u2192 \u00AE\n// +- \u2192 \u00B1\n// (p) (P) -> \u00A7\n// ... \u2192 \u2026 (also ?.... \u2192 ?.., !.... \u2192 !..)\n// ???????? \u2192 ???, !!!!! \u2192 !!!, `,,` \u2192 `,`\n// -- \u2192 &ndash;, --- \u2192 &mdash;\n//\n'use strict';\n\n// TODO:\n// - fractionals 1/2, 1/4, 3/4 -> \u00BD, \u00BC, \u00BE\n// - miltiplication 2 x 4 -> 2 \u00D7 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: '\u00A9',\n r: '\u00AE',\n p: '\u00A7',\n tm: '\u2122'\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, '\u00B1')\n // .., ..., ....... -> \u2026\n // but ?..... & !..... -> ?.. & !..\n .replace(/\\.{2,}/g, '\u2026').replace(/([?!])\u2026/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'; /* \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", "// Token class\n\n'use strict';\n\n\n/**\n * class Token\n **/\n\n/**\n * new Token(type, tag, nesting)\n *\n * Create new token and fill passed properties.\n **/\nfunction Token(type, tag, nesting) {\n /**\n * Token#type -> String\n *\n * Type of the token (string, e.g. \"paragraph_open\")\n **/\n this.type = type;\n\n /**\n * Token#tag -> String\n *\n * html tag name, e.g. \"p\"\n **/\n this.tag = tag;\n\n /**\n * Token#attrs -> Array\n *\n * Html attributes. Format: `[ [ name1, value1 ], [ name2, value2 ] ]`\n **/\n this.attrs = null;\n\n /**\n * Token#map -> Array\n *\n * Source map info. Format: `[ line_begin, line_end ]`\n **/\n this.map = null;\n\n /**\n * Token#nesting -> Number\n *\n * Level change (number in {-1, 0, 1} set), where:\n *\n * - `1` means the tag is opening\n * - `0` means the tag is self-closing\n * - `-1` means the tag is closing\n **/\n this.nesting = nesting;\n\n /**\n * Token#level -> Number\n *\n * nesting level, the same as `state.level`\n **/\n this.level = 0;\n\n /**\n * Token#children -> Array\n *\n * An array of child nodes (inline and img tokens)\n **/\n this.children = null;\n\n /**\n * Token#content -> String\n *\n * In a case of self-closing tag (code, html, fence, etc.),\n * it has contents of this tag.\n **/\n this.content = '';\n\n /**\n * Token#markup -> String\n *\n * '*' or '_' for emphasis, fence string for fence, etc.\n **/\n this.markup = '';\n\n /**\n * Token#info -> String\n *\n * Additional information:\n *\n * - Info string for \"fence\" tokens\n * - The value \"auto\" for autolink \"link_open\" and \"link_close\" tokens\n * - The string value of the item marker for ordered-list \"list_item_open\" tokens\n **/\n this.info = '';\n\n /**\n * Token#meta -> Object\n *\n * A place for plugins to store an arbitrary data\n **/\n this.meta = null;\n\n /**\n * Token#block -> Boolean\n *\n * True for block-level tokens, false for inline tokens.\n * Used in renderer to calculate line breaks\n **/\n this.block = false;\n\n /**\n * Token#hidden -> Boolean\n *\n * If it's true, ignore this element when rendering. Used for tight lists\n * to hide paragraphs.\n **/\n this.hidden = false;\n}\n\n\n/**\n * Token.attrIndex(name) -> Number\n *\n * Search attribute index by name.\n **/\nToken.prototype.attrIndex = function attrIndex(name) {\n var attrs, i, len;\n\n if (!this.attrs) { return -1; }\n\n attrs = this.attrs;\n\n for (i = 0, len = attrs.length; i < len; i++) {\n if (attrs[i][0] === name) { return i; }\n }\n return -1;\n};\n\n\n/**\n * Token.attrPush(attrData)\n *\n * Add `[ name, value ]` attribute to list. Init attrs if necessary\n **/\nToken.prototype.attrPush = function attrPush(attrData) {\n if (this.attrs) {\n this.attrs.push(attrData);\n } else {\n this.attrs = [ attrData ];\n }\n};\n\n\n/**\n * Token.attrSet(name, value)\n *\n * Set `name` attribute to `value`. Override old value if exists.\n **/\nToken.prototype.attrSet = function attrSet(name, value) {\n var idx = this.attrIndex(name),\n attrData = [ name, value ];\n\n if (idx < 0) {\n this.attrPush(attrData);\n } else {\n this.attrs[idx] = attrData;\n }\n};\n\n\n/**\n * Token.attrGet(name)\n *\n * Get the value of attribute `name`, or null if it does not exist.\n **/\nToken.prototype.attrGet = function attrGet(name) {\n var idx = this.attrIndex(name), value = null;\n if (idx >= 0) {\n value = this.attrs[idx][1];\n }\n return value;\n};\n\n\n/**\n * Token.attrJoin(name, value)\n *\n * Join value to existing attribute via space. Or create new attribute if not\n * exists. Useful to operate with token classes.\n **/\nToken.prototype.attrJoin = function attrJoin(name, value) {\n var idx = this.attrIndex(name);\n\n if (idx < 0) {\n this.attrPush([ name, value ]);\n } else {\n this.attrs[idx][1] = this.attrs[idx][1] + ' ' + value;\n }\n};\n\n\nmodule.exports = Token;\n", "// Core state object\n//\n'use strict';\n\nvar Token = require('../token');\n\n\nfunction StateCore(src, md, env) {\n this.src = src;\n this.env = env;\n this.tokens = [];\n this.inlineMode = false;\n this.md = md; // link to parser instance\n}\n\n// re-export Token class to use in core rules\nStateCore.prototype.Token = Token;\n\n\nmodule.exports = StateCore;\n", "/** internal\n * class Core\n *\n * Top-level rules executor. Glues block/inline parsers and does intermediate\n * transformations.\n **/\n'use strict';\n\n\nvar Ruler = require('./ruler');\n\n\nvar _rules = [\n [ 'normalize', require('./rules_core/normalize') ],\n [ 'block', require('./rules_core/block') ],\n [ 'inline', require('./rules_core/inline') ],\n [ 'linkify', require('./rules_core/linkify') ],\n [ 'replacements', require('./rules_core/replacements') ],\n [ 'smartquotes', require('./rules_core/smartquotes') ]\n];\n\n\n/**\n * new Core()\n **/\nfunction Core() {\n /**\n * Core#ruler -> Ruler\n *\n * [[Ruler]] instance. Keep configuration of core rules.\n **/\n this.ruler = new Ruler();\n\n for (var i = 0; i < _rules.length; i++) {\n this.ruler.push(_rules[i][0], _rules[i][1]);\n }\n}\n\n\n/**\n * Core.process(state)\n *\n * Executes core chain rules.\n **/\nCore.prototype.process = function (state) {\n var i, l, rules;\n\n rules = this.ruler.getRules('');\n\n for (i = 0, l = rules.length; i < l; i++) {\n rules[i](state);\n }\n};\n\nCore.prototype.State = require('./rules_core/state_core');\n\n\nmodule.exports = Core;\n", "// GFM table, https://github.github.com/gfm/#tables-extension-\n\n'use strict';\n\nvar isSpace = require('../common/utils').isSpace;\n\n\nfunction getLine(state, line) {\n var pos = state.bMarks[line] + state.tShift[line],\n max = state.eMarks[line];\n\n return state.src.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.md.options.allowIndentation && 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.md.options.allowIndentation && 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.md.options.allowIndentation && 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 if (state.md.options.allowIndentation) { return false; }\n\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.md.options.allowIndentation && 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.md.options.allowIndentation && 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.md.options.allowIndentation && 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.md.options.allowIndentation && 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.md.options.allowIndentation && 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.md.options.allowIndentation &&\n state.listIndent >= 0 &&\n state.sCount[startLine] - state.listIndent >= 4 &&\n state.sCount[startLine] < state.blkIndent) {\n return false;\n }\n\n // limit conditions when list can interrupt\n // a paragraph (validation mode only)\n if (silent && state.parentType === 'paragraph') {\n // Next list item should still terminate previous list item;\n //\n // This code can fail if plugins use blkIndent as well as lists,\n // but I hope the spec gets fixed long before that happens.\n //\n if (state.sCount[startLine] >= state.blkIndent) {\n isTerminatingParagraph = true;\n }\n }\n\n // Detect list type and position after marker\n if ((posAfterMarker = skipOrderedListMarker(state, startLine)) >= 0) {\n isOrdered = true;\n start = state.bMarks[startLine] + state.tShift[startLine];\n markerValue = Number(state.src.slice(start, posAfterMarker - 1));\n\n // If we're starting a new ordered list right after\n // a paragraph, it should start with 1.\n if (isTerminatingParagraph && markerValue !== 1) return false;\n\n } else if ((posAfterMarker = skipBulletListMarker(state, startLine)) >= 0) {\n isOrdered = false;\n\n } else {\n return false;\n }\n\n // If we're starting a new unordered list right after\n // a paragraph, first line should not be empty.\n if (isTerminatingParagraph) {\n if (state.skipSpaces(posAfterMarker) >= state.eMarks[startLine]) return false;\n }\n\n // We should terminate list on style change. Remember first one to compare.\n markerCharCode = state.src.charCodeAt(posAfterMarker - 1);\n\n // For validation mode we can terminate immediately\n if (silent) { return true; }\n\n // Start list\n listTokIdx = state.tokens.length;\n\n if (isOrdered) {\n token = state.push('ordered_list_open', 'ol', 1);\n if (markerValue !== 1) {\n token.attrs = [ [ 'start', markerValue ] ];\n }\n\n } else {\n token = state.push('bullet_list_open', 'ul', 1);\n }\n\n token.map = listLines = [ startLine, 0 ];\n token.markup = String.fromCharCode(markerCharCode);\n\n //\n // Iterate list items\n //\n\n nextLine = startLine;\n prevEmptyEnd = false;\n terminatorRules = state.md.block.ruler.getRules('list');\n\n oldParentType = state.parentType;\n state.parentType = 'list';\n\n while (nextLine < endLine) {\n pos = posAfterMarker;\n max = state.eMarks[nextLine];\n\n initial = offset = state.sCount[nextLine] + posAfterMarker - (state.bMarks[startLine] + state.tShift[startLine]);\n\n while (pos < max) {\n ch = state.src.charCodeAt(pos);\n\n if (ch === 0x09) {\n offset += 4 - (offset + state.bsCount[nextLine]) % 4;\n } else if (ch === 0x20) {\n offset++;\n } else {\n break;\n }\n\n pos++;\n }\n\n contentStart = pos;\n\n if (contentStart >= max) {\n // trimming space in \"- \\n 3\" case, indent is 1 here\n indentAfterMarker = 1;\n } else {\n indentAfterMarker = offset - initial;\n }\n\n // If we have more than 4 spaces, the indent is 1\n // (the rest is just indented code block)\n if (!state.md.options.allowIndentation && 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.md.options.allowIndentation && 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.md.options.allowIndentation && 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.md.options.allowIndentation && state.sCount[nextLine] - state.blkIndent > 3) { continue; }\n\n // quirk for blockquotes, this line should already be checked by that rule\n if (state.sCount[nextLine] < 0) { continue; }\n\n // Some tags can terminate paragraph without empty line.\n terminate = false;\n for (i = 0, l = terminatorRules.length; i < l; i++) {\n if (terminatorRules[i](state, nextLine, endLine, true)) {\n terminate = true;\n break;\n }\n }\n if (terminate) { break; }\n }\n\n str = state.getLines(startLine, nextLine, state.blkIndent, false).trim();\n max = str.length;\n\n for (pos = 1; pos < max; pos++) {\n ch = str.charCodeAt(pos);\n if (ch === 0x5B /* [ */) {\n return false;\n } else if (ch === 0x5D /* ] */) {\n labelEnd = pos;\n break;\n } else if (ch === 0x0A /* \\n */) {\n lines++;\n } else if (ch === 0x5C /* \\ */) {\n pos++;\n if (pos < max && str.charCodeAt(pos) === 0x0A) {\n lines++;\n }\n }\n }\n\n if (labelEnd < 0 || str.charCodeAt(labelEnd + 1) !== 0x3A/* : */) { return false; }\n\n // [label]: destination 'title'\n // ^^^ skip optional whitespace here\n for (pos = labelEnd + 2; pos < max; pos++) {\n ch = str.charCodeAt(pos);\n if (ch === 0x0A) {\n lines++;\n } else if (isSpace(ch)) {\n /*eslint no-empty:0*/\n } else {\n break;\n }\n }\n\n // [label]: destination 'title'\n // ^^^^^^^^^^^ parse this\n res = state.md.helpers.parseLinkDestination(str, pos, max);\n if (!res.ok) { return false; }\n\n href = state.md.normalizeLink(res.str);\n if (!state.md.validateLink(href)) { return false; }\n\n pos = res.pos;\n lines += res.lines;\n\n // save cursor state, we could require to rollback later\n destEndPos = pos;\n destEndLineNo = lines;\n\n // [label]: destination 'title'\n // ^^^ skipping those spaces\n start = pos;\n for (; pos < max; pos++) {\n ch = str.charCodeAt(pos);\n if (ch === 0x0A) {\n lines++;\n } else if (isSpace(ch)) {\n /*eslint no-empty:0*/\n } else {\n break;\n }\n }\n\n // [label]: destination 'title'\n // ^^^^^^^ parse this\n res = state.md.helpers.parseLinkTitle(str, pos, max);\n if (pos < max && start !== pos && res.ok) {\n title = res.str;\n pos = res.pos;\n lines += res.lines;\n } else {\n title = '';\n pos = destEndPos;\n lines = destEndLineNo;\n }\n\n // skip trailing spaces until the rest of the line\n while (pos < max) {\n ch = str.charCodeAt(pos);\n if (!isSpace(ch)) { break; }\n pos++;\n }\n\n if (pos < max && str.charCodeAt(pos) !== 0x0A) {\n if (title) {\n // garbage at the end of the line after title,\n // but it could still be a valid reference if we roll back\n title = '';\n pos = destEndPos;\n lines = destEndLineNo;\n while (pos < max) {\n ch = str.charCodeAt(pos);\n if (!isSpace(ch)) { break; }\n pos++;\n }\n }\n }\n\n if (pos < max && str.charCodeAt(pos) !== 0x0A) {\n // garbage at the end of the line\n return false;\n }\n\n label = normalizeReference(str.slice(1, labelEnd));\n if (!label) {\n // CommonMark 0.20 disallows empty labels\n return false;\n }\n\n // Reference can not terminate anything. This check is for safety only.\n /*istanbul ignore if*/\n if (silent) { return true; }\n\n if (typeof state.env.references === 'undefined') {\n state.env.references = {};\n }\n if (typeof state.env.references[label] === 'undefined') {\n state.env.references[label] = { title: title, href: href };\n }\n\n state.parentType = oldParentType;\n\n state.line = startLine + lines + 1;\n return true;\n};\n", "// List of valid html blocks names, accorting to commonmark spec\n// http://jgm.github.io/CommonMark/spec.html#html-blocks\n\n'use strict';\n\n\nmodule.exports = [\n 'address',\n 'article',\n 'aside',\n 'base',\n 'basefont',\n 'blockquote',\n 'body',\n 'caption',\n 'center',\n 'col',\n 'colgroup',\n 'dd',\n 'details',\n 'dialog',\n 'dir',\n 'div',\n 'dl',\n 'dt',\n 'fieldset',\n 'figcaption',\n 'figure',\n 'footer',\n 'form',\n 'frame',\n 'frameset',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'head',\n 'header',\n 'hr',\n 'html',\n 'iframe',\n 'legend',\n 'li',\n 'link',\n 'main',\n 'menu',\n 'menuitem',\n 'nav',\n 'noframes',\n 'ol',\n 'optgroup',\n 'option',\n 'p',\n 'param',\n 'section',\n 'source',\n 'summary',\n 'table',\n 'tbody',\n 'td',\n 'tfoot',\n 'th',\n 'thead',\n 'title',\n 'tr',\n 'track',\n 'ul'\n];\n", "// Regexps to match html elements\n\n'use strict';\n\nvar attr_name = '[a-zA-Z_:][a-zA-Z0-9:._-]*';\n\nvar unquoted = '[^\"\\'=<>`\\\\x00-\\\\x20]+';\nvar single_quoted = \"'[^']*'\";\nvar double_quoted = '\"[^\"]*\"';\n\nvar attr_value = '(?:' + unquoted + '|' + single_quoted + '|' + double_quoted + ')';\n\nvar attribute = '(?:\\\\s+' + attr_name + '(?:\\\\s*=\\\\s*' + attr_value + ')?)';\n\nvar open_tag = '<[A-Za-z][A-Za-z0-9\\\\-]*' + attribute + '*\\\\s*\\\\/?>';\n\nvar close_tag = '<\\\\/[A-Za-z][A-Za-z0-9\\\\-]*\\\\s*>';\nvar comment = '<!---->|<!--(?:-?[^>-])(?:-?[^-])*-->';\nvar processing = '<[?][\\\\s\\\\S]*?[?]>';\nvar declaration = '<![A-Z]+\\\\s+[^>]*>';\nvar cdata = '<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?\\\\]\\\\]>';\n\nvar HTML_TAG_RE = new RegExp('^(?:' + open_tag + '|' + close_tag + '|' + comment +\n '|' + processing + '|' + declaration + '|' + cdata + ')');\nvar HTML_OPEN_CLOSE_TAG_RE = new RegExp('^(?:' + open_tag + '|' + close_tag + ')');\n\nmodule.exports.HTML_TAG_RE = HTML_TAG_RE;\nmodule.exports.HTML_OPEN_CLOSE_TAG_RE = HTML_OPEN_CLOSE_TAG_RE;\n", "// HTML block\n\n'use strict';\n\n\nvar block_names = require('../common/html_blocks');\nvar HTML_OPEN_CLOSE_TAG_RE = require('../common/html_re').HTML_OPEN_CLOSE_TAG_RE;\n\n// An array of opening and corresponding closing sequences for html tags,\n// last argument defines whether it can terminate a paragraph or not\n//\nvar HTML_SEQUENCES = [\n [ /^<(script|pre|style|textarea)(?=(\\s|>|$))/i, /<\\/(script|pre|style|textarea)>/i, true ],\n [ /^<!--/, /-->/, true ],\n [ /^<\\?/, /\\?>/, true ],\n [ /^<![A-Z]/, />/, true ],\n [ /^<!\\[CDATA\\[/, /\\]\\]>/, true ],\n [ new RegExp('^</?(' + block_names.join('|') + ')(?=(\\\\s|/?>|$))', '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.md.options.allowIndentation && state.sCount[startLine] - state.blkIndent >= 4) { return false; }\n\n if (!state.md.options.html) { return false; }\n\n if (state.src.charCodeAt(pos) !== 0x3C/* < */) { return false; }\n\n lineText = state.src.slice(pos, max);\n\n for (i = 0; i < HTML_SEQUENCES.length; i++) {\n if (HTML_SEQUENCES[i][0].test(lineText)) { break; }\n }\n\n if (i === HTML_SEQUENCES.length) { return false; }\n\n if (silent) {\n // true if this sequence can be a terminator, false otherwise\n return HTML_SEQUENCES[i][2];\n }\n\n nextLine = startLine + 1;\n\n // If we are here - we detected HTML block.\n // Let's roll down till block end.\n if (!HTML_SEQUENCES[i][1].test(lineText)) {\n for (; nextLine < endLine; nextLine++) {\n if (state.sCount[nextLine] < state.blkIndent) { break; }\n\n pos = state.bMarks[nextLine] + state.tShift[nextLine];\n max = state.eMarks[nextLine];\n lineText = state.src.slice(pos, max);\n\n if (HTML_SEQUENCES[i][1].test(lineText)) {\n if (lineText.length !== 0) { nextLine++; }\n break;\n }\n }\n }\n\n state.line = nextLine;\n\n token = state.push('html_block', '', 0);\n token.map = [ startLine, nextLine ];\n token.content = state.getLines(startLine, nextLine, state.blkIndent, true);\n\n return true;\n};\n", "// heading (#, ##, ...)\n\n'use strict';\n\nvar isSpace = require('../common/utils').isSpace;\n\n\nmodule.exports = function heading(state, startLine, endLine, silent) {\n var ch, level, tmp, token,\n pos = state.bMarks[startLine] + state.tShift[startLine],\n max = state.eMarks[startLine];\n\n // if it's indented more than 3 spaces, it should be a code block\n if (!state.md.options.allowIndentation && 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.md.options.allowIndentation && 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.md.options.allowIndentation && 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.md.options.allowIndentation && state.sCount[nextLine] - state.blkIndent > 3) { continue; }\n\n // quirk for blockquotes, this line should already be checked by that rule\n if (state.sCount[nextLine] < 0) { continue; }\n\n // Some tags can terminate paragraph without empty line.\n terminate = false;\n for (i = 0, l = terminatorRules.length; i < l; i++) {\n if (terminatorRules[i](state, nextLine, endLine, true)) {\n terminate = true;\n break;\n }\n }\n if (terminate) { break; }\n }\n\n content = state.getLines(startLine, nextLine, state.blkIndent, false).trim();\n\n state.line = nextLine;\n\n token = state.push('paragraph_open', 'p', 1);\n token.map = [ startLine, state.line ];\n\n token = state.push('inline', '', 0);\n token.content = content;\n token.map = [ startLine, state.line ];\n token.children = [];\n\n token = state.push('paragraph_close', 'p', -1);\n\n state.parentType = oldParentType;\n\n return true;\n};\n", "// Parser state class\n\n'use strict';\n\nvar Token = require('../token');\nvar isSpace = require('../common/utils').isSpace;\n\n\nfunction StateBlock(src, md, env, tokens) {\n var ch, s, start, pos, len, indent, offset, indent_found;\n\n this.src = src;\n\n // link to parser instance\n this.md = md;\n\n this.env = env;\n\n //\n // Internal state vartiables\n //\n\n this.tokens = tokens;\n\n this.bMarks = []; // line begin offsets for fast jumps\n this.eMarks = []; // line end offsets for fast jumps\n this.tShift = []; // offsets of the first non-space characters (tabs not expanded)\n this.sCount = []; // indents for each line (tabs expanded)\n\n // An amount of virtual spaces (tabs expanded) between beginning\n // of each line (bMarks) and real beginning of that line.\n //\n // It exists only as a hack because blockquotes override bMarks\n // losing information in the process.\n //\n // It's used only when expanding tabs, you can think about it as\n // an initial tab length, e.g. bsCount=21 applied to string `\\t123`\n // means first tab should be expanded to 4-21%4 === 3 spaces.\n //\n this.bsCount = [];\n\n // block parser variables\n this.blkIndent = 0; // required block content indent (for example, if we are\n // inside a list, it would be positioned after list marker)\n this.line = 0; // line index in src\n this.lineMax = 0; // lines count\n this.tight = false; // loose/tight mode for lists\n this.ddIndent = -1; // indent of the current dd block (-1 if there isn't any)\n this.listIndent = -1; // indent of the current list block (-1 if there isn't any)\n\n // can be 'blockquote', 'list', 'root', 'paragraph' or 'reference'\n // used in lists to determine if they interrupt a paragraph\n this.parentType = 'root';\n\n this.level = 0;\n\n // renderer\n this.result = '';\n\n // Create caches\n // Generate markers.\n s = this.src;\n indent_found = false;\n\n for (start = pos = indent = offset = 0, len = s.length; pos < len; pos++) {\n ch = s.charCodeAt(pos);\n\n if (!indent_found) {\n if (isSpace(ch)) {\n indent++;\n\n if (ch === 0x09) {\n offset += 4 - offset % 4;\n } else {\n offset++;\n }\n continue;\n } else {\n indent_found = true;\n }\n }\n\n if (ch === 0x0A || pos === len - 1) {\n if (ch !== 0x0A) { pos++; }\n this.bMarks.push(start);\n this.eMarks.push(pos);\n this.tShift.push(indent);\n this.sCount.push(offset);\n this.bsCount.push(0);\n\n indent_found = false;\n indent = 0;\n offset = 0;\n start = pos + 1;\n }\n }\n\n // Push fake entry to simplify cache bounds checks\n this.bMarks.push(s.length);\n this.eMarks.push(s.length);\n this.tShift.push(0);\n this.sCount.push(0);\n this.bsCount.push(0);\n\n this.lineMax = this.bMarks.length - 1; // don't count last fake line\n}\n\n// Push new token to \"stream\".\n//\nStateBlock.prototype.push = function (type, tag, nesting) {\n var token = new Token(type, tag, nesting);\n token.block = true;\n\n if (nesting < 0) this.level--; // closing tag\n token.level = this.level;\n if (nesting > 0) this.level++; // opening tag\n\n this.tokens.push(token);\n return token;\n};\n\nStateBlock.prototype.isEmpty = function isEmpty(line) {\n return this.bMarks[line] + this.tShift[line] >= this.eMarks[line];\n};\n\nStateBlock.prototype.skipEmptyLines = function skipEmptyLines(from) {\n for (var max = this.lineMax; from < max; from++) {\n if (this.bMarks[from] + this.tShift[from] < this.eMarks[from]) {\n break;\n }\n }\n return from;\n};\n\n// Skip spaces from given position.\nStateBlock.prototype.skipSpaces = function skipSpaces(pos) {\n var ch;\n\n for (var max = this.src.length; pos < max; pos++) {\n ch = this.src.charCodeAt(pos);\n if (!isSpace(ch)) { break; }\n }\n return pos;\n};\n\n// Skip spaces from given position in reverse.\nStateBlock.prototype.skipSpacesBack = function skipSpacesBack(pos, min) {\n if (pos <= min) { return pos; }\n\n while (pos > min) {\n if (!isSpace(this.src.charCodeAt(--pos))) { return pos + 1; }\n }\n return pos;\n};\n\n// Skip char codes from given position\nStateBlock.prototype.skipChars = function skipChars(pos, code) {\n for (var max = this.src.length; pos < max; pos++) {\n if (this.src.charCodeAt(pos) !== code) { break; }\n }\n return pos;\n};\n\n// Skip char codes reverse from given position - 1\nStateBlock.prototype.skipCharsBack = function skipCharsBack(pos, code, min) {\n if (pos <= min) { return pos; }\n\n while (pos > min) {\n if (code !== this.src.charCodeAt(--pos)) { return pos + 1; }\n }\n return pos;\n};\n\n// cut lines range from source.\nStateBlock.prototype.getLines = function getLines(begin, end, indent, keepLastLF) {\n var i, lineIndent, ch, first, last, queue, lineStart,\n line = begin;\n\n if (begin >= end) {\n return '';\n }\n\n queue = new Array(end - begin);\n\n for (i = 0; line < end; line++, i++) {\n lineIndent = 0;\n lineStart = first = this.bMarks[line];\n\n if (line + 1 < end || keepLastLF) {\n // No need for bounds check because we have fake entry on tail.\n last = this.eMarks[line] + 1;\n } else {\n last = this.eMarks[line];\n }\n\n while (first < last && lineIndent < indent) {\n ch = this.src.charCodeAt(first);\n\n if (isSpace(ch)) {\n if (ch === 0x09) {\n lineIndent += 4 - (lineIndent + this.bsCount[line]) % 4;\n } else {\n lineIndent++;\n }\n } else if (first - lineStart < this.tShift[line]) {\n // patched tShift masked characters to look like spaces (blockquotes, list markers)\n lineIndent++;\n } else {\n break;\n }\n\n first++;\n }\n\n if (lineIndent > indent) {\n // partially expanding tabs in code blocks, e.g '\\t\\tfoobar'\n // with indent=2 becomes ' \\tfoobar'\n queue[i] = new Array(lineIndent - indent + 1).join(' ') + this.src.slice(first, last);\n } else {\n queue[i] = this.src.slice(first, last);\n }\n }\n\n return queue.join('');\n};\n\n// re-export Token class to use in block rules\nStateBlock.prototype.Token = Token;\n\n\nmodule.exports = StateBlock;\n", "/** internal\n * class ParserBlock\n *\n * Block-level tokenizer.\n **/\n'use strict';\n\n\nvar Ruler = require('./ruler');\n\n\nvar _rules = [\n // First 2 params - rule name & source. Secondary array - list of rules,\n // which can be terminated by this one.\n [ 'table', require('./rules_block/table'), [ 'paragraph', 'reference' ] ],\n [ 'code', require('./rules_block/code') ],\n [ 'fence', require('./rules_block/fence'), [ 'paragraph', 'reference', 'blockquote', 'list' ] ],\n [ 'blockquote', require('./rules_block/blockquote'), [ 'paragraph', 'reference', 'blockquote', 'list' ] ],\n [ 'hr', require('./rules_block/hr'), [ 'paragraph', 'reference', 'blockquote', 'list' ] ],\n [ 'list', require('./rules_block/list'), [ 'paragraph', 'reference', 'blockquote' ] ],\n [ 'reference', require('./rules_block/reference') ],\n [ 'html_block', require('./rules_block/html_block'), [ 'paragraph', 'reference', 'blockquote' ] ],\n [ 'heading', require('./rules_block/heading'), [ 'paragraph', 'reference', 'blockquote' ] ],\n [ 'lheading', require('./rules_block/lheading') ],\n [ 'paragraph', require('./rules_block/paragraph') ]\n];\n\n\n/**\n * new ParserBlock()\n **/\nfunction ParserBlock() {\n /**\n * ParserBlock#ruler -> Ruler\n *\n * [[Ruler]] instance. Keep configuration of block rules.\n **/\n this.ruler = new Ruler();\n\n for (var i = 0; i < _rules.length; i++) {\n this.ruler.push(_rules[i][0], _rules[i][1], { alt: (_rules[i][2] || []).slice() });\n }\n}\n\n\n// Generate tokens for input range\n//\nParserBlock.prototype.tokenize = function (state, startLine, endLine) {\n var ok, i,\n rules = this.ruler.getRules(''),\n len = rules.length,\n line = startLine,\n hasEmptyLines = false,\n maxNesting = state.md.options.maxNesting;\n\n while (line < endLine) {\n state.line = line = state.skipEmptyLines(line);\n if (line >= endLine) { break; }\n\n // Termination condition for nested calls.\n // Nested calls currently used for blockquotes & lists\n if (state.sCount[line] < state.blkIndent) { break; }\n\n // If nesting level exceeded - skip tail to the end. That's not ordinary\n // situation and we should not care about content.\n if (state.level >= maxNesting) {\n state.line = endLine;\n break;\n }\n\n // Try all possible rules.\n // On success, rule should:\n //\n // - update `state.line`\n // - update `state.tokens`\n // - return true\n\n for (i = 0; i < len; i++) {\n ok = rules[i](state, line, endLine, false);\n if (ok) { break; }\n }\n\n // set state.tight if we had an empty line before current tag\n // i.e. latest empty line should not count\n state.tight = !hasEmptyLines;\n\n // paragraph might \"eat\" one newline after it in nested lists\n if (state.isEmpty(state.line - 1)) {\n hasEmptyLines = true;\n }\n\n line = state.line;\n\n if (line < endLine && state.isEmpty(line)) {\n hasEmptyLines = true;\n line++;\n state.line = line;\n }\n }\n};\n\n\n/**\n * ParserBlock.parse(str, md, env, outTokens)\n *\n * Process input string and push block tokens into `outTokens`\n **/\nParserBlock.prototype.parse = function (src, md, env, outTokens) {\n var state;\n\n if (!src) { return; }\n\n state = new this.State(src, md, env, outTokens);\n\n this.tokenize(state, state.line, state.lineMax);\n};\n\n\nParserBlock.prototype.State = require('./rules_block/state_block');\n\n\nmodule.exports = ParserBlock;\n", "// Skip text characters for text token, place those to pending buffer\n// and increment current pos\n\n'use strict';\n\n\n// Rule to skip pure text\n// '{}$%@~+=:' reserved for extentions\n\n// !, \", #, $, %, &, ', (, ), *, +, ,, -, ., /, :, ;, <, =, >, ?, @, [, \\, ], ^, _, `, {, |, }, or ~\n\n// !!!! Don't confuse with \"Markdown ASCII Punctuation\" chars\n// http://spec.commonmark.org/0.15/#ascii-punctuation-character\nfunction isTerminatorChar(ch) {\n switch (ch) {\n case 0x0A/* \\n */:\n case 0x21/* ! */:\n case 0x23/* # */:\n case 0x24/* $ */:\n case 0x25/* % */:\n case 0x26/* & */:\n case 0x2A/* * */:\n case 0x2B/* + */:\n case 0x2D/* - */:\n case 0x3A/* : */:\n case 0x3C/* < */:\n case 0x3D/* = */:\n case 0x3E/* > */:\n case 0x40/* @ */:\n case 0x5B/* [ */:\n case 0x5C/* \\ */:\n case 0x5D/* ] */:\n case 0x5E/* ^ */:\n case 0x5F/* _ */:\n case 0x60/* ` */:\n case 0x7B/* { */:\n case 0x7D/* } */:\n case 0x7E/* ~ */:\n return true;\n default:\n return false;\n }\n}\n\nmodule.exports = function text(state, silent) {\n var pos = state.pos;\n\n while (pos < state.posMax && !isTerminatorChar(state.src.charCodeAt(pos))) {\n pos++;\n }\n\n if (pos === state.pos) { return false; }\n\n if (!silent) { state.pending += state.src.slice(state.pos, pos); }\n\n state.pos = pos;\n\n return true;\n};\n\n// Alternative implementation, for memory.\n//\n// It costs 10% of performance, but allows extend terminators list, if place it\n// to `ParcerInline` property. Probably, will switch to it sometime, such\n// flexibility required.\n\n/*\nvar TERMINATOR_RE = /[\\n!#$%&*+\\-:<=>@[\\\\\\]^_`{}~]/;\n\nmodule.exports = function text(state, silent) {\n var pos = state.pos,\n idx = state.src.slice(pos).search(TERMINATOR_RE);\n\n // first char is terminator -> empty text\n if (idx === 0) { return false; }\n\n // no terminator -> text till end of string\n if (idx < 0) {\n if (!silent) { state.pending += state.src.slice(pos); }\n state.pos = state.src.length;\n return true;\n }\n\n if (!silent) { state.pending += state.src.slice(pos, pos + idx); }\n\n state.pos += idx;\n\n return true;\n};*/\n", "// Proceess '\\n'\n\n'use strict';\n\nvar isSpace = require('../common/utils').isSpace;\n\n\nmodule.exports = function newline(state, silent) {\n var pmax, max, ws, pos = state.pos;\n\n if (state.src.charCodeAt(pos) !== 0x0A/* \\n */) { return false; }\n\n pmax = state.pending.length - 1;\n max = state.posMax;\n\n // ' \\n' -> hardbreak\n // Lookup in pending chars is bad practice! Don't copy to other rules!\n // Pending string is stored in concat mode, indexed lookups will cause\n // convertion to flat mode.\n if (!silent) {\n if (pmax >= 0 && state.pending.charCodeAt(pmax) === 0x20) {\n if (pmax >= 1 && state.pending.charCodeAt(pmax - 1) === 0x20) {\n // Find whitespaces tail of pending chars.\n ws = pmax - 1;\n while (ws >= 1 && state.pending.charCodeAt(ws - 1) === 0x20) ws--;\n\n state.pending = state.pending.slice(0, ws);\n state.push('hardbreak', 'br', 0);\n } else {\n state.pending = state.pending.slice(0, -1);\n state.push('softbreak', 'br', 0);\n }\n\n } else {\n state.push('softbreak', 'br', 0);\n }\n }\n\n pos++;\n\n // skip heading spaces for next line\n while (pos < max && isSpace(state.src.charCodeAt(pos))) { pos++; }\n\n state.pos = pos;\n return true;\n};\n", "// Process escaped chars and hardbreaks\n\n'use strict';\n\nvar isSpace = require('../common/utils').isSpace;\n\nvar ESCAPED = [];\n\nfor (var i = 0; i < 256; i++) { ESCAPED.push(0); }\n\n'\\\\!\"#$%&\\'()*+,./:;<=>?@[]^_`{|}~-'\n .split('').forEach(function (ch) { ESCAPED[ch.charCodeAt(0)] = 1; });\n\n\nmodule.exports = function escape(state, silent) {\n var 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", "// ~~strike through~~\n//\n'use strict';\n\n\n// Insert each marker as a separate text token, and add it to delimiter list\n//\nmodule.exports.tokenize = function strikethrough(state, silent) {\n var i, scanned, token, len, ch,\n start = state.pos,\n marker = state.src.charCodeAt(start);\n\n if (silent) { return false; }\n\n if (marker !== 0x7E/* ~ */) { return false; }\n\n scanned = state.scanDelims(state.pos, true);\n len = scanned.length;\n ch = String.fromCharCode(marker);\n\n if (len < 2) { return false; }\n\n if (len % 2) {\n token = state.push('text', '', 0);\n token.content = ch;\n len--;\n }\n\n for (i = 0; i < len; i += 2) {\n token = state.push('text', '', 0);\n token.content = ch + ch;\n\n state.delimiters.push({\n marker: marker,\n length: 0, // disable \"rule of 3\" length checks meant for emphasis\n token: state.tokens.length - 1,\n end: -1,\n open: scanned.can_open,\n close: scanned.can_close\n });\n }\n\n state.pos += scanned.length;\n\n return true;\n};\n\n\nfunction postProcess(state, delimiters) {\n var i, j,\n startDelim,\n endDelim,\n token,\n loneMarkers = [],\n max = delimiters.length;\n\n for (i = 0; i < max; i++) {\n startDelim = delimiters[i];\n\n if (startDelim.marker !== 0x7E/* ~ */) {\n continue;\n }\n\n if (startDelim.end === -1) {\n continue;\n }\n\n endDelim = delimiters[startDelim.end];\n\n token = state.tokens[startDelim.token];\n token.type = 's_open';\n token.tag = 's';\n token.nesting = 1;\n token.markup = '~~';\n token.content = '';\n\n token = state.tokens[endDelim.token];\n token.type = 's_close';\n token.tag = 's';\n token.nesting = -1;\n token.markup = '~~';\n token.content = '';\n\n if (state.tokens[endDelim.token - 1].type === 'text' &&\n state.tokens[endDelim.token - 1].content === '~') {\n\n loneMarkers.push(endDelim.token - 1);\n }\n }\n\n // If a marker sequence has an odd number of characters, it's splitted\n // like this: `~~~~~` -> `~` + `~~` + `~~`, leaving one marker at the\n // start of the sequence.\n //\n // So, we have to move all those markers after subsequent s_close tags.\n //\n while (loneMarkers.length) {\n i = loneMarkers.pop();\n j = i + 1;\n\n while (j < state.tokens.length && state.tokens[j].type === 's_close') {\n j++;\n }\n\n j--;\n\n if (i !== j) {\n token = state.tokens[j];\n state.tokens[j] = state.tokens[i];\n state.tokens[i] = token;\n }\n }\n}\n\n\n// Walk through delimiter list and replace text tokens with tags\n//\nmodule.exports.postProcess = function strikethrough(state) {\n var curr,\n tokens_meta = state.tokens_meta,\n max = state.tokens_meta.length;\n\n postProcess(state, state.delimiters);\n\n for (curr = 0; curr < max; curr++) {\n if (tokens_meta[curr] && tokens_meta[curr].delimiters) {\n postProcess(state, tokens_meta[curr].delimiters);\n }\n }\n};\n", "// Process *this* and _that_\n//\n'use strict';\n\n\n// Insert each marker as a separate text token, and add it to delimiter list\n//\nmodule.exports.tokenize = function emphasis(state, silent) {\n var i, scanned, token,\n start = state.pos,\n marker = state.src.charCodeAt(start);\n\n if (silent) { return false; }\n\n if (marker !== 0x5F /* _ */ && marker !== 0x2A /* * */) { return false; }\n\n scanned = state.scanDelims(state.pos, marker === 0x2A);\n\n for (i = 0; i < scanned.length; i++) {\n token = state.push('text', '', 0);\n token.content = String.fromCharCode(marker);\n\n state.delimiters.push({\n // Char code of the starting marker (number).\n //\n marker: marker,\n\n // Total length of these series of delimiters.\n //\n length: scanned.length,\n\n // A position of the token this delimiter corresponds to.\n //\n token: state.tokens.length - 1,\n\n // If this delimiter is matched as a valid opener, `end` will be\n // equal to its position, otherwise it's `-1`.\n //\n end: -1,\n\n // Boolean flags that determine if this delimiter could open or close\n // an emphasis.\n //\n open: scanned.can_open,\n close: scanned.can_close\n });\n }\n\n state.pos += scanned.length;\n\n return true;\n};\n\n\nfunction postProcess(state, delimiters) {\n var i,\n startDelim,\n endDelim,\n token,\n ch,\n isStrong,\n max = delimiters.length;\n\n for (i = max - 1; i >= 0; i--) {\n startDelim = delimiters[i];\n\n if (startDelim.marker !== 0x5F/* _ */ && startDelim.marker !== 0x2A/* * */) {\n continue;\n }\n\n // Process only opening markers\n if (startDelim.end === -1) {\n continue;\n }\n\n endDelim = delimiters[startDelim.end];\n\n // If the previous delimiter has the same marker and is adjacent to this one,\n // merge those into one strong delimiter.\n //\n // `<em><em>whatever</em></em>` -> `<strong>whatever</strong>`\n //\n isStrong = i > 0 &&\n delimiters[i - 1].end === startDelim.end + 1 &&\n // check that first two markers match and adjacent\n delimiters[i - 1].marker === startDelim.marker &&\n delimiters[i - 1].token === startDelim.token - 1 &&\n // check that last two markers are adjacent (we can safely assume they match)\n delimiters[startDelim.end + 1].token === endDelim.token + 1;\n\n ch = String.fromCharCode(startDelim.marker);\n\n token = state.tokens[startDelim.token];\n token.type = isStrong ? 'strong_open' : 'em_open';\n token.tag = isStrong ? 'strong' : 'em';\n token.nesting = 1;\n token.markup = isStrong ? ch + ch : ch;\n token.content = '';\n\n token = state.tokens[endDelim.token];\n token.type = isStrong ? 'strong_close' : 'em_close';\n token.tag = isStrong ? 'strong' : 'em';\n token.nesting = -1;\n token.markup = isStrong ? ch + ch : ch;\n token.content = '';\n\n if (isStrong) {\n state.tokens[delimiters[i - 1].token].content = '';\n state.tokens[delimiters[startDelim.end + 1].token].content = '';\n i--;\n }\n }\n}\n\n\n// Walk through delimiter list and replace text tokens with tags\n//\nmodule.exports.postProcess = function emphasis(state) {\n var curr,\n tokens_meta = state.tokens_meta,\n max = state.tokens_meta.length;\n\n postProcess(state, state.delimiters);\n\n for (curr = 0; curr < max; curr++) {\n if (tokens_meta[curr] && tokens_meta[curr].delimiters) {\n postProcess(state, tokens_meta[curr].delimiters);\n }\n }\n};\n", "// Process [link](<to> \"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]( <href> \"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]( <href> \"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]( <href> \"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]( <href> \"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]( <href> \"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](<src> \"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]( <href> \"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]( <href> \"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]( <href> \"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]( <href> \"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]( <href> \"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 '<protocol:...>'\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 - &#123;, &#xAF;, &quot;, ...\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 if (!max) return;\n\n // headerIdx is the first delimiter of the current (where closer is) delimiter run\n var headerIdx = 0;\n var lastTokenIdx = -2; // needs any value lower than -1\n var jumps = [];\n\n for (closerIdx = 0; closerIdx < max; closerIdx++) {\n closer = delimiters[closerIdx];\n\n jumps.push(0);\n\n // markers belong to same delimiter run if:\n // - they have adjacent tokens\n // - AND markers are the same\n //\n if (delimiters[headerIdx].marker !== closer.marker || lastTokenIdx !== closer.token - 1) {\n headerIdx = closerIdx;\n }\n\n lastTokenIdx = closer.token;\n\n // Length is only used for emphasis-specific \"rule of 3\",\n // if it's not defined (in strikethrough or 3rd party plugins),\n // we can default it to 0 to disable those checks.\n //\n closer.length = closer.length || 0;\n\n if (!closer.close) continue;\n\n // Previously calculated lower bounds (previous fails)\n // for each marker, each delimiter length modulo 3,\n // and for whether this closer can be an opener;\n // https://github.com/commonmark/cmark/commit/34250e12ccebdc6372b8b49c44fab57c72443460\n if (!openersBottom.hasOwnProperty(closer.marker)) {\n openersBottom[closer.marker] = [ -1, -1, -1, -1, -1, -1 ];\n }\n\n minOpenerIdx = openersBottom[closer.marker][(closer.open ? 3 : 0) + (closer.length % 3)];\n\n openerIdx = headerIdx - jumps[headerIdx] - 1;\n\n newMinOpenerIdx = openerIdx;\n\n for (; openerIdx > minOpenerIdx; openerIdx -= jumps[openerIdx] + 1) {\n opener = delimiters[openerIdx];\n\n if (opener.marker !== closer.marker) continue;\n\n if (opener.open && opener.end < 0) {\n\n isOddMatch = false;\n\n // from spec:\n //\n // If one of the delimiters can both open and close emphasis, then the\n // sum of the lengths of the delimiter runs containing the opening and\n // closing delimiters must not be a multiple of 3 unless both lengths\n // are multiples of 3.\n //\n if (opener.close || closer.open) {\n if ((opener.length + closer.length) % 3 === 0) {\n if (opener.length % 3 !== 0 || closer.length % 3 !== 0) {\n isOddMatch = true;\n }\n }\n }\n\n if (!isOddMatch) {\n // If previous delimiter cannot be an opener, we can safely skip\n // the entire sequence in future checks. This is required to make\n // sure algorithm has linear complexity (see *_*_*_*_*_... case).\n //\n lastJump = openerIdx > 0 && !delimiters[openerIdx - 1].open ?\n jumps[openerIdx - 1] + 1 :\n 0;\n\n jumps[closerIdx] = closerIdx - openerIdx + lastJump;\n jumps[openerIdx] = lastJump;\n\n closer.open = false;\n opener.end = closerIdx;\n opener.close = false;\n newMinOpenerIdx = -1;\n // treat next token as start of run,\n // it optimizes skips in **<...>**a**<...>** pathological case\n lastTokenIdx = -2;\n break;\n }\n }\n }\n\n if (newMinOpenerIdx !== -1) {\n // If match for this delimiter run failed, we want to set lower bound for\n // future lookups. This is required to make sure algorithm has linear\n // complexity.\n //\n // See details here:\n // https://github.com/commonmark/cmark/issues/178#issuecomment-270417442\n //\n openersBottom[closer.marker][(closer.open ? 3 : 0) + ((closer.length || 0) % 3)] = newMinOpenerIdx;\n }\n }\n}\n\n\nmodule.exports = function link_pairs(state) {\n var curr,\n tokens_meta = state.tokens_meta,\n max = state.tokens_meta.length;\n\n processDelimiters(state, state.delimiters);\n\n for (curr = 0; curr < max; curr++) {\n if (tokens_meta[curr] && tokens_meta[curr].delimiters) {\n processDelimiters(state, tokens_meta[curr].delimiters);\n }\n }\n};\n", "// Clean up tokens after emphasis and strikethrough postprocessing:\n// merge adjacent text nodes into one and re-calculate all token levels\n//\n// This is necessary because initially emphasis delimiter markers (*, _, ~)\n// are treated as their own separate text tokens. Then emphasis rule either\n// leaves them as text (needed to merge with adjacent text) or turns them\n// into opening/closing tags (which messes up levels inside).\n//\n'use strict';\n\n\nmodule.exports = function 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", "/** 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", "'use strict';\n\n\nmodule.exports = function (opts) {\n var re = {};\n\n // Use direct extract instead of `regenerate` to reduse browserified size\n re.src_Any = require('uc.micro/properties/Any/regex').source;\n re.src_Cc = require('uc.micro/categories/Cc/regex').source;\n re.src_Z = require('uc.micro/categories/Z/regex').source;\n re.src_P = require('uc.micro/categories/P/regex').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 var 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 ////////////////////////////////////////////////////////////////////////////////\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 re.src_auth = '(?:(?:(?!' + re.src_ZCc + '|[@/\\\\[\\\\]()]).)+@)?';\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 + ')(?!-|_|:\\\\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 \"\\\\'(?=\" + re.src_pseudo_letter + '|[-]).|' + // allow `I'm_king` if no pair found\n '\\\\.{2,}[a-zA-Z0-9%/&]|' + // 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 '\\\\.(?!' + re.src_ZCc + '|[.]).|' +\n (opts && opts['---'] ?\n '\\\\-(?!--(?:[^-]|$))(?:-*)|' // `---` => long dash, terminate\n :\n '\\\\-+|'\n ) +\n ',(?!' + re.src_ZCc + ').|' + // allow `,,,` in paths\n ';(?!' + re.src_ZCc + ').|' + // allow `;` if not followed by space-like char\n '\\\\!+(?!' + re.src_ZCc + '|[!]).|' + // allow `!!!` in paths, but not at the end\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 re.src_email_name =\n\n '[\\\\-;:&=\\\\+\\\\$,\\\\.a-zA-Z0-9_][\\\\-;:&=\\\\+\\\\$,\\\\\"\\\\.a-zA-Z0-9_]*';\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 ////////////////////////////////////////////////////////////////////////////////\n // Main rules\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", "'use strict';\n\n\n////////////////////////////////////////////////////////////////////////////////\n// Helpers\n\n// Merge objects\n//\nfunction assign(obj /*from1, from2, from3, ...*/) {\n var sources = Array.prototype.slice.call(arguments, 1);\n\n sources.forEach(function (source) {\n if (!source) { return; }\n\n 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\n\nfunction escapeRE(str) { return str.replace(/[.?*+^$[\\]\\\\(){}|-]/g, '\\\\$&'); }\n\n////////////////////////////////////////////////////////////////////////////////\n\n\nvar defaultOptions = {\n fuzzyLink: true,\n fuzzyEmail: true,\n fuzzyIP: false\n};\n\n\nfunction isOptionsObj(obj) {\n return Object.keys(obj || {}).reduce(function (acc, k) {\n return acc || defaultOptions.hasOwnProperty(k);\n }, false);\n}\n\n\nvar defaultSchemas = {\n 'http:': {\n validate: function (text, pos, self) {\n var 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 var 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 var 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/*eslint-disable max-len*/\n\n// RE pattern for 2-character tlds (autogenerated by ./support/tlds_2char_gen.js)\nvar 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\nvar tlds_default = 'biz|com|edu|gov|net|org|pro|web|xxx|aero|asia|coop|info|museum|name|shop|\u0440\u0444'.split('|');\n\n/*eslint-enable max-len*/\n\n////////////////////////////////////////////////////////////////////////////////\n\nfunction resetScanCache(self) {\n self.__index__ = -1;\n self.__text_cache__ = '';\n}\n\nfunction createValidator(re) {\n return function (text, pos) {\n var 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\n // Load & clone RE patterns.\n var re = self.re = require('./lib/re')(self.__opts__);\n\n // Define dynamic patterns\n var 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.link_fuzzy = RegExp(untpl(re.tpl_link_fuzzy), 'i');\n re.link_no_ip_fuzzy = RegExp(untpl(re.tpl_link_no_ip_fuzzy), 'i');\n re.host_fuzzy_test = RegExp(untpl(re.tpl_host_fuzzy_test), 'i');\n\n //\n // Compile each schema\n //\n\n var 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 var val = self.__schemas__[name];\n\n // skip disabled methods\n if (val === null) { return; }\n\n var 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 var 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\n self.re.pretest = RegExp(\n '(' + self.re.schema_test.source + ')|(' + self.re.host_fuzzy_test.source + ')|@',\n 'i'\n );\n\n //\n // Cleanup\n //\n\n resetScanCache(self);\n}\n\n/**\n * class Match\n *\n * Match result. Single element of array, returned by [[LinkifyIt#match]]\n **/\nfunction Match(self, shift) {\n var start = self.__index__,\n end = self.__last_index__,\n text = self.__text_cache__.slice(start, end);\n\n /**\n * Match#schema -> String\n *\n * Prefix (protocol) for matched string.\n **/\n this.schema = self.__schema__.toLowerCase();\n /**\n * Match#index -> Number\n *\n * First position of matched string.\n **/\n this.index = start + shift;\n /**\n * Match#lastIndex -> Number\n *\n * Next position after matched string.\n **/\n this.lastIndex = end + shift;\n /**\n * Match#raw -> String\n *\n * Matched string.\n **/\n this.raw = text;\n /**\n * Match#text -> String\n *\n * Notmalized text of matched string.\n **/\n this.text = text;\n /**\n * Match#url -> String\n *\n * Normalized url of matched string.\n **/\n this.url = text;\n}\n\nfunction createMatch(self, shift) {\n var match = new Match(self, shift);\n\n self.__compiled__[match.schema].normalize(match, self);\n\n return match;\n}\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 // Cache last tested result. Used to skip repeating steps on next `match` call.\n this.__index__ = -1;\n this.__last_index__ = -1; // Next scan position\n this.__schema__ = '';\n this.__text_cache__ = '';\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\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\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/**\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 // Reset scan cache\n this.__text_cache__ = text;\n this.__index__ = -1;\n\n if (!text.length) { return false; }\n\n var m, ml, me, len, shift, next, re, tld_pos, at_pos;\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 len = this.testSchemaAt(text, m[2], re.lastIndex);\n if (len) {\n this.__schema__ = m[2];\n this.__index__ = m.index + m[1].length;\n this.__last_index__ = m.index + m[0].length + len;\n break;\n }\n }\n }\n\n if (this.__opts__.fuzzyLink && this.__compiled__['http:']) {\n // guess schemaless links\n tld_pos = text.search(this.re.host_fuzzy_test);\n if (tld_pos >= 0) {\n // if tld is located after found link - no need to check fuzzy pattern\n if (this.__index__ < 0 || tld_pos < this.__index__) {\n if ((ml = text.match(this.__opts__.fuzzyIP ? this.re.link_fuzzy : this.re.link_no_ip_fuzzy)) !== null) {\n\n shift = ml.index + ml[1].length;\n\n if (this.__index__ < 0 || shift < this.__index__) {\n this.__schema__ = '';\n this.__index__ = shift;\n this.__last_index__ = ml.index + ml[0].length;\n }\n }\n }\n }\n }\n\n if (this.__opts__.fuzzyEmail && this.__compiled__['mailto:']) {\n // guess schemaless emails\n at_pos = text.indexOf('@');\n if (at_pos >= 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 ((me = text.match(this.re.email_fuzzy)) !== null) {\n\n shift = me.index + me[1].length;\n next = me.index + me[0].length;\n\n if (this.__index__ < 0 || shift < this.__index__ ||\n (shift === this.__index__ && next > this.__last_index__)) {\n this.__schema__ = 'mailto:';\n this.__index__ = shift;\n this.__last_index__ = next;\n }\n }\n }\n }\n\n return this.__index__ >= 0;\n};\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/**\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/**\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 var shift = 0, result = [];\n\n // Try to take previous element from cache, if .test() called before\n if (this.__index__ >= 0 && this.__text_cache__ === text) {\n result.push(createMatch(this, shift));\n shift = this.__last_index__;\n }\n\n // Cut head if cache was used\n var tail = shift ? text.slice(shift) : text;\n\n // Scan string until end reached\n while (this.test(tail)) {\n result.push(createMatch(this, shift));\n\n tail = tail.slice(this.__last_index__);\n shift += this.__last_index__;\n }\n\n if (result.length) {\n return result;\n }\n\n return null;\n};\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|\u0440\u0444\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\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/**\n * LinkifyIt#onCompile()\n *\n * Override to modify basic RegExp-s.\n **/\nLinkifyIt.prototype.onCompile = function onCompile() {\n};\n\n\nmodule.exports = LinkifyIt;\n", "'use strict';\n\n/** Highest positive signed 32-bit float value */\nconst maxInt = 2147483647; // aka. 0x7FFFFFFF or 2^31-1\n\n/** Bootstring parameters */\nconst base = 36;\nconst tMin = 1;\nconst tMax = 26;\nconst skew = 38;\nconst damp = 700;\nconst initialBias = 72;\nconst initialN = 128; // 0x80\nconst delimiter = '-'; // '\\x2D'\n\n/** Regular expressions */\nconst regexPunycode = /^xn--/;\nconst regexNonASCII = /[^\\0-\\x7E]/; // non-ASCII chars\nconst regexSeparators = /[\\x2E\\u3002\\uFF0E\\uFF61]/g; // RFC 3490 separators\n\n/** Error messages */\nconst errors = {\n\t'overflow': 'Overflow: input needs wider integers to process',\n\t'not-basic': 'Illegal input >= 0x80 (not a basic code point)',\n\t'invalid-input': 'Invalid input'\n};\n\n/** Convenience shortcuts */\nconst baseMinusTMin = base - tMin;\nconst floor = Math.floor;\nconst stringFromCharCode = String.fromCharCode;\n\n/*--------------------------------------------------------------------------*/\n\n/**\n * A generic error utility function.\n * @private\n * @param {String} type The error type.\n * @returns {Error} Throws a `RangeError` with the applicable error message.\n */\nfunction error(type) {\n\tthrow new RangeError(errors[type]);\n}\n\n/**\n * A generic `Array#map` utility function.\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} callback The function that gets called for every array\n * item.\n * @returns {Array} A new array of values returned by the callback function.\n */\nfunction map(array, fn) {\n\tconst result = [];\n\tlet length = array.length;\n\twhile (length--) {\n\t\tresult[length] = fn(array[length]);\n\t}\n\treturn result;\n}\n\n/**\n * A simple `Array#map`-like wrapper to work with domain name strings or email\n * addresses.\n * @private\n * @param {String} domain The domain name or email address.\n * @param {Function} callback The function that gets called for every\n * character.\n * @returns {Array} A new string of characters returned by the callback\n * function.\n */\nfunction mapDomain(string, fn) {\n\tconst parts = string.split('@');\n\tlet result = '';\n\tif (parts.length > 1) {\n\t\t// In email addresses, only the domain name should be punycoded. Leave\n\t\t// the local part (i.e. everything up to `@`) intact.\n\t\tresult = parts[0] + '@';\n\t\tstring = parts[1];\n\t}\n\t// Avoid `split(regex)` for IE8 compatibility. See #17.\n\tstring = string.replace(regexSeparators, '\\x2E');\n\tconst labels = string.split('.');\n\tconst encoded = map(labels, fn).join('.');\n\treturn result + encoded;\n}\n\n/**\n * Creates an array containing the numeric code points of each Unicode\n * character in the string. While JavaScript uses UCS-2 internally,\n * this function will convert a pair of surrogate halves (each of which\n * UCS-2 exposes as separate characters) into a single code point,\n * matching UTF-16.\n * @see `punycode.ucs2.encode`\n * @see <https://mathiasbynens.be/notes/javascript-encoding>\n * @memberOf punycode.ucs2\n * @name decode\n * @param {String} string The Unicode input string (UCS-2).\n * @returns {Array} The new array of code points.\n */\nfunction ucs2decode(string) {\n\tconst output = [];\n\tlet counter = 0;\n\tconst length = string.length;\n\twhile (counter < length) {\n\t\tconst value = string.charCodeAt(counter++);\n\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t// It's a high surrogate, and there is a next character.\n\t\t\tconst extra = string.charCodeAt(counter++);\n\t\t\tif ((extra & 0xFC00) == 0xDC00) { // Low surrogate.\n\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t} else {\n\t\t\t\t// It's an unmatched surrogate; only append this code unit, in case the\n\t\t\t\t// next code unit is the high surrogate of a surrogate pair.\n\t\t\t\toutput.push(value);\n\t\t\t\tcounter--;\n\t\t\t}\n\t\t} else {\n\t\t\toutput.push(value);\n\t\t}\n\t}\n\treturn output;\n}\n\n/**\n * Creates a string based on an array of numeric code points.\n * @see `punycode.ucs2.decode`\n * @memberOf punycode.ucs2\n * @name encode\n * @param {Array} codePoints The array of numeric code points.\n * @returns {String} The new Unicode string (UCS-2).\n */\nconst ucs2encode = array => String.fromCodePoint(...array);\n\n/**\n * Converts a basic code point into a digit/integer.\n * @see `digitToBasic()`\n * @private\n * @param {Number} codePoint The basic numeric code point value.\n * @returns {Number} The numeric value of a basic code point (for use in\n * representing integers) in the range `0` to `base - 1`, or `base` if\n * the code point does not represent a value.\n */\nconst basicToDigit = function(codePoint) {\n\tif (codePoint - 0x30 < 0x0A) {\n\t\treturn codePoint - 0x16;\n\t}\n\tif (codePoint - 0x41 < 0x1A) {\n\t\treturn codePoint - 0x41;\n\t}\n\tif (codePoint - 0x61 < 0x1A) {\n\t\treturn codePoint - 0x61;\n\t}\n\treturn base;\n};\n\n/**\n * Converts a digit/integer into a basic code point.\n * @see `basicToDigit()`\n * @private\n * @param {Number} digit The numeric value of a basic code point.\n * @returns {Number} The basic code point whose value (when used for\n * representing integers) is `digit`, which needs to be in the range\n * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is\n * used; else, the lowercase form is used. The behavior is undefined\n * if `flag` is non-zero and `digit` has no uppercase form.\n */\nconst digitToBasic = function(digit, flag) {\n\t// 0..25 map to ASCII a..z or A..Z\n\t// 26..35 map to ASCII 0..9\n\treturn digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);\n};\n\n/**\n * Bias adaptation function as per section 3.4 of RFC 3492.\n * https://tools.ietf.org/html/rfc3492#section-3.4\n * @private\n */\nconst adapt = function(delta, numPoints, firstTime) {\n\tlet k = 0;\n\tdelta = firstTime ? floor(delta / damp) : delta >> 1;\n\tdelta += floor(delta / numPoints);\n\tfor (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {\n\t\tdelta = floor(delta / baseMinusTMin);\n\t}\n\treturn floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n};\n\n/**\n * Converts a Punycode string of ASCII-only symbols to a string of Unicode\n * symbols.\n * @memberOf punycode\n * @param {String} input The Punycode string of ASCII-only symbols.\n * @returns {String} The resulting string of Unicode symbols.\n */\nconst decode = function(input) {\n\t// Don't use UCS-2.\n\tconst output = [];\n\tconst inputLength = input.length;\n\tlet i = 0;\n\tlet n = initialN;\n\tlet bias = initialBias;\n\n\t// Handle the basic code points: let `basic` be the number of input code\n\t// points before the last delimiter, or `0` if there is none, then copy\n\t// the first basic code points to the output.\n\n\tlet basic = input.lastIndexOf(delimiter);\n\tif (basic < 0) {\n\t\tbasic = 0;\n\t}\n\n\tfor (let j = 0; j < basic; ++j) {\n\t\t// if it's not a basic code point\n\t\tif (input.charCodeAt(j) >= 0x80) {\n\t\t\terror('not-basic');\n\t\t}\n\t\toutput.push(input.charCodeAt(j));\n\t}\n\n\t// Main decoding loop: start just after the last delimiter if any basic code\n\t// points were copied; start at the beginning otherwise.\n\n\tfor (let index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {\n\n\t\t// `index` is the index of the next character to be consumed.\n\t\t// Decode a generalized variable-length integer into `delta`,\n\t\t// which gets added to `i`. The overflow checking is easier\n\t\t// if we increase `i` as we go, then subtract off its starting\n\t\t// value at the end to obtain `delta`.\n\t\tlet oldi = i;\n\t\tfor (let w = 1, k = base; /* no condition */; k += base) {\n\n\t\t\tif (index >= inputLength) {\n\t\t\t\terror('invalid-input');\n\t\t\t}\n\n\t\t\tconst digit = basicToDigit(input.charCodeAt(index++));\n\n\t\t\tif (digit >= base || digit > floor((maxInt - i) / w)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\ti += digit * w;\n\t\t\tconst t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\n\t\t\tif (digit < t) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tconst baseMinusT = base - t;\n\t\t\tif (w > floor(maxInt / baseMinusT)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tw *= baseMinusT;\n\n\t\t}\n\n\t\tconst out = output.length + 1;\n\t\tbias = adapt(i - oldi, out, oldi == 0);\n\n\t\t// `i` was supposed to wrap around from `out` to `0`,\n\t\t// incrementing `n` each time, so we'll fix that now:\n\t\tif (floor(i / out) > maxInt - n) {\n\t\t\terror('overflow');\n\t\t}\n\n\t\tn += floor(i / out);\n\t\ti %= out;\n\n\t\t// Insert `n` at position `i` of the output.\n\t\toutput.splice(i++, 0, n);\n\n\t}\n\n\treturn String.fromCodePoint(...output);\n};\n\n/**\n * Converts a string of Unicode symbols (e.g. a domain name label) to a\n * Punycode string of ASCII-only symbols.\n * @memberOf punycode\n * @param {String} input The string of Unicode symbols.\n * @returns {String} The resulting Punycode string of ASCII-only symbols.\n */\nconst encode = function(input) {\n\tconst output = [];\n\n\t// Convert the input in UCS-2 to an array of Unicode code points.\n\tinput = ucs2decode(input);\n\n\t// Cache the length.\n\tlet inputLength = input.length;\n\n\t// Initialize the state.\n\tlet n = initialN;\n\tlet delta = 0;\n\tlet bias = initialBias;\n\n\t// Handle the basic code points.\n\tfor (const currentValue of input) {\n\t\tif (currentValue < 0x80) {\n\t\t\toutput.push(stringFromCharCode(currentValue));\n\t\t}\n\t}\n\n\tlet basicLength = output.length;\n\tlet handledCPCount = basicLength;\n\n\t// `handledCPCount` is the number of code points that have been handled;\n\t// `basicLength` is the number of basic code points.\n\n\t// Finish the basic string with a delimiter unless it's empty.\n\tif (basicLength) {\n\t\toutput.push(delimiter);\n\t}\n\n\t// Main encoding loop:\n\twhile (handledCPCount < inputLength) {\n\n\t\t// All non-basic code points < n have been handled already. Find the next\n\t\t// larger one:\n\t\tlet m = maxInt;\n\t\tfor (const currentValue of input) {\n\t\t\tif (currentValue >= n && currentValue < m) {\n\t\t\t\tm = currentValue;\n\t\t\t}\n\t\t}\n\n\t\t// Increase `delta` enough to advance the decoder's <n,i> state to <m,0>,\n\t\t// but guard against overflow.\n\t\tconst handledCPCountPlusOne = handledCPCount + 1;\n\t\tif (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n\t\t\terror('overflow');\n\t\t}\n\n\t\tdelta += (m - n) * handledCPCountPlusOne;\n\t\tn = m;\n\n\t\tfor (const currentValue of input) {\n\t\t\tif (currentValue < n && ++delta > maxInt) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\t\t\tif (currentValue == n) {\n\t\t\t\t// Represent delta as a generalized variable-length integer.\n\t\t\t\tlet q = delta;\n\t\t\t\tfor (let k = base; /* no condition */; k += base) {\n\t\t\t\t\tconst t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\t\t\t\t\tif (q < t) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tconst qMinusT = q - t;\n\t\t\t\t\tconst baseMinusT = base - t;\n\t\t\t\t\toutput.push(\n\t\t\t\t\t\tstringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))\n\t\t\t\t\t);\n\t\t\t\t\tq = floor(qMinusT / baseMinusT);\n\t\t\t\t}\n\n\t\t\t\toutput.push(stringFromCharCode(digitToBasic(q, 0)));\n\t\t\t\tbias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);\n\t\t\t\tdelta = 0;\n\t\t\t\t++handledCPCount;\n\t\t\t}\n\t\t}\n\n\t\t++delta;\n\t\t++n;\n\n\t}\n\treturn output.join('');\n};\n\n/**\n * Converts a Punycode string representing a domain name or an email address\n * to Unicode. Only the Punycoded parts of the input will be converted, i.e.\n * it doesn't matter if you call it on a string that has already been\n * converted to Unicode.\n * @memberOf punycode\n * @param {String} input The Punycoded domain name or email address to\n * convert to Unicode.\n * @returns {String} The Unicode representation of the given Punycode\n * string.\n */\nconst toUnicode = function(input) {\n\treturn mapDomain(input, function(string) {\n\t\treturn regexPunycode.test(string)\n\t\t\t? decode(string.slice(4).toLowerCase())\n\t\t\t: string;\n\t});\n};\n\n/**\n * Converts a Unicode string representing a domain name or an email address to\n * Punycode. Only the non-ASCII parts of the domain name will be converted,\n * i.e. it doesn't matter if you call it with a domain that's already in\n * ASCII.\n * @memberOf punycode\n * @param {String} input The domain name or email address to convert, as a\n * Unicode string.\n * @returns {String} The Punycode representation of the given domain name or\n * email address.\n */\nconst toASCII = function(input) {\n\treturn mapDomain(input, function(string) {\n\t\treturn regexNonASCII.test(string)\n\t\t\t? 'xn--' + encode(string)\n\t\t\t: string;\n\t});\n};\n\n/*--------------------------------------------------------------------------*/\n\n/** Define the public API */\nconst punycode = {\n\t/**\n\t * A string representing the current Punycode.js version number.\n\t * @memberOf punycode\n\t * @type String\n\t */\n\t'version': '2.1.0',\n\t/**\n\t * An object of methods to convert from JavaScript's internal character\n\t * representation (UCS-2) to Unicode code points, and back.\n\t * @see <https://mathiasbynens.be/notes/javascript-encoding>\n\t * @memberOf punycode\n\t * @type Object\n\t */\n\t'ucs2': {\n\t\t'decode': ucs2decode,\n\t\t'encode': ucs2encode\n\t},\n\t'decode': decode,\n\t'encode': encode,\n\t'toASCII': toASCII,\n\t'toUnicode': toUnicode\n};\n\nmodule.exports = punycode;\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 (<br />)\n breaks: false, // Convert '\\n' in paragraphs into <br>\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 '\u00AB\u00BB\u201E\u201C' for Russian, '\u201E\u201C\u201A\u2018' for German,\n // and ['\u00AB\\xA0', '\\xA0\u00BB', '\u2039\\xA0', '\\xA0\u203A'] for French (including nbsp).\n quotes: '\\u201c\\u201d\\u2018\\u2019', /* \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 <pre... internal wrapper is skipped.\n //\n // function (/*str, lang*/) { return ''; }\n //\n highlight: null,\n\n maxNesting: 100 // Internal protection, recursion limit\n },\n\n components: {\n\n core: {},\n block: {},\n inline: {}\n }\n};\n", "// \"Zero\" preset, with nothing enabled. Useful for manual configuring of simple\n// modes. For example, to parse bold/italic only.\n\n'use strict';\n\n\nmodule.exports = {\n options: {\n html: false, // Enable HTML tags in source\n xhtmlOut: false, // Use '/' to close single tags (<br />)\n breaks: false, // Convert '\\n' in paragraphs into <br>\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 '\u00AB\u00BB\u201E\u201C' for Russian, '\u201E\u201C\u201A\u2018' for German,\n // and ['\u00AB\\xA0', '\\xA0\u00BB', '\u2039\\xA0', '\\xA0\u203A'] for French (including nbsp).\n quotes: '\\u201c\\u201d\\u2018\\u2019', /* \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 <pre... internal wrapper is skipped.\n //\n // function (/*str, lang*/) { return ''; }\n //\n highlight: null,\n\n maxNesting: 20 // Internal protection, recursion limit\n },\n\n components: {\n\n core: {\n rules: [\n 'normalize',\n 'block',\n 'inline'\n ]\n },\n\n block: {\n rules: [\n 'paragraph'\n ]\n },\n\n inline: {\n rules: [\n 'text'\n ],\n rules2: [\n 'balance_pairs',\n 'text_collapse'\n ]\n }\n }\n};\n", "// Commonmark default options\n\n'use strict';\n\n\nmodule.exports = {\n options: {\n html: true, // Enable HTML tags in source\n xhtmlOut: true, // Use '/' to close single tags (<br />)\n breaks: false, // Convert '\\n' in paragraphs into <br>\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 '\u00AB\u00BB\u201E\u201C' for Russian, '\u201E\u201C\u201A\u2018' for German,\n // and ['\u00AB\\xA0', '\\xA0\u00BB', '\u2039\\xA0', '\\xA0\u203A'] for French (including nbsp).\n quotes: '\\u201c\\u201d\\u2018\\u2019', /* \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 <pre... internal wrapper is skipped.\n //\n // function (/*str, lang*/) { return ''; }\n //\n highlight: null,\n\n maxNesting: 20 // Internal protection, recursion limit\n },\n\n components: {\n\n core: {\n rules: [\n 'normalize',\n 'block',\n 'inline'\n ]\n },\n\n block: {\n rules: [\n 'blockquote',\n 'code',\n 'fence',\n 'heading',\n 'hr',\n 'html_block',\n 'lheading',\n 'list',\n 'reference',\n 'paragraph'\n ]\n },\n\n inline: {\n rules: [\n 'autolink',\n 'backticks',\n 'emphasis',\n 'entity',\n 'escape',\n 'html_inline',\n 'image',\n 'link',\n 'newline',\n 'text'\n ],\n rules2: [\n 'balance_pairs',\n 'emphasis',\n 'text_collapse'\n ]\n }\n }\n};\n", "// Main parser class\n\n'use strict';\n\n\nvar utils = require('./common/utils');\nvar helpers = require('./helpers');\nvar Renderer = require('./renderer');\nvar ParserCore = require('./parser_core');\nvar ParserBlock = require('./parser_block');\nvar ParserInline = require('./parser_inline');\nvar LinkifyIt = require('linkify-it');\nvar mdurl = require('mdurl');\nvar punycode = require('punycode');\n\n\nvar config = {\n default: require('./presets/default'),\n zero: require('./presets/zero'),\n commonmark: require('./presets/commonmark')\n};\n\n////////////////////////////////////////////////////////////////////////////////\n//\n// This validator can prohibit more than really needed to prevent XSS. It's a\n// tradeoff to keep code simple and to be secure by default.\n//\n// If you need different setup - override validator method as you wish. Or\n// replace it with dummy function and use external sanitizer.\n//\n\nvar BAD_PROTO_RE = /^(vbscript|javascript|file|data):/;\nvar GOOD_DATA_RE = /^data:image\\/(gif|png|jpeg|webp);/;\n\nfunction validateLink(url) {\n // url should be normalized at this point, and existing entities are decoded\n var str = url.trim().toLowerCase();\n\n return BAD_PROTO_RE.test(str) ? (GOOD_DATA_RE.test(str) ? true : false) : true;\n}\n\n////////////////////////////////////////////////////////////////////////////////\n\n\nvar RECODE_HOSTNAME_FOR = [ 'http:', 'https:', 'mailto:' ];\n\nfunction normalizeLink(url) {\n var parsed = mdurl.parse(url, true);\n\n if (parsed.hostname) {\n // Encode hostnames in urls like:\n // `http://host/`, `https://host/`, `mailto:user@host`, `//host/`\n //\n // We don't encode unknown schemas, because it's likely that we encode\n // something we shouldn't (e.g. `skype:name` treated as `skype:host`)\n //\n if (!parsed.protocol || RECODE_HOSTNAME_FOR.indexOf(parsed.protocol) >= 0) {\n try {\n parsed.hostname = punycode.toASCII(parsed.hostname);\n } catch (er) { /**/ }\n }\n }\n\n return mdurl.encode(mdurl.format(parsed));\n}\n\nfunction normalizeLinkText(url) {\n var parsed = mdurl.parse(url, true);\n\n if (parsed.hostname) {\n // Encode hostnames in urls like:\n // `http://host/`, `https://host/`, `mailto:user@host`, `//host/`\n //\n // We don't encode unknown schemas, because it's likely that we encode\n // something we shouldn't (e.g. `skype:name` treated as `skype:host`)\n //\n if (!parsed.protocol || RECODE_HOSTNAME_FOR.indexOf(parsed.protocol) >= 0) {\n try {\n parsed.hostname = punycode.toUnicode(parsed.hostname);\n } catch (er) { /**/ }\n }\n }\n\n // 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 * (`<br />`). 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 `<br>`.\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__ - `\u201C\u201D\u2018\u2019`, String or Array. Double + single quotes replacement\n * pairs, when typographer enabled and smartquotes on. For example, you can\n * use `'\u00AB\u00BB\u201E\u201C'` for Russian, `'\u201E\u201C\u201A\u2018'` for German, and\n * `['\u00AB\\xA0', '\\xA0\u00BB', '\u2039\\xA0', '\\xA0\u203A']` 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 <pre... internal wrapper is skipped.\n *\n * ##### Example\n *\n * ```javascript\n * // commonmark mode\n * var md = require('markdown-it')('commonmark');\n *\n * // default mode\n * var md = require('markdown-it')();\n *\n * // enable everything\n * var md = require('markdown-it')({\n * html: true,\n * linkify: true,\n * typographer: true\n * });\n * ```\n *\n * ##### Syntax highlighting\n *\n * ```js\n * var hljs = require('highlight.js') // https://highlightjs.org/\n *\n * var md = require('markdown-it')({\n * highlight: function (str, lang) {\n * if (lang && hljs.getLanguage(lang)) {\n * try {\n * return hljs.highlight(str, { language: lang, ignoreIllegals: true }).value;\n * } catch (__) {}\n * }\n *\n * return ''; // use external default escaping\n * }\n * });\n * ```\n *\n * Or with full wrapper override (if you need assign class to `<pre>`):\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 '<pre class=\"hljs\"><code>' +\n * hljs.highlight(str, { language: lang, ignoreIllegals: true }).value +\n * '</code></pre>';\n * } catch (__) {}\n * }\n *\n * return '<pre class=\"hljs\"><code>' + md.utils.escapeHtml(str) + '</code></pre>';\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 `<p>` tags.\n **/\nMarkdownIt.prototype.renderInline = function (src, env) {\n env = env || {};\n\n return this.renderer.render(this.parseInline(src, env), this.options, env);\n};\n\n\nmodule.exports = MarkdownIt;\n", "'use strict';\n\n\nmodule.exports = require('./lib/');\n", "import type {\n AstType,\n Config,\n Function as AstFunction,\n Scalar,\n Variable as AstVariable,\n} from '../types';\n\nexport function isAst(value?: any): value is AstType {\n return !!value?.$$mdtype;\n}\n\nexport function isFunction(value?: any): value is AstFunction {\n return !!(value?.$$mdtype === 'Function');\n}\n\nexport function isVariable(value?: any): value is AstVariable {\n return !!(value?.$$mdtype === 'Variable');\n}\n\nexport function* getAstValues(value: any): Generator<AstType, void, unknown> {\n if (value == null || typeof value !== 'object') return;\n\n if (Array.isArray(value)) for (const v of value) yield* getAstValues(v);\n\n if (isAst(value)) yield value;\n\n if (Object.getPrototypeOf(value) !== Object.prototype) return;\n\n for (const v of Object.values(value)) yield* getAstValues(v);\n}\n\nexport function resolve(value: any, config: Config = {}): any {\n if (value == null || typeof value !== 'object') return value;\n\n if (Array.isArray(value)) return value.map((item) => resolve(item, config));\n\n if (isAst(value) && value?.resolve instanceof Function)\n return value.resolve(config);\n\n if (Object.getPrototypeOf(value) !== Object.prototype) return value;\n\n const output: Record<string, Scalar> = {};\n for (const [k, v] of Object.entries(value)) output[k] = resolve(v, config);\n return output;\n}\n", "import type { RenderableTreeNode } from './types';\n\nexport default class Tag<\n N extends string = string,\n A extends Record<string, any> = Record<string, any>\n> {\n readonly $$mdtype = 'Tag' as const;\n\n static isTag = (tag: any): tag is Tag => {\n return !!(tag?.$$mdtype === 'Tag');\n };\n\n name: N;\n attributes: A;\n children: RenderableTreeNode[];\n\n constructor(\n name = 'div' as N,\n attributes = {} as A,\n children: RenderableTreeNode[] = []\n ) {\n this.name = name;\n this.attributes = attributes;\n this.children = children;\n }\n}\n", "import {\n Config,\n CustomAttributeTypeInterface,\n ValidationError,\n} from '../types';\n\nexport class Class implements CustomAttributeTypeInterface {\n validate(value: any, _config: Config, key: string): ValidationError[] {\n if (typeof value === 'string' || typeof value === 'object') return [];\n\n return [\n {\n id: 'attribute-type-invalid',\n level: 'error',\n message: `Attribute '${key}' must be type 'string | object'`,\n },\n ];\n }\n\n transform(value: any) {\n if (!value || typeof value === 'string') return value;\n\n const classes = [];\n for (const [k, v] of Object.entries(value ?? {})) if (v) classes.push(k);\n return classes.join(' ');\n }\n}\n", "import type { CustomAttributeTypeInterface, ValidationError } from '../types';\n\nexport class Id implements CustomAttributeTypeInterface {\n validate(value: any): ValidationError[] {\n if (typeof value === 'string' && value.match(/^[a-zA-Z]/)) return [];\n\n return [\n {\n id: 'attribute-value-invalid',\n level: 'error',\n message: \"The 'id' attribute must start with a letter\",\n },\n ];\n }\n}\n", "import { parse, SyntaxError } from './grammar/tag';\nimport Variable from './ast/variable';\nimport Function from './ast/function';\n\nimport type Token from 'markdown-it/lib/token';\n\nenum STATES {\n normal,\n string,\n escape,\n}\n\nexport const OPEN = '{%';\nexport const CLOSE = '%}';\n\nexport const IDENTIFIER_REGEX = /^[a-zA-Z0-9_-]+$/;\n\nexport function isIdentifier(s: any): s is string {\n return typeof s === 'string' && IDENTIFIER_REGEX.test(s);\n}\n\nexport function isPromise(a: any): a is Promise<any> {\n return a && typeof a === 'object' && typeof a.then === 'function';\n}\n\nexport function findTagEnd(content: string, start = 0) {\n let state = STATES.normal;\n for (let pos = start; pos < content.length; pos++) {\n const char = content[pos];\n\n switch (state) {\n case STATES.string:\n switch (char) {\n case '\"':\n state = STATES.normal;\n break;\n case '\\\\':\n state = STATES.escape;\n break;\n }\n break;\n case STATES.escape:\n state = STATES.string;\n break;\n case STATES.normal:\n if (char === '\"') state = STATES.string;\n else if (content.startsWith(CLOSE, pos)) return pos;\n }\n }\n\n return null;\n}\n\nfunction parseTag(content: string, line: number, contentStart: number) {\n try {\n return parse(content, { Variable, Function });\n } catch (error) {\n if (!(error instanceof SyntaxError)) throw error;\n const {\n message,\n location: { start, end },\n } = error as SyntaxError;\n const location = {\n start: { line, character: start.offset + contentStart },\n end: { line: line + 1, character: end.offset + contentStart },\n };\n\n return { type: 'error', meta: { error: { message, location } } };\n }\n}\n\nexport function parseTags(content: string, firstLine = 0): Token[] {\n let line = firstLine + 1;\n const output = [];\n let start = 0;\n\n for (let pos = 0; pos < content.length; pos++) {\n if (content[pos] === '\\n') {\n line++;\n continue;\n }\n\n if (!content.startsWith(OPEN, pos)) continue;\n\n const end = findTagEnd(content, pos);\n\n if (end == null) {\n // If we cannot find the closing tag, we skip over it\n pos = pos + OPEN.length;\n continue;\n }\n\n const text = content.slice(pos, end + CLOSE.length);\n const inner = content.slice(pos + OPEN.length, end);\n const lineStart = content.lastIndexOf('\\n', pos);\n const lineEnd = content.indexOf('\\n', end);\n const lineContent = content.slice(lineStart, lineEnd);\n const tag = parseTag(inner.trim(), line, pos - lineStart);\n\n // Throw away excess whitespace introduced by block-level tags\n const precedingTextEnd = lineContent.trim() === text ? lineStart : pos;\n const precedingText = content.slice(start, precedingTextEnd);\n\n output.push({\n type: 'text',\n start,\n end: pos - 1,\n content: precedingText,\n });\n\n output.push({\n map: [line, line + 1],\n position: {\n start: pos - lineStart,\n end: pos - lineStart + text.length,\n },\n start: pos,\n end: pos + text.length - 1,\n info: text,\n ...tag,\n });\n\n start = end + CLOSE.length;\n pos = start - 1;\n }\n\n output.push({\n type: 'text',\n start,\n end: content.length - 1,\n content: content.slice(start),\n });\n\n return output;\n}\n", "import type { Config, AstType } from '../types';\n\nexport default class Variable implements AstType {\n readonly $$mdtype = 'Variable';\n\n path;\n\n constructor(path: (string | number)[] = []) {\n this.path = path;\n }\n\n resolve({ variables }: Config = {}) {\n return variables instanceof Function\n ? variables(this.path)\n : this.path.reduce((obj = {}, key) => obj[key], variables);\n }\n}\n", "import { resolve } from './base';\nimport type { Config, AstType } from '../types';\n\nexport default class Function implements AstType {\n readonly $$mdtype = 'Function';\n\n name;\n parameters;\n\n constructor(name: string, parameters: Record<string, any>) {\n this.name = name;\n this.parameters = parameters;\n }\n\n resolve(config: Config = {}) {\n const fn = config?.functions?.[this.name];\n if (!fn) return null;\n\n const parameters = resolve(this.parameters, config);\n return fn.transform?.(parameters, config);\n }\n}\n", "import Tag from './tag';\nimport { Class } from './schema-types/class';\nimport { Id } from './schema-types/id';\nimport { isPromise } from './utils';\nimport type {\n Config,\n MaybePromise,\n Node,\n NodeType,\n RenderableTreeNodes,\n Schema,\n Transformer,\n} from './types';\n\ntype AttributesSchema = Schema['attributes'];\n\nexport const globalAttributes: AttributesSchema = {\n class: { type: Class, render: true },\n id: { type: Id, render: true },\n};\n\nexport default {\n findSchema(node: Node, { nodes = {}, tags = {} }: Config = {}) {\n return node.tag ? tags[node.tag] : nodes[node.type as NodeType];\n },\n\n attributes(node: Node, config: Config = {}) {\n const schema = this.findSchema(node, config) ?? {};\n const output: Record<string, any> = {};\n\n const attrs = { ...globalAttributes, ...schema.attributes };\n for (const [key, attr] of Object.entries(attrs)) {\n if (attr.render == false) continue;\n\n const name = typeof attr.render === 'string' ? attr.render : key;\n\n let value = node.attributes[key];\n if (typeof attr.type === 'function') {\n const instance: any = new attr.type();\n if (instance.transform) {\n value = instance.transform(value, config);\n }\n }\n value = value === undefined ? attr.default : value;\n\n if (value === undefined) continue;\n output[name] = value;\n }\n\n if (schema.slots) {\n for (const [key, slot] of Object.entries(schema.slots)) {\n if (slot.render === false) continue;\n const name = typeof slot.render === 'string' ? slot.render : key;\n if (node.slots[key]) output[name] = this.node(node.slots[key], config);\n }\n }\n\n return output;\n },\n\n children(node: Node, config: Config = {}) {\n const children = node.children.flatMap<MaybePromise<RenderableTreeNodes>>(\n (child) => this.node(child, config)\n );\n if (children.some(isPromise)) {\n return Promise.all(children);\n }\n return children;\n },\n\n node(node: Node, config: Config = {}) {\n const schema = this.findSchema(node, config) ?? {};\n if (schema && schema.transform instanceof Function)\n return schema.transform(node, config);\n\n const children = this.children(node, config);\n if (!schema || !schema.render) return children;\n\n const attributes = this.attributes(node, config);\n\n if (isPromise(attributes) || isPromise(children)) {\n return Promise.all([attributes, children]).then(\n (values) => new Tag(schema.render, ...values)\n );\n }\n\n return new Tag(schema.render, attributes, children);\n },\n} as Transformer;\n", "import { resolve } from './base';\nimport transformer from '../transformer';\nimport type {\n AstType,\n AttributeValue,\n Config,\n Location,\n MaybePromise,\n NodeType,\n RenderableTreeNode,\n RenderableTreeNodes,\n Schema,\n ValidationError,\n} from '../types';\n\nexport default class Node implements AstType {\n readonly $$mdtype = 'Node';\n\n attributes: Record<string, any>;\n slots: Record<string, Node>;\n children: Node[];\n errors: ValidationError[] = [];\n lines: number[] = [];\n type: NodeType;\n tag?: string;\n annotations: AttributeValue[];\n\n inline = false;\n location?: Location;\n\n constructor(\n type: NodeType = 'node',\n attributes: Record<string, any> = {},\n children: Node[] = [],\n tag?: string\n ) {\n this.attributes = attributes;\n this.children = children;\n this.type = type;\n this.tag = tag;\n this.annotations = [];\n this.slots = {};\n }\n\n *walk(): Generator<Node, void, unknown> {\n for (const child of [...Object.values(this.slots), ...this.children]) {\n yield child;\n yield* child.walk();\n }\n }\n\n push(node: Node) {\n this.children.push(node);\n }\n\n resolve(config: Config = {}): Node {\n return Object.assign(new Node(), this, {\n children: this.children.map((child) => child.resolve(config)),\n attributes: resolve(this.attributes, config),\n slots: Object.fromEntries(\n Object.entries(this.slots).map(([name, slot]) => [\n name,\n slot.resolve(config),\n ])\n ),\n });\n }\n\n findSchema(config: Config = {}): Schema | undefined {\n return transformer.findSchema(this, config);\n }\n\n transformAttributes(config: Config = {}) {\n return transformer.attributes(this, config);\n }\n\n transformChildren(config: Config): RenderableTreeNode[] {\n return transformer.children(this, config);\n }\n\n transform(config: Config): MaybePromise<RenderableTreeNodes> {\n return transformer.node(this, config);\n }\n}\n", "import Node from './node';\nimport Function from './function';\nimport Variable from './variable';\nimport * as base from './base';\n\nimport type { AstType } from '../types';\n\nconst AstTypes = {\n Function,\n Node,\n Variable,\n};\n\nfunction reviver(_: string, value: AstType): any {\n if (!value) return value;\n const klass = AstTypes[value.$$mdtype] as any;\n return klass ? Object.assign(new klass(), value) : value;\n}\n\nfunction fromJSON(text: string): Node | Node[] {\n return JSON.parse(text, reviver);\n}\n\nexport default {\n ...AstTypes,\n ...base,\n fromJSON,\n};\n", "import Ast from './ast';\nimport { OPEN, CLOSE, isIdentifier } from './utils';\nimport type { AttributeValue, Function, Node, Value, Variable } from './types';\n\ntype Options = {\n allowIndentation?: boolean;\n maxTagOpeningWidth?: number;\n parent?: Node;\n indent?: number;\n};\n\nconst SPACE = ' ';\nconst SEP = ', '; // Value separator\nconst NL = '\\n'; // Newline\nconst OL = '.'; // Ordered list\nconst UL = '-'; // Unordered list\n\nconst MAX_TAG_OPENING_WIDTH = 80;\n\nconst WRAPPING_TYPES = ['strong', 'em', 's'];\n\nconst max = (a: number, b: number) => Math.max(a, b);\nconst increment = (o: Options, n = 2) => ({\n ...o,\n indent: (o.indent || 0) + n,\n});\n\nfunction* formatChildren(a: Node, options: Options) {\n for (const child of a.children) {\n yield* formatValue(child, options);\n }\n}\n\nfunction* formatInline(g: Generator<string>) {\n yield [...g].join('').trim();\n}\n\nfunction* formatTableRow(items: Array<string>) {\n yield `| ${items.join(' | ')} |`;\n}\n\nfunction formatScalar(v: Value): string | undefined {\n if (v === undefined) {\n return undefined;\n }\n if (Ast.isAst(v)) {\n return format(v);\n }\n if (v === null) {\n return 'null';\n }\n if (Array.isArray(v)) {\n return '[' + v.map(formatScalar).join(SEP) + ']';\n }\n if (typeof v === 'object') {\n return (\n '{' +\n Object.entries(v)\n .map(\n ([key, value]) =>\n `${isIdentifier(key) ? key : `\"${key}\"`}: ${formatScalar(value)}`\n )\n .join(SEP) +\n '}'\n );\n }\n return JSON.stringify(v);\n}\n\nfunction formatAnnotationValue(a: AttributeValue): string | undefined {\n const formattedValue = formatScalar(a.value);\n\n if (formattedValue === undefined) return undefined;\n if (a.name === 'primary') return formattedValue;\n if (a.name === 'id' && typeof a.value === 'string' && isIdentifier(a.value))\n return '#' + a.value;\n if (a.type === 'class' && isIdentifier(a.name)) return '.' + a.name;\n\n return `${a.name}=${formattedValue}`;\n}\n\nfunction* formatAttributes(n: Node) {\n for (const [key, value] of Object.entries(n.attributes)) {\n /**\n * In cases where the class attribute is not a valid identifer, we treat it as a\n * regular attribute without the '.' sigil\n */\n if (key === 'class' && typeof value === 'object' && !Ast.isAst(value))\n for (const name of Object.keys(value)) {\n yield formatAnnotationValue({ type: 'class', name, value });\n }\n else yield formatAnnotationValue({ type: 'attribute', name: key, value });\n }\n}\n\nfunction* formatAnnotations(n: Node) {\n if (n.annotations.length) {\n yield OPEN + SPACE;\n yield n.annotations.map(formatAnnotationValue).join(SPACE);\n yield SPACE + CLOSE;\n }\n}\n\nfunction* formatVariable(v: Variable) {\n yield '$';\n yield v.path\n .map((p, i) => {\n if (i === 0) return p;\n if (isIdentifier(p)) return '.' + p;\n if (typeof p === 'number') return `[${p}]`;\n return `[\"${p}\"]`;\n })\n .join('');\n}\n\nfunction* formatFunction(f: Function) {\n yield f.name;\n yield '(';\n yield Object.values(f.parameters).map(formatScalar).join(SEP);\n yield ')';\n}\n\nfunction* trimStart(g: Generator<string>) {\n let n;\n do {\n const { value, done } = g.next();\n if (done) return;\n n = value.trimStart();\n } while (!n.length);\n yield n;\n yield* g;\n}\n\nfunction* escapeMarkdownCharacters(s: string, characters: RegExp) {\n yield s\n .replace(characters, '\\\\$&')\n // TODO keep &nbsp; as entity in the AST?\n // Non-breaking space (0xA0)\n .replace(new RegExp('\\xa0', 'g'), '&nbsp;');\n}\n\nfunction* formatNode(n: Node, o: Options = {}) {\n const no = { ...o, parent: n };\n const indent = SPACE.repeat(no.indent || 0);\n\n switch (n.type) {\n case 'document': {\n if (n.attributes.frontmatter && n.attributes.frontmatter.length) {\n yield '---' + NL + n.attributes.frontmatter + NL + '---' + NL + NL;\n }\n yield* trimStart(formatChildren(n, no));\n break;\n }\n case 'heading': {\n yield NL;\n yield indent;\n yield '#'.repeat(n.attributes.level || 1);\n yield SPACE;\n yield* trimStart(formatChildren(n, no));\n yield* formatAnnotations(n);\n yield NL;\n break;\n }\n case 'paragraph': {\n yield NL;\n yield* formatChildren(n, no);\n yield* formatAnnotations(n);\n yield NL;\n break;\n }\n case 'inline': {\n yield indent;\n yield* formatChildren(n, no);\n break;\n }\n case 'image': {\n yield '!';\n yield '[';\n yield* formatValue(n.attributes.alt, no);\n yield ']';\n yield '(';\n yield* typeof n.attributes.src === 'string'\n ? escapeMarkdownCharacters(n.attributes.src, /[()]/)\n : formatValue(n.attributes.src, no);\n if (n.attributes.title) {\n yield SPACE + `\"${n.attributes.title}\"`;\n }\n yield ')';\n break;\n }\n case 'link': {\n yield '[';\n yield* formatChildren(n, no);\n yield ']';\n yield '(';\n yield* typeof n.attributes.href === 'string'\n ? escapeMarkdownCharacters(n.attributes.href, /[()]/g)\n : formatValue(n.attributes.href, no);\n if (n.attributes.title) {\n yield SPACE + `\"${n.attributes.title}\"`;\n }\n yield ')';\n break;\n }\n case 'text': {\n const { content } = n.attributes;\n\n if (Ast.isAst(content)) {\n yield OPEN + SPACE;\n yield* formatValue(content, no);\n yield SPACE + CLOSE;\n } else {\n if (o.parent && WRAPPING_TYPES.includes(o.parent.type)) {\n // Escape **strong**, _em_, and ~~s~~\n yield* escapeMarkdownCharacters(content, /[*_~]/g);\n } else {\n // Escape > blockquote, * list item, and heading\n yield* escapeMarkdownCharacters(content, /^[*>#]/);\n }\n }\n\n break;\n }\n case 'blockquote': {\n const prefix = '>' + SPACE;\n yield n.children\n .map((child) => format(child, no).trimStart())\n .map((d) => NL + indent + prefix + d)\n .join(indent + prefix);\n break;\n }\n case 'hr': {\n yield NL;\n yield indent;\n yield '---';\n yield NL;\n break;\n }\n case 'fence': {\n yield NL;\n yield indent;\n\n const innerFence = n.attributes.content.match(/`{3,}/g) || [];\n\n const innerFenceLength = innerFence\n .map((s: string) => s.length)\n .reduce(max, 0);\n\n const boundary = '`'.repeat(innerFenceLength ? innerFenceLength + 1 : 3);\n\n yield boundary;\n if (n.attributes.language) yield n.attributes.language;\n if (n.annotations.length) yield SPACE;\n yield* formatAnnotations(n);\n yield NL;\n yield indent;\n yield n.attributes.content.split(NL).join(NL + indent); // yield* formatChildren(n, no);\n yield boundary;\n yield NL;\n break;\n }\n case 'tag': {\n if (!n.inline) {\n yield NL;\n yield indent;\n }\n const open = OPEN + SPACE;\n const attributes = [...formatAttributes(n)].filter(\n (v) => v !== undefined\n );\n const tag = [open + n.tag, ...attributes];\n const inlineTag = tag.join(SPACE);\n\n const isLongTagOpening =\n inlineTag.length + open.length * 2 >\n (o.maxTagOpeningWidth || MAX_TAG_OPENING_WIDTH);\n\n // {% tag attributes={...} %}\n yield (!n.inline && isLongTagOpening\n ? tag.join(NL + SPACE.repeat(open.length) + indent)\n : inlineTag) +\n SPACE +\n (n.children.length ? '' : '/') +\n CLOSE;\n\n if (n.children.length) {\n yield* formatChildren(n, no.allowIndentation ? increment(no) : no);\n if (!n.inline) {\n yield indent;\n }\n // {% /tag %}\n yield OPEN + SPACE + '/' + n.tag + SPACE + CLOSE;\n }\n if (!n.inline) {\n yield NL;\n }\n break;\n }\n case 'list': {\n const isLoose = n.children.some((n) =>\n n.children.some((c) => c.type === 'paragraph')\n );\n\n for (let i = 0; i < n.children.length; i++) {\n const prefix = n.attributes.ordered\n ? `${i === 0 ? n.attributes.start ?? '1' : '1'}${\n n.attributes.marker ?? OL\n }`\n : n.attributes.marker ?? UL;\n let d = format(n.children[i], increment(no, prefix.length + 1));\n\n if (!isLoose || i === n.children.length - 1) {\n d = d.trim();\n }\n\n yield NL + indent + prefix + ' ' + d;\n }\n yield NL;\n break;\n }\n case 'item': {\n for (let i = 0; i < n.children.length; i++) {\n yield* formatValue(n.children[i], no);\n if (i === 0) yield* formatAnnotations(n);\n }\n break;\n }\n case 'strong': {\n yield n.attributes.marker ?? '**';\n yield* formatInline(formatChildren(n, no));\n yield n.attributes.marker ?? '**';\n break;\n }\n case 'em': {\n yield n.attributes.marker ?? '*';\n yield* formatInline(formatChildren(n, no));\n yield n.attributes.marker ?? '*';\n break;\n }\n case 'code': {\n yield '`';\n yield* formatInline(formatValue(n.attributes.content, no));\n yield '`';\n break;\n }\n case 's': {\n yield '~~';\n yield* formatInline(formatChildren(n, no));\n yield '~~';\n break;\n }\n case 'hardbreak': {\n yield '\\\\' + NL;\n yield indent;\n break;\n }\n case 'softbreak': {\n yield NL;\n yield indent;\n break;\n }\n case 'table': {\n const table = [...formatChildren(n, increment(no))] as any as any[];\n if (o.parent && o.parent.type === 'tag' && o.parent.tag === 'table') {\n for (let i = 0; i < table.length; i++) {\n const row = table[i];\n // format tags like \"if\" in the middle of a table list\n if (typeof row === 'string') {\n if (row.trim().length) {\n yield NL;\n yield row;\n }\n } else {\n if (i !== 0) {\n yield NL;\n yield indent + '---';\n }\n for (const d of row) {\n yield NL + indent + UL + ' ' + d;\n }\n }\n }\n yield NL;\n } else {\n const widths: number[] = [];\n\n for (const row of table) {\n for (let i = 0; i < row.length; i++) {\n widths[i] = widths[i]\n ? Math.max(widths[i], row[i].length)\n : row[i].length;\n }\n }\n\n const [head, ...rows] = table as string[][];\n\n yield NL;\n yield* formatTableRow(\n head.map((cell, i) => cell + SPACE.repeat(widths[i] - cell.length))\n );\n yield NL;\n yield* formatTableRow(head.map((cell, i) => '-'.repeat(widths[i])));\n yield NL;\n for (const row of rows) {\n yield* formatTableRow(\n row.map((cell, i) => cell + SPACE.repeat(widths[i] - cell.length))\n );\n yield NL;\n }\n }\n break;\n }\n case 'thead': {\n const [head] = [...formatChildren(n, no)];\n yield head || [];\n break;\n }\n case 'tr': {\n yield [...formatChildren(n, no)];\n break;\n }\n case 'td':\n case 'th': {\n yield [...formatChildren(n, no), ...formatAnnotations(n)].join('').trim();\n break;\n }\n case 'tbody': {\n yield* formatChildren(n, no);\n break;\n }\n case 'comment': {\n yield '<!-- ' + n.attributes.content + ' -->\\n';\n break;\n }\n case 'error':\n case 'node':\n break;\n }\n}\n\nfunction* formatValue(\n v: Value,\n o: Options = {}\n): Generator<string, void, unknown> {\n switch (typeof v) {\n case 'undefined':\n break;\n case 'boolean':\n case 'number':\n case 'string': {\n yield v.toString();\n break;\n }\n case 'object': {\n if (v === null) break;\n if (Array.isArray(v)) {\n for (const n of v) yield* formatValue(n, o);\n break;\n }\n switch (v.$$mdtype) {\n case 'Function': {\n yield* formatFunction(v as Function);\n break;\n }\n case 'Node':\n yield* formatNode(v as Node, o);\n break;\n case 'Variable': {\n yield* formatVariable(v as Variable);\n break;\n }\n default:\n throw new Error(`Unimplemented: \"${v.$$mdtype}\"`);\n }\n break;\n }\n }\n}\n\nexport default function format(v: Value, options?: Options): string {\n let doc = '';\n for (const s of formatValue(v, options)) doc += s;\n return doc.trimStart();\n}\n", "import { isPromise } from '../utils';\n\nimport {\n MaybePromise,\n Node,\n RenderableTreeNode,\n RenderableTreeNodes,\n Schema,\n Value,\n} from '../types';\n\ntype Condition = { condition: Value; children: Node[] };\n\nexport function truthy(value: any) {\n return value !== false && value !== undefined && value !== null;\n}\n\nfunction renderConditions(node: Node) {\n const conditions: Condition[] = [\n { condition: node.attributes.primary, children: [] },\n ];\n for (const child of node.children) {\n if (child.type === 'tag' && child.tag === 'else')\n conditions.push({\n condition:\n 'primary' in child.attributes ? child.attributes.primary : true,\n children: [],\n });\n else conditions[conditions.length - 1].children.push(child);\n }\n\n return conditions;\n}\n\nexport const tagIf: Schema = {\n attributes: {\n primary: { type: Object, render: false },\n },\n\n transform(node, config) {\n const conditions = renderConditions(node);\n for (const { condition, children } of conditions)\n if (truthy(condition)) {\n const nodes = children.flatMap<MaybePromise<RenderableTreeNodes>>(\n (child) => child.transform(config)\n );\n if (nodes.some(isPromise)) {\n return Promise.all(nodes).then((nodes) => nodes.flat());\n }\n return nodes as RenderableTreeNode[];\n }\n return [];\n },\n};\n\nexport const tagElse: Schema = {\n selfClosing: true,\n attributes: {\n primary: { type: Object, render: false },\n },\n};\n", "import type { ConfigFunction } from '../types';\nimport { truthy } from '../tags/conditional';\n\nconst and: ConfigFunction = {\n transform(parameters) {\n return Object.values(parameters).every((x) => truthy(x));\n },\n};\n\nconst or: ConfigFunction = {\n transform(parameters) {\n return Object.values(parameters).find((x) => truthy(x)) !== undefined;\n },\n};\n\nconst not: ConfigFunction = {\n parameters: {\n 0: { required: true },\n },\n\n transform(parameters) {\n return !truthy(parameters[0]);\n },\n};\n\nconst equals: ConfigFunction = {\n transform(parameters) {\n const values = Object.values(parameters);\n return values.every((v) => v === values[0]);\n },\n};\n\nconst debug: ConfigFunction = {\n transform(parameters) {\n return JSON.stringify(parameters[0], null, 2);\n },\n};\n\nconst defaultFn: ConfigFunction = {\n transform(parameters) {\n return parameters[0] === undefined ? parameters[1] : parameters[0];\n },\n};\n\nexport default { and, or, not, equals, default: defaultFn, debug };\n", "import Ast from '../ast/index';\n\nimport type { Node, NodeType } from '../types';\n\nfunction convertToRow(node: Node, cellType: NodeType = 'td') {\n node.type = 'tr';\n node.attributes = {};\n\n for (const cell of node.children) cell.type = cellType;\n\n return node;\n}\n\nexport default function transform(document: Node) {\n for (const node of document.walk()) {\n if (node.type !== 'tag' || node.tag !== 'table') continue;\n\n const [first, ...rest] = node.children;\n if (!first || first.type === 'table') continue;\n\n const table = new Ast.Node('table', node.attributes, [\n new Ast.Node('thead'),\n new Ast.Node('tbody'),\n ]);\n\n const [thead, tbody] = table.children;\n\n if (first.type === 'list') thead.push(convertToRow(first, 'th'));\n\n for (const row of rest) {\n // Convert lists to rows with special-case support for conditionals\n // When a conditional is encountered, convert all of its top-level lists to rows\n if (row.type === 'list') convertToRow(row);\n else if (row.type === 'tag' && row.tag === 'if') {\n const children = [];\n\n for (const child of row.children) {\n // Replace children and skip HRs in order to support conditionals with multiple rows\n if (child.type === 'hr') continue;\n if (child.type === 'list') convertToRow(child);\n children.push(child);\n }\n\n row.children = children;\n } else continue;\n tbody.push(row);\n }\n\n node.children = [table];\n }\n}\n", "import table from './table';\nexport default [table];\n", "import Node from './ast/node';\nimport transforms from './transforms/index';\nimport { OPEN } from './utils';\n\nimport type { AttributeValue, ParserArgs } from './types';\n\nimport type Token from 'markdown-it/lib/token';\n\nconst mappings: Record<string, string> = {\n ordered_list: 'list',\n bullet_list: 'list',\n code_inline: 'code',\n list_item: 'item',\n variable: 'text',\n};\n\nfunction annotate(node: Node, attributes: AttributeValue[]) {\n for (const attribute of attributes) {\n node.annotations.push(attribute);\n\n const { name, value, type } = attribute;\n if (type === 'attribute') {\n if (node.attributes[name] !== undefined)\n node.errors.push({\n id: 'duplicate-attribute',\n level: 'warning',\n message: `Attribute '${name}' already set`,\n });\n node.attributes[name] = value;\n } else if (type === 'class')\n if (node.attributes.class) node.attributes.class[name] = value;\n else node.attributes.class = { [name]: value };\n }\n}\n\nfunction handleAttrs(token: Token, type: string) {\n switch (type) {\n case 'heading':\n return { level: Number(token.tag.replace('h', '')) };\n case 'list': {\n const attrs = token.attrs ? Object.fromEntries(token.attrs) : undefined;\n const ordered = token.type.startsWith('ordered');\n return ordered && attrs?.start\n ? { ordered: true, start: attrs.start, marker: token.markup }\n : { ordered, marker: token.markup };\n }\n case 'link': {\n const attrs = Object.fromEntries(token.attrs);\n return attrs.title\n ? { href: attrs.href, title: attrs.title }\n : { href: attrs.href };\n }\n case 'image': {\n const attrs = Object.fromEntries(token.attrs);\n return attrs.title\n ? { alt: token.content, src: attrs.src, title: attrs.title }\n : { alt: token.content, src: attrs.src };\n }\n case 'em':\n case 'strong':\n return { marker: token.markup };\n case 'text':\n case 'code':\n case 'comment':\n return { content: (token.meta || {}).variable || token.content };\n case 'fence': {\n const [language] = token.info.split(' ', 1);\n return language === '' || language === OPEN\n ? { content: token.content }\n : { content: token.content, language };\n }\n case 'td':\n case 'th': {\n if (token.attrs) {\n const attrs = Object.fromEntries(token.attrs);\n\n let align;\n if (attrs.style) {\n if (attrs.style.includes('left')) {\n align = 'left';\n } else if (attrs.style.includes('center')) {\n align = 'center';\n } else if (attrs.style.includes('right')) {\n align = 'right';\n }\n }\n\n if (align) {\n return { align };\n }\n }\n return {};\n }\n default:\n return {};\n }\n}\n\nfunction handleToken(\n token: Token,\n nodes: Node[],\n file?: string,\n handleSlots?: boolean,\n addLocation?: boolean,\n inlineParent?: Node\n) {\n if (token.type === 'frontmatter') {\n nodes[0].attributes.frontmatter = token.content;\n return;\n }\n\n if (token.hidden || (token.type === 'text' && token.content === '')) return;\n\n const errors = token.errors || [];\n const parent = nodes[nodes.length - 1];\n const { tag, attributes, error } = token.meta || {};\n\n if (token.type === 'annotation') {\n if (inlineParent) return annotate(inlineParent, attributes);\n\n return parent.errors.push({\n id: 'no-inline-annotations',\n level: 'error',\n message: `Can't apply inline annotations to '${parent.type}'`,\n });\n }\n\n let typeName = token.type.replace(/_(open|close)$/, '');\n if (mappings[typeName]) typeName = mappings[typeName];\n\n if (typeName === 'error') {\n const { message, location } = error;\n errors.push({ id: 'parse-error', level: 'critical', message, location });\n }\n\n if (token.nesting < 0) {\n if (parent.type === typeName && parent.tag === tag) {\n if (parent.lines && token.map) parent.lines.push(...token.map);\n return nodes.pop();\n }\n\n errors.push({\n id: 'missing-opening',\n level: 'critical',\n message: `Node '${typeName}' is missing opening`,\n });\n }\n\n const attrs = handleAttrs(token, typeName);\n const node = new Node(typeName, attrs, undefined, tag || undefined);\n const { position = {} } = token;\n\n node.errors = errors;\n if (addLocation !== false) {\n node.lines = token.map || parent.lines || [];\n node.location = {\n file,\n start: {\n line: node.lines[0],\n character: position.start,\n },\n end: {\n line: node.lines[1],\n character: position.end,\n },\n };\n }\n\n if (inlineParent) node.inline = true;\n\n if (attributes && ['tag', 'fence', 'image'].includes(typeName))\n annotate(node, attributes);\n\n if (\n handleSlots &&\n tag === 'slot' &&\n typeof node.attributes.primary === 'string'\n )\n parent.slots[node.attributes.primary] = node;\n else parent.push(node);\n\n if (token.nesting > 0) nodes.push(node);\n\n if (!Array.isArray(token.children)) return;\n\n if (node.type === 'inline') inlineParent = parent;\n\n nodes.push(node);\n\n const isLeafNode = typeName === 'image';\n if (!isLeafNode) {\n for (const child of token.children)\n handleToken(child, nodes, file, handleSlots, addLocation, inlineParent);\n }\n\n nodes.pop();\n}\n\nexport default function parser(tokens: Token[], args?: string | ParserArgs) {\n const doc = new Node('document');\n const nodes = [doc];\n\n if (typeof args === 'string') args = { file: args };\n\n for (const token of tokens)\n handleToken(token, nodes, args?.file, args?.slots, args?.location);\n\n if (nodes.length > 1)\n for (const node of nodes.slice(1))\n node.errors.push({\n id: 'missing-closing',\n level: 'critical',\n message: `Node '${node.tag || node.type}' is missing closing`,\n });\n\n for (const transform of transforms) transform(doc);\n\n return doc;\n}\n", "import type { Schema } from './types';\nimport Tag from './tag';\n\nexport const document: Schema = {\n render: 'article',\n children: [\n 'heading',\n 'paragraph',\n 'image',\n 'table',\n 'tag',\n 'fence',\n 'blockquote',\n 'comment',\n 'list',\n 'hr',\n ],\n attributes: {\n frontmatter: { render: false },\n },\n};\n\nexport const heading: Schema = {\n children: ['inline'],\n attributes: {\n level: { type: Number, render: false, required: true },\n },\n transform(node, config) {\n return new Tag(\n `h${node.attributes['level']}`,\n node.transformAttributes(config),\n node.transformChildren(config)\n );\n },\n};\n\nexport const paragraph: Schema = {\n render: 'p',\n children: ['inline'],\n};\n\nexport const image: Schema = {\n render: 'img',\n attributes: {\n src: { type: String, required: true },\n alt: { type: String },\n title: { type: String },\n // width/height attributes will need to be to be implemented as an extension to markdown-it\n },\n};\n\nexport const fence: Schema = {\n render: 'pre',\n attributes: {\n content: { type: String, render: false, required: true },\n language: { type: String, render: 'data-language' },\n process: { type: Boolean, render: false, default: true },\n },\n transform(node, config) {\n const attributes = node.transformAttributes(config);\n const children = node.children.length\n ? node.transformChildren(config)\n : [node.attributes.content];\n\n return new Tag('pre', attributes, children);\n },\n};\n\nexport const blockquote: Schema = {\n render: 'blockquote',\n children: [\n 'heading',\n 'paragraph',\n 'image',\n 'table',\n 'tag',\n 'fence',\n 'blockquote',\n 'list',\n 'hr',\n ],\n};\n\nexport const item: Schema = {\n render: 'li',\n children: [\n 'inline',\n 'heading',\n 'paragraph',\n 'image',\n 'table',\n 'tag',\n 'fence',\n 'blockquote',\n 'list',\n 'hr',\n ],\n};\n\nexport const list: Schema = {\n children: ['item'],\n attributes: {\n ordered: { type: Boolean, render: false, required: true },\n start: { type: Number },\n marker: { type: String, render: false },\n },\n transform(node, config) {\n return new Tag(\n node.attributes.ordered ? 'ol' : 'ul',\n node.transformAttributes(config),\n node.transformChildren(config)\n );\n },\n};\n\nexport const hr: Schema = {\n render: 'hr',\n};\n\nexport const table: Schema = {\n render: 'table',\n};\n\nexport const td: Schema = {\n render: 'td',\n children: [\n 'inline',\n 'heading',\n 'paragraph',\n 'image',\n 'table',\n 'tag',\n 'fence',\n 'blockquote',\n 'list',\n 'hr',\n ],\n attributes: {\n align: { type: String },\n colspan: { type: Number, render: 'colSpan' },\n rowspan: { type: Number, render: 'rowSpan' },\n },\n};\n\nexport const th: Schema = {\n render: 'th',\n attributes: {\n width: { type: Number },\n align: { type: String },\n colspan: { type: Number, render: 'colSpan' },\n rowspan: { type: Number, render: 'rowSpan' },\n },\n};\n\nexport const tr: Schema = {\n render: 'tr',\n children: ['th', 'td'],\n};\n\nexport const tbody: Schema = {\n render: 'tbody',\n children: ['tr', 'tag'],\n};\n\nexport const thead: Schema = {\n render: 'thead',\n children: ['tr'],\n};\n\nexport const strong: Schema = {\n render: 'strong',\n children: ['em', 's', 'link', 'code', 'text', 'tag'],\n attributes: {\n marker: { type: String, render: false },\n },\n};\n\nexport const em: Schema = {\n render: 'em',\n children: ['strong', 's', 'link', 'code', 'text', 'tag'],\n attributes: {\n marker: { type: String, render: false },\n },\n};\n\nexport const s: Schema = {\n render: 's',\n children: ['strong', 'em', 'link', 'code', 'text', 'tag'],\n};\n\nexport const inline: Schema = {\n children: [\n 'strong',\n 'em',\n 's',\n 'code',\n 'text',\n 'tag',\n 'link',\n 'image',\n 'hardbreak',\n 'softbreak',\n 'comment',\n ],\n};\n\nexport const link: Schema = {\n render: 'a',\n children: ['strong', 'em', 's', 'code', 'text', 'tag'],\n attributes: {\n href: { type: String, required: true },\n title: { type: String },\n },\n};\n\nexport const code: Schema = {\n render: 'code',\n attributes: {\n content: { type: String, render: false, required: true },\n },\n transform(node, config) {\n const attributes = node.transformAttributes(config);\n return new Tag('code', attributes, [node.attributes.content]);\n },\n};\n\nexport const text: Schema = {\n attributes: {\n content: { type: String, required: true },\n },\n transform(node) {\n return node.attributes.content;\n },\n};\n\nexport const hardbreak: Schema = {\n render: 'br',\n};\n\nexport const softbreak: Schema = {\n transform() {\n return ' ';\n },\n};\n\nexport const comment = {\n attributes: {\n content: { type: String, required: true },\n },\n};\n\nexport const error = {};\nexport const node = {};\n", "import MarkdownIt from 'markdown-it';\nimport Tag from '../tag';\nimport type { RenderableTreeNodes } from '../types';\nconst { escapeHtml } = MarkdownIt().utils;\n\n// HTML elements that do not have a matching close tag\n// Defined in the HTML standard: https://html.spec.whatwg.org/#void-elements\nconst voidElements = new Set([\n 'area',\n 'base',\n 'br',\n 'col',\n 'embed',\n 'hr',\n 'img',\n 'input',\n 'link',\n 'meta',\n 'param',\n 'source',\n 'track',\n 'wbr',\n]);\n\nexport default function render(node: RenderableTreeNodes): string {\n if (typeof node === 'string' || typeof node === 'number')\n return escapeHtml(String(node));\n\n if (Array.isArray(node)) return node.map(render).join('');\n\n if (node === null || typeof node !== 'object' || !Tag.isTag(node)) return '';\n\n const { name, attributes, children = [] } = node;\n\n if (!name) return render(children);\n\n let output = `<${name}`;\n for (const [k, v] of Object.entries(attributes ?? {}))\n output += ` ${k.toLowerCase()}=\"${escapeHtml(String(v))}\"`;\n output += '>';\n\n if (voidElements.has(name)) return output;\n\n if (children.length) output += render(children);\n output += `</${name}>`;\n\n return output;\n}\n", "import Tag from '../../tag';\nimport { RenderableTreeNodes, Scalar } from '../../types';\n\nimport type { createElement, ComponentType, Fragment, ReactNode } from 'react';\n\ntype ReactShape = Readonly<{\n createElement: typeof createElement;\n Fragment: typeof Fragment;\n}>;\n\ntype Component = ComponentType<unknown>;\n\nfunction tagName(\n name: string,\n components: Record<string, Component> | ((string: string) => Component)\n): string | Component {\n return typeof name !== 'string'\n ? name // This can be an object, e.g. when React.forwardRef is used\n : name[0] !== name[0].toUpperCase()\n ? name\n : components instanceof Function\n ? components(name)\n : components[name];\n}\n\nexport default function dynamic(\n node: RenderableTreeNodes,\n React: ReactShape,\n { components = {} } = {}\n) {\n function deepRender(value: any): any {\n if (value == null || typeof value !== 'object') return value;\n\n if (Array.isArray(value)) return value.map((item) => deepRender(item));\n\n if (value.$$mdtype === 'Tag') return render(value);\n\n if (typeof value !== 'object') return value;\n\n const output: Record<string, Scalar> = {};\n for (const [k, v] of Object.entries(value)) output[k] = deepRender(v);\n return output;\n }\n\n function render(node: RenderableTreeNodes): ReactNode {\n if (Array.isArray(node))\n return React.createElement(React.Fragment, null, ...node.map(render));\n\n if (node === null || typeof node !== 'object' || !Tag.isTag(node))\n return node;\n\n const {\n name,\n attributes: { class: className, ...attrs } = {},\n children = [],\n } = node;\n\n if (className) attrs.className = className;\n\n return React.createElement(\n tagName(name, components),\n Object.keys(attrs).length == 0 ? null : deepRender(attrs),\n ...children.map(render)\n );\n }\n\n return render(node);\n}\n", "import Tag from '../../tag';\nimport { RenderableTreeNode, RenderableTreeNodes } from '../../types';\n\nimport type { ComponentType } from 'react';\n\ntype Component = ComponentType<unknown>;\n\nfunction tagName(\n name: string,\n components: Record<string, Component> | ((string: string) => Component)\n): string | Component {\n return typeof name !== 'string'\n ? 'Fragment'\n : name[0] !== name[0].toUpperCase()\n ? name\n : components instanceof Function\n ? components(name)\n : components[name];\n}\n\nfunction renderArray(children: RenderableTreeNode[]): string {\n return children.map(render).join(', ');\n}\n\nfunction deepRender(value: any): any {\n if (value == null || typeof value !== 'object') return JSON.stringify(value);\n\n if (Array.isArray(value))\n return `[${value.map((item) => deepRender(item)).join(', ')}]`;\n\n if (value.$$mdtype === 'Tag') return render(value);\n\n if (typeof value !== 'object') return JSON.stringify(value);\n\n const object = Object.entries(value)\n .map(([k, v]) => [JSON.stringify(k), deepRender(v)].join(': '))\n .join(', ');\n\n return `{${object}}`;\n}\n\nfunction render(node: RenderableTreeNodes): string {\n if (Array.isArray(node))\n return `React.createElement(React.Fragment, null, ${renderArray(node)})`;\n\n if (node === null || typeof node !== 'object' || !Tag.isTag(node))\n return JSON.stringify(node);\n\n const {\n name,\n attributes: { class: className, ...attrs } = {},\n children = [],\n } = node;\n\n if (className) attrs.className = className;\n\n return `React.createElement(\n tagName(${JSON.stringify(name)}, components),\n ${Object.keys(attrs).length == 0 ? 'null' : deepRender(attrs)},\n ${renderArray(children)})`;\n}\n\nexport default function reactStatic(node: RenderableTreeNodes): string {\n return `\n (({components = {}} = {}) => {\n ${tagName}\n return ${render(node)};\n })\n`;\n}\n", "import html from './html';\nimport react from './react/react';\nimport reactStatic from './react/static';\n\nexport default { html, react, reactStatic };\n", "import type { Node, Config, Schema, ValidationError } from '../types';\n\nclass PartialFile {\n validate(file: any, config: Config): ValidationError[] {\n const { partials = {} } = config;\n const partial = partials[file];\n\n if (!partial)\n return [\n {\n id: 'attribute-value-invalid',\n level: 'error',\n message: `Partial \\`${file}\\` not found. The 'file' attribute must be set in \\`config.partials\\``,\n },\n ];\n\n return [];\n }\n}\n\nexport const partial: Schema = {\n inline: false,\n selfClosing: true,\n attributes: {\n file: { type: PartialFile, render: false, required: true },\n variables: { type: Object, render: false },\n },\n transform(node: Node, config: Config) {\n const { partials = {} } = config;\n const { file, variables } = node.attributes;\n const partial: Node | Node[] = partials[file];\n\n if (!partial) return null;\n\n const scopedConfig = {\n ...config,\n variables: {\n ...config.variables,\n ...variables,\n ['$$partial:filename']: file,\n },\n };\n\n const transformChildren = (part: Node) =>\n part.resolve(scopedConfig).transformChildren(scopedConfig);\n\n return Array.isArray(partial)\n ? partial.flatMap(transformChildren)\n : transformChildren(partial);\n },\n};\n", "import type { Schema } from '../types';\n\nexport const table: Schema = {\n children: ['table'],\n inline: false,\n};\n", "import type { Schema } from '../types';\n\nexport const slot: Schema = {\n attributes: {\n primary: { type: String, required: true },\n },\n};\n", "import { tagIf, tagElse } from './conditional';\nimport { partial } from './partial';\nimport { table } from './table';\nimport { slot } from './slot';\n\nexport default {\n else: tagElse,\n if: tagIf,\n partial,\n slot,\n table,\n};\n", "import MarkdownIt from 'markdown-it/lib';\nimport annotations from './plugins/annotations';\nimport frontmatter from './plugins/frontmatter';\nimport comments from './plugins/comments';\nimport type Token from 'markdown-it/lib/token';\n\nexport default class Tokenizer {\n private parser: MarkdownIt;\n\n constructor(\n config: MarkdownIt.Options & {\n allowIndentation?: boolean;\n allowComments?: boolean;\n } = {}\n ) {\n this.parser = new MarkdownIt(config);\n this.parser.use(annotations, 'annotations', {});\n this.parser.use(frontmatter, 'frontmatter', {});\n this.parser.disable([\n 'lheading',\n // Disable indented `code_block` support https://spec.commonmark.org/0.30/#indented-code-block\n 'code',\n ]);\n\n if (config.allowComments) this.parser.use(comments, 'comments', {});\n }\n\n tokenize(content: string): Token[] {\n return this.parser.parse(content.toString(), {});\n }\n}\n", "import { findTagEnd, parseTags } from '../../utils';\nimport { parse, SyntaxError } from '../../grammar/tag';\nimport Variable from '../../ast/variable';\nimport Function from '../../ast/function';\n\nimport type { AttributeValue } from '../../types';\nimport type MarkdownIt from 'markdown-it/lib';\nimport type StateCore from 'markdown-it/lib/rules_core/state_core';\nimport type StateInline from 'markdown-it/lib/rules_inline/state_inline';\nimport type StateBlock from 'markdown-it/lib/rules_block/state_block';\nimport type Token from 'markdown-it/lib/token';\n\nimport { OPEN, CLOSE } from '../../utils';\n\nfunction createToken(\n state: StateBlock | StateInline,\n content: string,\n contentStart?: number\n): Token {\n try {\n const { type, meta, nesting = 0 } = parse(content, { Variable, Function });\n const token = state.push(type, '', nesting);\n token.info = content;\n token.meta = meta;\n\n if (!state.delimiters) {\n state.delimiters = [];\n }\n\n return token;\n } catch (error) {\n if (!(error instanceof SyntaxError)) throw error;\n\n const {\n message,\n location: { start, end },\n } = error as SyntaxError;\n const location = contentStart\n ? {\n start: { offset: start.offset + contentStart },\n end: { offset: end.offset + contentStart },\n }\n : null;\n\n const token = state.push('error', '', 0);\n token.meta = { error: { message, location } };\n return token;\n }\n}\n\nfunction block(\n state: StateBlock,\n startLine: number,\n endLine: number,\n silent: boolean\n): boolean {\n const start = state.bMarks[startLine] + state.tShift[startLine];\n const finish = state.eMarks[startLine];\n\n if (!state.src.startsWith(OPEN, start)) return false;\n\n const tagEnd = findTagEnd(state.src, start);\n const lastPossible = state.src.slice(0, finish).trim().length;\n\n if (!tagEnd || tagEnd < lastPossible - CLOSE.length) return false;\n\n const contentStart = start + OPEN.length;\n const content = state.src.slice(contentStart, tagEnd).trim();\n const lines = state.src\n .slice(start, tagEnd + CLOSE.length)\n .split('\\n').length;\n\n if (content[0] === '$') return false;\n\n if (silent) return true;\n\n const token = createToken(state, content, contentStart);\n token.map = [startLine, startLine + lines];\n state.line += lines;\n return true;\n}\n\nfunction inline(state: StateInline, silent: boolean): boolean {\n if (!state.src.startsWith(OPEN, state.pos)) return false;\n\n const tagEnd = findTagEnd(state.src, state.pos);\n if (!tagEnd) return false;\n\n const content = state.src.slice(state.pos + OPEN.length, tagEnd);\n if (!silent) createToken(state, content.trim());\n\n state.pos = tagEnd + CLOSE.length;\n return true;\n}\n\nfunction core(state: StateCore) {\n let token: Token;\n for (token of state.tokens) {\n if (token.type !== 'fence') continue;\n\n if (token.info.includes(OPEN)) {\n const start = token.info.indexOf(OPEN);\n const end = findTagEnd(token.info, start);\n const content = token.info.slice(start + OPEN.length, end);\n\n try {\n const { meta } = parse(content.trim(), { Variable, Function });\n token.meta = meta;\n } catch (error) {\n if (!(error instanceof SyntaxError)) throw error;\n if (!token.errors) token.errors = [];\n token.errors.push({\n id: 'fence-tag-error',\n level: 'error',\n message: `Syntax error in fence tag: ${\n (error as SyntaxError).message\n }`,\n });\n }\n }\n\n if (\n token?.meta?.attributes?.find(\n (attr: AttributeValue) => attr.name === 'process' && !attr.value\n )\n )\n continue;\n\n token.children = parseTags(token.content, token.map[0]);\n }\n}\n\nexport default function plugin(md: MarkdownIt /* options */) {\n md.block.ruler.before('paragraph', 'annotations', block, {\n alt: ['paragraph', 'blockquote'],\n });\n md.inline.ruler.push('containers', inline);\n md.core.ruler.push('annotations', core);\n}\n", "import type MarkdownIt from 'markdown-it/lib';\nimport type StateBlock from 'markdown-it/lib/rules_block/state_block';\n\nconst fence = '---';\n\nfunction getLine(state: StateBlock, n: number) {\n return state.src.slice(state.bMarks[n], state.eMarks[n]).trim();\n}\n\nfunction findClose(state: StateBlock, endLine: number) {\n for (let line = 1; line < endLine; line++)\n if (getLine(state, line) === fence) return line;\n}\n\nfunction block(\n state: StateBlock,\n startLine: number,\n endLine: number,\n silent: boolean\n): boolean {\n if (startLine != 0 || getLine(state, 0) != fence) return false;\n\n const close = findClose(state, endLine);\n\n if (!close) return false;\n if (silent) return true;\n\n const token = state.push('frontmatter', '', 0);\n token.content = state.src.slice(state.eMarks[0], state.bMarks[close]).trim();\n token.map = [0, close];\n token.hidden = true;\n\n state.line = close + 1;\n return true;\n}\n\nexport default function plugin(md: MarkdownIt /* options */) {\n md.block.ruler.before('hr', 'frontmatter', block);\n}\n", "import type MarkdownIt from 'markdown-it/lib';\nimport type StateBlock from 'markdown-it/lib/rules_block/state_block';\nimport type StateInline from 'markdown-it/lib/rules_inline/state_inline';\n\nconst OPEN = '<!--';\nconst CLOSE = '-->';\n\nfunction block(\n state: StateBlock,\n startLine: number,\n endLine: number,\n silent: boolean\n): boolean {\n const start = state.bMarks[startLine] + state.tShift[startLine];\n if (!state.src.startsWith(OPEN, start)) return false;\n\n const close = state.src.indexOf(CLOSE, start);\n\n if (!close) return false;\n if (silent) return true;\n\n const content = state.src.slice(start + OPEN.length, close);\n const lines = content.split('\\n').length;\n const token = state.push('comment', '', 0);\n token.content = content.trim();\n token.map = [startLine, startLine + lines];\n state.line += lines;\n\n return true;\n}\n\nfunction inline(state: StateInline, silent: boolean): boolean {\n if (!state.src.startsWith(OPEN, state.pos)) return false;\n\n const close = state.src.indexOf(CLOSE, state.pos);\n\n if (!close) return false;\n if (silent) return true;\n\n const content = state.src.slice(state.pos + OPEN.length, close);\n const token = state.push('comment', '', 0);\n token.content = content.trim();\n state.pos = close + CLOSE.length;\n\n return true;\n}\n\nexport default function plugin(md: MarkdownIt) {\n md.block.ruler.before('table', 'comment', block, { alt: ['paragraph'] });\n md.inline.ruler.push('comment', inline);\n}\n", "import { globalAttributes } from './transformer';\nimport Ast from './ast/index';\nimport { isPromise } from './utils';\n\nimport type {\n Node,\n Function,\n Config,\n SchemaAttribute,\n ValidationError,\n Value,\n} from './types';\n\nconst TypeMappings = {\n String: String,\n Number: Number,\n Array: Array,\n Object: Object,\n Boolean: Boolean,\n} as const;\n\ntype TypeParam = NonNullable<SchemaAttribute['type']>;\n\nexport function validateType(\n type: TypeParam,\n value: Value,\n config: Config,\n key: string\n): boolean | ValidationError[] {\n if (!type) return true;\n\n if (Ast.isFunction(value) && config.validation?.validateFunctions) {\n const schema = config.functions?.[value.name];\n return !schema?.returns\n ? true\n : Array.isArray(schema.returns)\n ? schema.returns.find((t) => t === type) !== undefined\n : schema.returns === type;\n }\n\n if (Ast.isAst(value)) return true;\n\n if (Array.isArray(type))\n return type.some((t) => validateType(t, value, config, key));\n\n if (typeof type === 'string') type = TypeMappings[type];\n\n if (typeof type === 'function') {\n const instance: any = new type();\n if (instance.validate) {\n return instance.validate(value, config, key);\n }\n }\n\n return value != null && value.constructor === type;\n}\n\nfunction typeToString(type: TypeParam): string {\n if (typeof type === 'string') return type;\n\n if (Array.isArray(type)) return type.map(typeToString).join(' | ');\n\n return type.name;\n}\n\nfunction validateFunction(fn: Function, config: Config): ValidationError[] {\n const schema = config.functions?.[fn.name];\n const errors: ValidationError[] = [];\n\n if (!schema)\n return [\n {\n id: 'function-undefined',\n level: 'critical',\n message: `Undefined function: '${fn.name}'`,\n },\n ];\n\n if (schema.validate) errors.push(...schema.validate(fn, config));\n\n if (schema.parameters) {\n for (const [key, value] of Object.entries(fn.parameters)) {\n const param = schema.parameters?.[key];\n\n if (!param) {\n errors.push({\n id: 'parameter-undefined',\n level: 'error',\n message: `Invalid parameter: '${key}'`,\n });\n\n continue;\n }\n\n if (Ast.isAst(value) && !Ast.isFunction(value)) continue;\n\n if (param.type) {\n const valid = validateType(param.type, value, config, key);\n if (valid === false) {\n errors.push({\n id: 'parameter-type-invalid',\n level: 'error',\n message: `Parameter '${key}' of '${\n fn.name\n }' must be type of '${typeToString(param.type)}'`,\n });\n } else if (Array.isArray(valid)) {\n errors.push(...valid);\n }\n }\n }\n }\n\n for (const [key, { required }] of Object.entries(schema.parameters ?? {}))\n if (required && fn.parameters[key] === undefined)\n errors.push({\n id: 'parameter-missing-required',\n level: 'error',\n message: `Missing required parameter: '${key}'`,\n });\n\n return errors;\n}\n\nfunction displayMatches(matches: any[], n: number) {\n if (matches.length <= n) return JSON.stringify(matches);\n const items = matches.slice(0, n).map((item) => JSON.stringify(item));\n return `[${items.join(',')}, ... ${matches.length - n} more]`;\n}\n\nexport default function validator(node: Node, config: Config) {\n const schema = node.findSchema(config);\n const errors: ValidationError[] = [...(node.errors || [])];\n\n if (!schema) {\n errors.push({\n id: node.tag ? 'tag-undefined' : 'node-undefined',\n level: 'critical',\n message: node.tag\n ? `Undefined tag: '${node.tag}'`\n : `Undefined node: '${node.type}'`,\n });\n\n return errors;\n }\n\n if (schema.inline != undefined && node.inline !== schema.inline)\n errors.push({\n id: 'tag-placement-invalid',\n level: 'critical',\n message: `'${node.tag}' tag should be ${\n schema.inline ? 'inline' : 'block'\n }`,\n });\n\n if (schema.selfClosing && node.children.length > 0)\n errors.push({\n id: 'tag-selfclosing-has-children',\n level: 'critical',\n message: `'${node.tag}' tag should be self-closing`,\n });\n\n const attributes = {\n ...globalAttributes,\n ...schema.attributes,\n };\n\n for (const key of Object.keys(node.slots)) {\n const slot = schema.slots?.[key];\n if (!slot)\n errors.push({\n id: 'slot-undefined',\n level: 'error',\n message: `Invalid slot: '${key}'`,\n });\n }\n\n for (let [key, value] of Object.entries(node.attributes)) {\n const attrib = attributes[key];\n\n if (!attrib) {\n errors.push({\n id: 'attribute-undefined',\n level: 'error',\n message: `Invalid attribute: '${key}'`,\n });\n\n continue;\n }\n\n let { type, matches, errorLevel } = attrib;\n\n if (Ast.isAst(value)) {\n if (Ast.isFunction(value) && config.validation?.validateFunctions)\n errors.push(...validateFunction(value, config));\n else if (Ast.isVariable(value) && config.variables) {\n let missing = false;\n let variables = config.variables;\n\n for (const key of value.path) {\n if (!Object.prototype.hasOwnProperty.call(variables, key)) {\n missing = true;\n break;\n }\n variables = variables[key];\n }\n\n if (missing) {\n errors.push({\n id: 'variable-undefined',\n level: 'error',\n message: `Undefined variable: '${value.path.join('.')}'`,\n });\n }\n } else continue;\n }\n\n value = value as string;\n\n if (type) {\n const valid = validateType(type, value, config, key);\n if (valid === false) {\n errors.push({\n id: 'attribute-type-invalid',\n level: errorLevel || 'error',\n message: `Attribute '${key}' must be type of '${typeToString(type)}'`,\n });\n }\n if (Array.isArray(valid)) {\n errors.push(...valid);\n }\n }\n\n if (typeof matches === 'function') matches = matches(config);\n\n if (Array.isArray(matches) && !matches.includes(value))\n errors.push({\n id: 'attribute-value-invalid',\n level: errorLevel || 'error',\n message: `Attribute '${key}' must match one of ${displayMatches(\n matches,\n 8\n )}. Got '${value}' instead.`,\n });\n\n if (matches instanceof RegExp && !matches.test(value))\n errors.push({\n id: 'attribute-value-invalid',\n level: errorLevel || 'error',\n message: `Attribute '${key}' must match ${matches}. Got '${value}' instead.`,\n });\n\n if (typeof attrib.validate === 'function') {\n const attribErrors = attrib.validate(value, config, key);\n if (Array.isArray(attribErrors)) errors.push(...attribErrors);\n }\n }\n\n for (const [key, { required }] of Object.entries(attributes))\n if (required && node.attributes[key] === undefined)\n errors.push({\n id: 'attribute-missing-required',\n level: 'error',\n message: `Missing required attribute: '${key}'`,\n });\n\n if (schema.slots)\n for (const [key, { required }] of Object.entries(schema.slots))\n if (required && node.slots[key] === undefined)\n errors.push({\n id: 'slot-missing-required',\n level: 'error',\n message: `Missing required slot: '${key}'`,\n });\n\n for (const { type } of node.children) {\n if (schema.children && type !== 'error' && !schema.children.includes(type))\n errors.push({\n id: 'child-invalid',\n level: 'warning',\n message: `Can't nest '${type}' in '${node.tag || node.type}'`,\n });\n }\n\n if (schema.validate) {\n const schemaErrors = schema.validate(node, config);\n if (isPromise(schemaErrors)) {\n return schemaErrors.then((e) => errors.concat(e));\n }\n\n errors.push(...schemaErrors);\n }\n\n return errors;\n}\n\nexport function* walkWithParents(\n node: Node,\n parents: Node[] = []\n): Generator<[Node, Node[]]> {\n yield [node, parents];\n for (const child of [...Object.values(node.slots), ...node.children])\n yield* walkWithParents(child, [...parents, node]);\n}\n\nexport function validateTree(content: Node, config: Config) {\n const output = [...walkWithParents(content)].map(([node, parents]) => {\n const { type, lines, location } = node;\n const updatedConfig = {\n ...config,\n validation: { ...config.validation, parents },\n };\n const errors = validator(node, updatedConfig);\n\n if (isPromise(errors)) {\n return errors.then((e) =>\n e.map((error) => ({ type, lines, location, error }))\n );\n }\n\n return errors.map((error) => ({ type, lines, location, error }));\n });\n\n if (output.some(isPromise)) {\n return Promise.all(output).then((o) => o.flat());\n }\n\n return output.flat();\n}\n", "import Ast from './src/ast';\nimport format from './src/formatter';\nimport functions from './src/functions';\nimport parser from './src/parser';\nimport * as nodes from './src/schema';\nimport renderers from './src/renderers';\nimport Tag from './src/tag';\nimport tags from './src/tags';\nimport { truthy } from './src/tags/conditional';\nimport Tokenizer from './src/tokenizer';\nimport transformer, { globalAttributes } from './src/transformer';\nimport transforms from './src/transforms';\nimport { parseTags } from './src/utils';\nimport validator, { validateTree } from './src/validator';\n\nimport type { Node, ParserArgs } from './src/types';\nimport type Token from 'markdown-it/lib/token';\nimport type { Config, RenderableTreeNode, ValidateError } from './src/types';\n\nexport * from './src/types';\n\nconst tokenizer = new Tokenizer();\n\nfunction mergeConfig(config: Config = {}): Config {\n return {\n ...config,\n tags: {\n ...tags,\n ...config.tags,\n },\n nodes: {\n ...nodes,\n ...config.nodes,\n },\n functions: {\n ...functions,\n ...config.functions,\n },\n };\n}\n\nexport function parse(\n content: string | Token[],\n args?: string | ParserArgs\n): Node {\n if (typeof content === 'string') content = tokenizer.tokenize(content);\n return parser(content, args);\n}\n\nexport function resolve<C extends Config = Config>(\n content: Node,\n config: C\n): Node;\nexport function resolve<C extends Config = Config>(\n content: Node[],\n config: C\n): Node[];\nexport function resolve<C extends Config = Config>(\n content: any,\n config: C\n): any {\n if (Array.isArray(content))\n return content.flatMap((child) => child.resolve(config));\n\n return content.resolve(config);\n}\n\nexport function transform<C extends Config = Config>(\n node: Node,\n config?: C\n): RenderableTreeNode;\nexport function transform<C extends Config = Config>(\n nodes: Node[],\n config?: C\n): RenderableTreeNode[];\nexport function transform<C extends Config = Config>(\n nodes: any,\n options?: C\n): any {\n const config = mergeConfig(options);\n const content = resolve(nodes, config);\n\n if (Array.isArray(content))\n return content.flatMap((child) => child.transform(config));\n return content.transform(config);\n}\n\nexport function validate<C extends Config = Config>(\n node: Node,\n options?: C\n): ValidateError[];\nexport function validate<C extends Config = Config>(\n content: any,\n options?: C\n): any {\n const config = mergeConfig(options);\n return validateTree(content, config);\n}\n\nexport function createElement(\n name: string | { key?: string | number },\n attributes = {},\n ...children: any[]\n) {\n return { name, attributes, children };\n}\n\nexport {\n nodes,\n tags,\n functions,\n globalAttributes,\n transforms,\n renderers,\n Ast,\n Tag,\n Tokenizer,\n parseTags,\n transformer,\n validator,\n truthy,\n format,\n};\n\nexport default class Markdoc {\n static nodes = nodes;\n static tags = tags;\n static functions = functions;\n static globalAttributes = globalAttributes;\n static renderers = renderers;\n static transforms = transforms;\n static Ast = Ast;\n static Tag = Tag;\n static Tokenizer = Tokenizer;\n static parseTags = parseTags;\n static transformer = transformer;\n static validator = validator;\n static parse = parse;\n static transform = transform;\n static validate = validate;\n static createElement = createElement;\n static truthy = truthy;\n static format = format;\n\n config;\n constructor(config: Config) {\n this.config = config;\n }\n\n parse = parse;\n resolve = (content: Parameters<typeof resolve>[0]) =>\n resolve(content, this.config);\n transform = (content: Parameters<typeof transform>[0]) =>\n transform(content, this.config);\n validate = (content: Parameters<typeof validate>[0]) =>\n validate(content, this.config);\n}\n"],
"mappings": "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",
"names": []
}