ReadViewSDK/.planning/phases/07-wxread/07-PATTERNS.md

37 lines
2.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Phase 7: WXRead 自定义属性闭环 - Patterns
## Reusable Patterns
### Renderer support 已经是语义收口点
- `Sources/RDReaderView/EPUBTextRendering/RDEPUBTextRendererSupport.swift` 已负责 HTML 预处理、CSS layer 注入、fragment marker 注入和属性归一化。
- 新的 WXRead 语义应优先在这里被提取、标准化并写成统一属性键,而不是散落到 controller 或 view 层。
### Page metadata 已经是分页结果的公开契约
- `Sources/RDReaderView/EPUBCore/RDEPUBReadingModels.swift``RDEPUBTextPageMetadata` 已经对外承载 `breakReason`、`blockRange`、`attachmentKinds` 和 `diagnostics`
- 新增块类型、附件垂直居中、强制分页、avoid-break 命中等信息时,应继续沿用这个页级元数据汇总口。
### Layouter 已经掌握分页边界决策
- `Sources/RDReaderView/EPUBTextRendering/RDEPUBTextLayouter.swift` 当前决定 attachment boundary、block boundary 和 frame limit。
- 所有“是否提前断页 / 是否避免截断 / 是否记录强制分页原因”的规则都应该在这里收敛,而不是后置到 UI 层补判断。
### BookBuilder 已经是诊断出口
- `Sources/RDReaderView/EPUBTextRendering/RDEPUBTextBookBuilder.swift` 会把 frame 元数据提升为 chapter/page并产出 chapter 级诊断摘要。
- Phase 7 的复杂块分类与附件语义诊断最适合从这里向 demo 和后续回归路径暴露。
## Closest Existing Analogs
- `rdPageAttachmentKind` 是附件语义的最近现有 analog但只区分 `image/generic`,不够承载 WXRead 风格值。
- `rdPageBlockRange` / `rdPageBlockIndex` 是块级语义的最近现有 analog可以在此基础上继续引入 block kind 与分页 hint。
- `RDEPUBTextChapterPaginationDiagnostic.sampleNotes` 是最接近“可比对证据”的现有出口,适合扩展为 Phase 7 的语义诊断摘要。
## Design Guardrails
- 不直接搬运读书私有 DTCoreText 魔改实现;只复用公开文档中可验证的语义与行为目标。
- 继续沿用现有 chapter preprocessing、DTCoreText renderer contract 和 page offset 兼容语义。
- 新属性必须可观测:要么进入 attributed string 属性键,要么进入 page metadata / diagnostics不能只存在于瞬时局部变量。
- 不把 Phase 7 扩展成分页质量全面重写;复杂质量收敛和缓存仍属于 Phase 8。