37 lines
2.3 KiB
Markdown
37 lines
2.3 KiB
Markdown
# 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。
|