feat(document): importeer .docx en .odt als Markdown #2101

Merged
brenno merged 1 commit from feature/document-import-docx-odt into main 2026-09-15 14:46:52 +00:00
Owner

Samenvatting

  • Twee nieuwe importers zetten Word (.docx) en LibreOffice (.odt) documenten best-effort om naar gewone Markdown: koppen, alinea's, vet/cursief/doorgehaald, geneste lijsten (ongeordend én geordend via numbering.xml), tabellen en hyperlinks.
  • importDocumentBytes in document_import_service.dart is de gedeelde grens: extensiedetectie, safeDecodeZip + parseXmlSafe (zip-bom- en entity-bescherming), en een fail-closed MarkdownSafetyScanner over de gegenereerde uitvoer — dezelfde poort als bij het openen van een vreemd .md.
  • Headless, op bytes, geen dart:io, geen nieuwe afhankelijkheid — werkt dus ook op web.
  • Bereikbaar via het welkomstscherm (Document importeren…) en het …-menu van de documenteditor (Importeren uit Word of LibreOffice…). Het resultaat opent als nieuw documenttabblad via newDocumentFromMarkdown.

Bewust nìet inbegrepen: .pages — Apple's IWA/protobuf-formaat is gesloten; de bestaande Keynote-salvage redt tekstfragmenten maar geen documentstructuur.

Testplan

  • 18 nieuwe tests: koppen/opmaak/lijsten/tabellen/links per formaat, leeg document, onbekende extensie, beschadigd archief, onveilige gegenereerde Markdown, bestandsnaamherkenning, en de volledige UI-route via fileOverride
  • make check groen (incl. coverage-vloer en goldens)
  • make check-secrets en make sast schoon

Generated with Devin

## Samenvatting - Twee nieuwe importers zetten Word (`.docx`) en LibreOffice (`.odt`) documenten best-effort om naar gewone Markdown: koppen, alinea's, vet/cursief/doorgehaald, geneste lijsten (ongeordend én geordend via `numbering.xml`), tabellen en hyperlinks. - `importDocumentBytes` in `document_import_service.dart` is de gedeelde grens: extensiedetectie, `safeDecodeZip` + `parseXmlSafe` (zip-bom- en entity-bescherming), en een fail-closed `MarkdownSafetyScanner` over de gegenereerde uitvoer — dezelfde poort als bij het openen van een vreemd `.md`. - Headless, op bytes, geen `dart:io`, geen nieuwe afhankelijkheid — werkt dus ook op web. - Bereikbaar via het welkomstscherm (**Document importeren…**) en het …-menu van de documenteditor (**Importeren uit Word of LibreOffice…**). Het resultaat opent als nieuw documenttabblad via `newDocumentFromMarkdown`. Bewust nìet inbegrepen: `.pages` — Apple's IWA/protobuf-formaat is gesloten; de bestaande Keynote-salvage redt tekstfragmenten maar geen documentstructuur. #### Testplan - [x] 18 nieuwe tests: koppen/opmaak/lijsten/tabellen/links per formaat, leeg document, onbekende extensie, beschadigd archief, onveilige gegenereerde Markdown, bestandsnaamherkenning, en de volledige UI-route via `fileOverride` - [x] `make check` groen (incl. coverage-vloer en goldens) - [x] `make check-secrets` en `make sast` schoon Generated with [Devin](https://devin.ai)
feat(document): importeer .docx en .odt als Markdown
All checks were successful
scans / scans (pull_request) Successful in 3m56s
static-gate / static-gate (pull_request) Successful in 7m27s
086c4f3637
De documentmodus kon al naar Word en LibreOffice exporteren, maar de
terugweg ontbrak. Twee nieuwe importers zetten word/document.xml en
content.xml best-effort om naar gewone Markdown — koppen, alinea's,
vet/cursief, lijsten, tabellen en hyperlinks. De service deelt de
bestaande zip/xml-hardening en dwingt de uitvoer door dezelfde
fail-closed safety-scan als het openen van een vreemd .md. Bereikbaar
via het welkomstscherm en het …-menu van de documenteditor.

Generated with [Devin](https://devin.ai)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
brenno force-pushed feature/document-import-docx-odt from 086c4f3637
All checks were successful
scans / scans (pull_request) Successful in 3m56s
static-gate / static-gate (pull_request) Successful in 7m27s
to 6ec05f3971
All checks were successful
scans / scans (pull_request) Successful in 3m18s
static-gate / static-gate (pull_request) Successful in 6m53s
2026-09-15 14:13:57 +00:00
Compare
brenno force-pushed feature/document-import-docx-odt from 6ec05f3971
All checks were successful
scans / scans (pull_request) Successful in 3m18s
static-gate / static-gate (pull_request) Successful in 6m53s
to bbc8049c37
All checks were successful
scans / scans (pull_request) Successful in 2m58s
static-gate / static-gate (pull_request) Successful in 6m6s
2026-09-15 14:40:23 +00:00
Compare
brenno merged commit f6613a3121 into main 2026-09-15 14:46:52 +00:00
Sign in to join this conversation.
No description provided.