ReadViewSDK/.planning/REQUIREMENTS-v1.1-WXRead-next.md

111 lines
6.5 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.

# 需求ReadViewSDK v1.1WXRead 深化对齐)
**定义日期:** 2026-05-22
**核心价值:** 在已完成的 reflowable EPUB 原生化基础上,继续补齐 WXRead 风格的页面级排版能力、阅读交互精度与回归可验证性。
## 背景
v1 已完成以下主目标:
- reflowable EPUB 已具备 WXRead 风格的五层 CSS 组织与章节级 render context
- 分页器已具备 block / attachment 边界感知与页面元数据输出
- reader 主流程、高亮、搜索、位置恢复、主题/字号/行高重分页已接回
- fixed layout / interactive EPUB 继续保持 `WKWebView` 路径
`Doc/WXRead/analysis/` 对照后,当前主要差距已不在“是否走原生管线”,而在以下深化能力:
- 页面级 layout frame 的几何查询与绘制能力不足
- 自定义 CSS / attributed string 属性到分页器的闭环仍不完整
- 分页质量、缓存、复杂块元素规则与自动化验证仍弱于 WXRead
## v1.1 需求(本次范围)
### 页面级布局与几何能力
- [ ] **LAYOUT-01**:为 native text 分页结果补齐页面级 layout frame 几何查询能力,至少包括字符串范围矩形查询、矩形反查文本范围、截断检测、命中定位所需的基础 API
- [ ] **LAYOUT-02**:阅读器侧的高亮、搜索命中、选区、点击定位等行为应优先建立在 layout frame 几何能力之上,而不是继续强依赖 `UITextView` 的黑盒行为
- [ ] **LAYOUT-03**:页面级模型需要继续保留并兼容 `pageStartOffset`、`pageEndOffset`、`fragmentOffsets`、`RDEPUBTextOffsetRangeInfo` 等既有语义
### WXRead 自定义属性闭环
- [ ] **ATTR-01**:补齐一条从章节 HTML / CSS 到 `NSAttributedString` 再到分页器的自定义属性闭环,至少覆盖 `avoidPageBreakInside`、`pageBreakBefore`、`pageBreakAfter`、`pageRelate`
- [ ] **ATTR-02**:图片与附件相关排版需要支持类似 `wr-vertical-center-style` 的语义输入,并在分页 / 展示阶段保留可消费的信息
- [ ] **ATTR-03**:复杂块元素至少要能区分代码块、表格、列表、引用块等类别,以支持更精细的分页边界控制与诊断
### 分页质量与性能收敛
- [ ] **QUAL-01**:为 layout frame / 分页结果增加缓存机制,避免同一章节在相同视口与排版配置下重复全量排版
- [ ] **QUAL-02**:复杂图文章节的分页质量要进一步提升,减少不合理断页、孤行/寡行、图片前后留白异常、代码块/表格被粗暴截断等问题
- [ ] **QUAL-03**:图片与附件的尺寸策略、暗色模式适配、页面背景类信息需要具备可验证的处理规则,而不是依赖默认 DTCoreText 行为
- [ ] **QUAL-04**:分页深化后不能显著恶化首屏时间、重分页耗时或交互流畅度;若无法立即建立硬性指标,至少要输出稳定的诊断与采样数据
### 稳定性与自动化验证
- [ ] **AUTO-01**:建立覆盖 native reflowable 主路径的自动化回归能力,至少覆盖打开书籍、分页完成、搜索命中、主题/字号切换、位置恢复
- [ ] **AUTO-02**:样本矩阵需要持续覆盖复杂图文、代码/表格/列表、附件密集、fixed/interactive WebKit、TXT 五类路径
- [ ] **AUTO-03**每项核心能力都应尽量附着到可重复证据日志、断言、诊断摘要、UI 自动化步骤或稳定的人工检查清单
## 成功标准
以下结论必须全部为 TRUE
1. native reflowable 路径拥有可复用的页面几何查询能力reader 交互不再主要依赖 `UITextView` 推断页面几何
2. 至少一组 WXRead 风格自定义分页属性已形成端到端闭环,并对复杂块元素分页产生可见收益
3. 同一批复杂样本在新一轮分页器深化后,分页质量优于当前 v1 完成态,而不是仅增加结构复杂度
4. 自动化或半自动化验证覆盖到 native text 的关键交互,不再主要依赖单次手工 spot check
5. fixed layout、interactive EPUB、TXT 和既有 `RDReaderView` 翻页容器不回归
## 非目标(本次明确不做)
| 功能 | 原因 |
|---|---|
| 重写或替换 `RDReaderView` 翻页容器 | 本次继续只深化 native reflowable 内核与页面几何能力 |
| 复刻 WXRead 的完整业务层能力(翻译/双语、免费试读、网络协议、DRM | 这些属于业务闭环,不是当前 SDK 与 WXRead 的主要技术差距 |
| 将 fixed layout / interactive EPUB 改为原生渲染 | 仍保持 `WKWebView` 路径以控制风险 |
| 直接拷贝读书私有 CSS / JS / 私有实现代码 | 仅参考设计思路,不直接搬运私有实现 |
| 一次性完整重写成自绘 `WRPageView` 等价体系 | 风险过大,优先通过 layout frame 几何层与局部 reader 接线演进 |
## 风险与约束
- `RDReaderView`、现有 page curl / horizontal / vertical 交互逻辑继续视为稳定容器契约
- `RDEPUBReaderController` / `RDURLReaderController` 公开入口必须保持兼容
- 所有分页深化都必须保留 offset-based 兼容语义,避免破坏现有高亮、搜索、恢复位置数据
- 若要引入自绘或替换 `UITextView` 页面展示,需要以“先引入几何能力、再最小替换”的顺序推进
- 若性能采样显示分页深化明显拖慢主流程,应优先做缓存与局部优化,而不是继续扩展特性面
## 建议优先级
1. `LAYOUT-*`:先补 layout frame 几何能力
2. `ATTR-*`:再补自定义属性到分页器闭环
3. `QUAL-*`:随后做分页质量与缓存收敛
4. `AUTO-*`:最后把运行时验证补成自动化或稳定半自动化
## 候选 Phase 映射
| 需求 | 建议 Phase | 说明 |
|---|---:|---|
| LAYOUT-01 | Phase 6 | layout frame 几何 API 与截断检测 |
| LAYOUT-02 | Phase 6 | reader 交互从 `UITextView` 推断迁移到几何层 |
| LAYOUT-03 | Phase 6 | 保持 offset / fragment 兼容契约 |
| ATTR-01 | Phase 7 | 自定义分页属性闭环 |
| ATTR-02 | Phase 7 | 图片 / 附件布局语义 |
| ATTR-03 | Phase 7 | block type 分类与分页规则 |
| QUAL-01 | Phase 8 | layout frame / pagination cache |
| QUAL-02 | Phase 8 | 复杂样本分页质量提升 |
| QUAL-03 | Phase 8 | 图片暗色与页面背景类规则 |
| QUAL-04 | Phase 8 | 诊断与性能采样 |
| AUTO-01 | Phase 9 | native reflowable 自动化回归 |
| AUTO-02 | Phase 9 | 样本矩阵扩展 |
| AUTO-03 | Phase 9 | 证据标准化 |
**覆盖统计:**
- v1.1 需求总数13
- 页面级布局3
- 属性闭环3
- 质量与性能4
- 自动化验证3
---
*Requirements defined: 2026-05-22*
*Last updated: 2026-05-22 after WXRead gap analysis*