storytold/wordcraft 是一个用纯 Rust 重新实现 Microsoft Word 的开源项目。2026-11-07 的提交 595cddaaeff115e11ae7f7d524ecc71b3e53abe6 处理了读取和保存文档内图片的方式。当承载图片的框架同时提供多种格式时,现在会选取第一张可读的图片,并在之后保存到文件时保留该图片。
这次修改针对的是在 LibreOffice 保存的 ODT(基于开放文档格式的字处理文档)文件中暴露出来的问题。LibreOffice 会把同一张图片同时以 .svm 元文件和 PNG 的形式写入,而 WordCraft 无论列表的第一项是什么都会抓取。因此,当不可读的格式排在前面时图片就不可见,模型生成的段落写入文件时那张图片也会消失。现在会按照框架标明的偏好顺序选取第一张可读图片。此外,即使不可读的替代图片(replacement)在前面,也会显示并保存后面的可读图片,并且不会在对象出现之前丢弃替代图片,而是将其保留。
改动涉及 7 个文件,包括 ODT 正文解析器(body.rs、body/drawing.rs)、写出器(writer/drawing.rs)、测试(floats.rs、objects.rs)和格式对应文档(docs/file-format-parity.md)等。新增 155 行,删除 10 行。不过这次提交只处理提交信息中称为 'gap 19' 的一个 ODT 图片处理条目。提交说明称问题是在 CodeRabbit 评审中发现的,并表示占位符(placeholder)仍然不会被记录。ROADMAP 文档把当前阶段记为 alpha,把下一目标记为 beta,并给出准备度估算:~15 points(实际工作准备度 60% → 75%)和 ~150–230 h。除 ODT 以外格式的验证结果未包含在这次提交中。