2.3 KiB
2.3 KiB
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。