// footnote-extension.ts // Simple extension for marked to support footnote references like [^1], [^note] function escapeHtml(s: string) { return s.replace( /[&<>"']/g, (c) => ({ '&': '&', '<': '<', '>': '>', '"': '"', "'": ''' })[c]! ); } export function footnoteExtension() { return { name: 'footnote', level: 'inline' as const, start(src: string) { return src.search(/\[\^\s*[a-zA-Z0-9_-]+\s*\]/); }, tokenizer(src: string) { const rule = /^\[\^\s*([a-zA-Z0-9_-]+)\s*\]/; const match = rule.exec(src); if (match) { const escapedText = escapeHtml(match[1]); return { type: 'footnote', raw: match[0], text: match[1], escapedText: escapedText }; } } }; } export default function () { return { extensions: [footnoteExtension()] }; }