fix(docx): sorteer w:rPr-elementen volgens OOXML-schema #2097

Merged
brenno merged 1 commit from fix/docx-rpr-ordering into main 2026-09-15 11:54:34 +00:00
Owner

Samenvatting

Follow-up op #2096. De _rPr-stack hoopte run-properties op in markdown-nest-volgorde, niet in OOXML-schema-volgorde. Bij _code_ kwam <w:i/> vóór <w:rStyle> te staan — een overtreding van de ECMA-376 CT_RPr-volgorde (rStyle moet eerst). Microsoft Office weigert een .docx met dergelijke schema-overtredingen met "bestand is beschadigd"; LibreOffice is soepeler en opent het wel.

Dit verklaart waarom het bestand na de vorige fix (PR #2096) nog steeds niet in Microsoft Office opende: de geneste-<w:p>-bug was opgelost, maar de rPr-volgorde-overtreding bleef. Het bestand dat de gebruiker op schijf had was bovendien door LibreOffice herschreven (die het OciDeck-bestand kon openen), maar het oorspronkelijke OciDeck-bestand had nog steeds deze schema-overtreding.

Oplossing: sorteer de rPr-elementen op schema-rang bij het emitren (_rPrXml()), zonder de stack zelf te wijzigen (pop heeft de oorspronkelijke volgorde nodig). ODT heeft dit probleem niet: dat gebruikt text:span met stijlnamen, geen inline rPr-kind-elementen.

Refs #2095.

Testplan

  • Regressietest: _code_rStyle staat vóór i in w:rPr
  • Echte document-body uit 2026-09-11_Information_Security_Policy_NEO_NL_v2.0.md: 0 rPr-volgorde-overtredingen (voorheen 1)
  • make check groen

Generated with Devin

## Samenvatting Follow-up op #2096. De `_rPr`-stack hoopte run-properties op in markdown-nest-volgorde, niet in OOXML-schema-volgorde. Bij `_`code`_` kwam `<w:i/>` vóór `<w:rStyle>` te staan — een overtreding van de ECMA-376 `CT_RPr`-volgorde (rStyle moet eerst). Microsoft Office weigert een .docx met dergelijke schema-overtredingen met "bestand is beschadigd"; LibreOffice is soepeler en opent het wel. Dit verklaart waarom het bestand na de vorige fix (PR #2096) nog steeds niet in Microsoft Office opende: de geneste-`<w:p>`-bug was opgelost, maar de rPr-volgorde-overtreding bleef. Het bestand dat de gebruiker op schijf had was bovendien door LibreOffice herschreven (die het OciDeck-bestand kon openen), maar het oorspronkelijke OciDeck-bestand had nog steeds deze schema-overtreding. **Oplossing:** sorteer de rPr-elementen op schema-rang bij het emitren (`_rPrXml()`), zonder de stack zelf te wijzigen (pop heeft de oorspronkelijke volgorde nodig). ODT heeft dit probleem niet: dat gebruikt `text:span` met stijlnamen, geen inline rPr-kind-elementen. Refs #2095. #### Testplan - [x] Regressietest: `_`code`_` → `rStyle` staat vóór `i` in `w:rPr` - [x] Echte document-body uit `2026-09-11_Information_Security_Policy_NEO_NL_v2.0.md`: 0 rPr-volgorde-overtredingen (voorheen 1) - [x] `make check` groen Generated with [Devin](https://devin.ai)
fix(docx): sorteer w:rPr-elementen volgens OOXML-schema
All checks were successful
scans / scans (pull_request) Successful in 3m8s
static-gate / static-gate (pull_request) Successful in 6m23s
ff1cdbfca2
De _rPr-stack hoopte run-properties op in markdown-nest-volgorde, niet
in schema-volgorde. Bij _`code`_ kwam <w:i/> vóór <w:rStyle> te staan —
een overtreding van de ECMA-376 CT_RPr-volgorde (rStyle moet eerst).
Microsoft Office weigert een .docx met dergelijke schema-overtredingen
met "bestand is beschadigd"; LibreOffice is hier soepeler in.

De fix sorteert de rPr-elementen op schema-rang bij het emitren, zonder
de stack zelf te wijzigen (pop heeft de oorspronkelijke volgorde nodig).
ODT heeft dit probleem niet: dat gebruikt text:span met stijlnamen, geen
inline rPr-kind-elementen.

Refs #2095.

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

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
brenno merged commit e4068c1e35 into main 2026-09-15 11:54:34 +00:00
Sign in to join this conversation.
No description provided.