DOC-FULL-016 P1 | EPUB metadata / spine / toc / chapter 【status:todo】 #72

Closed
opened 2026-06-07 11:33:17 +08:00 by wangdl · 2 comments
Owner

读取 EPUB zip/container.xml/OPF metadata/spine/nav/toc/chapter list/chapter HTML/chapter search/EpubReadingPosition

M-DOC-FULL 里程碑 issue。详见设计文档。

## 读取 EPUB zip/container.xml/OPF metadata/spine/nav/toc/chapter list/chapter HTML/chapter search/EpubReadingPosition M-DOC-FULL 里程碑 issue。详见设计文档。
wangdl added this to the M-DOC-FULL:Document Runtime 完整阅读内核与学习事件协议 milestone 2026-06-07 11:33:17 +08:00
wangdl changed title from DOC-FULL-016 P1 | EPUB metadata / spine / toc / chapter 模块 to DOC-FULL-016 P1 | EPUB metadata / spine / toc / chapter 【status:todo】 2026-06-07 19:15:05 +08:00
Author
Owner

审查结论:document runtime 当前有文件类型识别/MaterialType/PreviewMode/DocumentInfo(基本)/Markdown解析/Text解析/ImageMeta/Search(V1 Markdown+Text)/NoteAnchor(V1)/ReadingEvent(V1)/ReadingPosition(V1)/EventBuffer(V1基础)/iOS构建/UniFFI绑定/docs。但 V2 核心模型(ReadingSession/EventV2/ActiveTimeTracker)不存在,EventBuffer 缺 ack/failed,Position 缺 camelCase+clamp,PDF/EPUB/Office 为 stub,测试覆盖不足 V2。

本 Issue: epub.rs 仅 4 行 stub。

状态: status:todo
工作类型: work:new-module

## 审查结论:document runtime 当前有文件类型识别/MaterialType/PreviewMode/DocumentInfo(基本)/Markdown解析/Text解析/ImageMeta/Search(V1 Markdown+Text)/NoteAnchor(V1)/ReadingEvent(V1)/ReadingPosition(V1)/EventBuffer(V1基础)/iOS构建/UniFFI绑定/docs。但 V2 核心模型(ReadingSession/EventV2/ActiveTimeTracker)不存在,EventBuffer 缺 ack/failed,Position 缺 camelCase+clamp,PDF/EPUB/Office 为 stub,测试覆盖不足 V2。 **本 Issue**: epub.rs 仅 4 行 stub。 **状态**: status:todo **工作类型**: work:new-module
Author
Owner

完成报告

改动

  • Cargo.toml: 新增 zip = "2" 依赖
  • epub.rs (REWRITE): EpubMetadata (title/author/chapter_count/file_size) + EpubChapter (chapter_id/title/path/play_order)
  • epub.rs: read_epub_metadata() — ZIP→container.xml→OPF→metadata + spine 计数
  • epub.rs: read_epub_chapters() — spine + NCX TOC→章节列表,标题回退 "Chapter N"
  • epub.rs: 内部 XML 解析器(无需额外依赖):extract_attr/extract_tag_content/parse_opf/extract_opf_manifest/extract_opf_spine/parse_ncx_navpoints
  • epub.rs: 5 测试(含 fixture 验证)
  • FFI: read_epub_metadata_ffi + read_epub_chapters_ffi + UDL

已知限制

  • #100: EPUB3 NAV 解析未实现(仅 NCX),EPUB3 文件章节标题降级为 "Chapter N"
  • #98: read_epub_metadataread_epub_chapters 重复打开 ZIP

验证

cargo test epub — 10 passed
cargo test --all — 156 passed, 0 failed
## 完成报告 ### 改动 - `Cargo.toml`: 新增 `zip = "2"` 依赖 - `epub.rs` (REWRITE): `EpubMetadata` (title/author/chapter_count/file_size) + `EpubChapter` (chapter_id/title/path/play_order) - `epub.rs`: `read_epub_metadata()` — ZIP→container.xml→OPF→metadata + spine 计数 - `epub.rs`: `read_epub_chapters()` — spine + NCX TOC→章节列表,标题回退 "Chapter N" - `epub.rs`: 内部 XML 解析器(无需额外依赖):extract_attr/extract_tag_content/parse_opf/extract_opf_manifest/extract_opf_spine/parse_ncx_navpoints - `epub.rs`: 5 测试(含 fixture 验证) - FFI: `read_epub_metadata_ffi` + `read_epub_chapters_ffi` + UDL ### 已知限制 - #100: EPUB3 NAV 解析未实现(仅 NCX),EPUB3 文件章节标题降级为 "Chapter N" - #98: `read_epub_metadata` 与 `read_epub_chapters` 重复打开 ZIP ### 验证 ``` cargo test epub — 10 passed cargo test --all — 156 passed, 0 failed ```
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: wangdl/zhixi-document-runtime#72
No description provided.