@mdit/plugin-footnote
Advanced tools
+1
-1
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"index.js","sources":["../src/plugin.ts"],"sourcesContent":["/**\n * Forked from https://github.com/markdown-it/markdown-it-footnote/blob/master/index.mjs\n */\n\nimport type { PluginSimple } from \"markdown-it\";\nimport type { RuleBlock } from \"markdown-it/lib/parser_block.mjs\";\nimport type { RuleCore } from \"markdown-it/lib/parser_core.mjs\";\nimport type { RuleInline } from \"markdown-it/lib/parser_inline.mjs\";\nimport type { RenderRule } from \"markdown-it/lib/renderer.mjs\";\nimport type { ParentType } from \"markdown-it/lib/rules_block/state_block.mjs\";\nimport type StateBlock from \"markdown-it/lib/rules_block/state_block.mjs\";\nimport type StateCore from \"markdown-it/lib/rules_core/state_core.mjs\";\nimport type StateInline from \"markdown-it/lib/rules_inline/state_inline.mjs\";\nimport type Token from \"markdown-it/lib/token.mjs\";\n\nimport type { FootNoteEnv, FootNoteToken } from \"./types.js\";\n\ninterface FootNoteStateBlock extends StateBlock {\n tokens: FootNoteToken[];\n env: FootNoteEnv;\n}\n\ninterface FootNoteStateInline extends StateInline {\n tokens: FootNoteToken[];\n env: FootNoteEnv;\n}\n\ninterface FootNoteStateCore extends StateCore {\n tokens: FootNoteToken[];\n env: FootNoteEnv;\n}\n\nconst getIDSuffix = (tokens: FootNoteToken[], index: number): string =>\n // add suffix when multiple id was found\n tokens[index].meta.subId > 0 ? `:${tokens[index].meta.subId}` : \"\";\n\nconst renderFootnoteAnchorName: RenderRule = (\n tokens: FootNoteToken[],\n index,\n _options,\n env: FootNoteEnv,\n): string =>\n `${\n // prefix\n typeof env.docId === \"string\" ? `-${env.docId}-` : \"\"\n }${\n // increasing id\n (tokens[index].meta.id + 1).toString()\n }`;\n\nconst renderFootnoteCaption: RenderRule = (\n tokens: FootNoteToken[],\n index,\n): string =>\n `[${\n // number\n (tokens[index].meta.id + 1).toString()\n }${getIDSuffix(tokens, index)}]`;\n\nconst renderFootnoteRef: RenderRule = (\n tokens: FootNoteToken[],\n index,\n options,\n env: FootNoteEnv,\n self,\n): string => {\n const id = self.rules[\"footnote_anchorName\"]!(\n tokens,\n index,\n options,\n env,\n self,\n );\n const caption = self.rules[\"footnote_caption\"]!(\n tokens,\n index,\n options,\n env,\n self,\n );\n\n return `<sup class=\"footnote-ref\"><a href=\"#footnote${id}\">${caption}</a><a class=\"footnote-anchor\" id=\"footnote-ref${id}${getIDSuffix(\n tokens,\n index,\n )}\" /></sup>`;\n};\n\nconst renderFootnoteBlockOpen: RenderRule = (\n _tokens: FootNoteToken[],\n _index,\n options,\n): string =>\n `\\\n<hr class=\"footnotes-sep\"${options.xhtmlOut ? \" /\" : \"\"}>\n<section class=\"footnotes\">\n<ol class=\"footnotes-list\">\n`;\n\nconst renderFootnoteBlockClose = (): string => `\\\n</ol>\n</section>\n`;\n\nconst renderFootnoteOpen: RenderRule = (\n tokens: FootNoteToken[],\n index,\n options,\n env: FootNoteEnv,\n self,\n): string =>\n `<li id=\"footnote${self.rules[\"footnote_anchorName\"]!(\n tokens,\n index,\n options,\n env,\n self,\n )}${getIDSuffix(tokens, index)}\" class=\"footnote-item\">`;\n\nconst renderFootnoteClose = (): string => \"</li>\\n\";\n\nconst renderFootnoteAnchor: RenderRule = (\n tokens: FootNoteToken[],\n index,\n options,\n env: FootNoteEnv,\n self,\n): string =>\n ` <a href=\"#footnote-ref${self.rules[\"footnote_anchorName\"]!(\n tokens,\n index,\n options,\n env,\n self,\n )}${\n getIDSuffix(tokens, index)\n /* ↩ with escape code to prevent display as Apple Emoji on iOS */\n }\" class=\"footnote-backref\">\\u21a9\\uFE0E</a>`;\n\n// Process footnote block definition\nconst footnoteDef: RuleBlock = (\n state: FootNoteStateBlock,\n startLine,\n endLine,\n silent,\n) => {\n const start = state.bMarks[startLine] + state.tShift[startLine];\n const max = state.eMarks[startLine];\n\n if (\n // line should be at least 5 chars - \"[^x]:\"\n start + 4 > max ||\n state.src.charAt(start) !== \"[\" ||\n state.src.charAt(start + 1) !== \"^\"\n )\n return false;\n\n let pos = start + 2;\n\n while (pos < max) {\n if (state.src.charAt(pos) === \" \") return false;\n if (state.src.charAt(pos) === \"]\") break;\n pos++;\n }\n\n if (\n // empty footnote label\n pos === start + 2 ||\n pos + 1 >= max ||\n state.src.charAt(++pos) !== \":\"\n )\n return false;\n\n if (silent) return true;\n pos++;\n\n (state.env.footnotes ??= {}).refs ??= {};\n\n const label = state.src.slice(start + 2, pos - 2);\n\n state.env.footnotes.refs[`:${label}`] = -1;\n\n const referenceOpenToken = state.push(\"footnote_reference_open\", \"\", 1);\n\n referenceOpenToken.meta = { label };\n referenceOpenToken.level = state.level++;\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 const posAfterColon = pos;\n const initial =\n state.sCount[startLine] +\n pos -\n (state.bMarks[startLine] + state.tShift[startLine]);\n\n let offset =\n state.sCount[startLine] +\n pos -\n (state.bMarks[startLine] + state.tShift[startLine]);\n\n while (pos < max) {\n const char = state.src.charAt(pos);\n\n if (char === \"\\t\") offset += 4 - (offset % 4);\n else if (char === \" \") offset++;\n else break;\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\" as unknown as ParentType;\n\n if (state.sCount[startLine] < state.blkIndent)\n state.sCount[startLine] += state.blkIndent;\n\n state.md.block.tokenize(state, startLine, endLine);\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 referenceCloseToken = state.push(\"footnote_reference_close\", \"\", -1);\n\n referenceCloseToken.level = --state.level;\n\n return true;\n};\n\n// Process inline footnotes (^[...])\nconst footnoteInline: RuleInline = (state: FootNoteStateInline, silent) => {\n const max = state.posMax;\n const start = state.pos;\n\n if (\n start + 2 >= max ||\n state.src.charAt(start) !== \"^\" ||\n state.src.charAt(start + 1) !== \"[\"\n )\n return false;\n\n const labelEnd = state.md.helpers.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 const labelStart = start + 2;\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 */\n if (!silent) {\n const list = ((state.env.footnotes ??= {}).list ??= []);\n const footnoteId = list.length;\n const tokens: Token[] = [];\n\n state.md.inline.parse(\n state.src.slice(labelStart, labelEnd),\n state.md,\n state.env,\n tokens,\n );\n\n const refToken = state.push(\"footnote_ref\", \"\", 0);\n\n refToken.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\n return true;\n};\n\n// Process footnote references ([^...])\nconst footnoteRef: RuleInline = (state: FootNoteStateInline, silent) => {\n const start = state.pos;\n const max = state.posMax;\n\n if (\n // should be at least 4 chars - \"[^x]\"\n start + 3 > max ||\n !state.env.footnotes?.refs ||\n state.src.charAt(start) !== \"[\" ||\n state.src.charAt(start + 1) !== \"^\"\n )\n return false;\n\n let pos = start + 2;\n\n while (pos < max) {\n if (state.src.charAt(pos) === \" \" || state.src.charAt(pos) === \"\\n\")\n return false;\n if (state.src.charAt(pos) === \"]\") break;\n pos++;\n }\n\n if (\n // empty footnote labels\n pos === start + 2 ||\n pos >= max\n )\n return false;\n\n pos++;\n\n const label = state.src.slice(start + 2, pos - 1);\n\n if (typeof state.env.footnotes.refs[`:${label}`] === \"undefined\")\n return false;\n\n if (!silent) {\n const list = (state.env.footnotes.list ??= []);\n const { refs } = state.env.footnotes;\n let footnoteId: number;\n\n if (refs[`:${label}`] < 0) {\n footnoteId = list.length;\n list[footnoteId] = { label, count: 0 };\n refs[`:${label}`] = footnoteId;\n } else {\n footnoteId = refs[`:${label}`];\n }\n\n const subId = list[footnoteId].count!;\n\n list[footnoteId].count = list[footnoteId].count! + 1;\n\n const refToken = state.push(\"footnote_ref\", \"\", 0);\n\n refToken.meta = { id: footnoteId, subId, label };\n }\n\n state.pos = pos;\n state.posMax = max;\n\n return true;\n};\n\n// Glue footnote tokens to end of token stream\nconst footnoteTail: RuleCore = (state: FootNoteStateCore): boolean => {\n const refTokens: Record<string, Token[]> = {};\n\n let current: Token[];\n let currentLabel: string;\n let insideRef = false;\n\n if (!state.env.footnotes?.list) return false;\n\n const { list } = state.env.footnotes;\n\n state.tokens = state.tokens.filter((stateToken) => {\n if (stateToken.type === \"footnote_reference_open\") {\n insideRef = true;\n current = [];\n currentLabel = stateToken.meta.label;\n\n return false;\n }\n\n if (stateToken.type === \"footnote_reference_close\") {\n insideRef = false;\n // prepend ':' to avoid conflict with Object.prototype members\n refTokens[`:${currentLabel}`] = current;\n\n return false;\n }\n if (insideRef) current.push(stateToken);\n\n return !insideRef;\n });\n\n const footnoteBlockOpenToken = new state.Token(\"footnote_block_open\", \"\", 1);\n\n state.tokens.push(footnoteBlockOpenToken);\n\n for (let i = 0, { length } = list; i < length; i++) {\n const footnoteOpenToken = new state.Token(\"footnote_open\", \"\", 1);\n\n footnoteOpenToken.meta = { id: i, label: list[i].label };\n state.tokens.push(footnoteOpenToken);\n\n let lastParagraph: FootNoteToken | null;\n\n if (list[i].tokens) {\n const paragraphOpenToken = new state.Token(\"paragraph_open\", \"p\", 1);\n\n paragraphOpenToken.block = true;\n\n const inlineToken = new state.Token(\"inline\", \"\", 0);\n\n inlineToken.children = list[i].tokens!;\n inlineToken.content = list[i].content!;\n\n const paragraphCloseToken = new state.Token(\"paragraph_close\", \"p\", -1);\n\n paragraphCloseToken.block = true;\n\n state.tokens.push(paragraphOpenToken, inlineToken, paragraphCloseToken);\n } else if (list[i].label) {\n const tokens = refTokens[`:${list[i].label!}`];\n\n if (tokens) state.tokens.push(...tokens);\n }\n\n if (state.tokens[state.tokens.length - 1].type === \"paragraph_close\")\n lastParagraph = state.tokens.pop() ?? null;\n else lastParagraph = null;\n\n for (let j = 0; j < (Number(list[i].count) > 0 ? list[i].count! : 1); j++) {\n const footnoteAnchorToken = new state.Token(\"footnote_anchor\", \"\", 0);\n\n footnoteAnchorToken.meta = { id: i, subId: j, label: list[i].label };\n state.tokens.push(footnoteAnchorToken);\n }\n\n if (lastParagraph) state.tokens.push(lastParagraph);\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 return true;\n};\n\nexport const footnote: PluginSimple = (md) => {\n md.renderer.rules[\"footnote_ref\"] = renderFootnoteRef;\n md.renderer.rules[\"footnote_block_open\"] = renderFootnoteBlockOpen;\n md.renderer.rules[\"footnote_block_close\"] = renderFootnoteBlockClose;\n md.renderer.rules[\"footnote_open\"] = renderFootnoteOpen;\n md.renderer.rules[\"footnote_close\"] = renderFootnoteClose;\n md.renderer.rules[\"footnote_anchor\"] = renderFootnoteAnchor;\n\n // helpers (only used in other rules, no tokens are attached to those)\n // helpers (only used in other rules, no tokens are attached to those)\n md.renderer.rules[\"footnote_caption\"] = renderFootnoteCaption;\n md.renderer.rules[\"footnote_anchorName\"] = renderFootnoteAnchorName;\n\n md.block.ruler.before(\"reference\", \"footnoteDef\", footnoteDef, {\n alt: [\"paragraph\", \"reference\"],\n });\n md.inline.ruler.after(\"image\", \"footnoteInline\", footnoteInline);\n md.inline.ruler.after(\"footnoteInline\", \"footnote_ref\", footnoteRef);\n md.core.ruler.after(\"inline\", \"footnoteTail\", footnoteTail);\n};\n"],"names":["getIDSuffix","tokens","index","renderFootnoteAnchorName","_options","env","renderFootnoteCaption","renderFootnoteRef","options","self","id","caption","renderFootnoteBlockOpen","_tokens","_index","renderFootnoteBlockClose","renderFootnoteOpen","renderFootnoteClose","renderFootnoteAnchor","footnoteDef","state","startLine","endLine","silent","start","max","pos","label","referenceOpenToken","oldBMark","oldTShift","oldSCount","oldParentType","posAfterColon","initial","offset","char","referenceCloseToken","footnoteInline","labelEnd","labelStart","footnoteId","refToken","footnoteRef","list","refs","subId","footnoteTail","refTokens","current","currentLabel","insideRef","stateToken","footnoteBlockOpenToken","i","length","footnoteOpenToken","lastParagraph","paragraphOpenToken","inlineToken","paragraphCloseToken","j","footnoteAnchorToken","footnote","md"],"mappings":"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"} | ||
| {"version":3,"file":"index.js","sources":["../src/plugin.ts"],"sourcesContent":["/**\n * Forked from https://github.com/markdown-it/markdown-it-footnote/blob/master/index.mjs\n */\n\nimport type { PluginSimple } from \"markdown-it\";\nimport type { RuleBlock } from \"markdown-it/lib/parser_block.mjs\";\nimport type { RuleCore } from \"markdown-it/lib/parser_core.mjs\";\nimport type { RuleInline } from \"markdown-it/lib/parser_inline.mjs\";\nimport type { RenderRule } from \"markdown-it/lib/renderer.mjs\";\nimport type { ParentType } from \"markdown-it/lib/rules_block/state_block.mjs\";\nimport type StateBlock from \"markdown-it/lib/rules_block/state_block.mjs\";\nimport type StateCore from \"markdown-it/lib/rules_core/state_core.mjs\";\nimport type StateInline from \"markdown-it/lib/rules_inline/state_inline.mjs\";\nimport type Token from \"markdown-it/lib/token.mjs\";\n\nimport type { FootNoteEnv, FootNoteToken } from \"./types.js\";\n\ninterface FootNoteStateBlock extends StateBlock {\n tokens: FootNoteToken[];\n env: FootNoteEnv;\n}\n\ninterface FootNoteStateInline extends StateInline {\n tokens: FootNoteToken[];\n env: FootNoteEnv;\n}\n\ninterface FootNoteStateCore extends StateCore {\n tokens: FootNoteToken[];\n env: FootNoteEnv;\n}\n\nconst getIDSuffix = (tokens: FootNoteToken[], index: number): string =>\n // add suffix when multiple id was found\n tokens[index].meta.subId > 0 ? `:${tokens[index].meta.subId}` : \"\";\n\nconst renderFootnoteAnchorName: RenderRule = (\n tokens: FootNoteToken[],\n index,\n _options,\n env: FootNoteEnv,\n): string =>\n `${\n // prefix\n typeof env.docId === \"string\" ? `-${env.docId}-` : \"\"\n }${\n // increasing id\n (tokens[index].meta.id + 1).toString()\n }`;\n\nconst renderFootnoteCaption: RenderRule = (\n tokens: FootNoteToken[],\n index,\n): string =>\n `[${\n // number\n (tokens[index].meta.id + 1).toString()\n }${getIDSuffix(tokens, index)}]`;\n\nconst renderFootnoteRef: RenderRule = (\n tokens: FootNoteToken[],\n index,\n options,\n env: FootNoteEnv,\n self,\n): string => {\n const id = self.rules.footnote_anchorName!(tokens, index, options, env, self);\n const caption = self.rules.footnote_caption!(\n tokens,\n index,\n options,\n env,\n self,\n );\n\n return `<sup class=\"footnote-ref\"><a href=\"#footnote${id}\">${caption}</a><a class=\"footnote-anchor\" id=\"footnote-ref${id}${getIDSuffix(\n tokens,\n index,\n )}\" /></sup>`;\n};\n\nconst renderFootnoteBlockOpen: RenderRule = (\n _tokens: FootNoteToken[],\n _index,\n options,\n): string =>\n `\\\n<hr class=\"footnotes-sep\"${options.xhtmlOut ? \" /\" : \"\"}>\n<section class=\"footnotes\">\n<ol class=\"footnotes-list\">\n`;\n\nconst renderFootnoteBlockClose = (): string => `\\\n</ol>\n</section>\n`;\n\nconst renderFootnoteOpen: RenderRule = (\n tokens: FootNoteToken[],\n index,\n options,\n env: FootNoteEnv,\n self,\n): string =>\n `<li id=\"footnote${self.rules.footnote_anchorName!(\n tokens,\n index,\n options,\n env,\n self,\n )}${getIDSuffix(tokens, index)}\" class=\"footnote-item\">`;\n\nconst renderFootnoteClose = (): string => \"</li>\\n\";\n\nconst renderFootnoteAnchor: RenderRule = (\n tokens: FootNoteToken[],\n index,\n options,\n env: FootNoteEnv,\n self,\n): string =>\n ` <a href=\"#footnote-ref${self.rules.footnote_anchorName!(\n tokens,\n index,\n options,\n env,\n self,\n )}${\n getIDSuffix(tokens, index)\n /* ↩ with escape code to prevent display as Apple Emoji on iOS */\n }\" class=\"footnote-backref\">\\u21a9\\uFE0E</a>`;\n\n// Process footnote block definition\nconst footnoteDef: RuleBlock = (\n state: FootNoteStateBlock,\n startLine,\n endLine,\n silent,\n) => {\n const start = state.bMarks[startLine] + state.tShift[startLine];\n const max = state.eMarks[startLine];\n\n if (\n // line should be at least 5 chars - \"[^x]:\"\n start + 4 > max ||\n state.src.charAt(start) !== \"[\" ||\n state.src.charAt(start + 1) !== \"^\"\n )\n return false;\n\n let pos = start + 2;\n\n while (pos < max) {\n if (state.src.charAt(pos) === \" \") return false;\n if (state.src.charAt(pos) === \"]\") break;\n pos++;\n }\n\n if (\n // empty footnote label\n pos === start + 2 ||\n pos + 1 >= max ||\n state.src.charAt(++pos) !== \":\"\n )\n return false;\n\n if (silent) return true;\n pos++;\n\n (state.env.footnotes ??= {}).refs ??= {};\n\n const label = state.src.slice(start + 2, pos - 2);\n\n state.env.footnotes.refs[`:${label}`] = -1;\n\n const referenceOpenToken = state.push(\"footnote_reference_open\", \"\", 1);\n\n referenceOpenToken.meta = { label };\n referenceOpenToken.level = state.level++;\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 const posAfterColon = pos;\n const initial =\n state.sCount[startLine] +\n pos -\n (state.bMarks[startLine] + state.tShift[startLine]);\n\n let offset =\n state.sCount[startLine] +\n pos -\n (state.bMarks[startLine] + state.tShift[startLine]);\n\n while (pos < max) {\n const char = state.src.charAt(pos);\n\n if (char === \"\\t\") offset += 4 - (offset % 4);\n else if (char === \" \") offset++;\n else break;\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\" as unknown as ParentType;\n\n if (state.sCount[startLine] < state.blkIndent)\n state.sCount[startLine] += state.blkIndent;\n\n state.md.block.tokenize(state, startLine, endLine);\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 referenceCloseToken = state.push(\"footnote_reference_close\", \"\", -1);\n\n referenceCloseToken.level = --state.level;\n\n return true;\n};\n\n// Process inline footnotes (^[...])\nconst footnoteInline: RuleInline = (state: FootNoteStateInline, silent) => {\n const max = state.posMax;\n const start = state.pos;\n\n if (\n start + 2 >= max ||\n state.src.charAt(start) !== \"^\" ||\n state.src.charAt(start + 1) !== \"[\"\n )\n return false;\n\n const labelEnd = state.md.helpers.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 const labelStart = start + 2;\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 */\n if (!silent) {\n const list = ((state.env.footnotes ??= {}).list ??= []);\n const footnoteId = list.length;\n const tokens: Token[] = [];\n\n state.md.inline.parse(\n state.src.slice(labelStart, labelEnd),\n state.md,\n state.env,\n tokens,\n );\n\n const refToken = state.push(\"footnote_ref\", \"\", 0);\n\n refToken.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\n return true;\n};\n\n// Process footnote references ([^...])\nconst footnoteRef: RuleInline = (state: FootNoteStateInline, silent) => {\n const start = state.pos;\n const max = state.posMax;\n\n if (\n // should be at least 4 chars - \"[^x]\"\n start + 3 > max ||\n !state.env.footnotes?.refs ||\n state.src.charAt(start) !== \"[\" ||\n state.src.charAt(start + 1) !== \"^\"\n )\n return false;\n\n let pos = start + 2;\n\n while (pos < max) {\n if (state.src.charAt(pos) === \" \" || state.src.charAt(pos) === \"\\n\")\n return false;\n if (state.src.charAt(pos) === \"]\") break;\n pos++;\n }\n\n if (\n // empty footnote labels\n pos === start + 2 ||\n pos >= max\n )\n return false;\n\n pos++;\n\n const label = state.src.slice(start + 2, pos - 1);\n\n if (typeof state.env.footnotes.refs[`:${label}`] === \"undefined\")\n return false;\n\n if (!silent) {\n const list = (state.env.footnotes.list ??= []);\n const { refs } = state.env.footnotes;\n let footnoteId: number;\n\n if (refs[`:${label}`] < 0) {\n footnoteId = list.length;\n list[footnoteId] = { label, count: 0 };\n refs[`:${label}`] = footnoteId;\n } else {\n footnoteId = refs[`:${label}`];\n }\n\n const subId = list[footnoteId].count!;\n\n list[footnoteId].count = list[footnoteId].count! + 1;\n\n const refToken = state.push(\"footnote_ref\", \"\", 0);\n\n refToken.meta = { id: footnoteId, subId, label };\n }\n\n state.pos = pos;\n state.posMax = max;\n\n return true;\n};\n\n// Glue footnote tokens to end of token stream\nconst footnoteTail: RuleCore = (state: FootNoteStateCore): boolean => {\n const refTokens: Record<string, Token[]> = {};\n\n let current: Token[];\n let currentLabel: string;\n let insideRef = false;\n\n if (!state.env.footnotes?.list) return false;\n\n const { list } = state.env.footnotes;\n\n state.tokens = state.tokens.filter((stateToken) => {\n if (stateToken.type === \"footnote_reference_open\") {\n insideRef = true;\n current = [];\n currentLabel = stateToken.meta.label;\n\n return false;\n }\n\n if (stateToken.type === \"footnote_reference_close\") {\n insideRef = false;\n // prepend ':' to avoid conflict with Object.prototype members\n refTokens[`:${currentLabel}`] = current;\n\n return false;\n }\n if (insideRef) current.push(stateToken);\n\n return !insideRef;\n });\n\n const footnoteBlockOpenToken = new state.Token(\"footnote_block_open\", \"\", 1);\n\n state.tokens.push(footnoteBlockOpenToken);\n\n for (let i = 0, { length } = list; i < length; i++) {\n const footnoteOpenToken = new state.Token(\"footnote_open\", \"\", 1);\n\n footnoteOpenToken.meta = { id: i, label: list[i].label };\n state.tokens.push(footnoteOpenToken);\n\n let lastParagraph: FootNoteToken | null;\n\n if (list[i].tokens) {\n const paragraphOpenToken = new state.Token(\"paragraph_open\", \"p\", 1);\n\n paragraphOpenToken.block = true;\n\n const inlineToken = new state.Token(\"inline\", \"\", 0);\n\n inlineToken.children = list[i].tokens!;\n inlineToken.content = list[i].content!;\n\n const paragraphCloseToken = new state.Token(\"paragraph_close\", \"p\", -1);\n\n paragraphCloseToken.block = true;\n\n state.tokens.push(paragraphOpenToken, inlineToken, paragraphCloseToken);\n } else if (list[i].label) {\n const tokens = refTokens[`:${list[i].label!}`];\n\n if (tokens) state.tokens.push(...tokens);\n }\n\n if (state.tokens[state.tokens.length - 1].type === \"paragraph_close\")\n lastParagraph = state.tokens.pop() ?? null;\n else lastParagraph = null;\n\n for (let j = 0; j < (Number(list[i].count) > 0 ? list[i].count! : 1); j++) {\n const footnoteAnchorToken = new state.Token(\"footnote_anchor\", \"\", 0);\n\n footnoteAnchorToken.meta = { id: i, subId: j, label: list[i].label };\n state.tokens.push(footnoteAnchorToken);\n }\n\n if (lastParagraph) state.tokens.push(lastParagraph);\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 return true;\n};\n\nexport const footnote: PluginSimple = (md) => {\n md.renderer.rules.footnote_ref = renderFootnoteRef;\n md.renderer.rules.footnote_block_open = renderFootnoteBlockOpen;\n md.renderer.rules.footnote_block_close = renderFootnoteBlockClose;\n md.renderer.rules.footnote_open = renderFootnoteOpen;\n md.renderer.rules.footnote_close = renderFootnoteClose;\n md.renderer.rules.footnote_anchor = renderFootnoteAnchor;\n\n // helpers (only used in other rules, no tokens are attached to those)\n // helpers (only used in other rules, no tokens are attached to those)\n md.renderer.rules.footnote_caption = renderFootnoteCaption;\n md.renderer.rules.footnote_anchorName = renderFootnoteAnchorName;\n\n md.block.ruler.before(\"reference\", \"footnoteDef\", footnoteDef, {\n alt: [\"paragraph\", \"reference\"],\n });\n md.inline.ruler.after(\"image\", \"footnoteInline\", footnoteInline);\n md.inline.ruler.after(\"footnoteInline\", \"footnote_ref\", footnoteRef);\n md.core.ruler.after(\"inline\", \"footnoteTail\", footnoteTail);\n};\n"],"names":["getIDSuffix","tokens","index","renderFootnoteAnchorName","_options","env","renderFootnoteCaption","renderFootnoteRef","options","self","id","caption","renderFootnoteBlockOpen","_tokens","_index","renderFootnoteBlockClose","renderFootnoteOpen","renderFootnoteClose","renderFootnoteAnchor","footnoteDef","state","startLine","endLine","silent","start","max","pos","label","referenceOpenToken","oldBMark","oldTShift","oldSCount","oldParentType","posAfterColon","initial","offset","char","referenceCloseToken","footnoteInline","labelEnd","labelStart","footnoteId","refToken","footnoteRef","list","refs","subId","footnoteTail","refTokens","current","currentLabel","insideRef","stateToken","footnoteBlockOpenToken","i","length","footnoteOpenToken","lastParagraph","paragraphOpenToken","inlineToken","paragraphCloseToken","j","footnoteAnchorToken","footnote","md"],"mappings":"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"} |
+1
-1
| { | ||
| "name": "@mdit/plugin-footnote", | ||
| "version": "0.13.1", | ||
| "version": "0.14.0", | ||
| "description": "footnote plugin for MarkdownIt", | ||
@@ -5,0 +5,0 @@ "keywords": [ |
28612
-0.32%