Repository navigation
v0.16.2
Highlights
Word 0.16.2 brings readable tracked comparisons, legal revision rendering, stronger formula layout and the bounded Python, signing and form repairs completed since v0.16.1. The exact seven Rust packages, CLI and rdocx Python distribution share this version. This patch release includes approved Rust and Python source compatibility changes described below.
Added
- Legal revision styling selects blue insertions, red deletions and green moves through Rust, Python and CLI options. Plain remains the default, and stored formatting is unchanged.
- Python adds supported heading, break, paragraph, run and stream aliases, typed section enums and actionable alternatives where native semantics differ from python-docx. Default-template List Bullet and List Number still require the explicit numbering APIs. One-dimension picture sizing still names the supported two-dimension call.
- Python and
rdocx sign/verify-signaturesexpose existing native package signing with DER or strict PEM inputs. Reports inspect the current staged package, including fill-then-sign and sign-then-fill operations. This is OOXML package signing, not PDF signing. - Callable form snapshots, atomic value binding and
rdocx fill --valuescover supported plain-text, checkbox, drop-down and date controls plus legacy text fields. Typed SDT fills remove the qualified showingPlcHdr flag, write supported date metadata, resolve declared item values/display strings and refuse missing individual selectors. - Python CustomProperties supports item assignment, deletion and membership with strict string keys. Section and TabStop snapshots retain immutable fields with live section or delete/re-add alternatives. Private paragraph and run XML names point to checked XML providers, and legacy drop-down selection names its integer index contract.
- Native nullable run width-scale and position setters clear their direct overrides. Native Word and Python chart legend controls expose visibility, position and overlay through the shared renderer.
Fixed
- Comparisons preserve complete hyperlinks and chart/workbook resources, handle table-adjacent, empty and trailing paragraphs, and group consecutive word replacements without losing equal anchors or source ownership. Unsupported nested hyperlink cases remain explicit refusals.
- Paragraph border thickness and spacing participate in flow, joined/split borders and table reconstruction. The missing original border file was qualified through the approved inferred 15-point and
w:sz="15"controls, not claimed as an exact replay of an unavailable input. - Finite LaTeX conversion and selected-face ink/MATH metrics improve the reported symbols, fractions, scripts, radicals, integrals and baselines. The 73-input follow-up retains its independently observed degree fallback and unsupported diagnostics. This is not unrestricted TeX or whole-page native font parity.
- Repeated owner-inventory work during Python table access and scalar edits is reduced. The measured repair is not a universal timing or total cell-fill complexity promise. Six measured Rust inline annotations retain existing setter bodies and signatures.
- Identified paragraphs inside block controls validate without stripping
w14:paraIdorw14:textId. Newly invalid direct paragraph XML refuses atomically while supported inherited namespace/MC authority, original opaque exceptions and unchanged no-ops retain their bounded source-owned checks. - Python tiny bare paragraph space-after and character-spacing values refuse before zero quantization. Integer and float
line_spacingvalues denote line multiples, while explicit Length values denote absolute spacing. Publicupdate_sectionrequires Length for every nonzero geometry argument, with bare zero retained and the live section EMU route unchanged. - DOCX save to a PDF path, duplicate stored tab stops, header page breaks, malformed language tags and authored fonts without a valid name table refuse before publication. Valid streams, ordinary fonts, language tags and body breaks remain supported. Word font CLI errors no longer suggest an unavailable
--force.
Compatibility
Update exhaustive Rust literals for RenderOptions.revision_style and LayoutInput.revision_style. ParagraphBlock.has_visible_revision: bool becomes change_bar: Option<Color>. NoteLayout.revision_ranges contains (Range<usize>, Color) pairs. Select RevisionStyle::Plain for the default paint style. These approved source breaks remain real despite the 0.16.x version line.
ZIP 9.0.3 changes the upstream error type carried by OpcError::Zip. Native signing features and WASM exclusions retain their existing boundaries. Python font.size now refuses nonzero integer EMU inputs that would store zero and names explicit units. New refusals do not redefine the truncating unit constructors. Python 3.14 is not qualified by the 3.9/3.12 release matrix.
Python source compatibility changes include ColorFormat.type returning rdocx.enum.dml.MSO_COLOR_TYPE | None instead of strings. Compare against enum members. Word theme_color remains str | None, and supported string setters, native color math and stored formatting remain unchanged.
The completed Issue 386 numeric, mapping, name and diagnostic repairs retain the documented default-list and two-dimension-picture alternatives. Whole-issue acceptance and closure require the actual final paired untouched 19-attempt reporter replay and independent 16-group semantic companion. A self-catching script exit zero alone is insufficient.
Prior intentional comparison grouping, legal/double-underline paint, border flow and legend layout changes remain attributed to their reviewed repairs. The S93 union changed eighteen hash entries and four pixel buffers. Version preparation introduces no further paint change. Native formula/border observations have the limits above. Issue 385 is partially addressed: chart read-back, display equations, list restart/font and note APIs plus remaining PowerPoint admission/CLI repairs remain in S95.11. Bibliography, navigation, fillable PDF, full-range watermark and Word multi-face native interoperability are excluded.
Contributors
- @Andrewkoro105 reported the nullable setter inconsistency in Issue 364, formula rendering in Issue 365, borders in Issue 366 and measured setters in Issue 367.
- @hadim, Hadrien Mary, supplied the comparison reports 368, 369, 370, 371 and 372, plus PR 374. Selected donor slices and reviewed hardened equivalents landed. The closed PR was not merged unchanged.
- Hadrien reported legal revision styling in Issue 373 and supplied PR 375. Its adapted styling and source-preservation work retain the approved compatibility boundaries. The closed PR was not merged unchanged.
- Hadrien supplied PR 376, adapted into job-local test optimization and bounded corpus/dependency routing without shortening acceptance suites. He reported table owner costs in Issue 378, Python compatibility in Issue 379, signing/forms in Issue 380, chart-resource comparison in Issue 382 and legend rendering in Issue 383.
- Hadrien supplied the control-validation reproduction in Issue 384 and the typed-fill, invalid-value and raw-XML groups of Issue 385. Only the named groups are included here. The issue remains partially addressed.
- Hadrien reported the numeric, mapping, compatibility-name, color and legacy drop-down cases in Issue 386. The implemented Word repairs and supported alternatives are described above.
- Atul Sharma maintained the release preparation and hardened integration. Publication retains its separate approval and verification.