docs: 同步 Doc 文档与当前代码状态
- 更新模块文件数(EPUBCore 31+2, EPUBTextRendering 13, ReaderView 5, EPUBUI 19) - 更新 Swift 版本(5.10)、iOS 版本(15.0)、行数等基本信息 - 补充新增文件文档(TextAnchor, RenderRequest, WebViewDebug, AssetRepository, TextIndexTable, TextPerformanceSampler, ChapterData, PageInteractionController 等) - 更新 RDEPUBLocation 模型(新增 rangeAnchor 字段) - 更新 RDEPUBReaderConfiguration(13 项配置)、Delegate 签名、Persistence(8 方法) - 修正 RDURLReaderController 归属(ReaderView → EPUBUI) - 移除过时的 LegacyRDReaderController 引用 - 标记 SS→RD 命名迁移为已完成
This commit is contained in:
+52
-7
@@ -2,7 +2,7 @@
|
||||
|
||||
## 1. 范围与目标
|
||||
|
||||
- 代码范围:`Sources/RDReaderView/EPUBCore/`(30 个 Swift 文件 + 2 个资源文件)
|
||||
- 代码范围:`Sources/RDReaderView/EPUBCore/`(31 个 Swift 文件 + 2 个资源文件)
|
||||
- 目标:说明 EPUBCore 如何完成 EPUB 解析、资源定位、阅读会话管理、离屏分页、JS 桥接渲染和全文搜索。
|
||||
- 主链路关键词:`epubURL -> RDEPUBParser.parse -> container.xml -> OPF -> spine/TOC -> RDEPUBPublication -> RDEPUBReadingSession -> RDEPUBWebView/Paginator -> 分页/渲染`。
|
||||
|
||||
@@ -40,7 +40,7 @@
|
||||
|
||||
### 2.4 WebView 渲染层 `RDEPUBWebView`
|
||||
|
||||
- 文件:`EPUBCore/RDEPUBWebView.swift` + 5 个扩展文件
|
||||
- 文件:`EPUBCore/RDEPUBWebView.swift` + 5 个扩展文件(+Configuration / +Reflowable / +FixedLayout / +JavaScriptBridge / +Search)
|
||||
- 职责:
|
||||
- 内部持有 WKWebView,配置自定义 scheme handler 和 JS 桥接
|
||||
- 可重排内容加载:`loadPage(parser:spineIndex:pageIndex:...)`(`+Reflowable.swift`)
|
||||
@@ -77,13 +77,13 @@
|
||||
- `ssReaderFixedLayoutReady`:固定版式渲染完成
|
||||
- JS 端 `window.RDReaderBridge` 暴露:`applyPagination`、`setPageMetrics`、`scrollToPage`、`scrollToLocation`、`setHighlights`、`clearHighlights`、`reportProgression`、`selectionPayload`
|
||||
|
||||
### 2.8 搜索引擎 `RDEPUBHTMLSearchEngine`
|
||||
### 2.8 搜索引擎 `RDEPUBSearchEngine` / `RDEPUBHTMLSearchEngine`
|
||||
|
||||
- 文件:`EPUBCore/RDEPUBSearchEngine.swift`、`EPUBCore/RDEPUBSearchModels.swift`
|
||||
- 职责:
|
||||
- 将 HTML 转为纯文本(NSAttributedString 或正则兜底)
|
||||
- 执行大小写不敏感的全文搜索
|
||||
- 返回 `RDEPUBSearchMatch` 数组(含 progression 偏移和预览文本)
|
||||
- `RDEPUBSearchEngine`:搜索协议定义
|
||||
- `RDEPUBHTMLSearchEngine`:WebView 路径实现,将 HTML 转为纯文本(NSAttributedString 或正则兜底),执行大小写不敏感的全文搜索
|
||||
- 搜索模型:`RDEPUBSearchMatch`、`RDEPUBSearchResult`、`RDEPUBSearchState`、`RDEPUBSearchPresentation`
|
||||
|
||||
### 2.9 配置与样式
|
||||
|
||||
@@ -92,6 +92,42 @@
|
||||
- `RDEPUBStyleSheetBuilder`(`EPUBCore/RDEPUBStyleSheetBuilder.swift`):生成分页 CSS、渲染 CSS 和测量 JS 脚本
|
||||
- `RDEPUBFixedLayoutTemplate`(`EPUBCore/RDEPUBFixedLayoutTemplate.swift`):生成固定版式 HTML 模板
|
||||
|
||||
### 2.10 文本锚点 `RDEPUBTextAnchor` / `RDEPUBTextRangeAnchor`
|
||||
|
||||
- 文件:`EPUBCore/RDEPUBTextAnchor.swift`
|
||||
- 职责:
|
||||
- `RDEPUBTextAnchor`:精确定位到 EPUB 中的某个字符位置,包含 fileIndex(spine 索引)、row(行号)、column(列号)、chapterOffset(章节内字符偏移)、fragmentID(最近的 fragment)
|
||||
- `RDEPUBTextRangeAnchor`:由起止锚点组成的文本区间,可转换为 NSRange
|
||||
- 支持 Codable 序列化,兼容 `fileIndex` 和 `spineIndex` 两种 key
|
||||
- 用于文本 EPUB 的高亮精确锚定和跨会话恢复
|
||||
|
||||
### 2.11 渲染请求模型 `RDEPUBRenderRequest`
|
||||
|
||||
- 文件:`EPUBCore/RDEPUBRenderRequest.swift`
|
||||
- 职责:
|
||||
- `RDEPUBFixedLayoutFit`:固定版式适配模式枚举(`.auto` / `.page` / `.width`)
|
||||
- `RDEPUBFixedLayoutSpreadMode`:Spread 显示模式枚举(`.automatic` / `.always` / `.never`)
|
||||
- `RDEPUBPresentationStyle`:WebView 和 Paginator 共用的视觉参数(viewportSize、contentInsets、fontSize、lineHeightMultiple、主题色)
|
||||
- `RDEPUBReflowableRenderRequest`:可重排内容渲染请求(spineIndex、href、pageIndex、presentation、highlights、searchPresentation)
|
||||
- `RDEPUBFixedRenderRequest`:固定版式渲染请求(spread、viewportSize、fit、searchPresentation)
|
||||
- `RDEPUBRenderRequest`:统一枚举(`.reflowable` / `.fixed`),WebView 根据此类型选择渲染路径
|
||||
|
||||
### 2.12 调试工具 `RDEPUBWebViewDebug`
|
||||
|
||||
- 文件:`EPUBCore/RDEPUBWebViewDebug.swift`
|
||||
- 职责:
|
||||
- WebView 调试日志工具集,DEBUG 模式默认开启
|
||||
- 支持导航事件、JS 执行、消息接收、URL Scheme 任务的日志记录
|
||||
- 可通过 UserDefaults `"RDEPUBWebViewDebugEnabled"` 覆盖开关
|
||||
|
||||
### 2.13 资源加载器 `RDEPUBAssetRepository`
|
||||
|
||||
- 文件:`EPUBCore/RDEPUBAssetRepository.swift`
|
||||
- 职责:
|
||||
- 从资源包加载 JS 桥接脚本(`epub-bridge.js`)和固定版式 HTML 模板(`epub-fixed-layout.html`)
|
||||
- 支持 `{{token}}` 模板变量替换
|
||||
- 自动定位 `RDReaderViewAssets.bundle`(优先已解析子 bundle,兜底宿主 bundle)
|
||||
|
||||
## 3. 主流程(代码级)
|
||||
|
||||
### 3.1 EPUB 解析全流程
|
||||
@@ -237,6 +273,7 @@ RDEPUBLocation
|
||||
├── progression: Double? (0..1,章节内起始位置)
|
||||
├── lastProgression: Double? (0..1,章节内结束位置)
|
||||
├── fragment: String? (#anchor)
|
||||
├── rangeAnchor: RDEPUBTextRangeAnchor? (文本范围锚点,用于高亮精确定位)
|
||||
└── navigationProgression (computed: midpoint of progression and lastProgression)
|
||||
```
|
||||
|
||||
@@ -279,7 +316,8 @@ RDEPUBRenderRequest (enum)
|
||||
RDEPUBHighlight
|
||||
├── id, bookIdentifier
|
||||
├── location: RDEPUBLocation
|
||||
├── text, rangeInfo (JSON-serialized DOM range)
|
||||
├── text, rangeInfo (JSON-serialized DOM range 或 text-offset)
|
||||
├── style: RDEPUBHighlightStyle (.highlight | .underline)
|
||||
├── color: String, note: String
|
||||
└── createdAt: Date
|
||||
|
||||
@@ -288,6 +326,13 @@ RDEPUBSelection
|
||||
├── location: RDEPUBLocation
|
||||
├── text, rangeInfo
|
||||
└── createdAt: Date
|
||||
|
||||
RDEPUBBookmark
|
||||
├── id, bookIdentifier
|
||||
├── location: RDEPUBLocation
|
||||
├── title: String?
|
||||
├── note: String?
|
||||
└── createdAt: Date
|
||||
```
|
||||
|
||||
### 5.6 搜索模型
|
||||
|
||||
Reference in New Issue
Block a user