fix(composer): no LaTeX conversion inside a typed markdown fence or backtick span (#184 O3)
In markdown mode each paragraph line is serialised before parseBlockMD joins them, so $x$ inside a ``` fence became data-mx-maths markup inside the resulting <pre><code> (rendered as math in a code block). Track fence state across lines and skip math for fenced lines and for backtick code spans. Unit tests added; verified in the browser. Also: scripts/dev-homeserver.sh enables MSC4140 delayed events so scheduled messages work locally. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PPmy3tPq869XDW4njjVaKA
This commit is contained in:
@@ -65,3 +65,27 @@ test('no math conversion inside a code block', () => {
|
||||
test('a message with no math is unchanged', () => {
|
||||
assert.equal(toMatrixCustomHTML(txt('just hello'), OPTS), 'just hello');
|
||||
});
|
||||
|
||||
// Gitea #184 O3 — markdown mode: fences and backtick spans typed as plain
|
||||
// paragraphs are literal too (the block markdown parser only sees the fence
|
||||
// after the lines are joined, so math must be skipped while serialising them).
|
||||
const MD_OPTS = { ...OPTS, allowInlineMarkdown: true, allowBlockMarkdown: true };
|
||||
|
||||
test('markdown: no math conversion inside a typed ``` fence', () => {
|
||||
const paragraphs = [
|
||||
el(BlockType.Paragraph, [txt('```')]),
|
||||
el(BlockType.Paragraph, [txt('$x$ literal')]),
|
||||
el(BlockType.Paragraph, [txt('```')]),
|
||||
el(BlockType.Paragraph, [txt('after $y$')]),
|
||||
];
|
||||
const out = toMatrixCustomHTML(paragraphs, MD_OPTS);
|
||||
assert.ok(out.includes('<pre'), 'fence became a code block');
|
||||
assert.ok(out.includes('$x$ literal'), 'code block content stays literal');
|
||||
assert.ok(out.includes('data-mx-maths="y"'), 'math after the fence still converts');
|
||||
});
|
||||
|
||||
test('markdown: no math conversion inside a backtick span, math outside still converts', () => {
|
||||
const out = toMatrixCustomHTML(el(BlockType.Paragraph, [txt('use `$x$` and $y$')]), MD_OPTS);
|
||||
assert.ok(/<code[^>]*>\$x\$<\/code>/.test(out), 'backtick span stays literal');
|
||||
assert.ok(out.includes('data-mx-maths="y"'));
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user