@mdit/plugin-footnote
Advanced tools
+1
-1
@@ -1,2 +0,2 @@ | ||
| "use strict";var m=require("markdown-it/lib/helpers/parse_link_label.js"),i=require("markdown-it/lib/token.js");const h=(e,n)=>e[n].meta.subId>0?`:${e[n].meta.subId}`:"",A=(e,n,t,s)=>`${typeof s.docId=="string"?`-${s.docId}-`:""}${(e[n].meta.id+1).toString()}`,C=(e,n)=>`[${(e[n].meta.id+1).toString()}${h(e,n)}]`,g=(e,n,t,s,o)=>{const c=o.rules.footnoteAnchorName(e,n,t,s,o),f=o.rules.footnoteCaption(e,n,t,s,o);return`<sup class="footnote-ref"><a href="#footnote${c}">${f}</a><a class="footnote-anchor" id="footnote-ref${c}${h(e,n)}" /></sup>`},I=(e,n,t)=>`<hr class="footnotes-sep"${t.xhtmlOut?" /":""}> | ||
| "use strict";var m=require("markdown-it/lib/helpers/parse_link_label.mjs"),i=require("markdown-it/lib/token.mjs");const h=(e,n)=>e[n].meta.subId>0?`:${e[n].meta.subId}`:"",A=(e,n,t,s)=>`${typeof s.docId=="string"?`-${s.docId}-`:""}${(e[n].meta.id+1).toString()}`,C=(e,n)=>`[${(e[n].meta.id+1).toString()}${h(e,n)}]`,g=(e,n,t,s,o)=>{const c=o.rules.footnoteAnchorName(e,n,t,s,o),f=o.rules.footnoteCaption(e,n,t,s,o);return`<sup class="footnote-ref"><a href="#footnote${c}">${f}</a><a class="footnote-anchor" id="footnote-ref${c}${h(e,n)}" /></sup>`},I=(e,n,t)=>`<hr class="footnotes-sep"${t.xhtmlOut?" /":""}> | ||
| <section class="footnotes"> | ||
@@ -3,0 +3,0 @@ <ol class="footnotes-list"> |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"index.cjs","sources":["../src/plugin.ts"],"sourcesContent":["/**\n * Forked from https://github.com/markdown-it/markdown-it-footnote/blob/master/index.js\n */\n\nimport { type PluginSimple } from \"markdown-it\";\nimport parseLinkLabel from \"markdown-it/lib/helpers/parse_link_label.js\";\nimport { type RuleBlock } from \"markdown-it/lib/parser_block.js\";\nimport { type RuleInline } from \"markdown-it/lib/parser_inline.js\";\nimport type Renderer from \"markdown-it/lib/renderer.js\";\nimport type StateBlock from \"markdown-it/lib/rules_block/state_block.js\";\nimport type StateCore from \"markdown-it/lib/rules_core/state_core.js\";\nimport type StateInline from \"markdown-it/lib/rules_inline/state_inline.js\";\nimport Token from \"markdown-it/lib/token.js\";\n\nimport { type FootNoteEnv, type 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: Renderer.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: Renderer.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: Renderer.RenderRule = (\n tokens: FootNoteToken[],\n index,\n options,\n env: FootNoteEnv,\n self,\n): string => {\n const id = self.rules[\"footnoteAnchorName\"]!(\n tokens,\n index,\n options,\n env,\n self,\n );\n const caption = self.rules[\"footnoteCaption\"]!(\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: Renderer.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: Renderer.RenderRule = (\n tokens: FootNoteToken[],\n index,\n options,\n env: FootNoteEnv,\n self,\n): string =>\n `<li id=\"footnote${self.rules[\"footnoteAnchorName\"]!(\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: Renderer.RenderRule = (\n tokens: FootNoteToken[],\n index,\n options,\n env: FootNoteEnv,\n self,\n): string =>\n ` <a href=\"#footnote-ref${self.rules[\"footnoteAnchorName\"]!(\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 let pos;\n let token;\n let offset;\n let ch;\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.charAt(start) !== \"[\") return false;\n\n if (state.src.charAt(start + 1) !== \"^\") return false;\n\n for (pos = start + 2; pos < max; pos++) {\n if (state.src.charAt(pos) === \" \") return false;\n if (state.src.charAt(pos) === \"]\") break;\n }\n\n // no empty footnote labels\n if (pos === start + 2) return false;\n\n if (pos + 1 >= max || state.src.charAt(++pos) !== \":\") return false;\n\n if (silent) return true;\n pos += 1;\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\n state.env.footnotes.refs[`:${label}`] = -1;\n\n token = new Token(\"footnoteReferenceOpen\", \"\", 1);\n token.meta = { label };\n token.level = state.level++;\n state.tokens.push(token);\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 offset =\n state.sCount[startLine] +\n pos -\n (state.bMarks[startLine] + state.tShift[startLine]);\n\n while (pos < max) {\n ch = state.src.charAt(pos);\n\n if (ch === \"\\t\") offset += 4 - (offset % 4);\n else if (ch === \" \") offset += 1;\n else break;\n\n pos += 1;\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 StateBlock.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 token = new Token(\"footnoteReferenceClose\", \"\", -1);\n token.level = --state.level;\n state.tokens.push(token);\n\n return true;\n};\n\n// Process inline footnotes (^[...])\nconst footnoteInline: RuleInline = (state: FootNoteStateInline, silent) => {\n let footnoteId;\n let token;\n let tokens: Token[];\n const max = state.posMax;\n const start = state.pos;\n\n if (start + 2 >= max) return false;\n if (state.src.charAt(start) !== \"^\") return false;\n\n if (state.src.charAt(start + 1) !== \"[\") 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 /*\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 if (!state.env.footnotes) state.env.footnotes = {};\n if (!state.env.footnotes.list) state.env.footnotes.list = [];\n footnoteId = state.env.footnotes.list.length;\n\n state.md.inline.parse(\n state.src.slice(labelStart, labelEnd),\n state.md,\n state.env,\n (tokens = []),\n );\n\n token = state.push(\"footnoteRef\", \"\", 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\n return true;\n};\n\n// Process footnote references ([^...])\nconst footnoteRef: RuleInline = (state: FootNoteStateInline, silent) => {\n let pos;\n let footnoteId;\n let footnoteSubId;\n let token;\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.charAt(start) !== \"[\") return false;\n\n if (state.src.charAt(start + 1) !== \"^\") return false;\n\n for (pos = start + 2; pos < max; pos++) {\n if (state.src.charAt(pos) === \" \") return false;\n if (state.src.charAt(pos) === \"\\n\") return false;\n if (state.src.charAt(pos) === \"]\") break;\n }\n\n if (pos === start + 2) return false; // no empty footnote labels\n if (pos >= max) return false;\n\n pos += 1;\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 if (!state.env.footnotes.list) state.env.footnotes.list = [];\n\n if (state.env.footnotes.refs[`:${label}`] < 0) {\n footnoteId = state.env.footnotes.list.length;\n state.env.footnotes.list[footnoteId] = { label, count: 0 };\n state.env.footnotes.refs[`:${label}`] = footnoteId;\n } else {\n footnoteId = state.env.footnotes.refs[`:${label}`];\n }\n\n footnoteSubId = state.env.footnotes.list[footnoteId].count!;\n state.env.footnotes.list[footnoteId].count =\n state.env.footnotes.list[footnoteId].count! + 1;\n\n token = state.push(\"footnoteRef\", \"\", 0);\n token.meta = { id: footnoteId, subId: footnoteSubId, 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 = (state: FootNoteStateCore): boolean => {\n let lastParagraph: FootNoteToken | null;\n let token: Token;\n let tokens: Token[];\n let current: Token[];\n let currentLabel: string;\n let insideRef = false;\n const refTokens: Record<string, Token[]> = {};\n\n if (!state.env.footnotes) return false;\n\n state.tokens = state.tokens.filter((stateToken) => {\n if (stateToken.type === \"footnoteReferenceOpen\") {\n insideRef = true;\n current = [];\n currentLabel = stateToken.meta.label;\n\n return false;\n }\n if (stateToken.type === \"footnoteReferenceClose\") {\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 if (!state.env.footnotes.list) return false;\n const { list } = state.env.footnotes;\n\n token = new Token(\"footnoteBlockOpen\", \"\", 1);\n state.tokens.push(token);\n\n for (let i = 0, { length } = list; i < length; i++) {\n token = new Token(\"footnoteOpen\", \"\", 1);\n token.meta = { id: i, label: list[i].label };\n state.tokens.push(token);\n\n if (list[i].tokens) {\n tokens = [];\n\n token = new Token(\"paragraph_open\", \"p\", 1);\n token.block = true;\n tokens.push(token);\n\n token = new Token(\"inline\", \"\", 0);\n token.children = list[i].tokens!;\n token.content = list[i].content!;\n tokens.push(token);\n\n token = new Token(\"paragraph_close\", \"p\", -1);\n token.block = true;\n tokens.push(token);\n } else if (list[i].label) {\n tokens = refTokens[`:${list[i].label!}`];\n } else {\n tokens = [];\n }\n\n if (tokens) state.tokens = state.tokens.concat(tokens);\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 token = new Token(\"footnoteAnchor\", \"\", 0);\n token.meta = { id: i, subId: j, label: list[i].label };\n state.tokens.push(token);\n }\n\n if (lastParagraph) state.tokens.push(lastParagraph);\n\n token = new Token(\"footnoteClose\", \"\", -1);\n state.tokens.push(token);\n }\n\n token = new Token(\"footnoteBlockClose\", \"\", -1);\n state.tokens.push(token);\n\n return true;\n};\n\nexport const footnote: PluginSimple = (md) => {\n md.renderer.rules[\"footnoteRef\"] = renderFootnoteRef;\n md.renderer.rules[\"footnoteBlockOpen\"] = renderFootnoteBlockOpen;\n md.renderer.rules[\"footnoteBlockClose\"] = renderFootnoteBlockClose;\n md.renderer.rules[\"footnoteOpen\"] = renderFootnoteOpen;\n md.renderer.rules[\"footnoteClose\"] = renderFootnoteClose;\n md.renderer.rules[\"footnoteAnchor\"] = 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[\"footnoteCaption\"] = renderFootnoteCaption;\n md.renderer.rules[\"footnoteAnchorName\"] = 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\", \"footnoteRef\", 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","pos","token","offset","ch","start","max","label","Token","oldBMark","oldTShift","oldSCount","oldParentType","posAfterColon","initial","footnoteInline","footnoteId","labelStart","labelEnd","parseLinkLabel","footnoteRef","footnoteSubId","footnoteTail","lastParagraph","current","currentLabel","insideRef","refTokens","stateToken","list","i","length","j","footnote","md"],"mappings":"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"} | ||
| {"version":3,"file":"index.cjs","sources":["../src/plugin.ts"],"sourcesContent":["/**\n * Forked from https://github.com/markdown-it/markdown-it-footnote/blob/master/index.js\n */\n\nimport { type PluginSimple } from \"markdown-it\";\nimport parseLinkLabel from \"markdown-it/lib/helpers/parse_link_label.mjs\";\nimport { type RuleBlock } from \"markdown-it/lib/parser_block.js\";\nimport { type RuleInline } from \"markdown-it/lib/parser_inline.js\";\nimport type Renderer from \"markdown-it/lib/renderer.js\";\nimport type StateBlock from \"markdown-it/lib/rules_block/state_block.js\";\nimport type StateCore from \"markdown-it/lib/rules_core/state_core.js\";\nimport type StateInline from \"markdown-it/lib/rules_inline/state_inline.js\";\nimport Token from \"markdown-it/lib/token.mjs\";\n\nimport { type FootNoteEnv, type 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: Renderer.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: Renderer.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: Renderer.RenderRule = (\n tokens: FootNoteToken[],\n index,\n options,\n env: FootNoteEnv,\n self,\n): string => {\n const id = self.rules[\"footnoteAnchorName\"]!(\n tokens,\n index,\n options,\n env,\n self,\n );\n const caption = self.rules[\"footnoteCaption\"]!(\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: Renderer.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: Renderer.RenderRule = (\n tokens: FootNoteToken[],\n index,\n options,\n env: FootNoteEnv,\n self,\n): string =>\n `<li id=\"footnote${self.rules[\"footnoteAnchorName\"]!(\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: Renderer.RenderRule = (\n tokens: FootNoteToken[],\n index,\n options,\n env: FootNoteEnv,\n self,\n): string =>\n ` <a href=\"#footnote-ref${self.rules[\"footnoteAnchorName\"]!(\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 let pos;\n let token;\n let offset;\n let ch;\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.charAt(start) !== \"[\") return false;\n\n if (state.src.charAt(start + 1) !== \"^\") return false;\n\n for (pos = start + 2; pos < max; pos++) {\n if (state.src.charAt(pos) === \" \") return false;\n if (state.src.charAt(pos) === \"]\") break;\n }\n\n // no empty footnote labels\n if (pos === start + 2) return false;\n\n if (pos + 1 >= max || state.src.charAt(++pos) !== \":\") return false;\n\n if (silent) return true;\n pos += 1;\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\n state.env.footnotes.refs[`:${label}`] = -1;\n\n token = new Token(\"footnoteReferenceOpen\", \"\", 1);\n token.meta = { label };\n token.level = state.level++;\n state.tokens.push(token);\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 offset =\n state.sCount[startLine] +\n pos -\n (state.bMarks[startLine] + state.tShift[startLine]);\n\n while (pos < max) {\n ch = state.src.charAt(pos);\n\n if (ch === \"\\t\") offset += 4 - (offset % 4);\n else if (ch === \" \") offset += 1;\n else break;\n\n pos += 1;\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 StateBlock.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 token = new Token(\"footnoteReferenceClose\", \"\", -1);\n token.level = --state.level;\n state.tokens.push(token);\n\n return true;\n};\n\n// Process inline footnotes (^[...])\nconst footnoteInline: RuleInline = (state: FootNoteStateInline, silent) => {\n let footnoteId;\n let token;\n let tokens: Token[];\n const max = state.posMax;\n const start = state.pos;\n\n if (start + 2 >= max) return false;\n if (state.src.charAt(start) !== \"^\") return false;\n\n if (state.src.charAt(start + 1) !== \"[\") 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 /*\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 if (!state.env.footnotes) state.env.footnotes = {};\n if (!state.env.footnotes.list) state.env.footnotes.list = [];\n footnoteId = state.env.footnotes.list.length;\n\n state.md.inline.parse(\n state.src.slice(labelStart, labelEnd),\n state.md,\n state.env,\n (tokens = []),\n );\n\n token = state.push(\"footnoteRef\", \"\", 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\n return true;\n};\n\n// Process footnote references ([^...])\nconst footnoteRef: RuleInline = (state: FootNoteStateInline, silent) => {\n let pos;\n let footnoteId;\n let footnoteSubId;\n let token;\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.charAt(start) !== \"[\") return false;\n\n if (state.src.charAt(start + 1) !== \"^\") return false;\n\n for (pos = start + 2; pos < max; pos++) {\n if (state.src.charAt(pos) === \" \") return false;\n if (state.src.charAt(pos) === \"\\n\") return false;\n if (state.src.charAt(pos) === \"]\") break;\n }\n\n if (pos === start + 2) return false; // no empty footnote labels\n if (pos >= max) return false;\n\n pos += 1;\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 if (!state.env.footnotes.list) state.env.footnotes.list = [];\n\n if (state.env.footnotes.refs[`:${label}`] < 0) {\n footnoteId = state.env.footnotes.list.length;\n state.env.footnotes.list[footnoteId] = { label, count: 0 };\n state.env.footnotes.refs[`:${label}`] = footnoteId;\n } else {\n footnoteId = state.env.footnotes.refs[`:${label}`];\n }\n\n footnoteSubId = state.env.footnotes.list[footnoteId].count!;\n state.env.footnotes.list[footnoteId].count =\n state.env.footnotes.list[footnoteId].count! + 1;\n\n token = state.push(\"footnoteRef\", \"\", 0);\n token.meta = { id: footnoteId, subId: footnoteSubId, 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 = (state: FootNoteStateCore): boolean => {\n let lastParagraph: FootNoteToken | null;\n let token: Token;\n let tokens: Token[];\n let current: Token[];\n let currentLabel: string;\n let insideRef = false;\n const refTokens: Record<string, Token[]> = {};\n\n if (!state.env.footnotes) return false;\n\n state.tokens = state.tokens.filter((stateToken) => {\n if (stateToken.type === \"footnoteReferenceOpen\") {\n insideRef = true;\n current = [];\n currentLabel = stateToken.meta.label;\n\n return false;\n }\n if (stateToken.type === \"footnoteReferenceClose\") {\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 if (!state.env.footnotes.list) return false;\n const { list } = state.env.footnotes;\n\n token = new Token(\"footnoteBlockOpen\", \"\", 1);\n state.tokens.push(token);\n\n for (let i = 0, { length } = list; i < length; i++) {\n token = new Token(\"footnoteOpen\", \"\", 1);\n token.meta = { id: i, label: list[i].label };\n state.tokens.push(token);\n\n if (list[i].tokens) {\n tokens = [];\n\n token = new Token(\"paragraph_open\", \"p\", 1);\n token.block = true;\n tokens.push(token);\n\n token = new Token(\"inline\", \"\", 0);\n token.children = list[i].tokens!;\n token.content = list[i].content!;\n tokens.push(token);\n\n token = new Token(\"paragraph_close\", \"p\", -1);\n token.block = true;\n tokens.push(token);\n } else if (list[i].label) {\n tokens = refTokens[`:${list[i].label!}`];\n } else {\n tokens = [];\n }\n\n if (tokens) state.tokens = state.tokens.concat(tokens);\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 token = new Token(\"footnoteAnchor\", \"\", 0);\n token.meta = { id: i, subId: j, label: list[i].label };\n state.tokens.push(token);\n }\n\n if (lastParagraph) state.tokens.push(lastParagraph);\n\n token = new Token(\"footnoteClose\", \"\", -1);\n state.tokens.push(token);\n }\n\n token = new Token(\"footnoteBlockClose\", \"\", -1);\n state.tokens.push(token);\n\n return true;\n};\n\nexport const footnote: PluginSimple = (md) => {\n md.renderer.rules[\"footnoteRef\"] = renderFootnoteRef;\n md.renderer.rules[\"footnoteBlockOpen\"] = renderFootnoteBlockOpen;\n md.renderer.rules[\"footnoteBlockClose\"] = renderFootnoteBlockClose;\n md.renderer.rules[\"footnoteOpen\"] = renderFootnoteOpen;\n md.renderer.rules[\"footnoteClose\"] = renderFootnoteClose;\n md.renderer.rules[\"footnoteAnchor\"] = 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[\"footnoteCaption\"] = renderFootnoteCaption;\n md.renderer.rules[\"footnoteAnchorName\"] = 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\", \"footnoteRef\", 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","pos","token","offset","ch","start","max","label","Token","oldBMark","oldTShift","oldSCount","oldParentType","posAfterColon","initial","footnoteInline","footnoteId","labelStart","labelEnd","parseLinkLabel","footnoteRef","footnoteSubId","footnoteTail","lastParagraph","current","currentLabel","insideRef","refTokens","stateToken","list","i","length","j","footnote","md"],"mappings":"kHA+BA,MAAMA,EAAc,CAACC,EAAyBC,IAE5CD,EAAOC,CAAK,EAAE,KAAK,MAAQ,EAAI,IAAID,EAAOC,CAAK,EAAE,KAAK,KAAK,GAAK,GAE5DC,EAAgD,CACpDF,EACAC,EACAE,EACAC,IAEA,GAEE,OAAOA,EAAI,OAAU,SAAW,IAAIA,EAAI,KAAK,IAAM,EACrD,IAEGJ,EAAOC,CAAK,EAAE,KAAK,GAAK,GAAG,SAAA,CAC9B,GAEII,EAA6C,CACjDL,EACAC,IAEA,KAEGD,EAAOC,CAAK,EAAE,KAAK,GAAK,GAAG,SAC9B,CAAA,GAAGF,EAAYC,EAAQC,CAAK,CAAC,IAEzBK,EAAyC,CAC7CN,EACAC,EACAM,EACAH,EACAI,IACW,CACX,MAAMC,EAAKD,EAAK,MAAM,mBACpBR,EACAC,EACAM,EACAH,EACAI,CACF,EACME,EAAUF,EAAK,MAAM,gBACzBR,EACAC,EACAM,EACAH,EACAI,CACF,EAEA,MAAO,+CAA+CC,CAAE,KAAKC,CAAO,kDAAkDD,CAAE,GAAGV,EACzHC,EACAC,CACF,CAAC,YACH,EAEMU,EAA+C,CACnDC,EACAC,EACAN,IAEA,4BACyBA,EAAQ,SAAW,KAAO,EAAE;AAAA;AAAA;AAAA,EAKjDO,EAA2B,IAAc;AAAA;AAAA,EAKzCC,EAA0C,CAC9Cf,EACAC,EACAM,EACAH,EACAI,IAEA,mBAAmBA,EAAK,MAAM,mBAC5BR,EACAC,EACAM,EACAH,EACAI,CACF,CAAC,GAAGT,EAAYC,EAAQC,CAAK,CAAC,2BAE1Be,EAAsB,IAAc;AAAA,EAEpCC,EAA4C,CAChDjB,EACAC,EACAM,EACAH,EACAI,IAEA,0BAA0BA,EAAK,MAAM,mBACnCR,EACAC,EACAM,EACAH,EACAI,CACF,CAAC,GACCT,EAAYC,EAAQC,CAAK,CAE3B,oCAGIiB,EAAyB,CAC7BC,EACAC,EACAC,EACAC,IACG,CACH,IAAIC,EACAC,EACAC,EACAC,EACJ,MAAMC,EAAQR,EAAM,OAAOC,CAAS,EAAID,EAAM,OAAOC,CAAS,EACxDQ,EAAMT,EAAM,OAAOC,CAAS,EAOlC,GAJIO,EAAQ,EAAIC,GAEZT,EAAM,IAAI,OAAOQ,CAAK,IAAM,KAE5BR,EAAM,IAAI,OAAOQ,EAAQ,CAAC,IAAM,IAAK,MAAO,GAEhD,IAAKJ,EAAMI,EAAQ,EAAGJ,EAAMK,EAAKL,IAAO,CACtC,GAAIJ,EAAM,IAAI,OAAOI,CAAG,IAAM,IAAK,MAAO,GAC1C,GAAIJ,EAAM,IAAI,OAAOI,CAAG,IAAM,IAAK,KACrC,CAKA,GAFIA,IAAQI,EAAQ,GAEhBJ,EAAM,GAAKK,GAAOT,EAAM,IAAI,OAAO,EAAEI,CAAG,IAAM,IAAK,MAAO,GAE9D,GAAID,EAAQ,MAAO,GACnBC,GAAO,EAEFJ,EAAM,IAAI,YAAWA,EAAM,IAAI,UAAY,CAC3CA,GAAAA,EAAM,IAAI,UAAU,OAAMA,EAAM,IAAI,UAAU,KAAO,CAAC,GAC3D,MAAMU,EAAQV,EAAM,IAAI,MAAMQ,EAAQ,EAAGJ,EAAM,CAAC,EAEhDJ,EAAM,IAAI,UAAU,KAAK,IAAIU,CAAK,EAAE,EAAI,GAExCL,EAAQ,IAAIM,EAAM,wBAAyB,GAAI,CAAC,EAChDN,EAAM,KAAO,CAAE,MAAAK,CAAM,EACrBL,EAAM,MAAQL,EAAM,QACpBA,EAAM,OAAO,KAAKK,CAAK,EAEvB,MAAMO,EAAWZ,EAAM,OAAOC,CAAS,EACjCY,EAAYb,EAAM,OAAOC,CAAS,EAClCa,EAAYd,EAAM,OAAOC,CAAS,EAClCc,EAAgBf,EAAM,WACtBgB,EAAgBZ,EAChBa,EACJjB,EAAM,OAAOC,CAAS,EACtBG,GACCJ,EAAM,OAAOC,CAAS,EAAID,EAAM,OAAOC,CAAS,GAOnD,IALAK,EACEN,EAAM,OAAOC,CAAS,EACtBG,GACCJ,EAAM,OAAOC,CAAS,EAAID,EAAM,OAAOC,CAAS,GAE5CG,EAAMK,GAAK,CAGhB,GAFAF,EAAKP,EAAM,IAAI,OAAOI,CAAG,EAErBG,IAAO,IAAMD,GAAU,EAAKA,EAAS,UAChCC,IAAO,IAAKD,GAAU,MAC1B,OAELF,GAAO,CACT,CAEA,OAAAJ,EAAM,OAAOC,CAAS,EAAIG,EAAMY,EAChChB,EAAM,OAAOC,CAAS,EAAIK,EAASW,EAEnCjB,EAAM,OAAOC,CAAS,EAAIe,EAC1BhB,EAAM,WAAa,EACnBA,EAAM,WAAa,WAEfA,EAAM,OAAOC,CAAS,EAAID,EAAM,YAClCA,EAAM,OAAOC,CAAS,GAAKD,EAAM,WAEnCA,EAAM,GAAG,MAAM,SAASA,EAAOC,EAAWC,CAAO,EAEjDF,EAAM,WAAae,EACnBf,EAAM,WAAa,EACnBA,EAAM,OAAOC,CAAS,EAAIY,EAC1Bb,EAAM,OAAOC,CAAS,EAAIa,EAC1Bd,EAAM,OAAOC,CAAS,EAAIW,EAE1BP,EAAQ,IAAIM,EAAM,yBAA0B,GAAI,EAAE,EAClDN,EAAM,MAAQ,EAAEL,EAAM,MACtBA,EAAM,OAAO,KAAKK,CAAK,EAEhB,EACT,EAGMa,EAA6B,CAAClB,EAA4BG,IAAW,CACzE,IAAIgB,EACAd,EACAxB,EACJ,MAAM4B,EAAMT,EAAM,OACZQ,EAAQR,EAAM,IAKpB,GAHIQ,EAAQ,GAAKC,GACbT,EAAM,IAAI,OAAOQ,CAAK,IAAM,KAE5BR,EAAM,IAAI,OAAOQ,EAAQ,CAAC,IAAM,IAAK,MAAO,GAEhD,MAAMY,EAAaZ,EAAQ,EACrBa,EAAWC,EAAetB,EAAOQ,EAAQ,CAAC,EAGhD,OAAIa,EAAW,EAAU,IAOpBlB,IACEH,EAAM,IAAI,YAAWA,EAAM,IAAI,UAAY,CAAA,GAC3CA,EAAM,IAAI,UAAU,OAAMA,EAAM,IAAI,UAAU,KAAO,CAAA,GAC1DmB,EAAanB,EAAM,IAAI,UAAU,KAAK,OAEtCA,EAAM,GAAG,OAAO,MACdA,EAAM,IAAI,MAAMoB,EAAYC,CAAQ,EACpCrB,EAAM,GACNA,EAAM,IACLnB,EAAS,CAAA,CACZ,EAEAwB,EAAQL,EAAM,KAAK,cAAe,GAAI,CAAC,EACvCK,EAAM,KAAO,CAAE,GAAIc,CAAW,EAE9BnB,EAAM,IAAI,UAAU,KAAKmB,CAAU,EAAI,CACrC,QAASnB,EAAM,IAAI,MAAMoB,EAAYC,CAAQ,EAC7C,OAAAxC,CACF,GAGFmB,EAAM,IAAMqB,EAAW,EACvBrB,EAAM,OAASS,EAER,GACT,EAGMc,EAA0B,CAACvB,EAA4BG,IAAW,CACtE,IAAIC,EACAe,EACAK,EACAnB,EACJ,MAAMI,EAAMT,EAAM,OACZQ,EAAQR,EAAM,IAQpB,GALIQ,EAAQ,EAAIC,GAEZ,CAACT,EAAM,IAAI,WAAa,CAACA,EAAM,IAAI,UAAU,MAC7CA,EAAM,IAAI,OAAOQ,CAAK,IAAM,KAE5BR,EAAM,IAAI,OAAOQ,EAAQ,CAAC,IAAM,IAAK,MAAO,GAEhD,IAAKJ,EAAMI,EAAQ,EAAGJ,EAAMK,EAAKL,IAAO,CAEtC,GADIJ,EAAM,IAAI,OAAOI,CAAG,IAAM,KAC1BJ,EAAM,IAAI,OAAOI,CAAG,IAAM;AAAA,EAAM,MAAO,GAC3C,GAAIJ,EAAM,IAAI,OAAOI,CAAG,IAAM,IAAK,KACrC,CAGA,GADIA,IAAQI,EAAQ,GAChBJ,GAAOK,EAAK,MAAO,GAEvBL,GAAO,EAEP,MAAMM,EAAQV,EAAM,IAAI,MAAMQ,EAAQ,EAAGJ,EAAM,CAAC,EAEhD,OAAI,OAAOJ,EAAM,IAAI,UAAU,KAAK,IAAIU,CAAK,EAAE,EAAM,IAC5C,IAEJP,IACEH,EAAM,IAAI,UAAU,OAAMA,EAAM,IAAI,UAAU,KAAO,CAAA,GAEtDA,EAAM,IAAI,UAAU,KAAK,IAAIU,CAAK,EAAE,EAAI,GAC1CS,EAAanB,EAAM,IAAI,UAAU,KAAK,OACtCA,EAAM,IAAI,UAAU,KAAKmB,CAAU,EAAI,CAAE,MAAAT,EAAO,MAAO,CAAE,EACzDV,EAAM,IAAI,UAAU,KAAK,IAAIU,CAAK,EAAE,EAAIS,GAExCA,EAAanB,EAAM,IAAI,UAAU,KAAK,IAAIU,CAAK,EAAE,EAGnDc,EAAgBxB,EAAM,IAAI,UAAU,KAAKmB,CAAU,EAAE,MACrDnB,EAAM,IAAI,UAAU,KAAKmB,CAAU,EAAE,MACnCnB,EAAM,IAAI,UAAU,KAAKmB,CAAU,EAAE,MAAS,EAEhDd,EAAQL,EAAM,KAAK,cAAe,GAAI,CAAC,EACvCK,EAAM,KAAO,CAAE,GAAIc,EAAY,MAAOK,EAAe,MAAAd,CAAM,GAG7DV,EAAM,IAAMI,EACZJ,EAAM,OAASS,EAER,GACT,EAGMgB,EAAgBzB,GAAsC,CAC1D,IAAI0B,EACArB,EACAxB,EACA8C,EACAC,EACAC,EAAY,GAChB,MAAMC,EAAqC,GAwB3C,GAtBI,CAAC9B,EAAM,IAAI,YAEfA,EAAM,OAASA,EAAM,OAAO,OAAQ+B,GAC9BA,EAAW,OAAS,yBACtBF,EAAY,GACZF,EAAU,CAAC,EACXC,EAAeG,EAAW,KAAK,MAExB,IAELA,EAAW,OAAS,0BACtBF,EAAY,GAEZC,EAAU,IAAIF,CAAY,EAAE,EAAID,EAEzB,KAELE,GAAWF,EAAQ,KAAKI,CAAU,EAE/B,CAACF,EACT,EAEG,CAAC7B,EAAM,IAAI,UAAU,MAAM,MAAO,GACtC,KAAM,CAAE,KAAAgC,CAAK,EAAIhC,EAAM,IAAI,UAE3BK,EAAQ,IAAIM,EAAM,oBAAqB,GAAI,CAAC,EAC5CX,EAAM,OAAO,KAAKK,CAAK,EAEvB,QAAS4B,EAAI,EAAG,CAAE,OAAAC,CAAO,EAAIF,EAAMC,EAAIC,EAAQD,IAAK,CAClD5B,EAAQ,IAAIM,EAAM,eAAgB,GAAI,CAAC,EACvCN,EAAM,KAAO,CAAE,GAAI4B,EAAG,MAAOD,EAAKC,CAAC,EAAE,KAAM,EAC3CjC,EAAM,OAAO,KAAKK,CAAK,EAEnB2B,EAAKC,CAAC,EAAE,QACVpD,EAAS,CAETwB,EAAAA,EAAQ,IAAIM,EAAM,iBAAkB,IAAK,CAAC,EAC1CN,EAAM,MAAQ,GACdxB,EAAO,KAAKwB,CAAK,EAEjBA,EAAQ,IAAIM,EAAM,SAAU,GAAI,CAAC,EACjCN,EAAM,SAAW2B,EAAKC,CAAC,EAAE,OACzB5B,EAAM,QAAU2B,EAAKC,CAAC,EAAE,QACxBpD,EAAO,KAAKwB,CAAK,EAEjBA,EAAQ,IAAIM,EAAM,kBAAmB,IAAK,EAAE,EAC5CN,EAAM,MAAQ,GACdxB,EAAO,KAAKwB,CAAK,GACR2B,EAAKC,CAAC,EAAE,MACjBpD,EAASiD,EAAU,IAAIE,EAAKC,CAAC,EAAE,KAAM,EAAE,EAEvCpD,EAAS,CAAC,EAGRA,IAAQmB,EAAM,OAASA,EAAM,OAAO,OAAOnB,CAAM,GACjDmB,EAAM,OAAOA,EAAM,OAAO,OAAS,CAAC,EAAE,OAAS,kBACjD0B,EAAgB1B,EAAM,OAAO,IAAS,GAAA,KACnC0B,EAAgB,KAErB,QAASS,EAAI,EAAGA,GAAK,OAAOH,EAAKC,CAAC,EAAE,KAAK,EAAI,EAAID,EAAKC,CAAC,EAAE,MAAS,GAAIE,IACpE9B,EAAQ,IAAIM,EAAM,iBAAkB,GAAI,CAAC,EACzCN,EAAM,KAAO,CAAE,GAAI4B,EAAG,MAAOE,EAAG,MAAOH,EAAKC,CAAC,EAAE,KAAM,EACrDjC,EAAM,OAAO,KAAKK,CAAK,EAGrBqB,GAAe1B,EAAM,OAAO,KAAK0B,CAAa,EAElDrB,EAAQ,IAAIM,EAAM,gBAAiB,GAAI,EAAE,EACzCX,EAAM,OAAO,KAAKK,CAAK,CACzB,CAEA,OAAAA,EAAQ,IAAIM,EAAM,qBAAsB,GAAI,EAAE,EAC9CX,EAAM,OAAO,KAAKK,CAAK,EAEhB,EACT,EAEa+B,EAA0BC,GAAO,CAC5CA,EAAG,SAAS,MAAM,YAAiBlD,EACnCkD,EAAG,SAAS,MAAM,kBAAuB7C,EACzC6C,EAAG,SAAS,MAAM,mBAAwB1C,EAC1C0C,EAAG,SAAS,MAAM,aAAkBzC,EACpCyC,EAAG,SAAS,MAAM,cAAmBxC,EACrCwC,EAAG,SAAS,MAAM,eAAoBvC,EAItCuC,EAAG,SAAS,MAAM,gBAAqBnD,EACvCmD,EAAG,SAAS,MAAM,mBAAwBtD,EAE1CsD,EAAG,MAAM,MAAM,OAAO,YAAa,cAAetC,EAAa,CAC7D,IAAK,CAAC,YAAa,WAAW,CAChC,CAAC,EACDsC,EAAG,OAAO,MAAM,MAAM,QAAS,iBAAkBnB,CAAc,EAC/DmB,EAAG,OAAO,MAAM,MAAM,iBAAkB,cAAed,CAAW,EAClEc,EAAG,KAAK,MAAM,MAAM,SAAU,eAAgBZ,CAAY,CAC5D"} |
+1
-1
@@ -1,2 +0,2 @@ | ||
| import $ from"markdown-it/lib/helpers/parse_link_label.js";import i from"markdown-it/lib/token.js";const h=(e,n)=>e[n].meta.subId>0?`:${e[n].meta.subId}`:"",A=(e,n,t,s)=>`${typeof s.docId=="string"?`-${s.docId}-`:""}${(e[n].meta.id+1).toString()}`,C=(e,n)=>`[${(e[n].meta.id+1).toString()}${h(e,n)}]`,g=(e,n,t,s,o)=>{const c=o.rules.footnoteAnchorName(e,n,t,s,o),f=o.rules.footnoteCaption(e,n,t,s,o);return`<sup class="footnote-ref"><a href="#footnote${c}">${f}</a><a class="footnote-anchor" id="footnote-ref${c}${h(e,n)}" /></sup>`},I=(e,n,t)=>`<hr class="footnotes-sep"${t.xhtmlOut?" /":""}> | ||
| import $ from"markdown-it/lib/helpers/parse_link_label.mjs";import i from"markdown-it/lib/token.mjs";const h=(e,n)=>e[n].meta.subId>0?`:${e[n].meta.subId}`:"",A=(e,n,t,s)=>`${typeof s.docId=="string"?`-${s.docId}-`:""}${(e[n].meta.id+1).toString()}`,C=(e,n)=>`[${(e[n].meta.id+1).toString()}${h(e,n)}]`,g=(e,n,t,s,o)=>{const c=o.rules.footnoteAnchorName(e,n,t,s,o),f=o.rules.footnoteCaption(e,n,t,s,o);return`<sup class="footnote-ref"><a href="#footnote${c}">${f}</a><a class="footnote-anchor" id="footnote-ref${c}${h(e,n)}" /></sup>`},I=(e,n,t)=>`<hr class="footnotes-sep"${t.xhtmlOut?" /":""}> | ||
| <section class="footnotes"> | ||
@@ -3,0 +3,0 @@ <ol class="footnotes-list"> |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"index.mjs","sources":["../src/plugin.ts"],"sourcesContent":["/**\n * Forked from https://github.com/markdown-it/markdown-it-footnote/blob/master/index.js\n */\n\nimport { type PluginSimple } from \"markdown-it\";\nimport parseLinkLabel from \"markdown-it/lib/helpers/parse_link_label.js\";\nimport { type RuleBlock } from \"markdown-it/lib/parser_block.js\";\nimport { type RuleInline } from \"markdown-it/lib/parser_inline.js\";\nimport type Renderer from \"markdown-it/lib/renderer.js\";\nimport type StateBlock from \"markdown-it/lib/rules_block/state_block.js\";\nimport type StateCore from \"markdown-it/lib/rules_core/state_core.js\";\nimport type StateInline from \"markdown-it/lib/rules_inline/state_inline.js\";\nimport Token from \"markdown-it/lib/token.js\";\n\nimport { type FootNoteEnv, type 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: Renderer.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: Renderer.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: Renderer.RenderRule = (\n tokens: FootNoteToken[],\n index,\n options,\n env: FootNoteEnv,\n self,\n): string => {\n const id = self.rules[\"footnoteAnchorName\"]!(\n tokens,\n index,\n options,\n env,\n self,\n );\n const caption = self.rules[\"footnoteCaption\"]!(\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: Renderer.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: Renderer.RenderRule = (\n tokens: FootNoteToken[],\n index,\n options,\n env: FootNoteEnv,\n self,\n): string =>\n `<li id=\"footnote${self.rules[\"footnoteAnchorName\"]!(\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: Renderer.RenderRule = (\n tokens: FootNoteToken[],\n index,\n options,\n env: FootNoteEnv,\n self,\n): string =>\n ` <a href=\"#footnote-ref${self.rules[\"footnoteAnchorName\"]!(\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 let pos;\n let token;\n let offset;\n let ch;\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.charAt(start) !== \"[\") return false;\n\n if (state.src.charAt(start + 1) !== \"^\") return false;\n\n for (pos = start + 2; pos < max; pos++) {\n if (state.src.charAt(pos) === \" \") return false;\n if (state.src.charAt(pos) === \"]\") break;\n }\n\n // no empty footnote labels\n if (pos === start + 2) return false;\n\n if (pos + 1 >= max || state.src.charAt(++pos) !== \":\") return false;\n\n if (silent) return true;\n pos += 1;\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\n state.env.footnotes.refs[`:${label}`] = -1;\n\n token = new Token(\"footnoteReferenceOpen\", \"\", 1);\n token.meta = { label };\n token.level = state.level++;\n state.tokens.push(token);\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 offset =\n state.sCount[startLine] +\n pos -\n (state.bMarks[startLine] + state.tShift[startLine]);\n\n while (pos < max) {\n ch = state.src.charAt(pos);\n\n if (ch === \"\\t\") offset += 4 - (offset % 4);\n else if (ch === \" \") offset += 1;\n else break;\n\n pos += 1;\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 StateBlock.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 token = new Token(\"footnoteReferenceClose\", \"\", -1);\n token.level = --state.level;\n state.tokens.push(token);\n\n return true;\n};\n\n// Process inline footnotes (^[...])\nconst footnoteInline: RuleInline = (state: FootNoteStateInline, silent) => {\n let footnoteId;\n let token;\n let tokens: Token[];\n const max = state.posMax;\n const start = state.pos;\n\n if (start + 2 >= max) return false;\n if (state.src.charAt(start) !== \"^\") return false;\n\n if (state.src.charAt(start + 1) !== \"[\") 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 /*\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 if (!state.env.footnotes) state.env.footnotes = {};\n if (!state.env.footnotes.list) state.env.footnotes.list = [];\n footnoteId = state.env.footnotes.list.length;\n\n state.md.inline.parse(\n state.src.slice(labelStart, labelEnd),\n state.md,\n state.env,\n (tokens = []),\n );\n\n token = state.push(\"footnoteRef\", \"\", 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\n return true;\n};\n\n// Process footnote references ([^...])\nconst footnoteRef: RuleInline = (state: FootNoteStateInline, silent) => {\n let pos;\n let footnoteId;\n let footnoteSubId;\n let token;\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.charAt(start) !== \"[\") return false;\n\n if (state.src.charAt(start + 1) !== \"^\") return false;\n\n for (pos = start + 2; pos < max; pos++) {\n if (state.src.charAt(pos) === \" \") return false;\n if (state.src.charAt(pos) === \"\\n\") return false;\n if (state.src.charAt(pos) === \"]\") break;\n }\n\n if (pos === start + 2) return false; // no empty footnote labels\n if (pos >= max) return false;\n\n pos += 1;\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 if (!state.env.footnotes.list) state.env.footnotes.list = [];\n\n if (state.env.footnotes.refs[`:${label}`] < 0) {\n footnoteId = state.env.footnotes.list.length;\n state.env.footnotes.list[footnoteId] = { label, count: 0 };\n state.env.footnotes.refs[`:${label}`] = footnoteId;\n } else {\n footnoteId = state.env.footnotes.refs[`:${label}`];\n }\n\n footnoteSubId = state.env.footnotes.list[footnoteId].count!;\n state.env.footnotes.list[footnoteId].count =\n state.env.footnotes.list[footnoteId].count! + 1;\n\n token = state.push(\"footnoteRef\", \"\", 0);\n token.meta = { id: footnoteId, subId: footnoteSubId, 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 = (state: FootNoteStateCore): boolean => {\n let lastParagraph: FootNoteToken | null;\n let token: Token;\n let tokens: Token[];\n let current: Token[];\n let currentLabel: string;\n let insideRef = false;\n const refTokens: Record<string, Token[]> = {};\n\n if (!state.env.footnotes) return false;\n\n state.tokens = state.tokens.filter((stateToken) => {\n if (stateToken.type === \"footnoteReferenceOpen\") {\n insideRef = true;\n current = [];\n currentLabel = stateToken.meta.label;\n\n return false;\n }\n if (stateToken.type === \"footnoteReferenceClose\") {\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 if (!state.env.footnotes.list) return false;\n const { list } = state.env.footnotes;\n\n token = new Token(\"footnoteBlockOpen\", \"\", 1);\n state.tokens.push(token);\n\n for (let i = 0, { length } = list; i < length; i++) {\n token = new Token(\"footnoteOpen\", \"\", 1);\n token.meta = { id: i, label: list[i].label };\n state.tokens.push(token);\n\n if (list[i].tokens) {\n tokens = [];\n\n token = new Token(\"paragraph_open\", \"p\", 1);\n token.block = true;\n tokens.push(token);\n\n token = new Token(\"inline\", \"\", 0);\n token.children = list[i].tokens!;\n token.content = list[i].content!;\n tokens.push(token);\n\n token = new Token(\"paragraph_close\", \"p\", -1);\n token.block = true;\n tokens.push(token);\n } else if (list[i].label) {\n tokens = refTokens[`:${list[i].label!}`];\n } else {\n tokens = [];\n }\n\n if (tokens) state.tokens = state.tokens.concat(tokens);\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 token = new Token(\"footnoteAnchor\", \"\", 0);\n token.meta = { id: i, subId: j, label: list[i].label };\n state.tokens.push(token);\n }\n\n if (lastParagraph) state.tokens.push(lastParagraph);\n\n token = new Token(\"footnoteClose\", \"\", -1);\n state.tokens.push(token);\n }\n\n token = new Token(\"footnoteBlockClose\", \"\", -1);\n state.tokens.push(token);\n\n return true;\n};\n\nexport const footnote: PluginSimple = (md) => {\n md.renderer.rules[\"footnoteRef\"] = renderFootnoteRef;\n md.renderer.rules[\"footnoteBlockOpen\"] = renderFootnoteBlockOpen;\n md.renderer.rules[\"footnoteBlockClose\"] = renderFootnoteBlockClose;\n md.renderer.rules[\"footnoteOpen\"] = renderFootnoteOpen;\n md.renderer.rules[\"footnoteClose\"] = renderFootnoteClose;\n md.renderer.rules[\"footnoteAnchor\"] = 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[\"footnoteCaption\"] = renderFootnoteCaption;\n md.renderer.rules[\"footnoteAnchorName\"] = 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\", \"footnoteRef\", 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","pos","token","offset","ch","start","max","label","Token","oldBMark","oldTShift","oldSCount","oldParentType","posAfterColon","initial","footnoteInline","footnoteId","labelStart","labelEnd","parseLinkLabel","footnoteRef","footnoteSubId","footnoteTail","lastParagraph","current","currentLabel","insideRef","refTokens","stateToken","list","i","length","j","footnote","md"],"mappings":"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"} | ||
| {"version":3,"file":"index.mjs","sources":["../src/plugin.ts"],"sourcesContent":["/**\n * Forked from https://github.com/markdown-it/markdown-it-footnote/blob/master/index.js\n */\n\nimport { type PluginSimple } from \"markdown-it\";\nimport parseLinkLabel from \"markdown-it/lib/helpers/parse_link_label.mjs\";\nimport { type RuleBlock } from \"markdown-it/lib/parser_block.js\";\nimport { type RuleInline } from \"markdown-it/lib/parser_inline.js\";\nimport type Renderer from \"markdown-it/lib/renderer.js\";\nimport type StateBlock from \"markdown-it/lib/rules_block/state_block.js\";\nimport type StateCore from \"markdown-it/lib/rules_core/state_core.js\";\nimport type StateInline from \"markdown-it/lib/rules_inline/state_inline.js\";\nimport Token from \"markdown-it/lib/token.mjs\";\n\nimport { type FootNoteEnv, type 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: Renderer.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: Renderer.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: Renderer.RenderRule = (\n tokens: FootNoteToken[],\n index,\n options,\n env: FootNoteEnv,\n self,\n): string => {\n const id = self.rules[\"footnoteAnchorName\"]!(\n tokens,\n index,\n options,\n env,\n self,\n );\n const caption = self.rules[\"footnoteCaption\"]!(\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: Renderer.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: Renderer.RenderRule = (\n tokens: FootNoteToken[],\n index,\n options,\n env: FootNoteEnv,\n self,\n): string =>\n `<li id=\"footnote${self.rules[\"footnoteAnchorName\"]!(\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: Renderer.RenderRule = (\n tokens: FootNoteToken[],\n index,\n options,\n env: FootNoteEnv,\n self,\n): string =>\n ` <a href=\"#footnote-ref${self.rules[\"footnoteAnchorName\"]!(\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 let pos;\n let token;\n let offset;\n let ch;\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.charAt(start) !== \"[\") return false;\n\n if (state.src.charAt(start + 1) !== \"^\") return false;\n\n for (pos = start + 2; pos < max; pos++) {\n if (state.src.charAt(pos) === \" \") return false;\n if (state.src.charAt(pos) === \"]\") break;\n }\n\n // no empty footnote labels\n if (pos === start + 2) return false;\n\n if (pos + 1 >= max || state.src.charAt(++pos) !== \":\") return false;\n\n if (silent) return true;\n pos += 1;\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\n state.env.footnotes.refs[`:${label}`] = -1;\n\n token = new Token(\"footnoteReferenceOpen\", \"\", 1);\n token.meta = { label };\n token.level = state.level++;\n state.tokens.push(token);\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 offset =\n state.sCount[startLine] +\n pos -\n (state.bMarks[startLine] + state.tShift[startLine]);\n\n while (pos < max) {\n ch = state.src.charAt(pos);\n\n if (ch === \"\\t\") offset += 4 - (offset % 4);\n else if (ch === \" \") offset += 1;\n else break;\n\n pos += 1;\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 StateBlock.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 token = new Token(\"footnoteReferenceClose\", \"\", -1);\n token.level = --state.level;\n state.tokens.push(token);\n\n return true;\n};\n\n// Process inline footnotes (^[...])\nconst footnoteInline: RuleInline = (state: FootNoteStateInline, silent) => {\n let footnoteId;\n let token;\n let tokens: Token[];\n const max = state.posMax;\n const start = state.pos;\n\n if (start + 2 >= max) return false;\n if (state.src.charAt(start) !== \"^\") return false;\n\n if (state.src.charAt(start + 1) !== \"[\") 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 /*\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 if (!state.env.footnotes) state.env.footnotes = {};\n if (!state.env.footnotes.list) state.env.footnotes.list = [];\n footnoteId = state.env.footnotes.list.length;\n\n state.md.inline.parse(\n state.src.slice(labelStart, labelEnd),\n state.md,\n state.env,\n (tokens = []),\n );\n\n token = state.push(\"footnoteRef\", \"\", 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\n return true;\n};\n\n// Process footnote references ([^...])\nconst footnoteRef: RuleInline = (state: FootNoteStateInline, silent) => {\n let pos;\n let footnoteId;\n let footnoteSubId;\n let token;\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.charAt(start) !== \"[\") return false;\n\n if (state.src.charAt(start + 1) !== \"^\") return false;\n\n for (pos = start + 2; pos < max; pos++) {\n if (state.src.charAt(pos) === \" \") return false;\n if (state.src.charAt(pos) === \"\\n\") return false;\n if (state.src.charAt(pos) === \"]\") break;\n }\n\n if (pos === start + 2) return false; // no empty footnote labels\n if (pos >= max) return false;\n\n pos += 1;\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 if (!state.env.footnotes.list) state.env.footnotes.list = [];\n\n if (state.env.footnotes.refs[`:${label}`] < 0) {\n footnoteId = state.env.footnotes.list.length;\n state.env.footnotes.list[footnoteId] = { label, count: 0 };\n state.env.footnotes.refs[`:${label}`] = footnoteId;\n } else {\n footnoteId = state.env.footnotes.refs[`:${label}`];\n }\n\n footnoteSubId = state.env.footnotes.list[footnoteId].count!;\n state.env.footnotes.list[footnoteId].count =\n state.env.footnotes.list[footnoteId].count! + 1;\n\n token = state.push(\"footnoteRef\", \"\", 0);\n token.meta = { id: footnoteId, subId: footnoteSubId, 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 = (state: FootNoteStateCore): boolean => {\n let lastParagraph: FootNoteToken | null;\n let token: Token;\n let tokens: Token[];\n let current: Token[];\n let currentLabel: string;\n let insideRef = false;\n const refTokens: Record<string, Token[]> = {};\n\n if (!state.env.footnotes) return false;\n\n state.tokens = state.tokens.filter((stateToken) => {\n if (stateToken.type === \"footnoteReferenceOpen\") {\n insideRef = true;\n current = [];\n currentLabel = stateToken.meta.label;\n\n return false;\n }\n if (stateToken.type === \"footnoteReferenceClose\") {\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 if (!state.env.footnotes.list) return false;\n const { list } = state.env.footnotes;\n\n token = new Token(\"footnoteBlockOpen\", \"\", 1);\n state.tokens.push(token);\n\n for (let i = 0, { length } = list; i < length; i++) {\n token = new Token(\"footnoteOpen\", \"\", 1);\n token.meta = { id: i, label: list[i].label };\n state.tokens.push(token);\n\n if (list[i].tokens) {\n tokens = [];\n\n token = new Token(\"paragraph_open\", \"p\", 1);\n token.block = true;\n tokens.push(token);\n\n token = new Token(\"inline\", \"\", 0);\n token.children = list[i].tokens!;\n token.content = list[i].content!;\n tokens.push(token);\n\n token = new Token(\"paragraph_close\", \"p\", -1);\n token.block = true;\n tokens.push(token);\n } else if (list[i].label) {\n tokens = refTokens[`:${list[i].label!}`];\n } else {\n tokens = [];\n }\n\n if (tokens) state.tokens = state.tokens.concat(tokens);\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 token = new Token(\"footnoteAnchor\", \"\", 0);\n token.meta = { id: i, subId: j, label: list[i].label };\n state.tokens.push(token);\n }\n\n if (lastParagraph) state.tokens.push(lastParagraph);\n\n token = new Token(\"footnoteClose\", \"\", -1);\n state.tokens.push(token);\n }\n\n token = new Token(\"footnoteBlockClose\", \"\", -1);\n state.tokens.push(token);\n\n return true;\n};\n\nexport const footnote: PluginSimple = (md) => {\n md.renderer.rules[\"footnoteRef\"] = renderFootnoteRef;\n md.renderer.rules[\"footnoteBlockOpen\"] = renderFootnoteBlockOpen;\n md.renderer.rules[\"footnoteBlockClose\"] = renderFootnoteBlockClose;\n md.renderer.rules[\"footnoteOpen\"] = renderFootnoteOpen;\n md.renderer.rules[\"footnoteClose\"] = renderFootnoteClose;\n md.renderer.rules[\"footnoteAnchor\"] = 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[\"footnoteCaption\"] = renderFootnoteCaption;\n md.renderer.rules[\"footnoteAnchorName\"] = 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\", \"footnoteRef\", 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","pos","token","offset","ch","start","max","label","Token","oldBMark","oldTShift","oldSCount","oldParentType","posAfterColon","initial","footnoteInline","footnoteId","labelStart","labelEnd","parseLinkLabel","footnoteRef","footnoteSubId","footnoteTail","lastParagraph","current","currentLabel","insideRef","refTokens","stateToken","list","i","length","j","footnote","md"],"mappings":"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"} |
+2
-2
| { | ||
| "name": "@mdit/plugin-footnote", | ||
| "version": "0.7.7", | ||
| "version": "0.8.0", | ||
| "description": "footnote plugin for MarkdownIt", | ||
@@ -47,3 +47,3 @@ "keywords": [ | ||
| "peerDependencies": { | ||
| "markdown-it": "^13.0.2 || ^14.0.0" | ||
| "markdown-it": "^14.0.0" | ||
| }, | ||
@@ -50,0 +50,0 @@ "publishConfig": { |
56370
-0.01%