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

2.3 KiB
Raw Blame History

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.swiftRDEPUBTextPageMetadata 已经对外承载 breakReasonblockRangeattachmentKindsdiagnostics
  • 新增块类型、附件垂直居中、强制分页、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。