From 72cfca1158889c0b78686a60deddc95400050d0f Mon Sep 17 00:00:00 2001 From: Trevor Buckner Date: Wed, 17 Apr 2024 00:56:43 -0400 Subject: [PATCH] Hack to avoid conflict with emojis --- shared/naturalcrit/markdown.js | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/shared/naturalcrit/markdown.js b/shared/naturalcrit/markdown.js index 1906d530a..f84851319 100644 --- a/shared/naturalcrit/markdown.js +++ b/shared/naturalcrit/markdown.js @@ -299,17 +299,26 @@ const superSubScripts = { const definitionListsInline = { name : 'definitionListsInline', level : 'block', - start(src) { return src.match(/^[^\n]*?::[^\n]*/m)?.index; }, // Hint to Marked.js to stop and check for a match + start(src) { return src.match(/\n[^\n]*?::[^\n]*/m)?.index; }, // Hint to Marked.js to stop and check for a match tokenizer(src, tokens) { const regex = /^([^\n]*?)::([^\n]*)(?:\n|$)/ym; let match; let endIndex = 0; const definitions = []; while (match = regex.exec(src)) { - definitions.push({ - dt : this.lexer.inlineTokens(match[1].trim()), - dd : this.lexer.inlineTokens(match[2].trim()) - }); + let originalLine = match[0]; // This line and below to handle conflict with emojis + let firstLine = originalLine; // Remove in V4 when definitionListsInline updated to + this.lexer.inlineTokens(firstLine.trim()) // require spaces around `::` + .filter(t => t.type == 'emoji') + .map(emoji => firstLine = firstLine.replace(emoji.raw, 'x'.repeat(emoji.raw.length))); + + let newMatch = /^([^\n]*?)::([^\n]*)(?:\n|$)/ym.exec(firstLine); + if(newMatch) { + definitions.push({ + dt : this.lexer.inlineTokens(originalLine.slice(0, newMatch[1].length).trim()), + dd : this.lexer.inlineTokens(originalLine.slice(newMatch[1].length + 2).trim()) + }); + } // End of emoji hack. endIndex = regex.lastIndex; } if(definitions.length) {