Cross-implementation conformance results for WordprocessingML (.docx), in the
web-platform-tests tradition. Each scenario
asserts behavior derivable from the cited ECMA-376 clause — not from any one library — and runs
unchanged against every registered adapter. Unsupported means the adapter declined
the operation honestly (the NOTRUN analog): a gap in the matrix is information about the library,
not a failure of the suite. Pass (divergent serialization) means every assertion
derived from the cited clause passed, but the saved document did not match the reference
serialization's canonical XML — typically an implementation materializing formatting defaults on
save. That is legal WordprocessingML serialization freedom, not a conformance failure; the
per-assertion breakdown in latest.json carries the detail.
| Scenario | safe-docx 0.11.0+git.f5a16a3ab1f9 | python-docx 1.2.0 | libreoffice LibreOffice 24.2.7.2 420(Build:2) | openxml-sdk DocumentFormat.OpenXml 3.5.1 |
|---|---|---|---|---|
acceptDeletedParagraphMarkMergesParagraphsAccepting a deleted paragraph mark merges the paragraph with the following paragraph ECMA-376 edition 5, Part 1 § 17.13.5.15 (del (Deleted Paragraph)) | Fail | Unsupported python-docx has no tracked-changes (revision) API | Pass | Unsupported the Open XML SDK is a typed DOM over the package with no accept/reject-revisions API; implementing one would be an adapter-side algorithm |
acceptDeletionsRemovesDelContentAccepting deletions removes w:del wrappers and their content ECMA-376 edition 5, Part 1 § 17.13.5.14 (del (Deleted Run Content)) | Pass | Unsupported python-docx has no tracked-changes (revision) API | Pass (divergent serialization) | Unsupported the Open XML SDK is a typed DOM over the package with no accept/reject-revisions API; implementing one would be an adapter-side algorithm |
acceptFormattingChangeKeepsNewRunPropertiesAccepting formatting changes keeps current run properties ECMA-376 edition 5, Part 1 § 17.13.5.31 (rPrChange (Revision Information for Run Properties)) | Pass | Unsupported python-docx has no tracked-changes (revision) API | Pass (divergent serialization) | Unsupported the Open XML SDK is a typed DOM over the package with no accept/reject-revisions API; implementing one would be an adapter-side algorithm |
acceptInsertionsUnwrapsInsWrappersAccepting insertions unwraps w:ins and keeps run content ECMA-376 edition 5, Part 1 § 17.13.5.18 (ins (Inserted Run Content)) | Pass | Unsupported python-docx has no tracked-changes (revision) API | Pass (divergent serialization) | Unsupported the Open XML SDK is a typed DOM over the package with no accept/reject-revisions API; implementing one would be an adapter-side algorithm |
acceptNestedDeletionInsideInsertionAccepting nested deletion inside insertion keeps surviving inserted text ECMA-376 edition 5, Part 1 § 17.13.5.18 (ins (Inserted Run Content)) | Pass | Unsupported python-docx has no tracked-changes (revision) API | Pass | Unsupported the Open XML SDK is a typed DOM over the package with no accept/reject-revisions API; implementing one would be an adapter-side algorithm |
rejectDeletionsRestoresDelContentRejecting deletions restores w:delText content to body text ECMA-376 edition 5, Part 1 § 17.13.5.14 (del (Deleted Run Content)) | Pass | Unsupported python-docx has no tracked-changes (revision) API | Pass (divergent serialization) | Unsupported the Open XML SDK is a typed DOM over the package with no accept/reject-revisions API; implementing one would be an adapter-side algorithm |
rejectFormattingChangeRestoresPriorRunPropertiesRejecting formatting changes restores prior run properties ECMA-376 edition 5, Part 1 § 17.13.5.31 (rPrChange (Revision Information for Run Properties)) | Pass | Unsupported python-docx has no tracked-changes (revision) API | Pass (divergent serialization) | Unsupported the Open XML SDK is a typed DOM over the package with no accept/reject-revisions API; implementing one would be an adapter-side algorithm |
rejectInsertedParagraphMarkMergesParagraphsRejecting an inserted paragraph mark removes the mark and merges the paragraph with the following paragraph ECMA-376 edition 5, Part 1 § 17.13.5.20 (ins (Inserted Paragraph)) | Fail | Unsupported python-docx has no tracked-changes (revision) API | Pass | Unsupported the Open XML SDK is a typed DOM over the package with no accept/reject-revisions API; implementing one would be an adapter-side algorithm |
rejectInsertionsRemovesInsContentRejecting insertions removes w:ins wrappers and their run content ECMA-376 edition 5, Part 1 § 17.13.5.18 (ins (Inserted Run Content)) | Pass | Unsupported python-docx has no tracked-changes (revision) API | Pass (divergent serialization) | Unsupported the Open XML SDK is a typed DOM over the package with no accept/reject-revisions API; implementing one would be an adapter-side algorithm |
rejectNestedDeletionInsideInsertionRejecting nested deletion inside insertion removes the whole insertion ECMA-376 edition 5, Part 1 § 17.13.5.18 (ins (Inserted Run Content)) | Pass | Unsupported python-docx has no tracked-changes (revision) API | Pass | Unsupported the Open XML SDK is a typed DOM over the package with no accept/reject-revisions API; implementing one would be an adapter-side algorithm |
replaceFirstOccurrencePreservesOffsetsReplacing the first occurrence places the new text at the matched offset ECMA-376 edition 5, Part 1 § 17.3.3.31 (t (Text)) | Pass | Pass | Pass | Pass |
replaceTextAcrossRunBoundaryReplacing text spanning a run boundary places the replacement at the matched offset ECMA-376 edition 5, Part 1 § 17.3.3.31 (t (Text)) | Pass | Unsupported match spans run boundaries; the python-docx adapter only performs intra-run replacement (glue, not algorithms) | Pass | Unsupported first occurrence spans w:t boundaries; the openxml-sdk adapter only performs intra-w:t replacement (glue, not algorithms) |
Data: results/latest.json · Suite, scenario DSL, and adapter protocol: open-agreements/docx-platform-tests (Apache-2.0) · Narrative comparisons: usejunior.com