diff --git a/CHANGELOG.md b/CHANGELOG.md
index be570f2..0e3192c 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,7 @@
#### Review fixes
+- Preserved code spans containing three or more spaces when exporting Todo files to Markdown.
- Offered known tag-argument completions inside auto-closed parentheses without inserting a duplicate closing parenthesis.
- Preserved punctuation immediately before a completion or elapsed-time tag when reopening a task.
- Rejected invalid ISO calendar dates in time estimates instead of silently rolling them into another month.
diff --git a/src/utils/markdown-export.ts b/src/utils/markdown-export.ts
index 4b9b66c..1e09d35 100644
--- a/src/utils/markdown-export.ts
+++ b/src/utils/markdown-export.ts
@@ -15,7 +15,12 @@ const escapeMarkdownText = (text: string): string => text.replace(/[!-/:-@[-`{-~
const renderCodeSpan = (content: string): string => {
if (!content) return '';
- const needsPadding = (content.startsWith(' ') || content.endsWith(' ')) && !/^ +$/.test(content),
+ // Markdown trims a space from each end of runs longer than two spaces,
+ // even when the code span contains nothing but spaces.
+ const spacesOnly = /^ +$/.test(content),
+ needsPadding = spacesOnly
+ ? content.length > 2
+ : content.startsWith(' ') || content.endsWith(' '),
padding = needsPadding ? ' ' : '';
return `\`${padding}${content}${padding}\``;
diff --git a/test/markdown-export.spec.ts b/test/markdown-export.spec.ts
index 8dce567..5fcec8f 100644
--- a/test/markdown-export.spec.ts
+++ b/test/markdown-export.spec.ts
@@ -95,6 +95,15 @@ describe('Todo Markdown export', () => {
expect(html).to.include(' code ');
});
+ it('preserves code spans containing three or more spaces', () => {
+ const markdown = renderTodoMarkdown('Tasks', [
+ { kind: 'comment', level: 0, text: '` ` ` `' },
+ ]),
+ html = new MarkdownIt({ html: true }).render(markdown);
+
+ expect(html).to.include(' ');
+ });
+
it('preserves HTML-like text and entities in rendered Markdown', () => {
const markdown = renderTodoMarkdown('Plan ©', [
{ kind: 'project', level: 0, text: 'Project ©' },