1
Fork 0
mirror of https://github.com/glassflame/glassflame.github.io.git synced 2024-10-16 06:27:32 +00:00

Fix lheading behaving strangely

This commit is contained in:
Steffo 2023-11-06 19:23:28 +01:00
parent 2073029d99
commit bcd51d2eb5
Signed by: steffo
GPG key ID: 2A24051445686895

View file

@ -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 `<x-frontmatter lang="${token.lang}" data="${token.data.replaceAll('"', '&quot;')}"></x-frontmatter>`;
}
},
{
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 `<x-math document="${token.document}" block></x-math>`
}
},
{
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 `<x-hashtag tag="${token.tag}"></x-hashtag>`
}
},
{
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 `<x-math document="${token.document}" block></x-math>`
}
},
{
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",