shenlei
c4be426299
长章节内存优化 P1:章节级共享显示内容与 layouter,高亮转 overlay
...
- 新增 RDEPUBChapterDisplayContentCache(LRU 2,主线程限定,控制器
持有):整章显示串构建时一次性注入全章主题色与暗黑图替换,配套
共享 DTCoreTextLayouter;签名 = 章节内容对象标识 + 主题双色 +
暗黑图配置,设置/主题变化自动失效重建
- RDEPUBTextContentView.configure 改为引用共享 entry,删除每次翻页
的整章可变拷贝与按页属性写入
- 高亮/下划线改走 overlay decoration(高亮背景层、下划线前景层),
移除 applyHighlightsToContent 与 render view 的属性绘制路径,
高亮增删不再触发整章重建
- 内存警告时清空 display cache;shouldAvoidReaderPageCaching 保持
保守(P1-4 待真机数据)
验证:编译通过;高亮/批注/选区/翻页/设置 13 项 UI 回归全过。
SearchTests 10 项失败经二分确认为先存回归(5a41066 与 e4e629a 均
复现,最后已知通过为 2026-06-08),与本次改动无关,待单独排查。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-08 16:09:40 +09:00
shenlei
e4e629a06c
长章节内存优化 P0:每页子串改按需构造并新增内存打点
...
- RDEPUBTextPage.content 由存储属性改为基于 chapterContent+contentRange
的计算属性,三处构造点不再生成每页子串,章节缓存窗口内每章少一份
整章文本常驻副本
- 新增 RDEPUBMemoryProbe(--demo-memory-probe 开启),在章节插入、
每 20 次翻页、设置失效、转屏完成时输出 phys_footprint
- shouldAvoidReaderPageCaching 补注释,锁定放开前置条件为 P1-1
- 新增实施清单文档 LONG_CHAPTER_MEMORY_OPTIMIZATION_PLAN.md 并勾选 P0
验证:Demo 编译通过;UI 回归 9/9 通过(PageNavigation/
ReaderOpenClose/LargeBookOnDemand)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-08 15:34:45 +09:00
shenlei
5a41066b66
修复 EPUB 文本分页显示错位并补充分页调试能力
...
本次提交围绕 DTCoreText 文本页的分页一致性、交互索引和高亮命中进行了集中修复。
主要改动:
1. 文本页显示改为基于整章 attributed string 的上下文布局,只对当前页 range 进行渲染,避免页面子串重新换行导致的页末断行偏差。
2. 页面布局快照与交互控制器统一改为使用 chapter-absolute 索引,修正点击、选区、菜单锚点与高亮矩形在整章上下文下的定位。
3. 修复跨章节高亮串页问题,并调整文本页高亮命中逻辑:保留 CoreText 层绘制,点击时按高亮真实 rect 精确命中,避免重复绘制和整行误判。
4. 收紧 reader 级页面缓存策略,避免预加载同时持有多份整章显示副本带来的内存放大。
5. 新增分页边界校验器、垂直对齐器和 settings-flip 自动化调试入口,用于复现与诊断页范围/显示度量不一致问题。
6. 放宽 inline attachment 的 avoid-break 处理,并补充相关分页问题调查文档与索引。
2026-07-08 14:27:36 +09:00
shenlei
d0efe3f2cc
安全区域改为从 key window 动态获取
...
- 新增 RDEPUBSafeArea:参考 GKNavigationBarSwift 的 keyWindow 三级查找与临时 window 兜底
- 移除 reflowableContentInsets 中 top/bottom 40 的固定默认值,改按设备真实安全区生成
- 各取安全区处的 ?? .zero 兜底改为回退到 key window 值
- DEBUG 构建下为文本可读区域绘制红色边框,方便查看排版范围
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 15:04:22 +09:00
shenlei
22e7e44220
feat: chapter runtime refactoring and related updates
...
- Refactor chapter runtime: replace window coordinator/snapshot with warmup orchestrator
- Update EPUB core: parser, reading session, JS bridge, navigator layout
- Update reader controller: data source, location resolution, persistence
- Update chapter runtime: data cache, loader, runtime store, disk cache, warmup orchestrator
- Remove deprecated navigation state machine and pagination state
- Update text rendering: book cache, HTML normalizer
- Update UI: text content view, dark image adjuster, text selection controller
- Update settings and reader configuration
- Add CODE_REVIEW.md and AUDIT_FINAL.md documentation
- Update pod dependencies (remove SSAlertSwift, SnapKit)
- Update podspec and pod configuration files
Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-26 18:50:07 +09:00
shenlei
d7f28c3f10
fix: 修复右对齐短文本显示不完整及多项功能改进
...
右对齐文本显示修复(如"巫鸿"只显示"鸿"的问题):
- RDEPUBChapterTailNormalizer: 短尾页合并时检查 avoidPageBreakInside 语义,
避免将带有此标记的短文本(如 right-info 署名)错误合并回上一页
- RDEPUBTextContentView: 续段归一化时跳过右对齐/居中对齐的段落,
防止错误修改 firstLineHeadIndent 导致首字不可见
- RDEPUBCSSCompatibilityLayer: 为含 text-align:right/center 的 CSS 块
自动注入 text-indent:0 !important,确保右对齐/居中文本无首行缩进
- RDEPUBTextRendererSupport: 排版属性归一化时将右对齐/居中段落的
firstLineHeadIndent 重置为 0
图片查看器及脚注点击功能:
- 新增 RDEPUBImageViewController 和 RDEPUBImageViewerCoordinator,
支持从 WebView 和 TextPage 两种模式查看图片
- epub-bridge.js: 检测图片和脚注图片的点击事件,脚注图片显示弹窗
- RDEPUBJavaScriptBridge: 新增 imageDidTap/footnoteDidTap 桥接消息
- RDEPUBWebView: 新增图片和脚注点击的 delegate 方法
- RDEPUBAttachmentNormalizer: 改进脚注检测,优先使用 alt 文本判断
- RDEPUBPaginationModels: 新增 .footnote 附件类型
- RDEPUBPageLayoutSnapshot: 运行时动态解析附件类型,脚注优先级高于图片
位置解析改进:
- RDEPUBReaderController+LocationResolution: 利用 rangeInfo 提升页码定位精度
其他:
- RDEPUBTextBookCache: schema 版本升级至 13
- RDEPUBReaderTheme: 主题更新
- Pod 项目文件更新
Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-25 15:39:58 +08:00
shenlei
d15f20b097
feat: 交互协调器拆分、附件提示、暗色图片适配、选区放大镜及文档清理
...
- 拆分 ContentDelegates/TextContentView 为独立协调器(InteractionCoordinator、LocationResolution、ExternalLinks、AttachmentTooltip)
- 新增 RDEPUBAttachmentTooltipView/OverlayView 附件气泡提示
- 新增 RDEPUBDarkImageAdjuster 暗色模式图片亮度适配
- 新增 RDEPUBSelectionLoupeView 选区放大镜
- 新增 MetadataParseWorker/CancellationController 元数据解析取消机制
- 重构 PresentationRuntime/PaginationCoordinator 精简职责
- 优化 ChapterLoader/WarmupOrchestrator 异步章节加载
- CFI 模块微调与 NoteModels 更新
- 清理冗余文档,更新架构/UML/业务逻辑文档
Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-24 17:47:24 +08:00
shen
7de661eb54
feat: 架构整改 — Context拆分、Runtime拆分、异步章节加载、UI测试覆盖
...
Phase 1: Context 拆分
- 新增 RDEPUBReaderState/RDEPUBReaderEnvironment/RDEPUBReaderServices
- RDEPUBReaderContext 改为过渡门面,代理到 State/Environment/Services
Phase 2: Runtime 拆分
- 新增 RDEPUBPresentationRuntime 处理分页状态管理
- 新增 RDEPUBChapterWarmupOrchestrator 处理章节预热与加载编排
- RDEPUBReaderRuntime 从 1277 行收缩,公共 API 转发到新 facade
Phase 0.5: 性能优化
- prepareOnDemandChapter 支持异步模式(allowSynchronousLoad: false)
- extendPartialBookPageMapIfNeeded 改为 DispatchGroup 并发加载
- RDEPUBChapterOffsetMap.cfiMap 加 NSLock 保护数据竞争
- CFI Map 构建延迟到后台队列(scheduleDeferredCFIMapBuildIfNeeded)
- RDEPUBTextPageRenderView 引入静态位图缓存
- RDEPUBTextContentView 新增 loadingSpinner 占位页
Phase 3: 状态机
- 新增 RDEPUBNavigationStateMachine(含 DEBUG 合法转换校验)
- 新增 RDEPUBPaginationState 记录分页来源
Review 修复
- makeSummary 重复方法合并
- ensureNavigationTargetAvailable 同步路径加注释标记
UI 测试
- 新增 AsyncChapterLoadingTests(20 个测试,覆盖全部架构整改场景)
- 跨章节翻页、延迟 CFI、状态机、内存警告、预加载、位置恢复等
2026-06-23 08:17:08 +08:00
shenlei
c65c190b71
feat: EPUB阅读器搜索、注释、CFI模块及大书远距跳转优化
...
- 实现EPUB阅读器搜索功能及选中注释功能
- 优化CFI模块,修复代码审查发现的11个问题
- 实现大书远距目录跳转与后台补全优化方案
- 优化设置面板与章节运行时联动
- 重构及大量改进优化
2026-06-22 20:26:34 +08:00
shenlei
6ed3fcb071
feat: 设置面板与章节运行时联动优化
...
- 设置页打开时仅重新计算当前章节预览,关闭后触发完整补全
- 新增 preview 加载优先级,支持设置页内当前章预览
- 添加设置页防抖机制,合并连续字号/行距变更
- 支持下滑手势关闭设置页,通过 presentation delegate 通知运行时
- 重新分页时跳过导航和尺寸校验,避免状态冲突
- currentTextPageSize 线程安全优化,后台线程使用缓存尺寸
- 更新 CocoaPods 依赖
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-17 09:47:50 +08:00
shen
6f75b083f7
feat: EPUB 阅读器搜索、选中注释、书签 chrome 状态及大量重构优化
...
- 新增 RDEPUBReaderSearchCoordinator 与 RDEPUBSelectionState 管理搜索和选中状态
- 新增 BookmarkChromeStateTests、NavigationBackwardTests、SelectionAnnotateTests 等 UI 测试
- 新增多个边界测试 epub 样本(损坏结构、空归档、缺失文件、流式外链验证)
- 重构阅读器 chrome 状态管理,统一 tool bar 与 search bar 交互
- 优化大书分页缓存策略(RDEPUBChapterSummaryDiskCache、RDEPUBPageCountCache)
- 移除废弃的 RDEPUBLocationConverter 和 RDEPUBPageBreakPolicy
- 更新 epub-bridge.js 与 JS bridge 通信协议
- 全面更新现有 UI 测试以适配新的 helper 和状态管理
2026-06-13 22:48:56 +08:00
shen
27e9b85ddb
Merge branch 'feature' of http://192.168.21.200:8418/4v5u09Z5a4Yuc/ReadViewSDK into feature
...
# Conflicts:
# .gitignore
2026-06-13 08:02:45 +08:00
shen
cdc74e5ad9
chore: add .gitignore and remove tracked xcuserdata
...
Xcode user-specific data (xcuserdata) should not be version controlled.
2026-06-13 08:02:21 +08:00
shenlei
d15187b730
Reorganize docs and update reader search flows
2026-06-10 08:22:07 +08:00
shenlei
0e7c0577e3
feat: add in-reader search and restructure documentation
...
- Add RDEPUBReaderSearchBarView with animated show/hide, keyword
navigation, and match counting integrated into the reader controller
- Restructure docs: replace scattered design docs with consolidated
BUSINESS_LOGIC.md and UML_CLASS_DIAGRAMS.md; update ARCHITECTURE.md
- Add SearchTests and FanrenParseTimeTest; enhance LargeBookOnDemandTests
- Add scripts/run_ui_regression.sh and summarize_ui_results.py for
automated UI test execution and reporting
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-05 17:34:50 +08:00
shen
d20196ee34
feat: configurable chapter window & parallel metadata parsing with benchmark
...
1. Configurable chapter window size (onDemandChapterWindowSize: 3-15)
- Parameterized window radius in RDEPUBChapterRuntimeStore
- Updated RDEPUBChapterWindowCoordinator to use configurable radius
- RDEPUBChapterWindowSnapshot.from() accepts chapter array instead of fixed prev/next
- Even numbers round up to odd (4→5), min 3, max 15
2. Configurable metadata parsing concurrency (metadataParsingConcurrency)
- Default equals CPU core count
- Parallel execution via OperationQueue in paginateMetadataOnly
- Each worker creates independent builder instance
- NSLock protects result aggregation
3. Per-chapter and total wall-clock timing instrumentation
- Separated render vs I/O timing per chapter
- Summary log with wallClockMs, renderTotalMs, writeTotalMs, avgRenderMs
- Timing stored in RDEPUBReaderContext for test access
4. UI automation test infrastructure
- Added --demo-window-size, --demo-concurrency, --demo-clear-cache launch args
- DemoReaderState exposes windowSize, parseMs, parseConcurrency
- ConfigurableWindowTests: 5 test cases for window size 3/5/15
- ConcurrentParsingTests: 4 test cases for concurrency 2/4
- MetadataParseBenchmarkTests: serial vs parallel benchmark
5. Bug fixes
- Fixed page snap-back during background parsing (isUserInteracting check)
- Reduced BookPageMap refresh frequency from 16 to 32 chapters
- Moved waitForReadingInteractionToSettle outside operation loop
6. Design doc: dual-layer PageMap (estimated + precise mixed)
2026-06-03 23:38:11 +08:00
shenlei
feb05eaf87
feat: complete large-book pagination runtime and UI coverage
2026-06-03 17:47:16 +08:00
shenlei
9801af05d3
test: 增强 UI 测试基础设施与阅读器自动化测试
...
- 新增 BookmarkTests/PageNavigationTests/TableOfContentsTests 等阅读器功能测试
- 扩展 AccessibilityIdentifiers 支持更多 UI 元素定位
- XCUIApplication+Launch: 增加启动参数支持(reset state、自定义书籍)
- ReaderAnnotationTests: 完善标注测试覆盖
- ViewController: 支持 --demo-reset-state 参数清理持久化状态
- 新增凡人修仙传测试样本
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-02 21:17:04 +08:00
shen
1c6108061c
feat: improve native text selection and annotation actions
2026-06-01 21:29:41 +08:00
shenlei
70133e4e6e
refactor(reader): 重构高亮选区绘制架构,对齐 WXRead 实现方案
...
- 移除 RDEPUBSelectableTextView,改用原生 UITextView
- 新增 NSAttributedString 自定义属性(com.rdreader.highlight/underline)注入高亮
- RDEPUBTextPageRenderView 统一绘制高亮背景、文字和选区
- RDEPUBTextSelectionController 精简,选区矩形传递给 RenderView 绘制
- 新增高亮选区复刻 WXRead 实现方案文档
- UI 测试适配新架构
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-01 20:57:27 +08:00
shen
948004eed1
docs: 补充注释、修正过时文档、清理重复内容
...
源码注释:
- 为 ~60 个 Swift 文件补充缺失的 doc comment(file header、类型、属性、方法)
- 修正 4 处错误注释:翻页模式数量、搜索行为描述、手势识别器描述、悬空文档块
文档维护:
- 删除重复文档:WXRead/读书EPUB阅读器实现架构.md(与微信读书版完全一致)
- 合并重叠文档:阅读器规划.md → 阅读器功能开发计划.md(单一真值)
- 修正过时内容:所有文档中"四种翻页模式"→"三种",移除 horizontalCoverScroll
- 更新架构图:补齐 EPUBUI/ReaderController、Paging/、Typesetter/ 等子目录
- 更新 index.md 索引:新增开发计划和架构对比文档引用
2026-06-01 09:33:23 +08:00
shen
1efb9d172f
feat(reader): 增强阅读器功能与 UI 测试支持
...
- 新增字体选择(系统/宋体/圆体/等宽)与暗色图片柔化配置
- 文本选择改为自定义手势+操作栏(拷贝/高亮/批注)
- 添加 accessibilityIdentifier 支持自动化 UI 测试
- 新增 UITests 覆盖阅读器打开/关闭、工具栏、设置面板、批注等
- 添加 Demo 测试用 EPUB 书源(宝山辽墓材料与释读)
- 新增文档:UI 自动化测试、功能开发计划、阅读器规划
2026-05-31 23:56:54 +08:00
shen
44202357c0
refactor: split reader architecture and chrome handling
2026-05-31 21:47:54 +08:00
shen
ea21c6a831
epub问题修改
2026-05-26 23:27:52 +08:00
shen
83b705b9ae
修改分页问题
2026-05-26 21:08:27 +08:00
shen
0e7d952fe5
feat(epub): complete wxread parity scope
2026-05-26 09:19:37 +08:00
shen
23182e8b5a
feat(epub): align wxread css and overlay pagination behavior
2026-05-25 22:15:24 +08:00
shen
2a94921e88
feat(wxread): align pagination, rendering, and docs
2026-05-24 15:36:01 +08:00
shen
3e2669d8a8
目前阅读稳定版本,需要修改图片阅读方式
2026-05-23 15:50:53 +08:00
shen
d7339aa255
feat(07): close native text pagination semantics loop
2026-05-22 20:39:26 +08:00
shen
5698aeaead
chore: checkpoint current milestone work
2026-05-22 13:28:53 +08:00
shen
daa36d8fe7
Epub阅读器0.0.1
2026-05-21 19:40:51 +08:00