mirror of
https://github.com/storytold/wordcraft.git
synced 2026-11-06 18:51:26 +00:00
Form controls: - Placement: a control hanging from the baseline (as LibreOffice places those it makes) was saved with no placement. LibreOffice then puts it at the line's top, so every control row shrank. Its raise is now kept (`ContentControl::form_raise`, read as in-line frames are) and written, standing on the baseline when it had none. - Multi-line fields: these were saved without LibreOffice's `MultiLine` property, so they showed one centred line. They now carry it. - Text fields get LibreOffice's flat border. - Also: `pt()` no longer writes "-0pt". Custom shapes: - A shape drawn from its own geometry was saved as WordCraft's path of it, and a preset WordCraft draws as a rectangle (a cloud) was saved as a rectangle. The geometry as read (type, path, equations, handles) is now kept (`ShapeExtra::odf_geometry`) and written back, mirrored as the shape now is. - `shape.change` and the ink-to-shape conversion drop the kept geometry, since the shape is then another kind. `ShapeExtra` holds it as an `Arc<String>` to keep `Placed::Shape` small. - The reader's `end` hands skipped elements to `end_skipped`. Results: - The forms document round-trips pixel-identical (2,949 pixels before), with its text the same. - The shape presets fall from 2,467 to 1,220. The rest is LibreOffice's hairline outline, which WordCraft keeps as 0.5 pt. - Across the corpus the round-trip difference falls from 45k to 41k pixels. 42 of 125 documents round-trip pixel-identical, 92 with their text the same, and none gets worse. gaps.md row 19 and the ROADMAP log are updated. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GBVQLyDnrG8Tn1yDQcUabC