mirror of
https://github.com/storytold/wordcraft.git
synced 2026-11-07 03:01:32 +00:00
LibreOffice writes an embedded object's replacement picture in its own metafile format, which WordCraft can't decode. So an embedded spreadsheet (`draw:object`, ODF 1.3 §10.4.6) or OLE object (`draw:object-ole`, §10.4.7) vanished on open, and saving lost it. Such objects are now kept whole: their files, media type (from the manifest or the sub-document's body) and replacement picture. - Display: the replacement picture when WordCraft can show it, else a placeholder of the object's size drawn in code (ruled for a spreadsheet). - ODT save: written back as the same object, with its manifest entries and original replacement. LibreOffice renders a round-tripped spreadsheet pixel-identically. - Document model: the files live in `passthrough` under `odf-object/`, linked from the picture's `ole` by a marker. The DOCX writer skips the marker and writes the picture alone. Flat ODT, a fix to the chart commit: inline sub-documents lacked the required `office:mimetype`, so the schema rejected flat files holding charts. Sub-documents now go inline as full `office:document`s (media type, styles, settings) and are split back into their files on opening. Replacement pictures and OLE files go inline as base64. A picture's data is matched to the element that holds it, no longer to the last `draw:image` before it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GBVQLyDnrG8Tn1yDQcUabC