@mdit/plugin-footnote
Advanced tools
| 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"> | ||
| <ol class="footnotes-list"> | ||
| `,w=()=>`</ol> | ||
| </section> | ||
| `,M=(e,n,t,s,o)=>`<li id="footnote${o.rules.footnoteAnchorName(e,n,t,s,o)}${h(e,n)}" class="footnote-item">`,y=()=>`</li> | ||
| `,R=(e,n,t,s,o)=>` <a href="#footnote-ref${o.rules.footnoteAnchorName(e,n,t,s,o)}${h(e,n)}" class="footnote-backref">↩︎</a>`,S=(e,n,t,s)=>{let o,c,f,a;const r=e.bMarks[n]+e.tShift[n],l=e.eMarks[n];if(r+4>l||e.src.charAt(r)!=="["||e.src.charAt(r+1)!=="^")return!1;for(o=r+2;o<l;o++){if(e.src.charAt(o)===" ")return!1;if(e.src.charAt(o)==="]")break}if(o===r+2||o+1>=l||e.src.charAt(++o)!==":")return!1;if(s)return!0;o+=1,e.env.footnotes||(e.env.footnotes={}),e.env.footnotes.refs||(e.env.footnotes.refs={});const p=e.src.slice(r+2,o-2);e.env.footnotes.refs[`:${p}`]=-1,c=new i("footnoteReferenceOpen","",1),c.meta={label:p},c.level=e.level++,e.tokens.push(c);const u=e.bMarks[n],b=e.tShift[n],d=e.sCount[n],v=e.parentType,k=o,m=e.sCount[n]+o-(e.bMarks[n]+e.tShift[n]);for(f=e.sCount[n]+o-(e.bMarks[n]+e.tShift[n]);o<l;){if(a=e.src.charAt(o),a===" ")f+=4-f%4;else if(a===" ")f+=1;else break;o+=1}return e.tShift[n]=o-k,e.sCount[n]=f-m,e.bMarks[n]=k,e.blkIndent+=4,e.parentType="footnote",e.sCount[n]<e.blkIndent&&(e.sCount[n]+=e.blkIndent),e.md.block.tokenize(e,n,t),e.parentType=v,e.blkIndent-=4,e.tShift[n]=b,e.sCount[n]=d,e.bMarks[n]=u,c=new i("footnoteReferenceClose","",-1),c.level=--e.level,e.tokens.push(c),!0},O=(e,n)=>{let t,s,o;const c=e.posMax,f=e.pos;if(f+2>=c||e.src.charAt(f)!=="^"||e.src.charAt(f+1)!=="[")return!1;const a=f+2,r=$(e,f+1);return r<0?!1:(n||(e.env.footnotes||(e.env.footnotes={}),e.env.footnotes.list||(e.env.footnotes.list=[]),t=e.env.footnotes.list.length,e.md.inline.parse(e.src.slice(a,r),e.md,e.env,o=[]),s=e.push("footnoteRef","",0),s.meta={id:t},e.env.footnotes.list[t]={content:e.src.slice(a,r),tokens:o}),e.pos=r+1,e.posMax=c,!0)},x=(e,n)=>{let t,s,o,c;const f=e.posMax,a=e.pos;if(a+3>f||!e.env.footnotes||!e.env.footnotes.refs||e.src.charAt(a)!=="["||e.src.charAt(a+1)!=="^")return!1;for(t=a+2;t<f;t++){if(e.src.charAt(t)===" "||e.src.charAt(t)===` | ||
| `)return!1;if(e.src.charAt(t)==="]")break}if(t===a+2||t>=f)return!1;t+=1;const r=e.src.slice(a+2,t-1);return typeof e.env.footnotes.refs[`:${r}`]>"u"?!1:(n||(e.env.footnotes.list||(e.env.footnotes.list=[]),e.env.footnotes.refs[`:${r}`]<0?(s=e.env.footnotes.list.length,e.env.footnotes.list[s]={label:r,count:0},e.env.footnotes.refs[`:${r}`]=s):s=e.env.footnotes.refs[`:${r}`],o=e.env.footnotes.list[s].count,e.env.footnotes.list[s].count=e.env.footnotes.list[s].count+1,c=e.push("footnoteRef","",0),c.meta={id:s,subId:o,label:r}),e.pos=t,e.posMax=f,!0)},N=e=>{let n,t,s,o,c,f=!1;const a={};if(!e.env.footnotes||(e.tokens=e.tokens.filter(l=>l.type==="footnoteReferenceOpen"?(f=!0,o=[],c=l.meta.label,!1):l.type==="footnoteReferenceClose"?(f=!1,a[`:${c}`]=o,!1):(f&&o.push(l),!f)),!e.env.footnotes.list))return!1;const{list:r}=e.env.footnotes;t=new i("footnoteBlockOpen","",1),e.tokens.push(t);for(let l=0,{length:p}=r;l<p;l++){t=new i("footnoteOpen","",1),t.meta={id:l,label:r[l].label},e.tokens.push(t),r[l].tokens?(s=[],t=new i("paragraph_open","p",1),t.block=!0,s.push(t),t=new i("inline","",0),t.children=r[l].tokens,t.content=r[l].content,s.push(t),t=new i("paragraph_close","p",-1),t.block=!0,s.push(t)):r[l].label?s=a[`:${r[l].label}`]:s=[],s&&(e.tokens=e.tokens.concat(s)),e.tokens[e.tokens.length-1].type==="paragraph_close"?n=e.tokens.pop()||null:n=null;for(let u=0;u<(Number(r[l].count)>0?r[l].count:1);u++)t=new i("footnoteAnchor","",0),t.meta={id:l,subId:u,label:r[l].label},e.tokens.push(t);n&&e.tokens.push(n),t=new i("footnoteClose","",-1),e.tokens.push(t)}return t=new i("footnoteBlockClose","",-1),e.tokens.push(t),!0},T=e=>{e.renderer.rules.footnoteRef=g,e.renderer.rules.footnoteBlockOpen=I,e.renderer.rules.footnoteBlockClose=w,e.renderer.rules.footnoteOpen=M,e.renderer.rules.footnoteClose=y,e.renderer.rules.footnoteAnchor=R,e.renderer.rules.footnoteCaption=C,e.renderer.rules.footnoteAnchorName=A,e.block.ruler.before("reference","footnoteDef",S,{alt:["paragraph","reference"]}),e.inline.ruler.after("image","footnoteInline",O),e.inline.ruler.after("footnoteInline","footnoteRef",x),e.core.ruler.after("inline","footnoteTail",N)};export{T as footnote}; | ||
| //# sourceMappingURL=index.js.map |
| {"version":3,"file":"index.js","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.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 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[\"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: 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[\"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: 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 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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"} |
+1
-1
| import { PluginSimple } from 'markdown-it'; | ||
| import Token from 'markdown-it/lib/token.js'; | ||
| import Token from 'markdown-it/lib/token.mjs'; | ||
@@ -4,0 +4,0 @@ /** |
+11
-12
| { | ||
| "name": "@mdit/plugin-footnote", | ||
| "version": "0.8.0", | ||
| "version": "0.9.0", | ||
| "description": "footnote plugin for MarkdownIt", | ||
@@ -26,25 +26,24 @@ "keywords": [ | ||
| }, | ||
| "main": "lib/index.cjs", | ||
| "types": "lib/index.d.ts", | ||
| "type": "module", | ||
| "exports": { | ||
| ".": { | ||
| "type": "./lib/index.mts", | ||
| "require": "./lib/index.cjs", | ||
| "import": "./lib/index.mjs", | ||
| "default": "./lib/index.mjs" | ||
| "type": "./lib/index.ts", | ||
| "default": "./lib/index.js" | ||
| }, | ||
| "./package.json": "./package.json" | ||
| }, | ||
| "main": "lib/index.js", | ||
| "types": "lib/index.d.ts", | ||
| "files": [ | ||
| "lib" | ||
| ], | ||
| "engines": { | ||
| "node": ">= 18" | ||
| }, | ||
| "dependencies": { | ||
| "@types/markdown-it": "^13.0.7" | ||
| "@types/markdown-it": "^14.0.1" | ||
| }, | ||
| "peerDependencies": { | ||
| "markdown-it": "^14.0.0" | ||
| "markdown-it": "^14.1.0" | ||
| }, | ||
| "engines": { | ||
| "node": ">= 18" | ||
| }, | ||
| "publishConfig": { | ||
@@ -51,0 +50,0 @@ "access": "public" |
| "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"> | ||
| <ol class="footnotes-list"> | ||
| `,w=()=>`</ol> | ||
| </section> | ||
| `,M=(e,n,t,s,o)=>`<li id="footnote${o.rules.footnoteAnchorName(e,n,t,s,o)}${h(e,n)}" class="footnote-item">`,y=()=>`</li> | ||
| `,R=(e,n,t,s,o)=>` <a href="#footnote-ref${o.rules.footnoteAnchorName(e,n,t,s,o)}${h(e,n)}" class="footnote-backref">↩︎</a>`,S=(e,n,t,s)=>{let o,c,f,a;const r=e.bMarks[n]+e.tShift[n],l=e.eMarks[n];if(r+4>l||e.src.charAt(r)!=="["||e.src.charAt(r+1)!=="^")return!1;for(o=r+2;o<l;o++){if(e.src.charAt(o)===" ")return!1;if(e.src.charAt(o)==="]")break}if(o===r+2||o+1>=l||e.src.charAt(++o)!==":")return!1;if(s)return!0;o+=1,e.env.footnotes||(e.env.footnotes={}),e.env.footnotes.refs||(e.env.footnotes.refs={});const p=e.src.slice(r+2,o-2);e.env.footnotes.refs[`:${p}`]=-1,c=new i("footnoteReferenceOpen","",1),c.meta={label:p},c.level=e.level++,e.tokens.push(c);const u=e.bMarks[n],b=e.tShift[n],v=e.sCount[n],d=e.parentType,k=o,$=e.sCount[n]+o-(e.bMarks[n]+e.tShift[n]);for(f=e.sCount[n]+o-(e.bMarks[n]+e.tShift[n]);o<l;){if(a=e.src.charAt(o),a===" ")f+=4-f%4;else if(a===" ")f+=1;else break;o+=1}return e.tShift[n]=o-k,e.sCount[n]=f-$,e.bMarks[n]=k,e.blkIndent+=4,e.parentType="footnote",e.sCount[n]<e.blkIndent&&(e.sCount[n]+=e.blkIndent),e.md.block.tokenize(e,n,t),e.parentType=d,e.blkIndent-=4,e.tShift[n]=b,e.sCount[n]=v,e.bMarks[n]=u,c=new i("footnoteReferenceClose","",-1),c.level=--e.level,e.tokens.push(c),!0},O=(e,n)=>{let t,s,o;const c=e.posMax,f=e.pos;if(f+2>=c||e.src.charAt(f)!=="^"||e.src.charAt(f+1)!=="[")return!1;const a=f+2,r=m(e,f+1);return r<0?!1:(n||(e.env.footnotes||(e.env.footnotes={}),e.env.footnotes.list||(e.env.footnotes.list=[]),t=e.env.footnotes.list.length,e.md.inline.parse(e.src.slice(a,r),e.md,e.env,o=[]),s=e.push("footnoteRef","",0),s.meta={id:t},e.env.footnotes.list[t]={content:e.src.slice(a,r),tokens:o}),e.pos=r+1,e.posMax=c,!0)},N=(e,n)=>{let t,s,o,c;const f=e.posMax,a=e.pos;if(a+3>f||!e.env.footnotes||!e.env.footnotes.refs||e.src.charAt(a)!=="["||e.src.charAt(a+1)!=="^")return!1;for(t=a+2;t<f;t++){if(e.src.charAt(t)===" "||e.src.charAt(t)===` | ||
| `)return!1;if(e.src.charAt(t)==="]")break}if(t===a+2||t>=f)return!1;t+=1;const r=e.src.slice(a+2,t-1);return typeof e.env.footnotes.refs[`:${r}`]>"u"?!1:(n||(e.env.footnotes.list||(e.env.footnotes.list=[]),e.env.footnotes.refs[`:${r}`]<0?(s=e.env.footnotes.list.length,e.env.footnotes.list[s]={label:r,count:0},e.env.footnotes.refs[`:${r}`]=s):s=e.env.footnotes.refs[`:${r}`],o=e.env.footnotes.list[s].count,e.env.footnotes.list[s].count=e.env.footnotes.list[s].count+1,c=e.push("footnoteRef","",0),c.meta={id:s,subId:o,label:r}),e.pos=t,e.posMax=f,!0)},x=e=>{let n,t,s,o,c,f=!1;const a={};if(!e.env.footnotes||(e.tokens=e.tokens.filter(l=>l.type==="footnoteReferenceOpen"?(f=!0,o=[],c=l.meta.label,!1):l.type==="footnoteReferenceClose"?(f=!1,a[`:${c}`]=o,!1):(f&&o.push(l),!f)),!e.env.footnotes.list))return!1;const{list:r}=e.env.footnotes;t=new i("footnoteBlockOpen","",1),e.tokens.push(t);for(let l=0,{length:p}=r;l<p;l++){t=new i("footnoteOpen","",1),t.meta={id:l,label:r[l].label},e.tokens.push(t),r[l].tokens?(s=[],t=new i("paragraph_open","p",1),t.block=!0,s.push(t),t=new i("inline","",0),t.children=r[l].tokens,t.content=r[l].content,s.push(t),t=new i("paragraph_close","p",-1),t.block=!0,s.push(t)):r[l].label?s=a[`:${r[l].label}`]:s=[],s&&(e.tokens=e.tokens.concat(s)),e.tokens[e.tokens.length-1].type==="paragraph_close"?n=e.tokens.pop()||null:n=null;for(let u=0;u<(Number(r[l].count)>0?r[l].count:1);u++)t=new i("footnoteAnchor","",0),t.meta={id:l,subId:u,label:r[l].label},e.tokens.push(t);n&&e.tokens.push(n),t=new i("footnoteClose","",-1),e.tokens.push(t)}return t=new i("footnoteBlockClose","",-1),e.tokens.push(t),!0},B=e=>{e.renderer.rules.footnoteRef=g,e.renderer.rules.footnoteBlockOpen=I,e.renderer.rules.footnoteBlockClose=w,e.renderer.rules.footnoteOpen=M,e.renderer.rules.footnoteClose=y,e.renderer.rules.footnoteAnchor=R,e.renderer.rules.footnoteCaption=C,e.renderer.rules.footnoteAnchorName=A,e.block.ruler.before("reference","footnoteDef",S,{alt:["paragraph","reference"]}),e.inline.ruler.after("image","footnoteInline",O),e.inline.ruler.after("footnoteInline","footnoteRef",N),e.core.ruler.after("inline","footnoteTail",x)};exports.footnote=B; | ||
| //# sourceMappingURL=index.cjs.map |
| {"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":"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"} |
| import { PluginSimple } from 'markdown-it'; | ||
| import Token from 'markdown-it/lib/token.js'; | ||
| /** | ||
| * Forked from https://github.com/markdown-it/markdown-it-footnote/blob/master/index.js | ||
| */ | ||
| declare const footnote: PluginSimple; | ||
| interface FootNoteToken extends Token { | ||
| meta: { | ||
| id: number; | ||
| subId: number; | ||
| label: string; | ||
| }; | ||
| } | ||
| interface FootNoteEnv extends Record<any, any> { | ||
| docId?: string; | ||
| footnotes: { | ||
| label?: string; | ||
| refs?: Record<string, number>; | ||
| list?: { | ||
| label?: string; | ||
| count?: number; | ||
| content?: string; | ||
| tokens?: Token[] | null; | ||
| }[]; | ||
| }; | ||
| } | ||
| export { type FootNoteEnv, type FootNoteToken, footnote }; |
| import { PluginSimple } from 'markdown-it'; | ||
| import Token from 'markdown-it/lib/token.js'; | ||
| /** | ||
| * Forked from https://github.com/markdown-it/markdown-it-footnote/blob/master/index.js | ||
| */ | ||
| declare const footnote: PluginSimple; | ||
| interface FootNoteToken extends Token { | ||
| meta: { | ||
| id: number; | ||
| subId: number; | ||
| label: string; | ||
| }; | ||
| } | ||
| interface FootNoteEnv extends Record<any, any> { | ||
| docId?: string; | ||
| footnotes: { | ||
| label?: string; | ||
| refs?: Record<string, number>; | ||
| list?: { | ||
| label?: string; | ||
| count?: number; | ||
| content?: string; | ||
| tokens?: Token[] | null; | ||
| }[]; | ||
| }; | ||
| } | ||
| export { type FootNoteEnv, type FootNoteToken, footnote }; |
| 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"> | ||
| <ol class="footnotes-list"> | ||
| `,w=()=>`</ol> | ||
| </section> | ||
| `,M=(e,n,t,s,o)=>`<li id="footnote${o.rules.footnoteAnchorName(e,n,t,s,o)}${h(e,n)}" class="footnote-item">`,y=()=>`</li> | ||
| `,R=(e,n,t,s,o)=>` <a href="#footnote-ref${o.rules.footnoteAnchorName(e,n,t,s,o)}${h(e,n)}" class="footnote-backref">↩︎</a>`,S=(e,n,t,s)=>{let o,c,f,a;const r=e.bMarks[n]+e.tShift[n],l=e.eMarks[n];if(r+4>l||e.src.charAt(r)!=="["||e.src.charAt(r+1)!=="^")return!1;for(o=r+2;o<l;o++){if(e.src.charAt(o)===" ")return!1;if(e.src.charAt(o)==="]")break}if(o===r+2||o+1>=l||e.src.charAt(++o)!==":")return!1;if(s)return!0;o+=1,e.env.footnotes||(e.env.footnotes={}),e.env.footnotes.refs||(e.env.footnotes.refs={});const p=e.src.slice(r+2,o-2);e.env.footnotes.refs[`:${p}`]=-1,c=new i("footnoteReferenceOpen","",1),c.meta={label:p},c.level=e.level++,e.tokens.push(c);const u=e.bMarks[n],b=e.tShift[n],d=e.sCount[n],v=e.parentType,k=o,m=e.sCount[n]+o-(e.bMarks[n]+e.tShift[n]);for(f=e.sCount[n]+o-(e.bMarks[n]+e.tShift[n]);o<l;){if(a=e.src.charAt(o),a===" ")f+=4-f%4;else if(a===" ")f+=1;else break;o+=1}return e.tShift[n]=o-k,e.sCount[n]=f-m,e.bMarks[n]=k,e.blkIndent+=4,e.parentType="footnote",e.sCount[n]<e.blkIndent&&(e.sCount[n]+=e.blkIndent),e.md.block.tokenize(e,n,t),e.parentType=v,e.blkIndent-=4,e.tShift[n]=b,e.sCount[n]=d,e.bMarks[n]=u,c=new i("footnoteReferenceClose","",-1),c.level=--e.level,e.tokens.push(c),!0},O=(e,n)=>{let t,s,o;const c=e.posMax,f=e.pos;if(f+2>=c||e.src.charAt(f)!=="^"||e.src.charAt(f+1)!=="[")return!1;const a=f+2,r=$(e,f+1);return r<0?!1:(n||(e.env.footnotes||(e.env.footnotes={}),e.env.footnotes.list||(e.env.footnotes.list=[]),t=e.env.footnotes.list.length,e.md.inline.parse(e.src.slice(a,r),e.md,e.env,o=[]),s=e.push("footnoteRef","",0),s.meta={id:t},e.env.footnotes.list[t]={content:e.src.slice(a,r),tokens:o}),e.pos=r+1,e.posMax=c,!0)},x=(e,n)=>{let t,s,o,c;const f=e.posMax,a=e.pos;if(a+3>f||!e.env.footnotes||!e.env.footnotes.refs||e.src.charAt(a)!=="["||e.src.charAt(a+1)!=="^")return!1;for(t=a+2;t<f;t++){if(e.src.charAt(t)===" "||e.src.charAt(t)===` | ||
| `)return!1;if(e.src.charAt(t)==="]")break}if(t===a+2||t>=f)return!1;t+=1;const r=e.src.slice(a+2,t-1);return typeof e.env.footnotes.refs[`:${r}`]>"u"?!1:(n||(e.env.footnotes.list||(e.env.footnotes.list=[]),e.env.footnotes.refs[`:${r}`]<0?(s=e.env.footnotes.list.length,e.env.footnotes.list[s]={label:r,count:0},e.env.footnotes.refs[`:${r}`]=s):s=e.env.footnotes.refs[`:${r}`],o=e.env.footnotes.list[s].count,e.env.footnotes.list[s].count=e.env.footnotes.list[s].count+1,c=e.push("footnoteRef","",0),c.meta={id:s,subId:o,label:r}),e.pos=t,e.posMax=f,!0)},N=e=>{let n,t,s,o,c,f=!1;const a={};if(!e.env.footnotes||(e.tokens=e.tokens.filter(l=>l.type==="footnoteReferenceOpen"?(f=!0,o=[],c=l.meta.label,!1):l.type==="footnoteReferenceClose"?(f=!1,a[`:${c}`]=o,!1):(f&&o.push(l),!f)),!e.env.footnotes.list))return!1;const{list:r}=e.env.footnotes;t=new i("footnoteBlockOpen","",1),e.tokens.push(t);for(let l=0,{length:p}=r;l<p;l++){t=new i("footnoteOpen","",1),t.meta={id:l,label:r[l].label},e.tokens.push(t),r[l].tokens?(s=[],t=new i("paragraph_open","p",1),t.block=!0,s.push(t),t=new i("inline","",0),t.children=r[l].tokens,t.content=r[l].content,s.push(t),t=new i("paragraph_close","p",-1),t.block=!0,s.push(t)):r[l].label?s=a[`:${r[l].label}`]:s=[],s&&(e.tokens=e.tokens.concat(s)),e.tokens[e.tokens.length-1].type==="paragraph_close"?n=e.tokens.pop()||null:n=null;for(let u=0;u<(Number(r[l].count)>0?r[l].count:1);u++)t=new i("footnoteAnchor","",0),t.meta={id:l,subId:u,label:r[l].label},e.tokens.push(t);n&&e.tokens.push(n),t=new i("footnoteClose","",-1),e.tokens.push(t)}return t=new i("footnoteBlockClose","",-1),e.tokens.push(t),!0},B=e=>{e.renderer.rules.footnoteRef=g,e.renderer.rules.footnoteBlockOpen=I,e.renderer.rules.footnoteBlockClose=w,e.renderer.rules.footnoteOpen=M,e.renderer.rules.footnoteClose=y,e.renderer.rules.footnoteAnchor=R,e.renderer.rules.footnoteCaption=C,e.renderer.rules.footnoteAnchorName=A,e.block.ruler.before("reference","footnoteDef",S,{alt:["paragraph","reference"]}),e.inline.ruler.after("image","footnoteInline",O),e.inline.ruler.after("footnoteInline","footnoteRef",x),e.core.ruler.after("inline","footnoteTail",N)};export{B as footnote}; | ||
| //# sourceMappingURL=index.mjs.map |
| {"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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"} |
Minified code
QualityThis package contains minified code. This may be harmless in some cases where minified code is included in packaged libraries, however packages on npm should not minify code.
Found 1 instance in 1 package
Minified code
QualityThis package contains minified code. This may be harmless in some cases where minified code is included in packaged libraries, however packages on npm should not minify code.
Found 1 instance in 1 package
2
-33.33%Yes
NaN29317
-47.99%6
-40%53
-32.91%+ Added
+ Added
+ Added
- Removed
- Removed
- Removed
Updated