diff --git a/src/renderer/src/components/editor/markdown-fence-scanner.test.ts b/src/renderer/src/components/editor/markdown-fence-scanner.test.ts index 34b45df1a71..b10756b9a42 100644 --- a/src/renderer/src/components/editor/markdown-fence-scanner.test.ts +++ b/src/renderer/src/components/editor/markdown-fence-scanner.test.ts @@ -160,6 +160,7 @@ describe('fence boundaries against marked', () => { '````', '~~~', '```~~~', + '``` ~', '~~~```', '```` ', '```js', diff --git a/src/renderer/src/components/editor/markdown-fence-scanner.ts b/src/renderer/src/components/editor/markdown-fence-scanner.ts index 3d1de134eba..f01ffaacc30 100644 --- a/src/renderer/src/components/editor/markdown-fence-scanner.ts +++ b/src/renderer/src/components/editor/markdown-fence-scanner.ts @@ -10,17 +10,20 @@ export type MarkdownFenceTracker = { // Top-level fence delimiters may be indented by at most three spaces. const FENCE_LINE = /[ ]{0,3}(`{3,}|~{3,})/y function hasClosingSuffix(content: string, start: number, end: number): boolean { + let sawWhitespace = false for (let index = start; index < end; index += 1) { const character = content.charCodeAt(index) - if ( - character !== 126 && - character !== 96 && - character !== 32 && - character !== 9 && - character !== 13 - ) { + if (character === 32 || character === 9 || character === 13) { + sawWhitespace = true + continue + } + if ((character === 126 || character === 96) && !sawWhitespace) { + continue + } + if (character !== 126 && character !== 96) { return false } + return false } return true }