fix(word): strip HTML style blocks and alignment divs from DOCX input

Pre-process markdown before Word/DOCX export to remove raw HTML artifacts

(<style> blocks, HTML comments, and <div align=...> tags) that were

visible in the generated document. Applies to single and batch DOCX exports

via both Pandoc and WordTemplateExporter paths.
This commit is contained in:
2026-06-30 13:57:29 +05:30
parent d705cfc30b
commit e72b863362
3 changed files with 139 additions and 5 deletions
+61
View File
@@ -0,0 +1,61 @@
/**
* Tests for WordTemplateExporter
*/
const WordTemplateExporter = require('../src/wordTemplateExporter');
describe('WordTemplateExporter.preprocessMarkdownForWordExport', () => {
test('removes HTML style blocks', () => {
const input = `<style>
<!-- sneh-a4-print v1 -->
@media print { body { font-size: 8pt; } }
</style>
# Heading
`;
const output = WordTemplateExporter.preprocessMarkdownForWordExport(input);
expect(output).not.toContain('<style');
expect(output).not.toContain('</style>');
expect(output).not.toContain('sneh-a4-print');
expect(output).not.toContain('@media print');
expect(output).toContain('# Heading');
});
test('removes HTML comments outside style blocks', () => {
const input = `<!-- comment -->
Hello world
`;
const output = WordTemplateExporter.preprocessMarkdownForWordExport(input);
expect(output).not.toContain('<!--');
expect(output).not.toContain('-->');
expect(output).toContain('Hello world');
});
test('removes alignment div tags', () => {
const input = `<div align="center">
Centered content
</div>
`;
const output = WordTemplateExporter.preprocessMarkdownForWordExport(input);
expect(output).not.toContain('<div align="center">');
expect(output).not.toContain('</div>');
expect(output).toContain('Centered content');
});
test('preserves regular markdown content', () => {
const input = `# Title
| A | B |
|---|---|
| 1 | 2 |
`;
const output = WordTemplateExporter.preprocessMarkdownForWordExport(input);
expect(output).toBe(input);
});
test('handles content with no HTML artifacts', () => {
const input = 'Plain text paragraph.';
const output = WordTemplateExporter.preprocessMarkdownForWordExport(input);
expect(output).toBe(input);
});
});