diff --git a/fluxer_app/src/features/lexical/composer/ComposerMarkdownHighlight.ts b/fluxer_app/src/features/lexical/composer/ComposerMarkdownHighlight.ts index d8d78f762..e7c974178 100644 --- a/fluxer_app/src/features/lexical/composer/ComposerMarkdownHighlight.ts +++ b/fluxer_app/src/features/lexical/composer/ComposerMarkdownHighlight.ts @@ -139,6 +139,16 @@ function $reconcileParagraph(paragraph: ParagraphNode, parserFlags?: number): vo } } +function $isEscapedAtOffset(source: string, offset: number): boolean { + let backslashes = 0; + let cursor = offset - 1; + while (cursor >= 0 && source[cursor] === '\\') { + backslashes += 1; + cursor -= 1; + } + return backslashes % 2 === 1; +} + function $reconcileLine( line: Array, parserFlags?: number, @@ -153,13 +163,15 @@ function $reconcileLine( const nodeText = $nodeWireText(node); const nodeEnd = sourceOffset + nodeText.length; if ($isComposerMentionNode(node) || $isComposerCustomEmojiNode(node) || $isComposerStandardEmojiNode(node)) { - const literal = spans.some( - (span) => - span.role === 'content' && - (span.format & MarkdownHl.code) !== 0 && - span.start <= sourceOffset && - span.end >= nodeEnd, - ); + const literal = + $isEscapedAtOffset(source, sourceOffset) || + spans.some( + (span) => + span.role === 'content' && + (span.format & MarkdownHl.code) !== 0 && + span.start <= sourceOffset && + span.end >= nodeEnd, + ); if (node.isLiteral() !== literal) { node.setLiteral(literal); }