From 4420913049f18492aa7a68a9da5d31983707d887 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Sun, 27 Jul 2025 12:16:42 +0300 Subject: [PATCH] fix(export/markdown): superscript and subscript not preserved (closes #4307) --- apps/server/src/services/export/markdown.spec.ts | 6 ++++++ apps/server/src/services/export/markdown.ts | 2 +- apps/server/src/services/import/markdown.spec.ts | 6 ++++++ 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/apps/server/src/services/export/markdown.spec.ts b/apps/server/src/services/export/markdown.spec.ts index ac9d2aa04..fe1dc1c37 100644 --- a/apps/server/src/services/export/markdown.spec.ts +++ b/apps/server/src/services/export/markdown.spec.ts @@ -378,4 +378,10 @@ describe("Markdown export", () => { expect(markdownExportService.toMarkdown(html)).toBe(expected); }); + it("preserves superscript and subscript", () => { + const html = /*html*/`

Hello superscript subscript

`; + const expected = `Hello superscript subscript`; + expect(markdownExportService.toMarkdown(html)).toBe(expected); + }); + }); diff --git a/apps/server/src/services/export/markdown.ts b/apps/server/src/services/export/markdown.ts index 6bbaf386d..ed16c6b30 100644 --- a/apps/server/src/services/export/markdown.ts +++ b/apps/server/src/services/export/markdown.ts @@ -56,7 +56,7 @@ function toMarkdown(content: string) { instance.addRule("math", buildMathFilter()); instance.addRule("li", buildListItemFilter()); instance.use(gfm); - instance.keep([ "kbd" ]); + instance.keep([ "kbd", "sup", "sub" ]); } return instance.turndown(content); diff --git a/apps/server/src/services/import/markdown.spec.ts b/apps/server/src/services/import/markdown.spec.ts index c8d06e28e..0bf747a81 100644 --- a/apps/server/src/services/import/markdown.spec.ts +++ b/apps/server/src/services/import/markdown.spec.ts @@ -299,4 +299,10 @@ $$`; expect(markdownService.renderToHtml(input, "Title")).toStrictEqual(expected); }); + it("preserves superscript and subscript", () => { + const input = `Hello superscript subscript`; + const expected = /*html*/`

Hello superscript subscript

`; + expect(markdownService.renderToHtml(input, "Title")).toStrictEqual(expected); + }); + });