Skip to content

Commit e23425a

Browse files
Merge pull request #100 from ThisIs-Developer/copilot/fix-latex-rendering-issue
Preserve multiline `$$...$$` blocks for MathJax rendering in markdown preview
2 parents 364cedd + 1820451 commit e23425a

2 files changed

Lines changed: 62 additions & 0 deletions

File tree

desktop-app/resources/js/script.js

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -245,6 +245,33 @@ document.addEventListener("DOMContentLoaded", function () {
245245
let lineNumberUpdateFrame = null;
246246

247247
const renderer = new marked.Renderer();
248+
const BLOCK_MATH_MARKER_PATTERN = /^\$\$/m;
249+
const BLOCK_MATH_PATTERN = /^\$\$[ \t]*\n?([\s\S]*?)\n?\$\$[ \t]*(?:\n|$)/;
250+
const blockMathExtension = {
251+
name: 'blockMath',
252+
level: 'block',
253+
start(src) {
254+
const match = src.match(BLOCK_MATH_MARKER_PATTERN);
255+
if (!match) {
256+
return undefined;
257+
}
258+
return match.index;
259+
},
260+
tokenizer(src) {
261+
const match = BLOCK_MATH_PATTERN.exec(src);
262+
if (!match) {
263+
return undefined;
264+
}
265+
return {
266+
type: 'blockMath',
267+
raw: match[0],
268+
text: match[1],
269+
};
270+
},
271+
renderer(token) {
272+
return `<div class="math-block">$$\n${token.text}\n$$</div>\n`;
273+
}
274+
};
248275
renderer.code = function (code, language) {
249276
if (language === 'mermaid') {
250277
const uniqueId = 'mermaid-diagram-' + Math.random().toString(36).substr(2, 9);
@@ -258,6 +285,10 @@ document.addEventListener("DOMContentLoaded", function () {
258285
return `<pre><code class="hljs ${validLanguage}">${highlightedCode}</code></pre>`;
259286
};
260287

288+
marked.use({
289+
extensions: [blockMathExtension]
290+
});
291+
261292
marked.setOptions({
262293
...markedOptions,
263294
renderer: renderer,

script.js

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -273,6 +273,33 @@ document.addEventListener("DOMContentLoaded", function () {
273273
let lineNumberUpdateFrame = null;
274274

275275
const renderer = new marked.Renderer();
276+
const BLOCK_MATH_MARKER_PATTERN = /^\$\$/m;
277+
const BLOCK_MATH_PATTERN = /^\$\$[ \t]*\n?([\s\S]*?)\n?\$\$[ \t]*(?:\n|$)/;
278+
const blockMathExtension = {
279+
name: 'blockMath',
280+
level: 'block',
281+
start(src) {
282+
const match = src.match(BLOCK_MATH_MARKER_PATTERN);
283+
if (!match) {
284+
return undefined;
285+
}
286+
return match.index;
287+
},
288+
tokenizer(src) {
289+
const match = BLOCK_MATH_PATTERN.exec(src);
290+
if (!match) {
291+
return undefined;
292+
}
293+
return {
294+
type: 'blockMath',
295+
raw: match[0],
296+
text: match[1],
297+
};
298+
},
299+
renderer(token) {
300+
return `<div class="math-block">$$\n${token.text}\n$$</div>\n`;
301+
}
302+
};
276303
renderer.code = function (code, language) {
277304
if (language === 'mermaid') {
278305
const uniqueId = 'mermaid-diagram-' + Math.random().toString(36).substr(2, 9);
@@ -286,6 +313,10 @@ document.addEventListener("DOMContentLoaded", function () {
286313
return `<pre><code class="hljs ${validLanguage}">${highlightedCode}</code></pre>`;
287314
};
288315

316+
marked.use({
317+
extensions: [blockMathExtension]
318+
});
319+
289320
marked.setOptions({
290321
...markedOptions,
291322
renderer: renderer,

0 commit comments

Comments
 (0)