diff --git a/src/trackChangesModel.ts b/src/trackChangesModel.ts index d5399ab..8e8929a 100644 --- a/src/trackChangesModel.ts +++ b/src/trackChangesModel.ts @@ -400,6 +400,16 @@ export function renderAuthorship( .join("\n"); } +/** Off-state body: the current buffer as plain markdown, no annotations (INV-33). */ +export function renderPlain(currentText: string, opts: RenderOptions = {}): string { + const render = opts.render ?? defaultRender; + try { + return render(currentText); + } catch (err) { + return chip(err instanceof Error ? err.message : String(err)); + } +} + /** Pure entry point: annotated HTML body for the preview (INV-22). */ export function renderTrackChanges( baselineText: string, diff --git a/test/trackChangesModel.test.ts b/test/trackChangesModel.test.ts index 0fb1b49..6476723 100644 --- a/test/trackChangesModel.test.ts +++ b/test/trackChangesModel.test.ts @@ -246,6 +246,17 @@ describe("colorByAuthor", () => { }); }); +import { renderPlain } from "../src/trackChangesModel"; + +describe("renderPlain", () => { + test("renderPlain renders current buffer as plain markdown (no marks)", () => { + const html = renderPlain("# Title\n\nhello"); + expect(html).toContain("