diff --git a/src/elements/markdown/renderer.mjs b/src/elements/markdown/renderer.mjs index 501b7e5..8cb52a5 100644 --- a/src/elements/markdown/renderer.mjs +++ b/src/elements/markdown/renderer.mjs @@ -10,11 +10,27 @@ export class MarkdownElement extends CustomElement { return document.getElementById("template-markdown") } + // noinspection JSUnusedGlobalSymbols /** * {@link Marked} Markdown renderer. * @type {Marked} */ static MARKED = new Marked({ + tokenizer: { + // Fix single, double, and triple equals on a single line being interpreted as headings + lheading(src) { + const cap = /^(?!bull )((?:.|\n(?!\s*?\n|bull ))+?)\n {0,3}(={4,}|-{4,}) *(?:\n+|$)/.exec(src); + if (cap) { + return { + type: 'heading', + raw: cap[0], + depth: cap[2].charAt(0) === '=' ? 1 : 2, + text: cap[1], + tokens: this.lexer.inline(cap[1]) + }; + } + } + }, extensions: [ { name: "frontmatter", @@ -38,6 +54,27 @@ export class MarkdownElement extends CustomElement { return ``; } }, + { + name: "mathBlock", + level: "block", + start(src) { + const match = src.match(/[$][$]/) + return match?.index + }, + tokenizer(src, _) { + const match = src.match(/^[$][$](.*?)[$][$]/s) + if(match) { + return { + type: "mathBlock", + raw: match[0], + document: match[1], + } + } + }, + renderer(token) { + return `` + } + }, { name: "wikilink", level: "inline", @@ -45,7 +82,7 @@ export class MarkdownElement extends CustomElement { return src.match(/\[\[/)?.index }, tokenizer(src, _) { - const match = src.match(/^\[\[([^|\]]+)(?:\|([^\]]+))?]]/) + const match = src.match(/^\[\[([^|\]]*)(?:\|([^\]]*))?]]/) if(match) { return { type: "wikilink", @@ -79,26 +116,6 @@ export class MarkdownElement extends CustomElement { return `` } }, - { - name: "mathBlock", - level: "block", - start(src) { - return src.match(/[$][$]/)?.index - }, - tokenizer(src, _) { - const match = src.match(/^[$][$](.+?)[$][$]/s) - if(match) { - return { - type: "mathBlock", - raw: match[0], - document: match[1], - } - } - }, - renderer(token) { - return `` - } - }, { name: "mathInline", level: "inline", @@ -126,7 +143,7 @@ export class MarkdownElement extends CustomElement { return src.match(/==/)?.index }, tokenizer(src, _) { - const match = src.match(/^==(.+?)==/) + const match = src.match(/^==(.*?)==/) if(match) { return { type: "highlight",