{"version":3,"file":"index.mjs","sources":["index.mjs"],"sourcesContent":["// Process footnotes\n//\n'use strict'\n\n/// /////////////////////////////////////////////////////////////////////////////\n// Renderer partials\n\nfunction render_footnote_anchor_name (tokens, idx, options, env/*, slf */) {\n  const n = Number(tokens[idx].meta.id + 1).toString()\n  let prefix = ''\n\n  if (typeof env.docId === 'string') prefix = `-${env.docId}-`\n\n  return prefix + n\n}\n\nfunction render_footnote_caption (tokens, idx/*, options, env, slf */) {\n  let n = Number(tokens[idx].meta.id + 1).toString()\n\n  if (tokens[idx].meta.subId > 0) n += `:${tokens[idx].meta.subId}`\n\n  return `[${n}]`\n}\n\nfunction render_footnote_ref (tokens, idx, options, env, slf) {\n  const id = slf.rules.footnote_anchor_name(tokens, idx, options, env, slf)\n  const caption = slf.rules.footnote_caption(tokens, idx, options, env, slf)\n  let refid = id\n\n  if (tokens[idx].meta.subId > 0) refid += `:${tokens[idx].meta.subId}`\n\n  return `<sup class=\"footnote-ref\"><a href=\"#fn${id}\" id=\"fnref${refid}\">${caption}</a></sup>`\n}\n\nfunction render_footnote_block_open (tokens, idx, options) {\n  return (options.xhtmlOut ? '<hr class=\"footnotes-sep\" />\\n' : '<hr class=\"footnotes-sep\">\\n') +\n         '<section class=\"footnotes\">\\n' +\n         '<ol class=\"footnotes-list\">\\n'\n}\n\nfunction render_footnote_block_close () {\n  return '</ol>\\n</section>\\n'\n}\n\nfunction render_footnote_open (tokens, idx, options, env, slf) {\n  let id = slf.rules.footnote_anchor_name(tokens, idx, options, env, slf)\n\n  if (tokens[idx].meta.subId > 0) id += `:${tokens[idx].meta.subId}`\n\n  return `<li id=\"fn${id}\" class=\"footnote-item\">`\n}\n\nfunction render_footnote_close () {\n  return '</li>\\n'\n}\n\nfunction render_footnote_anchor (tokens, idx, options, env, slf) {\n  let id = slf.rules.footnote_anchor_name(tokens, idx, options, env, slf)\n\n  if (tokens[idx].meta.subId > 0) id += `:${tokens[idx].meta.subId}`\n\n  /* ↩ with escape code to prevent display as Apple Emoji on iOS */\n  return ` <a href=\"#fnref${id}\" class=\"footnote-backref\">\\u21a9\\uFE0E</a>`\n}\n\nexport default function footnote_plugin (md) {\n  const parseLinkLabel = md.helpers.parseLinkLabel\n  const isSpace = md.utils.isSpace\n\n  md.renderer.rules.footnote_ref          = render_footnote_ref\n  md.renderer.rules.footnote_block_open   = render_footnote_block_open\n  md.renderer.rules.footnote_block_close  = render_footnote_block_close\n  md.renderer.rules.footnote_open         = render_footnote_open\n  md.renderer.rules.footnote_close        = render_footnote_close\n  md.renderer.rules.footnote_anchor       = render_footnote_anchor\n\n  // helpers (only used in other rules, no tokens are attached to those)\n  md.renderer.rules.footnote_caption      = render_footnote_caption\n  md.renderer.rules.footnote_anchor_name  = render_footnote_anchor_name\n\n  // Process footnote block definition\n  function footnote_def (state, startLine, endLine, silent) {\n    const start = state.bMarks[startLine] + state.tShift[startLine]\n    const max = state.eMarks[startLine]\n\n    // line should be at least 5 chars - \"[^x]:\"\n    if (start + 4 > max) return false\n\n    if (state.src.charCodeAt(start) !== 0x5B/* [ */) return false\n    if (state.src.charCodeAt(start + 1) !== 0x5E/* ^ */) return false\n\n    let pos\n\n    for (pos = start + 2; pos < max; pos++) {\n      if (state.src.charCodeAt(pos) === 0x20) return false\n      if (state.src.charCodeAt(pos) === 0x5D /* ] */) {\n        break\n      }\n    }\n\n    if (pos === start + 2) return false // no empty footnote labels\n    if (pos + 1 >= max || state.src.charCodeAt(++pos) !== 0x3A /* : */) return false\n    if (silent) return true\n    pos++\n\n    if (!state.env.footnotes) state.env.footnotes = {}\n    if (!state.env.footnotes.refs) state.env.footnotes.refs = {}\n    const label = state.src.slice(start + 2, pos - 2)\n    state.env.footnotes.refs[`:${label}`] = -1\n\n    const token_fref_o = new state.Token('footnote_reference_open', '', 1)\n    token_fref_o.meta  = { label }\n    token_fref_o.level = state.level++\n    state.tokens.push(token_fref_o)\n\n    const oldBMark = state.bMarks[startLine]\n    const oldTShift = state.tShift[startLine]\n    const oldSCount = state.sCount[startLine]\n    const oldParentType = state.parentType\n\n    const posAfterColon = pos\n    const initial = state.sCount[startLine] + pos - (state.bMarks[startLine] + state.tShift[startLine])\n    let offset = initial\n\n    while (pos < max) {\n      const ch = state.src.charCodeAt(pos)\n\n      if (isSpace(ch)) {\n        if (ch === 0x09) {\n          offset += 4 - offset % 4\n        } else {\n          offset++\n        }\n      } else {\n        break\n      }\n\n      pos++\n    }\n\n    state.tShift[startLine] = pos - posAfterColon\n    state.sCount[startLine] = offset - initial\n\n    state.bMarks[startLine] = posAfterColon\n    state.blkIndent += 4\n    state.parentType = 'footnote'\n\n    if (state.sCount[startLine] < state.blkIndent) {\n      state.sCount[startLine] += state.blkIndent\n    }\n\n    state.md.block.tokenize(state, startLine, endLine, true)\n\n    state.parentType = oldParentType\n    state.blkIndent -= 4\n    state.tShift[startLine] = oldTShift\n    state.sCount[startLine] = oldSCount\n    state.bMarks[startLine] = oldBMark\n\n    const token_fref_c = new state.Token('footnote_reference_close', '', -1)\n    token_fref_c.level = --state.level\n    state.tokens.push(token_fref_c)\n\n    return true\n  }\n\n  // Process inline footnotes (^[...])\n  function footnote_inline (state, silent) {\n    const max = state.posMax\n    const start = state.pos\n\n    if (start + 2 >= max) return false\n    if (state.src.charCodeAt(start) !== 0x5E/* ^ */) return false\n    if (state.src.charCodeAt(start + 1) !== 0x5B/* [ */) return false\n\n    const labelStart = start + 2\n    const labelEnd = parseLinkLabel(state, start + 1)\n\n    // parser failed to find ']', so it's not a valid note\n    if (labelEnd < 0) return false\n\n    // We found the end of the link, and know for a fact it's a valid link;\n    // so all that's left to do is to call tokenizer.\n    //\n    if (!silent) {\n      if (!state.env.footnotes) state.env.footnotes = {}\n      if (!state.env.footnotes.list) state.env.footnotes.list = []\n      const footnoteId = state.env.footnotes.list.length\n      const tokens = []\n\n      state.md.inline.parse(\n        state.src.slice(labelStart, labelEnd),\n        state.md,\n        state.env,\n        tokens\n      )\n\n      const token = state.push('footnote_ref', '', 0)\n      token.meta = { id: footnoteId }\n\n      state.env.footnotes.list[footnoteId] = {\n        content: state.src.slice(labelStart, labelEnd),\n        tokens\n      }\n    }\n\n    state.pos = labelEnd + 1\n    state.posMax = max\n    return true\n  }\n\n  // Process footnote references ([^...])\n  function footnote_ref (state, silent) {\n    const max = state.posMax\n    const start = state.pos\n\n    // should be at least 4 chars - \"[^x]\"\n    if (start + 3 > max) return false\n\n    if (!state.env.footnotes || !state.env.footnotes.refs) return false\n    if (state.src.charCodeAt(start) !== 0x5B/* [ */) return false\n    if (state.src.charCodeAt(start + 1) !== 0x5E/* ^ */) return false\n\n    let pos\n\n    for (pos = start + 2; pos < max; pos++) {\n      if (state.src.charCodeAt(pos) === 0x20) return false\n      if (state.src.charCodeAt(pos) === 0x0A) return false\n      if (state.src.charCodeAt(pos) === 0x5D /* ] */) {\n        break\n      }\n    }\n\n    if (pos === start + 2) return false // no empty footnote labels\n    if (pos >= max) return false\n    pos++\n\n    const label = state.src.slice(start + 2, pos - 1)\n    if (typeof state.env.footnotes.refs[`:${label}`] === 'undefined') return false\n\n    if (!silent) {\n      if (!state.env.footnotes.list) state.env.footnotes.list = []\n\n      let footnoteId\n\n      if (state.env.footnotes.refs[`:${label}`] < 0) {\n        footnoteId = state.env.footnotes.list.length\n        state.env.footnotes.list[footnoteId] = { label, count: 0 }\n        state.env.footnotes.refs[`:${label}`] = footnoteId\n      } else {\n        footnoteId = state.env.footnotes.refs[`:${label}`]\n      }\n\n      const footnoteSubId = state.env.footnotes.list[footnoteId].count\n      state.env.footnotes.list[footnoteId].count++\n\n      const token = state.push('footnote_ref', '', 0)\n      token.meta = { id: footnoteId, subId: footnoteSubId, label }\n    }\n\n    state.pos = pos\n    state.posMax = max\n    return true\n  }\n\n  // Glue footnote tokens to end of token stream\n  function footnote_tail (state) {\n    let tokens\n    let current\n    let currentLabel\n    let insideRef = false\n    const refTokens = {}\n\n    if (!state.env.footnotes) { return }\n\n    state.tokens = state.tokens.filter(function (tok) {\n      if (tok.type === 'footnote_reference_open') {\n        insideRef = true\n        current = []\n        currentLabel = tok.meta.label\n        return false\n      }\n      if (tok.type === 'footnote_reference_close') {\n        insideRef = false\n        // prepend ':' to avoid conflict with Object.prototype members\n        refTokens[':' + currentLabel] = current\n        return false\n      }\n      if (insideRef) { current.push(tok) }\n      return !insideRef\n    })\n\n    if (!state.env.footnotes.list) { return }\n    const list = state.env.footnotes.list\n\n    state.tokens.push(new state.Token('footnote_block_open', '', 1))\n\n    for (let i = 0, l = list.length; i < l; i++) {\n      const token_fo = new state.Token('footnote_open', '', 1)\n      token_fo.meta = { id: i, label: list[i].label }\n      state.tokens.push(token_fo)\n\n      if (list[i].tokens) {\n        tokens = []\n\n        const token_po = new state.Token('paragraph_open', 'p', 1)\n        token_po.block = true\n        tokens.push(token_po)\n\n        const token_i = new state.Token('inline', '', 0)\n        token_i.children = list[i].tokens\n        token_i.content = list[i].content\n        tokens.push(token_i)\n\n        const token_pc = new state.Token('paragraph_close', 'p', -1)\n        token_pc.block    = true\n        tokens.push(token_pc)\n      } else if (list[i].label) {\n        tokens = refTokens[`:${list[i].label}`]\n      }\n\n      if (tokens) state.tokens = state.tokens.concat(tokens)\n\n      let lastParagraph\n\n      if (state.tokens[state.tokens.length - 1].type === 'paragraph_close') {\n        lastParagraph = state.tokens.pop()\n      } else {\n        lastParagraph = null\n      }\n\n      const t = list[i].count > 0 ? list[i].count : 1\n      for (let j = 0; j < t; j++) {\n        const token_a = new state.Token('footnote_anchor', '', 0)\n        token_a.meta = { id: i, subId: j, label: list[i].label }\n        state.tokens.push(token_a)\n      }\n\n      if (lastParagraph) {\n        state.tokens.push(lastParagraph)\n      }\n\n      state.tokens.push(new state.Token('footnote_close', '', -1))\n    }\n\n    state.tokens.push(new state.Token('footnote_block_close', '', -1))\n  }\n\n  md.block.ruler.before('reference', 'footnote_def', footnote_def, { alt: ['paragraph', 'reference'] })\n  md.inline.ruler.after('image', 'footnote_inline', footnote_inline)\n  md.inline.ruler.after('footnote_inline', 'footnote_ref', footnote_ref)\n  md.core.ruler.after('inline', 'footnote_tail', footnote_tail)\n};\n"],"names":["render_footnote_anchor_name","tokens","idx","options","env","n","Number","meta","id","toString","prefix","docId","render_footnote_caption","subId","render_footnote_ref","slf","rules","footnote_anchor_name","caption","footnote_caption","refid","render_footnote_block_open","xhtmlOut","render_footnote_block_close","render_footnote_open","render_footnote_close","render_footnote_anchor","footnote_plugin","md","parseLinkLabel","helpers","isSpace","utils","renderer","footnote_ref","footnote_block_open","footnote_block_close","footnote_open","footnote_close","footnote_anchor","footnote_def","state","startLine","endLine","silent","start","bMarks","tShift","max","eMarks","src","charCodeAt","pos","footnotes","refs","label","slice","token_fref_o","Token","level","push","oldBMark","oldTShift","oldSCount","sCount","oldParentType","parentType","posAfterColon","initial","offset","ch","blkIndent","block","tokenize","token_fref_c","footnote_inline","posMax","labelStart","labelEnd","list","footnoteId","length","inline","parse","token","content","count","footnoteSubId","footnote_tail","current","currentLabel","insideRef","refTokens","filter","tok","type","i","l","token_fo","token_po","token_i","children","token_pc","concat","lastParagraph","pop","t","j","token_a","ruler","before","alt","after","core"],"mappings":"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"}