From 5a41066b6652d7a5dd5aac91bc67381213f16cf1 Mon Sep 17 00:00:00 2001 From: shenlei Date: Wed, 8 Jul 2026 14:27:36 +0900 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=20EPUB=20=E6=96=87=E6=9C=AC?= =?UTF-8?q?=E5=88=86=E9=A1=B5=E6=98=BE=E7=A4=BA=E9=94=99=E4=BD=8D=E5=B9=B6?= =?UTF-8?q?=E8=A1=A5=E5=85=85=E5=88=86=E9=A1=B5=E8=B0=83=E8=AF=95=E8=83=BD?= =?UTF-8?q?=E5=8A=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 本次提交围绕 DTCoreText 文本页的分页一致性、交互索引和高亮命中进行了集中修复。 主要改动: 1. 文本页显示改为基于整章 attributed string 的上下文布局,只对当前页 range 进行渲染,避免页面子串重新换行导致的页末断行偏差。 2. 页面布局快照与交互控制器统一改为使用 chapter-absolute 索引,修正点击、选区、菜单锚点与高亮矩形在整章上下文下的定位。 3. 修复跨章节高亮串页问题,并调整文本页高亮命中逻辑:保留 CoreText 层绘制,点击时按高亮真实 rect 精确命中,避免重复绘制和整行误判。 4. 收紧 reader 级页面缓存策略,避免预加载同时持有多份整章显示副本带来的内存放大。 5. 新增分页边界校验器、垂直对齐器和 settings-flip 自动化调试入口,用于复现与诊断页范围/显示度量不一致问题。 6. 放宽 inline attachment 的 avoid-break 处理,并补充相关分页问题调查文档与索引。 --- Doc/PAGINATION_ISSUES_2026-07-06.md | 123 + Doc/index.md | 1 + .../Pods/Pods.xcodeproj/project.pbxproj | 3126 +++++++++-------- .../Pagination/RDEPUBPageBreakPolicy.swift | 7 +- .../EPUBUI/RDEPUBReaderController.swift | 1 + .../EPUBUI/RDEPUBSettingsFlipAutomation.swift | 84 + .../TextPage/RDEPUBDarkImageAdjuster.swift | 4 +- .../RDEPUBPageInteractionController.swift | 20 +- .../TextPage/RDEPUBPageLayoutSnapshot.swift | 15 +- .../TextPage/RDEPUBTextContentView.swift | 112 +- .../RDEPUBTextPageBoundaryValidator.swift | 223 ++ .../RDEPUBTextPageVerticalJustifier.swift | 57 + 12 files changed, 2167 insertions(+), 1606 deletions(-) create mode 100644 Doc/PAGINATION_ISSUES_2026-07-06.md create mode 100644 Sources/RDReaderView/EPUBUI/RDEPUBSettingsFlipAutomation.swift create mode 100644 Sources/RDReaderView/EPUBUI/TextPage/RDEPUBTextPageBoundaryValidator.swift create mode 100644 Sources/RDReaderView/EPUBUI/TextPage/RDEPUBTextPageVerticalJustifier.swift diff --git a/Doc/PAGINATION_ISSUES_2026-07-06.md b/Doc/PAGINATION_ISSUES_2026-07-06.md new file mode 100644 index 0000000..1a8f9fb --- /dev/null +++ b/Doc/PAGINATION_ISSUES_2026-07-06.md @@ -0,0 +1,123 @@ +# 分页问题调查记录(2026-07-06) + +调查载体:《宝山辽墓材料与释读》(textReflowable / DTCoreText 路径),iPhone 15 Pro Max 尺寸(430×932,内容区 398×815pt)。当日共调查两个独立问题: + +--- + +## 问题一:页底留空一行多,下一页首行未上移(已修复) + +### 现象 + +第 6 页底部留有约 1.7 行高的空白,第 7 页首行"人目为帝羓,信有之也。[注]"本可容纳在第 6 页。截图实测:行距 75px@3x(25pt),第 6 页底部空隙 138px,足够再排一行。 + +### 根因链 + +1. `RDEPUBSemanticMarkerInjector.inferredHints` 给**所有** `` 打上 `avoidPageBreakInside` 提示——包括行内脚注小图标(``,即"注"字图标)。 +2. `RDEPUBPageBreakPolicy.shouldTreatAvoidHintAsBlockProtection` 本有豁免:`blockKind == .attachment && placement != .centered → 不保护`。但 `applyPaginationSemantics` 按**结束标记的字符串顺序**应用属性:`` 的结束标记先于外层 `

`,段落随后把图标位置的 `.rdPageBlockKind` 从 `attachment` 覆盖为 `paragraph`;而 `hints` 与 `placement` 因段落不携带这两个属性而幸存。豁免条件因此失效。 +3. `trimmedRangeForAvoidPageBreakInside` 把含注图标的行当作"不可分页块"的行,从页底裁掉(最多 3 行),推到下一页,留下空白。 + +### 验证手段 + +- Demo 启动参数 `--demo-pagination-debug` 输出 `[PAGINATION-DEBUG] avoidPageBreakInside removed N lines: …`;修复前被裁的行**全部**含 ``(脚注图标)。 +- 复现命令:`--demo-book-title 宝山 --demo-page 6 --demo-reset-state --demo-clear-cache --demo-pagination-debug`。 + +### 修复 + +`RDEPUBPageBreakPolicy.swift`:豁免条件放宽为 `(blockKind == .attachment || placement != nil) && placement != .centered`——不再依赖易被覆盖的 blockKind,只要附件 placement 是行内/基线(非居中)就不锁行。居中插图(bodyPic)的整块保护不受影响;同时覆盖 `s-pic`/`h-pic`/`g-pic` 等生僻字行内小图。 + +修复后验证:含 `` 的裁剪从多处降为 0;"人目为帝羓"行回到第 6 页且下一段首行补齐;全书页数 280 → 273(消除欠填页)。 + +> 备选方案(未采用):修 `applyPaginationSemantics` 的嵌套覆盖顺序(内层优先)。会改变列表/表格的 blockRange 语义,风险大。 + +--- + +## 问题二:页范围与显示内容度量错配,行中断页(2026-07-07 已定位根因,见文末新增章节) + +### 现象 + +第 10 页最后一行只有孤字"相",第 11 页从"对简化,且无构造细致的翼墙。"开始——断点落在句子中间而非行边界。 + +### 铁证推理 + +当前设置下满行 26 字(字号 15、内容宽 398pt)。第 10 页范围要在"…而2号墓的门楼则相"后断开,要求该行装下 **27 字**——当前排版下不可能。**结论:页范围产生于另一套度量(更小字号或更宽版面),与显示时的排版不一致。** 同一套排版中分页断点必然落在行边界,孤字不可能出现。 + +### 已排除(受控实验) + +在 `RDEPUBChapterLoader` 临时加 `--demo-chapter-dump` 转储(typesetString 逐属性段 + 页范围,写入 app Documents,实验后已还原): + +- 冷启动(`MISS(fullRender)` 全量渲染分页)与热启动(`HIT(diskSummary)` 复用磁盘页范围)两条路径的字符串与页范围**完全一致**。字体压平、双重 `normalizeReadingAttributes`、语言码缺失(`makeChapterRenderRequest` 未传 `contentLanguageCode`)、`TailNormalizer` 尾页合并均验证为无影响或幂等。 +- 持久缓存键控正确:`RDEPUBChapterCacheKey.renderSignature` 含字体名/字号/行距倍数/lineSpacing/`layoutConfig.cacheSignature`(宽高、四边距、分栏、hyphenation、schemaVersion=17)+ 章节内容哈希。同设置跨启动复用安全。 + +### 主要嫌疑:会话中改设置的换表过渡态 + +- 用户两组截图之间调过行距(行距 25pt/页 32 行 → 28pt/页 28 行,字号未变);出现问题时显示总页数 196,既非 1.6 档全量分页(~273)也非 1.8 档(~290)——当时显示的是**未收敛的中间页表**。 +- 代码窗口: + - `RDEPUBReaderRuntime.scheduleSettingsPreviewRepagination`:设置面板打开期间只重排**当前章**并 `applySettingsPreviewPageMap` 换部分页表,全量重排推迟到面板关闭(`needsFullRepaginationAfterSettingsClose`)。 + - `RDEPUBChapterRuntimeStore.chapterDataCache` 仅按 spineIndex 键控(无样式维度);`invalidateAllForSettingsChange` 清空后,**变更前已在飞行中的构建**完成时会把旧样式章节重新 `insertChapter` 插回。 +- 这些窗口里可能出现"旧页范围 + 新排版内容"的错配。 + +### 待办 / 复现所需 + +1. 确认触发操作:是否在设置面板调整行距/字号后(未关面板或刚关)翻页出现。 +2. 确认重启 app 后是否自愈(受控实验表明缓存路径本身一致,理应自愈;若不自愈则有持久化的脏状态)。 +3. 修复方向(待复现后定):设置变更代(generation)标记贯穿构建流程,飞行中的旧代构建完成后丢弃、不得插回 store;或 `chapterDataCache` 键加入 renderSignature。 + +### 经验教训 + +- 跨启动比较"第 N 页"截图无效:章节渐进加载过程中全局页码会漂移。 +- 判断断点是否合法的快捷方法:数满行字数。断点不在行边界 ⟺ 范围与显示度量不一致。 + +--- + +## 相关工具与命令备忘 + +| 用途 | 方法 | +|---|---| +| 分页裁剪日志 | 启动参数 `--demo-pagination-debug` | +| 自动打开书籍/翻页 | `--demo-book-title 宝山 --demo-page N --demo-clear-cache --demo-reset-state` | +| 注入阅读设置 | `simctl spawn defaults write cn.shen.ReadViewDemo ssreader.epub.settings -data `,JSON 形如 `{"fontSize":15,"lineHeightMultiple":1.8}` | +| 截屏 | `xcrun simctl io screenshot <绝对路径>`(相对路径会因只读文件系统失败) | +| 模拟器 | 预装仅 16/17 系列;`simctl create` 可建 iPhone 15 Pro Max(430×932@3x 与问题截图同尺寸) | +| 页边界/换行一致性校验 | 启动参数 `--demo-pagination-validate`(RDEPUBTextPageBoundaryValidator,逐页比对显示换行与全章上下文换行,输出 STALE-RANGE / DISPLAY-DIVERGE / DIAGNOSE / ATTR-DIFF) | +| 设置面板自动翻转 | 启动参数 `--demo-settings-flip`(RDEPUBSettingsFlipAutomation,自动开面板→改行距→关面板→翻页,三种时序) | + +--- + +## 问题二根因(2026-07-07 续查确认) + +### 结论 + +**分页与显示使用同一引擎(DTCoreText/CoreText)但输入字符串不同:分页在“全章字符串”上下文中断行;显示把页内容取成子串后重新断行。`CTTypesetterSuggestLineBreak` 在同一文字、同一属性、同一宽度下,会因字符串上下文不同而在 CJK 标点压缩/悬挂处产生 ±1 字的断点漂移。** 页范围(全章上下文产物)与显示换行(子串产物)在页内任何一行发生漂移,累积到页尾就出现孤字(用户看到的「相」)或半空行。 + +与缓存、设置换表竞态无关:设置变更只是**搬动了页边界位置**,让某个边界恰好落在漂移点上,症状因此看似随设置变化出现/消失。这同时解释了此前所有观察:冷/热启动转储完全一致(分页自身是一致的,错配发生在分页 vs 显示);重启后"第 N 页"不复现(边界挪走了)。 + +### 证据(宝山书 spine 3,字号 15 / 行距 1.6 / 宽 398pt) + +`--demo-pagination-validate` 基线运行(无任何设置操作)即命中,前 8 页中 5 页分叉。决定性样本 page 8/55 第 11 行(行首 offset 4224): + +- 显示端断点 4252(行尾"…可以相"——孤字机制当场复现),全章上下文断点 4253("…可以相当") +- 逐字符属性 diff:**完全一致**(无 ATTR-DIFF) +- 对照排版:原始子串 = 4252,段落级上下文 = 4252,**只有全章上下文 = 4253** +- page 6/55 的上下文探针行宽 408.39 > 框宽 398 —— 标点悬挂/压缩越界的直接证据 + +即断点差异既不是首行缩进归一化(`normalizedPageContent` 的 firstLineHeadIndent 处理本身是正确的),也不是属性差异,而是 CoreText 断行对字符串上下文(跨段落!)敏感。 + +### 修复(方案 A,2026-07-07 已实施) + +显示端改为**全章上下文排版**:`RDEPUBTextContentView.configure` 取 `page.chapterContent` 的整章副本作为显示内容,`DTCoreTextLayouter(章节副本).layoutFrame(bounds, range: page.contentRange)` 只排当页范围。断行与分页器按构造一致(同串、同起点、同宽)。 + +配套改动: + +- layoutFrame 的 stringRange 因此为**章节绝对坐标**。`RDEPUBPageLayoutSnapshot.build` 去掉 +pageStartOffset 归一(本就输出绝对坐标给消费方),`RDEPUBPageInteractionController` 去掉全部 -pageOffset 反换算;选区/高亮/点击测试/装饰层的消费接口本来就是绝对坐标,无需变动。 +- 主题前景色、暗色图片调整(`RDEPUBDarkImageAdjuster` 新增 `in range:` 参数)、高亮标记只施加在章节副本的当页范围上;`applyHighlightsToContent` 改用绝对 overlap 范围。 +- 删除 DTCoreText 路径对 `normalizedPageContent` 的调用——续段首行缩进/段前距归一化 hack 由上下文排版天然取代(非 DTCoreText 回退路径仍保留)。 +- layouter(framesetter)随显示内容缓存于 cell(`coreTextLayouter`),bounds 变化只重建 layoutFrame,避免每次 layout pass 对整章重建 framesetter。 +- `RDEPUBTextPageBoundaryValidator` 适配绝对坐标,保留为回归警报。 + +验证:`--demo-pagination-validate` 基线(原先 spine 3 前 8 页 5 处分叉)修复后 **0 命中**;第 10 页首行断点与分页一致(「…使用了更多」);Selection/Annotation UI 测试回归通过(见下)。 + +### 遗留(独立的潜在缺陷,本次未触发) + +- `RDEPUBChapterRuntimeStore.chapterDataCache` 仅按 spineIndex 键控;设置变更时飞行中的旧构建完成后仍会插回(`RDEPUBChapterLoader.loadChapter` 的 `insertChapter` 无代际校验)。 +- `RDEPUBChapterLoader.pendingLoads` 按 spineIndex 合流,跨设置变更合流会把旧样式章节交给新请求。 +- 建议修复问题二后用 `--demo-settings-flip` + `--demo-pagination-validate` 回归验证这两个窗口。 diff --git a/Doc/index.md b/Doc/index.md index 3c8db04..37384ef 100644 --- a/Doc/index.md +++ b/Doc/index.md @@ -37,6 +37,7 @@ | [CHAPTER_RUNTIME.md](CHAPTER_RUNTIME.md) | 章节运行时详解:按需加载、章节窗口协调、页图管理、磁盘缓存、后台补全 | | [CFI_SUBSYSTEM.md](CFI_SUBSYSTEM.md) | CFI 子系统详解:EPUB CFI 解析、生成、序列化、范围、恢复引擎 | | [CFI_ISSUES_REVIEW.md](CFI_ISSUES_REVIEW.md) | CFI 实现问题分析报告:11 个问题(3 高 / 5 中 / 3 低),含修复优先级建议 | +| [PAGINATION_ISSUES_2026-07-06.md](PAGINATION_ISSUES_2026-07-06.md) | 分页问题调查记录:脚注图标 avoid-trim 裁行(已修复)+页范围/显示度量错配行中断页(待复现),含调试命令备忘 | | [API_REFERENCE.md](API_REFERENCE.md) | 公开 API 参考:RDEPUBReaderController 公开接口、委托协议、配置模型 | | [当前阅读器问题修复开发清单.md](当前阅读器问题修复开发清单.md) | 基于当前代码实现整理的逐任务开发计划:10 个任务、修改位置、实施步骤、风险点与验收标准 | | [大书远距目录跳转与后台补全优化方案.md](大书远距目录跳转与后台补全优化方案.md) | 面向大书按需分页模式的完整优化方案:远距目录跳转、后台补全优先级、页图接管协议与分阶段实施路径 | diff --git a/ReadViewDemo/Pods/Pods.xcodeproj/project.pbxproj b/ReadViewDemo/Pods/Pods.xcodeproj/project.pbxproj index 1e15a82..7829d71 100644 --- a/ReadViewDemo/Pods/Pods.xcodeproj/project.pbxproj +++ b/ReadViewDemo/Pods/Pods.xcodeproj/project.pbxproj @@ -8,989 +8,998 @@ /* Begin PBXBuildFile section */ 002685407B9C4D548571DA24AFD6E8F1 /* NSString+Paragraphs.m in Sources */ = {isa = PBXBuildFile; fileRef = B4A7F7402FAEE3A277A8716DDA115C95 /* NSString+Paragraphs.m */; }; - 010EFB280F4FDFBBC75CEFB1FEF1C3C9 /* RDEPUBAnnotationModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = 517D111957FC986C0BE0281CA89159AF /* RDEPUBAnnotationModels.swift */; }; + 005CFC268C4EFCB746393BB9E2F7EF89 /* RDEPUBPageResolver.swift in Sources */ = {isa = PBXBuildFile; fileRef = 05A13D7709B82256F12E52DC6E65F696 /* RDEPUBPageResolver.swift */; }; 014449AE560FFF3C628FAE639D043004 /* DTAnchorHTMLElement.m in Sources */ = {isa = PBXBuildFile; fileRef = 148B993AB228816D19FCB7CD13874C83 /* DTAnchorHTMLElement.m */; }; - 022C814021FFCE8343CF94BEB39F5EB3 /* DTAnimatedGIF.h in Headers */ = {isa = PBXBuildFile; fileRef = F9D9BEF72311AF9E3239F9B92A9D2842 /* DTAnimatedGIF.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 01AC80DCBF24562307ECFA24A6A945AF /* RDEPUBReaderChapterListController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D4EB6B49DEC8BCB1ABD8083F9B903101 /* RDEPUBReaderChapterListController.swift */; }; + 026F7681329B00E35A480F5858301E66 /* UIApplication+DTNetworkActivity.m in Sources */ = {isa = PBXBuildFile; fileRef = 730B56BC97DFF2B1E04DD2608055D9E0 /* UIApplication+DTNetworkActivity.m */; }; + 02A66C86950C9DD663C88120E7C09A81 /* RDEPUBTypesettingPipeline.swift in Sources */ = {isa = PBXBuildFile; fileRef = 92960C67FEC64C10BA567184834F0DCC /* RDEPUBTypesettingPipeline.swift */; }; + 02EE41B3F3006A14BADE9BA94D7454D2 /* UIView+DTFoundation.m in Sources */ = {isa = PBXBuildFile; fileRef = 67DA49B61A249C2B8241D8FE166608C9 /* UIView+DTFoundation.m */; }; + 02FAC2A406B3445930B8B3CA4A9B4998 /* RDEPUBPageLayoutSnapshot.swift in Sources */ = {isa = PBXBuildFile; fileRef = 848DA9852FDF80FAB067E383E1D650C1 /* RDEPUBPageLayoutSnapshot.swift */; }; + 03BEC4FA94EF8D1DD1A0D9A1187E0176 /* RDEPUBSelectionLoupeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E7B0CDC00940C453637FBC66E6C05D89 /* RDEPUBSelectionLoupeView.swift */; }; 03D90C831397E8636A33CE557024A136 /* NSMutableAttributedString+HTML.h in Headers */ = {isa = PBXBuildFile; fileRef = 044BEA679671E16EA9BA9AD627750742 /* NSMutableAttributedString+HTML.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 041DF6ADC6BC49651B1D25241076C947 /* RDEPUBTextPerformanceSampler.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5B003AC0B46623423334F97FEE379B8 /* RDEPUBTextPerformanceSampler.swift */; }; + 04CF8E10D9B5FCD1EE0637929AE30482 /* RDEPUBReaderTableOfContentsItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 315243CD0784D4E8AF97453BF5848904 /* RDEPUBReaderTableOfContentsItem.swift */; }; 0561DF6793C8516F469D9813F5CE3211 /* DTCoreTextLayouter.m in Sources */ = {isa = PBXBuildFile; fileRef = D80A72D8B7941D30246858D840EE1EF5 /* DTCoreTextLayouter.m */; }; - 06F29198808875D4FE864F420CF6DDBE /* RDEPUBChapterWarmupOrchestrator.swift in Sources */ = {isa = PBXBuildFile; fileRef = C66C203D247690A4DDE08BF5A5D56B3B /* RDEPUBChapterWarmupOrchestrator.swift */; }; - 07102A5412AC8C8BA0812CF5F0F77C23 /* RDEPUBReaderSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 277A48279BD4FD22C6C552AAC4F282B2 /* RDEPUBReaderSettings.swift */; }; - 0758EE7A9DEC9BD31DCDAC2CFB03D837 /* URL+ZIP.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6430501430329643C8280B3985C48711 /* URL+ZIP.swift */; }; - 08C0E1DFA612AF20B227EB4583BD4EF1 /* RDEPUBCFIParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = F5E771C978D8EFB4DD05E81447873572 /* RDEPUBCFIParser.swift */; }; - 08E9FC7DEE3A8A6347C38CDDE34F0102 /* RDEPUBWebView+Search.swift in Sources */ = {isa = PBXBuildFile; fileRef = 130135CFECAE1E38379F213C3C298BD1 /* RDEPUBWebView+Search.swift */; }; - 09256EEFCDBDEBF3090658C24D7C4B88 /* wxread-replace-latin.css in Resources */ = {isa = PBXBuildFile; fileRef = 6E7E8438D5E5533B7BE96AC6FA8FD8BD /* wxread-replace-latin.css */; }; - 095FB08EBCD23A3E4A12955EBD443C79 /* RDEPUBReaderDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 61A1D30B96ADD9D1660073E9207329CF /* RDEPUBReaderDelegate.swift */; }; - 097C7CC4E0B27F7D78515547494AA566 /* RDEPUBJumpSession.swift in Sources */ = {isa = PBXBuildFile; fileRef = 943DB891CA340D3E0A65D0267100C3E7 /* RDEPUBJumpSession.swift */; }; - 09B30CACFD89784529196FCA970E706F /* RDEPUBReaderController+DataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = C012576F77900AEF84ACA075FF174D12 /* RDEPUBReaderController+DataSource.swift */; }; + 057A9674B9EE73622350A746C47C478E /* RDEPUBReaderTopToolView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52816DCF8A866861EFF13A58D6D32CA8 /* RDEPUBReaderTopToolView.swift */; }; + 0603811BC44846AC6334DB02B797BEFB /* RDEPUBReaderController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75D73CEEFC4AA6AFA6EBF279221F5330 /* RDEPUBReaderController.swift */; }; + 06F1FB0ED2F7B7830C124D239480AD2C /* RDEPUBWebView+FixedLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD8F015377F898E4B0229FF584685390 /* RDEPUBWebView+FixedLayout.swift */; }; + 06FF798F5DE1149DAB8763B64724E6D0 /* RDEPUBCFIMarkerInjector.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11C3B7C93919D787AAC0C4D25E52805A /* RDEPUBCFIMarkerInjector.swift */; }; + 0771856A5605A336983E6D12A566C042 /* NSDictionary+DTError.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A67761829BBB3974CE24FE50E459EA /* NSDictionary+DTError.m */; }; + 082E3BF2BAC5436D6A7ECE404707A9E0 /* RDEPUBReaderAssemblyCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8A50D413DFA43820BCD76D668C0C7868 /* RDEPUBReaderAssemblyCoordinator.swift */; }; + 09342D52B30E176B4A1D263799590FC6 /* RDEPUBPageMapReconciliationCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = DC2EC4ECF9C8015EDECE928DCA3CC4B3 /* RDEPUBPageMapReconciliationCoordinator.swift */; }; + 0A5EF9E22D7DF24CEB0E9F5395C5C2D9 /* RDEPUBReaderBottomToolView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7FDE14B76D550FCBD28D3B30AA9D883D /* RDEPUBReaderBottomToolView.swift */; }; 0AAA5BB1DBF584102B15CF8738F1815E /* NSScanner+HTML.m in Sources */ = {isa = PBXBuildFile; fileRef = 057DBFBFC99448A0B77A3C0DBB13B4A9 /* NSScanner+HTML.m */; }; 0ABC4D62588EABAA636441FD9A82C940 /* CTLineUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C6CE93FAA68605C6B90FF844A98E440 /* CTLineUtils.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 0AEAE6D5DA18AA7DF57813BABF4AD048 /* RDEPUBWebView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09608C067F73D7A137B9F22AF1384DF2 /* RDEPUBWebView.swift */; }; 0B6FA1F22150D7F8B1865F41FF70C922 /* DTImage+HTML.h in Headers */ = {isa = PBXBuildFile; fileRef = E3CAAC46883B74B071843E5D38B5BF85 /* DTImage+HTML.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0BEA894C5656FF4CCAEDA1F447A31F9C /* RDEPUBAttachmentTooltipOverlayView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0886011FDDE07A5C7BBC2168C401EAD2 /* RDEPUBAttachmentTooltipOverlayView.swift */; }; - 0BF855C140122F5D1D410BA83E44DD50 /* DTTiledLayerWithoutFade.m in Sources */ = {isa = PBXBuildFile; fileRef = 23006DBAC610AEB0A4B3EAFEA4FB0567 /* DTTiledLayerWithoutFade.m */; }; - 0C0FD53B17B17CC557667AE50CE8A86B /* Archive+WritingDeprecated.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2373DCA0FC45287BFC063BEA661B8367 /* Archive+WritingDeprecated.swift */; }; - 0C798C4A69D1C2F7DD26AD589C05F260 /* DTVersion.m in Sources */ = {isa = PBXBuildFile; fileRef = CCC633BF76C79E0B4A6750337D5DCDB8 /* DTVersion.m */; }; - 0CF68C435484E592181D2666B7661988 /* RDReaderFlowLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = E4C4605A9B7326DBE0CED7EB66A7416F /* RDReaderFlowLayout.swift */; }; - 0EBABF6BEEA7615626818E066C16AF18 /* DTAnimatedGIF.m in Sources */ = {isa = PBXBuildFile; fileRef = A3DE08AC23FE36A6C3F33A04700FDE57 /* DTAnimatedGIF.m */; }; - 0F5153F35326C04F32AC77F5FEB668A5 /* UIView+DTFoundation.m in Sources */ = {isa = PBXBuildFile; fileRef = 67DA49B61A249C2B8241D8FE166608C9 /* UIView+DTFoundation.m */; }; + 0D242CECCC8FE1C19BB2D952BBA21D1D /* RDEPUBPageCountCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0742A5B640EA32CFFCB23C98EA7E4E02 /* RDEPUBPageCountCache.swift */; }; + 0E3FD7C77166CB18C2CF32EECBB7678C /* RDEPUBCFIResolver.swift in Sources */ = {isa = PBXBuildFile; fileRef = DFC3591CDAEE16F7444AC3B176EFDAFD /* RDEPUBCFIResolver.swift */; }; + 0FC610B1799A81BB1A05C679012C5372 /* wxread-dark.css in Resources */ = {isa = PBXBuildFile; fileRef = EB7C7A670C851744ACBCA45DA70795C8 /* wxread-dark.css */; }; 0FCBC8C64D8862F2A0E8794EDADDECBD /* UIFont+DTCoreText.h in Headers */ = {isa = PBXBuildFile; fileRef = 398DC798680E2CA64D46B9E19B380356 /* UIFont+DTCoreText.h */; settings = {ATTRIBUTES = (Public, ); }; }; 100BFFBD24F234C095EDB001B8088DB1 /* DTCoreTextLayoutFrameAccessibilityElementGenerator.m in Sources */ = {isa = PBXBuildFile; fileRef = 4476B58B93EE7476A4762FE0E26E8178 /* DTCoreTextLayoutFrameAccessibilityElementGenerator.m */; }; + 1021F59A6B7DFA8B0869C7B6D09AFB36 /* NSURL+DTAppLinks.h in Headers */ = {isa = PBXBuildFile; fileRef = A3F7613E99CAA29881A015D0ED969B86 /* NSURL+DTAppLinks.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 102F6AF59C2B2A5C59BE45741F913A37 /* RDEPUBTextLayoutFrame.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E94387C53C6E054A73F8EE89787003D /* RDEPUBTextLayoutFrame.swift */; }; 109458F9D48FD4F381F0E40E2DB3D91C /* DTLazyImageView.h in Headers */ = {isa = PBXBuildFile; fileRef = D5DD4142DF33E1BE0B5A057101E851C5 /* DTLazyImageView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 112DBB191F130CA6D495E71077A80009 /* RDEPUBPaginationModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2FCEDA49EDECD7CEEEF8A65685B9870A /* RDEPUBPaginationModels.swift */; }; - 118AB54026EBE9D225066649DE548A7D /* RDEPUBViewportTypes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B4EAD9C5D3D276887E0AC6A35F10659 /* RDEPUBViewportTypes.swift */; }; 11AB1902A68385851FB81E870991F9A0 /* DTImageTextAttachment.m in Sources */ = {isa = PBXBuildFile; fileRef = 57642B518C047A428FE1266A09E0513F /* DTImageTextAttachment.m */; }; + 11D3A99648318629F6FB214C405A81E2 /* RDReaderPreloadController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82B54A69DF5E94D0D1B34E9D31C0D997 /* RDReaderPreloadController.swift */; }; 12B4A35B8E40C112E18A7C5511F023E9 /* CoreText.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4472755F83C121DE5E1E505D145F6DBE /* CoreText.framework */; }; + 12B89F026E1CA877A5DB9901F1F84B41 /* RDEPUBBuildDiagnosticsReporter.swift in Sources */ = {isa = PBXBuildFile; fileRef = B3B0AAC7948C4A103B284B0F3DCC1262 /* RDEPUBBuildDiagnosticsReporter.swift */; }; 130C3A85D9F9F445222C2E31EC245B0A /* NSScanner+HTML.h in Headers */ = {isa = PBXBuildFile; fileRef = DD0A5FF70CDBE87597264762EC20EF43 /* NSScanner+HTML.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 14A68E9E3880E51FBA491021429E40B7 /* Archive+MemoryFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFF51E56E09E095C92CB5B9F21384027 /* Archive+MemoryFile.swift */; }; + 139CF8823D81F64DAE0E06F777B9C4CD /* RDReaderContentCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 410C5BB742936BFF1A02BAB0970CAF34 /* RDReaderContentCell.swift */; }; + 14AB1A24C2510D7BF36C5E66BE5C0464 /* RDEPUBRuntimeChapter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D80571A5CC74FDE8F5CE6E70B50023F /* RDEPUBRuntimeChapter.swift */; }; 14BDD9FB7A7AC5C8ABFF8D24C381F3DA /* NSAttributedString+DTCoreText.m in Sources */ = {isa = PBXBuildFile; fileRef = 978449466D53EA6F5D40FCF0F353DDCA /* NSAttributedString+DTCoreText.m */; }; + 153B1C6A72B6CF391E99A104D1C2422D /* RDEPUBResourceResolver.swift in Sources */ = {isa = PBXBuildFile; fileRef = 677182E8663D93C2C9E5617999F649C7 /* RDEPUBResourceResolver.swift */; }; 15A7ED15DA03DD3B9F26A017D270D1C2 /* DTCSSListStyle.h in Headers */ = {isa = PBXBuildFile; fileRef = 0C24F592C4F38F15DC8C46BE0442B59C /* DTCSSListStyle.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 166B717008CCE1407B5319095FB04439 /* RDEPUBReaderToolView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DF346DB5BE7AF7245DCDDACEFDC59732 /* RDEPUBReaderToolView.swift */; }; - 16B7824735E1261E1F14697461BAEF56 /* Archive.swift in Sources */ = {isa = PBXBuildFile; fileRef = C3E162E0261A5B0850158D3403191E62 /* Archive.swift */; }; - 188C43C05E6BB8EB5DD88514568913DF /* RDReaderView+ContentAccess.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0D170B1455CB3C94EFC34D7B67EDC001 /* RDReaderView+ContentAccess.swift */; }; - 18D8C814B264B9DA4BC897F587005B3E /* RDReaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FE1D4A863768FC78F6B76B6A181267C /* RDReaderView.swift */; }; + 1800E2951954DDB7A2A8F3871A4D1175 /* DTExtendedFileAttributes.m in Sources */ = {isa = PBXBuildFile; fileRef = 56E8939081946D090FD77A04F879754C /* DTExtendedFileAttributes.m */; }; + 184EFEEA4A34812A9891FE7D667A3A98 /* RDEPUBReaderController+ExternalLinks.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E381C002AE6ECE51B0B77AA5007FE27 /* RDEPUBReaderController+ExternalLinks.swift */; }; + 186B46C750706F83ECE93BFA3CACD661 /* RDEPUBBookPageMap.swift in Sources */ = {isa = PBXBuildFile; fileRef = 523F6E31441155AAFAC1E88316C623A4 /* RDEPUBBookPageMap.swift */; }; + 187FC12F4FE210C3276E0F256BBC287F /* RDEPUBBackgroundCoverageStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5EB2B007B49D93FC696248480F4CB984 /* RDEPUBBackgroundCoverageStore.swift */; }; 191824B2B1E1B0A7DD3B6298100B4B8A /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DE4821B98DDE6C71411EC139EC6D2762 /* CoreGraphics.framework */; }; - 191C07ED00D17BBF103144D016F5D907 /* RDEPUBPageLayoutSnapshot.swift in Sources */ = {isa = PBXBuildFile; fileRef = D6901981E3F4F05F9FAC5ECE00D8983E /* RDEPUBPageLayoutSnapshot.swift */; }; - 191F106462110C3B72DC586D721BEB57 /* NSDictionary+DTError.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A67761829BBB3974CE24FE50E459EA /* NSDictionary+DTError.m */; }; - 194722F12D32D0016CD564ACD01C0710 /* RDEPUBJavaScriptBridge.swift in Sources */ = {isa = PBXBuildFile; fileRef = A191A2F7DD62299E8945911DC282FFA0 /* RDEPUBJavaScriptBridge.swift */; }; 19649ED312D92A6F5D2D6AF4E540CE75 /* DTHorizontalRuleHTMLElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 89268DC8F1FBDE4F3167647B6A4F9216 /* DTHorizontalRuleHTMLElement.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1BC970E8467ECAEB1D53445CC11855A2 /* RDEPUBReaderController+PublicAPI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29075A60F0C3B46C5143EC971A0D16D4 /* RDEPUBReaderController+PublicAPI.swift */; }; - 1D25B72B2C7F472F87A66B5754B9F756 /* Data+CompressionDeprecated.swift in Sources */ = {isa = PBXBuildFile; fileRef = E6B46EF6F055A721AF370D705D026E9E /* Data+CompressionDeprecated.swift */; }; + 1A7C6254C0BF1C6C8E1D1D8DED658D52 /* RDEPUBReaderDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = EF393040BF2038B940EA74164A6214F3 /* RDEPUBReaderDelegate.swift */; }; + 1BBEC939F5D35EEDA2A20D8CE4244A82 /* UIColor+RDEPUBHex.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7076326835119DD963CB9ABC0DF78460 /* UIColor+RDEPUBHex.swift */; }; + 1BE507A499436093EC10EC6E72902516 /* RDEPUBTextRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3B35A0451D9A3CF5477258E38D363189 /* RDEPUBTextRenderer.swift */; }; 1D460603DCA4A4E5ECFE8FF1F1CACC10 /* DTColorFunctions.m in Sources */ = {isa = PBXBuildFile; fileRef = 4544C4444DCA90E700611D1281969883 /* DTColorFunctions.m */; }; - 1EA2F5468DD943AC4B44C77EAD623852 /* RDEPUBNotePopupViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45441D548F125483949D77F61F85AFE3 /* RDEPUBNotePopupViewController.swift */; }; - 1F66D9C63831F3D2D103D49FCAF87DB3 /* Entry+ZIP64.swift in Sources */ = {isa = PBXBuildFile; fileRef = 288589D0B52F73505B43C743D9837578 /* Entry+ZIP64.swift */; }; - 20BE095312DB8DB101C02F8983C5A6E1 /* DTWeakSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = E4C5EB3F8F005C65005C101A9DBE488A /* DTWeakSupport.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 211C3A8308C726611C02F30211A23812 /* RDEPUBChapterSummaryDiskCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4E711A4F76E5BF2095569B5A9B3F5BB /* RDEPUBChapterSummaryDiskCache.swift */; }; + 1D731AAC78FF62ED86F99DD0285427E5 /* Archive+Helpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55B9309F0BDDDE2C3EE13C97BF2C0F1E /* Archive+Helpers.swift */; }; + 1E8EB32F9CEB5F27573296A05433CA86 /* RDReaderView-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 36606A851BDB5FFF6E9BFFDD7FB72455 /* RDReaderView-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1E9BE89829042FF203DBA620E39BF082 /* RDEPUBCFIUtilities.swift in Sources */ = {isa = PBXBuildFile; fileRef = E6CA207039A89EF3323F6FFEA38A1C3F /* RDEPUBCFIUtilities.swift */; }; + 1E9FF2DE2C53AD68B7278F808358E763 /* RDEPUBTextBookCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = 696C8561F8104D867B50A79E1147DE02 /* RDEPUBTextBookCache.swift */; }; + 1FD443A9AEFF8858D8B039BD378F964D /* RDEPUBWebView+Configuration.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8E6795B0D648B27CC7EB030E7550566 /* RDEPUBWebView+Configuration.swift */; }; + 1FEAB861BB1CF892743651C907B28B12 /* RDEPUBReadingLocationModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = E67A535D80CEA637777BC317BCFE28C6 /* RDEPUBReadingLocationModels.swift */; }; + 20805FA52C28B4FBEF32D3F55FA8C015 /* RDReaderView+ContentAccess.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8BB0B072E5F24B51A6D348D8F9745CC /* RDReaderView+ContentAccess.swift */; }; 2203356EEA94A9172BC7902923E43CBE /* DTCoreTextFontCollection.h in Headers */ = {isa = PBXBuildFile; fileRef = 25DDD76CA572F0C7AB5A8178CF80169D /* DTCoreTextFontCollection.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 224A7654E294D21374C015DB3050A57B /* DTTiledLayerWithoutFade.h in Headers */ = {isa = PBXBuildFile; fileRef = 0764D155F69503AACFA7AD976825E986 /* DTTiledLayerWithoutFade.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 22D04776C5F0F8CB8DDAC334EAA4FCF3 /* RDEPUBReaderPersistence.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE90A6C0DA3B5094237AACF4D06C944A /* RDEPUBReaderPersistence.swift */; }; - 240BD2C5D299C399725B5F227F313D46 /* RDEPUBReaderDependencies.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8811A5F210087839AA7746D9D4CFEB23 /* RDEPUBReaderDependencies.swift */; }; + 222066D6F66889D7810BE1F9C135DA22 /* RDEPUBParser+Archive.swift in Sources */ = {isa = PBXBuildFile; fileRef = 482C32ED3E6D23BBCED7BBE64E370A91 /* RDEPUBParser+Archive.swift */; }; + 233716F1EE82F10DA779D6DD5139CE95 /* RDEPUBBackgroundTrace.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3652433CDE5ACCD783B54CBDD0CBB5C6 /* RDEPUBBackgroundTrace.swift */; }; + 24152828C7910BA76155AD09435B0326 /* RDPlainTextBookBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75F44A99D2304FE5397B4DCD6BABAF2B /* RDPlainTextBookBuilder.swift */; }; 24395BEB3C360D9DA5180BFB955B04A0 /* DTAttributedLabel.m in Sources */ = {isa = PBXBuildFile; fileRef = 3EFAE8DFDDEA1E6047289C86D66381C0 /* DTAttributedLabel.m */; }; - 244078AD98E31B83FD032D370F549ED8 /* Archive+Writing.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0218A7B243387C79E099CA947CF243D /* Archive+Writing.swift */; }; 2445709667CB3820E51CD4AA915E6943 /* DTHTMLParserTextNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 558FCD3F7E481B782EBFA127486ED15D /* DTHTMLParserTextNode.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 247EA0EE361F6CB4BA1EE9CB7FD17E4E /* epub-bridge.js in Resources */ = {isa = PBXBuildFile; fileRef = 091E53DC8215AED45D88A2ABA24A2140 /* epub-bridge.js */; }; 24C5B52FD2AA9C49731DC6859ABA7CDE /* NSDictionary+DTCoreText.m in Sources */ = {isa = PBXBuildFile; fileRef = 78887827FF15DE20865DF3A00660993B /* NSDictionary+DTCoreText.m */; }; - 24E9A646A1B686FD9C6F696E203C19C8 /* FileManager+ZIPDeprecated.swift in Sources */ = {isa = PBXBuildFile; fileRef = F49FC82A04EE9B3B49CBA6CB88ACBC67 /* FileManager+ZIPDeprecated.swift */; }; - 26EEB00355253DED239D675F0DA12E46 /* RDEPUBTextRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B4081F4EC77470F1257F11DB2A4B55D /* RDEPUBTextRenderer.swift */; }; + 24FB53BAB9B501F996DF90066CB53225 /* epub-bridge.js in Resources */ = {isa = PBXBuildFile; fileRef = 64676B6C8A9F9195A481010213F37B6C /* epub-bridge.js */; }; + 253969CCB942DD6826234506CC2B2635 /* RDEPUBNavigatorLayoutContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = 055B53D0A60DC351390338A48800AE77 /* RDEPUBNavigatorLayoutContext.swift */; }; + 2620B16F7321A5A1A158E71EE88EEFDB /* DTCustomColoredAccessory.h in Headers */ = {isa = PBXBuildFile; fileRef = BAE45673EE2875DB23FA7BDD61FDE1EF /* DTCustomColoredAccessory.h */; settings = {ATTRIBUTES = (Public, ); }; }; 270C5C10028F0BC5A62548326CCB379B /* DTColor+Compatibility.m in Sources */ = {isa = PBXBuildFile; fileRef = 8FAAF640165FC1B4B47C546F80D98B1E /* DTColor+Compatibility.m */; }; - 275DD4A76FB5411D0063B35878480D1F /* RDEPUBWebViewDebug.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9117DB8611498A875CF9CF11D092BFA5 /* RDEPUBWebViewDebug.swift */; }; - 279D463D1EAD8ABD6654EF919B9D8F06 /* RDEPUBWebView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74CB908492A655C93144CB03E59A2CAB /* RDEPUBWebView.swift */; }; - 28E2212F4B36A12943E74DD92D67A7A8 /* RDEPUBParser+Package.swift in Sources */ = {isa = PBXBuildFile; fileRef = E38BEF27B99CFAA178DE8917D69F11F8 /* RDEPUBParser+Package.swift */; }; - 28F019DEE9E4CE70EEF128BCFDF3AD81 /* RDEPUBWebContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A98D6A8053F65B3872BF49A978E18042 /* RDEPUBWebContentView.swift */; }; + 27CFC84B39BCFB67A6163AAF8E319335 /* NSURL+DTComparing.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F1F7BFB63DE15D627EB8F64829B8AAD /* NSURL+DTComparing.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 27E0CC7EF5D20F0A61D27E439B780BDC /* RDEPUBFixedLayoutTemplate.swift in Sources */ = {isa = PBXBuildFile; fileRef = E2159ABBE19F1408CF16A6EF0271404D /* RDEPUBFixedLayoutTemplate.swift */; }; + 2927A35D1B8067A776EA968F816E7326 /* RDEPUBStyleSheetComposer.swift in Sources */ = {isa = PBXBuildFile; fileRef = F0796C7E8BEEA96989FCE6698868366D /* RDEPUBStyleSheetComposer.swift */; }; + 296BA2D5C5458F0CCF2BA11548275985 /* RDEPUBParser+TOC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43197856E7D06A21EF9B252FD37456A5 /* RDEPUBParser+TOC.swift */; }; + 29CB36BD8C153BD78CA8B1F28DCF6ACF /* Archive+ReadingDeprecated.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5193541848D2D1BF115A45D8A730611C /* Archive+ReadingDeprecated.swift */; }; 29D9B32DFFC59A157EDEF005DB92A5AC /* DTCoreTextLayoutLine.m in Sources */ = {isa = PBXBuildFile; fileRef = EB850927957E35DB8CE0F109188C99A9 /* DTCoreTextLayoutLine.m */; }; - 2A926090C1E12A6A8CD28E8D06305AF1 /* DTVersion.h in Headers */ = {isa = PBXBuildFile; fileRef = 8C9575F05D72C239E7E6F079BACDF4C7 /* DTVersion.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2AAB6A070A5D84CF783783F2084187EB /* RDEPUBRenderDiagnosticsCollector.swift in Sources */ = {isa = PBXBuildFile; fileRef = B898A07D2E7D8E62F64BD28BAFA3DEFA /* RDEPUBRenderDiagnosticsCollector.swift */; }; 2AAF9361720FC2D8FFCA93B5FAE42019 /* NSMutableString+HTML.m in Sources */ = {isa = PBXBuildFile; fileRef = 126E6ACAC7C0427806B58DA8E10BDD78 /* NSMutableString+HTML.m */; }; - 2AD11C72A693A0F3F851ED95D52588FC /* RDEPUBCFIError.swift in Sources */ = {isa = PBXBuildFile; fileRef = CED923CC25493B9CA28F24D209A33540 /* RDEPUBCFIError.swift */; }; - 2AF7BC9CAE7E399AF1AD18F6C24CF447 /* RDEPUBChapterOffsetMap.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFBE38B3A4D9E60E2B1683A475513E46 /* RDEPUBChapterOffsetMap.swift */; }; - 2B008846F9C2624D2A913AE6ED869A2B /* RDEPUBReaderHighlightsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5E5956AA678A9521257D99891E823DE2 /* RDEPUBReaderHighlightsViewController.swift */; }; - 2B2EEB3514D2D3BF37F8BCA6CC781B4D /* RDEPUBParser+ReadingProfile.swift in Sources */ = {isa = PBXBuildFile; fileRef = 58C72D7DF4220C0907CE8795E8900E79 /* RDEPUBParser+ReadingProfile.swift */; }; - 2C5CD798B8403E020FEDADEBC8D5AAE9 /* RDEPUBReaderSearchCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = E2C690372BDD5CA6E2A01A295EDE7C24 /* RDEPUBReaderSearchCoordinator.swift */; }; - 2E65C9632095C9EA0FA98EF1F5B21C27 /* RDEPUBReaderChromeCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3FEF8716C99974FB6997BFBF339FD91 /* RDEPUBReaderChromeCoordinator.swift */; }; - 2F4CAA81001F11E515585DA5F50DC1CD /* wxread-replace.css in Resources */ = {isa = PBXBuildFile; fileRef = F81B70DF51F9CD64A7DC5AAF3941F72C /* wxread-replace.css */; }; + 2BC65213EE316B42A750CE7EC423E1AE /* RDEPUBChapterLocation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19D3A41F50CE425FA2929A6FBE743A84 /* RDEPUBChapterLocation.swift */; }; + 2BE0013FE0DDC77B462B69584C04E5EF /* RDEPUBCFI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 976DBE312D138856488A4DEF88606BC9 /* RDEPUBCFI.swift */; }; + 2C2DC59C72FEC3C928CBF9D92F8FFDD4 /* RDEPUBModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = EDFEB59EC6040AB3CF58E4E1045A8913 /* RDEPUBModels.swift */; }; + 2E056A2117F8E13CDE6E665C89A8B1BA /* RDEPUBAttachmentTooltipOverlayView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F45A7967FB601D8BED750A9E37E7899C /* RDEPUBAttachmentTooltipOverlayView.swift */; }; + 2F2BA46AF49A6918CC279C5610290542 /* DTCustomColoredAccessory.m in Sources */ = {isa = PBXBuildFile; fileRef = 9542AFE3A82C8AE56576254CE196E71A /* DTCustomColoredAccessory.m */; }; 2FD7360250C2255A80583D4CF518FBFA /* DTTextAttachment.m in Sources */ = {isa = PBXBuildFile; fileRef = 4944FE0BE3205F2EC91A6A0550D30B75 /* DTTextAttachment.m */; }; 30C01FE491C26314F776AD8B2AF136FA /* NSAttributedStringRunDelegates.m in Sources */ = {isa = PBXBuildFile; fileRef = C69C7A531B5E021499D8FBF1DBE0E3BB /* NSAttributedStringRunDelegates.m */; }; - 312374CF0C9CBCDBEFFB71B6AAD7386B /* RDEPUBCFIPath.swift in Sources */ = {isa = PBXBuildFile; fileRef = 129154729E86D56457FE6DC7DEEA55B6 /* RDEPUBCFIPath.swift */; }; - 3134ACF38EC778DF668C6DDA8E4473C2 /* RDEPUBChapterLoader.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF8CFF30D6E79EDA9ADA4C8B8B5F52B2 /* RDEPUBChapterLoader.swift */; }; + 3120641E5E2540AFC3E1F47E0BE4E35B /* RDEPUBPaginationModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = 422DAC763888F8667708F7B66F9C701E /* RDEPUBPaginationModels.swift */; }; 31B805C50E0E187E6242B0C878C4D30D /* DTCoreTextMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = C495C74844982FAA1B846A2A89023D12 /* DTCoreTextMacros.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 32844568EDF13978B21D3A12652DD1E9 /* NSString+DTFormatNumbers.m in Sources */ = {isa = PBXBuildFile; fileRef = C5005A9E8F746647585CCAB26853E922 /* NSString+DTFormatNumbers.m */; }; + 328F47247FA2E27D2495C01F1D0729D1 /* RDEPUBSemanticMarkerInjector.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8F4881006C6FAE4DFADBE2ACE4E9A744 /* RDEPUBSemanticMarkerInjector.swift */; }; + 333E9440E6755615B7423D2E897C5869 /* FileManager+ZIP.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C3F8DF48C6EB28BFD05F5BB49793DDA /* FileManager+ZIP.swift */; }; 343E794F88AA503F5139C2244DC1A2B1 /* DTTextAttachmentHTMLElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B8FDAF9E8370366F7FA8524CB0D80B3 /* DTTextAttachmentHTMLElement.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 34539BC8F7E91B2997308C21E0B12120 /* RDEPUBParser+Resources.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD161DA5F1982A4BA70B86D3D27455A3 /* RDEPUBParser+Resources.swift */; }; + 34BBE7EC94EB4244DB72A9C38FACCDDA /* RDEPUBReaderState.swift in Sources */ = {isa = PBXBuildFile; fileRef = F1843DDD87F5732183A424372B8F57F3 /* RDEPUBReaderState.swift */; }; 35C5BE59CA712CCDF93D6E7010D93883 /* DTAttributedTextContentView.h in Headers */ = {isa = PBXBuildFile; fileRef = E96C0EEB2032D3CC18F4B37A7C34C84C /* DTAttributedTextContentView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 36C22841B8927E609AA29CD05D5132B5 /* DTBase64Coding.h in Headers */ = {isa = PBXBuildFile; fileRef = 519087D9CD0F5E440E6D2C3B1AA1DFA2 /* DTBase64Coding.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 36302E89132B67217F8D1B91040072C8 /* NSString+DTFormatNumbers.h in Headers */ = {isa = PBXBuildFile; fileRef = A3BD3ED7913130D32E14D5572CBCC921 /* NSString+DTFormatNumbers.h */; settings = {ATTRIBUTES = (Public, ); }; }; 372E907DF08263D0E1AF904F1FCD66EB /* DTTextAttachment.h in Headers */ = {isa = PBXBuildFile; fileRef = E853AAB3B09E0662567752431CEF1D33 /* DTTextAttachment.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 382705D8475B9DBFAAD8B20BC386F2CF /* RDEPUBParser+Archive.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2F653BA6E911AE149EB7FF7471D9D9BD /* RDEPUBParser+Archive.swift */; }; + 383AFA3F295427EA56530C70024DBD2F /* RDEPUBFontFallbackResolver.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29DE76CD63BD47DC86DF55C349B1CF91 /* RDEPUBFontFallbackResolver.swift */; }; 389F7C8400F9223C019F2D7825CD2369 /* NSCharacterSet+HTML.m in Sources */ = {isa = PBXBuildFile; fileRef = 2F242FC1357DD90FA4FD67E1DB90A837 /* NSCharacterSet+HTML.m */; }; - 39EA92DA1B85B808BA7C6B96E9550BFE /* UIImage+DTFoundation.h in Headers */ = {isa = PBXBuildFile; fileRef = 1300CC5794E609DB8FBA6FFF90A09408 /* UIImage+DTFoundation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3A14E77E5539416CB3616992AE1908EE /* UIScreen+DTFoundation.m in Sources */ = {isa = PBXBuildFile; fileRef = AF436E76C893E223A4F0BE86C1276054 /* UIScreen+DTFoundation.m */; }; - 3A23E0FBA148987E6982F243C17FCDB3 /* RDEPUBCFIMarkerInjector.swift in Sources */ = {isa = PBXBuildFile; fileRef = 05ECE185AAFC5A857734DF5495F8E7C2 /* RDEPUBCFIMarkerInjector.swift */; }; - 3A4AE693C64AC6FC51F627954661289C /* RDReaderPagingController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7F40EAB66363D681DA68981B17FB492 /* RDReaderPagingController.swift */; }; - 3A5317D34FDA7B91C27C6CA5BEFFB7B3 /* UIApplication+DTNetworkActivity.m in Sources */ = {isa = PBXBuildFile; fileRef = 730B56BC97DFF2B1E04DD2608055D9E0 /* UIApplication+DTNetworkActivity.m */; }; - 3B192524D86C6ABC91B555608D15C668 /* RDEPUBStyleSheetBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82BD20A4273D9C421228620048787AD0 /* RDEPUBStyleSheetBuilder.swift */; }; - 3BEE80559815F3BCC244579816B11BAE /* RDEPUBCFIUtilities.swift in Sources */ = {isa = PBXBuildFile; fileRef = BE8A25FFCA0AD1D9C167CCEE28D2378A /* RDEPUBCFIUtilities.swift */; }; - 3CCCB46BEB98DC30A241DB039C09EF4A /* epub-fixed-layout.html in Resources */ = {isa = PBXBuildFile; fileRef = 5E958924060294CE9417399BB02AB344 /* epub-fixed-layout.html */; }; + 3A3A957A1CEC0FF2100DC093C5B0BF81 /* RDReaderSpreadResolver.swift in Sources */ = {isa = PBXBuildFile; fileRef = 008302A48FE881CADADBCB02832B880B /* RDReaderSpreadResolver.swift */; }; + 3AD2C1CA7E9FC21A2D74EA080B6D962B /* RDEPUBPageInteractionController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1961705269BD266F52EBD357EAE068A5 /* RDEPUBPageInteractionController.swift */; }; + 3B2F4E4DC50638762591D58890B11DB3 /* RDEPUBPresentationRuntime.swift in Sources */ = {isa = PBXBuildFile; fileRef = ACD11D2C8694B9E3BDD175F1EEBEB64D /* RDEPUBPresentationRuntime.swift */; }; + 3B9A2BDE8A4970A10A72EF271D89773B /* RDEPUBWebView+JavaScriptBridge.swift in Sources */ = {isa = PBXBuildFile; fileRef = 321FA16FF2FAD7985CCAC14EF5A221D4 /* RDEPUBWebView+JavaScriptBridge.swift */; }; + 3C5E435F6F4211B7A41CC9B6CC9FA413 /* String+RDEPUB.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4DFBB7A0C649F48591647E3C08CE6852 /* String+RDEPUB.swift */; }; 3DC8F9474FC6A0BB7E81A703CE958966 /* NSAttributedString+DTDebug.h in Headers */ = {isa = PBXBuildFile; fileRef = A8A086525BF509F4581693115438B82B /* NSAttributedString+DTDebug.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3EF196811F910116B9EBE129278C219E /* RDEPUBDTCoreTextRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E160FF00EF4B6DB318FEDCD72A026F3 /* RDEPUBDTCoreTextRenderer.swift */; }; - 400C60DBDB9C174EAEF5D5D6C5E3497E /* ZIPFoundation-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = E9D8AB18960B56A997408E3235751624 /* ZIPFoundation-dummy.m */; }; - 4037C1C90ECAA2029911262DA5ACF321 /* Archive+Deprecated.swift in Sources */ = {isa = PBXBuildFile; fileRef = F3C9CA544EBF55130625F6C3AD2ABFB4 /* Archive+Deprecated.swift */; }; - 40DD9B73CA10C5AE995E85263A325144 /* RDEPUBReaderEnvironment.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3F6776D2868DE1A8CAC80752CB023567 /* RDEPUBReaderEnvironment.swift */; }; - 40FD1F3E37657243BDB8B6F651B94C26 /* Entry+Serialization.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76C1831768CE55090EADD902B29B6CD1 /* Entry+Serialization.swift */; }; - 415EF47917ED52680E29DAC90B4C110A /* RDReaderSpreadResolver.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0786D6430A29C2F90E4832048559BE21 /* RDReaderSpreadResolver.swift */; }; - 416A7BBE1A28D974E1CEA60B22420031 /* RDEPUBTextRendererSupport.swift in Sources */ = {isa = PBXBuildFile; fileRef = B55E6E99C6F879CFD19D3674CE20075C /* RDEPUBTextRendererSupport.swift */; }; - 4373F2A4F3253DD14440D8B9FA7A0AD8 /* NSURL+DTComparing.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F1F7BFB63DE15D627EB8F64829B8AAD /* NSURL+DTComparing.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3FC7C093B838D87DA42A363F11850D9C /* NSFileWrapper+DTCopying.h in Headers */ = {isa = PBXBuildFile; fileRef = B43D7603C0D66635268842EC0A2655AC /* NSFileWrapper+DTCopying.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 404FBD43D1380F605264FD23756845FA /* RDEPUBChapterSummaryDiskCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7CA5ED27523EC3D3AFC0F01E05891FBB /* RDEPUBChapterSummaryDiskCache.swift */; }; + 40F9FE365AD1E9DF0AC2552C9E57F374 /* NSString+DTUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C80941DE172AF972D2247659684D93A /* NSString+DTUtilities.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 417B820CB812E2EB595D0A260C3C8B43 /* RDEPUBTextAnchor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5F81C81E7CF8B0AE4646712FC2ADD8B0 /* RDEPUBTextAnchor.swift */; }; + 41A990E0E4CAE5BADCB5E1643D508DFB /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B50104DE2E35D820ECA22CDB3E6F96EA /* Foundation.framework */; }; + 42D1958B37CBF9EFB3CEB6A8CAFF76AF /* DTActivityTitleView.m in Sources */ = {isa = PBXBuildFile; fileRef = 662D30C1E74D1D5122921475F4024F73 /* DTActivityTitleView.m */; }; + 433265EE781060B73077244642255314 /* RDEPUBPaginationCacheCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 528643F4F0CD2FEC7AD5C0ACA9895D9D /* RDEPUBPaginationCacheCoordinator.swift */; }; 44B1FBF893C06F314F8C9BD1405897D8 /* DTCoreTextGlyphRun.m in Sources */ = {isa = PBXBuildFile; fileRef = ED049C791713944233EE10C7A111C691 /* DTCoreTextGlyphRun.m */; }; + 44D7D8E32201729CC581FC5A0EE319A0 /* RDEPUBReaderDependencies.swift in Sources */ = {isa = PBXBuildFile; fileRef = A1718601130E0F134E893F2A5CE605C6 /* RDEPUBReaderDependencies.swift */; }; 45133E47CC5FBCF78BFCD38981BA027F /* DTDictationPlaceholderView.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C12A4A5BB42D0F68DABBD3BDF103BC5 /* DTDictationPlaceholderView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4523590069A7CFC158A4A7DE4571B4B9 /* RDEPUBSearchModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = BA6B5FFFF22D8A36CC593817C0494CD1 /* RDEPUBSearchModels.swift */; }; - 456A968F9CE6080256CE5B65DBF79AAF /* RDEPUBFragmentMarkerInjector.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5E8C914D69561C6C9736FCB3C6698CCC /* RDEPUBFragmentMarkerInjector.swift */; }; - 458D53C484D2470508819D1D41376EE7 /* DTFoundationConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 0F80AC45FB1DBF50E0E3AA4F26BFA676 /* DTFoundationConstants.m */; }; 45F90B98546FDBA03AB112DFE859A185 /* DTCSSStylesheet.m in Sources */ = {isa = PBXBuildFile; fileRef = B37118B8D16847B0F82E06A5B33898AB /* DTCSSStylesheet.m */; }; - 4651629ECB6C6EA549A9E880D86B7648 /* UIView+DTFoundation.h in Headers */ = {isa = PBXBuildFile; fileRef = 29DEA4D201BB179BB6E228E9F688CD4C /* UIView+DTFoundation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 465616864A71819A08EE6637652A11D5 /* RDReaderView+ToolView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 648D6AC5A8FA53918EDB418D8A36710E /* RDReaderView+ToolView.swift */; }; - 46AEC0EB14BA522889FD7812A1139CB7 /* NSDictionary+DTError.h in Headers */ = {isa = PBXBuildFile; fileRef = 05838D65DEC339C51AADB17346B7E287 /* NSDictionary+DTError.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 46E5721034DC56B07DAF847D01818D1B /* RDEPUBChapterPageCounter.swift in Sources */ = {isa = PBXBuildFile; fileRef = B62755E9A395FF22E7405C3FE192D5F3 /* RDEPUBChapterPageCounter.swift */; }; 46EF32D586FF590CE2C60C66364B9357 /* ImageIO.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FEB14A8F8170777DB7CCC3F27C8EA57A /* ImageIO.framework */; }; - 4701EA34789A6B21772EC0B428C8CEF5 /* DTFolderMonitor.m in Sources */ = {isa = PBXBuildFile; fileRef = BEA46E51E3616ECEAF0ACCEA9B8C67EF /* DTFolderMonitor.m */; }; - 476C43CF774C35C590EB31D941DBFC0C /* RDEPUBTextBookModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2F34FF3B7E71CCE4E9C73115AA710B1C /* RDEPUBTextBookModels.swift */; }; - 490CDA6344D7BD1DA6B7D38EA5CCD199 /* RDEPUBReaderBottomToolView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A88F1371931B82C966232F059409D412 /* RDEPUBReaderBottomToolView.swift */; }; - 49B5370942C4D7AC9B1E1EF77AA3B5DF /* RDEPUBImageViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 254C03130C9163149B80FEBC8128119F /* RDEPUBImageViewController.swift */; }; - 4A0183DE2E5E4464957883E97CB91EC7 /* RDEPUBPreferences.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52E599D70519E92FCD9A508E1C821637 /* RDEPUBPreferences.swift */; }; + 46F7CEDA8A932C39B2536B68CE3889EE /* RDEPUBTextRendererSupport.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5E000FE659A8C4AE6C55AE7B9CC951AA /* RDEPUBTextRendererSupport.swift */; }; + 48580F0EDA4D384E5AA73A9BC814DC20 /* UIView+DTFoundation.h in Headers */ = {isa = PBXBuildFile; fileRef = 29DEA4D201BB179BB6E228E9F688CD4C /* UIView+DTFoundation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4907E32CCD484D56610C0399A79D23BD /* DTFolderMonitor.h in Headers */ = {isa = PBXBuildFile; fileRef = A8CC38EFEF171FFEE008C32A6319BE6A /* DTFolderMonitor.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4964E6E0330E161B8B118F6B0638236C /* DTFoundation-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 23588B63FC4026A371F5C683744A664C /* DTFoundation-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4969CE5602CC934D55680248A5A5ABC1 /* DTLog.m in Sources */ = {isa = PBXBuildFile; fileRef = 199E2ECC77BDAC03F644C20040F042D4 /* DTLog.m */; }; + 49D58CFE47CAF677E9442BC792640A4C /* RDEPUBTextAnnotationOverlay.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFCD03AC792A6CF8550BC44A4339D9FE /* RDEPUBTextAnnotationOverlay.swift */; }; 4A13B4E5EA8616A8F09D90BC6EAEEA64 /* CTLineUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 4FF4A2A7F2C7CFB5DD757BE1A6E59C7B /* CTLineUtils.m */; }; - 4B308D78F9D167B58BDD5695045F7756 /* RDEPUBReaderUIState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 56158B68400B5C946109EDFD7555A8A7 /* RDEPUBReaderUIState.swift */; }; - 4B58554A575684981F3BB1A6F90E4124 /* DTHTMLParser.m in Sources */ = {isa = PBXBuildFile; fileRef = 71BBE6384315D7F00F5ECFFF67A85AF9 /* DTHTMLParser.m */; }; - 4C317DFF96CA0063EF6CF687527431CC /* RDEPUBPublication.swift in Sources */ = {isa = PBXBuildFile; fileRef = A30017EA232AF10EF5AEF1A20891306E /* RDEPUBPublication.swift */; }; - 4CB9152E2F9F37608FF3BED957CEAA10 /* RDEPUBCFITextAssertion.swift in Sources */ = {isa = PBXBuildFile; fileRef = C3170B05B50679D6D7029E693A4A6024 /* RDEPUBCFITextAssertion.swift */; }; + 4BBDFB14A9E1E663B672696A77A39F0B /* DTCompatibility.h in Headers */ = {isa = PBXBuildFile; fileRef = 8F653EFBBEDAAC96A34BC93B4211E792 /* DTCompatibility.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4CE2C34EB81CD8336960B667033A6325 /* RDEPUBWebView+Search.swift in Sources */ = {isa = PBXBuildFile; fileRef = CADF4452F89F7A5F419D2841FABC8CBC /* RDEPUBWebView+Search.swift */; }; + 4D66BE87981E3058D5C54D88CEB4EB8F /* RDEPUBCFIGenerator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 104930ADAD326C90EB587485A6BFF755 /* RDEPUBCFIGenerator.swift */; }; 4DA6EC46F8968265B96C6D7B2260C4E5 /* DTTextBlock.m in Sources */ = {isa = PBXBuildFile; fileRef = C508E49F6BF9F50B05918C230B033069 /* DTTextBlock.m */; }; + 4E2123336537AC8648B8B3928D80FD88 /* URL+ZIP.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6430501430329643C8280B3985C48711 /* URL+ZIP.swift */; }; 4E4939F6592B06D2CA764DCACFB47871 /* NSString+Paragraphs.h in Headers */ = {isa = PBXBuildFile; fileRef = 0B8321AB80CFE0B94537AEA63E9A79F5 /* NSString+Paragraphs.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4E90223029F18880D771B8A854B1D710 /* NSString+DTUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C80941DE172AF972D2247659684D93A /* NSString+DTUtilities.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4F2B6AFB35C163DBC1F8E20681D46BB9 /* RDEPUBCFIMap.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0390F2BB06B9CE8FCBCD30D60C154B9 /* RDEPUBCFIMap.swift */; }; 4F50C703427747B88405080B221349A1 /* DTLinkButton.h in Headers */ = {isa = PBXBuildFile; fileRef = B12CE4962CDC324FB47FB92D6706D149 /* DTLinkButton.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4FD0B3D2431E89EFA74A02280F4DFA54 /* NSURL+DTAppLinks.m in Sources */ = {isa = PBXBuildFile; fileRef = 3453CFB9BDBF6F9D0937EDF5FB2BD07B /* NSURL+DTAppLinks.m */; }; 5065D99E1588E8CC60677E74916A5C03 /* DTAttributedTextCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 814315319ED50AF916C3C8A68C0A47A0 /* DTAttributedTextCell.m */; }; - 508227AD9DDEBDCC5811DF5DFE4B72B8 /* RDEPUBReaderController+LocationResolution.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5DE569B9F47EAF5135750BCF2E934C0F /* RDEPUBReaderController+LocationResolution.swift */; }; + 50EBC14A5BB65993E1FAC38130135074 /* ZIPFoundation-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = E9D8AB18960B56A997408E3235751624 /* ZIPFoundation-dummy.m */; }; 51A1B5800D23C355B1712E8D1103780C /* DTTextBlock.h in Headers */ = {isa = PBXBuildFile; fileRef = EA2BF1D7535B036E1356E8DF42A04954 /* DTTextBlock.h */; settings = {ATTRIBUTES = (Public, ); }; }; 528DBAC7FCEFC7D6575C1F6CB4399AEA /* DTStylesheetHTMLElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A88AA04D7B29A217B432C19AC48AB6B /* DTStylesheetHTMLElement.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 52BEFEA715FD0B9BC31F2F7C44DD188A /* RDEPUBDarkImageAdjuster.swift in Sources */ = {isa = PBXBuildFile; fileRef = F0580E9407862B9D452289BBF1C4CA01 /* RDEPUBDarkImageAdjuster.swift */; }; - 53D4340F38B1EAF75FD1534AE908A11E /* RDEPUBRuntimePageCount.swift in Sources */ = {isa = PBXBuildFile; fileRef = F2FB12B4D5D80C72658331C61991766C /* RDEPUBRuntimePageCount.swift */; }; - 54FC0EC0F7CE25F7D1E846C8CFFEA363 /* DTCustomColoredAccessory.h in Headers */ = {isa = PBXBuildFile; fileRef = BAE45673EE2875DB23FA7BDD61FDE1EF /* DTCustomColoredAccessory.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 549EA467E837EC2A6054D44B6376423A /* DTBase64Coding.m in Sources */ = {isa = PBXBuildFile; fileRef = E5D4D6E12779C54F17AE98A1E6C9B699 /* DTBase64Coding.m */; }; + 5510021D8090D3D2051AEB591A7D90BB /* RDEPUBChapterOffsetMap.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA22FB2A1729AFA909E9AAE06BCDC019 /* RDEPUBChapterOffsetMap.swift */; }; 5582735073EBB9F5078E6E8AEEFB646A /* DTCoreTextLayoutLine.h in Headers */ = {isa = PBXBuildFile; fileRef = 37327141DC73DE2D5742BE6F989094CE /* DTCoreTextLayoutLine.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 56EE6779284C6A7868A1AF9F8462EB79 /* RDEPUBParser+TOC.swift in Sources */ = {isa = PBXBuildFile; fileRef = C3A0D1E77F50E5274CCC99EEA427C15E /* RDEPUBParser+TOC.swift */; }; + 57399D051CD4E2CC012F3308031BE592 /* WeReadApi.js in Resources */ = {isa = PBXBuildFile; fileRef = 3AF63806C4793F384C4CF28201BC756C /* WeReadApi.js */; }; 57D5228C8A85628772D4D78E7FBEAF3C /* DTDictationPlaceholderTextAttachment.m in Sources */ = {isa = PBXBuildFile; fileRef = 8DA0F94C0870C1F0DFADE5E9045E5E6E /* DTDictationPlaceholderTextAttachment.m */; }; - 5856C4A656C1EAD5559B96C283308910 /* RDEPUBSelectionOverlayView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DEE95CBD7B492C5453D2FFA983C5CC02 /* RDEPUBSelectionOverlayView.swift */; }; - 58571B37B421D30C46E60547A3F572C4 /* RDEPUBPageResolver.swift in Sources */ = {isa = PBXBuildFile; fileRef = DC7BE59730389C1EC7BF65734D0D6776 /* RDEPUBPageResolver.swift */; }; - 58ACB3DC0AC4EA63B6DC65585DC75509 /* DTBase64Coding.m in Sources */ = {isa = PBXBuildFile; fileRef = E5D4D6E12779C54F17AE98A1E6C9B699 /* DTBase64Coding.m */; }; - 591C7326E09322733574F5D607BDDFF7 /* FileManager+ZIP.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C3F8DF48C6EB28BFD05F5BB49793DDA /* FileManager+ZIP.swift */; }; - 5966F7524564265D493279F72B6BEF10 /* DTLog.m in Sources */ = {isa = PBXBuildFile; fileRef = 199E2ECC77BDAC03F644C20040F042D4 /* DTLog.m */; }; - 5967C134F418B959CE1967A3CC15A3AF /* RDEPUBBuildDiagnosticsReporter.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD0C3C872488B6341E22BF47B6F9BBD6 /* RDEPUBBuildDiagnosticsReporter.swift */; }; + 57E15358F55891E25FA5979425011B2D /* ZIPFoundation-ZIPFoundation_Privacy in Resources */ = {isa = PBXBuildFile; fileRef = CA4A114775B98CEA4A566C18123B145F /* ZIPFoundation-ZIPFoundation_Privacy */; }; + 58ED82220D20D2DD9ABDAC9ABDD4BB4A /* RDEPUBReaderController+LocationResolution.swift in Sources */ = {isa = PBXBuildFile; fileRef = D9493E87BC278E65DA39B0F098CC01B9 /* RDEPUBReaderController+LocationResolution.swift */; }; + 5911713F9239050AD67855C5FE5C09CE /* RDEPUBImageViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1791083E7546C2EB443048851C122E32 /* RDEPUBImageViewController.swift */; }; 597DE4CDF5C674E269F03F6AA0AFFCC1 /* NSAttributedString+HTML.m in Sources */ = {isa = PBXBuildFile; fileRef = 71EE0B4D4D1B3D0A55E903E7E0CA44E7 /* NSAttributedString+HTML.m */; }; - 59A7C28A73DE8E3754AF97C359EE2460 /* RDEPUBChapterData.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1AF2749008FE67A3281B83EE327E41D /* RDEPUBChapterData.swift */; }; - 5A0FD2132C522ED3FFB86E966FE288F9 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B50104DE2E35D820ECA22CDB3E6F96EA /* Foundation.framework */; }; - 5A3D08398FCDB7FAD5A8210F31AA533C /* cssInjector.js in Resources */ = {isa = PBXBuildFile; fileRef = ECBE8305E343FF00B5DDF4F8F9D18623 /* cssInjector.js */; }; - 5BE96578F3A236ED2544FB20A4996165 /* NSString+DTPaths.h in Headers */ = {isa = PBXBuildFile; fileRef = B76B1E836C34CB755AEE1FBF7DC26BDD /* NSString+DTPaths.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5BF5ECEFD1384679A310688AFC7160C9 /* RDEPUBReaderTopToolView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 982FBB7B62F54B7806EAD1C178B6A083 /* RDEPUBReaderTopToolView.swift */; }; - 5C70C7532D7C43C97806677F40FB2336 /* RDEPUBMetadataParseCancellationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 842DE3099F95A155AF00FCEC57A65821 /* RDEPUBMetadataParseCancellationController.swift */; }; + 5991435101718DD89D53293B2B2CF58E /* RDEPUBTextBookModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33643E88B779A3DB1B3A14C7A194045B /* RDEPUBTextBookModels.swift */; }; + 59D84D2F01364873C8C8BAB4C33C2261 /* RDEPUBTextPageDecorationView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E42A81201784E7976A4C546739DE6ED5 /* RDEPUBTextPageDecorationView.swift */; }; + 5A06B30AC6A40A95582441D67FC337C9 /* DTTiledLayerWithoutFade.h in Headers */ = {isa = PBXBuildFile; fileRef = 0764D155F69503AACFA7AD976825E986 /* DTTiledLayerWithoutFade.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5ADF1544DE3754D1E2AA8A10BE3CC09A /* RDEPUBReaderSettingsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0901D33C8FF8497CDC7A4365D0D84218 /* RDEPUBReaderSettingsViewController.swift */; }; + 5B0FDAA3C42B8CB5248BC4ACF21FB3F2 /* NSString+DTFormatNumbers.m in Sources */ = {isa = PBXBuildFile; fileRef = C5005A9E8F746647585CCAB26853E922 /* NSString+DTFormatNumbers.m */; }; + 5B7E3DABCEB0DED90BD7C9F6FF076384 /* RDEPUBReaderViewportMonitor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7045AD2296EB5CDE847902C39A59F370 /* RDEPUBReaderViewportMonitor.swift */; }; + 5BBCAA7A6098938497E444933CC62556 /* RDEPUBReaderController+RuntimeBridge.swift in Sources */ = {isa = PBXBuildFile; fileRef = E844B3375520F01C6CCE1468B53CCC6C /* RDEPUBReaderController+RuntimeBridge.swift */; }; 5D03A5B9DC067875CFEC9D4EA7B059E8 /* DTCoreTextLayoutFrameAccessibilityElementGenerator.h in Headers */ = {isa = PBXBuildFile; fileRef = 671C2429406FDB36B677F4B6EC85B52F /* DTCoreTextLayoutFrameAccessibilityElementGenerator.h */; settings = {ATTRIBUTES = (Public, ); }; }; 5D8D65121E87E419D8D2F23F8AF43673 /* DTColor+Compatibility.h in Headers */ = {isa = PBXBuildFile; fileRef = 68D81DF1BB2A14F9C186F75BBA5CF50D /* DTColor+Compatibility.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5DC896B6277CFD4745B6FFC1B65436E9 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B50104DE2E35D820ECA22CDB3E6F96EA /* Foundation.framework */; }; 5E90EBD876ED4E50AB890FB56C4BFA57 /* DTHTMLParserNode.h in Headers */ = {isa = PBXBuildFile; fileRef = D28A3E79D83EA4B807E2D3A5EE086B8B /* DTHTMLParserNode.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5EE6776180341CF72714528684FA7254 /* ZIPFoundation-ZIPFoundation_Privacy in Resources */ = {isa = PBXBuildFile; fileRef = CA4A114775B98CEA4A566C18123B145F /* ZIPFoundation-ZIPFoundation_Privacy */; }; + 5EBCDBA71D6A9A0B165DA802A3DB791A /* wxread-default.css in Resources */ = {isa = PBXBuildFile; fileRef = 7667AF77CBF47AFAA7D5F190B16A51FF /* wxread-default.css */; }; + 5EF29ED9DAD773DB59A8F506A4170C8B /* RDEPUBWebDecorationOverlayView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A220EF1E6F5821B91990AAED74A4FFC /* RDEPUBWebDecorationOverlayView.swift */; }; + 5F91E431D40AE218D7A3774E0A9B4FCC /* RDEPUBCoreTextPageFrameFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09336B106D598DCD38F6B79AEA629066 /* RDEPUBCoreTextPageFrameFactory.swift */; }; + 5FD041841462D5467C316ABFECA32B75 /* UIColor+RDEPUB.swift in Sources */ = {isa = PBXBuildFile; fileRef = 92ED368A3AC26AAF26FEB59577BBF3F4 /* UIColor+RDEPUB.swift */; }; 60532A2E06CCFF814933D2FAE6793AE9 /* DTCoreTextLayouter.h in Headers */ = {isa = PBXBuildFile; fileRef = 72225FB74594FCF18DA8064E7DB3947E /* DTCoreTextLayouter.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 606B416E975EF1F02EFC8945656B7C28 /* Archive+BackingConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 765A94769106D14615FFB30EE1BD5E65 /* Archive+BackingConfiguration.swift */; }; + 609A47F8B6B778E7C09C4A3173716231 /* RDEPUBPreferences.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1EAAFA56DA59E80D53DA0DC7C6532D2 /* RDEPUBPreferences.swift */; }; + 60B755A36A2122D9509C47B59B977F64 /* DTCoreGraphicsUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 0372FD1824BC43F7BD6B337430201420 /* DTCoreGraphicsUtils.m */; }; + 6112DAD7FA7F9CDFF6798D061A776AA6 /* RDEPUBTextPaginationInterfaces.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8ED87665B0B64B6E8153C0490203E43B /* RDEPUBTextPaginationInterfaces.swift */; }; 61BE3607EABD2657BC71AF8ACB1C25D4 /* DTHTMLAttributedStringBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = 4E1066A8FE63AD2C818E26DDCE62DF58 /* DTHTMLAttributedStringBuilder.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 631A75A5E333844E48AB0655E65E8619 /* RDEPUBReaderAssemblyCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7031B493810918D5B50450340CA6652B /* RDEPUBReaderAssemblyCoordinator.swift */; }; - 631E5B681577106CA3DA1EE532B50D75 /* RDEPUBCFICompatibility.swift in Sources */ = {isa = PBXBuildFile; fileRef = BA33898232E2ED58D3A5B60A8F56BAC6 /* RDEPUBCFICompatibility.swift */; }; - 63DE1ECD08743BC4A556ACA90FDB4BAD /* RDEPUBTypesettingPipeline.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3424A6DFBC2AC519C7C599F18DCDC89D /* RDEPUBTypesettingPipeline.swift */; }; - 640349287B1EC3A07C397EEE5A4510C7 /* RDEPUBFontFallbackResolver.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5F9FE9924520900BBDF724D9903C5309 /* RDEPUBFontFallbackResolver.swift */; }; - 65957BA854E8610EA216E8323B136C5B /* NSURL+DTUnshorten.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A6A858B976D032A3C61540AFF19DEE4 /* NSURL+DTUnshorten.m */; }; + 6271C496EAB502AD3055465A5D827878 /* Archive+Progress.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE83356F8FBC1801D29CA93C1A190D81 /* Archive+Progress.swift */; }; + 632192A26D2997E04711F37A141B8099 /* RDEPUBReadingSession.swift in Sources */ = {isa = PBXBuildFile; fileRef = 314E39CF7ADE645354AC8873D80957CA /* RDEPUBReadingSession.swift */; }; + 63A0F02E81586CA14D5EFD53E7E09EC5 /* RDEPUBSafeArea.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA068568A9B92FE52049E190968609A8 /* RDEPUBSafeArea.swift */; }; + 64F90689CBA4FBC32D6A4D65BAE984A8 /* RDEPUBTextPositionConverter.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8BE089AF845973208A11AA41A9B6AAB /* RDEPUBTextPositionConverter.swift */; }; + 65D4A26423DC3811E2E647A7E6401653 /* RDEPUBReaderSearchBarView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50BEBB47FE6ED062DE6363BFDCC7D84C /* RDEPUBReaderSearchBarView.swift */; }; 6634D568E49F5610242E1454680E5885 /* NSAttributedString+SmallCaps.h in Headers */ = {isa = PBXBuildFile; fileRef = CACF20969583778CAC1BC92BB96F27FD /* NSAttributedString+SmallCaps.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 66E707F0227EB649C9693BBA35384DE9 /* RDEPUBBackgroundCoverageStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F4858380CB626A893FA6803F5574F89 /* RDEPUBBackgroundCoverageStore.swift */; }; 67AE2AC8D9B961D45871077774E11FD3 /* DTObjectTextAttachment.h in Headers */ = {isa = PBXBuildFile; fileRef = 13597E7190F2C08C5906D7D128E43E99 /* DTObjectTextAttachment.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 68991FD1C811CDB7C212E0221F7DBD52 /* NSString+DTURLEncoding.m in Sources */ = {isa = PBXBuildFile; fileRef = 131C1D8C96DF2D44A2D4F50C5AEFFF11 /* NSString+DTURLEncoding.m */; }; + 692CDFFEE07CA9C09D1257448154707D /* RDEPUBCFICompatibility.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8F08538F2728E3B8B81113D12DB74E3A /* RDEPUBCFICompatibility.swift */; }; 69674FEA70899F07BE6098AAEC849978 /* DTAccessibilityViewProxy.m in Sources */ = {isa = PBXBuildFile; fileRef = 6AC1E707308CDBC9FFC09CECE3117A9A /* DTAccessibilityViewProxy.m */; }; - 6B4E7177F034E79B8C3F932183E84011 /* NSData+DTCrypto.h in Headers */ = {isa = PBXBuildFile; fileRef = 94705DADD1F09F4162F7D733318238F4 /* NSData+DTCrypto.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6CAA09C46E273F8880234AA28B07542B /* RDEPUBReaderLoadCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0FF7BBD4C881AD7327290471E9484E1F /* RDEPUBReaderLoadCoordinator.swift */; }; - 6CDF59BFF3F212BD65C009C7080542BE /* DTPieProgressIndicator.h in Headers */ = {isa = PBXBuildFile; fileRef = 173194D38C897D8E38AD8A194E47DB5C /* DTPieProgressIndicator.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6D4144C4D4DF772F31A8362BB63252A8 /* RDEPUBStyleCompatibilityModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5077339D9632D68EDAB64BBEF622E154 /* RDEPUBStyleCompatibilityModels.swift */; }; - 6D7CDF15EC821BD18B9E6FFBDCF8C033 /* RDEPUBReaderConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 66D0B6D4C75424B340D7C9861D7DF6F6 /* RDEPUBReaderConfiguration.swift */; }; - 6DA8B5EB829C2AFB0891E6EF583C6C0E /* NSMutableArray+DTMoving.h in Headers */ = {isa = PBXBuildFile; fileRef = 3046397381A83C2F6BAF344B86AD176E /* NSMutableArray+DTMoving.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6B49DC82B42CA0E117265F6CD43EEF8D /* default.css in Resources */ = {isa = PBXBuildFile; fileRef = 47DC174612C98B2CFB4E7D158169139E /* default.css */; }; + 6BF4DC0E327C667AC9D4709AD022FA7F /* RDEPUBRenderRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 564F072D0966350F4C3986E01EB3EB2C /* RDEPUBRenderRequest.swift */; }; + 6C906CF9FFC1697C72A93D4FC543B6A3 /* RDEPUBFragmentMarkerInjector.swift in Sources */ = {isa = PBXBuildFile; fileRef = 587C2E270D5414FF4E3786D14BD36694 /* RDEPUBFragmentMarkerInjector.swift */; }; + 6D705FC78684FAA20879A13095661E8F /* RDEPUBNoteDetector.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0430034A7AFBCEC269D7C46517004DF0 /* RDEPUBNoteDetector.swift */; }; + 6DD5C44F5661E614F21FE810AFB6E8BE /* RDEPUBSelectionState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 71E8149D8D8A8F61C09D98F329F11CA0 /* RDEPUBSelectionState.swift */; }; + 6E0E63C1AAA2E75F7C040815B6A342DA /* RDEPUBReaderPersistence.swift in Sources */ = {isa = PBXBuildFile; fileRef = 93A16F63ABA3D0BA695CC9F1F7D6F3DA /* RDEPUBReaderPersistence.swift */; }; 6E3D0FDD78ECC20F4B3697ED21D64224 /* MediaPlayer.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4C2B218B5EAA5831A036BBF7E1EFC1B9 /* MediaPlayer.framework */; }; - 6F9A6FA6D8D87257F9426AF3E118F7E0 /* RDReaderView+CollectionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C4682C38E0A66C0E9760FC62C00A327 /* RDReaderView+CollectionView.swift */; }; + 6E8441F463F68A5FEC44C69BCF77EAD8 /* RDEPUBAnnotationModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = 685FE9B1A888D8D05E9AC049787CBC8D /* RDEPUBAnnotationModels.swift */; }; + 6F0D1C67B483AE83D93F884A04CF6EC8 /* RDURLReaderController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02CABD2C55EE6F8759C2702014273F00 /* RDURLReaderController.swift */; }; + 6F5B9493A5058F7DD16AEA802C1C76EC /* UIScreen+DTFoundation.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C5E29D728B8CD4EABC0B3DD9CD9DE99 /* UIScreen+DTFoundation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6F8ABC6B6D2316E3533A21E86DC3C1A7 /* NSDictionary+DTError.h in Headers */ = {isa = PBXBuildFile; fileRef = 05838D65DEC339C51AADB17346B7E287 /* NSDictionary+DTError.h */; settings = {ATTRIBUTES = (Public, ); }; }; 6FA0125F16DDEDAD341DB75DEB084F4B /* DTHTMLWriter.m in Sources */ = {isa = PBXBuildFile; fileRef = B23C5F038DAC52B75213C0760C431F2B /* DTHTMLWriter.m */; }; 7027EF8D77D4082C1BB9B80FF61FCADC /* DTCoreTextLayoutFrame+Cursor.h in Headers */ = {isa = PBXBuildFile; fileRef = 214F0FC87DE99D3FCE69D98B357F3FFC /* DTCoreTextLayoutFrame+Cursor.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 71AA63D206360F5BEC6B89C738C192F3 /* RDEPUBReaderLocationCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = A1570DC08749A3866877CAF0A6BD877C /* RDEPUBReaderLocationCoordinator.swift */; }; - 7301973ED8F52DCDC8E16A64066C9158 /* RDEPUBBackgroundPriorityPolicy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1776D2B8346E3DE2D2CFF9AA994D50DF /* RDEPUBBackgroundPriorityPolicy.swift */; }; + 7137779222F4F680762DF31046A48EAE /* DTLog.h in Headers */ = {isa = PBXBuildFile; fileRef = 207CC0EEB74CECEB43A870FF80560E0F /* DTLog.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7153939E3B654645EC94EA0E03470D23 /* Archive.swift in Sources */ = {isa = PBXBuildFile; fileRef = C3E162E0261A5B0850158D3403191E62 /* Archive.swift */; }; + 717C9A6838893A778C48AE1A4ADC1D93 /* RDEPUBTextContentInteractionCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = D53EA3F44C0602B1BEB2F85B59B32CB3 /* RDEPUBTextContentInteractionCoordinator.swift */; }; + 71D61645B7F86868B09D2D8628FB02DB /* RDReaderFlowLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 56A9260F17C4825708B83598BEC99365 /* RDReaderFlowLayout.swift */; }; + 72CA345F4639CA9C6AF9C164515070B6 /* RDEPUBReaderLocationCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 60FB0E099208100165A2E44F44CA76B1 /* RDEPUBReaderLocationCoordinator.swift */; }; 730ACB99580C5982DC08D50FC5084D41 /* DTAttributedTextView.h in Headers */ = {isa = PBXBuildFile; fileRef = B4D20A2B33F9F4DD8499FB462DE2731F /* DTAttributedTextView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7398A6AEB47EA308F2E93FE03B1A3D06 /* DTFoundation-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 23588B63FC4026A371F5C683744A664C /* DTFoundation-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 73BB353CA378834928C3946524DF2D12 /* DTLog.h in Headers */ = {isa = PBXBuildFile; fileRef = 207CC0EEB74CECEB43A870FF80560E0F /* DTLog.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 73E26B43FD89D6F9E5D6E53888DCDA0C /* DTBlockFunctions.m in Sources */ = {isa = PBXBuildFile; fileRef = 6D2316F422A6C97F95F9CF43E6F8E94F /* DTBlockFunctions.m */; }; + 73EA755F8A8DD59544C39033CEDDE43F /* NSArray+DTError.h in Headers */ = {isa = PBXBuildFile; fileRef = C7E09A6C247D465CA0EF71B939B2A040 /* NSArray+DTError.h */; settings = {ATTRIBUTES = (Public, ); }; }; 7408D293C24C3BD9CBBCBB530B50938B /* Pods-ReadViewDemo-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = AA0811310099A4BCB3D52683B70DB3D1 /* Pods-ReadViewDemo-dummy.m */; }; + 741FC27B73B2FC912CE6940374608E74 /* RDEPUBReaderServices.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0FDF74546728C05BFEA4B3BC4D6905AF /* RDEPUBReaderServices.swift */; }; 7459A1656EDC29D685073B83561B783E /* NSNumber+RomanNumerals.h in Headers */ = {isa = PBXBuildFile; fileRef = 7CFFB65C5D340A4B5C627B3EF02CD127 /* NSNumber+RomanNumerals.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 74794205BE245B73D21939B91C6191C6 /* NSString+DTUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = F3E93C4AC73A09DE1EAE805B0ADE3306 /* NSString+DTUtilities.m */; }; - 75D6249689F5C1F38EBF86A5D5C1490D /* RDEPUBTextLayouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F8C64CB3F3D0B7D4AA66798C740CB20 /* RDEPUBTextLayouter.swift */; }; - 7721B54B344CC91C75F3508F8A38B094 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B50104DE2E35D820ECA22CDB3E6F96EA /* Foundation.framework */; }; + 7528B559334EFD3C17196C52EA4B28F0 /* RDEPUBWebContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F66DD9D0E36BCFB8D70F713B112FFC5A /* RDEPUBWebContentView.swift */; }; + 75BA64D63D4FEA1DA5BF5C89CAD4963D /* NSURL+DTUnshorten.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A6A858B976D032A3C61540AFF19DEE4 /* NSURL+DTUnshorten.m */; }; + 76BF72753C25298968F8446D1FEDD9C5 /* RDEPUBPageBreakPolicy.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD3430DE68FE0020F68C496C24E87470 /* RDEPUBPageBreakPolicy.swift */; }; + 7730A0D6848C96EE7307338241444A1D /* DTWeakSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = E4C5EB3F8F005C65005C101A9DBE488A /* DTWeakSupport.h */; settings = {ATTRIBUTES = (Public, ); }; }; 7821105EF320619993B3BF7FB90C7ADA /* DTCSSStylesheet.h in Headers */ = {isa = PBXBuildFile; fileRef = 796EF27FF6AA4B62367B6BD9CEBD85A8 /* DTCSSStylesheet.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 78BB61196C1CCF2870544CCCC3D6FCCD /* RDEPUBChapterRuntimeStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0D9C9D60B2B26F9890D35189DEBC7580 /* RDEPUBChapterRuntimeStore.swift */; }; + 789E8F623B7EC480E167CCFB17B32328 /* RDEPUBPaginator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 65572083A10EE0C48AA7F493F923BCC0 /* RDEPUBPaginator.swift */; }; 78D24D82D98D77E744FF73C9040618A8 /* DTHTMLParserNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 5001C74FB9506AEC71E458047698A4AB /* DTHTMLParserNode.m */; }; - 790C14D6DF0311FD4053970359D34649 /* RDEPUBReaderController+RenderSupport.swift in Sources */ = {isa = PBXBuildFile; fileRef = CF49CE19D9F09A60F438FF3612F43069 /* RDEPUBReaderController+RenderSupport.swift */; }; - 792ACF8BA7BA68E9534E4B8D095690D6 /* NSData+DTCrypto.m in Sources */ = {isa = PBXBuildFile; fileRef = F63EBF2BF3000B3391F6E693581EA129 /* NSData+DTCrypto.m */; }; - 79CDB0BF339D6E5BF3D168BBED6553FD /* RDEPUBTextPaginationSupport.swift in Sources */ = {isa = PBXBuildFile; fileRef = 78C97EDF23543CE63904C4D8A066A7A1 /* RDEPUBTextPaginationSupport.swift */; }; - 7A23AEADBD4DD223D472D162A54A6789 /* RDEPUBReaderContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2EDB136931B7075E5A4F6BD8E5E2DBE6 /* RDEPUBReaderContext.swift */; }; - 7A34803D14D56A92E9FA400C7305B19B /* wxread-default.css in Resources */ = {isa = PBXBuildFile; fileRef = 0D253DF65322509913DE34899979C30B /* wxread-default.css */; }; - 7A3B9F9A741756370C23FCE449D10FBF /* DTBlockFunctions.h in Headers */ = {isa = PBXBuildFile; fileRef = 35417EC94F2D58CB80C991F875CE15C2 /* DTBlockFunctions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 797848B2163C1E4E5F1446D9B867BA30 /* epub-fixed-layout.html in Resources */ = {isa = PBXBuildFile; fileRef = C229DC7F5A2BB8C2A3C586FF6CF41D47 /* epub-fixed-layout.html */; }; + 7A1CB3B032A352C23503837C966FE021 /* RDEPUBReaderController+ContentDelegates.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3416C45A5E4AEF922A7D3804F0A05EB4 /* RDEPUBReaderController+ContentDelegates.swift */; }; 7A48CDFB40202EFD09A2A9AB0EE0770D /* DTCoreTextFontDescriptor.h in Headers */ = {isa = PBXBuildFile; fileRef = 1EF19AD0EF4889156D46061FB43E0F5D /* DTCoreTextFontDescriptor.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7A748D28C60A0065C777DE834CA1B5A7 /* RDReaderView+PageCurl.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E281F0688B1D356CF1654C6063AE77D /* RDReaderView+PageCurl.swift */; }; + 7BF06C839584BC5C3F22B7922B2135C0 /* RDEPUBReaderLoadCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 77CF002A64746DB8BE37C9DC0941C805 /* RDEPUBReaderLoadCoordinator.swift */; }; 7C05F56B62B15EFF344C5CDE4A52B8FB /* DTHTMLElement.m in Sources */ = {isa = PBXBuildFile; fileRef = 7A4E9E54E556A72BC885CCC08B3791C1 /* DTHTMLElement.m */; }; - 7C2173CC58496721A7DCDCBC31840068 /* Archive+Reading.swift in Sources */ = {isa = PBXBuildFile; fileRef = E865600EE9117A9153716299FFA7912D /* Archive+Reading.swift */; }; - 7C68A32E44AAE4EDBEAE68473BB9EDE7 /* RDEPUBNotePopupCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C906FDE0E26C697C4D2FB2502F7D798 /* RDEPUBNotePopupCoordinator.swift */; }; - 7C68BB97D96CCA378A99B1AEDF75F2AA /* RDEPUBCFISerializer.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADA1EB57E3C97548261B7AE9E5975272 /* RDEPUBCFISerializer.swift */; }; - 7D411155326150312CD1649A73AE55A8 /* RDEPUBNavigatorLayoutContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2092D0DAEE6507B0B448DAA0A4888191 /* RDEPUBNavigatorLayoutContext.swift */; }; - 7D6EFD0580A8BCD609B2076F8A6EB4C8 /* ImageIO.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FEB14A8F8170777DB7CCC3F27C8EA57A /* ImageIO.framework */; }; - 7DD3E3DDBF44D68361F090E0EB4B0737 /* RDEPUBWebView+FixedLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5F41DCAB71A589008105D8C3AB0F8878 /* RDEPUBWebView+FixedLayout.swift */; }; - 7F9B8AAB4623E3CC58C37D8EBFF514B4 /* DTExtendedFileAttributes.m in Sources */ = {isa = PBXBuildFile; fileRef = 56E8939081946D090FD77A04F879754C /* DTExtendedFileAttributes.m */; }; + 7C12C095DE7472FF95E05E35601C3988 /* RDReaderViewProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF55DCBC3A5B0BEC5B1A4C6187F20D38 /* RDReaderViewProtocols.swift */; }; + 7D68FBD206B150ECFB850BF21DFF1D54 /* NSMutableArray+DTMoving.h in Headers */ = {isa = PBXBuildFile; fileRef = 3046397381A83C2F6BAF344B86AD176E /* NSMutableArray+DTMoving.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7DC14CAF5CB1827AB6622A3468247D05 /* DTTiledLayerWithoutFade.m in Sources */ = {isa = PBXBuildFile; fileRef = 23006DBAC610AEB0A4B3EAFEA4FB0567 /* DTTiledLayerWithoutFade.m */; }; + 7E082BDFF91E79A320FFE58301A4611F /* RDEPUBReaderController+TableOfContents.swift in Sources */ = {isa = PBXBuildFile; fileRef = F08981630C2BB2DF438340C175302A5D /* RDEPUBReaderController+TableOfContents.swift */; }; + 7EC0B3F00E142D2EF8AD8C426519B8FB /* rangy-serializer.js in Resources */ = {isa = PBXBuildFile; fileRef = 1527510DA54482E3557D6BB3EB651015 /* rangy-serializer.js */; }; + 7F06B128ECF3428FDAB9B0CDAEB50527 /* RDEPUBResourceURLSchemeHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B5686B2CD1ADB2443ECF94B15903873 /* RDEPUBResourceURLSchemeHandler.swift */; }; + 7F40491F86024E8AFE5253431DD93405 /* NSData+DTCrypto.h in Headers */ = {isa = PBXBuildFile; fileRef = 94705DADD1F09F4162F7D733318238F4 /* NSData+DTCrypto.h */; settings = {ATTRIBUTES = (Public, ); }; }; 7F9CC306B17D409DB903DF850FEDA64C /* DTListItemHTMLElement.m in Sources */ = {isa = PBXBuildFile; fileRef = 61B18088896D291E0CE7718DFE82FAC1 /* DTListItemHTMLElement.m */; }; - 7FC6815502492DF1D663D87A2D9AB207 /* DTFoundationConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = FF63F5E8902D6F3F5E845A924EBBC6D3 /* DTFoundationConstants.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7FDB342E7990D04F20D66B54DD3288F3 /* DTActivityTitleView.h in Headers */ = {isa = PBXBuildFile; fileRef = AF1516035C269F7A41EE064AAB14D562 /* DTActivityTitleView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 80293565A6D64BAAD1917E1688E7FD5B /* RDEPUBPageInteractionController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 252AFCFB40C36621E9C98C6644A56EE6 /* RDEPUBPageInteractionController.swift */; }; - 803C702E95B286938CC3916511A242F4 /* RDEPUBImageViewerCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = F17DB32BEDD4A7738B4AC8201E5BD91B /* RDEPUBImageViewerCoordinator.swift */; }; - 8041514FE1856F94EBD1E317A1E9ABBE /* RDEPUBAttachmentNormalizer.swift in Sources */ = {isa = PBXBuildFile; fileRef = F5847BF261408B9B82FB3BF7A9390AB3 /* RDEPUBAttachmentNormalizer.swift */; }; + 80922C1B7510E10B313BBC0BC457314B /* RDEPUBReaderPaginationCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1EF9571672022F0A84D66AC6E6F91305 /* RDEPUBReaderPaginationCoordinator.swift */; }; 8099F1E613A15275EF5FC59ED3C73579 /* NSAttributedString+HTML.h in Headers */ = {isa = PBXBuildFile; fileRef = 7805DFC2CB71F5B6BBF7891876360EFB /* NSAttributedString+HTML.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 80A9DF9B66A59153F911FB540BB88DAD /* RDEPUBReaderController+AttachmentTooltip.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CDD971696985E60155A09E16CD844C5 /* RDEPUBReaderController+AttachmentTooltip.swift */; }; - 811584EBB417D8EAC8674773013DA313 /* wxread-dark.css in Resources */ = {isa = PBXBuildFile; fileRef = 8AE69217E6A738AC11FEB58F2603B17F /* wxread-dark.css */; }; 811D7CBCD710AE45FF80A4B05BFE444C /* UIFont+DTCoreText.m in Sources */ = {isa = PBXBuildFile; fileRef = CEBA01360577AAD3FD089B6B17C24260 /* UIFont+DTCoreText.m */; }; 814D0D63E5FD4AB7231E63064FE9EB5C /* NSAttributedString+DTDebug.m in Sources */ = {isa = PBXBuildFile; fileRef = 5096458D9BD2818F786BC3B61B91EAC7 /* NSAttributedString+DTDebug.m */; }; 81905A7717925A17E6B98E934A75B8BA /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0834E84632886CDD9911CAB76183F1CE /* QuartzCore.framework */; }; - 81F2EDDCDE14E41755685147F75D02D5 /* RDEPUBHTMLNormalizer.swift in Sources */ = {isa = PBXBuildFile; fileRef = E0F6036722A2FEED169B57120EB274D1 /* RDEPUBHTMLNormalizer.swift */; }; + 81B117A37A8476877A9F52EB0E1519F7 /* RDReaderView+ToolView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 83041D1E40ECC246DB5539C712499A09 /* RDReaderView+ToolView.swift */; }; 82119A0DC4981CC2AF389C7C4CC08186 /* DTListItemHTMLElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 5DB480D0B78911DBF96986E64A714907 /* DTListItemHTMLElement.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8329F87853CB379C84A455A9C72F0E97 /* NSFileWrapper+DTCopying.m in Sources */ = {isa = PBXBuildFile; fileRef = D9A812C3E577A3ADC36BAE3FF7AA4D9C /* NSFileWrapper+DTCopying.m */; }; 83A4BC9FE4765C9B848DD4925D99F362 /* DTAccessibilityElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D146C3F4B7878B5CE8EFF38765580C2 /* DTAccessibilityElement.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 83A5346560A82E6CA50BCC12E8D76FBB /* RDEPUBSelectionState.swift in Sources */ = {isa = PBXBuildFile; fileRef = F6E041555AFAC5F8BD987FCA9DAC0949 /* RDEPUBSelectionState.swift */; }; - 851D7CADE59C83C2E79791EFBD2F1B9E /* DTFolderMonitor.h in Headers */ = {isa = PBXBuildFile; fileRef = A8CC38EFEF171FFEE008C32A6319BE6A /* DTFolderMonitor.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 852C505B9BC6E6CE207559DB6F65F526 /* NSString+DTFormatNumbers.h in Headers */ = {isa = PBXBuildFile; fileRef = A3BD3ED7913130D32E14D5572CBCC921 /* NSString+DTFormatNumbers.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 859B45A8A4A1B9FBEB3002EE8BEE46E1 /* NSArray+DTError.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E5297E7F5769C61C1838962BA76D4F5 /* NSArray+DTError.m */; }; - 892B8712F2112DDFA6619A0913DE30B3 /* UIImage+DTFoundation.m in Sources */ = {isa = PBXBuildFile; fileRef = 499E135F1FEB31C26EB0EF793A90086C /* UIImage+DTFoundation.m */; }; + 83E65FA5AC30BF60417B8D6D19556359 /* DTAnimatedGIF.h in Headers */ = {isa = PBXBuildFile; fileRef = F9D9BEF72311AF9E3239F9B92A9D2842 /* DTAnimatedGIF.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 83EA663B7BB067DD5EDF4ABAD045622C /* RDEPUBCFIParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0ADCC15F3965570C3568420F9A75845E /* RDEPUBCFIParser.swift */; }; + 8557BEDD77A0FABC469CDA90D3402C2B /* RDEPUBTextLayouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 86526ADF32337683AA173B5FC1E6A94C /* RDEPUBTextLayouter.swift */; }; + 86D6DD3DAA214DF9228D219A1C15B12A /* RDEPUBTextPageVerticalJustifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = CCD1EE67D4C520598E5975F0489DCB87 /* RDEPUBTextPageVerticalJustifier.swift */; }; + 86EB794495FA09BC2E166B43002DAFC5 /* RDEPUBReaderController+PublicAPI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1859C9EC3263145CE262EC15A12B6BE4 /* RDEPUBReaderController+PublicAPI.swift */; }; + 879B5366A6BB373F77010F2CCE776F4C /* RDEPUBReaderSearchCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = FD4E4C38FE23EEF72D4049DBFADB922C /* RDEPUBReaderSearchCoordinator.swift */; }; + 881E6C18B19215333585C4A16E3F413A /* UIImage+DTFoundation.m in Sources */ = {isa = PBXBuildFile; fileRef = 499E135F1FEB31C26EB0EF793A90086C /* UIImage+DTFoundation.m */; }; + 88F114C6286AA4DABEFC5A4A4659C539 /* RDEPUBReaderConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9C5B9705D72218CB383307A329C9060B /* RDEPUBReaderConfiguration.swift */; }; 8A0A0FB23DB0021ADC9AD0D90631883A /* NSMutableString+HTML.h in Headers */ = {isa = PBXBuildFile; fileRef = 52053ABC9CD3D4A72CD8A22173428AEB /* NSMutableString+HTML.h */; settings = {ATTRIBUTES = (Public, ); }; }; 8A35CC67F0AA6B26397C10D756EA34E8 /* DTTextHTMLElement.h in Headers */ = {isa = PBXBuildFile; fileRef = ED9A1EBDA0FD72671C7F6FE15F37B906 /* DTTextHTMLElement.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8A5A271780D55E365E441781D2143538 /* UIScreen+DTFoundation.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C5E29D728B8CD4EABC0B3DD9CD9DE99 /* UIScreen+DTFoundation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8ABB70BC85808639BE2820ED576705EF /* NSString+DTPaths.m in Sources */ = {isa = PBXBuildFile; fileRef = D30DBDF1EDB20CF83690AC6619AA0C48 /* NSString+DTPaths.m */; }; + 8A666D6696060E7CD204E87C00BE5B14 /* RDEPUBChapterTailNormalizer.swift in Sources */ = {isa = PBXBuildFile; fileRef = A59C77DC849EDF86936A25873E674F72 /* RDEPUBChapterTailNormalizer.swift */; }; + 8AA93AAAC288A910A46B6418DEDBA643 /* RDEPUBPublication.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2FA2158447C66C1AA074403C4AEF1BD9 /* RDEPUBPublication.swift */; }; + 8AC8341ED75EF88F3C8EF4B750ADA8E9 /* RDEPUBTextIndexTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80F1F9A3C3AD1C55622B17CA5D503766 /* RDEPUBTextIndexTable.swift */; }; 8AC90941E71199090BCED76DE89EFB60 /* DTAttributedTextView.m in Sources */ = {isa = PBXBuildFile; fileRef = F46010C3A0C82AE5ABEC814D7EC6351B /* DTAttributedTextView.m */; }; - 8AFC5D133F47D2D83D972F007FB5E975 /* RDEPUBTextContentInteractionCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 890B65045CA1A5D01EDF09F7FD14C6C3 /* RDEPUBTextContentInteractionCoordinator.swift */; }; 8B405CE13E7D718A9340A82B52766AB2 /* NSCharacterSet+HTML.h in Headers */ = {isa = PBXBuildFile; fileRef = A7E167717A18E0C858C6FD95804249E4 /* NSCharacterSet+HTML.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8B452A6989E55D4D4256B16F379F7831 /* RDEPUBFixedLayoutTemplate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 38459BA6DDC11AC3B9574C4E48F48ADC /* RDEPUBFixedLayoutTemplate.swift */; }; - 8BF07B59FD97F89AD9AE7ABE953C5229 /* RDEPUBBackgroundTrace.swift in Sources */ = {isa = PBXBuildFile; fileRef = A4B2389196B50CE10DE62C6DF588B1D9 /* RDEPUBBackgroundTrace.swift */; }; - 8C154F19B995AAAF0BCB771F5CC3A906 /* RDEPUBResourceURLSchemeHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9ED2C72C44EE3717E5F3B45933FC5F5C /* RDEPUBResourceURLSchemeHandler.swift */; }; - 8CF6E628158B190D0FFEF62AF059FD12 /* RDEPUBTextBookBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 72BE58BB9BF4DCDFDC6D5430AA2E82E9 /* RDEPUBTextBookBuilder.swift */; }; - 8E1DC7355706F3565B8A0B38A59AAED9 /* DTBlockFunctions.m in Sources */ = {isa = PBXBuildFile; fileRef = 6D2316F422A6C97F95F9CF43E6F8E94F /* DTBlockFunctions.m */; }; - 8E85166218F63FF359E769813A2444C6 /* RDReaderPreloadController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E5D2C72E80EF71ECCFDFE5C476ADADE /* RDReaderPreloadController.swift */; }; + 8D3C1C271D61E160F1F39548AB40B82D /* RDEPUBReaderHighlightsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4537790EA93442CD0FA48609D7ADDD13 /* RDEPUBReaderHighlightsViewController.swift */; }; + 8D7B76D2BE87960C41554815520FBFD4 /* RDEPUBParser+Resources.swift in Sources */ = {isa = PBXBuildFile; fileRef = 170D81239AF3CE5CD64BA2E44A505872 /* RDEPUBParser+Resources.swift */; }; + 8E7372FDB503AAE2B99CAF40DF2083C5 /* DTPieProgressIndicator.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BA617294E6371DD7FAC32B61E0873F2 /* DTPieProgressIndicator.m */; }; 8E8726381CBCFB1EDB350183456D4EF7 /* DTHTMLParserTextNode.m in Sources */ = {isa = PBXBuildFile; fileRef = E5377786E80195587BF3E8A7589E5925 /* DTHTMLParserTextNode.m */; }; - 8E88C2B80FBFC142610DDB8A57EB8D84 /* RDEPUBChapterCacheKey.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC5131ADC7B6C3869C5CA5A5CB52C06F /* RDEPUBChapterCacheKey.swift */; }; - 8FCBD7D14FE4C1CF881E0DC8EB0EDD75 /* RDEPUBSemanticMarkerInjector.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AE0BE26FBA95F74B6173965BEC302EB /* RDEPUBSemanticMarkerInjector.swift */; }; - 8FFDDFA77ACE0DCC142C857189E867C7 /* Archive+Helpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55B9309F0BDDDE2C3EE13C97BF2C0F1E /* Archive+Helpers.swift */; }; - 91CF281A86EC3D57E8E4D5B5988D7D45 /* RDEPUBReaderRuntime.swift in Sources */ = {isa = PBXBuildFile; fileRef = A12918D1D6A305DDE8B4249CCE38BB1F /* RDEPUBReaderRuntime.swift */; }; - 91EA145D5B76F9BDCD03FB801F3ACB3D /* DTSmartPagingScrollView.h in Headers */ = {isa = PBXBuildFile; fileRef = 21CCCCAAF832BE9C859BEDDC79B4E9E2 /* DTSmartPagingScrollView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8FC3334B09D284CB92164B6109124472 /* RDReaderPagingController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8C99F4EC07FF6B3DD8C8B72E54DEB008 /* RDReaderPagingController.swift */; }; + 8FC40E552134EC459638871941437C41 /* RDEPUBReaderUIState.swift in Sources */ = {isa = PBXBuildFile; fileRef = DFDE9DF5F8221764CC5AD1218EC24236 /* RDEPUBReaderUIState.swift */; }; 91FDA47810CE5CE2C48AED9205AE89B5 /* DTStylesheetHTMLElement.m in Sources */ = {isa = PBXBuildFile; fileRef = 354C1C3A74DB75C8B8608D538212A963 /* DTStylesheetHTMLElement.m */; }; - 923002983AC3675E5D249839481F6DDC /* RDEPUBTextBuildPipelineInterfaces.swift in Sources */ = {isa = PBXBuildFile; fileRef = 59036F71583DAE2641D9DAA567DBD208 /* RDEPUBTextBuildPipelineInterfaces.swift */; }; + 921EA744654E430A9220D70229C58FF6 /* RDEPUBDarkImageAdjuster.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2F899D2164D781FF192129E1C659613F /* RDEPUBDarkImageAdjuster.swift */; }; 92C59F96D443525E8833676479FA60C5 /* DTVideoTextAttachment.h in Headers */ = {isa = PBXBuildFile; fileRef = 50C2868064310B16D2B5FD9901C846DC /* DTVideoTextAttachment.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 9304920D7E3F5289F47FB0F78FD33CB5 /* default.css in Resources */ = {isa = PBXBuildFile; fileRef = 47DC174612C98B2CFB4E7D158169139E /* default.css */; }; - 932899B4CB64E52B2764F095C3923F1D /* RDEPUBTextAnnotationOverlay.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9B8EBA6DFDDDD074E804C1689727074E /* RDEPUBTextAnnotationOverlay.swift */; }; - 93760CA1B3EB5AD5D859FBFB7B7F5757 /* RDEPUBTextPageRenderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B879D43D53D77B2C9BA10AE5CDC71CED /* RDEPUBTextPageRenderView.swift */; }; + 9312AA458DE13E4AAA10D6E6F063F30C /* RDReaderGestureController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE6582B1336C77B6C366DAA669570B4A /* RDReaderGestureController.swift */; }; + 945A2981673EAAB7C06985B69E0B8B5D /* NSString+DTUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = F3E93C4AC73A09DE1EAE805B0ADE3306 /* NSString+DTUtilities.m */; }; + 9478E840174081089888DA0CA4AB6F01 /* RDEPUBTextPaginationSupport.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4609798012DB9C5B85641224CD6081D /* RDEPUBTextPaginationSupport.swift */; }; + 94C4899B76DF8F45F3E49243780A055D /* RDEPUBMetadataParseCancellationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 995E88CDC3691BA531FF7951E4C809EC /* RDEPUBMetadataParseCancellationController.swift */; }; 94F5846979DBC90E2B646E975F5ECBA8 /* DTHTMLWriter.h in Headers */ = {isa = PBXBuildFile; fileRef = 14E63A0D35D4A07BD0123021EA161C99 /* DTHTMLWriter.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 952DAB01617035A1AD4F1A794BB5A850 /* RDEPUBAttachmentTooltipView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 90FB64A00D5B29274A1EDAFD38A2A8B9 /* RDEPUBAttachmentTooltipView.swift */; }; - 96004CF12BD7134A79FA77102546C620 /* Archive+ZIP64.swift in Sources */ = {isa = PBXBuildFile; fileRef = D18519BCA8FAA9B01A704A0F0B9FFC78 /* Archive+ZIP64.swift */; }; + 96FEC32CA46D2AB578F12624B72D2E9C /* DTFoundation-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = FF1C41D226C0957F715EFF3F23893386 /* DTFoundation-dummy.m */; }; + 9822E3B0CC3AF9A72FC29DEC11ECEAAF /* Archive+Reading.swift in Sources */ = {isa = PBXBuildFile; fileRef = E865600EE9117A9153716299FFA7912D /* Archive+Reading.swift */; }; + 98444DBE3A27073D4853E86F5CAD39C1 /* RDEPUBCFIRecoveryEngine.swift in Sources */ = {isa = PBXBuildFile; fileRef = 35803D654BE44326A28A0947DD178B63 /* RDEPUBCFIRecoveryEngine.swift */; }; 9854DC3F1763B6272C2EA3FC6EC40B95 /* NSAttributedStringRunDelegates.h in Headers */ = {isa = PBXBuildFile; fileRef = 30EB4CF4AD4114DE53786C318621EB19 /* NSAttributedStringRunDelegates.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9872A011777E0E50DDD196FA54ED0284 /* ImageIO.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FEB14A8F8170777DB7CCC3F27C8EA57A /* ImageIO.framework */; }; 987538B07E11741899878EA8BC947F51 /* NSCoder+DTCompatibility.h in Headers */ = {isa = PBXBuildFile; fileRef = A592A34CA2EA792DDFAFAEB516FE8A10 /* NSCoder+DTCompatibility.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 9914ED7075FAF9F04BB3C4154952C9B9 /* DTFoundation-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = FF1C41D226C0957F715EFF3F23893386 /* DTFoundation-dummy.m */; }; + 989D55577D97CF4AEDF31A7A2BB2CF78 /* Entry.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0D93C2002AAECD29B3ED5A14026D3DFE /* Entry.swift */; }; 9917E9B804CD33AF3BE2A992A3510C97 /* NSNumber+RomanNumerals.m in Sources */ = {isa = PBXBuildFile; fileRef = 6E21B10EE150F00F245D297EAB7F2BA2 /* NSNumber+RomanNumerals.m */; }; 992B7C8C824B5EA190EF1DB096064DB7 /* DTDictationPlaceholderTextAttachment.h in Headers */ = {isa = PBXBuildFile; fileRef = D0856C3894240A673B5AB7C2704E9144 /* DTDictationPlaceholderTextAttachment.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 999817CC2779F3811583CDAA23A26213 /* RDEPUBTextPositionConverter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A971ECCC1DDFDE6D5417E949E3B1FD2 /* RDEPUBTextPositionConverter.swift */; }; - 9A4C1165863623D562E7DB43A6CBC62A /* RDEPUBMetadataParseWorker.swift in Sources */ = {isa = PBXBuildFile; fileRef = EDA3C47F4EB23BAB5E96FD4DF3DFA59D /* RDEPUBMetadataParseWorker.swift */; }; - 9ABA0CB256F84F56B971D4EAA8019C9A /* RDEPUBTextAnchor.swift in Sources */ = {isa = PBXBuildFile; fileRef = BAAB1142496F4E594573D85EF76670A8 /* RDEPUBTextAnchor.swift */; }; + 9968BDA6D208A701E8014B01B9683683 /* RDReaderView+PageCurl.swift in Sources */ = {isa = PBXBuildFile; fileRef = 499C327E148794A7F09BAF1C83BE59EF /* RDReaderView+PageCurl.swift */; }; 9B199D71D2F48B2055A7FDF9BD7051CC /* NSString+CSS.m in Sources */ = {isa = PBXBuildFile; fileRef = 8718F2DB8F0DC085CB012D9996596F3F /* NSString+CSS.m */; }; + 9B1CEC717F3D521122785DB02A077BED /* wxread-replace-latin.css in Resources */ = {isa = PBXBuildFile; fileRef = 4F5A145710C3E212B771C4E38BED9926 /* wxread-replace-latin.css */; }; 9BD146F72B29C703798001F138B069C2 /* NSCoder+DTCompatibility.m in Sources */ = {isa = PBXBuildFile; fileRef = 753994141ACB981C898B36B761321C23 /* NSCoder+DTCompatibility.m */; }; - 9C31FA2081B8126C6634902705D6434A /* RDEPUBCFIMap.swift in Sources */ = {isa = PBXBuildFile; fileRef = 427D3D938726077995A928BFEDDC6632 /* RDEPUBCFIMap.swift */; }; - 9D41E4DA56705B0149988B175623233D /* WeReadApi.js in Resources */ = {isa = PBXBuildFile; fileRef = F46977FAF9F0EAEDF840BDA49288CC99 /* WeReadApi.js */; }; + 9D4364E686CE29303EEA24086C549C2A /* RDEPUBNoteModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8D0BFFD14B93A2F313B937F14652738C /* RDEPUBNoteModels.swift */; }; 9DE04C83A68C7512C0A860FFF5CEC113 /* DTCoreText.h in Headers */ = {isa = PBXBuildFile; fileRef = 8CF7CEB31BED0554F3EF3D3442A89B47 /* DTCoreText.h */; settings = {ATTRIBUTES = (Public, ); }; }; 9E4AB71DE8B3E7218B53B2C8EF6B843A /* DTAttributedTextContentView.m in Sources */ = {isa = PBXBuildFile; fileRef = 7203B4D9D997037E0F9D154A3B049738 /* DTAttributedTextContentView.m */; }; - 9E85C29B5E66B3CBDA79C8C04770B169 /* UIColor+RDEPUB.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE51FACCCAC4F6FE003BD3914F7B9071 /* UIColor+RDEPUB.swift */; }; - 9EA64874ED208ECC988584D8D6346033 /* NSFileWrapper+DTCopying.h in Headers */ = {isa = PBXBuildFile; fileRef = B43D7603C0D66635268842EC0A2655AC /* NSFileWrapper+DTCopying.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 9F03124BA4BCE5C24E3E2B879205DF47 /* RDPlainTextBookBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2739EAD69AB2F5F6FA80E254D294440D /* RDPlainTextBookBuilder.swift */; }; - A12DBBB039A09A7F1BB62E384E41E190 /* RDEPUBSafeArea.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1DD088C35A5559FEE1027DAE37417E3D /* RDEPUBSafeArea.swift */; }; + 9F09BFBCF74E17B9BFD3FBB37BFAC7A6 /* RDEPUBParser+Package.swift in Sources */ = {isa = PBXBuildFile; fileRef = F94780553A2ED7BE5E972D634F7F52DE /* RDEPUBParser+Package.swift */; }; + A0313009309C859841F55118BC23E3EA /* NSFileWrapper+DTCopying.m in Sources */ = {isa = PBXBuildFile; fileRef = D9A812C3E577A3ADC36BAE3FF7AA4D9C /* NSFileWrapper+DTCopying.m */; }; A132A0C9EB13B65FB886B11AA2E6304C /* NSDictionary+DTCoreText.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C891B983F0CC956CAE3978A15875819 /* NSDictionary+DTCoreText.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A26C8915823F92017865B00FC0F16B22 /* RDEPUBWebDecorationOverlayView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CCC938C9AB37D0B094B0CF78C098CBE6 /* RDEPUBWebDecorationOverlayView.swift */; }; + A17B2DB5E14E8116012BF21BB7721638 /* RDEPUBSearchEngine.swift in Sources */ = {isa = PBXBuildFile; fileRef = 78B43BA14CD70F5448082DE1EE73B034 /* RDEPUBSearchEngine.swift */; }; A2CA9C27EB2B77637A12723F8CFE7AAB /* NSString+HTML.m in Sources */ = {isa = PBXBuildFile; fileRef = FA107BE47514D01B94B7A2670A9F83E5 /* NSString+HTML.m */; }; - A305D671B126FEC47981A8F62D0DAE9E /* RDEPUBReaderViewportMonitor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 455F46F5F9EA1B2EAF47E54361B9E5F1 /* RDEPUBReaderViewportMonitor.swift */; }; + A2FA7374B3F6D6E723AC19A380DF704C /* DTHTMLParser.m in Sources */ = {isa = PBXBuildFile; fileRef = 71BBE6384315D7F00F5ECFFF67A85AF9 /* DTHTMLParser.m */; }; A30D5C1E413A3D319A83D3410A8A549F /* DTCoreTextParagraphStyle.m in Sources */ = {isa = PBXBuildFile; fileRef = B7C4233DF4FA80BF4A9E6FA5082D49E5 /* DTCoreTextParagraphStyle.m */; }; - A43DAC6C9656DF7A74DCC11AB44433B5 /* NSMutableArray+DTMoving.m in Sources */ = {isa = PBXBuildFile; fileRef = ADD5B2F66FCCFB58393314E7B9FE4384 /* NSMutableArray+DTMoving.m */; }; - A633C89374604FFFE5119DA09B8C5088 /* NSURL+DTComparing.m in Sources */ = {isa = PBXBuildFile; fileRef = 467CC59CEC3B3BC7ACDCA776FDCBDC1D /* NSURL+DTComparing.m */; }; + A4123ABB5380886FB6EEB339384892F5 /* UIScreen+DTFoundation.m in Sources */ = {isa = PBXBuildFile; fileRef = AF436E76C893E223A4F0BE86C1276054 /* UIScreen+DTFoundation.m */; }; + A4B441D1E79D04445DAFA6865FFE41D9 /* RDReaderView+CollectionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D24E48ADEAADE831B2F5FAFBF67CD53D /* RDReaderView+CollectionView.swift */; }; + A4E1287AFDA66235AD864D556D56D867 /* RDEPUBRuntimePageCount.swift in Sources */ = {isa = PBXBuildFile; fileRef = C52AC0144029821AA538D6165315C585 /* RDEPUBRuntimePageCount.swift */; }; + A6C87CC6692C9C833DA11D0A3D9F6477 /* RDEPUBNotePopupCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4FAD41FF83513826720C6497B7A818B6 /* RDEPUBNotePopupCoordinator.swift */; }; A72E9F983E5BBFA7485EFB482B80E89E /* DTWeakSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = E687628EF2FE92D093E3005D21B578E5 /* DTWeakSupport.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A7CAF507A75914C9CB2904256449478E /* RDEPUBChapterTailNormalizer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 68A8597AE94ED09E9828E2EEA0D8FFFA /* RDEPUBChapterTailNormalizer.swift */; }; - A7CE2EB98E19E07AB9B917415ACDF380 /* RDEPUBTextSelectionController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A6550AF614406015AE2CCD348C28A3BE /* RDEPUBTextSelectionController.swift */; }; A7D665BBDADBE3D64023FF52E218FCFA /* DTCoreTextConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = E89F199ECDE796B15CAF8E0C1775FAA6 /* DTCoreTextConstants.m */; }; + A948E3CF55F94BD4F4B4D1D27463F350 /* RDEPUBSearchModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07E07EEE45C5439A207C5647210A4A7F /* RDEPUBSearchModels.swift */; }; + A97EAA78ADAB17BFF4DB70AD2CE36A2A /* RDEPUBJavaScriptBridge.swift in Sources */ = {isa = PBXBuildFile; fileRef = F69C9651823EAB579B078EC3B7435D16 /* RDEPUBJavaScriptBridge.swift */; }; AA3722CC8B4992EDA8A9F5E9116835B7 /* DTCoreText-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = B6CA8CC4525EF64AA5CEE4A722737F1C /* DTCoreText-dummy.m */; }; - ABB194A853B15FBB547244E93F3AFA87 /* RDEPUBFontNormalizer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 545DD46BEAB1D1F7E0530E787095FCB2 /* RDEPUBFontNormalizer.swift */; }; - ABB6259EA3066E7A829C17510410F5A1 /* RDEPUBWebView+Reflowable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32AD569BCA384A60FC2E1E08CE3529AD /* RDEPUBWebView+Reflowable.swift */; }; + AA5731890291922E24FB7FFCC22F41A9 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B50104DE2E35D820ECA22CDB3E6F96EA /* Foundation.framework */; }; + AA7629F822C3DCAECBB5DCD1BC495E84 /* cssInjector.js in Resources */ = {isa = PBXBuildFile; fileRef = 2EBD41467F344F6091AD0C1A3981EDC3 /* cssInjector.js */; }; + AA7761395401FB118FB850405492811D /* RDReaderPageChildViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33452E6D078F6CC1EF8A17DF42966CAA /* RDReaderPageChildViewController.swift */; }; + AC13F15F74244055FDC349A8D8BCD78F /* RDEPUBTextPageBoundaryValidator.swift in Sources */ = {isa = PBXBuildFile; fileRef = F77E0B31CE94ED97B9E5C254BF0DB072 /* RDEPUBTextPageBoundaryValidator.swift */; }; AC7000465258822B466855B12F1F97A3 /* DTCoreTextGlyphRun.h in Headers */ = {isa = PBXBuildFile; fileRef = 771E0D5CBCBC013BF5780FEE5BBA81FF /* DTCoreTextGlyphRun.h */; settings = {ATTRIBUTES = (Public, ); }; }; - ACA98E6A9A6E8D58A22021AB40351E66 /* RDEPUBCSSCompatibilityLayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30EE98BBC2688DFF0B50F9C417007886 /* RDEPUBCSSCompatibilityLayer.swift */; }; - AEA089F602E66B4E0CB655D1BF625880 /* DTActivityTitleView.m in Sources */ = {isa = PBXBuildFile; fileRef = 662D30C1E74D1D5122921475F4024F73 /* DTActivityTitleView.m */; }; - AF5E584EB1F14EC57A5DC51D5CD93FF2 /* NSString+DTURLEncoding.m in Sources */ = {isa = PBXBuildFile; fileRef = 131C1D8C96DF2D44A2D4F50C5AEFFF11 /* NSString+DTURLEncoding.m */; }; - AF6CFED7C7CF1B8D9384BCE97D1DF7D9 /* RDEPUBTextSearchEngine.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06733E30802CA08ACF312C763BD37795 /* RDEPUBTextSearchEngine.swift */; }; + AC7BC683CD9A6CE43F2473EAA729C0FA /* RDEPUBCFIError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9C1CDD44F96B466A619015AA0A7B2D17 /* RDEPUBCFIError.swift */; }; + AD63555565A9FC36E9AD69AE8E7D1147 /* RDEPUBDTCoreTextRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 505D658FEB22042EEDC51D402700F8C9 /* RDEPUBDTCoreTextRenderer.swift */; }; + ADD3B6D991C8DB8AB9DCA9568787D344 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0834E84632886CDD9911CAB76183F1CE /* QuartzCore.framework */; }; + AE1553D719D16EEC2847D111B5903892 /* RDEPUBAttachmentTooltipView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC75B34F4CE50854BC099CE73D139FCC /* RDEPUBAttachmentTooltipView.swift */; }; + AEE390923BE11EF94ABB8172930A261B /* RDEPUBCFIRange.swift in Sources */ = {isa = PBXBuildFile; fileRef = 842B11843F82FBEA1D725543ACAB02CE /* RDEPUBCFIRange.swift */; }; AF7A1DC953992A149CB0815C90769529 /* DTIframeTextAttachment.h in Headers */ = {isa = PBXBuildFile; fileRef = D4C731AA2088D7E873D8E3D21B95D215 /* DTIframeTextAttachment.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AFE5927149FB4AFE9FB27235C2FCB8A2 /* RDEPUBNoteResolver.swift in Sources */ = {isa = PBXBuildFile; fileRef = A184BC6F2CCE83350332C9F00071A2B9 /* RDEPUBNoteResolver.swift */; }; - B0984EA45A82B8CF021C4BA7CE6B2473 /* DTCoreGraphicsUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 0372FD1824BC43F7BD6B337430201420 /* DTCoreGraphicsUtils.m */; }; - B0AA422A606376E1DE651B23D3849CAD /* Data+Compression.swift in Sources */ = {isa = PBXBuildFile; fileRef = 22B69C9433F2FBE5CE8409BD4266DFE8 /* Data+Compression.swift */; }; - B178C87ED370EA79E30224072DDD026B /* RDEPUBReaderTableOfContentsItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3C4658670F6EBD43067CF1D859518D23 /* RDEPUBReaderTableOfContentsItem.swift */; }; - B20B3B8D2C3958BE32BABBBA48E0ECF4 /* RDEPUBNoteDetector.swift in Sources */ = {isa = PBXBuildFile; fileRef = CC0E8A0B81E73D17CDACE523F47D124B /* RDEPUBNoteDetector.swift */; }; - B21AC2FBB25F091A5AE9A0602A9F4937 /* NSURL+DTAppLinks.m in Sources */ = {isa = PBXBuildFile; fileRef = 3453CFB9BDBF6F9D0937EDF5FB2BD07B /* NSURL+DTAppLinks.m */; }; + AF7EF16703AD0BAF5F926A254B0C9E9C /* Archive+WritingDeprecated.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2373DCA0FC45287BFC063BEA661B8367 /* Archive+WritingDeprecated.swift */; }; + AFCEC5571D0C75E38AD2D3AB0B027CA3 /* Entry+ZIP64.swift in Sources */ = {isa = PBXBuildFile; fileRef = 288589D0B52F73505B43C743D9837578 /* Entry+ZIP64.swift */; }; + B11B4F2E3F64763587B6C27C0F09E0E8 /* RDEPUBStyleSheetBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 72F99D96321DF0F2BC595BC7B6A66EA2 /* RDEPUBStyleSheetBuilder.swift */; }; B24FAD34A7915FC4B90FE9038E814FF2 /* DTLazyImageView.m in Sources */ = {isa = PBXBuildFile; fileRef = CA5630DC0E663F38A9EC713323697EE1 /* DTLazyImageView.m */; }; - B35EC704CCE46CFDFE734E94643B89CA /* RDReaderView-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = A61F5753AE7B5122FE65CF07CF1AD5FD /* RDReaderView-dummy.m */; }; - B3AC4D5487C5FEFFBEF018ABF5F4800A /* RDEPUBTextPaginationInterfaces.swift in Sources */ = {isa = PBXBuildFile; fileRef = D4721E12B4121C46B8368D085D91EC2B /* RDEPUBTextPaginationInterfaces.swift */; }; - B3D89EAA9B5A3729A4BD440B66A36F4B /* RDReaderGestureController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 10617286346E2E6D7BB30203A65302CA /* RDReaderGestureController.swift */; }; - B509E539D0E9DD3A7E1CBF4E87518C2A /* RDEPUBRenderRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 25C6A0883824F05CF90F21478E019975 /* RDEPUBRenderRequest.swift */; }; - B553EE0E95DCEDE9EE2738F649F197DB /* RDEPUBTextLayoutFrame.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07C08997AE3D75194E400010A0AE4820 /* RDEPUBTextLayoutFrame.swift */; }; - B59EFFCF83F578900B1B193189689FD0 /* RDReaderView-RDReaderViewAssets in Resources */ = {isa = PBXBuildFile; fileRef = 83410CC9CF2ABE63B90A92F2F988BF65 /* RDReaderView-RDReaderViewAssets */; }; - B5C61DFC1CFBA8ECA4AF7779F5089816 /* rangy-core.js in Resources */ = {isa = PBXBuildFile; fileRef = 8F9C05A5DE7C804D6531F4BBF31A3045 /* rangy-core.js */; }; - B5D0238A617645F81C5604A014065B3F /* RDEPUBReaderSearchBarView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7DFE7162E90DAF71A557E4822C252E4F /* RDEPUBReaderSearchBarView.swift */; }; - B61F165888A356AF744580232D727A20 /* RDEPUBPaginator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8514F67C3335EEA160B6A502DC380C6B /* RDEPUBPaginator.swift */; }; - B662098EC7A098D0BF449F33D06B22F1 /* RDEPUBTextIndexTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 89755690B804A64EE69FE2D7321CA9B6 /* RDEPUBTextIndexTable.swift */; }; + B3D6FFE321D38B8F43578FDBAF537B71 /* RDEPUBTextBuildPipelineInterfaces.swift in Sources */ = {isa = PBXBuildFile; fileRef = FECC02C082DBCB6126A7ECBA72C258B3 /* RDEPUBTextBuildPipelineInterfaces.swift */; }; + B40171D88891B3A07003A19EB6A4BFC0 /* DTHTMLParser.h in Headers */ = {isa = PBXBuildFile; fileRef = CB2BD1F8CFECB82D427DF046439E68D6 /* DTHTMLParser.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B600901A9F54CF17B27D65FAF248F495 /* RDEPUBAttachmentNormalizer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 63A75BF0478FAC7398F5E66A509F639D /* RDEPUBAttachmentNormalizer.swift */; }; + B604DFE0CDD1FAA2DFED73DD0EE1A31A /* RDEPUBWebView+Reflowable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4AAC2FDC24D8604A39BD25111689D06A /* RDEPUBWebView+Reflowable.swift */; }; B7BDD79FC06A1E4E0E17592860844108 /* NSAttributedString+DTCoreText.h in Headers */ = {isa = PBXBuildFile; fileRef = 3985FED7BD8EC49191663BEF73FB2C79 /* NSAttributedString+DTCoreText.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B7D3EAF9CD1638EE59CF9127E46D5811 /* RDEPUBNoteResolver.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11D2090101EA891F21834863EE859AE8 /* RDEPUBNoteResolver.swift */; }; + B7E5AB4E36C8E357A4DBA8F6451CE8A0 /* RDEPUBChapterDataCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD5DB51D2F628791D4E0EB41C4B81AF1 /* RDEPUBChapterDataCache.swift */; }; B8332F36582F7A001FE85A8D54B27C9E /* DTCoreTextParagraphStyle.h in Headers */ = {isa = PBXBuildFile; fileRef = BD65B936E2A6FEB74718EA86D9AC1899 /* DTCoreTextParagraphStyle.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B8522579F034294C6982DCB37DE15086 /* NSArray+DTError.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E5297E7F5769C61C1838962BA76D4F5 /* NSArray+DTError.m */; }; B86493B996A888D1DA7814ECB6028E22 /* DTHorizontalRuleHTMLElement.m in Sources */ = {isa = PBXBuildFile; fileRef = DD7A2DE5BDF72ABC066484CE554BDEF0 /* DTHorizontalRuleHTMLElement.m */; }; - B88D8C43A79A645555A6683A10D01258 /* RDEPUBReaderAnnotationCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8E0EF27F41F1DF49C126E34B404497CF /* RDEPUBReaderAnnotationCoordinator.swift */; }; + B91D4B37570E0FDFB186D4622D05D2A4 /* RDReaderView-RDReaderViewAssets in Resources */ = {isa = PBXBuildFile; fileRef = 83410CC9CF2ABE63B90A92F2F988BF65 /* RDReaderView-RDReaderViewAssets */; }; B94CD41727DFCA8791EED8FB2CA397DD /* DTCompatibility.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C3D91FFA65414A2787FEB95576E0097 /* DTCompatibility.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B97D761BA5C5055277DC351A493C5568 /* RDEPUBCFI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C0AFCECD74F73D7D40C6F3053AF6FEE /* RDEPUBCFI.swift */; }; - B9E5CDDBF46CDA23D5D282EFDB6456BA /* RDEPUBResourceResolver.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29D1AFEDD39DE3A55D023DCF1DD8E100 /* RDEPUBResourceResolver.swift */; }; - BA83048DCDDD496C26B492BD891FC411 /* String+RDEPUB.swift in Sources */ = {isa = PBXBuildFile; fileRef = C60EBAD7361BD011961D6A1FB94B914C /* String+RDEPUB.swift */; }; - BB8A21A84B763070E340A3E4687D3110 /* RDEPUBCoreTextPageFrameFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81211446372A6A55789AA7E7152E7084 /* RDEPUBCoreTextPageFrameFactory.swift */; }; - BB8ACA21944B2A96E8DF8B0C7E6D30F9 /* ZIPFoundation-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = B41F7D27C2336F89BB0185ACB0B19EA9 /* ZIPFoundation-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BBB18335BC72FBF4584F8B5F4132CCBE /* NSString+DTURLEncoding.h in Headers */ = {isa = PBXBuildFile; fileRef = CEEC8715398E89B42F9B04E290E8E4FE /* NSString+DTURLEncoding.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BC519A74D986F53A3800079B6ACAB7A3 /* RDEPUBCFIGenerator.swift in Sources */ = {isa = PBXBuildFile; fileRef = E9F5010D098DC3538CB8BAF64A54BF7B /* RDEPUBCFIGenerator.swift */; }; + B9A197E275617D9B2A65077B69E4A2F4 /* RDEPUBReaderToolView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C525E69EA51BC555374CC559F2996233 /* RDEPUBReaderToolView.swift */; }; + BA464E5503BF2C730FADD4DE36DE6868 /* Archive+Deprecated.swift in Sources */ = {isa = PBXBuildFile; fileRef = F3C9CA544EBF55130625F6C3AD2ABFB4 /* Archive+Deprecated.swift */; }; + BB1A3A67759025DE4B7F03BC318AF516 /* RDEPUBParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2AACA59CA4CBD2AFAACC3D162C2C75B5 /* RDEPUBParser.swift */; }; + BBE45BB7EAE6DC693F8B2D47AD8727E7 /* RDEPUBTextPerformanceSampler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8300EA716892548FEA44EC27801F5987 /* RDEPUBTextPerformanceSampler.swift */; }; BE12CD112F82AD9050D7FB29395F27F9 /* DTVideoTextAttachment.m in Sources */ = {isa = PBXBuildFile; fileRef = B83D7A73677A2C3141EDEF56B9CE6584 /* DTVideoTextAttachment.m */; }; - BE6A7554B48972B5D4EF22028274696E /* RDEPUBReadingLocationModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9FA1C7B2B5D3FE43AB0598F027C50377 /* RDEPUBReadingLocationModels.swift */; }; - BF9D1A78B1C4C7613937CC99EB1702D4 /* RDEPUBNoteModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8D474A46702BFAA8E3AAFAC5EE0E3C20 /* RDEPUBNoteModels.swift */; }; - C018E6B3B58F3C3537511ED0EE553A94 /* RDEPUBReaderState.swift in Sources */ = {isa = PBXBuildFile; fileRef = CF369892013F3178789ADFC74384ADC2 /* RDEPUBReaderState.swift */; }; - C065855BFB7C44A88BC0E41EDB67F138 /* DTCoreGraphicsUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 2C1A7359A45BB880877A672C57F522FE /* DTCoreGraphicsUtils.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C1C04AC61695CB3E392C98A66F8C78F0 /* Archive+ReadingDeprecated.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5193541848D2D1BF115A45D8A730611C /* Archive+ReadingDeprecated.swift */; }; - C31BEDEE98899BAF229DE4FE3F3FE1A5 /* RDEPUBReaderController.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEB68ED963D81A187618710413C3B523 /* RDEPUBReaderController.swift */; }; - C5BE7B683B2F31C0DFD21809C17FEAD2 /* UIColor+RDEPUBHex.swift in Sources */ = {isa = PBXBuildFile; fileRef = 933E1AC7CA1ADECA318762103FAC0AF3 /* UIColor+RDEPUBHex.swift */; }; + C14C1329982852C841EBF7A6A8F47FD6 /* Data+Serialization.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9C3615C94C147AEA92F022E119810E9F /* Data+Serialization.swift */; }; + C1678A88827D582EAE2921342ACAD5F4 /* DTAnimatedGIF.m in Sources */ = {isa = PBXBuildFile; fileRef = A3DE08AC23FE36A6C3F33A04700FDE57 /* DTAnimatedGIF.m */; }; + C224A4A04B5C6638D21FD2CE77B69443 /* Data+CompressionDeprecated.swift in Sources */ = {isa = PBXBuildFile; fileRef = E6B46EF6F055A721AF370D705D026E9E /* Data+CompressionDeprecated.swift */; }; + C2E5F9A4B9F366EDA48329415CF0057A /* DTFolderMonitor.m in Sources */ = {isa = PBXBuildFile; fileRef = BEA46E51E3616ECEAF0ACCEA9B8C67EF /* DTFolderMonitor.m */; }; + C3463BB24D53EA7809BB5E1C3276B94B /* RDEPUBCFITextAssertion.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE1B490DE56DE55724779E3E8BF6D14A /* RDEPUBCFITextAssertion.swift */; }; + C4C2F1441BF40302D432BC6420C0F50C /* NSData+DTCrypto.m in Sources */ = {isa = PBXBuildFile; fileRef = F63EBF2BF3000B3391F6E693581EA129 /* NSData+DTCrypto.m */; }; + C578EC0E752DEA0929FDC0A0CAAE4CA3 /* NSString+DTPaths.m in Sources */ = {isa = PBXBuildFile; fileRef = D30DBDF1EDB20CF83690AC6619AA0C48 /* NSString+DTPaths.m */; }; C5EE8E7373FBD24E66C678356393D871 /* DTCoreTextFontCollection.m in Sources */ = {isa = PBXBuildFile; fileRef = 722AF38F5106ADDE6F98D282F886A769 /* DTCoreTextFontCollection.m */; }; - C60D3562E8D9105111D9441E55F500BB /* RDEPUBPageMapReconciliationCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = E2A2130B4AB4BB4B5E30E4442A0FD644 /* RDEPUBPageMapReconciliationCoordinator.swift */; }; + C6B4C453194DE8011ADA4C0FA2092028 /* DTBase64Coding.h in Headers */ = {isa = PBXBuildFile; fileRef = 519087D9CD0F5E440E6D2C3B1AA1DFA2 /* DTBase64Coding.h */; settings = {ATTRIBUTES = (Public, ); }; }; C6B65C0EA759DF426FBBBB113BA3C3E8 /* DTBreakHTMLElement.m in Sources */ = {isa = PBXBuildFile; fileRef = 7D8AE4BEBD1998839BA83AD05CA6CAC5 /* DTBreakHTMLElement.m */; }; + C704ACCB4F169F948102B6D90B81F835 /* RDEPUBTextContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 27FE2A0ABB2E40A2D8D3B4BDECE106A7 /* RDEPUBTextContentView.swift */; }; C72CE4B974DFAE2C3037D425EB559314 /* DTCoreTextLayoutFrame.h in Headers */ = {isa = PBXBuildFile; fileRef = C46FCF109DBCB37595D2A3366CF1D765 /* DTCoreTextLayoutFrame.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C760D0A16A9A1F449A81EC7B91766E3A /* RDEPUBReaderSettingsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6777CA743F90F1D44EE010F6ED6A1F7F /* RDEPUBReaderSettingsViewController.swift */; }; - C8E9353276833F3362D26F17A2FF2939 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B50104DE2E35D820ECA22CDB3E6F96EA /* Foundation.framework */; }; C8F753B56A6C4D2A938B6EA68CF522F8 /* DTColorFunctions.h in Headers */ = {isa = PBXBuildFile; fileRef = 720396ED306E768BAD28007D5E96B757 /* DTColorFunctions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C8FADC9D72A57A061C6666713FF02524 /* RDEPUBReaderController+RenderSupport.swift in Sources */ = {isa = PBXBuildFile; fileRef = F5C8F91E6B08B08138B628331DAAEC16 /* RDEPUBReaderController+RenderSupport.swift */; }; + C90B928D22ABD4A4019ADF634B3C9252 /* RDEPUBBackgroundPriorityPolicy.swift in Sources */ = {isa = PBXBuildFile; fileRef = F67C99E329F6EE4951953549B099CE46 /* RDEPUBBackgroundPriorityPolicy.swift */; }; + C91D5DECB736752FDEE511F0B3B4AED8 /* Archive+ZIP64.swift in Sources */ = {isa = PBXBuildFile; fileRef = D18519BCA8FAA9B01A704A0F0B9FFC78 /* Archive+ZIP64.swift */; }; C9DD05EF2D27FFEBFA7BF6F437168501 /* DTCoreTextConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = A61C8F1BDD76EA59082F65269083BD08 /* DTCoreTextConstants.h */; settings = {ATTRIBUTES = (Public, ); }; }; - CABB55F416696E222EDD9355BE162423 /* DTCompatibility.h in Headers */ = {isa = PBXBuildFile; fileRef = 8F653EFBBEDAAC96A34BC93B4211E792 /* DTCompatibility.h */; settings = {ATTRIBUTES = (Public, ); }; }; - CAC5255B7B613B25FA9731E5C6EDD5CB /* RDEPUBPageBreakPolicy.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE10A5C6934704218EB16F8966AA0814 /* RDEPUBPageBreakPolicy.swift */; }; - CAEFA4FFA33FD3C1DF8F288814B55054 /* RDEPUBReaderController+ContentDelegates.swift in Sources */ = {isa = PBXBuildFile; fileRef = 44369E6800A89D0C5818CA884729D20F /* RDEPUBReaderController+ContentDelegates.swift */; }; - CB1E78A4E24418D8E1486735D8C13A48 /* RDEPUBAssetRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = A472A71A962C2E34AB358EC26AEA60B4 /* RDEPUBAssetRepository.swift */; }; - CC11A163D3F74290FE540D1BBAA9C518 /* RDEPUBTextBookCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = FF164505A477C6ED40FE8EF0CB2E6693 /* RDEPUBTextBookCache.swift */; }; + CA7FDFDF278504C0C1D5EEB88B044DCB /* RDEPUBChapterWarmupOrchestrator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 64254678E1440D40D4BC39AE8B62BB27 /* RDEPUBChapterWarmupOrchestrator.swift */; }; + CAB581FD7C03A91D7BCF31F9B7DFD2C1 /* RDEPUBFontNormalizer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 63D23A912F5F91D0D3D83DF9E05515D0 /* RDEPUBFontNormalizer.swift */; }; + CAD914075CB713FC15413D6FEF558094 /* Entry+Serialization.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76C1831768CE55090EADD902B29B6CD1 /* Entry+Serialization.swift */; }; + CC1A14092E38C024B59039247A9A7F1E /* wxread-replace.css in Resources */ = {isa = PBXBuildFile; fileRef = E15D7179C6CF82530CF5E7264BBA1679 /* wxread-replace.css */; }; CC8B8F3D758E98B51F69EDFAA69663A4 /* NSString+HTML.h in Headers */ = {isa = PBXBuildFile; fileRef = DC7D3AB85C954DA41E1500936C166C0E /* NSString+HTML.h */; settings = {ATTRIBUTES = (Public, ); }; }; - CDE3205D4F1E8D99CE2BE54F2505133F /* RDEPUBTextContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9435D40191E13E2949BA08196EFE296F /* RDEPUBTextContentView.swift */; }; - CE5D85573015B5EF9AA8A9F512239835 /* NSURL+DTUnshorten.h in Headers */ = {isa = PBXBuildFile; fileRef = ACA6D26B26D2653D6E1C871A482BD6DF /* NSURL+DTUnshorten.h */; settings = {ATTRIBUTES = (Public, ); }; }; - CE60D90670F8D3049025C34F2CA4A172 /* RDEPUBReaderTheme.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0DC061242C98566FE767A2179BE8D9A9 /* RDEPUBReaderTheme.swift */; }; - CE737F28C68393FDC49DD943ADB95015 /* RDEPUBSelectionLoupeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FD431E9FF16247D6AFF1148D33F06DEA /* RDEPUBSelectionLoupeView.swift */; }; + CD7F05300518F738E9EEA966B76252E6 /* DTExtendedFileAttributes.h in Headers */ = {isa = PBXBuildFile; fileRef = 2F75437CE9F9324D315E417014797C1D /* DTExtendedFileAttributes.h */; settings = {ATTRIBUTES = (Public, ); }; }; + CD8D29DA6C83EF687425C3DA6947612F /* RDEPUBChapterPageCounter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 328AA616EE25AB53BFB60EFE1C7AAFCE /* RDEPUBChapterPageCounter.swift */; }; + CE1461B66FE25A3E3194B13B80B938AB /* Archive+Writing.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0218A7B243387C79E099CA947CF243D /* Archive+Writing.swift */; }; + CE8A5F13186A9A7C5F40A75C17466DBF /* RDEPUBReaderEnvironment.swift in Sources */ = {isa = PBXBuildFile; fileRef = 12422B421A127464A62DF332C3EAF31E /* RDEPUBReaderEnvironment.swift */; }; CFC49467FE75BFABC22A1CE2FFA26570 /* DTImage+HTML.m in Sources */ = {isa = PBXBuildFile; fileRef = CF1CED3ED65443999913BC0D96ACA151 /* DTImage+HTML.m */; }; - D040A70EB575CF6ECE381FD408BD42B2 /* RDEPUBPageCountCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4912F524E40CC6107099AB780A0E0BF /* RDEPUBPageCountCache.swift */; }; D063317214AFF5143D9C958E5FAFBB38 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B50104DE2E35D820ECA22CDB3E6F96EA /* Foundation.framework */; }; - D118781E14C557A8428DB61DFECB6CC2 /* RDEPUBCFIRange.swift in Sources */ = {isa = PBXBuildFile; fileRef = EF4AF0ABB6117B18C8AE08E883BEA7C6 /* RDEPUBCFIRange.swift */; }; - D1744173283F238280FBFDFA6FAC791A /* Archive+Progress.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE83356F8FBC1801D29CA93C1A190D81 /* Archive+Progress.swift */; }; + D07D22E99828FC135DA82CD9D5D473BC /* NSString+DTPaths.h in Headers */ = {isa = PBXBuildFile; fileRef = B76B1E836C34CB755AEE1FBF7DC26BDD /* NSString+DTPaths.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D14D8383FFEFB43EA9BA5BCECAD38DFB /* DTSmartPagingScrollView.h in Headers */ = {isa = PBXBuildFile; fileRef = 21CCCCAAF832BE9C859BEDDC79B4E9E2 /* DTSmartPagingScrollView.h */; settings = {ATTRIBUTES = (Public, ); }; }; D1A93B2D7F1B312755C48790338D7712 /* DTIframeTextAttachment.m in Sources */ = {isa = PBXBuildFile; fileRef = BA8A527A4CCB2AF1C1E26744B301F6B8 /* DTIframeTextAttachment.m */; }; - D1E238CAEA8D1BE33C0D7EC543A66665 /* DTHTMLParser.h in Headers */ = {isa = PBXBuildFile; fileRef = CB2BD1F8CFECB82D427DF046439E68D6 /* DTHTMLParser.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D20113877C525B2FA078EEDB723906D9 /* RDEPUBChapterLocation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C5CA885255B08C8AD10778C62071BCD /* RDEPUBChapterLocation.swift */; }; - D2232DDB9C06A5F370FBE1CF4F022992 /* NSArray+DTError.h in Headers */ = {isa = PBXBuildFile; fileRef = C7E09A6C247D465CA0EF71B939B2A040 /* NSArray+DTError.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D299C2B1A237A61C7DDE0C52371D0AAB /* RDReaderContentCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76919E99E9F16C30FA06F643643AA997 /* RDReaderContentCell.swift */; }; - D2F1AEC45494E9E795B6D06C06FC0E61 /* Date+ZIP.swift in Sources */ = {isa = PBXBuildFile; fileRef = 18D23D8D10719754D93032F66EB98536 /* Date+ZIP.swift */; }; - D402B6E51343FEA249C715ED3FC6689A /* RDEPUBReaderChapterListController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 570429F8DD1951A554862120993C46B1 /* RDEPUBReaderChapterListController.swift */; }; - D43F2636F9AEA19B2933A6C4B71E7D44 /* RDEPUBReaderController+ExternalLinks.swift in Sources */ = {isa = PBXBuildFile; fileRef = A16FEBBEDD32F8EAE312AADBE815BF49 /* RDEPUBReaderController+ExternalLinks.swift */; }; - D512CC6A4C2AF2DE2B950125BD900706 /* Entry.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0D93C2002AAECD29B3ED5A14026D3DFE /* Entry.swift */; }; + D2225CA8427BEB882D82DE38019DD126 /* DTFoundationConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 0F80AC45FB1DBF50E0E3AA4F26BFA676 /* DTFoundationConstants.m */; }; + D2BD52C739EE9121C2DBB30B9AA20E04 /* RDEPUBCFIPath.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDCA21771B2D145D7DCFEEDE00FEDADC /* RDEPUBCFIPath.swift */; }; + D40CA87330F4D56B6E6ADBE2FD59C2FC /* ZIPFoundation-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = B41F7D27C2336F89BB0185ACB0B19EA9 /* ZIPFoundation-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D46DA22E948819A50DAB9055B3B453FF /* RDEPUBRenderDiagnosticsCollector.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2B7FCEEAD833F7C1706659E688B09BEA /* RDEPUBRenderDiagnosticsCollector.swift */; }; + D4D42191C9EC85914D0E6BD19884009E /* RDEPUBChapterLoader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D5537F73FD04F43BE1E354A25710C9E /* RDEPUBChapterLoader.swift */; }; + D4E5594D3EC3FFEFD78C4867AD0671CD /* RDReaderView-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 1C3DEA097D20AC964CFB673C39B4A8AF /* RDReaderView-dummy.m */; }; D526E03C098DA6CF8F01C1BC126C9BBA /* DTCoreText-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 13F8FC8B51AD434F5D4B0CF5150D7563 /* DTCoreText-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D5C798C8EC872BADE62917619D1DF400 /* RDEPUBRuntimeChapter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 579B1DD9DCEE9A1C8B88EB7D4FC7328B /* RDEPUBRuntimeChapter.swift */; }; - D6139C08D650C40629D29CE3B04263F2 /* RDEPUBBookPageMap.swift in Sources */ = {isa = PBXBuildFile; fileRef = 83E9A6D890549C856C0277BE3A9B01A4 /* RDEPUBBookPageMap.swift */; }; - D7E9F39F5A7AF9C7170ACBC890EE55DB /* RDEPUBCFIResolver.swift in Sources */ = {isa = PBXBuildFile; fileRef = 418CF402E2B3A6359A720876AF83E1F3 /* RDEPUBCFIResolver.swift */; }; + D68C9E460307CB1FDFEF1622B2905ED4 /* RDEPUBReaderAnnotationCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 78D2759A8A01919CE516A30C1A04B967 /* RDEPUBReaderAnnotationCoordinator.swift */; }; + D6F1A867D418237980B1B066F777AE36 /* RDEPUBTextSearchEngine.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24130F5639CFFFA28D8BE6C2BD7A45FE /* RDEPUBTextSearchEngine.swift */; }; + D7473BF91981294A067CB035F7695D99 /* RDEPUBParser+ReadingProfile.swift in Sources */ = {isa = PBXBuildFile; fileRef = 31B49361D4C4F119B135F85B7A8219DB /* RDEPUBParser+ReadingProfile.swift */; }; + D74A865537CEEFB45C5951EBA2A43B90 /* Archive+BackingConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 765A94769106D14615FFB30EE1BD5E65 /* Archive+BackingConfiguration.swift */; }; + D7E6418C29E54343D2587D20DAD787EC /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 006D002D86B43AA52E0AFD2E18459107 /* PrivacyInfo.xcprivacy */; }; D82DDA4C1E5C4D5378A9E5EA3F8E9DFE /* DTBreakHTMLElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 14283024FA4A0231B32CA22AA907FEFA /* DTBreakHTMLElement.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DA090B9ED29C67FCC620AAE26A6DFC2A /* RDEPUBWebView+JavaScriptBridge.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1D24B9DBA8D8A1B00CEF2E2238C16681 /* RDEPUBWebView+JavaScriptBridge.swift */; }; DA5B51E5D80C161D2902B6FC60DA5EC8 /* DTImageTextAttachment.h in Headers */ = {isa = PBXBuildFile; fileRef = 27372A23AA4B051867E7D2C749D1DE81 /* DTImageTextAttachment.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DABA6DF4CDB6C3098DDB1972D9B8D47F /* DTExtendedFileAttributes.h in Headers */ = {isa = PBXBuildFile; fileRef = 2F75437CE9F9324D315E417014797C1D /* DTExtendedFileAttributes.h */; settings = {ATTRIBUTES = (Public, ); }; }; DAD16D3E6EBB32FF96C63BFE6037065F /* DTLinkButton.m in Sources */ = {isa = PBXBuildFile; fileRef = CE761A55BD57C0BFD6336CD073F85C31 /* DTLinkButton.m */; }; - DB584734160C920EAC6C819D8F05CA23 /* RDEPUBTextPageDecorationView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53B7AB6E967C804E556A13DA6CC254A0 /* RDEPUBTextPageDecorationView.swift */; }; - DB860EFC2F1DB67CE1160CEEAA78FB57 /* RDEPUBWebView+Configuration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 843CB00ED0D033E72DD79F0B27BE82E0 /* RDEPUBWebView+Configuration.swift */; }; - DBBA4E0A5CC421EEDAB45FDBF7A90906 /* RDReaderPageChildViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AB3DF251DDD78EDAEE82FBEBDF9CE79B /* RDReaderPageChildViewController.swift */; }; + DB453710016DF142F6E628FFBC4A3C7A /* RDEPUBTextBookBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F5110430A322C853C80F6041B0EDF94 /* RDEPUBTextBookBuilder.swift */; }; DBCA42F7E1697F4EC82E0E7C9657851D /* DTAttributedTextCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 068885F1B54CFD5DBBE6E2DC253F7819 /* DTAttributedTextCell.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DBD78AD2493F9A171BBBFF8AD648B93B /* RDEPUBReaderContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3CF48E002B64BF7AF8BDBEB9A572C13F /* RDEPUBReaderContext.swift */; }; DC3E2932A82AD5D88D8B1EFBF004BEC8 /* DTCSSListStyle.m in Sources */ = {isa = PBXBuildFile; fileRef = 40FD7C9E2E05FB4A73F4C4C70A3AFAF0 /* DTCSSListStyle.m */; }; - DC9CA5F234D2AA505F70686BAC03C27B /* rangy-serializer.js in Resources */ = {isa = PBXBuildFile; fileRef = 25E8E62C9DC0A4AE49F168F04CF8B9D3 /* rangy-serializer.js */; }; + DCD0A2ABC337BCEB54C478ED1F8889D9 /* RDEPUBImageViewerCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7BFC2AF3C2082F2A0D9950A1B8256229 /* RDEPUBImageViewerCoordinator.swift */; }; DD73CD0E5148961D1ABD80E050122314 /* DTCoreTextFunctions.h in Headers */ = {isa = PBXBuildFile; fileRef = DA2ED17D0DDF5F1C5606BFFD9A512DE4 /* DTCoreTextFunctions.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DDBA184A2654FDBC731798EF79052111 /* RDEPUBReadingSession.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0DE6AC16B3AE09561A7557F826881E3D /* RDEPUBReadingSession.swift */; }; - DDE3BF42B0D4938C6E1B125885F69A35 /* RDReaderViewProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1058DD74F97F43193DBA11E135ACFF22 /* RDReaderViewProtocols.swift */; }; + DE1BAA17B95E7CD4F1FFB609726D4616 /* RDEPUBStyleCompatibilityModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8DFA3BB3F5BC48BF4CA6F8DE4559318C /* RDEPUBStyleCompatibilityModels.swift */; }; DE68AD2F426FD462BC70F968E5AF5553 /* DTTextAttachmentHTMLElement.m in Sources */ = {isa = PBXBuildFile; fileRef = AC0A4ED7E936923A29A5EEB1D95D6B55 /* DTTextAttachmentHTMLElement.m */; }; + DF9D50C1C5F9F22238392605B3F74438 /* DTVersion.h in Headers */ = {isa = PBXBuildFile; fileRef = 8C9575F05D72C239E7E6F079BACDF4C7 /* DTVersion.h */; settings = {ATTRIBUTES = (Public, ); }; }; DFB5A1C64C7908FD05BEFF7C7B571353 /* DTAttributedLabel.h in Headers */ = {isa = PBXBuildFile; fileRef = 09FF858DC29B73E9B67B32B03CFF4084 /* DTAttributedLabel.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DFC8567EED9764161A51DB808255D041 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0834E84632886CDD9911CAB76183F1CE /* QuartzCore.framework */; }; + E1985223C4218E5241401FCE8E7A3008 /* RDEPUBTextPageRenderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 854840B8F97C908AB5B51EDF03E54D52 /* RDEPUBTextPageRenderView.swift */; }; + E1B932FF7C930EF7F7604680E8FD3E14 /* DTVersion.m in Sources */ = {isa = PBXBuildFile; fileRef = CCC633BF76C79E0B4A6750337D5DCDB8 /* DTVersion.m */; }; E1DA58105A72D6C0B77A8A9F7822BD68 /* DTCoreTextLayoutFrame.m in Sources */ = {isa = PBXBuildFile; fileRef = 4641C3C93CE32054665ACF80457A7A94 /* DTCoreTextLayoutFrame.m */; }; + E2A911CAA42ED21FC0675B662B58B8B8 /* Archive+MemoryFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFF51E56E09E095C92CB5B9F21384027 /* Archive+MemoryFile.swift */; }; + E3240129AF117F28A4CC9A39E48C7CE5 /* RDEPUBJumpSession.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE6769FF56092F4EB6B5EDCD64F8E6A7 /* RDEPUBJumpSession.swift */; }; + E355E9E35DEEF09E5F05A76BCBBC35F6 /* RDReaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9B4C7EA8E0601A462DDA753AFA93E66 /* RDReaderView.swift */; }; E38FC7829B5BDD1588FA487E0FBAC208 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B50104DE2E35D820ECA22CDB3E6F96EA /* Foundation.framework */; }; - E56D82B0707AAD37277F90302EA4A4C4 /* RDEPUBModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4646F47318195C5CDADF0D93A4A2FC91 /* RDEPUBModels.swift */; }; - E5B7FC56FA951AD4542B3EC0EBB7C6A6 /* DTSmartPagingScrollView.m in Sources */ = {isa = PBXBuildFile; fileRef = A20F6F0463A998DC3BD53DE9E63B63DE /* DTSmartPagingScrollView.m */; }; - E63936A1FBECCD5431B219748E9652B7 /* RDReaderView-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D28F67E16027AF4FA4F9D501C4D0712 /* RDReaderView-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E6E0FEA82C76D2AD4209048886206854 /* RDEPUBSearchEngine.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B24B2EBB40F90487F5EF3A6451834A8 /* RDEPUBSearchEngine.swift */; }; - E85C78871193D79CF936573FC5F1136B /* RDEPUBReaderPaginationCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = E7F6AAF70ED1162640040B9969BBE6D5 /* RDEPUBReaderPaginationCoordinator.swift */; }; + E3A31EB088966F290BC0FA8F9E84990A /* NSMutableArray+DTMoving.m in Sources */ = {isa = PBXBuildFile; fileRef = ADD5B2F66FCCFB58393314E7B9FE4384 /* NSMutableArray+DTMoving.m */; }; + E61F35DFF62E486B472E57CB49399D1B /* FileManager+ZIPDeprecated.swift in Sources */ = {isa = PBXBuildFile; fileRef = F49FC82A04EE9B3B49CBA6CB88ACBC67 /* FileManager+ZIPDeprecated.swift */; }; + E776DCFFEECF2D8AAA859BB2FC3DD14E /* DTCoreGraphicsUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 2C1A7359A45BB880877A672C57F522FE /* DTCoreGraphicsUtils.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E7B84139E33FBD60C90F546750B66179 /* RDEPUBCFISerializer.swift in Sources */ = {isa = PBXBuildFile; fileRef = F54575506F65B0B0E12AABF25A9E6C6F /* RDEPUBCFISerializer.swift */; }; + E8050CB03DC17469F13A823B666075C7 /* Data+Compression.swift in Sources */ = {isa = PBXBuildFile; fileRef = 22B69C9433F2FBE5CE8409BD4266DFE8 /* Data+Compression.swift */; }; + E87011B94A31EF3C96486633494CF851 /* UIImage+DTFoundation.h in Headers */ = {isa = PBXBuildFile; fileRef = 1300CC5794E609DB8FBA6FFF90A09408 /* UIImage+DTFoundation.h */; settings = {ATTRIBUTES = (Public, ); }; }; E8AB5CE26A5224EF09E9E363D70C7775 /* DTDictationPlaceholderView.m in Sources */ = {isa = PBXBuildFile; fileRef = 1FA88D00B7B2B2F0BA98BB92DF035906 /* DTDictationPlaceholderView.m */; }; - E8E67096ED90348922DD8A3D1E4B92B6 /* RDURLReaderController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3ECA70C45BE80D444EBFE0DA40424702 /* RDURLReaderController.swift */; }; - E90131918E21F84D6E5CBFA20E27E5ED /* RDEPUBPresentationRuntime.swift in Sources */ = {isa = PBXBuildFile; fileRef = 72C909891BE902A0BB13D4A142EE982F /* RDEPUBPresentationRuntime.swift */; }; + E8BC727E48847123C80C6487E4B6D155 /* NSURL+DTUnshorten.h in Headers */ = {isa = PBXBuildFile; fileRef = ACA6D26B26D2653D6E1C871A482BD6DF /* NSURL+DTUnshorten.h */; settings = {ATTRIBUTES = (Public, ); }; }; EA0040823CCF8E97363DB5891F5DA6D0 /* DTCoreTextFunctions.m in Sources */ = {isa = PBXBuildFile; fileRef = 4917E08E6E59460594AC443EDDAB7E77 /* DTCoreTextFunctions.m */; }; - EACD47B345480FC9DE37F1BBEBC3E6E8 /* DTCustomColoredAccessory.m in Sources */ = {isa = PBXBuildFile; fileRef = 9542AFE3A82C8AE56576254CE196E71A /* DTCustomColoredAccessory.m */; }; - EAF560B47F3FBA36DB7C1690D2155C24 /* RDEPUBReaderServices.swift in Sources */ = {isa = PBXBuildFile; fileRef = CC8B39E69CFC5D4DD1D47A29F6D9E852 /* RDEPUBReaderServices.swift */; }; + EA2CEDE8F391ED85A9601DEB7D8044F2 /* RDEPUBReaderController+DataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 31C306314EF985A32E583A25AAA39960 /* RDEPUBReaderController+DataSource.swift */; }; + EA75620DF32C36B44E170275F2551BB5 /* RDReaderTapRegionHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = D75F5147BF67C9935CC45C16F0118C14 /* RDReaderTapRegionHandler.swift */; }; + EA9AC5EE45C33187D248C64FC46AF85C /* RDEPUBSelectionOverlayView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 40FFA046E3AFCD87D8592AEFB6CFD987 /* RDEPUBSelectionOverlayView.swift */; }; + EB83224969E7CCA0D8528DD55A753FDF /* Date+ZIP.swift in Sources */ = {isa = PBXBuildFile; fileRef = 18D23D8D10719754D93032F66EB98536 /* Date+ZIP.swift */; }; EBB7E4D4DB253B5F1267CF9B4DDB4E93 /* DTCoreTextFontDescriptor.m in Sources */ = {isa = PBXBuildFile; fileRef = 88464D2E3579F1A5B25DCCA128528938 /* DTCoreTextFontDescriptor.m */; }; - EC2221DF39BF4ABE42B4D74B98EE26BD /* DTPieProgressIndicator.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BA617294E6371DD7FAC32B61E0873F2 /* DTPieProgressIndicator.m */; }; + EC6CE6065F48F2022717FE73027CF1F9 /* RDEPUBSettingsFlipAutomation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 849DFA0D192A6586FCC90DE7E300D812 /* RDEPUBSettingsFlipAutomation.swift */; }; + ED83D5746B2CB139C2A53D97CEAA8AC1 /* RDEPUBReaderChromeCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B9450CAB183FFD7F4018D819E02321C /* RDEPUBReaderChromeCoordinator.swift */; }; EDA269B595D70EC2B9D81DC890157D63 /* DTAccessibilityViewProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = 399AED6BF151EC39BE4450784795A832 /* DTAccessibilityViewProxy.h */; settings = {ATTRIBUTES = (Public, ); }; }; + EDC97063261083047D0D636FE47AC003 /* RDEPUBChapterRuntimeStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = C2135D2A77CD609485DAF400E1E3396F /* RDEPUBChapterRuntimeStore.swift */; }; EE4F0992A0F597320FF7BDE4691D0FD4 /* NSString+CSS.h in Headers */ = {isa = PBXBuildFile; fileRef = 3578B97A85BCDC60888FDF87B8F2600C /* NSString+CSS.h */; settings = {ATTRIBUTES = (Public, ); }; }; - EFE445E56D466D8A8B40FD6BDE4CE778 /* RDEPUBReaderController+TableOfContents.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE93E7F2D03E5848ADB6C91620D5A245 /* RDEPUBReaderController+TableOfContents.swift */; }; + EEE82C0D019E833A59DB98BA96CBA446 /* RDEPUBNotePopupViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9736CC5317A5E8F2EE1A03A963197BDF /* RDEPUBNotePopupViewController.swift */; }; F006F73F17F2E3CC0E7852E9357BA946 /* DTAnchorHTMLElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 599172147A32B6978EB5AAE1BE55FF7A /* DTAnchorHTMLElement.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F0CC9ADA3DC9C7D3780646C7B31BBBDC /* RDEPUBParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = EFFC77747115ACAF9EE13A1CEAEEA539 /* RDEPUBParser.swift */; }; + F02681BD4DFFDABD54753610438BE05F /* RDEPUBAssetRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = E97B6B6C59BBCD6685CE808E64981E76 /* RDEPUBAssetRepository.swift */; }; + F09A27FF0030DBB58443F1B41F256B86 /* RDEPUBTextSelectionController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 36BCDC7F25B3DB9F7FC2F681DD27B93E /* RDEPUBTextSelectionController.swift */; }; + F0DDD6C446D5E4F9712C70CE21AB2CF8 /* RDEPUBHTMLNormalizer.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3B908A78A947A1A9D66C368CB616DE4 /* RDEPUBHTMLNormalizer.swift */; }; F0F631056BADA32253528247DF493272 /* DTHTMLElement.h in Headers */ = {isa = PBXBuildFile; fileRef = F7C508BE899A1397560A767CAEADB7B9 /* DTHTMLElement.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F12A5C7183CC8152D0A36E1C7963E139 /* RDEPUBChapterDataCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3667CE400B3A606C7BE2D736B10AB546 /* RDEPUBChapterDataCache.swift */; }; - F33B238CDBEAE3BA81136D519B27483A /* RDEPUBPaginationCacheCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3008F6944BA740CD6E6F5CA33733C911 /* RDEPUBPaginationCacheCoordinator.swift */; }; + F12AC7A30166F9013C095231D43E7DA7 /* DTFoundationConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = FF63F5E8902D6F3F5E845A924EBBC6D3 /* DTFoundationConstants.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F21A55B28E25C3B9D00D8E2D6EB58544 /* RDEPUBCFIDOMPathBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49DF44BF9FBD9CCC9CDE0A998C428D86 /* RDEPUBCFIDOMPathBuilder.swift */; }; + F3650B2D64F692BEFD95976185B5DB15 /* RDEPUBReaderController+AttachmentTooltip.swift in Sources */ = {isa = PBXBuildFile; fileRef = E52802E06864FE60CFBAE21EAA6F3F0F /* RDEPUBReaderController+AttachmentTooltip.swift */; }; + F38EAD024D5BB401AF2476100E7B7822 /* NSString+DTURLEncoding.h in Headers */ = {isa = PBXBuildFile; fileRef = CEEC8715398E89B42F9B04E290E8E4FE /* NSString+DTURLEncoding.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F3DFAD0104D9A6520E75A5874F499F66 /* RDEPUBReaderTheme.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F60D4A5E3A44B1AB998E185EFF5C046 /* RDEPUBReaderTheme.swift */; }; + F425E895C294B7E62878166C248F073A /* RDEPUBWebViewDebug.swift in Sources */ = {isa = PBXBuildFile; fileRef = C59CB44187E054E80CA13F60FF8EE303 /* RDEPUBWebViewDebug.swift */; }; F4A2E3C4237B8931F61B72FF0BDD6D69 /* DTObjectTextAttachment.m in Sources */ = {isa = PBXBuildFile; fileRef = 8EDA1618562CC224690CF6FC03AFED38 /* DTObjectTextAttachment.m */; }; - F50A5A2A8E51049641FDFEC90E76F1B9 /* RDEPUBReaderController+RuntimeBridge.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B2DF9409FC76691EAC579DDF7247899 /* RDEPUBReaderController+RuntimeBridge.swift */; }; - F580E10ABA4F035DD6C016EF8E917F2C /* RDReaderTapRegionHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9C1B2F1D8E3F93A60375AA8853FF1842 /* RDReaderTapRegionHandler.swift */; }; - F582DBD2110DC7E2BD25731A220D85FA /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 006D002D86B43AA52E0AFD2E18459107 /* PrivacyInfo.xcprivacy */; }; + F5064819F680614ACF6503287451E4C6 /* rangy-core.js in Resources */ = {isa = PBXBuildFile; fileRef = 15A5AF469CA067562D1516F98913D4DF /* rangy-core.js */; }; F58ABA106C6200175DF574DF05A75BA8 /* DTAccessibilityElement.m in Sources */ = {isa = PBXBuildFile; fileRef = 18F842408AB76A580B80255453F2FDF6 /* DTAccessibilityElement.m */; }; F5A424E67F41C4F7B830CE2F7E71570D /* DTCoreText-Resources in Resources */ = {isa = PBXBuildFile; fileRef = F4E2B1AC73977F10254628C0B7EBE38F /* DTCoreText-Resources */; }; F6036BBDFE7484F5A453F6876C97C098 /* NSAttributedString+SmallCaps.m in Sources */ = {isa = PBXBuildFile; fileRef = 98CF9C5D504838741E399811F4D5A0B7 /* NSAttributedString+SmallCaps.m */; }; F61102C9BF3D6296CB6C6B754ABF98C5 /* DTTextHTMLElement.m in Sources */ = {isa = PBXBuildFile; fileRef = 69076FC9D4201719C319547346DA3E21 /* DTTextHTMLElement.m */; }; - F97B3F528A2B7417D2843479548CDF40 /* UIApplication+DTNetworkActivity.h in Headers */ = {isa = PBXBuildFile; fileRef = 55423549E54A01F039B5F379B264C73F /* UIApplication+DTNetworkActivity.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F9959EB035DFB0335495915F6A4DF232 /* RDEPUBCFIDOMPathBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 54F135677B8806216984881B2333BF4E /* RDEPUBCFIDOMPathBuilder.swift */; }; - F9ADC220D598CC27EF1B9F8277966E01 /* NSURL+DTAppLinks.h in Headers */ = {isa = PBXBuildFile; fileRef = A3F7613E99CAA29881A015D0ED969B86 /* NSURL+DTAppLinks.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F9AE08B54720440E62FC671424610C66 /* RDEPUBCFIRecoveryEngine.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2FBB458EDD978CBC54464EA28336F977 /* RDEPUBCFIRecoveryEngine.swift */; }; + F6367EF2E50441DF4512B27FFD788D91 /* DTActivityTitleView.h in Headers */ = {isa = PBXBuildFile; fileRef = AF1516035C269F7A41EE064AAB14D562 /* DTActivityTitleView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F6504C7DCCD538BD0696B381952DECB4 /* RDEPUBCSSCompatibilityLayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5F3B770A5B6ED1C21FDA2BD1A8B06EE6 /* RDEPUBCSSCompatibilityLayer.swift */; }; + F7147DD0CF0BBAE9A181448FC68CF9AA /* DTSmartPagingScrollView.m in Sources */ = {isa = PBXBuildFile; fileRef = A20F6F0463A998DC3BD53DE9E63B63DE /* DTSmartPagingScrollView.m */; }; + F8073C63A8EFDF857AA51C52455545F0 /* RDEPUBMetadataParseWorker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1977F26E5E225E266FC92C775A41E1F3 /* RDEPUBMetadataParseWorker.swift */; }; + F9510879C3D8131EEED997499C6ACF14 /* UIApplication+DTNetworkActivity.h in Headers */ = {isa = PBXBuildFile; fileRef = 55423549E54A01F039B5F379B264C73F /* UIApplication+DTNetworkActivity.h */; settings = {ATTRIBUTES = (Public, ); }; }; + FB3D0E7A431E12F09F3EFEA34560164D /* RDEPUBChapterData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 317357794EF461FA4C6992E798C900DF /* RDEPUBChapterData.swift */; }; + FBAC3FF19329EDF1CC7D494263CA728D /* RDEPUBReaderSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 22FF6CAA8966DB1B4C14A695E355C881 /* RDEPUBReaderSettings.swift */; }; + FBCBAE5842CAA34316A0963C2ED3FFE6 /* RDEPUBChapterCacheKey.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE8C9E2C878448571156DFC0E41979AF /* RDEPUBChapterCacheKey.swift */; }; FC5F52919451A15639442B46B38E4C67 /* DTCoreTextLayoutFrame+Cursor.m in Sources */ = {isa = PBXBuildFile; fileRef = EF625CF6A790938F5CE0F0C7DC36E340 /* DTCoreTextLayoutFrame+Cursor.m */; }; + FC7E79D4D97B65B3546B66BE1B024F7B /* DTBlockFunctions.h in Headers */ = {isa = PBXBuildFile; fileRef = 35417EC94F2D58CB80C991F875CE15C2 /* DTBlockFunctions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + FCF14BAEC4558EE376B315BD4C0C9307 /* RDEPUBReaderRuntime.swift in Sources */ = {isa = PBXBuildFile; fileRef = C49A29FA18CE9201BCA63615AEF3457F /* RDEPUBReaderRuntime.swift */; }; + FD20D1EEC74F54FF4283C4C106E0BA5F /* DTPieProgressIndicator.h in Headers */ = {isa = PBXBuildFile; fileRef = 173194D38C897D8E38AD8A194E47DB5C /* DTPieProgressIndicator.h */; settings = {ATTRIBUTES = (Public, ); }; }; FD5D68887297CFA94F543C49DC68A156 /* DTHTMLAttributedStringBuilder.m in Sources */ = {isa = PBXBuildFile; fileRef = E0192469A486DA7CECFECEA37518B6B9 /* DTHTMLAttributedStringBuilder.m */; }; + FE1D81BC7577F8C33E5D2164F29F57AD /* RDEPUBViewportTypes.swift in Sources */ = {isa = PBXBuildFile; fileRef = B137EA59DB88E982FBF8E5C775975FE5 /* RDEPUBViewportTypes.swift */; }; FEB00C614DCB6A8A7BDF8DEE11260984 /* NSMutableAttributedString+HTML.m in Sources */ = {isa = PBXBuildFile; fileRef = 7CA72FA9A4F2F42A75C58325738A44AC /* NSMutableAttributedString+HTML.m */; }; - FF183068DF62B1D2A61F46EA03A88FCB /* RDEPUBStyleSheetComposer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 361565CCC385512EA14A6A2C9CFAF08B /* RDEPUBStyleSheetComposer.swift */; }; - FFB1EA7B10054C49F85A561AF4A8D94B /* Data+Serialization.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9C3615C94C147AEA92F022E119810E9F /* Data+Serialization.swift */; }; + FEC18B0BF9DB6282F3B2737B03C466C6 /* NSURL+DTComparing.m in Sources */ = {isa = PBXBuildFile; fileRef = 467CC59CEC3B3BC7ACDCA776FDCBDC1D /* NSURL+DTComparing.m */; }; FFEB74D61E54DC46EFE0DBE2E76EFAA1 /* Pods-ReadViewDemo-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = EBA0272559B0F7FAD8AC670AC7431188 /* Pods-ReadViewDemo-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ - 1756F289E5867FF7989F61502D8E61E6 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = AA2E57587AA8EECA63C4BE08EA3CB6D2; - remoteInfo = RDReaderView; - }; - 1D36C48BC78E85DBB1B5B5C63364A539 /* PBXContainerItemProxy */ = { + 02DA505711474C0FACBA3A4EF92D0255 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; remoteGlobalIDString = AA15C8469D67684160CC2A7098EB841C; remoteInfo = ZIPFoundation; }; - 291EF29F5CECA009529D76F9FE26B4B9 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 8F6E5A5BF72D62CDFD25F91A7CFA3309; - remoteInfo = DTFoundation; - }; - 3AEFBA1AE6539AC7A3DA5FA7CF3F7885 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = C7A8D82E407CD3FDC3BA55CEE519B252; - remoteInfo = "ZIPFoundation-ZIPFoundation_Privacy"; - }; - 74636C5DF9567077F30C787E0823DE39 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = AA15C8469D67684160CC2A7098EB841C; - remoteInfo = ZIPFoundation; - }; - 7AD1BAAD6E745A14A9201807DB7B6F66 /* PBXContainerItemProxy */ = { + 18EB355BC8F480499E2AE3151AC106F3 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; remoteGlobalIDString = 0C24CB0E87A728A11AA1124CB360D6A1; remoteInfo = "DTCoreText-Resources"; }; - 99F356F4CC2B773149744B1DE33A5ED9 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = AE7F393FB7805DE2664AB4111873F907; - remoteInfo = "RDReaderView-RDReaderViewAssets"; - }; - B1FC0CCED6BCAC632379DDDD199C72EA /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = B88F4EA0695B6B3165C64594850D72C7; - remoteInfo = DTCoreText; - }; - C8DB32812641B809F4A0DAC443C5EAA0 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = B88F4EA0695B6B3165C64594850D72C7; - remoteInfo = DTCoreText; - }; - CEF5C9FADEA582571424EA2F8593ACD3 /* PBXContainerItemProxy */ = { + 52128B73E472B44C45E232AF6CE036D8 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; remoteGlobalIDString = 8F6E5A5BF72D62CDFD25F91A7CFA3309; remoteInfo = DTFoundation; }; + 7A2462400BEFE0B87FFF91506C70323F /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = AA15C8469D67684160CC2A7098EB841C; + remoteInfo = ZIPFoundation; + }; + 80521E27CBC7CED78A3F5097ABF137C3 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 8F6E5A5BF72D62CDFD25F91A7CFA3309; + remoteInfo = DTFoundation; + }; + 8AA2F6A6BF24C94B6D48B63672A15FC1 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = AE7F393FB7805DE2664AB4111873F907; + remoteInfo = "RDReaderView-RDReaderViewAssets"; + }; + 8C68FC6E1E8C08E748DEFB91D8C9C468 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = C7A8D82E407CD3FDC3BA55CEE519B252; + remoteInfo = "ZIPFoundation-ZIPFoundation_Privacy"; + }; + A1FE9FFEAB3A0F41D3FD0AC3841AF317 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = B88F4EA0695B6B3165C64594850D72C7; + remoteInfo = DTCoreText; + }; + AF23E97E0F7EF7C4C8ED414CE73B904B /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = AA2E57587AA8EECA63C4BE08EA3CB6D2; + remoteInfo = RDReaderView; + }; + C06FCB07200CA15988CA2E58AE3B4525 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = B88F4EA0695B6B3165C64594850D72C7; + remoteInfo = DTCoreText; + }; /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ 006D002D86B43AA52E0AFD2E18459107 /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; name = PrivacyInfo.xcprivacy; path = Sources/ZIPFoundation/Resources/PrivacyInfo.xcprivacy; sourceTree = ""; }; - 02946CDDA8033AFAA82187D50800FEA8 /* ResourceBundle-RDReaderViewAssets-RDReaderView-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-RDReaderViewAssets-RDReaderView-Info.plist"; sourceTree = ""; }; + 008302A48FE881CADADBCB02832B880B /* RDReaderSpreadResolver.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDReaderSpreadResolver.swift; sourceTree = ""; }; + 02CABD2C55EE6F8759C2702014273F00 /* RDURLReaderController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDURLReaderController.swift; sourceTree = ""; }; 0372FD1824BC43F7BD6B337430201420 /* DTCoreGraphicsUtils.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTCoreGraphicsUtils.m; path = Core/Source/DTCoreGraphicsUtils.m; sourceTree = ""; }; + 0430034A7AFBCEC269D7C46517004DF0 /* RDEPUBNoteDetector.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBNoteDetector.swift; sourceTree = ""; }; 044BEA679671E16EA9BA9AD627750742 /* NSMutableAttributedString+HTML.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSMutableAttributedString+HTML.h"; path = "Core/Source/NSMutableAttributedString+HTML.h"; sourceTree = ""; }; 045ADBF2087ADD914A9CA0B62EBF2A9F /* Pods-ReadViewDemo.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-ReadViewDemo.modulemap"; sourceTree = ""; }; + 055B53D0A60DC351390338A48800AE77 /* RDEPUBNavigatorLayoutContext.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBNavigatorLayoutContext.swift; sourceTree = ""; }; 057DBFBFC99448A0B77A3C0DBB13B4A9 /* NSScanner+HTML.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSScanner+HTML.m"; path = "Core/Source/NSScanner+HTML.m"; sourceTree = ""; }; 05838D65DEC339C51AADB17346B7E287 /* NSDictionary+DTError.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSDictionary+DTError.h"; path = "Core/Source/NSDictionary+DTError.h"; sourceTree = ""; }; - 05ECE185AAFC5A857734DF5495F8E7C2 /* RDEPUBCFIMarkerInjector.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBCFIMarkerInjector.swift; sourceTree = ""; }; - 06733E30802CA08ACF312C763BD37795 /* RDEPUBTextSearchEngine.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextSearchEngine.swift; sourceTree = ""; }; + 05A13D7709B82256F12E52DC6E65F696 /* RDEPUBPageResolver.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBPageResolver.swift; sourceTree = ""; }; 068885F1B54CFD5DBBE6E2DC253F7819 /* DTAttributedTextCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTAttributedTextCell.h; path = Core/Source/DTAttributedTextCell.h; sourceTree = ""; }; + 0742A5B640EA32CFFCB23C98EA7E4E02 /* RDEPUBPageCountCache.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBPageCountCache.swift; sourceTree = ""; }; 0764D155F69503AACFA7AD976825E986 /* DTTiledLayerWithoutFade.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTTiledLayerWithoutFade.h; path = Core/Source/iOS/DTTiledLayerWithoutFade.h; sourceTree = ""; }; - 0786D6430A29C2F90E4832048559BE21 /* RDReaderSpreadResolver.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDReaderSpreadResolver.swift; sourceTree = ""; }; - 07C08997AE3D75194E400010A0AE4820 /* RDEPUBTextLayoutFrame.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextLayoutFrame.swift; sourceTree = ""; }; + 07E07EEE45C5439A207C5647210A4A7F /* RDEPUBSearchModels.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBSearchModels.swift; sourceTree = ""; }; 0834E84632886CDD9911CAB76183F1CE /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS18.0.sdk/System/Library/Frameworks/QuartzCore.framework; sourceTree = DEVELOPER_DIR; }; - 0886011FDDE07A5C7BBC2168C401EAD2 /* RDEPUBAttachmentTooltipOverlayView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBAttachmentTooltipOverlayView.swift; sourceTree = ""; }; 08F54C3D9B4AECA08A47309615DC2715 /* DTFoundation-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "DTFoundation-prefix.pch"; sourceTree = ""; }; - 091E53DC8215AED45D88A2ABA24A2140 /* epub-bridge.js */ = {isa = PBXFileReference; includeInIndex = 1; name = "epub-bridge.js"; path = "Sources/RDReaderView/EPUBCore/Resources/epub-bridge.js"; sourceTree = ""; }; + 0901D33C8FF8497CDC7A4365D0D84218 /* RDEPUBReaderSettingsViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderSettingsViewController.swift; sourceTree = ""; }; + 09336B106D598DCD38F6B79AEA629066 /* RDEPUBCoreTextPageFrameFactory.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBCoreTextPageFrameFactory.swift; sourceTree = ""; }; + 09608C067F73D7A137B9F22AF1384DF2 /* RDEPUBWebView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBWebView.swift; sourceTree = ""; }; 09FF858DC29B73E9B67B32B03CFF4084 /* DTAttributedLabel.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTAttributedLabel.h; path = Core/Source/DTAttributedLabel.h; sourceTree = ""; }; - 0AE0BE26FBA95F74B6173965BEC302EB /* RDEPUBSemanticMarkerInjector.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBSemanticMarkerInjector.swift; sourceTree = ""; }; + 0ADCC15F3965570C3568420F9A75845E /* RDEPUBCFIParser.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBCFIParser.swift; sourceTree = ""; }; 0B8321AB80CFE0B94537AEA63E9A79F5 /* NSString+Paragraphs.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSString+Paragraphs.h"; path = "Core/Source/NSString+Paragraphs.h"; sourceTree = ""; }; 0C24F592C4F38F15DC8C46BE0442B59C /* DTCSSListStyle.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTCSSListStyle.h; path = Core/Source/DTCSSListStyle.h; sourceTree = ""; }; - 0D170B1455CB3C94EFC34D7B67EDC001 /* RDReaderView+ContentAccess.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDReaderView+ContentAccess.swift"; sourceTree = ""; }; - 0D253DF65322509913DE34899979C30B /* wxread-default.css */ = {isa = PBXFileReference; includeInIndex = 1; name = "wxread-default.css"; path = "Sources/RDReaderView/EPUBCore/Resources/wxread-default.css"; sourceTree = ""; }; 0D93C2002AAECD29B3ED5A14026D3DFE /* Entry.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Entry.swift; path = Sources/ZIPFoundation/Entry.swift; sourceTree = ""; }; - 0D9C9D60B2B26F9890D35189DEBC7580 /* RDEPUBChapterRuntimeStore.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBChapterRuntimeStore.swift; sourceTree = ""; }; - 0DC061242C98566FE767A2179BE8D9A9 /* RDEPUBReaderTheme.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderTheme.swift; sourceTree = ""; }; - 0DE6AC16B3AE09561A7557F826881E3D /* RDEPUBReadingSession.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReadingSession.swift; sourceTree = ""; }; - 0E160FF00EF4B6DB318FEDCD72A026F3 /* RDEPUBDTCoreTextRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBDTCoreTextRenderer.swift; sourceTree = ""; }; - 0E5D2C72E80EF71ECCFDFE5C476ADADE /* RDReaderPreloadController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDReaderPreloadController.swift; sourceTree = ""; }; + 0EA81A6E9B081AC375550C90411530B8 /* RDReaderView-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "RDReaderView-Info.plist"; sourceTree = ""; }; + 0F5110430A322C853C80F6041B0EDF94 /* RDEPUBTextBookBuilder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextBookBuilder.swift; sourceTree = ""; }; 0F80AC45FB1DBF50E0E3AA4F26BFA676 /* DTFoundationConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTFoundationConstants.m; path = Core/Source/DTFoundationConstants.m; sourceTree = ""; }; - 0FF7BBD4C881AD7327290471E9484E1F /* RDEPUBReaderLoadCoordinator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderLoadCoordinator.swift; sourceTree = ""; }; - 1058DD74F97F43193DBA11E135ACFF22 /* RDReaderViewProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDReaderViewProtocols.swift; sourceTree = ""; }; - 10617286346E2E6D7BB30203A65302CA /* RDReaderGestureController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDReaderGestureController.swift; sourceTree = ""; }; + 0FDF74546728C05BFEA4B3BC4D6905AF /* RDEPUBReaderServices.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderServices.swift; sourceTree = ""; }; + 104930ADAD326C90EB587485A6BFF755 /* RDEPUBCFIGenerator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBCFIGenerator.swift; sourceTree = ""; }; + 11C3B7C93919D787AAC0C4D25E52805A /* RDEPUBCFIMarkerInjector.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBCFIMarkerInjector.swift; sourceTree = ""; }; + 11D2090101EA891F21834863EE859AE8 /* RDEPUBNoteResolver.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBNoteResolver.swift; sourceTree = ""; }; + 12422B421A127464A62DF332C3EAF31E /* RDEPUBReaderEnvironment.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderEnvironment.swift; sourceTree = ""; }; 126E6ACAC7C0427806B58DA8E10BDD78 /* NSMutableString+HTML.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSMutableString+HTML.m"; path = "Core/Source/NSMutableString+HTML.m"; sourceTree = ""; }; - 129154729E86D56457FE6DC7DEEA55B6 /* RDEPUBCFIPath.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBCFIPath.swift; sourceTree = ""; }; 1300CC5794E609DB8FBA6FFF90A09408 /* UIImage+DTFoundation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+DTFoundation.h"; path = "Core/Source/iOS/UIImage+DTFoundation.h"; sourceTree = ""; }; - 130135CFECAE1E38379F213C3C298BD1 /* RDEPUBWebView+Search.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBWebView+Search.swift"; sourceTree = ""; }; 131C1D8C96DF2D44A2D4F50C5AEFFF11 /* NSString+DTURLEncoding.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSString+DTURLEncoding.m"; path = "Core/Source/NSString+DTURLEncoding.m"; sourceTree = ""; }; 13597E7190F2C08C5906D7D128E43E99 /* DTObjectTextAttachment.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTObjectTextAttachment.h; path = Core/Source/DTObjectTextAttachment.h; sourceTree = ""; }; 13F8FC8B51AD434F5D4B0CF5150D7563 /* DTCoreText-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "DTCoreText-umbrella.h"; sourceTree = ""; }; 14283024FA4A0231B32CA22AA907FEFA /* DTBreakHTMLElement.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTBreakHTMLElement.h; path = Core/Source/DTBreakHTMLElement.h; sourceTree = ""; }; 148B993AB228816D19FCB7CD13874C83 /* DTAnchorHTMLElement.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTAnchorHTMLElement.m; path = Core/Source/DTAnchorHTMLElement.m; sourceTree = ""; }; 14E63A0D35D4A07BD0123021EA161C99 /* DTHTMLWriter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTHTMLWriter.h; path = Core/Source/DTHTMLWriter.h; sourceTree = ""; }; + 1527510DA54482E3557D6BB3EB651015 /* rangy-serializer.js */ = {isa = PBXFileReference; includeInIndex = 1; name = "rangy-serializer.js"; path = "Sources/RDReaderView/EPUBCore/Resources/rangy-serializer.js"; sourceTree = ""; }; + 15A5AF469CA067562D1516F98913D4DF /* rangy-core.js */ = {isa = PBXFileReference; includeInIndex = 1; name = "rangy-core.js"; path = "Sources/RDReaderView/EPUBCore/Resources/rangy-core.js"; sourceTree = ""; }; + 170D81239AF3CE5CD64BA2E44A505872 /* RDEPUBParser+Resources.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBParser+Resources.swift"; sourceTree = ""; }; 173194D38C897D8E38AD8A194E47DB5C /* DTPieProgressIndicator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTPieProgressIndicator.h; path = Core/Source/iOS/DTPieProgressIndicator.h; sourceTree = ""; }; - 1776D2B8346E3DE2D2CFF9AA994D50DF /* RDEPUBBackgroundPriorityPolicy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBBackgroundPriorityPolicy.swift; sourceTree = ""; }; + 1791083E7546C2EB443048851C122E32 /* RDEPUBImageViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBImageViewController.swift; sourceTree = ""; }; + 1859C9EC3263145CE262EC15A12B6BE4 /* RDEPUBReaderController+PublicAPI.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBReaderController+PublicAPI.swift"; sourceTree = ""; }; 18D23D8D10719754D93032F66EB98536 /* Date+ZIP.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Date+ZIP.swift"; path = "Sources/ZIPFoundation/Date+ZIP.swift"; sourceTree = ""; }; 18F842408AB76A580B80255453F2FDF6 /* DTAccessibilityElement.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTAccessibilityElement.m; path = Core/Source/DTAccessibilityElement.m; sourceTree = ""; }; + 1961705269BD266F52EBD357EAE068A5 /* RDEPUBPageInteractionController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBPageInteractionController.swift; sourceTree = ""; }; + 1977F26E5E225E266FC92C775A41E1F3 /* RDEPUBMetadataParseWorker.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBMetadataParseWorker.swift; sourceTree = ""; }; 199E2ECC77BDAC03F644C20040F042D4 /* DTLog.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTLog.m; path = Core/Source/DTLog.m; sourceTree = ""; }; + 19D3A41F50CE425FA2929A6FBE743A84 /* RDEPUBChapterLocation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBChapterLocation.swift; sourceTree = ""; }; 1A88AA04D7B29A217B432C19AC48AB6B /* DTStylesheetHTMLElement.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTStylesheetHTMLElement.h; path = Core/Source/DTStylesheetHTMLElement.h; sourceTree = ""; }; 1AD502A1FA6EB1E38200B5283F979504 /* Pods-ReadViewDemo.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-ReadViewDemo.release.xcconfig"; sourceTree = ""; }; - 1C5CA885255B08C8AD10778C62071BCD /* RDEPUBChapterLocation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBChapterLocation.swift; sourceTree = ""; }; - 1D24B9DBA8D8A1B00CEF2E2238C16681 /* RDEPUBWebView+JavaScriptBridge.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBWebView+JavaScriptBridge.swift"; sourceTree = ""; }; - 1DD088C35A5559FEE1027DAE37417E3D /* RDEPUBSafeArea.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBSafeArea.swift; sourceTree = ""; }; + 1C3DEA097D20AC964CFB673C39B4A8AF /* RDReaderView-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "RDReaderView-dummy.m"; sourceTree = ""; }; + 1E381C002AE6ECE51B0B77AA5007FE27 /* RDEPUBReaderController+ExternalLinks.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBReaderController+ExternalLinks.swift"; sourceTree = ""; }; 1EF19AD0EF4889156D46061FB43E0F5D /* DTCoreTextFontDescriptor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTCoreTextFontDescriptor.h; path = Core/Source/DTCoreTextFontDescriptor.h; sourceTree = ""; }; + 1EF9571672022F0A84D66AC6E6F91305 /* RDEPUBReaderPaginationCoordinator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderPaginationCoordinator.swift; sourceTree = ""; }; 1F1F7BFB63DE15D627EB8F64829B8AAD /* NSURL+DTComparing.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSURL+DTComparing.h"; path = "Core/Source/NSURL+DTComparing.h"; sourceTree = ""; }; 1FA88D00B7B2B2F0BA98BB92DF035906 /* DTDictationPlaceholderView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTDictationPlaceholderView.m; path = Core/Source/DTDictationPlaceholderView.m; sourceTree = ""; }; - 1FE1D4A863768FC78F6B76B6A181267C /* RDReaderView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDReaderView.swift; sourceTree = ""; }; 2047430DF5C84E0A8FC8874A2B915FC3 /* Pods-ReadViewDemo-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-ReadViewDemo-acknowledgements.markdown"; sourceTree = ""; }; 207CC0EEB74CECEB43A870FF80560E0F /* DTLog.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTLog.h; path = Core/Source/DTLog.h; sourceTree = ""; }; - 2092D0DAEE6507B0B448DAA0A4888191 /* RDEPUBNavigatorLayoutContext.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBNavigatorLayoutContext.swift; sourceTree = ""; }; 214F0FC87DE99D3FCE69D98B357F3FFC /* DTCoreTextLayoutFrame+Cursor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "DTCoreTextLayoutFrame+Cursor.h"; path = "Core/Source/DTCoreTextLayoutFrame+Cursor.h"; sourceTree = ""; }; 21CCCCAAF832BE9C859BEDDC79B4E9E2 /* DTSmartPagingScrollView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTSmartPagingScrollView.h; path = Core/Source/iOS/DTSmartPagingScrollView.h; sourceTree = ""; }; 22B69C9433F2FBE5CE8409BD4266DFE8 /* Data+Compression.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Data+Compression.swift"; path = "Sources/ZIPFoundation/Data+Compression.swift"; sourceTree = ""; }; + 22FF6CAA8966DB1B4C14A695E355C881 /* RDEPUBReaderSettings.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderSettings.swift; sourceTree = ""; }; 23006DBAC610AEB0A4B3EAFEA4FB0567 /* DTTiledLayerWithoutFade.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTTiledLayerWithoutFade.m; path = Core/Source/iOS/DTTiledLayerWithoutFade.m; sourceTree = ""; }; 23588B63FC4026A371F5C683744A664C /* DTFoundation-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "DTFoundation-umbrella.h"; sourceTree = ""; }; 2361BC151481D2717ED43C5659725945 /* ZIPFoundation.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = ZIPFoundation.modulemap; sourceTree = ""; }; 2373DCA0FC45287BFC063BEA661B8367 /* Archive+WritingDeprecated.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Archive+WritingDeprecated.swift"; path = "Sources/ZIPFoundation/Archive+WritingDeprecated.swift"; sourceTree = ""; }; 238893C9CBD95CB9BDF069EB5A303E17 /* RDReaderView */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = RDReaderView; path = RDReaderView.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 252AFCFB40C36621E9C98C6644A56EE6 /* RDEPUBPageInteractionController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBPageInteractionController.swift; sourceTree = ""; }; - 254C03130C9163149B80FEBC8128119F /* RDEPUBImageViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBImageViewController.swift; sourceTree = ""; }; - 25C6A0883824F05CF90F21478E019975 /* RDEPUBRenderRequest.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBRenderRequest.swift; sourceTree = ""; }; + 24130F5639CFFFA28D8BE6C2BD7A45FE /* RDEPUBTextSearchEngine.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextSearchEngine.swift; sourceTree = ""; }; 25DDD76CA572F0C7AB5A8178CF80169D /* DTCoreTextFontCollection.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTCoreTextFontCollection.h; path = Core/Source/DTCoreTextFontCollection.h; sourceTree = ""; }; - 25E8E62C9DC0A4AE49F168F04CF8B9D3 /* rangy-serializer.js */ = {isa = PBXFileReference; includeInIndex = 1; name = "rangy-serializer.js"; path = "Sources/RDReaderView/EPUBCore/Resources/rangy-serializer.js"; sourceTree = ""; }; 27372A23AA4B051867E7D2C749D1DE81 /* DTImageTextAttachment.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTImageTextAttachment.h; path = Core/Source/DTImageTextAttachment.h; sourceTree = ""; }; - 2739EAD69AB2F5F6FA80E254D294440D /* RDPlainTextBookBuilder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDPlainTextBookBuilder.swift; sourceTree = ""; }; - 277A48279BD4FD22C6C552AAC4F282B2 /* RDEPUBReaderSettings.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderSettings.swift; sourceTree = ""; }; + 27FE2A0ABB2E40A2D8D3B4BDECE106A7 /* RDEPUBTextContentView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextContentView.swift; sourceTree = ""; }; 288589D0B52F73505B43C743D9837578 /* Entry+ZIP64.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Entry+ZIP64.swift"; path = "Sources/ZIPFoundation/Entry+ZIP64.swift"; sourceTree = ""; }; - 29075A60F0C3B46C5143EC971A0D16D4 /* RDEPUBReaderController+PublicAPI.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBReaderController+PublicAPI.swift"; sourceTree = ""; }; - 29D1AFEDD39DE3A55D023DCF1DD8E100 /* RDEPUBResourceResolver.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBResourceResolver.swift; sourceTree = ""; }; + 29DE76CD63BD47DC86DF55C349B1CF91 /* RDEPUBFontFallbackResolver.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBFontFallbackResolver.swift; sourceTree = ""; }; 29DEA4D201BB179BB6E228E9F688CD4C /* UIView+DTFoundation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+DTFoundation.h"; path = "Core/Source/iOS/UIView+DTFoundation.h"; sourceTree = ""; }; + 2AACA59CA4CBD2AFAACC3D162C2C75B5 /* RDEPUBParser.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBParser.swift; sourceTree = ""; }; + 2B73CF24646475E517B8FDF110972E77 /* RDReaderView.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = RDReaderView.release.xcconfig; sourceTree = ""; }; + 2B7FCEEAD833F7C1706659E688B09BEA /* RDEPUBRenderDiagnosticsCollector.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBRenderDiagnosticsCollector.swift; sourceTree = ""; }; 2C1A7359A45BB880877A672C57F522FE /* DTCoreGraphicsUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTCoreGraphicsUtils.h; path = Core/Source/DTCoreGraphicsUtils.h; sourceTree = ""; }; - 2E281F0688B1D356CF1654C6063AE77D /* RDReaderView+PageCurl.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDReaderView+PageCurl.swift"; sourceTree = ""; }; - 2EDB136931B7075E5A4F6BD8E5E2DBE6 /* RDEPUBReaderContext.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderContext.swift; sourceTree = ""; }; + 2D80571A5CC74FDE8F5CE6E70B50023F /* RDEPUBRuntimeChapter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBRuntimeChapter.swift; sourceTree = ""; }; + 2EBD41467F344F6091AD0C1A3981EDC3 /* cssInjector.js */ = {isa = PBXFileReference; includeInIndex = 1; name = cssInjector.js; path = Sources/RDReaderView/EPUBCore/Resources/cssInjector.js; sourceTree = ""; }; 2F242FC1357DD90FA4FD67E1DB90A837 /* NSCharacterSet+HTML.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSCharacterSet+HTML.m"; path = "Core/Source/NSCharacterSet+HTML.m"; sourceTree = ""; }; - 2F34FF3B7E71CCE4E9C73115AA710B1C /* RDEPUBTextBookModels.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextBookModels.swift; sourceTree = ""; }; - 2F653BA6E911AE149EB7FF7471D9D9BD /* RDEPUBParser+Archive.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBParser+Archive.swift"; sourceTree = ""; }; 2F75437CE9F9324D315E417014797C1D /* DTExtendedFileAttributes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTExtendedFileAttributes.h; path = Core/Source/DTExtendedFileAttributes.h; sourceTree = ""; }; - 2FBB458EDD978CBC54464EA28336F977 /* RDEPUBCFIRecoveryEngine.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBCFIRecoveryEngine.swift; sourceTree = ""; }; - 2FCEDA49EDECD7CEEEF8A65685B9870A /* RDEPUBPaginationModels.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBPaginationModels.swift; sourceTree = ""; }; - 3008F6944BA740CD6E6F5CA33733C911 /* RDEPUBPaginationCacheCoordinator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBPaginationCacheCoordinator.swift; sourceTree = ""; }; + 2F899D2164D781FF192129E1C659613F /* RDEPUBDarkImageAdjuster.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBDarkImageAdjuster.swift; sourceTree = ""; }; + 2FA2158447C66C1AA074403C4AEF1BD9 /* RDEPUBPublication.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBPublication.swift; sourceTree = ""; }; 3046397381A83C2F6BAF344B86AD176E /* NSMutableArray+DTMoving.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSMutableArray+DTMoving.h"; path = "Core/Source/NSMutableArray+DTMoving.h"; sourceTree = ""; }; 306477706BBB1E784F55BCF8EB1AD737 /* Pods-ReadViewDemo.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-ReadViewDemo.debug.xcconfig"; sourceTree = ""; }; 30EB4CF4AD4114DE53786C318621EB19 /* NSAttributedStringRunDelegates.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = NSAttributedStringRunDelegates.h; path = Core/Source/NSAttributedStringRunDelegates.h; sourceTree = ""; }; - 30EE98BBC2688DFF0B50F9C417007886 /* RDEPUBCSSCompatibilityLayer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBCSSCompatibilityLayer.swift; sourceTree = ""; }; - 32AD569BCA384A60FC2E1E08CE3529AD /* RDEPUBWebView+Reflowable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBWebView+Reflowable.swift"; sourceTree = ""; }; - 3424A6DFBC2AC519C7C599F18DCDC89D /* RDEPUBTypesettingPipeline.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTypesettingPipeline.swift; sourceTree = ""; }; + 314E39CF7ADE645354AC8873D80957CA /* RDEPUBReadingSession.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReadingSession.swift; sourceTree = ""; }; + 315243CD0784D4E8AF97453BF5848904 /* RDEPUBReaderTableOfContentsItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderTableOfContentsItem.swift; sourceTree = ""; }; + 317357794EF461FA4C6992E798C900DF /* RDEPUBChapterData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBChapterData.swift; sourceTree = ""; }; + 31B49361D4C4F119B135F85B7A8219DB /* RDEPUBParser+ReadingProfile.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBParser+ReadingProfile.swift"; sourceTree = ""; }; + 31C306314EF985A32E583A25AAA39960 /* RDEPUBReaderController+DataSource.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBReaderController+DataSource.swift"; sourceTree = ""; }; + 321FA16FF2FAD7985CCAC14EF5A221D4 /* RDEPUBWebView+JavaScriptBridge.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBWebView+JavaScriptBridge.swift"; sourceTree = ""; }; + 328AA616EE25AB53BFB60EFE1C7AAFCE /* RDEPUBChapterPageCounter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBChapterPageCounter.swift; sourceTree = ""; }; + 33452E6D078F6CC1EF8A17DF42966CAA /* RDReaderPageChildViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDReaderPageChildViewController.swift; sourceTree = ""; }; + 33643E88B779A3DB1B3A14C7A194045B /* RDEPUBTextBookModels.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextBookModels.swift; sourceTree = ""; }; + 3416C45A5E4AEF922A7D3804F0A05EB4 /* RDEPUBReaderController+ContentDelegates.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBReaderController+ContentDelegates.swift"; sourceTree = ""; }; 3453CFB9BDBF6F9D0937EDF5FB2BD07B /* NSURL+DTAppLinks.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSURL+DTAppLinks.m"; path = "Core/Source/iOS/NSURL+DTAppLinks.m"; sourceTree = ""; }; 35417EC94F2D58CB80C991F875CE15C2 /* DTBlockFunctions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTBlockFunctions.h; path = Core/Source/DTBlockFunctions.h; sourceTree = ""; }; 354C1C3A74DB75C8B8608D538212A963 /* DTStylesheetHTMLElement.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTStylesheetHTMLElement.m; path = Core/Source/DTStylesheetHTMLElement.m; sourceTree = ""; }; 3578B97A85BCDC60888FDF87B8F2600C /* NSString+CSS.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSString+CSS.h"; path = "Core/Source/NSString+CSS.h"; sourceTree = ""; }; - 361565CCC385512EA14A6A2C9CFAF08B /* RDEPUBStyleSheetComposer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBStyleSheetComposer.swift; sourceTree = ""; }; - 3667CE400B3A606C7BE2D736B10AB546 /* RDEPUBChapterDataCache.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBChapterDataCache.swift; sourceTree = ""; }; + 35803D654BE44326A28A0947DD178B63 /* RDEPUBCFIRecoveryEngine.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBCFIRecoveryEngine.swift; sourceTree = ""; }; + 3652433CDE5ACCD783B54CBDD0CBB5C6 /* RDEPUBBackgroundTrace.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBBackgroundTrace.swift; sourceTree = ""; }; + 36606A851BDB5FFF6E9BFFDD7FB72455 /* RDReaderView-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "RDReaderView-umbrella.h"; sourceTree = ""; }; + 36BCDC7F25B3DB9F7FC2F681DD27B93E /* RDEPUBTextSelectionController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextSelectionController.swift; sourceTree = ""; }; 37327141DC73DE2D5742BE6F989094CE /* DTCoreTextLayoutLine.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTCoreTextLayoutLine.h; path = Core/Source/DTCoreTextLayoutLine.h; sourceTree = ""; }; - 38459BA6DDC11AC3B9574C4E48F48ADC /* RDEPUBFixedLayoutTemplate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBFixedLayoutTemplate.swift; sourceTree = ""; }; 3985FED7BD8EC49191663BEF73FB2C79 /* NSAttributedString+DTCoreText.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSAttributedString+DTCoreText.h"; path = "Core/Source/NSAttributedString+DTCoreText.h"; sourceTree = ""; }; 398DC798680E2CA64D46B9E19B380356 /* UIFont+DTCoreText.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIFont+DTCoreText.h"; path = "Core/Source/UIFont+DTCoreText.h"; sourceTree = ""; }; 399AED6BF151EC39BE4450784795A832 /* DTAccessibilityViewProxy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTAccessibilityViewProxy.h; path = Core/Source/DTAccessibilityViewProxy.h; sourceTree = ""; }; 3A6A858B976D032A3C61540AFF19DEE4 /* NSURL+DTUnshorten.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSURL+DTUnshorten.m"; path = "Core/Source/NSURL+DTUnshorten.m"; sourceTree = ""; }; - 3C4658670F6EBD43067CF1D859518D23 /* RDEPUBReaderTableOfContentsItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderTableOfContentsItem.swift; sourceTree = ""; }; + 3AF63806C4793F384C4CF28201BC756C /* WeReadApi.js */ = {isa = PBXFileReference; includeInIndex = 1; name = WeReadApi.js; path = Sources/RDReaderView/EPUBCore/Resources/WeReadApi.js; sourceTree = ""; }; + 3B35A0451D9A3CF5477258E38D363189 /* RDEPUBTextRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextRenderer.swift; sourceTree = ""; }; + 3CF48E002B64BF7AF8BDBEB9A572C13F /* RDEPUBReaderContext.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderContext.swift; sourceTree = ""; }; 3DAC9D3802A9F165B2F6B09C2DCF0EB7 /* ResourceBundle-ZIPFoundation_Privacy-ZIPFoundation-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-ZIPFoundation_Privacy-ZIPFoundation-Info.plist"; sourceTree = ""; }; - 3ECA70C45BE80D444EBFE0DA40424702 /* RDURLReaderController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDURLReaderController.swift; sourceTree = ""; }; 3EFAE8DFDDEA1E6047289C86D66381C0 /* DTAttributedLabel.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTAttributedLabel.m; path = Core/Source/DTAttributedLabel.m; sourceTree = ""; }; - 3F6776D2868DE1A8CAC80752CB023567 /* RDEPUBReaderEnvironment.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderEnvironment.swift; sourceTree = ""; }; 40FD7C9E2E05FB4A73F4C4C70A3AFAF0 /* DTCSSListStyle.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTCSSListStyle.m; path = Core/Source/DTCSSListStyle.m; sourceTree = ""; }; - 418CF402E2B3A6359A720876AF83E1F3 /* RDEPUBCFIResolver.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBCFIResolver.swift; sourceTree = ""; }; - 427D3D938726077995A928BFEDDC6632 /* RDEPUBCFIMap.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBCFIMap.swift; sourceTree = ""; }; + 40FFA046E3AFCD87D8592AEFB6CFD987 /* RDEPUBSelectionOverlayView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBSelectionOverlayView.swift; sourceTree = ""; }; + 410C5BB742936BFF1A02BAB0970CAF34 /* RDReaderContentCell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDReaderContentCell.swift; sourceTree = ""; }; + 422DAC763888F8667708F7B66F9C701E /* RDEPUBPaginationModels.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBPaginationModels.swift; sourceTree = ""; }; + 43197856E7D06A21EF9B252FD37456A5 /* RDEPUBParser+TOC.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBParser+TOC.swift"; sourceTree = ""; }; 44133205D7FD87B481BF89EA607CA7A4 /* ZIPFoundation-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ZIPFoundation-Info.plist"; sourceTree = ""; }; - 44369E6800A89D0C5818CA884729D20F /* RDEPUBReaderController+ContentDelegates.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBReaderController+ContentDelegates.swift"; sourceTree = ""; }; 4472755F83C121DE5E1E505D145F6DBE /* CoreText.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreText.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS18.0.sdk/System/Library/Frameworks/CoreText.framework; sourceTree = DEVELOPER_DIR; }; 4476B58B93EE7476A4762FE0E26E8178 /* DTCoreTextLayoutFrameAccessibilityElementGenerator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTCoreTextLayoutFrameAccessibilityElementGenerator.m; path = Core/Source/DTCoreTextLayoutFrameAccessibilityElementGenerator.m; sourceTree = ""; }; - 45441D548F125483949D77F61F85AFE3 /* RDEPUBNotePopupViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBNotePopupViewController.swift; sourceTree = ""; }; + 4537790EA93442CD0FA48609D7ADDD13 /* RDEPUBReaderHighlightsViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderHighlightsViewController.swift; sourceTree = ""; }; 4544C4444DCA90E700611D1281969883 /* DTColorFunctions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTColorFunctions.m; path = Core/Source/DTColorFunctions.m; sourceTree = ""; }; - 455F46F5F9EA1B2EAF47E54361B9E5F1 /* RDEPUBReaderViewportMonitor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderViewportMonitor.swift; sourceTree = ""; }; 45A67761829BBB3974CE24FE50E459EA /* NSDictionary+DTError.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSDictionary+DTError.m"; path = "Core/Source/NSDictionary+DTError.m"; sourceTree = ""; }; 4641C3C93CE32054665ACF80457A7A94 /* DTCoreTextLayoutFrame.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTCoreTextLayoutFrame.m; path = Core/Source/DTCoreTextLayoutFrame.m; sourceTree = ""; }; - 4646F47318195C5CDADF0D93A4A2FC91 /* RDEPUBModels.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBModels.swift; sourceTree = ""; }; 467CC59CEC3B3BC7ACDCA776FDCBDC1D /* NSURL+DTComparing.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSURL+DTComparing.m"; path = "Core/Source/NSURL+DTComparing.m"; sourceTree = ""; }; 47DC174612C98B2CFB4E7D158169139E /* default.css */ = {isa = PBXFileReference; includeInIndex = 1; name = default.css; path = Core/Source/default.css; sourceTree = ""; }; + 482C32ED3E6D23BBCED7BBE64E370A91 /* RDEPUBParser+Archive.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBParser+Archive.swift"; sourceTree = ""; }; 48A4A6EDC08C8AC933D0DCD507E9D173 /* ZIPFoundation */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = ZIPFoundation; path = ZIPFoundation.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 4917E08E6E59460594AC443EDDAB7E77 /* DTCoreTextFunctions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTCoreTextFunctions.m; path = Core/Source/DTCoreTextFunctions.m; sourceTree = ""; }; 4944FE0BE3205F2EC91A6A0550D30B75 /* DTTextAttachment.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTTextAttachment.m; path = Core/Source/DTTextAttachment.m; sourceTree = ""; }; + 499C327E148794A7F09BAF1C83BE59EF /* RDReaderView+PageCurl.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDReaderView+PageCurl.swift"; sourceTree = ""; }; 499E135F1FEB31C26EB0EF793A90086C /* UIImage+DTFoundation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+DTFoundation.m"; path = "Core/Source/iOS/UIImage+DTFoundation.m"; sourceTree = ""; }; - 4C0AFCECD74F73D7D40C6F3053AF6FEE /* RDEPUBCFI.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBCFI.swift; sourceTree = ""; }; + 49DF44BF9FBD9CCC9CDE0A998C428D86 /* RDEPUBCFIDOMPathBuilder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBCFIDOMPathBuilder.swift; sourceTree = ""; }; + 4AAC2FDC24D8604A39BD25111689D06A /* RDEPUBWebView+Reflowable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBWebView+Reflowable.swift"; sourceTree = ""; }; 4C2B218B5EAA5831A036BBF7E1EFC1B9 /* MediaPlayer.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MediaPlayer.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS18.0.sdk/System/Library/Frameworks/MediaPlayer.framework; sourceTree = DEVELOPER_DIR; }; - 4C4682C38E0A66C0E9760FC62C00A327 /* RDReaderView+CollectionView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDReaderView+CollectionView.swift"; sourceTree = ""; }; - 4CDD971696985E60155A09E16CD844C5 /* RDEPUBReaderController+AttachmentTooltip.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBReaderController+AttachmentTooltip.swift"; sourceTree = ""; }; + 4DFBB7A0C649F48591647E3C08CE6852 /* String+RDEPUB.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "String+RDEPUB.swift"; sourceTree = ""; }; 4E1066A8FE63AD2C818E26DDCE62DF58 /* DTHTMLAttributedStringBuilder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTHTMLAttributedStringBuilder.h; path = Core/Source/DTHTMLAttributedStringBuilder.h; sourceTree = ""; }; + 4F5A145710C3E212B771C4E38BED9926 /* wxread-replace-latin.css */ = {isa = PBXFileReference; includeInIndex = 1; name = "wxread-replace-latin.css"; path = "Sources/RDReaderView/EPUBCore/Resources/wxread-replace-latin.css"; sourceTree = ""; }; + 4F60D4A5E3A44B1AB998E185EFF5C046 /* RDEPUBReaderTheme.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderTheme.swift; sourceTree = ""; }; + 4FAD41FF83513826720C6497B7A818B6 /* RDEPUBNotePopupCoordinator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBNotePopupCoordinator.swift; sourceTree = ""; }; 4FF4A2A7F2C7CFB5DD757BE1A6E59C7B /* CTLineUtils.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = CTLineUtils.m; path = Core/Source/CTLineUtils.m; sourceTree = ""; }; 5001C74FB9506AEC71E458047698A4AB /* DTHTMLParserNode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTHTMLParserNode.m; path = Core/Source/DTHTMLParserNode.m; sourceTree = ""; }; - 5077339D9632D68EDAB64BBEF622E154 /* RDEPUBStyleCompatibilityModels.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBStyleCompatibilityModels.swift; sourceTree = ""; }; + 505D658FEB22042EEDC51D402700F8C9 /* RDEPUBDTCoreTextRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBDTCoreTextRenderer.swift; sourceTree = ""; }; 5096458D9BD2818F786BC3B61B91EAC7 /* NSAttributedString+DTDebug.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSAttributedString+DTDebug.m"; path = "Core/Source/NSAttributedString+DTDebug.m"; sourceTree = ""; }; + 50BEBB47FE6ED062DE6363BFDCC7D84C /* RDEPUBReaderSearchBarView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderSearchBarView.swift; sourceTree = ""; }; 50C2868064310B16D2B5FD9901C846DC /* DTVideoTextAttachment.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTVideoTextAttachment.h; path = Core/Source/DTVideoTextAttachment.h; sourceTree = ""; }; - 517D111957FC986C0BE0281CA89159AF /* RDEPUBAnnotationModels.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBAnnotationModels.swift; sourceTree = ""; }; 519087D9CD0F5E440E6D2C3B1AA1DFA2 /* DTBase64Coding.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTBase64Coding.h; path = Core/Source/DTBase64Coding.h; sourceTree = ""; }; 5193541848D2D1BF115A45D8A730611C /* Archive+ReadingDeprecated.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Archive+ReadingDeprecated.swift"; path = "Sources/ZIPFoundation/Archive+ReadingDeprecated.swift"; sourceTree = ""; }; 52053ABC9CD3D4A72CD8A22173428AEB /* NSMutableString+HTML.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSMutableString+HTML.h"; path = "Core/Source/NSMutableString+HTML.h"; sourceTree = ""; }; - 52E599D70519E92FCD9A508E1C821637 /* RDEPUBPreferences.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBPreferences.swift; sourceTree = ""; }; - 53B7AB6E967C804E556A13DA6CC254A0 /* RDEPUBTextPageDecorationView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextPageDecorationView.swift; sourceTree = ""; }; - 545DD46BEAB1D1F7E0530E787095FCB2 /* RDEPUBFontNormalizer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBFontNormalizer.swift; sourceTree = ""; }; - 54F135677B8806216984881B2333BF4E /* RDEPUBCFIDOMPathBuilder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBCFIDOMPathBuilder.swift; sourceTree = ""; }; + 523F6E31441155AAFAC1E88316C623A4 /* RDEPUBBookPageMap.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBBookPageMap.swift; sourceTree = ""; }; + 52816DCF8A866861EFF13A58D6D32CA8 /* RDEPUBReaderTopToolView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderTopToolView.swift; sourceTree = ""; }; + 528643F4F0CD2FEC7AD5C0ACA9895D9D /* RDEPUBPaginationCacheCoordinator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBPaginationCacheCoordinator.swift; sourceTree = ""; }; + 5514CEBB75D8BFFC1D1CA08E8E46BE62 /* RDReaderView-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "RDReaderView-prefix.pch"; sourceTree = ""; }; 55423549E54A01F039B5F379B264C73F /* UIApplication+DTNetworkActivity.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIApplication+DTNetworkActivity.h"; path = "Core/Source/iOS/UIApplication+DTNetworkActivity.h"; sourceTree = ""; }; 558FCD3F7E481B782EBFA127486ED15D /* DTHTMLParserTextNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTHTMLParserTextNode.h; path = Core/Source/DTHTMLParserTextNode.h; sourceTree = ""; }; 55B9309F0BDDDE2C3EE13C97BF2C0F1E /* Archive+Helpers.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Archive+Helpers.swift"; path = "Sources/ZIPFoundation/Archive+Helpers.swift"; sourceTree = ""; }; - 55CA6158EBEFCD459EB481660A12EB86 /* RDReaderView.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = RDReaderView.release.xcconfig; sourceTree = ""; }; - 56158B68400B5C946109EDFD7555A8A7 /* RDEPUBReaderUIState.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderUIState.swift; sourceTree = ""; }; + 564F072D0966350F4C3986E01EB3EB2C /* RDEPUBRenderRequest.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBRenderRequest.swift; sourceTree = ""; }; + 56A9260F17C4825708B83598BEC99365 /* RDReaderFlowLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDReaderFlowLayout.swift; sourceTree = ""; }; 56E8939081946D090FD77A04F879754C /* DTExtendedFileAttributes.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTExtendedFileAttributes.m; path = Core/Source/DTExtendedFileAttributes.m; sourceTree = ""; }; - 570429F8DD1951A554862120993C46B1 /* RDEPUBReaderChapterListController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderChapterListController.swift; sourceTree = ""; }; 57642B518C047A428FE1266A09E0513F /* DTImageTextAttachment.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTImageTextAttachment.m; path = Core/Source/DTImageTextAttachment.m; sourceTree = ""; }; - 579B1DD9DCEE9A1C8B88EB7D4FC7328B /* RDEPUBRuntimeChapter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBRuntimeChapter.swift; sourceTree = ""; }; - 58C72D7DF4220C0907CE8795E8900E79 /* RDEPUBParser+ReadingProfile.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBParser+ReadingProfile.swift"; sourceTree = ""; }; - 59036F71583DAE2641D9DAA567DBD208 /* RDEPUBTextBuildPipelineInterfaces.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextBuildPipelineInterfaces.swift; sourceTree = ""; }; + 587C2E270D5414FF4E3786D14BD36694 /* RDEPUBFragmentMarkerInjector.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBFragmentMarkerInjector.swift; sourceTree = ""; }; 5977986EDFE76D5EF96A6D95483B12F7 /* Pods-ReadViewDemo-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-ReadViewDemo-frameworks.sh"; sourceTree = ""; }; 599172147A32B6978EB5AAE1BE55FF7A /* DTAnchorHTMLElement.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTAnchorHTMLElement.h; path = Core/Source/DTAnchorHTMLElement.h; sourceTree = ""; }; - 5B4081F4EC77470F1257F11DB2A4B55D /* RDEPUBTextRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextRenderer.swift; sourceTree = ""; }; - 5B4EAD9C5D3D276887E0AC6A35F10659 /* RDEPUBViewportTypes.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBViewportTypes.swift; sourceTree = ""; }; + 5B5686B2CD1ADB2443ECF94B15903873 /* RDEPUBResourceURLSchemeHandler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBResourceURLSchemeHandler.swift; sourceTree = ""; }; 5C3D91FFA65414A2787FEB95576E0097 /* DTCompatibility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTCompatibility.h; path = Core/Source/DTCompatibility.h; sourceTree = ""; }; 5C891B983F0CC956CAE3978A15875819 /* NSDictionary+DTCoreText.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSDictionary+DTCoreText.h"; path = "Core/Source/NSDictionary+DTCoreText.h"; sourceTree = ""; }; 5D146C3F4B7878B5CE8EFF38765580C2 /* DTAccessibilityElement.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTAccessibilityElement.h; path = Core/Source/DTAccessibilityElement.h; sourceTree = ""; }; 5DB480D0B78911DBF96986E64A714907 /* DTListItemHTMLElement.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTListItemHTMLElement.h; path = Core/Source/DTListItemHTMLElement.h; sourceTree = ""; }; - 5DE569B9F47EAF5135750BCF2E934C0F /* RDEPUBReaderController+LocationResolution.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBReaderController+LocationResolution.swift"; sourceTree = ""; }; - 5E5956AA678A9521257D99891E823DE2 /* RDEPUBReaderHighlightsViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderHighlightsViewController.swift; sourceTree = ""; }; - 5E8C914D69561C6C9736FCB3C6698CCC /* RDEPUBFragmentMarkerInjector.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBFragmentMarkerInjector.swift; sourceTree = ""; }; - 5E958924060294CE9417399BB02AB344 /* epub-fixed-layout.html */ = {isa = PBXFileReference; includeInIndex = 1; name = "epub-fixed-layout.html"; path = "Sources/RDReaderView/EPUBCore/Resources/epub-fixed-layout.html"; sourceTree = ""; }; - 5F41DCAB71A589008105D8C3AB0F8878 /* RDEPUBWebView+FixedLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBWebView+FixedLayout.swift"; sourceTree = ""; }; - 5F9FE9924520900BBDF724D9903C5309 /* RDEPUBFontFallbackResolver.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBFontFallbackResolver.swift; sourceTree = ""; }; - 61A1D30B96ADD9D1660073E9207329CF /* RDEPUBReaderDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderDelegate.swift; sourceTree = ""; }; + 5E000FE659A8C4AE6C55AE7B9CC951AA /* RDEPUBTextRendererSupport.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextRendererSupport.swift; sourceTree = ""; }; + 5EB2B007B49D93FC696248480F4CB984 /* RDEPUBBackgroundCoverageStore.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBBackgroundCoverageStore.swift; sourceTree = ""; }; + 5F3B770A5B6ED1C21FDA2BD1A8B06EE6 /* RDEPUBCSSCompatibilityLayer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBCSSCompatibilityLayer.swift; sourceTree = ""; }; + 5F81C81E7CF8B0AE4646712FC2ADD8B0 /* RDEPUBTextAnchor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextAnchor.swift; sourceTree = ""; }; + 60FB0E099208100165A2E44F44CA76B1 /* RDEPUBReaderLocationCoordinator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderLocationCoordinator.swift; sourceTree = ""; }; 61B18088896D291E0CE7718DFE82FAC1 /* DTListItemHTMLElement.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTListItemHTMLElement.m; path = Core/Source/DTListItemHTMLElement.m; sourceTree = ""; }; + 63A75BF0478FAC7398F5E66A509F639D /* RDEPUBAttachmentNormalizer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBAttachmentNormalizer.swift; sourceTree = ""; }; + 63D23A912F5F91D0D3D83DF9E05515D0 /* RDEPUBFontNormalizer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBFontNormalizer.swift; sourceTree = ""; }; + 64254678E1440D40D4BC39AE8B62BB27 /* RDEPUBChapterWarmupOrchestrator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBChapterWarmupOrchestrator.swift; sourceTree = ""; }; 6430501430329643C8280B3985C48711 /* URL+ZIP.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "URL+ZIP.swift"; path = "Sources/ZIPFoundation/URL+ZIP.swift"; sourceTree = ""; }; - 648D6AC5A8FA53918EDB418D8A36710E /* RDReaderView+ToolView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDReaderView+ToolView.swift"; sourceTree = ""; }; + 64676B6C8A9F9195A481010213F37B6C /* epub-bridge.js */ = {isa = PBXFileReference; includeInIndex = 1; name = "epub-bridge.js"; path = "Sources/RDReaderView/EPUBCore/Resources/epub-bridge.js"; sourceTree = ""; }; + 65572083A10EE0C48AA7F493F923BCC0 /* RDEPUBPaginator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBPaginator.swift; sourceTree = ""; }; 662D30C1E74D1D5122921475F4024F73 /* DTActivityTitleView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTActivityTitleView.m; path = Core/Source/iOS/DTActivityTitleView.m; sourceTree = ""; }; - 66D0B6D4C75424B340D7C9861D7DF6F6 /* RDEPUBReaderConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderConfiguration.swift; sourceTree = ""; }; 671C2429406FDB36B677F4B6EC85B52F /* DTCoreTextLayoutFrameAccessibilityElementGenerator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTCoreTextLayoutFrameAccessibilityElementGenerator.h; path = Core/Source/DTCoreTextLayoutFrameAccessibilityElementGenerator.h; sourceTree = ""; }; - 6777CA743F90F1D44EE010F6ED6A1F7F /* RDEPUBReaderSettingsViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderSettingsViewController.swift; sourceTree = ""; }; + 677182E8663D93C2C9E5617999F649C7 /* RDEPUBResourceResolver.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBResourceResolver.swift; sourceTree = ""; }; 67DA49B61A249C2B8241D8FE166608C9 /* UIView+DTFoundation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+DTFoundation.m"; path = "Core/Source/iOS/UIView+DTFoundation.m"; sourceTree = ""; }; - 68A8597AE94ED09E9828E2EEA0D8FFFA /* RDEPUBChapterTailNormalizer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBChapterTailNormalizer.swift; sourceTree = ""; }; + 685FE9B1A888D8D05E9AC049787CBC8D /* RDEPUBAnnotationModels.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBAnnotationModels.swift; sourceTree = ""; }; 68D81DF1BB2A14F9C186F75BBA5CF50D /* DTColor+Compatibility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "DTColor+Compatibility.h"; path = "Core/Source/DTColor+Compatibility.h"; sourceTree = ""; }; 69076FC9D4201719C319547346DA3E21 /* DTTextHTMLElement.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTTextHTMLElement.m; path = Core/Source/DTTextHTMLElement.m; sourceTree = ""; }; + 696C8561F8104D867B50A79E1147DE02 /* RDEPUBTextBookCache.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextBookCache.swift; sourceTree = ""; }; 6AC1E707308CDBC9FFC09CECE3117A9A /* DTAccessibilityViewProxy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTAccessibilityViewProxy.m; path = Core/Source/DTAccessibilityViewProxy.m; sourceTree = ""; }; - 6B24B2EBB40F90487F5EF3A6451834A8 /* RDEPUBSearchEngine.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBSearchEngine.swift; sourceTree = ""; }; - 6B2DF9409FC76691EAC579DDF7247899 /* RDEPUBReaderController+RuntimeBridge.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBReaderController+RuntimeBridge.swift"; sourceTree = ""; }; + 6B9450CAB183FFD7F4018D819E02321C /* RDEPUBReaderChromeCoordinator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderChromeCoordinator.swift; sourceTree = ""; }; 6C3F8DF48C6EB28BFD05F5BB49793DDA /* FileManager+ZIP.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "FileManager+ZIP.swift"; path = "Sources/ZIPFoundation/FileManager+ZIP.swift"; sourceTree = ""; }; - 6C906FDE0E26C697C4D2FB2502F7D798 /* RDEPUBNotePopupCoordinator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBNotePopupCoordinator.swift; sourceTree = ""; }; 6D2316F422A6C97F95F9CF43E6F8E94F /* DTBlockFunctions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTBlockFunctions.m; path = Core/Source/DTBlockFunctions.m; sourceTree = ""; }; + 6D5537F73FD04F43BE1E354A25710C9E /* RDEPUBChapterLoader.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBChapterLoader.swift; sourceTree = ""; }; 6E21B10EE150F00F245D297EAB7F2BA2 /* NSNumber+RomanNumerals.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSNumber+RomanNumerals.m"; path = "Core/Source/NSNumber+RomanNumerals.m"; sourceTree = ""; }; - 6E7E8438D5E5533B7BE96AC6FA8FD8BD /* wxread-replace-latin.css */ = {isa = PBXFileReference; includeInIndex = 1; name = "wxread-replace-latin.css"; path = "Sources/RDReaderView/EPUBCore/Resources/wxread-replace-latin.css"; sourceTree = ""; }; - 6F4858380CB626A893FA6803F5574F89 /* RDEPUBBackgroundCoverageStore.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBBackgroundCoverageStore.swift; sourceTree = ""; }; - 7031B493810918D5B50450340CA6652B /* RDEPUBReaderAssemblyCoordinator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderAssemblyCoordinator.swift; sourceTree = ""; }; + 7045AD2296EB5CDE847902C39A59F370 /* RDEPUBReaderViewportMonitor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderViewportMonitor.swift; sourceTree = ""; }; + 7076326835119DD963CB9ABC0DF78460 /* UIColor+RDEPUBHex.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "UIColor+RDEPUBHex.swift"; sourceTree = ""; }; 71BBE6384315D7F00F5ECFFF67A85AF9 /* DTHTMLParser.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTHTMLParser.m; path = Core/Source/DTHTMLParser/DTHTMLParser.m; sourceTree = ""; }; + 71E8149D8D8A8F61C09D98F329F11CA0 /* RDEPUBSelectionState.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBSelectionState.swift; sourceTree = ""; }; 71EE0B4D4D1B3D0A55E903E7E0CA44E7 /* NSAttributedString+HTML.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSAttributedString+HTML.m"; path = "Core/Source/NSAttributedString+HTML.m"; sourceTree = ""; }; 720396ED306E768BAD28007D5E96B757 /* DTColorFunctions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTColorFunctions.h; path = Core/Source/DTColorFunctions.h; sourceTree = ""; }; 7203B4D9D997037E0F9D154A3B049738 /* DTAttributedTextContentView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTAttributedTextContentView.m; path = Core/Source/DTAttributedTextContentView.m; sourceTree = ""; }; 72225FB74594FCF18DA8064E7DB3947E /* DTCoreTextLayouter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTCoreTextLayouter.h; path = Core/Source/DTCoreTextLayouter.h; sourceTree = ""; }; 722AF38F5106ADDE6F98D282F886A769 /* DTCoreTextFontCollection.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTCoreTextFontCollection.m; path = Core/Source/DTCoreTextFontCollection.m; sourceTree = ""; }; - 72BE58BB9BF4DCDFDC6D5430AA2E82E9 /* RDEPUBTextBookBuilder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextBookBuilder.swift; sourceTree = ""; }; - 72C909891BE902A0BB13D4A142EE982F /* RDEPUBPresentationRuntime.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBPresentationRuntime.swift; sourceTree = ""; }; + 72F99D96321DF0F2BC595BC7B6A66EA2 /* RDEPUBStyleSheetBuilder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBStyleSheetBuilder.swift; sourceTree = ""; }; 730B56BC97DFF2B1E04DD2608055D9E0 /* UIApplication+DTNetworkActivity.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIApplication+DTNetworkActivity.m"; path = "Core/Source/iOS/UIApplication+DTNetworkActivity.m"; sourceTree = ""; }; 741D74BC489AF6715191F2A88E50B016 /* DTCoreText.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = DTCoreText.modulemap; sourceTree = ""; }; - 74CB908492A655C93144CB03E59A2CAB /* RDEPUBWebView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBWebView.swift; sourceTree = ""; }; 7503926237A4785CCB864B2BCD1F4C2B /* DTFoundation.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = DTFoundation.release.xcconfig; sourceTree = ""; }; 753994141ACB981C898B36B761321C23 /* NSCoder+DTCompatibility.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSCoder+DTCompatibility.m"; path = "Core/Source/NSCoder+DTCompatibility.m"; sourceTree = ""; }; + 75D73CEEFC4AA6AFA6EBF279221F5330 /* RDEPUBReaderController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderController.swift; sourceTree = ""; }; + 75F44A99D2304FE5397B4DCD6BABAF2B /* RDPlainTextBookBuilder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDPlainTextBookBuilder.swift; sourceTree = ""; }; 765A94769106D14615FFB30EE1BD5E65 /* Archive+BackingConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Archive+BackingConfiguration.swift"; path = "Sources/ZIPFoundation/Archive+BackingConfiguration.swift"; sourceTree = ""; }; 766227355308600EFC048F797274454A /* ZIPFoundation.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = ZIPFoundation.release.xcconfig; sourceTree = ""; }; - 76919E99E9F16C30FA06F643643AA997 /* RDReaderContentCell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDReaderContentCell.swift; sourceTree = ""; }; + 7667AF77CBF47AFAA7D5F190B16A51FF /* wxread-default.css */ = {isa = PBXFileReference; includeInIndex = 1; name = "wxread-default.css"; path = "Sources/RDReaderView/EPUBCore/Resources/wxread-default.css"; sourceTree = ""; }; 76C1831768CE55090EADD902B29B6CD1 /* Entry+Serialization.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Entry+Serialization.swift"; path = "Sources/ZIPFoundation/Entry+Serialization.swift"; sourceTree = ""; }; 771E0D5CBCBC013BF5780FEE5BBA81FF /* DTCoreTextGlyphRun.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTCoreTextGlyphRun.h; path = Core/Source/DTCoreTextGlyphRun.h; sourceTree = ""; }; + 77CF002A64746DB8BE37C9DC0941C805 /* RDEPUBReaderLoadCoordinator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderLoadCoordinator.swift; sourceTree = ""; }; 7805DFC2CB71F5B6BBF7891876360EFB /* NSAttributedString+HTML.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSAttributedString+HTML.h"; path = "Core/Source/NSAttributedString+HTML.h"; sourceTree = ""; }; 78887827FF15DE20865DF3A00660993B /* NSDictionary+DTCoreText.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSDictionary+DTCoreText.m"; path = "Core/Source/NSDictionary+DTCoreText.m"; sourceTree = ""; }; - 78C97EDF23543CE63904C4D8A066A7A1 /* RDEPUBTextPaginationSupport.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextPaginationSupport.swift; sourceTree = ""; }; + 78B43BA14CD70F5448082DE1EE73B034 /* RDEPUBSearchEngine.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBSearchEngine.swift; sourceTree = ""; }; + 78D2759A8A01919CE516A30C1A04B967 /* RDEPUBReaderAnnotationCoordinator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderAnnotationCoordinator.swift; sourceTree = ""; }; 78EA0DF405F8465A86BFD3DDFD2EC295 /* Pods-ReadViewDemo */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = "Pods-ReadViewDemo"; path = Pods_ReadViewDemo.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 796EF27FF6AA4B62367B6BD9CEBD85A8 /* DTCSSStylesheet.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTCSSStylesheet.h; path = Core/Source/DTCSSStylesheet.h; sourceTree = ""; }; 79D13938A04579CD1E9E042A39CC4D86 /* ZIPFoundation.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = ZIPFoundation.debug.xcconfig; sourceTree = ""; }; 7A13F9221A300A89F9F8D0A2AB1794BF /* DTCoreText.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = DTCoreText.release.xcconfig; sourceTree = ""; }; 7A4E9E54E556A72BC885CCC08B3791C1 /* DTHTMLElement.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTHTMLElement.m; path = Core/Source/DTHTMLElement.m; sourceTree = ""; }; - 7A971ECCC1DDFDE6D5417E949E3B1FD2 /* RDEPUBTextPositionConverter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextPositionConverter.swift; sourceTree = ""; }; + 7B0179A6B7825D9A269A8A50C2BCBDDB /* RDReaderView.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = RDReaderView.modulemap; sourceTree = ""; }; + 7BFC2AF3C2082F2A0D9950A1B8256229 /* RDEPUBImageViewerCoordinator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBImageViewerCoordinator.swift; sourceTree = ""; }; 7C80941DE172AF972D2247659684D93A /* NSString+DTUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSString+DTUtilities.h"; path = "Core/Source/NSString+DTUtilities.h"; sourceTree = ""; }; + 7CA5ED27523EC3D3AFC0F01E05891FBB /* RDEPUBChapterSummaryDiskCache.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBChapterSummaryDiskCache.swift; sourceTree = ""; }; 7CA72FA9A4F2F42A75C58325738A44AC /* NSMutableAttributedString+HTML.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSMutableAttributedString+HTML.m"; path = "Core/Source/NSMutableAttributedString+HTML.m"; sourceTree = ""; }; 7CFFB65C5D340A4B5C627B3EF02CD127 /* NSNumber+RomanNumerals.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSNumber+RomanNumerals.h"; path = "Core/Source/NSNumber+RomanNumerals.h"; sourceTree = ""; }; 7D4062C36BA5FFBAE9122CAD0DCEC6B6 /* DTCoreText-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "DTCoreText-prefix.pch"; sourceTree = ""; }; 7D8AE4BEBD1998839BA83AD05CA6CAC5 /* DTBreakHTMLElement.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTBreakHTMLElement.m; path = Core/Source/DTBreakHTMLElement.m; sourceTree = ""; }; - 7DFE7162E90DAF71A557E4822C252E4F /* RDEPUBReaderSearchBarView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderSearchBarView.swift; sourceTree = ""; }; - 7F8C64CB3F3D0B7D4AA66798C740CB20 /* RDEPUBTextLayouter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextLayouter.swift; sourceTree = ""; }; - 80A3A50AC272F9C52395F4818E87EA19 /* RDReaderView.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = RDReaderView.podspec; sourceTree = ""; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; - 81211446372A6A55789AA7E7152E7084 /* RDEPUBCoreTextPageFrameFactory.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBCoreTextPageFrameFactory.swift; sourceTree = ""; }; + 7FDE14B76D550FCBD28D3B30AA9D883D /* RDEPUBReaderBottomToolView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderBottomToolView.swift; sourceTree = ""; }; + 80F1F9A3C3AD1C55622B17CA5D503766 /* RDEPUBTextIndexTable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextIndexTable.swift; sourceTree = ""; }; 814315319ED50AF916C3C8A68C0A47A0 /* DTAttributedTextCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTAttributedTextCell.m; path = Core/Source/DTAttributedTextCell.m; sourceTree = ""; }; - 82BD20A4273D9C421228620048787AD0 /* RDEPUBStyleSheetBuilder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBStyleSheetBuilder.swift; sourceTree = ""; }; + 82B54A69DF5E94D0D1B34E9D31C0D997 /* RDReaderPreloadController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDReaderPreloadController.swift; sourceTree = ""; }; + 8300EA716892548FEA44EC27801F5987 /* RDEPUBTextPerformanceSampler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextPerformanceSampler.swift; sourceTree = ""; }; + 83041D1E40ECC246DB5539C712499A09 /* RDReaderView+ToolView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDReaderView+ToolView.swift"; sourceTree = ""; }; 83410CC9CF2ABE63B90A92F2F988BF65 /* RDReaderView-RDReaderViewAssets */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; name = "RDReaderView-RDReaderViewAssets"; path = RDReaderViewAssets.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; - 83E9A6D890549C856C0277BE3A9B01A4 /* RDEPUBBookPageMap.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBBookPageMap.swift; sourceTree = ""; }; - 842DE3099F95A155AF00FCEC57A65821 /* RDEPUBMetadataParseCancellationController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBMetadataParseCancellationController.swift; sourceTree = ""; }; - 843CB00ED0D033E72DD79F0B27BE82E0 /* RDEPUBWebView+Configuration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBWebView+Configuration.swift"; sourceTree = ""; }; - 8514F67C3335EEA160B6A502DC380C6B /* RDEPUBPaginator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBPaginator.swift; sourceTree = ""; }; + 842B11843F82FBEA1D725543ACAB02CE /* RDEPUBCFIRange.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBCFIRange.swift; sourceTree = ""; }; + 848DA9852FDF80FAB067E383E1D650C1 /* RDEPUBPageLayoutSnapshot.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBPageLayoutSnapshot.swift; sourceTree = ""; }; + 849DFA0D192A6586FCC90DE7E300D812 /* RDEPUBSettingsFlipAutomation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBSettingsFlipAutomation.swift; sourceTree = ""; }; + 854840B8F97C908AB5B51EDF03E54D52 /* RDEPUBTextPageRenderView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextPageRenderView.swift; sourceTree = ""; }; 85E8DA9DE1F796F12171763D20CBAF27 /* DTFoundation.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = DTFoundation.debug.xcconfig; sourceTree = ""; }; + 86526ADF32337683AA173B5FC1E6A94C /* RDEPUBTextLayouter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextLayouter.swift; sourceTree = ""; }; 8718F2DB8F0DC085CB012D9996596F3F /* NSString+CSS.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSString+CSS.m"; path = "Core/Source/NSString+CSS.m"; sourceTree = ""; }; - 8811A5F210087839AA7746D9D4CFEB23 /* RDEPUBReaderDependencies.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderDependencies.swift; sourceTree = ""; }; 88464D2E3579F1A5B25DCCA128528938 /* DTCoreTextFontDescriptor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTCoreTextFontDescriptor.m; path = Core/Source/DTCoreTextFontDescriptor.m; sourceTree = ""; }; - 890B65045CA1A5D01EDF09F7FD14C6C3 /* RDEPUBTextContentInteractionCoordinator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextContentInteractionCoordinator.swift; sourceTree = ""; }; 89268DC8F1FBDE4F3167647B6A4F9216 /* DTHorizontalRuleHTMLElement.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTHorizontalRuleHTMLElement.h; path = Core/Source/DTHorizontalRuleHTMLElement.h; sourceTree = ""; }; - 89755690B804A64EE69FE2D7321CA9B6 /* RDEPUBTextIndexTable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextIndexTable.swift; sourceTree = ""; }; - 8A1D29D22B94FD4B310B5A419E79057B /* RDReaderView-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "RDReaderView-Info.plist"; sourceTree = ""; }; - 8AE69217E6A738AC11FEB58F2603B17F /* wxread-dark.css */ = {isa = PBXFileReference; includeInIndex = 1; name = "wxread-dark.css"; path = "Sources/RDReaderView/EPUBCore/Resources/wxread-dark.css"; sourceTree = ""; }; + 8A50D413DFA43820BCD76D668C0C7868 /* RDEPUBReaderAssemblyCoordinator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderAssemblyCoordinator.swift; sourceTree = ""; }; 8B35D0622F339A5B8A864FAA0C9EAE47 /* Pods-ReadViewDemo-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-ReadViewDemo-acknowledgements.plist"; sourceTree = ""; }; 8B8FDAF9E8370366F7FA8524CB0D80B3 /* DTTextAttachmentHTMLElement.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTTextAttachmentHTMLElement.h; path = Core/Source/DTTextAttachmentHTMLElement.h; sourceTree = ""; }; 8BA617294E6371DD7FAC32B61E0873F2 /* DTPieProgressIndicator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTPieProgressIndicator.m; path = Core/Source/iOS/DTPieProgressIndicator.m; sourceTree = ""; }; 8C9575F05D72C239E7E6F079BACDF4C7 /* DTVersion.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTVersion.h; path = Core/Source/DTVersion.h; sourceTree = ""; }; + 8C99F4EC07FF6B3DD8C8B72E54DEB008 /* RDReaderPagingController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDReaderPagingController.swift; sourceTree = ""; }; 8CF7CEB31BED0554F3EF3D3442A89B47 /* DTCoreText.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTCoreText.h; path = Core/Source/DTCoreText.h; sourceTree = ""; }; - 8D474A46702BFAA8E3AAFAC5EE0E3C20 /* RDEPUBNoteModels.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBNoteModels.swift; sourceTree = ""; }; + 8D0BFFD14B93A2F313B937F14652738C /* RDEPUBNoteModels.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBNoteModels.swift; sourceTree = ""; }; 8DA0F94C0870C1F0DFADE5E9045E5E6E /* DTDictationPlaceholderTextAttachment.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTDictationPlaceholderTextAttachment.m; path = Core/Source/DTDictationPlaceholderTextAttachment.m; sourceTree = ""; }; - 8E0EF27F41F1DF49C126E34B404497CF /* RDEPUBReaderAnnotationCoordinator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderAnnotationCoordinator.swift; sourceTree = ""; }; + 8DFA3BB3F5BC48BF4CA6F8DE4559318C /* RDEPUBStyleCompatibilityModels.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBStyleCompatibilityModels.swift; sourceTree = ""; }; 8E5297E7F5769C61C1838962BA76D4F5 /* NSArray+DTError.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSArray+DTError.m"; path = "Core/Source/NSArray+DTError.m"; sourceTree = ""; }; + 8ED87665B0B64B6E8153C0490203E43B /* RDEPUBTextPaginationInterfaces.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextPaginationInterfaces.swift; sourceTree = ""; }; 8EDA1618562CC224690CF6FC03AFED38 /* DTObjectTextAttachment.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTObjectTextAttachment.m; path = Core/Source/DTObjectTextAttachment.m; sourceTree = ""; }; + 8F08538F2728E3B8B81113D12DB74E3A /* RDEPUBCFICompatibility.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBCFICompatibility.swift; sourceTree = ""; }; + 8F4881006C6FAE4DFADBE2ACE4E9A744 /* RDEPUBSemanticMarkerInjector.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBSemanticMarkerInjector.swift; sourceTree = ""; }; 8F653EFBBEDAAC96A34BC93B4211E792 /* DTCompatibility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTCompatibility.h; path = Core/Source/DTCompatibility.h; sourceTree = ""; }; - 8F9C05A5DE7C804D6531F4BBF31A3045 /* rangy-core.js */ = {isa = PBXFileReference; includeInIndex = 1; name = "rangy-core.js"; path = "Sources/RDReaderView/EPUBCore/Resources/rangy-core.js"; sourceTree = ""; }; 8FAAF640165FC1B4B47C546F80D98B1E /* DTColor+Compatibility.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "DTColor+Compatibility.m"; path = "Core/Source/DTColor+Compatibility.m"; sourceTree = ""; }; - 90FB64A00D5B29274A1EDAFD38A2A8B9 /* RDEPUBAttachmentTooltipView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBAttachmentTooltipView.swift; sourceTree = ""; }; - 9117DB8611498A875CF9CF11D092BFA5 /* RDEPUBWebViewDebug.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBWebViewDebug.swift; sourceTree = ""; }; - 933E1AC7CA1ADECA318762103FAC0AF3 /* UIColor+RDEPUBHex.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "UIColor+RDEPUBHex.swift"; sourceTree = ""; }; - 9435D40191E13E2949BA08196EFE296F /* RDEPUBTextContentView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextContentView.swift; sourceTree = ""; }; - 943DB891CA340D3E0A65D0267100C3E7 /* RDEPUBJumpSession.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBJumpSession.swift; sourceTree = ""; }; + 92960C67FEC64C10BA567184834F0DCC /* RDEPUBTypesettingPipeline.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTypesettingPipeline.swift; sourceTree = ""; }; + 92ED368A3AC26AAF26FEB59577BBF3F4 /* UIColor+RDEPUB.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "UIColor+RDEPUB.swift"; sourceTree = ""; }; + 93A16F63ABA3D0BA695CC9F1F7D6F3DA /* RDEPUBReaderPersistence.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderPersistence.swift; sourceTree = ""; }; + 93A4E820E3592827FF87F820BBAC3179 /* RDReaderView.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = RDReaderView.podspec; sourceTree = ""; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; 94705DADD1F09F4162F7D733318238F4 /* NSData+DTCrypto.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSData+DTCrypto.h"; path = "Core/Source/NSData+DTCrypto.h"; sourceTree = ""; }; 9542AFE3A82C8AE56576254CE196E71A /* DTCustomColoredAccessory.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTCustomColoredAccessory.m; path = Core/Source/iOS/DTCustomColoredAccessory.m; sourceTree = ""; }; + 9736CC5317A5E8F2EE1A03A963197BDF /* RDEPUBNotePopupViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBNotePopupViewController.swift; sourceTree = ""; }; + 976DBE312D138856488A4DEF88606BC9 /* RDEPUBCFI.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBCFI.swift; sourceTree = ""; }; 978449466D53EA6F5D40FCF0F353DDCA /* NSAttributedString+DTCoreText.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSAttributedString+DTCoreText.m"; path = "Core/Source/NSAttributedString+DTCoreText.m"; sourceTree = ""; }; - 982FBB7B62F54B7806EAD1C178B6A083 /* RDEPUBReaderTopToolView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderTopToolView.swift; sourceTree = ""; }; 98CF9C5D504838741E399811F4D5A0B7 /* NSAttributedString+SmallCaps.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSAttributedString+SmallCaps.m"; path = "Core/Source/NSAttributedString+SmallCaps.m"; sourceTree = ""; }; - 9B8EBA6DFDDDD074E804C1689727074E /* RDEPUBTextAnnotationOverlay.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextAnnotationOverlay.swift; sourceTree = ""; }; + 995E88CDC3691BA531FF7951E4C809EC /* RDEPUBMetadataParseCancellationController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBMetadataParseCancellationController.swift; sourceTree = ""; }; + 9A220EF1E6F5821B91990AAED74A4FFC /* RDEPUBWebDecorationOverlayView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBWebDecorationOverlayView.swift; sourceTree = ""; }; 9C12A4A5BB42D0F68DABBD3BDF103BC5 /* DTDictationPlaceholderView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTDictationPlaceholderView.h; path = Core/Source/DTDictationPlaceholderView.h; sourceTree = ""; }; - 9C1B2F1D8E3F93A60375AA8853FF1842 /* RDReaderTapRegionHandler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDReaderTapRegionHandler.swift; sourceTree = ""; }; + 9C1CDD44F96B466A619015AA0A7B2D17 /* RDEPUBCFIError.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBCFIError.swift; sourceTree = ""; }; 9C3615C94C147AEA92F022E119810E9F /* Data+Serialization.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Data+Serialization.swift"; path = "Sources/ZIPFoundation/Data+Serialization.swift"; sourceTree = ""; }; + 9C5B9705D72218CB383307A329C9060B /* RDEPUBReaderConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderConfiguration.swift; sourceTree = ""; }; 9C5E29D728B8CD4EABC0B3DD9CD9DE99 /* UIScreen+DTFoundation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIScreen+DTFoundation.h"; path = "Core/Source/iOS/UIScreen+DTFoundation.h"; sourceTree = ""; }; 9C6CE93FAA68605C6B90FF844A98E440 /* CTLineUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CTLineUtils.h; path = Core/Source/CTLineUtils.h; sourceTree = ""; }; - 9D28F67E16027AF4FA4F9D501C4D0712 /* RDReaderView-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "RDReaderView-umbrella.h"; sourceTree = ""; }; 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; - 9ED2C72C44EE3717E5F3B45933FC5F5C /* RDEPUBResourceURLSchemeHandler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBResourceURLSchemeHandler.swift; sourceTree = ""; }; - 9F8BA45FA0D8E3CBAAE6E18272EB0644 /* RDReaderView.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = RDReaderView.debug.xcconfig; sourceTree = ""; }; - 9FA1C7B2B5D3FE43AB0598F027C50377 /* RDEPUBReadingLocationModels.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReadingLocationModels.swift; sourceTree = ""; }; - A12918D1D6A305DDE8B4249CCE38BB1F /* RDEPUBReaderRuntime.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderRuntime.swift; sourceTree = ""; }; - A1570DC08749A3866877CAF0A6BD877C /* RDEPUBReaderLocationCoordinator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderLocationCoordinator.swift; sourceTree = ""; }; - A16FEBBEDD32F8EAE312AADBE815BF49 /* RDEPUBReaderController+ExternalLinks.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBReaderController+ExternalLinks.swift"; sourceTree = ""; }; - A184BC6F2CCE83350332C9F00071A2B9 /* RDEPUBNoteResolver.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBNoteResolver.swift; sourceTree = ""; }; - A191A2F7DD62299E8945911DC282FFA0 /* RDEPUBJavaScriptBridge.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBJavaScriptBridge.swift; sourceTree = ""; }; + 9E94387C53C6E054A73F8EE89787003D /* RDEPUBTextLayoutFrame.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextLayoutFrame.swift; sourceTree = ""; }; + A1718601130E0F134E893F2A5CE605C6 /* RDEPUBReaderDependencies.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderDependencies.swift; sourceTree = ""; }; A20F6F0463A998DC3BD53DE9E63B63DE /* DTSmartPagingScrollView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTSmartPagingScrollView.m; path = Core/Source/iOS/DTSmartPagingScrollView.m; sourceTree = ""; }; - A30017EA232AF10EF5AEF1A20891306E /* RDEPUBPublication.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBPublication.swift; sourceTree = ""; }; A3BD3ED7913130D32E14D5572CBCC921 /* NSString+DTFormatNumbers.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSString+DTFormatNumbers.h"; path = "Core/Source/NSString+DTFormatNumbers.h"; sourceTree = ""; }; A3DE08AC23FE36A6C3F33A04700FDE57 /* DTAnimatedGIF.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTAnimatedGIF.m; path = Core/Source/iOS/DTAnimatedGIF/DTAnimatedGIF.m; sourceTree = ""; }; A3F7613E99CAA29881A015D0ED969B86 /* NSURL+DTAppLinks.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSURL+DTAppLinks.h"; path = "Core/Source/iOS/NSURL+DTAppLinks.h"; sourceTree = ""; }; - A472A71A962C2E34AB358EC26AEA60B4 /* RDEPUBAssetRepository.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBAssetRepository.swift; sourceTree = ""; }; - A4B2389196B50CE10DE62C6DF588B1D9 /* RDEPUBBackgroundTrace.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBBackgroundTrace.swift; sourceTree = ""; }; A592A34CA2EA792DDFAFAEB516FE8A10 /* NSCoder+DTCompatibility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSCoder+DTCompatibility.h"; path = "Core/Source/NSCoder+DTCompatibility.h"; sourceTree = ""; }; + A59C77DC849EDF86936A25873E674F72 /* RDEPUBChapterTailNormalizer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBChapterTailNormalizer.swift; sourceTree = ""; }; A5D1FFCB042340FB917DAAE076DD1CCF /* DTFoundation.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = DTFoundation.modulemap; sourceTree = ""; }; A61C8F1BDD76EA59082F65269083BD08 /* DTCoreTextConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTCoreTextConstants.h; path = Core/Source/DTCoreTextConstants.h; sourceTree = ""; }; - A61F5753AE7B5122FE65CF07CF1AD5FD /* RDReaderView-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "RDReaderView-dummy.m"; sourceTree = ""; }; - A6550AF614406015AE2CCD348C28A3BE /* RDEPUBTextSelectionController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextSelectionController.swift; sourceTree = ""; }; A7E167717A18E0C858C6FD95804249E4 /* NSCharacterSet+HTML.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSCharacterSet+HTML.h"; path = "Core/Source/NSCharacterSet+HTML.h"; sourceTree = ""; }; - A7F40EAB66363D681DA68981B17FB492 /* RDReaderPagingController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDReaderPagingController.swift; sourceTree = ""; }; - A88F1371931B82C966232F059409D412 /* RDEPUBReaderBottomToolView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderBottomToolView.swift; sourceTree = ""; }; A8A086525BF509F4581693115438B82B /* NSAttributedString+DTDebug.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSAttributedString+DTDebug.h"; path = "Core/Source/NSAttributedString+DTDebug.h"; sourceTree = ""; }; A8CC38EFEF171FFEE008C32A6319BE6A /* DTFolderMonitor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTFolderMonitor.h; path = Core/Source/DTFolderMonitor.h; sourceTree = ""; }; - A98D6A8053F65B3872BF49A978E18042 /* RDEPUBWebContentView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBWebContentView.swift; sourceTree = ""; }; + A9B4C7EA8E0601A462DDA753AFA93E66 /* RDReaderView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDReaderView.swift; sourceTree = ""; }; AA0811310099A4BCB3D52683B70DB3D1 /* Pods-ReadViewDemo-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-ReadViewDemo-dummy.m"; sourceTree = ""; }; - AB3DF251DDD78EDAEE82FBEBDF9CE79B /* RDReaderPageChildViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDReaderPageChildViewController.swift; sourceTree = ""; }; AC0A4ED7E936923A29A5EEB1D95D6B55 /* DTTextAttachmentHTMLElement.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTTextAttachmentHTMLElement.m; path = Core/Source/DTTextAttachmentHTMLElement.m; sourceTree = ""; }; + AC75B34F4CE50854BC099CE73D139FCC /* RDEPUBAttachmentTooltipView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBAttachmentTooltipView.swift; sourceTree = ""; }; ACA6D26B26D2653D6E1C871A482BD6DF /* NSURL+DTUnshorten.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSURL+DTUnshorten.h"; path = "Core/Source/NSURL+DTUnshorten.h"; sourceTree = ""; }; + ACD11D2C8694B9E3BDD175F1EEBEB64D /* RDEPUBPresentationRuntime.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBPresentationRuntime.swift; sourceTree = ""; }; ACD2A4FF41C5A223C2D4B74E0EDA9B2C /* DTCoreText-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "DTCoreText-Info.plist"; sourceTree = ""; }; - ADA1EB57E3C97548261B7AE9E5975272 /* RDEPUBCFISerializer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBCFISerializer.swift; sourceTree = ""; }; ADD5B2F66FCCFB58393314E7B9FE4384 /* NSMutableArray+DTMoving.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSMutableArray+DTMoving.m"; path = "Core/Source/NSMutableArray+DTMoving.m"; sourceTree = ""; }; - AE90A6C0DA3B5094237AACF4D06C944A /* RDEPUBReaderPersistence.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderPersistence.swift; sourceTree = ""; }; + AE6582B1336C77B6C366DAA669570B4A /* RDReaderGestureController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDReaderGestureController.swift; sourceTree = ""; }; + AE6769FF56092F4EB6B5EDCD64F8E6A7 /* RDEPUBJumpSession.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBJumpSession.swift; sourceTree = ""; }; AF1516035C269F7A41EE064AAB14D562 /* DTActivityTitleView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTActivityTitleView.h; path = Core/Source/iOS/DTActivityTitleView.h; sourceTree = ""; }; AF436E76C893E223A4F0BE86C1276054 /* UIScreen+DTFoundation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIScreen+DTFoundation.m"; path = "Core/Source/iOS/UIScreen+DTFoundation.m"; sourceTree = ""; }; - AF8CFF30D6E79EDA9ADA4C8B8B5F52B2 /* RDEPUBChapterLoader.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBChapterLoader.swift; sourceTree = ""; }; B0218A7B243387C79E099CA947CF243D /* Archive+Writing.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Archive+Writing.swift"; path = "Sources/ZIPFoundation/Archive+Writing.swift"; sourceTree = ""; }; + B0390F2BB06B9CE8FCBCD30D60C154B9 /* RDEPUBCFIMap.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBCFIMap.swift; sourceTree = ""; }; B12CE4962CDC324FB47FB92D6706D149 /* DTLinkButton.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTLinkButton.h; path = Core/Source/DTLinkButton.h; sourceTree = ""; }; - B1AF2749008FE67A3281B83EE327E41D /* RDEPUBChapterData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBChapterData.swift; sourceTree = ""; }; + B137EA59DB88E982FBF8E5C775975FE5 /* RDEPUBViewportTypes.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBViewportTypes.swift; sourceTree = ""; }; B23C5F038DAC52B75213C0760C431F2B /* DTHTMLWriter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTHTMLWriter.m; path = Core/Source/DTHTMLWriter.m; sourceTree = ""; }; B37118B8D16847B0F82E06A5B33898AB /* DTCSSStylesheet.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTCSSStylesheet.m; path = Core/Source/DTCSSStylesheet.m; sourceTree = ""; }; + B3B0AAC7948C4A103B284B0F3DCC1262 /* RDEPUBBuildDiagnosticsReporter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBBuildDiagnosticsReporter.swift; sourceTree = ""; }; B41F7D27C2336F89BB0185ACB0B19EA9 /* ZIPFoundation-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ZIPFoundation-umbrella.h"; sourceTree = ""; }; B43D7603C0D66635268842EC0A2655AC /* NSFileWrapper+DTCopying.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSFileWrapper+DTCopying.h"; path = "Core/Source/NSFileWrapper+DTCopying.h"; sourceTree = ""; }; B4A7F7402FAEE3A277A8716DDA115C95 /* NSString+Paragraphs.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSString+Paragraphs.m"; path = "Core/Source/NSString+Paragraphs.m"; sourceTree = ""; }; B4D20A2B33F9F4DD8499FB462DE2731F /* DTAttributedTextView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTAttributedTextView.h; path = Core/Source/DTAttributedTextView.h; sourceTree = ""; }; B50104DE2E35D820ECA22CDB3E6F96EA /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS18.0.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; - B55E6E99C6F879CFD19D3674CE20075C /* RDEPUBTextRendererSupport.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextRendererSupport.swift; sourceTree = ""; }; - B62755E9A395FF22E7405C3FE192D5F3 /* RDEPUBChapterPageCounter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBChapterPageCounter.swift; sourceTree = ""; }; B6CA8CC4525EF64AA5CEE4A722737F1C /* DTCoreText-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "DTCoreText-dummy.m"; sourceTree = ""; }; B76B1E836C34CB755AEE1FBF7DC26BDD /* NSString+DTPaths.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSString+DTPaths.h"; path = "Core/Source/NSString+DTPaths.h"; sourceTree = ""; }; B7C4233DF4FA80BF4A9E6FA5082D49E5 /* DTCoreTextParagraphStyle.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTCoreTextParagraphStyle.m; path = Core/Source/DTCoreTextParagraphStyle.m; sourceTree = ""; }; B83D7A73677A2C3141EDEF56B9CE6584 /* DTVideoTextAttachment.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTVideoTextAttachment.m; path = Core/Source/DTVideoTextAttachment.m; sourceTree = ""; }; B8717A7A7BC5A1529A0F80FB3B22675D /* DTFoundation-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "DTFoundation-Info.plist"; sourceTree = ""; }; - B879D43D53D77B2C9BA10AE5CDC71CED /* RDEPUBTextPageRenderView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextPageRenderView.swift; sourceTree = ""; }; - B898A07D2E7D8E62F64BD28BAFA3DEFA /* RDEPUBRenderDiagnosticsCollector.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBRenderDiagnosticsCollector.swift; sourceTree = ""; }; - BA33898232E2ED58D3A5B60A8F56BAC6 /* RDEPUBCFICompatibility.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBCFICompatibility.swift; sourceTree = ""; }; - BA6B5FFFF22D8A36CC593817C0494CD1 /* RDEPUBSearchModels.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBSearchModels.swift; sourceTree = ""; }; BA8A527A4CCB2AF1C1E26744B301F6B8 /* DTIframeTextAttachment.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTIframeTextAttachment.m; path = Core/Source/DTIframeTextAttachment.m; sourceTree = ""; }; - BAAB1142496F4E594573D85EF76670A8 /* RDEPUBTextAnchor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextAnchor.swift; sourceTree = ""; }; BAE45673EE2875DB23FA7BDD61FDE1EF /* DTCustomColoredAccessory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTCustomColoredAccessory.h; path = Core/Source/iOS/DTCustomColoredAccessory.h; sourceTree = ""; }; - BC5131ADC7B6C3869C5CA5A5CB52C06F /* RDEPUBChapterCacheKey.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBChapterCacheKey.swift; sourceTree = ""; }; BC59BBF6628D93AAC30CBFE0FF0151F2 /* ZIPFoundation-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ZIPFoundation-prefix.pch"; sourceTree = ""; }; - BD161DA5F1982A4BA70B86D3D27455A3 /* RDEPUBParser+Resources.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBParser+Resources.swift"; sourceTree = ""; }; BD65B936E2A6FEB74718EA86D9AC1899 /* DTCoreTextParagraphStyle.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTCoreTextParagraphStyle.h; path = Core/Source/DTCoreTextParagraphStyle.h; sourceTree = ""; }; - BE8A25FFCA0AD1D9C167CCEE28D2378A /* RDEPUBCFIUtilities.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBCFIUtilities.swift; sourceTree = ""; }; + BD8F015377F898E4B0229FF584685390 /* RDEPUBWebView+FixedLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBWebView+FixedLayout.swift"; sourceTree = ""; }; BEA46E51E3616ECEAF0ACCEA9B8C67EF /* DTFolderMonitor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTFolderMonitor.m; path = Core/Source/DTFolderMonitor.m; sourceTree = ""; }; - BFBE38B3A4D9E60E2B1683A475513E46 /* RDEPUBChapterOffsetMap.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBChapterOffsetMap.swift; sourceTree = ""; }; + BF55DCBC3A5B0BEC5B1A4C6187F20D38 /* RDReaderViewProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDReaderViewProtocols.swift; sourceTree = ""; }; + BFCD03AC792A6CF8550BC44A4339D9FE /* RDEPUBTextAnnotationOverlay.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextAnnotationOverlay.swift; sourceTree = ""; }; BFF51E56E09E095C92CB5B9F21384027 /* Archive+MemoryFile.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Archive+MemoryFile.swift"; path = "Sources/ZIPFoundation/Archive+MemoryFile.swift"; sourceTree = ""; }; - C012576F77900AEF84ACA075FF174D12 /* RDEPUBReaderController+DataSource.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBReaderController+DataSource.swift"; sourceTree = ""; }; C0DCB00F0B62D7DBE628D2B5FF006E93 /* DTCoreText.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = DTCoreText.debug.xcconfig; sourceTree = ""; }; - C3170B05B50679D6D7029E693A4A6024 /* RDEPUBCFITextAssertion.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBCFITextAssertion.swift; sourceTree = ""; }; - C3A0D1E77F50E5274CCC99EEA427C15E /* RDEPUBParser+TOC.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBParser+TOC.swift"; sourceTree = ""; }; + C2135D2A77CD609485DAF400E1E3396F /* RDEPUBChapterRuntimeStore.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBChapterRuntimeStore.swift; sourceTree = ""; }; + C229DC7F5A2BB8C2A3C586FF6CF41D47 /* epub-fixed-layout.html */ = {isa = PBXFileReference; includeInIndex = 1; name = "epub-fixed-layout.html"; path = "Sources/RDReaderView/EPUBCore/Resources/epub-fixed-layout.html"; sourceTree = ""; }; C3E162E0261A5B0850158D3403191E62 /* Archive.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Archive.swift; path = Sources/ZIPFoundation/Archive.swift; sourceTree = ""; }; C46FCF109DBCB37595D2A3366CF1D765 /* DTCoreTextLayoutFrame.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTCoreTextLayoutFrame.h; path = Core/Source/DTCoreTextLayoutFrame.h; sourceTree = ""; }; - C4912F524E40CC6107099AB780A0E0BF /* RDEPUBPageCountCache.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBPageCountCache.swift; sourceTree = ""; }; C495C74844982FAA1B846A2A89023D12 /* DTCoreTextMacros.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTCoreTextMacros.h; path = Core/Source/DTCoreTextMacros.h; sourceTree = ""; }; - C4E711A4F76E5BF2095569B5A9B3F5BB /* RDEPUBChapterSummaryDiskCache.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBChapterSummaryDiskCache.swift; sourceTree = ""; }; + C49A29FA18CE9201BCA63615AEF3457F /* RDEPUBReaderRuntime.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderRuntime.swift; sourceTree = ""; }; C5005A9E8F746647585CCAB26853E922 /* NSString+DTFormatNumbers.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSString+DTFormatNumbers.m"; path = "Core/Source/NSString+DTFormatNumbers.m"; sourceTree = ""; }; C508E49F6BF9F50B05918C230B033069 /* DTTextBlock.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTTextBlock.m; path = Core/Source/DTTextBlock.m; sourceTree = ""; }; - C5B003AC0B46623423334F97FEE379B8 /* RDEPUBTextPerformanceSampler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextPerformanceSampler.swift; sourceTree = ""; }; - C60EBAD7361BD011961D6A1FB94B914C /* String+RDEPUB.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "String+RDEPUB.swift"; sourceTree = ""; }; - C66C203D247690A4DDE08BF5A5D56B3B /* RDEPUBChapterWarmupOrchestrator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBChapterWarmupOrchestrator.swift; sourceTree = ""; }; + C525E69EA51BC555374CC559F2996233 /* RDEPUBReaderToolView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderToolView.swift; sourceTree = ""; }; + C52AC0144029821AA538D6165315C585 /* RDEPUBRuntimePageCount.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBRuntimePageCount.swift; sourceTree = ""; }; + C59CB44187E054E80CA13F60FF8EE303 /* RDEPUBWebViewDebug.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBWebViewDebug.swift; sourceTree = ""; }; C69C7A531B5E021499D8FBF1DBE0E3BB /* NSAttributedStringRunDelegates.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = NSAttributedStringRunDelegates.m; path = Core/Source/NSAttributedStringRunDelegates.m; sourceTree = ""; }; C7E09A6C247D465CA0EF71B939B2A040 /* NSArray+DTError.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSArray+DTError.h"; path = "Core/Source/NSArray+DTError.h"; sourceTree = ""; }; + C8BE089AF845973208A11AA41A9B6AAB /* RDEPUBTextPositionConverter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextPositionConverter.swift; sourceTree = ""; }; + C8E6795B0D648B27CC7EB030E7550566 /* RDEPUBWebView+Configuration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBWebView+Configuration.swift"; sourceTree = ""; }; CA4A114775B98CEA4A566C18123B145F /* ZIPFoundation-ZIPFoundation_Privacy */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; name = "ZIPFoundation-ZIPFoundation_Privacy"; path = ZIPFoundation_Privacy.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; CA5630DC0E663F38A9EC713323697EE1 /* DTLazyImageView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTLazyImageView.m; path = Core/Source/DTLazyImageView.m; sourceTree = ""; }; CACF20969583778CAC1BC92BB96F27FD /* NSAttributedString+SmallCaps.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSAttributedString+SmallCaps.h"; path = "Core/Source/NSAttributedString+SmallCaps.h"; sourceTree = ""; }; + CADF4452F89F7A5F419D2841FABC8CBC /* RDEPUBWebView+Search.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBWebView+Search.swift"; sourceTree = ""; }; CB2BD1F8CFECB82D427DF046439E68D6 /* DTHTMLParser.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTHTMLParser.h; path = Core/Source/DTHTMLParser/DTHTMLParser.h; sourceTree = ""; }; - CC0E8A0B81E73D17CDACE523F47D124B /* RDEPUBNoteDetector.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBNoteDetector.swift; sourceTree = ""; }; - CC8B39E69CFC5D4DD1D47A29F6D9E852 /* RDEPUBReaderServices.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderServices.swift; sourceTree = ""; }; CCC633BF76C79E0B4A6750337D5DCDB8 /* DTVersion.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTVersion.m; path = Core/Source/DTVersion.m; sourceTree = ""; }; - CCC938C9AB37D0B094B0CF78C098CBE6 /* RDEPUBWebDecorationOverlayView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBWebDecorationOverlayView.swift; sourceTree = ""; }; - CD0C3C872488B6341E22BF47B6F9BBD6 /* RDEPUBBuildDiagnosticsReporter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBBuildDiagnosticsReporter.swift; sourceTree = ""; }; + CCD1EE67D4C520598E5975F0489DCB87 /* RDEPUBTextPageVerticalJustifier.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextPageVerticalJustifier.swift; sourceTree = ""; }; + CD3430DE68FE0020F68C496C24E87470 /* RDEPUBPageBreakPolicy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBPageBreakPolicy.swift; sourceTree = ""; }; + CD5DB51D2F628791D4E0EB41C4B81AF1 /* RDEPUBChapterDataCache.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBChapterDataCache.swift; sourceTree = ""; }; + CDCA21771B2D145D7DCFEEDE00FEDADC /* RDEPUBCFIPath.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBCFIPath.swift; sourceTree = ""; }; CE761A55BD57C0BFD6336CD073F85C31 /* DTLinkButton.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTLinkButton.m; path = Core/Source/DTLinkButton.m; sourceTree = ""; }; - CEB68ED963D81A187618710413C3B523 /* RDEPUBReaderController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderController.swift; sourceTree = ""; }; + CE8C9E2C878448571156DFC0E41979AF /* RDEPUBChapterCacheKey.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBChapterCacheKey.swift; sourceTree = ""; }; CEBA01360577AAD3FD089B6B17C24260 /* UIFont+DTCoreText.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIFont+DTCoreText.m"; path = "Core/Source/UIFont+DTCoreText.m"; sourceTree = ""; }; - CED923CC25493B9CA28F24D209A33540 /* RDEPUBCFIError.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBCFIError.swift; sourceTree = ""; }; CEEC8715398E89B42F9B04E290E8E4FE /* NSString+DTURLEncoding.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSString+DTURLEncoding.h"; path = "Core/Source/NSString+DTURLEncoding.h"; sourceTree = ""; }; CF1CED3ED65443999913BC0D96ACA151 /* DTImage+HTML.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "DTImage+HTML.m"; path = "Core/Source/DTImage+HTML.m"; sourceTree = ""; }; - CF369892013F3178789ADFC74384ADC2 /* RDEPUBReaderState.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderState.swift; sourceTree = ""; }; - CF49CE19D9F09A60F438FF3612F43069 /* RDEPUBReaderController+RenderSupport.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBReaderController+RenderSupport.swift"; sourceTree = ""; }; D0856C3894240A673B5AB7C2704E9144 /* DTDictationPlaceholderTextAttachment.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTDictationPlaceholderTextAttachment.h; path = Core/Source/DTDictationPlaceholderTextAttachment.h; sourceTree = ""; }; D18519BCA8FAA9B01A704A0F0B9FFC78 /* Archive+ZIP64.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Archive+ZIP64.swift"; path = "Sources/ZIPFoundation/Archive+ZIP64.swift"; sourceTree = ""; }; D1E89A31867FF1FB44B4B999988F1B82 /* DTFoundation */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = DTFoundation; path = DTFoundation.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D1EAAFA56DA59E80D53DA0DC7C6532D2 /* RDEPUBPreferences.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBPreferences.swift; sourceTree = ""; }; + D24E48ADEAADE831B2F5FAFBF67CD53D /* RDReaderView+CollectionView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDReaderView+CollectionView.swift"; sourceTree = ""; }; D28A3E79D83EA4B807E2D3A5EE086B8B /* DTHTMLParserNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTHTMLParserNode.h; path = Core/Source/DTHTMLParserNode.h; sourceTree = ""; }; D30DBDF1EDB20CF83690AC6619AA0C48 /* NSString+DTPaths.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSString+DTPaths.m"; path = "Core/Source/NSString+DTPaths.m"; sourceTree = ""; }; - D4721E12B4121C46B8368D085D91EC2B /* RDEPUBTextPaginationInterfaces.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextPaginationInterfaces.swift; sourceTree = ""; }; + D3FE3C2B203F85680560F45459F5B281 /* RDReaderView.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = RDReaderView.debug.xcconfig; sourceTree = ""; }; D4C731AA2088D7E873D8E3D21B95D215 /* DTIframeTextAttachment.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTIframeTextAttachment.h; path = Core/Source/DTIframeTextAttachment.h; sourceTree = ""; }; + D4EB6B49DEC8BCB1ABD8083F9B903101 /* RDEPUBReaderChapterListController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderChapterListController.swift; sourceTree = ""; }; + D53EA3F44C0602B1BEB2F85B59B32CB3 /* RDEPUBTextContentInteractionCoordinator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextContentInteractionCoordinator.swift; sourceTree = ""; }; D5DD4142DF33E1BE0B5A057101E851C5 /* DTLazyImageView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTLazyImageView.h; path = Core/Source/DTLazyImageView.h; sourceTree = ""; }; - D6901981E3F4F05F9FAC5ECE00D8983E /* RDEPUBPageLayoutSnapshot.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBPageLayoutSnapshot.swift; sourceTree = ""; }; + D6DAFB416DE591A656C8614E117EEBEF /* ResourceBundle-RDReaderViewAssets-RDReaderView-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-RDReaderViewAssets-RDReaderView-Info.plist"; sourceTree = ""; }; + D75F5147BF67C9935CC45C16F0118C14 /* RDReaderTapRegionHandler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDReaderTapRegionHandler.swift; sourceTree = ""; }; D80A72D8B7941D30246858D840EE1EF5 /* DTCoreTextLayouter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTCoreTextLayouter.m; path = Core/Source/DTCoreTextLayouter.m; sourceTree = ""; }; + D9493E87BC278E65DA39B0F098CC01B9 /* RDEPUBReaderController+LocationResolution.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBReaderController+LocationResolution.swift"; sourceTree = ""; }; D9A812C3E577A3ADC36BAE3FF7AA4D9C /* NSFileWrapper+DTCopying.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSFileWrapper+DTCopying.m"; path = "Core/Source/NSFileWrapper+DTCopying.m"; sourceTree = ""; }; + DA068568A9B92FE52049E190968609A8 /* RDEPUBSafeArea.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBSafeArea.swift; sourceTree = ""; }; DA2ED17D0DDF5F1C5606BFFD9A512DE4 /* DTCoreTextFunctions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTCoreTextFunctions.h; path = Core/Source/DTCoreTextFunctions.h; sourceTree = ""; }; - DC7BE59730389C1EC7BF65734D0D6776 /* RDEPUBPageResolver.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBPageResolver.swift; sourceTree = ""; }; + DC2EC4ECF9C8015EDECE928DCA3CC4B3 /* RDEPUBPageMapReconciliationCoordinator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBPageMapReconciliationCoordinator.swift; sourceTree = ""; }; DC7D3AB85C954DA41E1500936C166C0E /* NSString+HTML.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSString+HTML.h"; path = "Core/Source/NSString+HTML.h"; sourceTree = ""; }; DD0A5FF70CDBE87597264762EC20EF43 /* NSScanner+HTML.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSScanner+HTML.h"; path = "Core/Source/NSScanner+HTML.h"; sourceTree = ""; }; DD7A2DE5BDF72ABC066484CE554BDEF0 /* DTHorizontalRuleHTMLElement.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTHorizontalRuleHTMLElement.m; path = Core/Source/DTHorizontalRuleHTMLElement.m; sourceTree = ""; }; DE4821B98DDE6C71411EC139EC6D2762 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS18.0.sdk/System/Library/Frameworks/CoreGraphics.framework; sourceTree = DEVELOPER_DIR; }; DE83356F8FBC1801D29CA93C1A190D81 /* Archive+Progress.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Archive+Progress.swift"; path = "Sources/ZIPFoundation/Archive+Progress.swift"; sourceTree = ""; }; - DE93E7F2D03E5848ADB6C91620D5A245 /* RDEPUBReaderController+TableOfContents.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBReaderController+TableOfContents.swift"; sourceTree = ""; }; - DEE95CBD7B492C5453D2FFA983C5CC02 /* RDEPUBSelectionOverlayView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBSelectionOverlayView.swift; sourceTree = ""; }; - DF346DB5BE7AF7245DCDDACEFDC59732 /* RDEPUBReaderToolView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderToolView.swift; sourceTree = ""; }; + DFC3591CDAEE16F7444AC3B176EFDAFD /* RDEPUBCFIResolver.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBCFIResolver.swift; sourceTree = ""; }; + DFDE9DF5F8221764CC5AD1218EC24236 /* RDEPUBReaderUIState.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderUIState.swift; sourceTree = ""; }; E0192469A486DA7CECFECEA37518B6B9 /* DTHTMLAttributedStringBuilder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTHTMLAttributedStringBuilder.m; path = Core/Source/DTHTMLAttributedStringBuilder.m; sourceTree = ""; }; - E0F6036722A2FEED169B57120EB274D1 /* RDEPUBHTMLNormalizer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBHTMLNormalizer.swift; sourceTree = ""; }; - E2A2130B4AB4BB4B5E30E4442A0FD644 /* RDEPUBPageMapReconciliationCoordinator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBPageMapReconciliationCoordinator.swift; sourceTree = ""; }; - E2C690372BDD5CA6E2A01A295EDE7C24 /* RDEPUBReaderSearchCoordinator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderSearchCoordinator.swift; sourceTree = ""; }; - E38BEF27B99CFAA178DE8917D69F11F8 /* RDEPUBParser+Package.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBParser+Package.swift"; sourceTree = ""; }; + E15D7179C6CF82530CF5E7264BBA1679 /* wxread-replace.css */ = {isa = PBXFileReference; includeInIndex = 1; name = "wxread-replace.css"; path = "Sources/RDReaderView/EPUBCore/Resources/wxread-replace.css"; sourceTree = ""; }; + E2159ABBE19F1408CF16A6EF0271404D /* RDEPUBFixedLayoutTemplate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBFixedLayoutTemplate.swift; sourceTree = ""; }; + E3B908A78A947A1A9D66C368CB616DE4 /* RDEPUBHTMLNormalizer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBHTMLNormalizer.swift; sourceTree = ""; }; E3CAAC46883B74B071843E5D38B5BF85 /* DTImage+HTML.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "DTImage+HTML.h"; path = "Core/Source/DTImage+HTML.h"; sourceTree = ""; }; - E3FEF8716C99974FB6997BFBF339FD91 /* RDEPUBReaderChromeCoordinator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderChromeCoordinator.swift; sourceTree = ""; }; - E4C4605A9B7326DBE0CED7EB66A7416F /* RDReaderFlowLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDReaderFlowLayout.swift; sourceTree = ""; }; + E42A81201784E7976A4C546739DE6ED5 /* RDEPUBTextPageDecorationView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextPageDecorationView.swift; sourceTree = ""; }; E4C5EB3F8F005C65005C101A9DBE488A /* DTWeakSupport.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTWeakSupport.h; path = Core/Source/DTWeakSupport.h; sourceTree = ""; }; + E52802E06864FE60CFBAE21EAA6F3F0F /* RDEPUBReaderController+AttachmentTooltip.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBReaderController+AttachmentTooltip.swift"; sourceTree = ""; }; E5377786E80195587BF3E8A7589E5925 /* DTHTMLParserTextNode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTHTMLParserTextNode.m; path = Core/Source/DTHTMLParserTextNode.m; sourceTree = ""; }; E5D4D6E12779C54F17AE98A1E6C9B699 /* DTBase64Coding.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTBase64Coding.m; path = Core/Source/DTBase64Coding.m; sourceTree = ""; }; + E67A535D80CEA637777BC317BCFE28C6 /* RDEPUBReadingLocationModels.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReadingLocationModels.swift; sourceTree = ""; }; E687628EF2FE92D093E3005D21B578E5 /* DTWeakSupport.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTWeakSupport.h; path = Core/Source/DTWeakSupport.h; sourceTree = ""; }; E6B46EF6F055A721AF370D705D026E9E /* Data+CompressionDeprecated.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Data+CompressionDeprecated.swift"; path = "Sources/ZIPFoundation/Data+CompressionDeprecated.swift"; sourceTree = ""; }; + E6CA207039A89EF3323F6FFEA38A1C3F /* RDEPUBCFIUtilities.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBCFIUtilities.swift; sourceTree = ""; }; E74132875CC4A311B230B68C085D8CE6 /* ResourceBundle-Resources-DTCoreText-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-Resources-DTCoreText-Info.plist"; sourceTree = ""; }; - E7F6AAF70ED1162640040B9969BBE6D5 /* RDEPUBReaderPaginationCoordinator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderPaginationCoordinator.swift; sourceTree = ""; }; + E7B0CDC00940C453637FBC66E6C05D89 /* RDEPUBSelectionLoupeView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBSelectionLoupeView.swift; sourceTree = ""; }; + E844B3375520F01C6CCE1468B53CCC6C /* RDEPUBReaderController+RuntimeBridge.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBReaderController+RuntimeBridge.swift"; sourceTree = ""; }; E853AAB3B09E0662567752431CEF1D33 /* DTTextAttachment.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTTextAttachment.h; path = Core/Source/DTTextAttachment.h; sourceTree = ""; }; E865600EE9117A9153716299FFA7912D /* Archive+Reading.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Archive+Reading.swift"; path = "Sources/ZIPFoundation/Archive+Reading.swift"; sourceTree = ""; }; E89F199ECDE796B15CAF8E0C1775FAA6 /* DTCoreTextConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTCoreTextConstants.m; path = Core/Source/DTCoreTextConstants.m; sourceTree = ""; }; E96C0EEB2032D3CC18F4B37A7C34C84C /* DTAttributedTextContentView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTAttributedTextContentView.h; path = Core/Source/DTAttributedTextContentView.h; sourceTree = ""; }; + E97B6B6C59BBCD6685CE808E64981E76 /* RDEPUBAssetRepository.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBAssetRepository.swift; sourceTree = ""; }; E9D8AB18960B56A997408E3235751624 /* ZIPFoundation-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "ZIPFoundation-dummy.m"; sourceTree = ""; }; - E9F5010D098DC3538CB8BAF64A54BF7B /* RDEPUBCFIGenerator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBCFIGenerator.swift; sourceTree = ""; }; EA2BF1D7535B036E1356E8DF42A04954 /* DTTextBlock.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTTextBlock.h; path = Core/Source/DTTextBlock.h; sourceTree = ""; }; + EB7C7A670C851744ACBCA45DA70795C8 /* wxread-dark.css */ = {isa = PBXFileReference; includeInIndex = 1; name = "wxread-dark.css"; path = "Sources/RDReaderView/EPUBCore/Resources/wxread-dark.css"; sourceTree = ""; }; EB850927957E35DB8CE0F109188C99A9 /* DTCoreTextLayoutLine.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTCoreTextLayoutLine.m; path = Core/Source/DTCoreTextLayoutLine.m; sourceTree = ""; }; EBA0272559B0F7FAD8AC670AC7431188 /* Pods-ReadViewDemo-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-ReadViewDemo-umbrella.h"; sourceTree = ""; }; - ECBE8305E343FF00B5DDF4F8F9D18623 /* cssInjector.js */ = {isa = PBXFileReference; includeInIndex = 1; name = cssInjector.js; path = Sources/RDReaderView/EPUBCore/Resources/cssInjector.js; sourceTree = ""; }; ED049C791713944233EE10C7A111C691 /* DTCoreTextGlyphRun.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTCoreTextGlyphRun.m; path = Core/Source/DTCoreTextGlyphRun.m; sourceTree = ""; }; ED9A1EBDA0FD72671C7F6FE15F37B906 /* DTTextHTMLElement.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTTextHTMLElement.h; path = Core/Source/DTTextHTMLElement.h; sourceTree = ""; }; - EDA3C47F4EB23BAB5E96FD4DF3DFA59D /* RDEPUBMetadataParseWorker.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBMetadataParseWorker.swift; sourceTree = ""; }; EDA6D5D7D0A04878EE78FAAE94F65068 /* DTCoreText */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = DTCoreText; path = DTCoreText.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - EE51FACCCAC4F6FE003BD3914F7B9071 /* UIColor+RDEPUB.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "UIColor+RDEPUB.swift"; sourceTree = ""; }; - EF4AF0ABB6117B18C8AE08E883BEA7C6 /* RDEPUBCFIRange.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBCFIRange.swift; sourceTree = ""; }; + EDFEB59EC6040AB3CF58E4E1045A8913 /* RDEPUBModels.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBModels.swift; sourceTree = ""; }; + EF393040BF2038B940EA74164A6214F3 /* RDEPUBReaderDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderDelegate.swift; sourceTree = ""; }; EF625CF6A790938F5CE0F0C7DC36E340 /* DTCoreTextLayoutFrame+Cursor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "DTCoreTextLayoutFrame+Cursor.m"; path = "Core/Source/DTCoreTextLayoutFrame+Cursor.m"; sourceTree = ""; }; - EFFC77747115ACAF9EE13A1CEAEEA539 /* RDEPUBParser.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBParser.swift; sourceTree = ""; }; - F0580E9407862B9D452289BBF1C4CA01 /* RDEPUBDarkImageAdjuster.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBDarkImageAdjuster.swift; sourceTree = ""; }; - F17DB32BEDD4A7738B4AC8201E5BD91B /* RDEPUBImageViewerCoordinator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBImageViewerCoordinator.swift; sourceTree = ""; }; - F2FB12B4D5D80C72658331C61991766C /* RDEPUBRuntimePageCount.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBRuntimePageCount.swift; sourceTree = ""; }; + F0796C7E8BEEA96989FCE6698868366D /* RDEPUBStyleSheetComposer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBStyleSheetComposer.swift; sourceTree = ""; }; + F08981630C2BB2DF438340C175302A5D /* RDEPUBReaderController+TableOfContents.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBReaderController+TableOfContents.swift"; sourceTree = ""; }; + F1843DDD87F5732183A424372B8F57F3 /* RDEPUBReaderState.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderState.swift; sourceTree = ""; }; F3C9CA544EBF55130625F6C3AD2ABFB4 /* Archive+Deprecated.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Archive+Deprecated.swift"; path = "Sources/ZIPFoundation/Archive+Deprecated.swift"; sourceTree = ""; }; F3E93C4AC73A09DE1EAE805B0ADE3306 /* NSString+DTUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSString+DTUtilities.m"; path = "Core/Source/NSString+DTUtilities.m"; sourceTree = ""; }; + F45A7967FB601D8BED750A9E37E7899C /* RDEPUBAttachmentTooltipOverlayView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBAttachmentTooltipOverlayView.swift; sourceTree = ""; }; F46010C3A0C82AE5ABEC814D7EC6351B /* DTAttributedTextView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTAttributedTextView.m; path = Core/Source/DTAttributedTextView.m; sourceTree = ""; }; - F46977FAF9F0EAEDF840BDA49288CC99 /* WeReadApi.js */ = {isa = PBXFileReference; includeInIndex = 1; name = WeReadApi.js; path = Sources/RDReaderView/EPUBCore/Resources/WeReadApi.js; sourceTree = ""; }; + F4609798012DB9C5B85641224CD6081D /* RDEPUBTextPaginationSupport.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextPaginationSupport.swift; sourceTree = ""; }; F49FC82A04EE9B3B49CBA6CB88ACBC67 /* FileManager+ZIPDeprecated.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "FileManager+ZIPDeprecated.swift"; path = "Sources/ZIPFoundation/FileManager+ZIPDeprecated.swift"; sourceTree = ""; }; F4E2B1AC73977F10254628C0B7EBE38F /* DTCoreText-Resources */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; name = "DTCoreText-Resources"; path = Resources.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; - F5847BF261408B9B82FB3BF7A9390AB3 /* RDEPUBAttachmentNormalizer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBAttachmentNormalizer.swift; sourceTree = ""; }; - F5E771C978D8EFB4DD05E81447873572 /* RDEPUBCFIParser.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBCFIParser.swift; sourceTree = ""; }; + F54575506F65B0B0E12AABF25A9E6C6F /* RDEPUBCFISerializer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBCFISerializer.swift; sourceTree = ""; }; + F5C8F91E6B08B08138B628331DAAEC16 /* RDEPUBReaderController+RenderSupport.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBReaderController+RenderSupport.swift"; sourceTree = ""; }; F63EBF2BF3000B3391F6E693581EA129 /* NSData+DTCrypto.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSData+DTCrypto.m"; path = "Core/Source/NSData+DTCrypto.m"; sourceTree = ""; }; - F6E041555AFAC5F8BD987FCA9DAC0949 /* RDEPUBSelectionState.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBSelectionState.swift; sourceTree = ""; }; + F66DD9D0E36BCFB8D70F713B112FFC5A /* RDEPUBWebContentView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBWebContentView.swift; sourceTree = ""; }; + F67C99E329F6EE4951953549B099CE46 /* RDEPUBBackgroundPriorityPolicy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBBackgroundPriorityPolicy.swift; sourceTree = ""; }; + F69C9651823EAB579B078EC3B7435D16 /* RDEPUBJavaScriptBridge.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBJavaScriptBridge.swift; sourceTree = ""; }; + F77E0B31CE94ED97B9E5C254BF0DB072 /* RDEPUBTextPageBoundaryValidator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextPageBoundaryValidator.swift; sourceTree = ""; }; F7C508BE899A1397560A767CAEADB7B9 /* DTHTMLElement.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTHTMLElement.h; path = Core/Source/DTHTMLElement.h; sourceTree = ""; }; - F81B70DF51F9CD64A7DC5AAF3941F72C /* wxread-replace.css */ = {isa = PBXFileReference; includeInIndex = 1; name = "wxread-replace.css"; path = "Sources/RDReaderView/EPUBCore/Resources/wxread-replace.css"; sourceTree = ""; }; + F8BB0B072E5F24B51A6D348D8F9745CC /* RDReaderView+ContentAccess.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDReaderView+ContentAccess.swift"; sourceTree = ""; }; + F94780553A2ED7BE5E972D634F7F52DE /* RDEPUBParser+Package.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBParser+Package.swift"; sourceTree = ""; }; F9D9BEF72311AF9E3239F9B92A9D2842 /* DTAnimatedGIF.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTAnimatedGIF.h; path = Core/Source/iOS/DTAnimatedGIF/DTAnimatedGIF.h; sourceTree = ""; }; FA107BE47514D01B94B7A2670A9F83E5 /* NSString+HTML.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSString+HTML.m"; path = "Core/Source/NSString+HTML.m"; sourceTree = ""; }; - FABA3ECEE6A89B4087086F0D2377CB5A /* RDReaderView.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = RDReaderView.modulemap; sourceTree = ""; }; - FB36F27A8101BA01699CFD777FC1CAFA /* RDReaderView-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "RDReaderView-prefix.pch"; sourceTree = ""; }; - FD431E9FF16247D6AFF1148D33F06DEA /* RDEPUBSelectionLoupeView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBSelectionLoupeView.swift; sourceTree = ""; }; - FE10A5C6934704218EB16F8966AA0814 /* RDEPUBPageBreakPolicy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBPageBreakPolicy.swift; sourceTree = ""; }; + FA22FB2A1729AFA909E9AAE06BCDC019 /* RDEPUBChapterOffsetMap.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBChapterOffsetMap.swift; sourceTree = ""; }; + FD4E4C38FE23EEF72D4049DBFADB922C /* RDEPUBReaderSearchCoordinator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderSearchCoordinator.swift; sourceTree = ""; }; + FE1B490DE56DE55724779E3E8BF6D14A /* RDEPUBCFITextAssertion.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBCFITextAssertion.swift; sourceTree = ""; }; FEA9F91758013B23B0EEA71DA22E7475 /* Pods-ReadViewDemo-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-ReadViewDemo-Info.plist"; sourceTree = ""; }; FEB14A8F8170777DB7CCC3F27C8EA57A /* ImageIO.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ImageIO.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS18.0.sdk/System/Library/Frameworks/ImageIO.framework; sourceTree = DEVELOPER_DIR; }; - FF164505A477C6ED40FE8EF0CB2E6693 /* RDEPUBTextBookCache.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextBookCache.swift; sourceTree = ""; }; + FECC02C082DBCB6126A7ECBA72C258B3 /* RDEPUBTextBuildPipelineInterfaces.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextBuildPipelineInterfaces.swift; sourceTree = ""; }; FF1C41D226C0957F715EFF3F23893386 /* DTFoundation-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "DTFoundation-dummy.m"; sourceTree = ""; }; FF63F5E8902D6F3F5E845A924EBBC6D3 /* DTFoundationConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTFoundationConstants.h; path = Core/Source/DTFoundationConstants.h; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 0DE1ECAB91165C80E940E26216D40F84 /* Frameworks */ = { + 13EE47BF3F459A6D061107C6D8B7C515 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 5A0FD2132C522ED3FFB86E966FE288F9 /* Foundation.framework in Frameworks */, + 5DC896B6277CFD4745B6FFC1B65436E9 /* Foundation.framework in Frameworks */, + 9872A011777E0E50DDD196FA54ED0284 /* ImageIO.framework in Frameworks */, + ADD3B6D991C8DB8AB9DCA9568787D344 /* QuartzCore.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 22F00C8E9739C5623FED72E777C69A0C /* Frameworks */ = { + 1B92894A72CDF0235556D49F00026463 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + AA5731890291922E24FB7FFCC22F41A9 /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1002,14 +1011,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 5254383549A94DDFEA97C5C20A808F78 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 7721B54B344CC91C75F3508F8A38B094 /* Foundation.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; 6F1DC7DF5E89C820D04E068D56B1D0EF /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -1023,27 +1024,32 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - AAFF6297ECB0F5238719655741D4CC47 /* Frameworks */ = { + 76F9E948CD9009E8107E1C61C1C40F67 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - BF1455AB73F756E1DF11AC8ECD2CA7A7 /* Frameworks */ = { + 93E19E99C0C6D8B9536A6621A80FE307 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 41A990E0E4CAE5BADCB5E1643D508DFB /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + A73A5B71B58E98ECBF44502D27FAE0DE /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - D094297E3FF019E0C05C5244B095CA0A /* Frameworks */ = { + E4AF016E3A76A93A97661A7459A79847 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - C8E9353276833F3362D26F17A2FF2939 /* Foundation.framework in Frameworks */, - 7D6EFD0580A8BCD609B2076F8A6EB4C8 /* ImageIO.framework in Frameworks */, - DFC8567EED9764161A51DB808255D041 /* QuartzCore.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1187,18 +1193,6 @@ path = DTCoreText; sourceTree = ""; }; - 0BCB541A25608F56871618A1D03E9C54 /* Paging */ = { - isa = PBXGroup; - children = ( - A7F40EAB66363D681DA68981B17FB492 /* RDReaderPagingController.swift */, - 0E5D2C72E80EF71ECCFDFE5C476ADADE /* RDReaderPreloadController.swift */, - 0786D6430A29C2F90E4832048559BE21 /* RDReaderSpreadResolver.swift */, - 9C1B2F1D8E3F93A60375AA8853FF1842 /* RDReaderTapRegionHandler.swift */, - ); - name = Paging; - path = Paging; - sourceTree = ""; - }; 0D4A349829D1C0DC0E69C0A64B9A4139 /* Pods-ReadViewDemo */ = { isa = PBXGroup; children = ( @@ -1216,23 +1210,25 @@ path = "Target Support Files/Pods-ReadViewDemo"; sourceTree = ""; }; - 13D36789CF3D460E6FFE303B68A66962 /* Typesetter */ = { + 0ECFE93F228CBB8F5D8E41AB72D749B8 /* TextPage */ = { isa = PBXGroup; children = ( - F5847BF261408B9B82FB3BF7A9390AB3 /* RDEPUBAttachmentNormalizer.swift */, - 05ECE185AAFC5A857734DF5495F8E7C2 /* RDEPUBCFIMarkerInjector.swift */, - 545DD46BEAB1D1F7E0530E787095FCB2 /* RDEPUBFontNormalizer.swift */, - 5E8C914D69561C6C9736FCB3C6698CCC /* RDEPUBFragmentMarkerInjector.swift */, - E0F6036722A2FEED169B57120EB274D1 /* RDEPUBHTMLNormalizer.swift */, - B898A07D2E7D8E62F64BD28BAFA3DEFA /* RDEPUBRenderDiagnosticsCollector.swift */, - 0AE0BE26FBA95F74B6173965BEC302EB /* RDEPUBSemanticMarkerInjector.swift */, - 361565CCC385512EA14A6A2C9CFAF08B /* RDEPUBStyleSheetComposer.swift */, - B55E6E99C6F879CFD19D3674CE20075C /* RDEPUBTextRendererSupport.swift */, - 3424A6DFBC2AC519C7C599F18DCDC89D /* RDEPUBTypesettingPipeline.swift */, - 946AB5EF65FFA0C796D6B4E19D4B646D /* Compatibility */, + 2F899D2164D781FF192129E1C659613F /* RDEPUBDarkImageAdjuster.swift */, + 1961705269BD266F52EBD357EAE068A5 /* RDEPUBPageInteractionController.swift */, + 848DA9852FDF80FAB067E383E1D650C1 /* RDEPUBPageLayoutSnapshot.swift */, + E7B0CDC00940C453637FBC66E6C05D89 /* RDEPUBSelectionLoupeView.swift */, + 40FFA046E3AFCD87D8592AEFB6CFD987 /* RDEPUBSelectionOverlayView.swift */, + BFCD03AC792A6CF8550BC44A4339D9FE /* RDEPUBTextAnnotationOverlay.swift */, + D53EA3F44C0602B1BEB2F85B59B32CB3 /* RDEPUBTextContentInteractionCoordinator.swift */, + 27FE2A0ABB2E40A2D8D3B4BDECE106A7 /* RDEPUBTextContentView.swift */, + F77E0B31CE94ED97B9E5C254BF0DB072 /* RDEPUBTextPageBoundaryValidator.swift */, + E42A81201784E7976A4C546739DE6ED5 /* RDEPUBTextPageDecorationView.swift */, + 854840B8F97C908AB5B51EDF03E54D52 /* RDEPUBTextPageRenderView.swift */, + CCD1EE67D4C520598E5975F0489DCB87 /* RDEPUBTextPageVerticalJustifier.swift */, + 36BCDC7F25B3DB9F7FC2F681DD27B93E /* RDEPUBTextSelectionController.swift */, ); - name = Typesetter; - path = Typesetter; + name = TextPage; + path = TextPage; sourceTree = ""; }; 1A823333EC1496E37E1F99813FE335DD /* DTAnimatedGIF */ = { @@ -1244,20 +1240,41 @@ name = DTAnimatedGIF; sourceTree = ""; }; - 27F2A646BFA6F6504139570B69BEDF9B /* BuildPipeline */ = { + 1D9804819EBDA4A6E80B0DC0E8B5CEF0 /* EPUBTextRendering */ = { isa = PBXGroup; children = ( - CD0C3C872488B6341E22BF47B6F9BBD6 /* RDEPUBBuildDiagnosticsReporter.swift */, - 68A8597AE94ED09E9828E2EEA0D8FFFA /* RDEPUBChapterTailNormalizer.swift */, - 3008F6944BA740CD6E6F5CA33733C911 /* RDEPUBPaginationCacheCoordinator.swift */, - 72BE58BB9BF4DCDFDC6D5430AA2E82E9 /* RDEPUBTextBookBuilder.swift */, - FF164505A477C6ED40FE8EF0CB2E6693 /* RDEPUBTextBookCache.swift */, - 2F34FF3B7E71CCE4E9C73115AA710B1C /* RDEPUBTextBookModels.swift */, - 59036F71583DAE2641D9DAA567DBD208 /* RDEPUBTextBuildPipelineInterfaces.swift */, - C5B003AC0B46623423334F97FEE379B8 /* RDEPUBTextPerformanceSampler.swift */, + 317357794EF461FA4C6992E798C900DF /* RDEPUBChapterData.swift */, + 505D658FEB22042EEDC51D402700F8C9 /* RDEPUBDTCoreTextRenderer.swift */, + 80F1F9A3C3AD1C55622B17CA5D503766 /* RDEPUBTextIndexTable.swift */, + C8BE089AF845973208A11AA41A9B6AAB /* RDEPUBTextPositionConverter.swift */, + 3B35A0451D9A3CF5477258E38D363189 /* RDEPUBTextRenderer.swift */, + 24130F5639CFFFA28D8BE6C2BD7A45FE /* RDEPUBTextSearchEngine.swift */, + 75F44A99D2304FE5397B4DCD6BABAF2B /* RDPlainTextBookBuilder.swift */, + B9550C76BFCCB8D00C45A27D139400B1 /* BuildPipeline */, + C0A487BA5466E564181169CA28A4FDFF /* Pagination */, + CF0890FDD57F8AE21A281CF5336F2D6D /* Typesetter */, ); - name = BuildPipeline; - path = BuildPipeline; + name = EPUBTextRendering; + path = Sources/RDReaderView/EPUBTextRendering; + sourceTree = ""; + }; + 20DA68B2AE07089744D3DF8E725D162D /* ReaderView */ = { + isa = PBXGroup; + children = ( + 410C5BB742936BFF1A02BAB0970CAF34 /* RDReaderContentCell.swift */, + 56A9260F17C4825708B83598BEC99365 /* RDReaderFlowLayout.swift */, + AE6582B1336C77B6C366DAA669570B4A /* RDReaderGestureController.swift */, + 33452E6D078F6CC1EF8A17DF42966CAA /* RDReaderPageChildViewController.swift */, + A9B4C7EA8E0601A462DDA753AFA93E66 /* RDReaderView.swift */, + D24E48ADEAADE831B2F5FAFBF67CD53D /* RDReaderView+CollectionView.swift */, + F8BB0B072E5F24B51A6D348D8F9745CC /* RDReaderView+ContentAccess.swift */, + 499C327E148794A7F09BAF1C83BE59EF /* RDReaderView+PageCurl.swift */, + 83041D1E40ECC246DB5539C712499A09 /* RDReaderView+ToolView.swift */, + BF55DCBC3A5B0BEC5B1A4C6187F20D38 /* RDReaderViewProtocols.swift */, + 33FF4304BAE6D19ABD62A40CC34BEBD6 /* Paging */, + ); + name = ReaderView; + path = Sources/RDReaderView/ReaderView; sourceTree = ""; }; 30694C306AB98E50937E9ECB722C31A4 /* Core */ = { @@ -1267,6 +1284,30 @@ name = Core; sourceTree = ""; }; + 33FF4304BAE6D19ABD62A40CC34BEBD6 /* Paging */ = { + isa = PBXGroup; + children = ( + 8C99F4EC07FF6B3DD8C8B72E54DEB008 /* RDReaderPagingController.swift */, + 82B54A69DF5E94D0D1B34E9D31C0D997 /* RDReaderPreloadController.swift */, + 008302A48FE881CADADBCB02832B880B /* RDReaderSpreadResolver.swift */, + D75F5147BF67C9935CC45C16F0118C14 /* RDReaderTapRegionHandler.swift */, + ); + name = Paging; + path = Paging; + sourceTree = ""; + }; + 36863A73A562CDC80DBA082BD6FB8E96 /* Settings */ = { + isa = PBXGroup; + children = ( + 9C5B9705D72218CB383307A329C9060B /* RDEPUBReaderConfiguration.swift */, + 22FF6CAA8966DB1B4C14A695E355C881 /* RDEPUBReaderSettings.swift */, + 0901D33C8FF8497CDC7A4365D0D84218 /* RDEPUBReaderSettingsViewController.swift */, + 4F60D4A5E3A44B1AB998E185EFF5C046 /* RDEPUBReaderTheme.swift */, + ); + name = Settings; + path = Settings; + sourceTree = ""; + }; 387832C7C64B3B352215F0FD83B927AC /* Support Files */ = { isa = PBXGroup; children = ( @@ -1283,36 +1324,6 @@ path = "../Target Support Files/DTCoreText"; sourceTree = ""; }; - 399DBAA31AC98F6F98B27CE5ED36F63D /* Pod */ = { - isa = PBXGroup; - children = ( - 80A3A50AC272F9C52395F4818E87EA19 /* RDReaderView.podspec */, - ); - name = Pod; - sourceTree = ""; - }; - 39E5D96098508EBE207EB9A67F378ECB /* CFI */ = { - isa = PBXGroup; - children = ( - 4C0AFCECD74F73D7D40C6F3053AF6FEE /* RDEPUBCFI.swift */, - BA33898232E2ED58D3A5B60A8F56BAC6 /* RDEPUBCFICompatibility.swift */, - 54F135677B8806216984881B2333BF4E /* RDEPUBCFIDOMPathBuilder.swift */, - CED923CC25493B9CA28F24D209A33540 /* RDEPUBCFIError.swift */, - E9F5010D098DC3538CB8BAF64A54BF7B /* RDEPUBCFIGenerator.swift */, - 427D3D938726077995A928BFEDDC6632 /* RDEPUBCFIMap.swift */, - F5E771C978D8EFB4DD05E81447873572 /* RDEPUBCFIParser.swift */, - 129154729E86D56457FE6DC7DEEA55B6 /* RDEPUBCFIPath.swift */, - EF4AF0ABB6117B18C8AE08E883BEA7C6 /* RDEPUBCFIRange.swift */, - 2FBB458EDD978CBC54464EA28336F977 /* RDEPUBCFIRecoveryEngine.swift */, - 418CF402E2B3A6359A720876AF83E1F3 /* RDEPUBCFIResolver.swift */, - ADA1EB57E3C97548261B7AE9E5975272 /* RDEPUBCFISerializer.swift */, - C3170B05B50679D6D7029E693A4A6024 /* RDEPUBCFITextAssertion.swift */, - BE8A25FFCA0AD1D9C167CCEE28D2378A /* RDEPUBCFIUtilities.swift */, - ); - name = CFI; - path = CFI; - sourceTree = ""; - }; 426395460B992FC2D2EF86AF65197AD4 /* Pods */ = { isa = PBXGroup; children = ( @@ -1323,70 +1334,49 @@ name = Pods; sourceTree = ""; }; - 44496C06B38271B5703CC7890EEAED55 /* Notes */ = { + 4679A17AE67E985CADF7839F7D9A941B /* EPUBUI */ = { isa = PBXGroup; children = ( - 6C906FDE0E26C697C4D2FB2502F7D798 /* RDEPUBNotePopupCoordinator.swift */, - 45441D548F125483949D77F61F85AFE3 /* RDEPUBNotePopupViewController.swift */, - ); - name = Notes; - path = Notes; - sourceTree = ""; - }; - 46FCA5E1C91A068B8E7B222F017255EF /* EPUBUI */ = { - isa = PBXGroup; - children = ( - 0886011FDDE07A5C7BBC2168C401EAD2 /* RDEPUBAttachmentTooltipOverlayView.swift */, - 90FB64A00D5B29274A1EDAFD38A2A8B9 /* RDEPUBAttachmentTooltipView.swift */, - 254C03130C9163149B80FEBC8128119F /* RDEPUBImageViewController.swift */, - F17DB32BEDD4A7738B4AC8201E5BD91B /* RDEPUBImageViewerCoordinator.swift */, - A88F1371931B82C966232F059409D412 /* RDEPUBReaderBottomToolView.swift */, - 570429F8DD1951A554862120993C46B1 /* RDEPUBReaderChapterListController.swift */, - CEB68ED963D81A187618710413C3B523 /* RDEPUBReaderController.swift */, - 4CDD971696985E60155A09E16CD844C5 /* RDEPUBReaderController+AttachmentTooltip.swift */, - 44369E6800A89D0C5818CA884729D20F /* RDEPUBReaderController+ContentDelegates.swift */, - C012576F77900AEF84ACA075FF174D12 /* RDEPUBReaderController+DataSource.swift */, - A16FEBBEDD32F8EAE312AADBE815BF49 /* RDEPUBReaderController+ExternalLinks.swift */, - 5DE569B9F47EAF5135750BCF2E934C0F /* RDEPUBReaderController+LocationResolution.swift */, - 29075A60F0C3B46C5143EC971A0D16D4 /* RDEPUBReaderController+PublicAPI.swift */, - CF49CE19D9F09A60F438FF3612F43069 /* RDEPUBReaderController+RenderSupport.swift */, - 6B2DF9409FC76691EAC579DDF7247899 /* RDEPUBReaderController+RuntimeBridge.swift */, - DE93E7F2D03E5848ADB6C91620D5A245 /* RDEPUBReaderController+TableOfContents.swift */, - 61A1D30B96ADD9D1660073E9207329CF /* RDEPUBReaderDelegate.swift */, - 5E5956AA678A9521257D99891E823DE2 /* RDEPUBReaderHighlightsViewController.swift */, - AE90A6C0DA3B5094237AACF4D06C944A /* RDEPUBReaderPersistence.swift */, - 7DFE7162E90DAF71A557E4822C252E4F /* RDEPUBReaderSearchBarView.swift */, - 3C4658670F6EBD43067CF1D859518D23 /* RDEPUBReaderTableOfContentsItem.swift */, - DF346DB5BE7AF7245DCDDACEFDC59732 /* RDEPUBReaderToolView.swift */, - 982FBB7B62F54B7806EAD1C178B6A083 /* RDEPUBReaderTopToolView.swift */, - 5B4EAD9C5D3D276887E0AC6A35F10659 /* RDEPUBViewportTypes.swift */, - A98D6A8053F65B3872BF49A978E18042 /* RDEPUBWebContentView.swift */, - CCC938C9AB37D0B094B0CF78C098CBE6 /* RDEPUBWebDecorationOverlayView.swift */, - 3ECA70C45BE80D444EBFE0DA40424702 /* RDURLReaderController.swift */, - C60EBAD7361BD011961D6A1FB94B914C /* String+RDEPUB.swift */, - EE51FACCCAC4F6FE003BD3914F7B9071 /* UIColor+RDEPUB.swift */, - 933E1AC7CA1ADECA318762103FAC0AF3 /* UIColor+RDEPUBHex.swift */, - 44496C06B38271B5703CC7890EEAED55 /* Notes */, - 80733DE5ED1CC43B1F7E7162CD322D50 /* ReaderController */, - 47FBFDAEEC65FE0E797B25A8C15268B2 /* Settings */, - 8E6092699E4DFA4CEC58CF0EEACA7AD2 /* TextPage */, + F45A7967FB601D8BED750A9E37E7899C /* RDEPUBAttachmentTooltipOverlayView.swift */, + AC75B34F4CE50854BC099CE73D139FCC /* RDEPUBAttachmentTooltipView.swift */, + 1791083E7546C2EB443048851C122E32 /* RDEPUBImageViewController.swift */, + 7BFC2AF3C2082F2A0D9950A1B8256229 /* RDEPUBImageViewerCoordinator.swift */, + 7FDE14B76D550FCBD28D3B30AA9D883D /* RDEPUBReaderBottomToolView.swift */, + D4EB6B49DEC8BCB1ABD8083F9B903101 /* RDEPUBReaderChapterListController.swift */, + 75D73CEEFC4AA6AFA6EBF279221F5330 /* RDEPUBReaderController.swift */, + E52802E06864FE60CFBAE21EAA6F3F0F /* RDEPUBReaderController+AttachmentTooltip.swift */, + 3416C45A5E4AEF922A7D3804F0A05EB4 /* RDEPUBReaderController+ContentDelegates.swift */, + 31C306314EF985A32E583A25AAA39960 /* RDEPUBReaderController+DataSource.swift */, + 1E381C002AE6ECE51B0B77AA5007FE27 /* RDEPUBReaderController+ExternalLinks.swift */, + D9493E87BC278E65DA39B0F098CC01B9 /* RDEPUBReaderController+LocationResolution.swift */, + 1859C9EC3263145CE262EC15A12B6BE4 /* RDEPUBReaderController+PublicAPI.swift */, + F5C8F91E6B08B08138B628331DAAEC16 /* RDEPUBReaderController+RenderSupport.swift */, + E844B3375520F01C6CCE1468B53CCC6C /* RDEPUBReaderController+RuntimeBridge.swift */, + F08981630C2BB2DF438340C175302A5D /* RDEPUBReaderController+TableOfContents.swift */, + EF393040BF2038B940EA74164A6214F3 /* RDEPUBReaderDelegate.swift */, + 4537790EA93442CD0FA48609D7ADDD13 /* RDEPUBReaderHighlightsViewController.swift */, + 93A16F63ABA3D0BA695CC9F1F7D6F3DA /* RDEPUBReaderPersistence.swift */, + 50BEBB47FE6ED062DE6363BFDCC7D84C /* RDEPUBReaderSearchBarView.swift */, + 315243CD0784D4E8AF97453BF5848904 /* RDEPUBReaderTableOfContentsItem.swift */, + C525E69EA51BC555374CC559F2996233 /* RDEPUBReaderToolView.swift */, + 52816DCF8A866861EFF13A58D6D32CA8 /* RDEPUBReaderTopToolView.swift */, + 849DFA0D192A6586FCC90DE7E300D812 /* RDEPUBSettingsFlipAutomation.swift */, + B137EA59DB88E982FBF8E5C775975FE5 /* RDEPUBViewportTypes.swift */, + F66DD9D0E36BCFB8D70F713B112FFC5A /* RDEPUBWebContentView.swift */, + 9A220EF1E6F5821B91990AAED74A4FFC /* RDEPUBWebDecorationOverlayView.swift */, + 02CABD2C55EE6F8759C2702014273F00 /* RDURLReaderController.swift */, + 4DFBB7A0C649F48591647E3C08CE6852 /* String+RDEPUB.swift */, + 92ED368A3AC26AAF26FEB59577BBF3F4 /* UIColor+RDEPUB.swift */, + 7076326835119DD963CB9ABC0DF78460 /* UIColor+RDEPUBHex.swift */, + E2BC1C0C36766409417A11688961516E /* Notes */, + 9C4BCB0394060E7A874875778204D6FE /* ReaderController */, + 36863A73A562CDC80DBA082BD6FB8E96 /* Settings */, + 0ECFE93F228CBB8F5D8E41AB72D749B8 /* TextPage */, ); name = EPUBUI; path = Sources/RDReaderView/EPUBUI; sourceTree = ""; }; - 47FBFDAEEC65FE0E797B25A8C15268B2 /* Settings */ = { - isa = PBXGroup; - children = ( - 66D0B6D4C75424B340D7C9861D7DF6F6 /* RDEPUBReaderConfiguration.swift */, - 277A48279BD4FD22C6C552AAC4F282B2 /* RDEPUBReaderSettings.swift */, - 6777CA743F90F1D44EE010F6ED6A1F7F /* RDEPUBReaderSettingsViewController.swift */, - 0DC061242C98566FE767A2179BE8D9A9 /* RDEPUBReaderTheme.swift */, - ); - name = Settings; - path = Settings; - sourceTree = ""; - }; 4B9763CFE13CC8B0D8AA60EE28156E6D /* Support Files */ = { isa = PBXGroup; children = ( @@ -1416,6 +1406,17 @@ name = iOS; sourceTree = ""; }; + 4FC26BA2882A9DCE49E8D0B4EFA5D1EE /* Compatibility */ = { + isa = PBXGroup; + children = ( + 5F3B770A5B6ED1C21FDA2BD1A8B06EE6 /* RDEPUBCSSCompatibilityLayer.swift */, + 29DE76CD63BD47DC86DF55C349B1CF91 /* RDEPUBFontFallbackResolver.swift */, + 8DFA3BB3F5BC48BF4CA6F8DE4559318C /* RDEPUBStyleCompatibilityModels.swift */, + ); + name = Compatibility; + path = Compatibility; + sourceTree = ""; + }; 53105D96992884E1673FC639B3987E2C /* DTHTMLParser */ = { isa = PBXGroup; children = ( @@ -1425,63 +1426,67 @@ name = DTHTMLParser; sourceTree = ""; }; - 56EC7D8A1865CFA6A73E7472B78EA86A /* Models */ = { + 6E4AAE36070B08696D385595B12FF9BD /* ChapterRuntime */ = { isa = PBXGroup; children = ( - 517D111957FC986C0BE0281CA89159AF /* RDEPUBAnnotationModels.swift */, - 2FCEDA49EDECD7CEEEF8A65685B9870A /* RDEPUBPaginationModels.swift */, - 9FA1C7B2B5D3FE43AB0598F027C50377 /* RDEPUBReadingLocationModels.swift */, + 3652433CDE5ACCD783B54CBDD0CBB5C6 /* RDEPUBBackgroundTrace.swift */, + 523F6E31441155AAFAC1E88316C623A4 /* RDEPUBBookPageMap.swift */, + CE8C9E2C878448571156DFC0E41979AF /* RDEPUBChapterCacheKey.swift */, + CD5DB51D2F628791D4E0EB41C4B81AF1 /* RDEPUBChapterDataCache.swift */, + 6D5537F73FD04F43BE1E354A25710C9E /* RDEPUBChapterLoader.swift */, + 19D3A41F50CE425FA2929A6FBE743A84 /* RDEPUBChapterLocation.swift */, + FA22FB2A1729AFA909E9AAE06BCDC019 /* RDEPUBChapterOffsetMap.swift */, + C2135D2A77CD609485DAF400E1E3396F /* RDEPUBChapterRuntimeStore.swift */, + 7CA5ED27523EC3D3AFC0F01E05891FBB /* RDEPUBChapterSummaryDiskCache.swift */, + 64254678E1440D40D4BC39AE8B62BB27 /* RDEPUBChapterWarmupOrchestrator.swift */, + 0742A5B640EA32CFFCB23C98EA7E4E02 /* RDEPUBPageCountCache.swift */, + 05A13D7709B82256F12E52DC6E65F696 /* RDEPUBPageResolver.swift */, + 2D80571A5CC74FDE8F5CE6E70B50023F /* RDEPUBRuntimeChapter.swift */, + C52AC0144029821AA538D6165315C585 /* RDEPUBRuntimePageCount.swift */, ); - name = Models; - path = Models; + name = ChapterRuntime; + path = ChapterRuntime; sourceTree = ""; }; - 62F2A978E55ACE107C18809C9C197080 /* Support Files */ = { + 828B7FE388769409E56A0166AC98DE46 /* EPUBCore */ = { isa = PBXGroup; children = ( - FABA3ECEE6A89B4087086F0D2377CB5A /* RDReaderView.modulemap */, - A61F5753AE7B5122FE65CF07CF1AD5FD /* RDReaderView-dummy.m */, - 8A1D29D22B94FD4B310B5A419E79057B /* RDReaderView-Info.plist */, - FB36F27A8101BA01699CFD777FC1CAFA /* RDReaderView-prefix.pch */, - 9D28F67E16027AF4FA4F9D501C4D0712 /* RDReaderView-umbrella.h */, - 9F8BA45FA0D8E3CBAAE6E18272EB0644 /* RDReaderView.debug.xcconfig */, - 55CA6158EBEFCD459EB481660A12EB86 /* RDReaderView.release.xcconfig */, - 02946CDDA8033AFAA82187D50800FEA8 /* ResourceBundle-RDReaderViewAssets-RDReaderView-Info.plist */, + E97B6B6C59BBCD6685CE808E64981E76 /* RDEPUBAssetRepository.swift */, + E2159ABBE19F1408CF16A6EF0271404D /* RDEPUBFixedLayoutTemplate.swift */, + F69C9651823EAB579B078EC3B7435D16 /* RDEPUBJavaScriptBridge.swift */, + EDFEB59EC6040AB3CF58E4E1045A8913 /* RDEPUBModels.swift */, + 055B53D0A60DC351390338A48800AE77 /* RDEPUBNavigatorLayoutContext.swift */, + 65572083A10EE0C48AA7F493F923BCC0 /* RDEPUBPaginator.swift */, + 2AACA59CA4CBD2AFAACC3D162C2C75B5 /* RDEPUBParser.swift */, + 482C32ED3E6D23BBCED7BBE64E370A91 /* RDEPUBParser+Archive.swift */, + F94780553A2ED7BE5E972D634F7F52DE /* RDEPUBParser+Package.swift */, + 31B49361D4C4F119B135F85B7A8219DB /* RDEPUBParser+ReadingProfile.swift */, + 170D81239AF3CE5CD64BA2E44A505872 /* RDEPUBParser+Resources.swift */, + 43197856E7D06A21EF9B252FD37456A5 /* RDEPUBParser+TOC.swift */, + D1EAAFA56DA59E80D53DA0DC7C6532D2 /* RDEPUBPreferences.swift */, + 2FA2158447C66C1AA074403C4AEF1BD9 /* RDEPUBPublication.swift */, + 314E39CF7ADE645354AC8873D80957CA /* RDEPUBReadingSession.swift */, + 564F072D0966350F4C3986E01EB3EB2C /* RDEPUBRenderRequest.swift */, + 677182E8663D93C2C9E5617999F649C7 /* RDEPUBResourceResolver.swift */, + 5B5686B2CD1ADB2443ECF94B15903873 /* RDEPUBResourceURLSchemeHandler.swift */, + DA068568A9B92FE52049E190968609A8 /* RDEPUBSafeArea.swift */, + 78B43BA14CD70F5448082DE1EE73B034 /* RDEPUBSearchEngine.swift */, + 07E07EEE45C5439A207C5647210A4A7F /* RDEPUBSearchModels.swift */, + 72F99D96321DF0F2BC595BC7B6A66EA2 /* RDEPUBStyleSheetBuilder.swift */, + 5F81C81E7CF8B0AE4646712FC2ADD8B0 /* RDEPUBTextAnchor.swift */, + 09608C067F73D7A137B9F22AF1384DF2 /* RDEPUBWebView.swift */, + C8E6795B0D648B27CC7EB030E7550566 /* RDEPUBWebView+Configuration.swift */, + BD8F015377F898E4B0229FF584685390 /* RDEPUBWebView+FixedLayout.swift */, + 321FA16FF2FAD7985CCAC14EF5A221D4 /* RDEPUBWebView+JavaScriptBridge.swift */, + 4AAC2FDC24D8604A39BD25111689D06A /* RDEPUBWebView+Reflowable.swift */, + CADF4452F89F7A5F419D2841FABC8CBC /* RDEPUBWebView+Search.swift */, + C59CB44187E054E80CA13F60FF8EE303 /* RDEPUBWebViewDebug.swift */, + B3ECE7071D970FABF7CC926558951E2F /* CFI */, + EDB7CA736956B024AA10C0D144AC906D /* Models */, + A876037B9729B7D0BE726EB488D682BC /* Notes */, ); - name = "Support Files"; - path = "ReadViewDemo/Pods/Target Support Files/RDReaderView"; - sourceTree = ""; - }; - 80733DE5ED1CC43B1F7E7162CD322D50 /* ReaderController */ = { - isa = PBXGroup; - children = ( - 6F4858380CB626A893FA6803F5574F89 /* RDEPUBBackgroundCoverageStore.swift */, - 1776D2B8346E3DE2D2CFF9AA994D50DF /* RDEPUBBackgroundPriorityPolicy.swift */, - 943DB891CA340D3E0A65D0267100C3E7 /* RDEPUBJumpSession.swift */, - 842DE3099F95A155AF00FCEC57A65821 /* RDEPUBMetadataParseCancellationController.swift */, - EDA3C47F4EB23BAB5E96FD4DF3DFA59D /* RDEPUBMetadataParseWorker.swift */, - E2A2130B4AB4BB4B5E30E4442A0FD644 /* RDEPUBPageMapReconciliationCoordinator.swift */, - 72C909891BE902A0BB13D4A142EE982F /* RDEPUBPresentationRuntime.swift */, - 8E0EF27F41F1DF49C126E34B404497CF /* RDEPUBReaderAnnotationCoordinator.swift */, - 7031B493810918D5B50450340CA6652B /* RDEPUBReaderAssemblyCoordinator.swift */, - E3FEF8716C99974FB6997BFBF339FD91 /* RDEPUBReaderChromeCoordinator.swift */, - 2EDB136931B7075E5A4F6BD8E5E2DBE6 /* RDEPUBReaderContext.swift */, - 8811A5F210087839AA7746D9D4CFEB23 /* RDEPUBReaderDependencies.swift */, - 3F6776D2868DE1A8CAC80752CB023567 /* RDEPUBReaderEnvironment.swift */, - 0FF7BBD4C881AD7327290471E9484E1F /* RDEPUBReaderLoadCoordinator.swift */, - A1570DC08749A3866877CAF0A6BD877C /* RDEPUBReaderLocationCoordinator.swift */, - E7F6AAF70ED1162640040B9969BBE6D5 /* RDEPUBReaderPaginationCoordinator.swift */, - A12918D1D6A305DDE8B4249CCE38BB1F /* RDEPUBReaderRuntime.swift */, - E2C690372BDD5CA6E2A01A295EDE7C24 /* RDEPUBReaderSearchCoordinator.swift */, - CC8B39E69CFC5D4DD1D47A29F6D9E852 /* RDEPUBReaderServices.swift */, - CF369892013F3178789ADFC74384ADC2 /* RDEPUBReaderState.swift */, - 56158B68400B5C946109EDFD7555A8A7 /* RDEPUBReaderUIState.swift */, - 455F46F5F9EA1B2EAF47E54361B9E5F1 /* RDEPUBReaderViewportMonitor.swift */, - F6E041555AFAC5F8BD987FCA9DAC0949 /* RDEPUBSelectionState.swift */, - 9A31F6AB2F37012A80FE77D7309BEEF9 /* ChapterRuntime */, - ); - name = ReaderController; - path = ReaderController; + name = EPUBCore; + path = Sources/RDReaderView/EPUBCore; sourceTree = ""; }; 8AE80DCE6937729AEA82EC094AC470AE /* Resources */ = { @@ -1492,51 +1497,6 @@ name = Resources; sourceTree = ""; }; - 8E6092699E4DFA4CEC58CF0EEACA7AD2 /* TextPage */ = { - isa = PBXGroup; - children = ( - F0580E9407862B9D452289BBF1C4CA01 /* RDEPUBDarkImageAdjuster.swift */, - 252AFCFB40C36621E9C98C6644A56EE6 /* RDEPUBPageInteractionController.swift */, - D6901981E3F4F05F9FAC5ECE00D8983E /* RDEPUBPageLayoutSnapshot.swift */, - FD431E9FF16247D6AFF1148D33F06DEA /* RDEPUBSelectionLoupeView.swift */, - DEE95CBD7B492C5453D2FFA983C5CC02 /* RDEPUBSelectionOverlayView.swift */, - 9B8EBA6DFDDDD074E804C1689727074E /* RDEPUBTextAnnotationOverlay.swift */, - 890B65045CA1A5D01EDF09F7FD14C6C3 /* RDEPUBTextContentInteractionCoordinator.swift */, - 9435D40191E13E2949BA08196EFE296F /* RDEPUBTextContentView.swift */, - 53B7AB6E967C804E556A13DA6CC254A0 /* RDEPUBTextPageDecorationView.swift */, - B879D43D53D77B2C9BA10AE5CDC71CED /* RDEPUBTextPageRenderView.swift */, - A6550AF614406015AE2CCD348C28A3BE /* RDEPUBTextSelectionController.swift */, - ); - name = TextPage; - path = TextPage; - sourceTree = ""; - }; - 8FC974FE4013F8502C8F4C9902F99124 /* Pagination */ = { - isa = PBXGroup; - children = ( - B62755E9A395FF22E7405C3FE192D5F3 /* RDEPUBChapterPageCounter.swift */, - 81211446372A6A55789AA7E7152E7084 /* RDEPUBCoreTextPageFrameFactory.swift */, - FE10A5C6934704218EB16F8966AA0814 /* RDEPUBPageBreakPolicy.swift */, - 7F8C64CB3F3D0B7D4AA66798C740CB20 /* RDEPUBTextLayouter.swift */, - 07C08997AE3D75194E400010A0AE4820 /* RDEPUBTextLayoutFrame.swift */, - D4721E12B4121C46B8368D085D91EC2B /* RDEPUBTextPaginationInterfaces.swift */, - 78C97EDF23543CE63904C4D8A066A7A1 /* RDEPUBTextPaginationSupport.swift */, - ); - name = Pagination; - path = Pagination; - sourceTree = ""; - }; - 946AB5EF65FFA0C796D6B4E19D4B646D /* Compatibility */ = { - isa = PBXGroup; - children = ( - 30EE98BBC2688DFF0B50F9C417007886 /* RDEPUBCSSCompatibilityLayer.swift */, - 5F9FE9924520900BBDF724D9903C5309 /* RDEPUBFontFallbackResolver.swift */, - 5077339D9632D68EDAB64BBEF622E154 /* RDEPUBStyleCompatibilityModels.swift */, - ); - name = Compatibility; - path = Compatibility; - sourceTree = ""; - }; 994C39A644C0722C7A9E97AB46DB8965 /* Targets Support Files */ = { isa = PBXGroup; children = ( @@ -1545,26 +1505,36 @@ name = "Targets Support Files"; sourceTree = ""; }; - 9A31F6AB2F37012A80FE77D7309BEEF9 /* ChapterRuntime */ = { + 9C4BCB0394060E7A874875778204D6FE /* ReaderController */ = { isa = PBXGroup; children = ( - A4B2389196B50CE10DE62C6DF588B1D9 /* RDEPUBBackgroundTrace.swift */, - 83E9A6D890549C856C0277BE3A9B01A4 /* RDEPUBBookPageMap.swift */, - BC5131ADC7B6C3869C5CA5A5CB52C06F /* RDEPUBChapterCacheKey.swift */, - 3667CE400B3A606C7BE2D736B10AB546 /* RDEPUBChapterDataCache.swift */, - AF8CFF30D6E79EDA9ADA4C8B8B5F52B2 /* RDEPUBChapterLoader.swift */, - 1C5CA885255B08C8AD10778C62071BCD /* RDEPUBChapterLocation.swift */, - BFBE38B3A4D9E60E2B1683A475513E46 /* RDEPUBChapterOffsetMap.swift */, - 0D9C9D60B2B26F9890D35189DEBC7580 /* RDEPUBChapterRuntimeStore.swift */, - C4E711A4F76E5BF2095569B5A9B3F5BB /* RDEPUBChapterSummaryDiskCache.swift */, - C66C203D247690A4DDE08BF5A5D56B3B /* RDEPUBChapterWarmupOrchestrator.swift */, - C4912F524E40CC6107099AB780A0E0BF /* RDEPUBPageCountCache.swift */, - DC7BE59730389C1EC7BF65734D0D6776 /* RDEPUBPageResolver.swift */, - 579B1DD9DCEE9A1C8B88EB7D4FC7328B /* RDEPUBRuntimeChapter.swift */, - F2FB12B4D5D80C72658331C61991766C /* RDEPUBRuntimePageCount.swift */, + 5EB2B007B49D93FC696248480F4CB984 /* RDEPUBBackgroundCoverageStore.swift */, + F67C99E329F6EE4951953549B099CE46 /* RDEPUBBackgroundPriorityPolicy.swift */, + AE6769FF56092F4EB6B5EDCD64F8E6A7 /* RDEPUBJumpSession.swift */, + 995E88CDC3691BA531FF7951E4C809EC /* RDEPUBMetadataParseCancellationController.swift */, + 1977F26E5E225E266FC92C775A41E1F3 /* RDEPUBMetadataParseWorker.swift */, + DC2EC4ECF9C8015EDECE928DCA3CC4B3 /* RDEPUBPageMapReconciliationCoordinator.swift */, + ACD11D2C8694B9E3BDD175F1EEBEB64D /* RDEPUBPresentationRuntime.swift */, + 78D2759A8A01919CE516A30C1A04B967 /* RDEPUBReaderAnnotationCoordinator.swift */, + 8A50D413DFA43820BCD76D668C0C7868 /* RDEPUBReaderAssemblyCoordinator.swift */, + 6B9450CAB183FFD7F4018D819E02321C /* RDEPUBReaderChromeCoordinator.swift */, + 3CF48E002B64BF7AF8BDBEB9A572C13F /* RDEPUBReaderContext.swift */, + A1718601130E0F134E893F2A5CE605C6 /* RDEPUBReaderDependencies.swift */, + 12422B421A127464A62DF332C3EAF31E /* RDEPUBReaderEnvironment.swift */, + 77CF002A64746DB8BE37C9DC0941C805 /* RDEPUBReaderLoadCoordinator.swift */, + 60FB0E099208100165A2E44F44CA76B1 /* RDEPUBReaderLocationCoordinator.swift */, + 1EF9571672022F0A84D66AC6E6F91305 /* RDEPUBReaderPaginationCoordinator.swift */, + C49A29FA18CE9201BCA63615AEF3457F /* RDEPUBReaderRuntime.swift */, + FD4E4C38FE23EEF72D4049DBFADB922C /* RDEPUBReaderSearchCoordinator.swift */, + 0FDF74546728C05BFEA4B3BC4D6905AF /* RDEPUBReaderServices.swift */, + F1843DDD87F5732183A424372B8F57F3 /* RDEPUBReaderState.swift */, + DFDE9DF5F8221764CC5AD1218EC24236 /* RDEPUBReaderUIState.swift */, + 7045AD2296EB5CDE847902C39A59F370 /* RDEPUBReaderViewportMonitor.swift */, + 71E8149D8D8A8F61C09D98F329F11CA0 /* RDEPUBSelectionState.swift */, + 6E4AAE36070B08696D385595B12FF9BD /* ChapterRuntime */, ); - name = ChapterRuntime; - path = ChapterRuntime; + name = ReaderController; + path = ReaderController; sourceTree = ""; }; 9C7F7E7109B9004B64578ADED4DB8E0D /* Core */ = { @@ -1614,23 +1584,77 @@ name = Core; sourceTree = ""; }; - 9E100780A98E22AF423BFB0DC63B601C /* ReaderView */ = { + A6E4119383355B5EB9579F43D584B9FD /* RDReaderView */ = { isa = PBXGroup; children = ( - 76919E99E9F16C30FA06F643643AA997 /* RDReaderContentCell.swift */, - E4C4605A9B7326DBE0CED7EB66A7416F /* RDReaderFlowLayout.swift */, - 10617286346E2E6D7BB30203A65302CA /* RDReaderGestureController.swift */, - AB3DF251DDD78EDAEE82FBEBDF9CE79B /* RDReaderPageChildViewController.swift */, - 1FE1D4A863768FC78F6B76B6A181267C /* RDReaderView.swift */, - 4C4682C38E0A66C0E9760FC62C00A327 /* RDReaderView+CollectionView.swift */, - 0D170B1455CB3C94EFC34D7B67EDC001 /* RDReaderView+ContentAccess.swift */, - 2E281F0688B1D356CF1654C6063AE77D /* RDReaderView+PageCurl.swift */, - 648D6AC5A8FA53918EDB418D8A36710E /* RDReaderView+ToolView.swift */, - 1058DD74F97F43193DBA11E135ACFF22 /* RDReaderViewProtocols.swift */, - 0BCB541A25608F56871618A1D03E9C54 /* Paging */, + 2EBD41467F344F6091AD0C1A3981EDC3 /* cssInjector.js */, + 64676B6C8A9F9195A481010213F37B6C /* epub-bridge.js */, + C229DC7F5A2BB8C2A3C586FF6CF41D47 /* epub-fixed-layout.html */, + 15A5AF469CA067562D1516F98913D4DF /* rangy-core.js */, + 1527510DA54482E3557D6BB3EB651015 /* rangy-serializer.js */, + 3AF63806C4793F384C4CF28201BC756C /* WeReadApi.js */, + EB7C7A670C851744ACBCA45DA70795C8 /* wxread-dark.css */, + 7667AF77CBF47AFAA7D5F190B16A51FF /* wxread-default.css */, + E15D7179C6CF82530CF5E7264BBA1679 /* wxread-replace.css */, + 4F5A145710C3E212B771C4E38BED9926 /* wxread-replace-latin.css */, + 828B7FE388769409E56A0166AC98DE46 /* EPUBCore */, + 1D9804819EBDA4A6E80B0DC0E8B5CEF0 /* EPUBTextRendering */, + 4679A17AE67E985CADF7839F7D9A941B /* EPUBUI */, + F98C9DB9E125F328B2B30E1CE7F0C09A /* Pod */, + 20DA68B2AE07089744D3DF8E725D162D /* ReaderView */, + A873C6C06E8019679E6189DCC59175B4 /* Support Files */, ); - name = ReaderView; - path = Sources/RDReaderView/ReaderView; + name = RDReaderView; + path = ../..; + sourceTree = ""; + }; + A873C6C06E8019679E6189DCC59175B4 /* Support Files */ = { + isa = PBXGroup; + children = ( + 7B0179A6B7825D9A269A8A50C2BCBDDB /* RDReaderView.modulemap */, + 1C3DEA097D20AC964CFB673C39B4A8AF /* RDReaderView-dummy.m */, + 0EA81A6E9B081AC375550C90411530B8 /* RDReaderView-Info.plist */, + 5514CEBB75D8BFFC1D1CA08E8E46BE62 /* RDReaderView-prefix.pch */, + 36606A851BDB5FFF6E9BFFDD7FB72455 /* RDReaderView-umbrella.h */, + D3FE3C2B203F85680560F45459F5B281 /* RDReaderView.debug.xcconfig */, + 2B73CF24646475E517B8FDF110972E77 /* RDReaderView.release.xcconfig */, + D6DAFB416DE591A656C8614E117EEBEF /* ResourceBundle-RDReaderViewAssets-RDReaderView-Info.plist */, + ); + name = "Support Files"; + path = "ReadViewDemo/Pods/Target Support Files/RDReaderView"; + sourceTree = ""; + }; + A876037B9729B7D0BE726EB488D682BC /* Notes */ = { + isa = PBXGroup; + children = ( + 0430034A7AFBCEC269D7C46517004DF0 /* RDEPUBNoteDetector.swift */, + 8D0BFFD14B93A2F313B937F14652738C /* RDEPUBNoteModels.swift */, + 11D2090101EA891F21834863EE859AE8 /* RDEPUBNoteResolver.swift */, + ); + name = Notes; + path = Notes; + sourceTree = ""; + }; + B3ECE7071D970FABF7CC926558951E2F /* CFI */ = { + isa = PBXGroup; + children = ( + 976DBE312D138856488A4DEF88606BC9 /* RDEPUBCFI.swift */, + 8F08538F2728E3B8B81113D12DB74E3A /* RDEPUBCFICompatibility.swift */, + 49DF44BF9FBD9CCC9CDE0A998C428D86 /* RDEPUBCFIDOMPathBuilder.swift */, + 9C1CDD44F96B466A619015AA0A7B2D17 /* RDEPUBCFIError.swift */, + 104930ADAD326C90EB587485A6BFF755 /* RDEPUBCFIGenerator.swift */, + B0390F2BB06B9CE8FCBCD30D60C154B9 /* RDEPUBCFIMap.swift */, + 0ADCC15F3965570C3568420F9A75845E /* RDEPUBCFIParser.swift */, + CDCA21771B2D145D7DCFEEDE00FEDADC /* RDEPUBCFIPath.swift */, + 842B11843F82FBEA1D725543ACAB02CE /* RDEPUBCFIRange.swift */, + 35803D654BE44326A28A0947DD178B63 /* RDEPUBCFIRecoveryEngine.swift */, + DFC3591CDAEE16F7444AC3B176EFDAFD /* RDEPUBCFIResolver.swift */, + F54575506F65B0B0E12AABF25A9E6C6F /* RDEPUBCFISerializer.swift */, + FE1B490DE56DE55724779E3E8BF6D14A /* RDEPUBCFITextAssertion.swift */, + E6CA207039A89EF3323F6FFEA38A1C3F /* RDEPUBCFIUtilities.swift */, + ); + name = CFI; + path = CFI; sourceTree = ""; }; B45E17EA805660F2389832287623284D /* ZIPFoundation */ = { @@ -1664,65 +1688,43 @@ path = ZIPFoundation; sourceTree = ""; }; + B9550C76BFCCB8D00C45A27D139400B1 /* BuildPipeline */ = { + isa = PBXGroup; + children = ( + B3B0AAC7948C4A103B284B0F3DCC1262 /* RDEPUBBuildDiagnosticsReporter.swift */, + A59C77DC849EDF86936A25873E674F72 /* RDEPUBChapterTailNormalizer.swift */, + 528643F4F0CD2FEC7AD5C0ACA9895D9D /* RDEPUBPaginationCacheCoordinator.swift */, + 0F5110430A322C853C80F6041B0EDF94 /* RDEPUBTextBookBuilder.swift */, + 696C8561F8104D867B50A79E1147DE02 /* RDEPUBTextBookCache.swift */, + 33643E88B779A3DB1B3A14C7A194045B /* RDEPUBTextBookModels.swift */, + FECC02C082DBCB6126A7ECBA72C258B3 /* RDEPUBTextBuildPipelineInterfaces.swift */, + 8300EA716892548FEA44EC27801F5987 /* RDEPUBTextPerformanceSampler.swift */, + ); + name = BuildPipeline; + path = BuildPipeline; + sourceTree = ""; + }; B9CF9F63ECCD4435AA8F5FEDC37E6258 /* Development Pods */ = { isa = PBXGroup; children = ( - C0BBFCB6AFC32A8E77FD4ABAB76E1332 /* RDReaderView */, + A6E4119383355B5EB9579F43D584B9FD /* RDReaderView */, ); name = "Development Pods"; sourceTree = ""; }; - C09C89FD8C916F7A2BB28DBC54EDDF84 /* Notes */ = { + C0A487BA5466E564181169CA28A4FDFF /* Pagination */ = { isa = PBXGroup; children = ( - CC0E8A0B81E73D17CDACE523F47D124B /* RDEPUBNoteDetector.swift */, - 8D474A46702BFAA8E3AAFAC5EE0E3C20 /* RDEPUBNoteModels.swift */, - A184BC6F2CCE83350332C9F00071A2B9 /* RDEPUBNoteResolver.swift */, + 328AA616EE25AB53BFB60EFE1C7AAFCE /* RDEPUBChapterPageCounter.swift */, + 09336B106D598DCD38F6B79AEA629066 /* RDEPUBCoreTextPageFrameFactory.swift */, + CD3430DE68FE0020F68C496C24E87470 /* RDEPUBPageBreakPolicy.swift */, + 86526ADF32337683AA173B5FC1E6A94C /* RDEPUBTextLayouter.swift */, + 9E94387C53C6E054A73F8EE89787003D /* RDEPUBTextLayoutFrame.swift */, + 8ED87665B0B64B6E8153C0490203E43B /* RDEPUBTextPaginationInterfaces.swift */, + F4609798012DB9C5B85641224CD6081D /* RDEPUBTextPaginationSupport.swift */, ); - name = Notes; - path = Notes; - sourceTree = ""; - }; - C0BBFCB6AFC32A8E77FD4ABAB76E1332 /* RDReaderView */ = { - isa = PBXGroup; - children = ( - ECBE8305E343FF00B5DDF4F8F9D18623 /* cssInjector.js */, - 091E53DC8215AED45D88A2ABA24A2140 /* epub-bridge.js */, - 5E958924060294CE9417399BB02AB344 /* epub-fixed-layout.html */, - 8F9C05A5DE7C804D6531F4BBF31A3045 /* rangy-core.js */, - 25E8E62C9DC0A4AE49F168F04CF8B9D3 /* rangy-serializer.js */, - F46977FAF9F0EAEDF840BDA49288CC99 /* WeReadApi.js */, - 8AE69217E6A738AC11FEB58F2603B17F /* wxread-dark.css */, - 0D253DF65322509913DE34899979C30B /* wxread-default.css */, - F81B70DF51F9CD64A7DC5AAF3941F72C /* wxread-replace.css */, - 6E7E8438D5E5533B7BE96AC6FA8FD8BD /* wxread-replace-latin.css */, - CD687E98AAFF2E945CF39FACBBF63D90 /* EPUBCore */, - C51190ED4FDD85541ECC59886B5B7142 /* EPUBTextRendering */, - 46FCA5E1C91A068B8E7B222F017255EF /* EPUBUI */, - 399DBAA31AC98F6F98B27CE5ED36F63D /* Pod */, - 9E100780A98E22AF423BFB0DC63B601C /* ReaderView */, - 62F2A978E55ACE107C18809C9C197080 /* Support Files */, - ); - name = RDReaderView; - path = ../..; - sourceTree = ""; - }; - C51190ED4FDD85541ECC59886B5B7142 /* EPUBTextRendering */ = { - isa = PBXGroup; - children = ( - B1AF2749008FE67A3281B83EE327E41D /* RDEPUBChapterData.swift */, - 0E160FF00EF4B6DB318FEDCD72A026F3 /* RDEPUBDTCoreTextRenderer.swift */, - 89755690B804A64EE69FE2D7321CA9B6 /* RDEPUBTextIndexTable.swift */, - 7A971ECCC1DDFDE6D5417E949E3B1FD2 /* RDEPUBTextPositionConverter.swift */, - 5B4081F4EC77470F1257F11DB2A4B55D /* RDEPUBTextRenderer.swift */, - 06733E30802CA08ACF312C763BD37795 /* RDEPUBTextSearchEngine.swift */, - 2739EAD69AB2F5F6FA80E254D294440D /* RDPlainTextBookBuilder.swift */, - 27F2A646BFA6F6504139570B69BEDF9B /* BuildPipeline */, - 8FC974FE4013F8502C8F4C9902F99124 /* Pagination */, - 13D36789CF3D460E6FFE303B68A66962 /* Typesetter */, - ); - name = EPUBTextRendering; - path = Sources/RDReaderView/EPUBTextRendering; + name = Pagination; + path = Pagination; sourceTree = ""; }; CB07546106F457AC4196E207FEBAB4ED /* UIKit */ = { @@ -1752,45 +1754,23 @@ name = UIKit; sourceTree = ""; }; - CD687E98AAFF2E945CF39FACBBF63D90 /* EPUBCore */ = { + CF0890FDD57F8AE21A281CF5336F2D6D /* Typesetter */ = { isa = PBXGroup; children = ( - A472A71A962C2E34AB358EC26AEA60B4 /* RDEPUBAssetRepository.swift */, - 38459BA6DDC11AC3B9574C4E48F48ADC /* RDEPUBFixedLayoutTemplate.swift */, - A191A2F7DD62299E8945911DC282FFA0 /* RDEPUBJavaScriptBridge.swift */, - 4646F47318195C5CDADF0D93A4A2FC91 /* RDEPUBModels.swift */, - 2092D0DAEE6507B0B448DAA0A4888191 /* RDEPUBNavigatorLayoutContext.swift */, - 8514F67C3335EEA160B6A502DC380C6B /* RDEPUBPaginator.swift */, - EFFC77747115ACAF9EE13A1CEAEEA539 /* RDEPUBParser.swift */, - 2F653BA6E911AE149EB7FF7471D9D9BD /* RDEPUBParser+Archive.swift */, - E38BEF27B99CFAA178DE8917D69F11F8 /* RDEPUBParser+Package.swift */, - 58C72D7DF4220C0907CE8795E8900E79 /* RDEPUBParser+ReadingProfile.swift */, - BD161DA5F1982A4BA70B86D3D27455A3 /* RDEPUBParser+Resources.swift */, - C3A0D1E77F50E5274CCC99EEA427C15E /* RDEPUBParser+TOC.swift */, - 52E599D70519E92FCD9A508E1C821637 /* RDEPUBPreferences.swift */, - A30017EA232AF10EF5AEF1A20891306E /* RDEPUBPublication.swift */, - 0DE6AC16B3AE09561A7557F826881E3D /* RDEPUBReadingSession.swift */, - 25C6A0883824F05CF90F21478E019975 /* RDEPUBRenderRequest.swift */, - 29D1AFEDD39DE3A55D023DCF1DD8E100 /* RDEPUBResourceResolver.swift */, - 9ED2C72C44EE3717E5F3B45933FC5F5C /* RDEPUBResourceURLSchemeHandler.swift */, - 1DD088C35A5559FEE1027DAE37417E3D /* RDEPUBSafeArea.swift */, - 6B24B2EBB40F90487F5EF3A6451834A8 /* RDEPUBSearchEngine.swift */, - BA6B5FFFF22D8A36CC593817C0494CD1 /* RDEPUBSearchModels.swift */, - 82BD20A4273D9C421228620048787AD0 /* RDEPUBStyleSheetBuilder.swift */, - BAAB1142496F4E594573D85EF76670A8 /* RDEPUBTextAnchor.swift */, - 74CB908492A655C93144CB03E59A2CAB /* RDEPUBWebView.swift */, - 843CB00ED0D033E72DD79F0B27BE82E0 /* RDEPUBWebView+Configuration.swift */, - 5F41DCAB71A589008105D8C3AB0F8878 /* RDEPUBWebView+FixedLayout.swift */, - 1D24B9DBA8D8A1B00CEF2E2238C16681 /* RDEPUBWebView+JavaScriptBridge.swift */, - 32AD569BCA384A60FC2E1E08CE3529AD /* RDEPUBWebView+Reflowable.swift */, - 130135CFECAE1E38379F213C3C298BD1 /* RDEPUBWebView+Search.swift */, - 9117DB8611498A875CF9CF11D092BFA5 /* RDEPUBWebViewDebug.swift */, - 39E5D96098508EBE207EB9A67F378ECB /* CFI */, - 56EC7D8A1865CFA6A73E7472B78EA86A /* Models */, - C09C89FD8C916F7A2BB28DBC54EDDF84 /* Notes */, + 63A75BF0478FAC7398F5E66A509F639D /* RDEPUBAttachmentNormalizer.swift */, + 11C3B7C93919D787AAC0C4D25E52805A /* RDEPUBCFIMarkerInjector.swift */, + 63D23A912F5F91D0D3D83DF9E05515D0 /* RDEPUBFontNormalizer.swift */, + 587C2E270D5414FF4E3786D14BD36694 /* RDEPUBFragmentMarkerInjector.swift */, + E3B908A78A947A1A9D66C368CB616DE4 /* RDEPUBHTMLNormalizer.swift */, + 2B7FCEEAD833F7C1706659E688B09BEA /* RDEPUBRenderDiagnosticsCollector.swift */, + 8F4881006C6FAE4DFADBE2ACE4E9A744 /* RDEPUBSemanticMarkerInjector.swift */, + F0796C7E8BEEA96989FCE6698868366D /* RDEPUBStyleSheetComposer.swift */, + 5E000FE659A8C4AE6C55AE7B9CC951AA /* RDEPUBTextRendererSupport.swift */, + 92960C67FEC64C10BA567184834F0DCC /* RDEPUBTypesettingPipeline.swift */, + 4FC26BA2882A9DCE49E8D0B4EFA5D1EE /* Compatibility */, ); - name = EPUBCore; - path = Sources/RDReaderView/EPUBCore; + name = Typesetter; + path = Typesetter; sourceTree = ""; }; CF1408CF629C7361332E53B88F7BD30C = { @@ -1849,6 +1829,27 @@ path = "../Target Support Files/DTFoundation"; sourceTree = ""; }; + E2BC1C0C36766409417A11688961516E /* Notes */ = { + isa = PBXGroup; + children = ( + 4FAD41FF83513826720C6497B7A818B6 /* RDEPUBNotePopupCoordinator.swift */, + 9736CC5317A5E8F2EE1A03A963197BDF /* RDEPUBNotePopupViewController.swift */, + ); + name = Notes; + path = Notes; + sourceTree = ""; + }; + EDB7CA736956B024AA10C0D144AC906D /* Models */ = { + isa = PBXGroup; + children = ( + 685FE9B1A888D8D05E9AC049787CBC8D /* RDEPUBAnnotationModels.swift */, + 422DAC763888F8667708F7B66F9C701E /* RDEPUBPaginationModels.swift */, + E67A535D80CEA637777BC317BCFE28C6 /* RDEPUBReadingLocationModels.swift */, + ); + name = Models; + path = Models; + sourceTree = ""; + }; F8A2B0DD84CEFC61D2C703C767D33C43 /* Products */ = { isa = PBXGroup; children = ( @@ -1864,6 +1865,14 @@ name = Products; sourceTree = ""; }; + F98C9DB9E125F328B2B30E1CE7F0C09A /* Pod */ = { + isa = PBXGroup; + children = ( + 93A4E820E3592827FF87F820BBAC3179 /* RDReaderView.podspec */, + ); + name = Pod; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ @@ -1948,60 +1957,60 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 56396C6B581888EDCDC7B42B7CCF1A4C /* Headers */ = { + 4FA1757CD79A24141F672954BF6735DA /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 7FDB342E7990D04F20D66B54DD3288F3 /* DTActivityTitleView.h in Headers */, - 022C814021FFCE8343CF94BEB39F5EB3 /* DTAnimatedGIF.h in Headers */, - 36C22841B8927E609AA29CD05D5132B5 /* DTBase64Coding.h in Headers */, - 7A3B9F9A741756370C23FCE449D10FBF /* DTBlockFunctions.h in Headers */, - CABB55F416696E222EDD9355BE162423 /* DTCompatibility.h in Headers */, - C065855BFB7C44A88BC0E41EDB67F138 /* DTCoreGraphicsUtils.h in Headers */, - 54FC0EC0F7CE25F7D1E846C8CFFEA363 /* DTCustomColoredAccessory.h in Headers */, - DABA6DF4CDB6C3098DDB1972D9B8D47F /* DTExtendedFileAttributes.h in Headers */, - 851D7CADE59C83C2E79791EFBD2F1B9E /* DTFolderMonitor.h in Headers */, - 7398A6AEB47EA308F2E93FE03B1A3D06 /* DTFoundation-umbrella.h in Headers */, - 7FC6815502492DF1D663D87A2D9AB207 /* DTFoundationConstants.h in Headers */, - D1E238CAEA8D1BE33C0D7EC543A66665 /* DTHTMLParser.h in Headers */, - 73BB353CA378834928C3946524DF2D12 /* DTLog.h in Headers */, - 6CDF59BFF3F212BD65C009C7080542BE /* DTPieProgressIndicator.h in Headers */, - 91EA145D5B76F9BDCD03FB801F3ACB3D /* DTSmartPagingScrollView.h in Headers */, - 224A7654E294D21374C015DB3050A57B /* DTTiledLayerWithoutFade.h in Headers */, - 2A926090C1E12A6A8CD28E8D06305AF1 /* DTVersion.h in Headers */, - 20BE095312DB8DB101C02F8983C5A6E1 /* DTWeakSupport.h in Headers */, - D2232DDB9C06A5F370FBE1CF4F022992 /* NSArray+DTError.h in Headers */, - 6B4E7177F034E79B8C3F932183E84011 /* NSData+DTCrypto.h in Headers */, - 46AEC0EB14BA522889FD7812A1139CB7 /* NSDictionary+DTError.h in Headers */, - 9EA64874ED208ECC988584D8D6346033 /* NSFileWrapper+DTCopying.h in Headers */, - 6DA8B5EB829C2AFB0891E6EF583C6C0E /* NSMutableArray+DTMoving.h in Headers */, - 852C505B9BC6E6CE207559DB6F65F526 /* NSString+DTFormatNumbers.h in Headers */, - 5BE96578F3A236ED2544FB20A4996165 /* NSString+DTPaths.h in Headers */, - BBB18335BC72FBF4584F8B5F4132CCBE /* NSString+DTURLEncoding.h in Headers */, - 4E90223029F18880D771B8A854B1D710 /* NSString+DTUtilities.h in Headers */, - F9ADC220D598CC27EF1B9F8277966E01 /* NSURL+DTAppLinks.h in Headers */, - 4373F2A4F3253DD14440D8B9FA7A0AD8 /* NSURL+DTComparing.h in Headers */, - CE5D85573015B5EF9AA8A9F512239835 /* NSURL+DTUnshorten.h in Headers */, - F97B3F528A2B7417D2843479548CDF40 /* UIApplication+DTNetworkActivity.h in Headers */, - 39EA92DA1B85B808BA7C6B96E9550BFE /* UIImage+DTFoundation.h in Headers */, - 8A5A271780D55E365E441781D2143538 /* UIScreen+DTFoundation.h in Headers */, - 4651629ECB6C6EA549A9E880D86B7648 /* UIView+DTFoundation.h in Headers */, + 1E8EB32F9CEB5F27573296A05433CA86 /* RDReaderView-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - 61811610E8E96D8E4DBE96A4003CE077 /* Headers */ = { + 97C67BE0252719CA8BAFCAF9FC19D250 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - BB8ACA21944B2A96E8DF8B0C7E6D30F9 /* ZIPFoundation-umbrella.h in Headers */, + D40CA87330F4D56B6E6ADBE2FD59C2FC /* ZIPFoundation-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - F7E1A89F073DA82B1B23FC66440C9F1A /* Headers */ = { + ED184BA91503CA1868967026F549D809 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - E63936A1FBECCD5431B219748E9652B7 /* RDReaderView-umbrella.h in Headers */, + F6367EF2E50441DF4512B27FFD788D91 /* DTActivityTitleView.h in Headers */, + 83E65FA5AC30BF60417B8D6D19556359 /* DTAnimatedGIF.h in Headers */, + C6B4C453194DE8011ADA4C0FA2092028 /* DTBase64Coding.h in Headers */, + FC7E79D4D97B65B3546B66BE1B024F7B /* DTBlockFunctions.h in Headers */, + 4BBDFB14A9E1E663B672696A77A39F0B /* DTCompatibility.h in Headers */, + E776DCFFEECF2D8AAA859BB2FC3DD14E /* DTCoreGraphicsUtils.h in Headers */, + 2620B16F7321A5A1A158E71EE88EEFDB /* DTCustomColoredAccessory.h in Headers */, + CD7F05300518F738E9EEA966B76252E6 /* DTExtendedFileAttributes.h in Headers */, + 4907E32CCD484D56610C0399A79D23BD /* DTFolderMonitor.h in Headers */, + 4964E6E0330E161B8B118F6B0638236C /* DTFoundation-umbrella.h in Headers */, + F12AC7A30166F9013C095231D43E7DA7 /* DTFoundationConstants.h in Headers */, + B40171D88891B3A07003A19EB6A4BFC0 /* DTHTMLParser.h in Headers */, + 7137779222F4F680762DF31046A48EAE /* DTLog.h in Headers */, + FD20D1EEC74F54FF4283C4C106E0BA5F /* DTPieProgressIndicator.h in Headers */, + D14D8383FFEFB43EA9BA5BCECAD38DFB /* DTSmartPagingScrollView.h in Headers */, + 5A06B30AC6A40A95582441D67FC337C9 /* DTTiledLayerWithoutFade.h in Headers */, + DF9D50C1C5F9F22238392605B3F74438 /* DTVersion.h in Headers */, + 7730A0D6848C96EE7307338241444A1D /* DTWeakSupport.h in Headers */, + 73EA755F8A8DD59544C39033CEDDE43F /* NSArray+DTError.h in Headers */, + 7F40491F86024E8AFE5253431DD93405 /* NSData+DTCrypto.h in Headers */, + 6F8ABC6B6D2316E3533A21E86DC3C1A7 /* NSDictionary+DTError.h in Headers */, + 3FC7C093B838D87DA42A363F11850D9C /* NSFileWrapper+DTCopying.h in Headers */, + 7D68FBD206B150ECFB850BF21DFF1D54 /* NSMutableArray+DTMoving.h in Headers */, + 36302E89132B67217F8D1B91040072C8 /* NSString+DTFormatNumbers.h in Headers */, + D07D22E99828FC135DA82CD9D5D473BC /* NSString+DTPaths.h in Headers */, + F38EAD024D5BB401AF2476100E7B7822 /* NSString+DTURLEncoding.h in Headers */, + 40F9FE365AD1E9DF0AC2552C9E57F374 /* NSString+DTUtilities.h in Headers */, + 1021F59A6B7DFA8B0869C7B6D09AFB36 /* NSURL+DTAppLinks.h in Headers */, + 27CFC84B39BCFB67A6163AAF8E319335 /* NSURL+DTComparing.h in Headers */, + E8BC727E48847123C80C6487E4B6D155 /* NSURL+DTUnshorten.h in Headers */, + F9510879C3D8131EEED997499C6ACF14 /* UIApplication+DTNetworkActivity.h in Headers */, + E87011B94A31EF3C96486633494CF851 /* UIImage+DTFoundation.h in Headers */, + 6F5B9493A5058F7DD16AEA802C1C76EC /* UIScreen+DTFoundation.h in Headers */, + 48580F0EDA4D384E5AA73A9BC814DC20 /* UIView+DTFoundation.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2010,11 +2019,11 @@ /* Begin PBXNativeTarget section */ 0C24CB0E87A728A11AA1124CB360D6A1 /* DTCoreText-Resources */ = { isa = PBXNativeTarget; - buildConfigurationList = 93A78DDD7C59F62735C4CF878C3F3EF3 /* Build configuration list for PBXNativeTarget "DTCoreText-Resources" */; + buildConfigurationList = FD102F73C9F0A5254C57BBBB0F991964 /* Build configuration list for PBXNativeTarget "DTCoreText-Resources" */; buildPhases = ( - 39526274254D11590C40944EF5209546 /* Sources */, - AAFF6297ECB0F5238719655741D4CC47 /* Frameworks */, - 180D0BDA876E115ADD5594B01FA45AA6 /* Resources */, + F24E4D34625539789AB8B2F3895D5A91 /* Sources */, + A73A5B71B58E98ECBF44502D27FAE0DE /* Frameworks */, + 424A16025318B52E74BAC95FB0A556E8 /* Resources */, ); buildRules = ( ); @@ -2037,10 +2046,10 @@ buildRules = ( ); dependencies = ( - 9FC3DD151917F4600168200308C8CFB2 /* PBXTargetDependency */, - D8157DC8FC37E09A97E69270B47BD42C /* PBXTargetDependency */, - 448B8ED7B8C073D9859C5970102E1961 /* PBXTargetDependency */, - 8F7656822B7E5947D8BBA072A5C324B6 /* PBXTargetDependency */, + 13017820CBB8EDED04D3E425991B4678 /* PBXTargetDependency */, + 810473C0D4E1B245A6211882D9B2E72E /* PBXTargetDependency */, + 848C3FDDD1BF09AFA5AED03B23F97647 /* PBXTargetDependency */, + 9F03EAA11BE008FBE83FA704A5ABBDD4 /* PBXTargetDependency */, ); name = "Pods-ReadViewDemo"; productName = Pods_ReadViewDemo; @@ -2049,12 +2058,12 @@ }; 8F6E5A5BF72D62CDFD25F91A7CFA3309 /* DTFoundation */ = { isa = PBXNativeTarget; - buildConfigurationList = 797A74DE557B2312CDE4DDE7BA924EF3 /* Build configuration list for PBXNativeTarget "DTFoundation" */; + buildConfigurationList = C296629277AC266234A0245A9519C90A /* Build configuration list for PBXNativeTarget "DTFoundation" */; buildPhases = ( - 56396C6B581888EDCDC7B42B7CCF1A4C /* Headers */, - CBE49EE63AF0F9347CE685FF36B1D2E6 /* Sources */, - D094297E3FF019E0C05C5244B095CA0A /* Frameworks */, - E3C666A10576A7A8B8F85FB58DDF00AC /* Resources */, + ED184BA91503CA1868967026F549D809 /* Headers */, + 88624E30709B99852919BA4048F4C471 /* Sources */, + 13EE47BF3F459A6D061107C6D8B7C515 /* Frameworks */, + B2A21806D132FBDC0E35A77F93204070 /* Resources */, ); buildRules = ( ); @@ -2067,17 +2076,17 @@ }; AA15C8469D67684160CC2A7098EB841C /* ZIPFoundation */ = { isa = PBXNativeTarget; - buildConfigurationList = 9BC8D77A9E3B7D44D11B858D8DD3F3BC /* Build configuration list for PBXNativeTarget "ZIPFoundation" */; + buildConfigurationList = 350964E28EE2995CFB345B0F2D849AAD /* Build configuration list for PBXNativeTarget "ZIPFoundation" */; buildPhases = ( - 61811610E8E96D8E4DBE96A4003CE077 /* Headers */, - E2564DACE65641E8E29BD319EBBDA772 /* Sources */, - 0DE1ECAB91165C80E940E26216D40F84 /* Frameworks */, - 5C304E728BC039C46678F5D5C2568B99 /* Resources */, + 97C67BE0252719CA8BAFCAF9FC19D250 /* Headers */, + 908E285AED86CDB23737B76B8459B816 /* Sources */, + 93E19E99C0C6D8B9536A6621A80FE307 /* Frameworks */, + D77DB0CE0BC7E72C478D9959A0FF59FA /* Resources */, ); buildRules = ( ); dependencies = ( - D93D69DEA20A22DCC34A44F20BCB6886 /* PBXTargetDependency */, + DF4396E81D96CDBD5613B205C5B8EDBE /* PBXTargetDependency */, ); name = ZIPFoundation; productName = ZIPFoundation; @@ -2086,19 +2095,19 @@ }; AA2E57587AA8EECA63C4BE08EA3CB6D2 /* RDReaderView */ = { isa = PBXNativeTarget; - buildConfigurationList = C25C391A750C0AE0170E901D1C4CBBEC /* Build configuration list for PBXNativeTarget "RDReaderView" */; + buildConfigurationList = 6AB8AE550E34BCAFC466012ECCE97CBF /* Build configuration list for PBXNativeTarget "RDReaderView" */; buildPhases = ( - F7E1A89F073DA82B1B23FC66440C9F1A /* Headers */, - B910633796F259854C9F7238822D1099 /* Sources */, - 5254383549A94DDFEA97C5C20A808F78 /* Frameworks */, - 30B0EB0900F44640F54AABD0D3798300 /* Resources */, + 4FA1757CD79A24141F672954BF6735DA /* Headers */, + EE868319E7C4A061BF2CD71DD5F9C491 /* Sources */, + 1B92894A72CDF0235556D49F00026463 /* Frameworks */, + D537EE07D95CD401B150AC4CA7458DCD /* Resources */, ); buildRules = ( ); dependencies = ( - 7214D8724950769514A63401878B7871 /* PBXTargetDependency */, - 0CC9636CCC44B21535D59D6DAD5F924F /* PBXTargetDependency */, - 3FB21ADA3E76890812FD8995D638D0B3 /* PBXTargetDependency */, + 7EDFE31368D3022A0894D67822D94E7D /* PBXTargetDependency */, + 3510572C3D091C0935798461FB6C5A92 /* PBXTargetDependency */, + 0F35B7A6F968F4851B3CFF623AA5BE5E /* PBXTargetDependency */, ); name = RDReaderView; productName = RDReaderView; @@ -2107,11 +2116,11 @@ }; AE7F393FB7805DE2664AB4111873F907 /* RDReaderView-RDReaderViewAssets */ = { isa = PBXNativeTarget; - buildConfigurationList = 867CF60047164719C3D4ED41F2FD855D /* Build configuration list for PBXNativeTarget "RDReaderView-RDReaderViewAssets" */; + buildConfigurationList = BABDDD715D4526AF32440E6D7F4E0939 /* Build configuration list for PBXNativeTarget "RDReaderView-RDReaderViewAssets" */; buildPhases = ( - 39C2DCC10B7AC98A474C8CE693889FFA /* Sources */, - 22F00C8E9739C5623FED72E777C69A0C /* Frameworks */, - A1E3DFA34CE53F87C6853ABEB4ABD228 /* Resources */, + 152242F0B979A40E91310B6AA9D317E2 /* Sources */, + 76F9E948CD9009E8107E1C61C1C40F67 /* Frameworks */, + 4F766EF837A6598407C9632CE45ED609 /* Resources */, ); buildRules = ( ); @@ -2134,8 +2143,8 @@ buildRules = ( ); dependencies = ( - DEA55EBE6C71C231E96349A3450C0332 /* PBXTargetDependency */, - 4D6AACC2BB50A205D880B6E1DE55515F /* PBXTargetDependency */, + 56B80CB8423A9ED18F79266879B187A0 /* PBXTargetDependency */, + E450D34CBA00FFF4FE9AAF797684BACD /* PBXTargetDependency */, ); name = DTCoreText; productName = DTCoreText; @@ -2144,11 +2153,11 @@ }; C7A8D82E407CD3FDC3BA55CEE519B252 /* ZIPFoundation-ZIPFoundation_Privacy */ = { isa = PBXNativeTarget; - buildConfigurationList = FB481FBBB624EE3598165EC63CFEC06E /* Build configuration list for PBXNativeTarget "ZIPFoundation-ZIPFoundation_Privacy" */; + buildConfigurationList = 2EB4E348D6C06E5B54C3793ADD214E92 /* Build configuration list for PBXNativeTarget "ZIPFoundation-ZIPFoundation_Privacy" */; buildPhases = ( - 90EA37F8A2EC206373516654B6C1264D /* Sources */, - BF1455AB73F756E1DF11AC8ECD2CA7A7 /* Frameworks */, - 281714113AFF127AF5872B8A8EC07CC0 /* Resources */, + 86E0D22F3F3BAE4B883B92FF1D3C3C8E /* Sources */, + E4AF016E3A76A93A97661A7459A79847 /* Frameworks */, + 7B873D0DF60D64F25B3EF54696FE7A08 /* Resources */, ); buildRules = ( ); @@ -2196,30 +2205,6 @@ /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ - 180D0BDA876E115ADD5594B01FA45AA6 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 9304920D7E3F5289F47FB0F78FD33CB5 /* default.css in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 281714113AFF127AF5872B8A8EC07CC0 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - F582DBD2110DC7E2BD25731A220D85FA /* PrivacyInfo.xcprivacy in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 30B0EB0900F44640F54AABD0D3798300 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - B59EFFCF83F578900B1B193189689FD0 /* RDReaderView-RDReaderViewAssets in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; 378BF991D3B318AACBF6D78F57218233 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; @@ -2228,28 +2213,36 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 5C304E728BC039C46678F5D5C2568B99 /* Resources */ = { + 424A16025318B52E74BAC95FB0A556E8 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 5EE6776180341CF72714528684FA7254 /* ZIPFoundation-ZIPFoundation_Privacy in Resources */, + 6B49DC82B42CA0E117265F6CD43EEF8D /* default.css in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; - A1E3DFA34CE53F87C6853ABEB4ABD228 /* Resources */ = { + 4F766EF837A6598407C9632CE45ED609 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 5A3D08398FCDB7FAD5A8210F31AA533C /* cssInjector.js in Resources */, - 247EA0EE361F6CB4BA1EE9CB7FD17E4E /* epub-bridge.js in Resources */, - 3CCCB46BEB98DC30A241DB039C09EF4A /* epub-fixed-layout.html in Resources */, - B5C61DFC1CFBA8ECA4AF7779F5089816 /* rangy-core.js in Resources */, - DC9CA5F234D2AA505F70686BAC03C27B /* rangy-serializer.js in Resources */, - 9D41E4DA56705B0149988B175623233D /* WeReadApi.js in Resources */, - 811584EBB417D8EAC8674773013DA313 /* wxread-dark.css in Resources */, - 7A34803D14D56A92E9FA400C7305B19B /* wxread-default.css in Resources */, - 2F4CAA81001F11E515585DA5F50DC1CD /* wxread-replace.css in Resources */, - 09256EEFCDBDEBF3090658C24D7C4B88 /* wxread-replace-latin.css in Resources */, + AA7629F822C3DCAECBB5DCD1BC495E84 /* cssInjector.js in Resources */, + 24FB53BAB9B501F996DF90066CB53225 /* epub-bridge.js in Resources */, + 797848B2163C1E4E5F1446D9B867BA30 /* epub-fixed-layout.html in Resources */, + F5064819F680614ACF6503287451E4C6 /* rangy-core.js in Resources */, + 7EC0B3F00E142D2EF8AD8C426519B8FB /* rangy-serializer.js in Resources */, + 57399D051CD4E2CC012F3308031BE592 /* WeReadApi.js in Resources */, + 0FC610B1799A81BB1A05C679012C5372 /* wxread-dark.css in Resources */, + 5EBCDBA71D6A9A0B165DA802A3DB791A /* wxread-default.css in Resources */, + CC1A14092E38C024B59039247A9A7F1E /* wxread-replace.css in Resources */, + 9B1CEC717F3D521122785DB02A077BED /* wxread-replace-latin.css in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 7B873D0DF60D64F25B3EF54696FE7A08 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + D7E6418C29E54343D2587D20DAD787EC /* PrivacyInfo.xcprivacy in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2260,34 +2253,111 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - E3C666A10576A7A8B8F85FB58DDF00AC /* Resources */ = { + B2A21806D132FBDC0E35A77F93204070 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; + D537EE07D95CD401B150AC4CA7458DCD /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + B91D4B37570E0FDFB186D4622D05D2A4 /* RDReaderView-RDReaderViewAssets in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + D77DB0CE0BC7E72C478D9959A0FF59FA /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 57E15358F55891E25FA5979425011B2D /* ZIPFoundation-ZIPFoundation_Privacy in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXResourcesBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ - 39526274254D11590C40944EF5209546 /* Sources */ = { + 152242F0B979A40E91310B6AA9D317E2 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - 39C2DCC10B7AC98A474C8CE693889FFA /* Sources */ = { + 86E0D22F3F3BAE4B883B92FF1D3C3C8E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - 90EA37F8A2EC206373516654B6C1264D /* Sources */ = { + 88624E30709B99852919BA4048F4C471 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + 42D1958B37CBF9EFB3CEB6A8CAFF76AF /* DTActivityTitleView.m in Sources */, + C1678A88827D582EAE2921342ACAD5F4 /* DTAnimatedGIF.m in Sources */, + 549EA467E837EC2A6054D44B6376423A /* DTBase64Coding.m in Sources */, + 73E26B43FD89D6F9E5D6E53888DCDA0C /* DTBlockFunctions.m in Sources */, + 60B755A36A2122D9509C47B59B977F64 /* DTCoreGraphicsUtils.m in Sources */, + 2F2BA46AF49A6918CC279C5610290542 /* DTCustomColoredAccessory.m in Sources */, + 1800E2951954DDB7A2A8F3871A4D1175 /* DTExtendedFileAttributes.m in Sources */, + C2E5F9A4B9F366EDA48329415CF0057A /* DTFolderMonitor.m in Sources */, + 96FEC32CA46D2AB578F12624B72D2E9C /* DTFoundation-dummy.m in Sources */, + D2225CA8427BEB882D82DE38019DD126 /* DTFoundationConstants.m in Sources */, + A2FA7374B3F6D6E723AC19A380DF704C /* DTHTMLParser.m in Sources */, + 4969CE5602CC934D55680248A5A5ABC1 /* DTLog.m in Sources */, + 8E7372FDB503AAE2B99CAF40DF2083C5 /* DTPieProgressIndicator.m in Sources */, + F7147DD0CF0BBAE9A181448FC68CF9AA /* DTSmartPagingScrollView.m in Sources */, + 7DC14CAF5CB1827AB6622A3468247D05 /* DTTiledLayerWithoutFade.m in Sources */, + E1B932FF7C930EF7F7604680E8FD3E14 /* DTVersion.m in Sources */, + B8522579F034294C6982DCB37DE15086 /* NSArray+DTError.m in Sources */, + C4C2F1441BF40302D432BC6420C0F50C /* NSData+DTCrypto.m in Sources */, + 0771856A5605A336983E6D12A566C042 /* NSDictionary+DTError.m in Sources */, + A0313009309C859841F55118BC23E3EA /* NSFileWrapper+DTCopying.m in Sources */, + E3A31EB088966F290BC0FA8F9E84990A /* NSMutableArray+DTMoving.m in Sources */, + 5B0FDAA3C42B8CB5248BC4ACF21FB3F2 /* NSString+DTFormatNumbers.m in Sources */, + C578EC0E752DEA0929FDC0A0CAAE4CA3 /* NSString+DTPaths.m in Sources */, + 68991FD1C811CDB7C212E0221F7DBD52 /* NSString+DTURLEncoding.m in Sources */, + 945A2981673EAAB7C06985B69E0B8B5D /* NSString+DTUtilities.m in Sources */, + 4FD0B3D2431E89EFA74A02280F4DFA54 /* NSURL+DTAppLinks.m in Sources */, + FEC18B0BF9DB6282F3B2737B03C466C6 /* NSURL+DTComparing.m in Sources */, + 75BA64D63D4FEA1DA5BF5C89CAD4963D /* NSURL+DTUnshorten.m in Sources */, + 026F7681329B00E35A480F5858301E66 /* UIApplication+DTNetworkActivity.m in Sources */, + 881E6C18B19215333585C4A16E3F413A /* UIImage+DTFoundation.m in Sources */, + A4123ABB5380886FB6EEB339384892F5 /* UIScreen+DTFoundation.m in Sources */, + 02EE41B3F3006A14BADE9BA94D7454D2 /* UIView+DTFoundation.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 908E285AED86CDB23737B76B8459B816 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 7153939E3B654645EC94EA0E03470D23 /* Archive.swift in Sources */, + D74A865537CEEFB45C5951EBA2A43B90 /* Archive+BackingConfiguration.swift in Sources */, + BA464E5503BF2C730FADD4DE36DE6868 /* Archive+Deprecated.swift in Sources */, + 1D731AAC78FF62ED86F99DD0285427E5 /* Archive+Helpers.swift in Sources */, + E2A911CAA42ED21FC0675B662B58B8B8 /* Archive+MemoryFile.swift in Sources */, + 6271C496EAB502AD3055465A5D827878 /* Archive+Progress.swift in Sources */, + 9822E3B0CC3AF9A72FC29DEC11ECEAAF /* Archive+Reading.swift in Sources */, + 29CB36BD8C153BD78CA8B1F28DCF6ACF /* Archive+ReadingDeprecated.swift in Sources */, + CE1461B66FE25A3E3194B13B80B938AB /* Archive+Writing.swift in Sources */, + AF7EF16703AD0BAF5F926A254B0C9E9C /* Archive+WritingDeprecated.swift in Sources */, + C91D5DECB736752FDEE511F0B3B4AED8 /* Archive+ZIP64.swift in Sources */, + E8050CB03DC17469F13A823B666075C7 /* Data+Compression.swift in Sources */, + C224A4A04B5C6638D21FD2CE77B69443 /* Data+CompressionDeprecated.swift in Sources */, + C14C1329982852C841EBF7A6A8F47FD6 /* Data+Serialization.swift in Sources */, + EB83224969E7CCA0D8528DD55A753FDF /* Date+ZIP.swift in Sources */, + 989D55577D97CF4AEDF31A7A2BB2CF78 /* Entry.swift in Sources */, + CAD914075CB713FC15413D6FEF558094 /* Entry+Serialization.swift in Sources */, + AFCEC5571D0C75E38AD2D3AB0B027CA3 /* Entry+ZIP64.swift in Sources */, + 333E9440E6755615B7423D2E897C5869 /* FileManager+ZIP.swift in Sources */, + E61F35DFF62E486B472E57CB49399D1B /* FileManager+ZIPDeprecated.swift in Sources */, + 4E2123336537AC8648B8B3928D80FD88 /* URL+ZIP.swift in Sources */, + 50EBC14A5BB65993E1FAC38130135074 /* ZIPFoundation-dummy.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2299,262 +2369,204 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - B910633796F259854C9F7238822D1099 /* Sources */ = { + EE868319E7C4A061BF2CD71DD5F9C491 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 010EFB280F4FDFBBC75CEFB1FEF1C3C9 /* RDEPUBAnnotationModels.swift in Sources */, - CB1E78A4E24418D8E1486735D8C13A48 /* RDEPUBAssetRepository.swift in Sources */, - 8041514FE1856F94EBD1E317A1E9ABBE /* RDEPUBAttachmentNormalizer.swift in Sources */, - 0BEA894C5656FF4CCAEDA1F447A31F9C /* RDEPUBAttachmentTooltipOverlayView.swift in Sources */, - 952DAB01617035A1AD4F1A794BB5A850 /* RDEPUBAttachmentTooltipView.swift in Sources */, - 66E707F0227EB649C9693BBA35384DE9 /* RDEPUBBackgroundCoverageStore.swift in Sources */, - 7301973ED8F52DCDC8E16A64066C9158 /* RDEPUBBackgroundPriorityPolicy.swift in Sources */, - 8BF07B59FD97F89AD9AE7ABE953C5229 /* RDEPUBBackgroundTrace.swift in Sources */, - D6139C08D650C40629D29CE3B04263F2 /* RDEPUBBookPageMap.swift in Sources */, - 5967C134F418B959CE1967A3CC15A3AF /* RDEPUBBuildDiagnosticsReporter.swift in Sources */, - B97D761BA5C5055277DC351A493C5568 /* RDEPUBCFI.swift in Sources */, - 631E5B681577106CA3DA1EE532B50D75 /* RDEPUBCFICompatibility.swift in Sources */, - F9959EB035DFB0335495915F6A4DF232 /* RDEPUBCFIDOMPathBuilder.swift in Sources */, - 2AD11C72A693A0F3F851ED95D52588FC /* RDEPUBCFIError.swift in Sources */, - BC519A74D986F53A3800079B6ACAB7A3 /* RDEPUBCFIGenerator.swift in Sources */, - 9C31FA2081B8126C6634902705D6434A /* RDEPUBCFIMap.swift in Sources */, - 3A23E0FBA148987E6982F243C17FCDB3 /* RDEPUBCFIMarkerInjector.swift in Sources */, - 08C0E1DFA612AF20B227EB4583BD4EF1 /* RDEPUBCFIParser.swift in Sources */, - 312374CF0C9CBCDBEFFB71B6AAD7386B /* RDEPUBCFIPath.swift in Sources */, - D118781E14C557A8428DB61DFECB6CC2 /* RDEPUBCFIRange.swift in Sources */, - F9AE08B54720440E62FC671424610C66 /* RDEPUBCFIRecoveryEngine.swift in Sources */, - D7E9F39F5A7AF9C7170ACBC890EE55DB /* RDEPUBCFIResolver.swift in Sources */, - 7C68BB97D96CCA378A99B1AEDF75F2AA /* RDEPUBCFISerializer.swift in Sources */, - 4CB9152E2F9F37608FF3BED957CEAA10 /* RDEPUBCFITextAssertion.swift in Sources */, - 3BEE80559815F3BCC244579816B11BAE /* RDEPUBCFIUtilities.swift in Sources */, - 8E88C2B80FBFC142610DDB8A57EB8D84 /* RDEPUBChapterCacheKey.swift in Sources */, - 59A7C28A73DE8E3754AF97C359EE2460 /* RDEPUBChapterData.swift in Sources */, - F12A5C7183CC8152D0A36E1C7963E139 /* RDEPUBChapterDataCache.swift in Sources */, - 3134ACF38EC778DF668C6DDA8E4473C2 /* RDEPUBChapterLoader.swift in Sources */, - D20113877C525B2FA078EEDB723906D9 /* RDEPUBChapterLocation.swift in Sources */, - 2AF7BC9CAE7E399AF1AD18F6C24CF447 /* RDEPUBChapterOffsetMap.swift in Sources */, - 46E5721034DC56B07DAF847D01818D1B /* RDEPUBChapterPageCounter.swift in Sources */, - 78BB61196C1CCF2870544CCCC3D6FCCD /* RDEPUBChapterRuntimeStore.swift in Sources */, - 211C3A8308C726611C02F30211A23812 /* RDEPUBChapterSummaryDiskCache.swift in Sources */, - A7CAF507A75914C9CB2904256449478E /* RDEPUBChapterTailNormalizer.swift in Sources */, - 06F29198808875D4FE864F420CF6DDBE /* RDEPUBChapterWarmupOrchestrator.swift in Sources */, - BB8A21A84B763070E340A3E4687D3110 /* RDEPUBCoreTextPageFrameFactory.swift in Sources */, - ACA98E6A9A6E8D58A22021AB40351E66 /* RDEPUBCSSCompatibilityLayer.swift in Sources */, - 52BEFEA715FD0B9BC31F2F7C44DD188A /* RDEPUBDarkImageAdjuster.swift in Sources */, - 3EF196811F910116B9EBE129278C219E /* RDEPUBDTCoreTextRenderer.swift in Sources */, - 8B452A6989E55D4D4256B16F379F7831 /* RDEPUBFixedLayoutTemplate.swift in Sources */, - 640349287B1EC3A07C397EEE5A4510C7 /* RDEPUBFontFallbackResolver.swift in Sources */, - ABB194A853B15FBB547244E93F3AFA87 /* RDEPUBFontNormalizer.swift in Sources */, - 456A968F9CE6080256CE5B65DBF79AAF /* RDEPUBFragmentMarkerInjector.swift in Sources */, - 81F2EDDCDE14E41755685147F75D02D5 /* RDEPUBHTMLNormalizer.swift in Sources */, - 49B5370942C4D7AC9B1E1EF77AA3B5DF /* RDEPUBImageViewController.swift in Sources */, - 803C702E95B286938CC3916511A242F4 /* RDEPUBImageViewerCoordinator.swift in Sources */, - 194722F12D32D0016CD564ACD01C0710 /* RDEPUBJavaScriptBridge.swift in Sources */, - 097C7CC4E0B27F7D78515547494AA566 /* RDEPUBJumpSession.swift in Sources */, - 5C70C7532D7C43C97806677F40FB2336 /* RDEPUBMetadataParseCancellationController.swift in Sources */, - 9A4C1165863623D562E7DB43A6CBC62A /* RDEPUBMetadataParseWorker.swift in Sources */, - E56D82B0707AAD37277F90302EA4A4C4 /* RDEPUBModels.swift in Sources */, - 7D411155326150312CD1649A73AE55A8 /* RDEPUBNavigatorLayoutContext.swift in Sources */, - B20B3B8D2C3958BE32BABBBA48E0ECF4 /* RDEPUBNoteDetector.swift in Sources */, - BF9D1A78B1C4C7613937CC99EB1702D4 /* RDEPUBNoteModels.swift in Sources */, - 7C68A32E44AAE4EDBEAE68473BB9EDE7 /* RDEPUBNotePopupCoordinator.swift in Sources */, - 1EA2F5468DD943AC4B44C77EAD623852 /* RDEPUBNotePopupViewController.swift in Sources */, - AFE5927149FB4AFE9FB27235C2FCB8A2 /* RDEPUBNoteResolver.swift in Sources */, - CAC5255B7B613B25FA9731E5C6EDD5CB /* RDEPUBPageBreakPolicy.swift in Sources */, - D040A70EB575CF6ECE381FD408BD42B2 /* RDEPUBPageCountCache.swift in Sources */, - 80293565A6D64BAAD1917E1688E7FD5B /* RDEPUBPageInteractionController.swift in Sources */, - 191C07ED00D17BBF103144D016F5D907 /* RDEPUBPageLayoutSnapshot.swift in Sources */, - C60D3562E8D9105111D9441E55F500BB /* RDEPUBPageMapReconciliationCoordinator.swift in Sources */, - 58571B37B421D30C46E60547A3F572C4 /* RDEPUBPageResolver.swift in Sources */, - F33B238CDBEAE3BA81136D519B27483A /* RDEPUBPaginationCacheCoordinator.swift in Sources */, - 112DBB191F130CA6D495E71077A80009 /* RDEPUBPaginationModels.swift in Sources */, - B61F165888A356AF744580232D727A20 /* RDEPUBPaginator.swift in Sources */, - F0CC9ADA3DC9C7D3780646C7B31BBBDC /* RDEPUBParser.swift in Sources */, - 382705D8475B9DBFAAD8B20BC386F2CF /* RDEPUBParser+Archive.swift in Sources */, - 28E2212F4B36A12943E74DD92D67A7A8 /* RDEPUBParser+Package.swift in Sources */, - 2B2EEB3514D2D3BF37F8BCA6CC781B4D /* RDEPUBParser+ReadingProfile.swift in Sources */, - 34539BC8F7E91B2997308C21E0B12120 /* RDEPUBParser+Resources.swift in Sources */, - 56EE6779284C6A7868A1AF9F8462EB79 /* RDEPUBParser+TOC.swift in Sources */, - 4A0183DE2E5E4464957883E97CB91EC7 /* RDEPUBPreferences.swift in Sources */, - E90131918E21F84D6E5CBFA20E27E5ED /* RDEPUBPresentationRuntime.swift in Sources */, - 4C317DFF96CA0063EF6CF687527431CC /* RDEPUBPublication.swift in Sources */, - B88D8C43A79A645555A6683A10D01258 /* RDEPUBReaderAnnotationCoordinator.swift in Sources */, - 631A75A5E333844E48AB0655E65E8619 /* RDEPUBReaderAssemblyCoordinator.swift in Sources */, - 490CDA6344D7BD1DA6B7D38EA5CCD199 /* RDEPUBReaderBottomToolView.swift in Sources */, - D402B6E51343FEA249C715ED3FC6689A /* RDEPUBReaderChapterListController.swift in Sources */, - 2E65C9632095C9EA0FA98EF1F5B21C27 /* RDEPUBReaderChromeCoordinator.swift in Sources */, - 6D7CDF15EC821BD18B9E6FFBDCF8C033 /* RDEPUBReaderConfiguration.swift in Sources */, - 7A23AEADBD4DD223D472D162A54A6789 /* RDEPUBReaderContext.swift in Sources */, - C31BEDEE98899BAF229DE4FE3F3FE1A5 /* RDEPUBReaderController.swift in Sources */, - 80A9DF9B66A59153F911FB540BB88DAD /* RDEPUBReaderController+AttachmentTooltip.swift in Sources */, - CAEFA4FFA33FD3C1DF8F288814B55054 /* RDEPUBReaderController+ContentDelegates.swift in Sources */, - 09B30CACFD89784529196FCA970E706F /* RDEPUBReaderController+DataSource.swift in Sources */, - D43F2636F9AEA19B2933A6C4B71E7D44 /* RDEPUBReaderController+ExternalLinks.swift in Sources */, - 508227AD9DDEBDCC5811DF5DFE4B72B8 /* RDEPUBReaderController+LocationResolution.swift in Sources */, - 1BC970E8467ECAEB1D53445CC11855A2 /* RDEPUBReaderController+PublicAPI.swift in Sources */, - 790C14D6DF0311FD4053970359D34649 /* RDEPUBReaderController+RenderSupport.swift in Sources */, - F50A5A2A8E51049641FDFEC90E76F1B9 /* RDEPUBReaderController+RuntimeBridge.swift in Sources */, - EFE445E56D466D8A8B40FD6BDE4CE778 /* RDEPUBReaderController+TableOfContents.swift in Sources */, - 095FB08EBCD23A3E4A12955EBD443C79 /* RDEPUBReaderDelegate.swift in Sources */, - 240BD2C5D299C399725B5F227F313D46 /* RDEPUBReaderDependencies.swift in Sources */, - 40DD9B73CA10C5AE995E85263A325144 /* RDEPUBReaderEnvironment.swift in Sources */, - 2B008846F9C2624D2A913AE6ED869A2B /* RDEPUBReaderHighlightsViewController.swift in Sources */, - 6CAA09C46E273F8880234AA28B07542B /* RDEPUBReaderLoadCoordinator.swift in Sources */, - 71AA63D206360F5BEC6B89C738C192F3 /* RDEPUBReaderLocationCoordinator.swift in Sources */, - E85C78871193D79CF936573FC5F1136B /* RDEPUBReaderPaginationCoordinator.swift in Sources */, - 22D04776C5F0F8CB8DDAC334EAA4FCF3 /* RDEPUBReaderPersistence.swift in Sources */, - 91CF281A86EC3D57E8E4D5B5988D7D45 /* RDEPUBReaderRuntime.swift in Sources */, - B5D0238A617645F81C5604A014065B3F /* RDEPUBReaderSearchBarView.swift in Sources */, - 2C5CD798B8403E020FEDADEBC8D5AAE9 /* RDEPUBReaderSearchCoordinator.swift in Sources */, - EAF560B47F3FBA36DB7C1690D2155C24 /* RDEPUBReaderServices.swift in Sources */, - 07102A5412AC8C8BA0812CF5F0F77C23 /* RDEPUBReaderSettings.swift in Sources */, - C760D0A16A9A1F449A81EC7B91766E3A /* RDEPUBReaderSettingsViewController.swift in Sources */, - C018E6B3B58F3C3537511ED0EE553A94 /* RDEPUBReaderState.swift in Sources */, - B178C87ED370EA79E30224072DDD026B /* RDEPUBReaderTableOfContentsItem.swift in Sources */, - CE60D90670F8D3049025C34F2CA4A172 /* RDEPUBReaderTheme.swift in Sources */, - 166B717008CCE1407B5319095FB04439 /* RDEPUBReaderToolView.swift in Sources */, - 5BF5ECEFD1384679A310688AFC7160C9 /* RDEPUBReaderTopToolView.swift in Sources */, - 4B308D78F9D167B58BDD5695045F7756 /* RDEPUBReaderUIState.swift in Sources */, - A305D671B126FEC47981A8F62D0DAE9E /* RDEPUBReaderViewportMonitor.swift in Sources */, - BE6A7554B48972B5D4EF22028274696E /* RDEPUBReadingLocationModels.swift in Sources */, - DDBA184A2654FDBC731798EF79052111 /* RDEPUBReadingSession.swift in Sources */, - 2AAB6A070A5D84CF783783F2084187EB /* RDEPUBRenderDiagnosticsCollector.swift in Sources */, - B509E539D0E9DD3A7E1CBF4E87518C2A /* RDEPUBRenderRequest.swift in Sources */, - B9E5CDDBF46CDA23D5D282EFDB6456BA /* RDEPUBResourceResolver.swift in Sources */, - 8C154F19B995AAAF0BCB771F5CC3A906 /* RDEPUBResourceURLSchemeHandler.swift in Sources */, - D5C798C8EC872BADE62917619D1DF400 /* RDEPUBRuntimeChapter.swift in Sources */, - 53D4340F38B1EAF75FD1534AE908A11E /* RDEPUBRuntimePageCount.swift in Sources */, - A12DBBB039A09A7F1BB62E384E41E190 /* RDEPUBSafeArea.swift in Sources */, - E6E0FEA82C76D2AD4209048886206854 /* RDEPUBSearchEngine.swift in Sources */, - 4523590069A7CFC158A4A7DE4571B4B9 /* RDEPUBSearchModels.swift in Sources */, - CE737F28C68393FDC49DD943ADB95015 /* RDEPUBSelectionLoupeView.swift in Sources */, - 5856C4A656C1EAD5559B96C283308910 /* RDEPUBSelectionOverlayView.swift in Sources */, - 83A5346560A82E6CA50BCC12E8D76FBB /* RDEPUBSelectionState.swift in Sources */, - 8FCBD7D14FE4C1CF881E0DC8EB0EDD75 /* RDEPUBSemanticMarkerInjector.swift in Sources */, - 6D4144C4D4DF772F31A8362BB63252A8 /* RDEPUBStyleCompatibilityModels.swift in Sources */, - 3B192524D86C6ABC91B555608D15C668 /* RDEPUBStyleSheetBuilder.swift in Sources */, - FF183068DF62B1D2A61F46EA03A88FCB /* RDEPUBStyleSheetComposer.swift in Sources */, - 9ABA0CB256F84F56B971D4EAA8019C9A /* RDEPUBTextAnchor.swift in Sources */, - 932899B4CB64E52B2764F095C3923F1D /* RDEPUBTextAnnotationOverlay.swift in Sources */, - 8CF6E628158B190D0FFEF62AF059FD12 /* RDEPUBTextBookBuilder.swift in Sources */, - CC11A163D3F74290FE540D1BBAA9C518 /* RDEPUBTextBookCache.swift in Sources */, - 476C43CF774C35C590EB31D941DBFC0C /* RDEPUBTextBookModels.swift in Sources */, - 923002983AC3675E5D249839481F6DDC /* RDEPUBTextBuildPipelineInterfaces.swift in Sources */, - 8AFC5D133F47D2D83D972F007FB5E975 /* RDEPUBTextContentInteractionCoordinator.swift in Sources */, - CDE3205D4F1E8D99CE2BE54F2505133F /* RDEPUBTextContentView.swift in Sources */, - B662098EC7A098D0BF449F33D06B22F1 /* RDEPUBTextIndexTable.swift in Sources */, - 75D6249689F5C1F38EBF86A5D5C1490D /* RDEPUBTextLayouter.swift in Sources */, - B553EE0E95DCEDE9EE2738F649F197DB /* RDEPUBTextLayoutFrame.swift in Sources */, - DB584734160C920EAC6C819D8F05CA23 /* RDEPUBTextPageDecorationView.swift in Sources */, - 93760CA1B3EB5AD5D859FBFB7B7F5757 /* RDEPUBTextPageRenderView.swift in Sources */, - B3AC4D5487C5FEFFBEF018ABF5F4800A /* RDEPUBTextPaginationInterfaces.swift in Sources */, - 79CDB0BF339D6E5BF3D168BBED6553FD /* RDEPUBTextPaginationSupport.swift in Sources */, - 041DF6ADC6BC49651B1D25241076C947 /* RDEPUBTextPerformanceSampler.swift in Sources */, - 999817CC2779F3811583CDAA23A26213 /* RDEPUBTextPositionConverter.swift in Sources */, - 26EEB00355253DED239D675F0DA12E46 /* RDEPUBTextRenderer.swift in Sources */, - 416A7BBE1A28D974E1CEA60B22420031 /* RDEPUBTextRendererSupport.swift in Sources */, - AF6CFED7C7CF1B8D9384BCE97D1DF7D9 /* RDEPUBTextSearchEngine.swift in Sources */, - A7CE2EB98E19E07AB9B917415ACDF380 /* RDEPUBTextSelectionController.swift in Sources */, - 63DE1ECD08743BC4A556ACA90FDB4BAD /* RDEPUBTypesettingPipeline.swift in Sources */, - 118AB54026EBE9D225066649DE548A7D /* RDEPUBViewportTypes.swift in Sources */, - 28F019DEE9E4CE70EEF128BCFDF3AD81 /* RDEPUBWebContentView.swift in Sources */, - A26C8915823F92017865B00FC0F16B22 /* RDEPUBWebDecorationOverlayView.swift in Sources */, - 279D463D1EAD8ABD6654EF919B9D8F06 /* RDEPUBWebView.swift in Sources */, - DB860EFC2F1DB67CE1160CEEAA78FB57 /* RDEPUBWebView+Configuration.swift in Sources */, - 7DD3E3DDBF44D68361F090E0EB4B0737 /* RDEPUBWebView+FixedLayout.swift in Sources */, - DA090B9ED29C67FCC620AAE26A6DFC2A /* RDEPUBWebView+JavaScriptBridge.swift in Sources */, - ABB6259EA3066E7A829C17510410F5A1 /* RDEPUBWebView+Reflowable.swift in Sources */, - 08E9FC7DEE3A8A6347C38CDDE34F0102 /* RDEPUBWebView+Search.swift in Sources */, - 275DD4A76FB5411D0063B35878480D1F /* RDEPUBWebViewDebug.swift in Sources */, - 9F03124BA4BCE5C24E3E2B879205DF47 /* RDPlainTextBookBuilder.swift in Sources */, - D299C2B1A237A61C7DDE0C52371D0AAB /* RDReaderContentCell.swift in Sources */, - 0CF68C435484E592181D2666B7661988 /* RDReaderFlowLayout.swift in Sources */, - B3D89EAA9B5A3729A4BD440B66A36F4B /* RDReaderGestureController.swift in Sources */, - DBBA4E0A5CC421EEDAB45FDBF7A90906 /* RDReaderPageChildViewController.swift in Sources */, - 3A4AE693C64AC6FC51F627954661289C /* RDReaderPagingController.swift in Sources */, - 8E85166218F63FF359E769813A2444C6 /* RDReaderPreloadController.swift in Sources */, - 415EF47917ED52680E29DAC90B4C110A /* RDReaderSpreadResolver.swift in Sources */, - F580E10ABA4F035DD6C016EF8E917F2C /* RDReaderTapRegionHandler.swift in Sources */, - 18D8C814B264B9DA4BC897F587005B3E /* RDReaderView.swift in Sources */, - 6F9A6FA6D8D87257F9426AF3E118F7E0 /* RDReaderView+CollectionView.swift in Sources */, - 188C43C05E6BB8EB5DD88514568913DF /* RDReaderView+ContentAccess.swift in Sources */, - 7A748D28C60A0065C777DE834CA1B5A7 /* RDReaderView+PageCurl.swift in Sources */, - 465616864A71819A08EE6637652A11D5 /* RDReaderView+ToolView.swift in Sources */, - B35EC704CCE46CFDFE734E94643B89CA /* RDReaderView-dummy.m in Sources */, - DDE3BF42B0D4938C6E1B125885F69A35 /* RDReaderViewProtocols.swift in Sources */, - E8E67096ED90348922DD8A3D1E4B92B6 /* RDURLReaderController.swift in Sources */, - BA83048DCDDD496C26B492BD891FC411 /* String+RDEPUB.swift in Sources */, - 9E85C29B5E66B3CBDA79C8C04770B169 /* UIColor+RDEPUB.swift in Sources */, - C5BE7B683B2F31C0DFD21809C17FEAD2 /* UIColor+RDEPUBHex.swift in Sources */, + 6E8441F463F68A5FEC44C69BCF77EAD8 /* RDEPUBAnnotationModels.swift in Sources */, + F02681BD4DFFDABD54753610438BE05F /* RDEPUBAssetRepository.swift in Sources */, + B600901A9F54CF17B27D65FAF248F495 /* RDEPUBAttachmentNormalizer.swift in Sources */, + 2E056A2117F8E13CDE6E665C89A8B1BA /* RDEPUBAttachmentTooltipOverlayView.swift in Sources */, + AE1553D719D16EEC2847D111B5903892 /* RDEPUBAttachmentTooltipView.swift in Sources */, + 187FC12F4FE210C3276E0F256BBC287F /* RDEPUBBackgroundCoverageStore.swift in Sources */, + C90B928D22ABD4A4019ADF634B3C9252 /* RDEPUBBackgroundPriorityPolicy.swift in Sources */, + 233716F1EE82F10DA779D6DD5139CE95 /* RDEPUBBackgroundTrace.swift in Sources */, + 186B46C750706F83ECE93BFA3CACD661 /* RDEPUBBookPageMap.swift in Sources */, + 12B89F026E1CA877A5DB9901F1F84B41 /* RDEPUBBuildDiagnosticsReporter.swift in Sources */, + 2BE0013FE0DDC77B462B69584C04E5EF /* RDEPUBCFI.swift in Sources */, + 692CDFFEE07CA9C09D1257448154707D /* RDEPUBCFICompatibility.swift in Sources */, + F21A55B28E25C3B9D00D8E2D6EB58544 /* RDEPUBCFIDOMPathBuilder.swift in Sources */, + AC7BC683CD9A6CE43F2473EAA729C0FA /* RDEPUBCFIError.swift in Sources */, + 4D66BE87981E3058D5C54D88CEB4EB8F /* RDEPUBCFIGenerator.swift in Sources */, + 4F2B6AFB35C163DBC1F8E20681D46BB9 /* RDEPUBCFIMap.swift in Sources */, + 06FF798F5DE1149DAB8763B64724E6D0 /* RDEPUBCFIMarkerInjector.swift in Sources */, + 83EA663B7BB067DD5EDF4ABAD045622C /* RDEPUBCFIParser.swift in Sources */, + D2BD52C739EE9121C2DBB30B9AA20E04 /* RDEPUBCFIPath.swift in Sources */, + AEE390923BE11EF94ABB8172930A261B /* RDEPUBCFIRange.swift in Sources */, + 98444DBE3A27073D4853E86F5CAD39C1 /* RDEPUBCFIRecoveryEngine.swift in Sources */, + 0E3FD7C77166CB18C2CF32EECBB7678C /* RDEPUBCFIResolver.swift in Sources */, + E7B84139E33FBD60C90F546750B66179 /* RDEPUBCFISerializer.swift in Sources */, + C3463BB24D53EA7809BB5E1C3276B94B /* RDEPUBCFITextAssertion.swift in Sources */, + 1E9BE89829042FF203DBA620E39BF082 /* RDEPUBCFIUtilities.swift in Sources */, + FBCBAE5842CAA34316A0963C2ED3FFE6 /* RDEPUBChapterCacheKey.swift in Sources */, + FB3D0E7A431E12F09F3EFEA34560164D /* RDEPUBChapterData.swift in Sources */, + B7E5AB4E36C8E357A4DBA8F6451CE8A0 /* RDEPUBChapterDataCache.swift in Sources */, + D4D42191C9EC85914D0E6BD19884009E /* RDEPUBChapterLoader.swift in Sources */, + 2BC65213EE316B42A750CE7EC423E1AE /* RDEPUBChapterLocation.swift in Sources */, + 5510021D8090D3D2051AEB591A7D90BB /* RDEPUBChapterOffsetMap.swift in Sources */, + CD8D29DA6C83EF687425C3DA6947612F /* RDEPUBChapterPageCounter.swift in Sources */, + EDC97063261083047D0D636FE47AC003 /* RDEPUBChapterRuntimeStore.swift in Sources */, + 404FBD43D1380F605264FD23756845FA /* RDEPUBChapterSummaryDiskCache.swift in Sources */, + 8A666D6696060E7CD204E87C00BE5B14 /* RDEPUBChapterTailNormalizer.swift in Sources */, + CA7FDFDF278504C0C1D5EEB88B044DCB /* RDEPUBChapterWarmupOrchestrator.swift in Sources */, + 5F91E431D40AE218D7A3774E0A9B4FCC /* RDEPUBCoreTextPageFrameFactory.swift in Sources */, + F6504C7DCCD538BD0696B381952DECB4 /* RDEPUBCSSCompatibilityLayer.swift in Sources */, + 921EA744654E430A9220D70229C58FF6 /* RDEPUBDarkImageAdjuster.swift in Sources */, + AD63555565A9FC36E9AD69AE8E7D1147 /* RDEPUBDTCoreTextRenderer.swift in Sources */, + 27E0CC7EF5D20F0A61D27E439B780BDC /* RDEPUBFixedLayoutTemplate.swift in Sources */, + 383AFA3F295427EA56530C70024DBD2F /* RDEPUBFontFallbackResolver.swift in Sources */, + CAB581FD7C03A91D7BCF31F9B7DFD2C1 /* RDEPUBFontNormalizer.swift in Sources */, + 6C906CF9FFC1697C72A93D4FC543B6A3 /* RDEPUBFragmentMarkerInjector.swift in Sources */, + F0DDD6C446D5E4F9712C70CE21AB2CF8 /* RDEPUBHTMLNormalizer.swift in Sources */, + 5911713F9239050AD67855C5FE5C09CE /* RDEPUBImageViewController.swift in Sources */, + DCD0A2ABC337BCEB54C478ED1F8889D9 /* RDEPUBImageViewerCoordinator.swift in Sources */, + A97EAA78ADAB17BFF4DB70AD2CE36A2A /* RDEPUBJavaScriptBridge.swift in Sources */, + E3240129AF117F28A4CC9A39E48C7CE5 /* RDEPUBJumpSession.swift in Sources */, + 94C4899B76DF8F45F3E49243780A055D /* RDEPUBMetadataParseCancellationController.swift in Sources */, + F8073C63A8EFDF857AA51C52455545F0 /* RDEPUBMetadataParseWorker.swift in Sources */, + 2C2DC59C72FEC3C928CBF9D92F8FFDD4 /* RDEPUBModels.swift in Sources */, + 253969CCB942DD6826234506CC2B2635 /* RDEPUBNavigatorLayoutContext.swift in Sources */, + 6D705FC78684FAA20879A13095661E8F /* RDEPUBNoteDetector.swift in Sources */, + 9D4364E686CE29303EEA24086C549C2A /* RDEPUBNoteModels.swift in Sources */, + A6C87CC6692C9C833DA11D0A3D9F6477 /* RDEPUBNotePopupCoordinator.swift in Sources */, + EEE82C0D019E833A59DB98BA96CBA446 /* RDEPUBNotePopupViewController.swift in Sources */, + B7D3EAF9CD1638EE59CF9127E46D5811 /* RDEPUBNoteResolver.swift in Sources */, + 76BF72753C25298968F8446D1FEDD9C5 /* RDEPUBPageBreakPolicy.swift in Sources */, + 0D242CECCC8FE1C19BB2D952BBA21D1D /* RDEPUBPageCountCache.swift in Sources */, + 3AD2C1CA7E9FC21A2D74EA080B6D962B /* RDEPUBPageInteractionController.swift in Sources */, + 02FAC2A406B3445930B8B3CA4A9B4998 /* RDEPUBPageLayoutSnapshot.swift in Sources */, + 09342D52B30E176B4A1D263799590FC6 /* RDEPUBPageMapReconciliationCoordinator.swift in Sources */, + 005CFC268C4EFCB746393BB9E2F7EF89 /* RDEPUBPageResolver.swift in Sources */, + 433265EE781060B73077244642255314 /* RDEPUBPaginationCacheCoordinator.swift in Sources */, + 3120641E5E2540AFC3E1F47E0BE4E35B /* RDEPUBPaginationModels.swift in Sources */, + 789E8F623B7EC480E167CCFB17B32328 /* RDEPUBPaginator.swift in Sources */, + BB1A3A67759025DE4B7F03BC318AF516 /* RDEPUBParser.swift in Sources */, + 222066D6F66889D7810BE1F9C135DA22 /* RDEPUBParser+Archive.swift in Sources */, + 9F09BFBCF74E17B9BFD3FBB37BFAC7A6 /* RDEPUBParser+Package.swift in Sources */, + D7473BF91981294A067CB035F7695D99 /* RDEPUBParser+ReadingProfile.swift in Sources */, + 8D7B76D2BE87960C41554815520FBFD4 /* RDEPUBParser+Resources.swift in Sources */, + 296BA2D5C5458F0CCF2BA11548275985 /* RDEPUBParser+TOC.swift in Sources */, + 609A47F8B6B778E7C09C4A3173716231 /* RDEPUBPreferences.swift in Sources */, + 3B2F4E4DC50638762591D58890B11DB3 /* RDEPUBPresentationRuntime.swift in Sources */, + 8AA93AAAC288A910A46B6418DEDBA643 /* RDEPUBPublication.swift in Sources */, + D68C9E460307CB1FDFEF1622B2905ED4 /* RDEPUBReaderAnnotationCoordinator.swift in Sources */, + 082E3BF2BAC5436D6A7ECE404707A9E0 /* RDEPUBReaderAssemblyCoordinator.swift in Sources */, + 0A5EF9E22D7DF24CEB0E9F5395C5C2D9 /* RDEPUBReaderBottomToolView.swift in Sources */, + 01AC80DCBF24562307ECFA24A6A945AF /* RDEPUBReaderChapterListController.swift in Sources */, + ED83D5746B2CB139C2A53D97CEAA8AC1 /* RDEPUBReaderChromeCoordinator.swift in Sources */, + 88F114C6286AA4DABEFC5A4A4659C539 /* RDEPUBReaderConfiguration.swift in Sources */, + DBD78AD2493F9A171BBBFF8AD648B93B /* RDEPUBReaderContext.swift in Sources */, + 0603811BC44846AC6334DB02B797BEFB /* RDEPUBReaderController.swift in Sources */, + F3650B2D64F692BEFD95976185B5DB15 /* RDEPUBReaderController+AttachmentTooltip.swift in Sources */, + 7A1CB3B032A352C23503837C966FE021 /* RDEPUBReaderController+ContentDelegates.swift in Sources */, + EA2CEDE8F391ED85A9601DEB7D8044F2 /* RDEPUBReaderController+DataSource.swift in Sources */, + 184EFEEA4A34812A9891FE7D667A3A98 /* RDEPUBReaderController+ExternalLinks.swift in Sources */, + 58ED82220D20D2DD9ABDAC9ABDD4BB4A /* RDEPUBReaderController+LocationResolution.swift in Sources */, + 86EB794495FA09BC2E166B43002DAFC5 /* RDEPUBReaderController+PublicAPI.swift in Sources */, + C8FADC9D72A57A061C6666713FF02524 /* RDEPUBReaderController+RenderSupport.swift in Sources */, + 5BBCAA7A6098938497E444933CC62556 /* RDEPUBReaderController+RuntimeBridge.swift in Sources */, + 7E082BDFF91E79A320FFE58301A4611F /* RDEPUBReaderController+TableOfContents.swift in Sources */, + 1A7C6254C0BF1C6C8E1D1D8DED658D52 /* RDEPUBReaderDelegate.swift in Sources */, + 44D7D8E32201729CC581FC5A0EE319A0 /* RDEPUBReaderDependencies.swift in Sources */, + CE8A5F13186A9A7C5F40A75C17466DBF /* RDEPUBReaderEnvironment.swift in Sources */, + 8D3C1C271D61E160F1F39548AB40B82D /* RDEPUBReaderHighlightsViewController.swift in Sources */, + 7BF06C839584BC5C3F22B7922B2135C0 /* RDEPUBReaderLoadCoordinator.swift in Sources */, + 72CA345F4639CA9C6AF9C164515070B6 /* RDEPUBReaderLocationCoordinator.swift in Sources */, + 80922C1B7510E10B313BBC0BC457314B /* RDEPUBReaderPaginationCoordinator.swift in Sources */, + 6E0E63C1AAA2E75F7C040815B6A342DA /* RDEPUBReaderPersistence.swift in Sources */, + FCF14BAEC4558EE376B315BD4C0C9307 /* RDEPUBReaderRuntime.swift in Sources */, + 65D4A26423DC3811E2E647A7E6401653 /* RDEPUBReaderSearchBarView.swift in Sources */, + 879B5366A6BB373F77010F2CCE776F4C /* RDEPUBReaderSearchCoordinator.swift in Sources */, + 741FC27B73B2FC912CE6940374608E74 /* RDEPUBReaderServices.swift in Sources */, + FBAC3FF19329EDF1CC7D494263CA728D /* RDEPUBReaderSettings.swift in Sources */, + 5ADF1544DE3754D1E2AA8A10BE3CC09A /* RDEPUBReaderSettingsViewController.swift in Sources */, + 34BBE7EC94EB4244DB72A9C38FACCDDA /* RDEPUBReaderState.swift in Sources */, + 04CF8E10D9B5FCD1EE0637929AE30482 /* RDEPUBReaderTableOfContentsItem.swift in Sources */, + F3DFAD0104D9A6520E75A5874F499F66 /* RDEPUBReaderTheme.swift in Sources */, + B9A197E275617D9B2A65077B69E4A2F4 /* RDEPUBReaderToolView.swift in Sources */, + 057A9674B9EE73622350A746C47C478E /* RDEPUBReaderTopToolView.swift in Sources */, + 8FC40E552134EC459638871941437C41 /* RDEPUBReaderUIState.swift in Sources */, + 5B7E3DABCEB0DED90BD7C9F6FF076384 /* RDEPUBReaderViewportMonitor.swift in Sources */, + 1FEAB861BB1CF892743651C907B28B12 /* RDEPUBReadingLocationModels.swift in Sources */, + 632192A26D2997E04711F37A141B8099 /* RDEPUBReadingSession.swift in Sources */, + D46DA22E948819A50DAB9055B3B453FF /* RDEPUBRenderDiagnosticsCollector.swift in Sources */, + 6BF4DC0E327C667AC9D4709AD022FA7F /* RDEPUBRenderRequest.swift in Sources */, + 153B1C6A72B6CF391E99A104D1C2422D /* RDEPUBResourceResolver.swift in Sources */, + 7F06B128ECF3428FDAB9B0CDAEB50527 /* RDEPUBResourceURLSchemeHandler.swift in Sources */, + 14AB1A24C2510D7BF36C5E66BE5C0464 /* RDEPUBRuntimeChapter.swift in Sources */, + A4E1287AFDA66235AD864D556D56D867 /* RDEPUBRuntimePageCount.swift in Sources */, + 63A0F02E81586CA14D5EFD53E7E09EC5 /* RDEPUBSafeArea.swift in Sources */, + A17B2DB5E14E8116012BF21BB7721638 /* RDEPUBSearchEngine.swift in Sources */, + A948E3CF55F94BD4F4B4D1D27463F350 /* RDEPUBSearchModels.swift in Sources */, + 03BEC4FA94EF8D1DD1A0D9A1187E0176 /* RDEPUBSelectionLoupeView.swift in Sources */, + EA9AC5EE45C33187D248C64FC46AF85C /* RDEPUBSelectionOverlayView.swift in Sources */, + 6DD5C44F5661E614F21FE810AFB6E8BE /* RDEPUBSelectionState.swift in Sources */, + 328F47247FA2E27D2495C01F1D0729D1 /* RDEPUBSemanticMarkerInjector.swift in Sources */, + EC6CE6065F48F2022717FE73027CF1F9 /* RDEPUBSettingsFlipAutomation.swift in Sources */, + DE1BAA17B95E7CD4F1FFB609726D4616 /* RDEPUBStyleCompatibilityModels.swift in Sources */, + B11B4F2E3F64763587B6C27C0F09E0E8 /* RDEPUBStyleSheetBuilder.swift in Sources */, + 2927A35D1B8067A776EA968F816E7326 /* RDEPUBStyleSheetComposer.swift in Sources */, + 417B820CB812E2EB595D0A260C3C8B43 /* RDEPUBTextAnchor.swift in Sources */, + 49D58CFE47CAF677E9442BC792640A4C /* RDEPUBTextAnnotationOverlay.swift in Sources */, + DB453710016DF142F6E628FFBC4A3C7A /* RDEPUBTextBookBuilder.swift in Sources */, + 1E9FF2DE2C53AD68B7278F808358E763 /* RDEPUBTextBookCache.swift in Sources */, + 5991435101718DD89D53293B2B2CF58E /* RDEPUBTextBookModels.swift in Sources */, + B3D6FFE321D38B8F43578FDBAF537B71 /* RDEPUBTextBuildPipelineInterfaces.swift in Sources */, + 717C9A6838893A778C48AE1A4ADC1D93 /* RDEPUBTextContentInteractionCoordinator.swift in Sources */, + C704ACCB4F169F948102B6D90B81F835 /* RDEPUBTextContentView.swift in Sources */, + 8AC8341ED75EF88F3C8EF4B750ADA8E9 /* RDEPUBTextIndexTable.swift in Sources */, + 8557BEDD77A0FABC469CDA90D3402C2B /* RDEPUBTextLayouter.swift in Sources */, + 102F6AF59C2B2A5C59BE45741F913A37 /* RDEPUBTextLayoutFrame.swift in Sources */, + AC13F15F74244055FDC349A8D8BCD78F /* RDEPUBTextPageBoundaryValidator.swift in Sources */, + 59D84D2F01364873C8C8BAB4C33C2261 /* RDEPUBTextPageDecorationView.swift in Sources */, + E1985223C4218E5241401FCE8E7A3008 /* RDEPUBTextPageRenderView.swift in Sources */, + 86D6DD3DAA214DF9228D219A1C15B12A /* RDEPUBTextPageVerticalJustifier.swift in Sources */, + 6112DAD7FA7F9CDFF6798D061A776AA6 /* RDEPUBTextPaginationInterfaces.swift in Sources */, + 9478E840174081089888DA0CA4AB6F01 /* RDEPUBTextPaginationSupport.swift in Sources */, + BBE45BB7EAE6DC693F8B2D47AD8727E7 /* RDEPUBTextPerformanceSampler.swift in Sources */, + 64F90689CBA4FBC32D6A4D65BAE984A8 /* RDEPUBTextPositionConverter.swift in Sources */, + 1BE507A499436093EC10EC6E72902516 /* RDEPUBTextRenderer.swift in Sources */, + 46F7CEDA8A932C39B2536B68CE3889EE /* RDEPUBTextRendererSupport.swift in Sources */, + D6F1A867D418237980B1B066F777AE36 /* RDEPUBTextSearchEngine.swift in Sources */, + F09A27FF0030DBB58443F1B41F256B86 /* RDEPUBTextSelectionController.swift in Sources */, + 02A66C86950C9DD663C88120E7C09A81 /* RDEPUBTypesettingPipeline.swift in Sources */, + FE1D81BC7577F8C33E5D2164F29F57AD /* RDEPUBViewportTypes.swift in Sources */, + 7528B559334EFD3C17196C52EA4B28F0 /* RDEPUBWebContentView.swift in Sources */, + 5EF29ED9DAD773DB59A8F506A4170C8B /* RDEPUBWebDecorationOverlayView.swift in Sources */, + 0AEAE6D5DA18AA7DF57813BABF4AD048 /* RDEPUBWebView.swift in Sources */, + 1FD443A9AEFF8858D8B039BD378F964D /* RDEPUBWebView+Configuration.swift in Sources */, + 06F1FB0ED2F7B7830C124D239480AD2C /* RDEPUBWebView+FixedLayout.swift in Sources */, + 3B9A2BDE8A4970A10A72EF271D89773B /* RDEPUBWebView+JavaScriptBridge.swift in Sources */, + B604DFE0CDD1FAA2DFED73DD0EE1A31A /* RDEPUBWebView+Reflowable.swift in Sources */, + 4CE2C34EB81CD8336960B667033A6325 /* RDEPUBWebView+Search.swift in Sources */, + F425E895C294B7E62878166C248F073A /* RDEPUBWebViewDebug.swift in Sources */, + 24152828C7910BA76155AD09435B0326 /* RDPlainTextBookBuilder.swift in Sources */, + 139CF8823D81F64DAE0E06F777B9C4CD /* RDReaderContentCell.swift in Sources */, + 71D61645B7F86868B09D2D8628FB02DB /* RDReaderFlowLayout.swift in Sources */, + 9312AA458DE13E4AAA10D6E6F063F30C /* RDReaderGestureController.swift in Sources */, + AA7761395401FB118FB850405492811D /* RDReaderPageChildViewController.swift in Sources */, + 8FC3334B09D284CB92164B6109124472 /* RDReaderPagingController.swift in Sources */, + 11D3A99648318629F6FB214C405A81E2 /* RDReaderPreloadController.swift in Sources */, + 3A3A957A1CEC0FF2100DC093C5B0BF81 /* RDReaderSpreadResolver.swift in Sources */, + EA75620DF32C36B44E170275F2551BB5 /* RDReaderTapRegionHandler.swift in Sources */, + E355E9E35DEEF09E5F05A76BCBBC35F6 /* RDReaderView.swift in Sources */, + A4B441D1E79D04445DAFA6865FFE41D9 /* RDReaderView+CollectionView.swift in Sources */, + 20805FA52C28B4FBEF32D3F55FA8C015 /* RDReaderView+ContentAccess.swift in Sources */, + 9968BDA6D208A701E8014B01B9683683 /* RDReaderView+PageCurl.swift in Sources */, + 81B117A37A8476877A9F52EB0E1519F7 /* RDReaderView+ToolView.swift in Sources */, + D4E5594D3EC3FFEFD78C4867AD0671CD /* RDReaderView-dummy.m in Sources */, + 7C12C095DE7472FF95E05E35601C3988 /* RDReaderViewProtocols.swift in Sources */, + 6F0D1C67B483AE83D93F884A04CF6EC8 /* RDURLReaderController.swift in Sources */, + 3C5E435F6F4211B7A41CC9B6CC9FA413 /* String+RDEPUB.swift in Sources */, + 5FD041841462D5467C316ABFECA32B75 /* UIColor+RDEPUB.swift in Sources */, + 1BBEC939F5D35EEDA2A20D8CE4244A82 /* UIColor+RDEPUBHex.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - CBE49EE63AF0F9347CE685FF36B1D2E6 /* Sources */ = { + F24E4D34625539789AB8B2F3895D5A91 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - AEA089F602E66B4E0CB655D1BF625880 /* DTActivityTitleView.m in Sources */, - 0EBABF6BEEA7615626818E066C16AF18 /* DTAnimatedGIF.m in Sources */, - 58ACB3DC0AC4EA63B6DC65585DC75509 /* DTBase64Coding.m in Sources */, - 8E1DC7355706F3565B8A0B38A59AAED9 /* DTBlockFunctions.m in Sources */, - B0984EA45A82B8CF021C4BA7CE6B2473 /* DTCoreGraphicsUtils.m in Sources */, - EACD47B345480FC9DE37F1BBEBC3E6E8 /* DTCustomColoredAccessory.m in Sources */, - 7F9B8AAB4623E3CC58C37D8EBFF514B4 /* DTExtendedFileAttributes.m in Sources */, - 4701EA34789A6B21772EC0B428C8CEF5 /* DTFolderMonitor.m in Sources */, - 9914ED7075FAF9F04BB3C4154952C9B9 /* DTFoundation-dummy.m in Sources */, - 458D53C484D2470508819D1D41376EE7 /* DTFoundationConstants.m in Sources */, - 4B58554A575684981F3BB1A6F90E4124 /* DTHTMLParser.m in Sources */, - 5966F7524564265D493279F72B6BEF10 /* DTLog.m in Sources */, - EC2221DF39BF4ABE42B4D74B98EE26BD /* DTPieProgressIndicator.m in Sources */, - E5B7FC56FA951AD4542B3EC0EBB7C6A6 /* DTSmartPagingScrollView.m in Sources */, - 0BF855C140122F5D1D410BA83E44DD50 /* DTTiledLayerWithoutFade.m in Sources */, - 0C798C4A69D1C2F7DD26AD589C05F260 /* DTVersion.m in Sources */, - 859B45A8A4A1B9FBEB3002EE8BEE46E1 /* NSArray+DTError.m in Sources */, - 792ACF8BA7BA68E9534E4B8D095690D6 /* NSData+DTCrypto.m in Sources */, - 191F106462110C3B72DC586D721BEB57 /* NSDictionary+DTError.m in Sources */, - 8329F87853CB379C84A455A9C72F0E97 /* NSFileWrapper+DTCopying.m in Sources */, - A43DAC6C9656DF7A74DCC11AB44433B5 /* NSMutableArray+DTMoving.m in Sources */, - 32844568EDF13978B21D3A12652DD1E9 /* NSString+DTFormatNumbers.m in Sources */, - 8ABB70BC85808639BE2820ED576705EF /* NSString+DTPaths.m in Sources */, - AF5E584EB1F14EC57A5DC51D5CD93FF2 /* NSString+DTURLEncoding.m in Sources */, - 74794205BE245B73D21939B91C6191C6 /* NSString+DTUtilities.m in Sources */, - B21AC2FBB25F091A5AE9A0602A9F4937 /* NSURL+DTAppLinks.m in Sources */, - A633C89374604FFFE5119DA09B8C5088 /* NSURL+DTComparing.m in Sources */, - 65957BA854E8610EA216E8323B136C5B /* NSURL+DTUnshorten.m in Sources */, - 3A5317D34FDA7B91C27C6CA5BEFFB7B3 /* UIApplication+DTNetworkActivity.m in Sources */, - 892B8712F2112DDFA6619A0913DE30B3 /* UIImage+DTFoundation.m in Sources */, - 3A14E77E5539416CB3616992AE1908EE /* UIScreen+DTFoundation.m in Sources */, - 0F5153F35326C04F32AC77F5FEB668A5 /* UIView+DTFoundation.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - E2564DACE65641E8E29BD319EBBDA772 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 16B7824735E1261E1F14697461BAEF56 /* Archive.swift in Sources */, - 606B416E975EF1F02EFC8945656B7C28 /* Archive+BackingConfiguration.swift in Sources */, - 4037C1C90ECAA2029911262DA5ACF321 /* Archive+Deprecated.swift in Sources */, - 8FFDDFA77ACE0DCC142C857189E867C7 /* Archive+Helpers.swift in Sources */, - 14A68E9E3880E51FBA491021429E40B7 /* Archive+MemoryFile.swift in Sources */, - D1744173283F238280FBFDFA6FAC791A /* Archive+Progress.swift in Sources */, - 7C2173CC58496721A7DCDCBC31840068 /* Archive+Reading.swift in Sources */, - C1C04AC61695CB3E392C98A66F8C78F0 /* Archive+ReadingDeprecated.swift in Sources */, - 244078AD98E31B83FD032D370F549ED8 /* Archive+Writing.swift in Sources */, - 0C0FD53B17B17CC557667AE50CE8A86B /* Archive+WritingDeprecated.swift in Sources */, - 96004CF12BD7134A79FA77102546C620 /* Archive+ZIP64.swift in Sources */, - B0AA422A606376E1DE651B23D3849CAD /* Data+Compression.swift in Sources */, - 1D25B72B2C7F472F87A66B5754B9F756 /* Data+CompressionDeprecated.swift in Sources */, - FFB1EA7B10054C49F85A561AF4A8D94B /* Data+Serialization.swift in Sources */, - D2F1AEC45494E9E795B6D06C06FC0E61 /* Date+ZIP.swift in Sources */, - D512CC6A4C2AF2DE2B950125BD900706 /* Entry.swift in Sources */, - 40FD1F3E37657243BDB8B6F651B94C26 /* Entry+Serialization.swift in Sources */, - 1F66D9C63831F3D2D103D49FCAF87DB3 /* Entry+ZIP64.swift in Sources */, - 591C7326E09322733574F5D607BDDFF7 /* FileManager+ZIP.swift in Sources */, - 24E9A646A1B686FD9C6F696E203C19C8 /* FileManager+ZIPDeprecated.swift in Sources */, - 0758EE7A9DEC9BD31DCDAC2CFB03D837 /* URL+ZIP.swift in Sources */, - 400C60DBDB9C174EAEF5D5D6C5E3497E /* ZIPFoundation-dummy.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2630,72 +2642,90 @@ /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ - 0CC9636CCC44B21535D59D6DAD5F924F /* PBXTargetDependency */ = { + 0F35B7A6F968F4851B3CFF623AA5BE5E /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = ZIPFoundation; + target = AA15C8469D67684160CC2A7098EB841C /* ZIPFoundation */; + targetProxy = 02DA505711474C0FACBA3A4EF92D0255 /* PBXContainerItemProxy */; + }; + 13017820CBB8EDED04D3E425991B4678 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = DTCoreText; + target = B88F4EA0695B6B3165C64594850D72C7 /* DTCoreText */; + targetProxy = C06FCB07200CA15988CA2E58AE3B4525 /* PBXContainerItemProxy */; + }; + 3510572C3D091C0935798461FB6C5A92 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = "RDReaderView-RDReaderViewAssets"; target = AE7F393FB7805DE2664AB4111873F907 /* RDReaderView-RDReaderViewAssets */; - targetProxy = 99F356F4CC2B773149744B1DE33A5ED9 /* PBXContainerItemProxy */; + targetProxy = 8AA2F6A6BF24C94B6D48B63672A15FC1 /* PBXContainerItemProxy */; }; - 3FB21ADA3E76890812FD8995D638D0B3 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = ZIPFoundation; - target = AA15C8469D67684160CC2A7098EB841C /* ZIPFoundation */; - targetProxy = 74636C5DF9567077F30C787E0823DE39 /* PBXContainerItemProxy */; - }; - 448B8ED7B8C073D9859C5970102E1961 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = RDReaderView; - target = AA2E57587AA8EECA63C4BE08EA3CB6D2 /* RDReaderView */; - targetProxy = 1756F289E5867FF7989F61502D8E61E6 /* PBXContainerItemProxy */; - }; - 4D6AACC2BB50A205D880B6E1DE55515F /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = DTFoundation; - target = 8F6E5A5BF72D62CDFD25F91A7CFA3309 /* DTFoundation */; - targetProxy = 291EF29F5CECA009529D76F9FE26B4B9 /* PBXContainerItemProxy */; - }; - 7214D8724950769514A63401878B7871 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = DTCoreText; - target = B88F4EA0695B6B3165C64594850D72C7 /* DTCoreText */; - targetProxy = B1FC0CCED6BCAC632379DDDD199C72EA /* PBXContainerItemProxy */; - }; - 8F7656822B7E5947D8BBA072A5C324B6 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = ZIPFoundation; - target = AA15C8469D67684160CC2A7098EB841C /* ZIPFoundation */; - targetProxy = 1D36C48BC78E85DBB1B5B5C63364A539 /* PBXContainerItemProxy */; - }; - 9FC3DD151917F4600168200308C8CFB2 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = DTCoreText; - target = B88F4EA0695B6B3165C64594850D72C7 /* DTCoreText */; - targetProxy = C8DB32812641B809F4A0DAC443C5EAA0 /* PBXContainerItemProxy */; - }; - D8157DC8FC37E09A97E69270B47BD42C /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = DTFoundation; - target = 8F6E5A5BF72D62CDFD25F91A7CFA3309 /* DTFoundation */; - targetProxy = CEF5C9FADEA582571424EA2F8593ACD3 /* PBXContainerItemProxy */; - }; - D93D69DEA20A22DCC34A44F20BCB6886 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = "ZIPFoundation-ZIPFoundation_Privacy"; - target = C7A8D82E407CD3FDC3BA55CEE519B252 /* ZIPFoundation-ZIPFoundation_Privacy */; - targetProxy = 3AEFBA1AE6539AC7A3DA5FA7CF3F7885 /* PBXContainerItemProxy */; - }; - DEA55EBE6C71C231E96349A3450C0332 /* PBXTargetDependency */ = { + 56B80CB8423A9ED18F79266879B187A0 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = "DTCoreText-Resources"; target = 0C24CB0E87A728A11AA1124CB360D6A1 /* DTCoreText-Resources */; - targetProxy = 7AD1BAAD6E745A14A9201807DB7B6F66 /* PBXContainerItemProxy */; + targetProxy = 18EB355BC8F480499E2AE3151AC106F3 /* PBXContainerItemProxy */; + }; + 7EDFE31368D3022A0894D67822D94E7D /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = DTCoreText; + target = B88F4EA0695B6B3165C64594850D72C7 /* DTCoreText */; + targetProxy = A1FE9FFEAB3A0F41D3FD0AC3841AF317 /* PBXContainerItemProxy */; + }; + 810473C0D4E1B245A6211882D9B2E72E /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = DTFoundation; + target = 8F6E5A5BF72D62CDFD25F91A7CFA3309 /* DTFoundation */; + targetProxy = 80521E27CBC7CED78A3F5097ABF137C3 /* PBXContainerItemProxy */; + }; + 848C3FDDD1BF09AFA5AED03B23F97647 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = RDReaderView; + target = AA2E57587AA8EECA63C4BE08EA3CB6D2 /* RDReaderView */; + targetProxy = AF23E97E0F7EF7C4C8ED414CE73B904B /* PBXContainerItemProxy */; + }; + 9F03EAA11BE008FBE83FA704A5ABBDD4 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = ZIPFoundation; + target = AA15C8469D67684160CC2A7098EB841C /* ZIPFoundation */; + targetProxy = 7A2462400BEFE0B87FFF91506C70323F /* PBXContainerItemProxy */; + }; + DF4396E81D96CDBD5613B205C5B8EDBE /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "ZIPFoundation-ZIPFoundation_Privacy"; + target = C7A8D82E407CD3FDC3BA55CEE519B252 /* ZIPFoundation-ZIPFoundation_Privacy */; + targetProxy = 8C68FC6E1E8C08E748DEFB91D8C9C468 /* PBXContainerItemProxy */; + }; + E450D34CBA00FFF4FE9AAF797684BACD /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = DTFoundation; + target = 8F6E5A5BF72D62CDFD25F91A7CFA3309 /* DTFoundation */; + targetProxy = 52128B73E472B44C45E232AF6CE036D8 /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ /* Begin XCBuildConfiguration section */ - 02B34FA52040002D4460D86AA5DF0EC8 /* Debug */ = { + 00CBEBEEF4812BF939DDD68BFAA553C3 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 85E8DA9DE1F796F12171763D20CBAF27 /* DTFoundation.debug.xcconfig */; + baseConfigurationReference = 766227355308600EFC048F797274454A /* ZIPFoundation.release.xcconfig */; + buildSettings = { + CODE_SIGNING_ALLOWED = NO; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/ZIPFoundation"; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + IBSC_MODULE = ZIPFoundation; + INFOPLIST_FILE = "Target Support Files/ZIPFoundation/ResourceBundle-ZIPFoundation_Privacy-ZIPFoundation-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 15.6; + PRODUCT_NAME = ZIPFoundation_Privacy; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; + 0BA75AA6375A3A7711FFA9163EDDEBF1 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = D3FE3C2B203F85680560F45459F5B281 /* RDReaderView.debug.xcconfig */; buildSettings = { CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -2708,9 +2738,9 @@ DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_MODULE_VERIFIER = NO; ENABLE_USER_SCRIPT_SANDBOXING = NO; - GCC_PREFIX_HEADER = "Target Support Files/DTFoundation/DTFoundation-prefix.pch"; + GCC_PREFIX_HEADER = "Target Support Files/RDReaderView/RDReaderView-prefix.pch"; GENERATE_INFOPLIST_FILE = NO; - INFOPLIST_FILE = "Target Support Files/DTFoundation/DTFoundation-Info.plist"; + INFOPLIST_FILE = "Target Support Files/RDReaderView/RDReaderView-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 15.6; LD_RUNPATH_SEARCH_PATHS = ( @@ -2718,20 +2748,60 @@ "@executable_path/Frameworks", "@loader_path/Frameworks", ); - MODULEMAP_FILE = "Target Support Files/DTFoundation/DTFoundation.modulemap"; - PRODUCT_MODULE_NAME = DTFoundation; - PRODUCT_NAME = DTFoundation; + MODULEMAP_FILE = "Target Support Files/RDReaderView/RDReaderView.modulemap"; + PRODUCT_MODULE_NAME = RDReaderView; + PRODUCT_NAME = RDReaderView; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; SWIFT_INSTALL_OBJC_HEADER = YES; - SWIFT_VERSION = 5.0; + SWIFT_VERSION = 5.10; TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Debug; }; + 0F796F20D430BBFF77DBE545A9350006 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 2B73CF24646475E517B8FDF110972E77 /* RDReaderView.release.xcconfig */; + buildSettings = { + CLANG_ENABLE_OBJC_WEAK = NO; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_MODULE_VERIFIER = NO; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_PREFIX_HEADER = "Target Support Files/RDReaderView/RDReaderView-prefix.pch"; + GENERATE_INFOPLIST_FILE = NO; + INFOPLIST_FILE = "Target Support Files/RDReaderView/RDReaderView-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 15.6; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MODULEMAP_FILE = "Target Support Files/RDReaderView/RDReaderView.modulemap"; + PRODUCT_MODULE_NAME = RDReaderView; + PRODUCT_NAME = RDReaderView; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_INSTALL_OBJC_HEADER = YES; + SWIFT_VERSION = 5.10; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; 1DBA69CFBAB5965CF41704A7A4699A8A /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = 306477706BBB1E784F55BCF8EB1AD737 /* Pods-ReadViewDemo.debug.xcconfig */; @@ -2771,47 +2841,25 @@ }; name = Debug; }; - 29267446C8B2769BCE4FD31F3B85F9E2 /* Release */ = { + 27252DEAFE967C5685F227356ADD1558 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 55CA6158EBEFCD459EB481660A12EB86 /* RDReaderView.release.xcconfig */; + baseConfigurationReference = C0DCB00F0B62D7DBE628D2B5FF006E93 /* DTCoreText.debug.xcconfig */; buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_MODULE_VERIFIER = NO; + CODE_SIGNING_ALLOWED = NO; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/DTCoreText"; ENABLE_USER_SCRIPT_SANDBOXING = NO; - GCC_PREFIX_HEADER = "Target Support Files/RDReaderView/RDReaderView-prefix.pch"; - GENERATE_INFOPLIST_FILE = NO; - INFOPLIST_FILE = "Target Support Files/RDReaderView/RDReaderView-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IBSC_MODULE = DTCoreText; + INFOPLIST_FILE = "Target Support Files/DTCoreText/ResourceBundle-Resources-DTCoreText-Info.plist"; IPHONEOS_DEPLOYMENT_TARGET = 15.6; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MODULEMAP_FILE = "Target Support Files/RDReaderView/RDReaderView.modulemap"; - PRODUCT_MODULE_NAME = RDReaderView; - PRODUCT_NAME = RDReaderView; + PRODUCT_NAME = Resources; SDKROOT = iphoneos; SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_INSTALL_OBJC_HEADER = YES; - SWIFT_VERSION = 5.10; TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; + WRAPPER_EXTENSION = bundle; }; - name = Release; + name = Debug; }; - 2C71F2C660C40EA12978829B61992376 /* Release */ = { + 29D0F93BD997527F3220EEA5A0D30B9F /* Release */ = { isa = XCBuildConfiguration; baseConfigurationReference = 7A13F9221A300A89F9F8D0A2AB1794BF /* DTCoreText.release.xcconfig */; buildSettings = { @@ -2829,6 +2877,46 @@ }; name = Release; }; + 326E4B88C73F0E99968C5D4AA408C577 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7503926237A4785CCB864B2BCD1F4C2B /* DTFoundation.release.xcconfig */; + buildSettings = { + CLANG_ENABLE_OBJC_WEAK = NO; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_MODULE_VERIFIER = NO; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_PREFIX_HEADER = "Target Support Files/DTFoundation/DTFoundation-prefix.pch"; + GENERATE_INFOPLIST_FILE = NO; + INFOPLIST_FILE = "Target Support Files/DTFoundation/DTFoundation-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 15.6; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MODULEMAP_FILE = "Target Support Files/DTFoundation/DTFoundation.modulemap"; + PRODUCT_MODULE_NAME = DTFoundation; + PRODUCT_NAME = DTFoundation; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_INSTALL_OBJC_HEADER = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; 44A4B2FB6211B90C1949A44A381F6D1F /* Release */ = { isa = XCBuildConfiguration; buildSettings = { @@ -2892,9 +2980,66 @@ }; name = Release; }; - 6D053F2407C81C5592CBEF0836CA84BD /* Release */ = { + 468DF719CF5DDCF9B790B92B47A6A269 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 766227355308600EFC048F797274454A /* ZIPFoundation.release.xcconfig */; + baseConfigurationReference = D3FE3C2B203F85680560F45459F5B281 /* RDReaderView.debug.xcconfig */; + buildSettings = { + CODE_SIGNING_ALLOWED = NO; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/RDReaderView"; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + IBSC_MODULE = RDReaderView; + INFOPLIST_FILE = "Target Support Files/RDReaderView/ResourceBundle-RDReaderViewAssets-RDReaderView-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 15.6; + PRODUCT_NAME = RDReaderViewAssets; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + WRAPPER_EXTENSION = bundle; + }; + name = Debug; + }; + 8B4FD571F07412F16A40D6261D66C62A /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 85E8DA9DE1F796F12171763D20CBAF27 /* DTFoundation.debug.xcconfig */; + buildSettings = { + CLANG_ENABLE_OBJC_WEAK = NO; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_MODULE_VERIFIER = NO; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_PREFIX_HEADER = "Target Support Files/DTFoundation/DTFoundation-prefix.pch"; + GENERATE_INFOPLIST_FILE = NO; + INFOPLIST_FILE = "Target Support Files/DTFoundation/DTFoundation-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 15.6; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MODULEMAP_FILE = "Target Support Files/DTFoundation/DTFoundation.modulemap"; + PRODUCT_MODULE_NAME = DTFoundation; + PRODUCT_NAME = DTFoundation; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_INSTALL_OBJC_HEADER = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + 8D890CBE67F4467AD2BE0C6D10A6B131 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 79D13938A04579CD1E9E042A39CC4D86 /* ZIPFoundation.debug.xcconfig */; buildSettings = { CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -2926,10 +3071,27 @@ SWIFT_INSTALL_OBJC_HEADER = YES; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; + name = Debug; + }; + 9AC73D49C3F64C746BA6882B99BF1770 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 2B73CF24646475E517B8FDF110972E77 /* RDReaderView.release.xcconfig */; + buildSettings = { + CODE_SIGNING_ALLOWED = NO; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/RDReaderView"; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + IBSC_MODULE = RDReaderView; + INFOPLIST_FILE = "Target Support Files/RDReaderView/ResourceBundle-RDReaderViewAssets-RDReaderView-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 15.6; + PRODUCT_NAME = RDReaderViewAssets; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + WRAPPER_EXTENSION = bundle; + }; name = Release; }; A0DC1C2C814704734F83EAB35BB20B21 /* Debug */ = { @@ -3078,99 +3240,6 @@ }; name = Debug; }; - B515FF966B785B439AC3152287D2119A /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 9F8BA45FA0D8E3CBAAE6E18272EB0644 /* RDReaderView.debug.xcconfig */; - buildSettings = { - CODE_SIGNING_ALLOWED = NO; - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/RDReaderView"; - ENABLE_USER_SCRIPT_SANDBOXING = NO; - IBSC_MODULE = RDReaderView; - INFOPLIST_FILE = "Target Support Files/RDReaderView/ResourceBundle-RDReaderViewAssets-RDReaderView-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 15.6; - PRODUCT_NAME = RDReaderViewAssets; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - WRAPPER_EXTENSION = bundle; - }; - name = Debug; - }; - BA59167D644A3C4695666149AEAA5B74 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = C0DCB00F0B62D7DBE628D2B5FF006E93 /* DTCoreText.debug.xcconfig */; - buildSettings = { - CODE_SIGNING_ALLOWED = NO; - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/DTCoreText"; - ENABLE_USER_SCRIPT_SANDBOXING = NO; - IBSC_MODULE = DTCoreText; - INFOPLIST_FILE = "Target Support Files/DTCoreText/ResourceBundle-Resources-DTCoreText-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 15.6; - PRODUCT_NAME = Resources; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - WRAPPER_EXTENSION = bundle; - }; - name = Debug; - }; - C1F3FEC1FFE2528279D40A4E5DBC5574 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 766227355308600EFC048F797274454A /* ZIPFoundation.release.xcconfig */; - buildSettings = { - CODE_SIGNING_ALLOWED = NO; - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/ZIPFoundation"; - ENABLE_USER_SCRIPT_SANDBOXING = NO; - IBSC_MODULE = ZIPFoundation; - INFOPLIST_FILE = "Target Support Files/ZIPFoundation/ResourceBundle-ZIPFoundation_Privacy-ZIPFoundation-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 15.6; - PRODUCT_NAME = ZIPFoundation_Privacy; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - WRAPPER_EXTENSION = bundle; - }; - name = Release; - }; - C8081429AB52E4C6717E2332837D2512 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 9F8BA45FA0D8E3CBAAE6E18272EB0644 /* RDReaderView.debug.xcconfig */; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_MODULE_VERIFIER = NO; - ENABLE_USER_SCRIPT_SANDBOXING = NO; - GCC_PREFIX_HEADER = "Target Support Files/RDReaderView/RDReaderView-prefix.pch"; - GENERATE_INFOPLIST_FILE = NO; - INFOPLIST_FILE = "Target Support Files/RDReaderView/RDReaderView-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 15.6; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MODULEMAP_FILE = "Target Support Files/RDReaderView/RDReaderView.modulemap"; - PRODUCT_MODULE_NAME = RDReaderView; - PRODUCT_NAME = RDReaderView; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_INSTALL_OBJC_HEADER = YES; - SWIFT_VERSION = 5.10; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; C9A3C41671C64664CEDC2482C0D7591C /* Release */ = { isa = XCBuildConfiguration; baseConfigurationReference = 1AD502A1FA6EB1E38200B5283F979504 /* Pods-ReadViewDemo.release.xcconfig */; @@ -3211,45 +3280,9 @@ }; name = Release; }; - C9DE0560DFBF408865D51DB28D6EA1F8 /* Debug */ = { + D78759B2779583701BA71321BA60BFA1 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 79D13938A04579CD1E9E042A39CC4D86 /* ZIPFoundation.debug.xcconfig */; - buildSettings = { - CODE_SIGNING_ALLOWED = NO; - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/ZIPFoundation"; - ENABLE_USER_SCRIPT_SANDBOXING = NO; - IBSC_MODULE = ZIPFoundation; - INFOPLIST_FILE = "Target Support Files/ZIPFoundation/ResourceBundle-ZIPFoundation_Privacy-ZIPFoundation-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 15.6; - PRODUCT_NAME = ZIPFoundation_Privacy; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - WRAPPER_EXTENSION = bundle; - }; - name = Debug; - }; - E7D1F89A6B9AACB2A9D0746C55CBBEFD /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 55CA6158EBEFCD459EB481660A12EB86 /* RDReaderView.release.xcconfig */; - buildSettings = { - CODE_SIGNING_ALLOWED = NO; - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/RDReaderView"; - ENABLE_USER_SCRIPT_SANDBOXING = NO; - IBSC_MODULE = RDReaderView; - INFOPLIST_FILE = "Target Support Files/RDReaderView/ResourceBundle-RDReaderViewAssets-RDReaderView-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 15.6; - PRODUCT_NAME = RDReaderViewAssets; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - WRAPPER_EXTENSION = bundle; - }; - name = Release; - }; - F7EBEE3D64F72FA0AF5C0EEC99CAACFA /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 79D13938A04579CD1E9E042A39CC4D86 /* ZIPFoundation.debug.xcconfig */; + baseConfigurationReference = 766227355308600EFC048F797274454A /* ZIPFoundation.release.xcconfig */; buildSettings = { CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -3281,51 +3314,30 @@ SWIFT_INSTALL_OBJC_HEADER = YES; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - FC464F0C10CBA7214FA572E1F2B7B712 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 7503926237A4785CCB864B2BCD1F4C2B /* DTFoundation.release.xcconfig */; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_MODULE_VERIFIER = NO; - ENABLE_USER_SCRIPT_SANDBOXING = NO; - GCC_PREFIX_HEADER = "Target Support Files/DTFoundation/DTFoundation-prefix.pch"; - GENERATE_INFOPLIST_FILE = NO; - INFOPLIST_FILE = "Target Support Files/DTFoundation/DTFoundation-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 15.6; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MODULEMAP_FILE = "Target Support Files/DTFoundation/DTFoundation.modulemap"; - PRODUCT_MODULE_NAME = DTFoundation; - PRODUCT_NAME = DTFoundation; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_INSTALL_OBJC_HEADER = YES; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Release; }; + ED88A183DDFD966990358C797AE49835 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 79D13938A04579CD1E9E042A39CC4D86 /* ZIPFoundation.debug.xcconfig */; + buildSettings = { + CODE_SIGNING_ALLOWED = NO; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/ZIPFoundation"; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + IBSC_MODULE = ZIPFoundation; + INFOPLIST_FILE = "Target Support Files/ZIPFoundation/ResourceBundle-ZIPFoundation_Privacy-ZIPFoundation-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 15.6; + PRODUCT_NAME = ZIPFoundation_Privacy; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + WRAPPER_EXTENSION = bundle; + }; + name = Debug; + }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ @@ -3338,6 +3350,24 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; + 2EB4E348D6C06E5B54C3793ADD214E92 /* Build configuration list for PBXNativeTarget "ZIPFoundation-ZIPFoundation_Privacy" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + ED88A183DDFD966990358C797AE49835 /* Debug */, + 00CBEBEEF4812BF939DDD68BFAA553C3 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 350964E28EE2995CFB345B0F2D849AAD /* Build configuration list for PBXNativeTarget "ZIPFoundation" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 8D890CBE67F4467AD2BE0C6D10A6B131 /* Debug */, + D78759B2779583701BA71321BA60BFA1 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */ = { isa = XCConfigurationList; buildConfigurations = ( @@ -3347,29 +3377,11 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 797A74DE557B2312CDE4DDE7BA924EF3 /* Build configuration list for PBXNativeTarget "DTFoundation" */ = { + 6AB8AE550E34BCAFC466012ECCE97CBF /* Build configuration list for PBXNativeTarget "RDReaderView" */ = { isa = XCConfigurationList; buildConfigurations = ( - 02B34FA52040002D4460D86AA5DF0EC8 /* Debug */, - FC464F0C10CBA7214FA572E1F2B7B712 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 867CF60047164719C3D4ED41F2FD855D /* Build configuration list for PBXNativeTarget "RDReaderView-RDReaderViewAssets" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - B515FF966B785B439AC3152287D2119A /* Debug */, - E7D1F89A6B9AACB2A9D0746C55CBBEFD /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 93A78DDD7C59F62735C4CF878C3F3EF3 /* Build configuration list for PBXNativeTarget "DTCoreText-Resources" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - BA59167D644A3C4695666149AEAA5B74 /* Debug */, - 2C71F2C660C40EA12978829B61992376 /* Release */, + 0BA75AA6375A3A7711FFA9163EDDEBF1 /* Debug */, + 0F796F20D430BBFF77DBE545A9350006 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; @@ -3383,29 +3395,29 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 9BC8D77A9E3B7D44D11B858D8DD3F3BC /* Build configuration list for PBXNativeTarget "ZIPFoundation" */ = { + BABDDD715D4526AF32440E6D7F4E0939 /* Build configuration list for PBXNativeTarget "RDReaderView-RDReaderViewAssets" */ = { isa = XCConfigurationList; buildConfigurations = ( - F7EBEE3D64F72FA0AF5C0EEC99CAACFA /* Debug */, - 6D053F2407C81C5592CBEF0836CA84BD /* Release */, + 468DF719CF5DDCF9B790B92B47A6A269 /* Debug */, + 9AC73D49C3F64C746BA6882B99BF1770 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - C25C391A750C0AE0170E901D1C4CBBEC /* Build configuration list for PBXNativeTarget "RDReaderView" */ = { + C296629277AC266234A0245A9519C90A /* Build configuration list for PBXNativeTarget "DTFoundation" */ = { isa = XCConfigurationList; buildConfigurations = ( - C8081429AB52E4C6717E2332837D2512 /* Debug */, - 29267446C8B2769BCE4FD31F3B85F9E2 /* Release */, + 8B4FD571F07412F16A40D6261D66C62A /* Debug */, + 326E4B88C73F0E99968C5D4AA408C577 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - FB481FBBB624EE3598165EC63CFEC06E /* Build configuration list for PBXNativeTarget "ZIPFoundation-ZIPFoundation_Privacy" */ = { + FD102F73C9F0A5254C57BBBB0F991964 /* Build configuration list for PBXNativeTarget "DTCoreText-Resources" */ = { isa = XCConfigurationList; buildConfigurations = ( - C9DE0560DFBF408865D51DB28D6EA1F8 /* Debug */, - C1F3FEC1FFE2528279D40A4E5DBC5574 /* Release */, + 27252DEAFE967C5685F227356ADD1558 /* Debug */, + 29D0F93BD997527F3220EEA5A0D30B9F /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; diff --git a/Sources/RDReaderView/EPUBTextRendering/Pagination/RDEPUBPageBreakPolicy.swift b/Sources/RDReaderView/EPUBTextRendering/Pagination/RDEPUBPageBreakPolicy.swift index 4e268be..bb3cf38 100644 --- a/Sources/RDReaderView/EPUBTextRendering/Pagination/RDEPUBPageBreakPolicy.swift +++ b/Sources/RDReaderView/EPUBTextRendering/Pagination/RDEPUBPageBreakPolicy.swift @@ -188,7 +188,12 @@ struct RDEPUBPageBreakPolicy { let blockKind = (attributes[.rdPageBlockKind] as? String) .flatMap(RDEPUBTextBlockKind.init(rawValue:)) - if blockKind == .attachment, placement != .centered { + // Inline attachments (footnote icons, rare-character images) flow with + // the surrounding text, so their avoid hint must not lock the line to + // the next page. Placement is checked besides blockKind because an + // enclosing paragraph's semantics overwrite blockKind on the + // attachment's range, while placement survives. + if blockKind == .attachment || placement != nil, placement != .centered { return false } diff --git a/Sources/RDReaderView/EPUBUI/RDEPUBReaderController.swift b/Sources/RDReaderView/EPUBUI/RDEPUBReaderController.swift index d6d2e96..6452688 100644 --- a/Sources/RDReaderView/EPUBUI/RDEPUBReaderController.swift +++ b/Sources/RDReaderView/EPUBUI/RDEPUBReaderController.swift @@ -281,6 +281,7 @@ public final class RDEPUBReaderController: UIViewController { public override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) startInitialLoadIfNeeded() + RDEPUBSettingsFlipAutomation.startIfNeeded(controller: self) } public override func viewDidLayoutSubviews() { diff --git a/Sources/RDReaderView/EPUBUI/RDEPUBSettingsFlipAutomation.swift b/Sources/RDReaderView/EPUBUI/RDEPUBSettingsFlipAutomation.swift new file mode 100644 index 0000000..8d72dff --- /dev/null +++ b/Sources/RDReaderView/EPUBUI/RDEPUBSettingsFlipAutomation.swift @@ -0,0 +1,84 @@ +import UIKit + +/// Debug-only automation (`--demo-settings-flip`) that replays the user +/// gesture sequence suspected of producing stale page tables: open the +/// settings panel, change the line height, close the panel, flip pages — +/// with several timing variants aimed at the preview-repagination and +/// in-flight chapter build races. Combine with +/// `--demo-pagination-validate` to detect any resulting metric mismatch. +enum RDEPUBSettingsFlipAutomation { + + static let isEnabled = ProcessInfo.processInfo.arguments.contains("--demo-settings-flip") + + private(set) static var hasStarted = false + + static func startIfNeeded(controller: RDEPUBReaderController) { + guard isEnabled, !hasStarted else { return } + hasStarted = true + print("[SETTINGS-FLIP] scheduled") + + // Pass 1 starts while progressive pagination of the freshly opened + // book is still running, so prefetch builds are in flight. + run(after: 2.0) { [weak controller] in + guard let controller else { return } + pass(controller: controller, index: 1, lineHeight: 1.8, changeToCloseDelay: 1.2) { + pass(controller: controller, index: 2, lineHeight: 1.6, changeToCloseDelay: 0.05) { + pass(controller: controller, index: 3, lineHeight: 1.8, changeToCloseDelay: 0.3) { + print("[SETTINGS-FLIP] finished all passes") + } + } + } + } + } + + /// One panel round-trip: present → change line height → close after + /// `changeToCloseDelay` → flip pages forward and back. + private static func pass( + controller: RDEPUBReaderController, + index: Int, + lineHeight: CGFloat, + changeToCloseDelay: TimeInterval, + completion: @escaping () -> Void + ) { + print("[SETTINGS-FLIP] pass \(index) present panel") + controller.presentSettings() + + run(after: 0.7) { [weak controller] in + guard let controller else { return } + print("[SETTINGS-FLIP] pass \(index) set lineHeightMultiple=\(lineHeight)") + controller.updateConfiguration { $0.lineHeightMultiple = lineHeight } + + run(after: changeToCloseDelay) { [weak controller] in + guard let controller else { return } + print("[SETTINGS-FLIP] pass \(index) close panel") + controller.dismiss(animated: true) { [weak controller] in + controller?.runtime.settingsPanelDidDisappear() + run(after: 1.0) { [weak controller] in + guard let controller else { return } + flipPages(controller: controller, index: index, completion: completion) + } + } + } + } + } + + private static func flipPages( + controller: RDEPUBReaderController, + index: Int, + completion: @escaping () -> Void + ) { + let startPage = controller.readerView.currentPage + 1 + let offsets = [1, 2, 3, 2, 1, 0] + print("[SETTINGS-FLIP] pass \(index) flip pages from \(startPage)") + for (step, offset) in offsets.enumerated() { + run(after: 0.6 * Double(step + 1)) { [weak controller] in + _ = controller?.go(toPageNumber: startPage + offset, animated: false) + } + } + run(after: 0.6 * Double(offsets.count + 1) + 0.5, block: completion) + } + + private static func run(after delay: TimeInterval, block: @escaping () -> Void) { + DispatchQueue.main.asyncAfter(deadline: .now() + delay, execute: block) + } +} diff --git a/Sources/RDReaderView/EPUBUI/TextPage/RDEPUBDarkImageAdjuster.swift b/Sources/RDReaderView/EPUBUI/TextPage/RDEPUBDarkImageAdjuster.swift index 9f6935c..acc3534 100644 --- a/Sources/RDReaderView/EPUBUI/TextPage/RDEPUBDarkImageAdjuster.swift +++ b/Sources/RDReaderView/EPUBUI/TextPage/RDEPUBDarkImageAdjuster.swift @@ -25,6 +25,7 @@ enum RDEPUBDarkImageAdjuster { static func adjustIfNeeded( _ content: NSMutableAttributedString, + in range: NSRange? = nil, configuration: RDEPUBReaderConfiguration ) -> NSMutableAttributedString { guard configuration.darkImageAdjustmentEnabled, @@ -34,7 +35,8 @@ enum RDEPUBDarkImageAdjuster { } let fullRange = NSRange(location: 0, length: content.length) - content.enumerateAttribute(.attachment, in: fullRange) { value, range, _ in + let targetRange = range.map { NSIntersectionRange($0, fullRange) } ?? fullRange + content.enumerateAttribute(.attachment, in: targetRange) { value, range, _ in guard let attachment = value as? DTImageTextAttachment, !isCoverAttachment(attachment), let image = attachment.image, diff --git a/Sources/RDReaderView/EPUBUI/TextPage/RDEPUBPageInteractionController.swift b/Sources/RDReaderView/EPUBUI/TextPage/RDEPUBPageInteractionController.swift index 37d4285..e0e3689 100644 --- a/Sources/RDReaderView/EPUBUI/TextPage/RDEPUBPageInteractionController.swift +++ b/Sources/RDReaderView/EPUBUI/TextPage/RDEPUBPageInteractionController.swift @@ -44,10 +44,12 @@ final class RDEPUBPageInteractionController { x: point.x - line.baselineOrigin.x, y: point.y - line.baselineOrigin.y ) + // The layout frame is built in chapter context, so DTCoreText string + // indices are chapter-absolute already. let idx = dtLine.stringIndex(forPosition: relativePoint) guard idx != NSNotFound, idx >= 0 else { return nil } return normalizedIndex( - idx + pageOffset(for: snapshot), + idx, lineRange: line.stringRange, pageRange: snapshot.pageContentRange ) @@ -74,10 +76,9 @@ final class RDEPUBPageInteractionController { #if canImport(DTCoreText) guard let dtLine = dtLineContaining(range: line.stringRange) else { continue } - let pageOffset = pageOffset(for: snapshot) - let startX = dtLine.offset(forStringIndex: overlap.location - pageOffset) + let startX = dtLine.offset(forStringIndex: overlap.location) let endIdx = overlap.location + overlap.length - let endX = dtLine.offset(forStringIndex: endIdx - pageOffset) + let endX = dtLine.offset(forStringIndex: endIdx) #else let startX: CGFloat = 0 let endX: CGFloat = line.frame.width @@ -133,7 +134,7 @@ final class RDEPUBPageInteractionController { #if canImport(DTCoreText) guard let dtLine = dtLineContaining(range: line.stringRange) else { return nil } - let offsetX = dtLine.offset(forStringIndex: index - pageOffset(for: snapshot)) + let offsetX = dtLine.offset(forStringIndex: index) #else let offsetX: CGFloat = 0 #endif @@ -183,16 +184,11 @@ final class RDEPUBPageInteractionController { #if canImport(DTCoreText) private func dtLineContaining(range: NSRange) -> DTCoreTextLayoutLine? { - guard let dtLayoutFrame, let snapshot else { return nil } - let localLocation = max(range.location - pageOffset(for: snapshot), 0) - return dtLayoutFrame.lineContaining(UInt(localLocation)) + guard let dtLayoutFrame else { return nil } + return dtLayoutFrame.lineContaining(UInt(max(range.location, 0))) } #endif - private func pageOffset(for snapshot: RDEPUBPageLayoutSnapshot) -> Int { - snapshot.page.pageStartOffset - } - private func mergeAdjacentRects(_ rects: [CGRect]) -> [CGRect] { guard rects.count > 1 else { return rects } diff --git a/Sources/RDReaderView/EPUBUI/TextPage/RDEPUBPageLayoutSnapshot.swift b/Sources/RDReaderView/EPUBUI/TextPage/RDEPUBPageLayoutSnapshot.swift index a0f393b..54be1e0 100644 --- a/Sources/RDReaderView/EPUBUI/TextPage/RDEPUBPageLayoutSnapshot.swift +++ b/Sources/RDReaderView/EPUBUI/TextPage/RDEPUBPageLayoutSnapshot.swift @@ -130,13 +130,14 @@ struct RDEPUBPageLayoutSnapshot { return nil } + // The layout frame is produced in chapter context, so DTCoreText + // string ranges are already chapter-absolute. var lines: [RDEPUBPageLine] = [] var runs: [RDEPUBPageRun] = [] var attachments: [RDEPUBPageAttachment] = [] - let pageOffset = page.pageStartOffset for dtLine in dtLines { - let lineRange = offset(dtLine.stringRange(), by: pageOffset) + let lineRange = dtLine.stringRange() let line = RDEPUBPageLine( stringRange: lineRange, frame: dtLine.frame, @@ -149,7 +150,7 @@ struct RDEPUBPageLayoutSnapshot { if let glyphRuns = dtLine.glyphRuns as? [DTCoreTextGlyphRun] { for run in glyphRuns { - let runRange = offset(run.stringRange(), by: pageOffset) + let runRange = run.stringRange() let isAttachment = run.attachment != nil runs.append( RDEPUBPageRun( @@ -177,7 +178,7 @@ struct RDEPUBPageLayoutSnapshot { } } - let visibleRange = offset(layoutFrame.visibleStringRange(), by: pageOffset) + let visibleRange = layoutFrame.visibleStringRange() return RDEPUBPageLayoutSnapshot( page: page, @@ -219,11 +220,5 @@ struct RDEPUBPageLayoutSnapshot { return RDEPUBAttachmentNormalizer.attachmentKind(for: attributes) } - private static func offset(_ range: NSRange, by offset: Int) -> NSRange { - guard range.location != NSNotFound else { - return range - } - return NSRange(location: range.location + offset, length: range.length) - } #endif } diff --git a/Sources/RDReaderView/EPUBUI/TextPage/RDEPUBTextContentView.swift b/Sources/RDReaderView/EPUBUI/TextPage/RDEPUBTextContentView.swift index fbd0e4c..c9213ee 100644 --- a/Sources/RDReaderView/EPUBUI/TextPage/RDEPUBTextContentView.swift +++ b/Sources/RDReaderView/EPUBUI/TextPage/RDEPUBTextContentView.swift @@ -90,6 +90,10 @@ final class RDEPUBTextContentView: UIView, UIGestureRecognizerDelegate, RDReader private var coreTextDisplayContent: NSAttributedString? private var coreTextDisplayRange: NSRange? + + /// Framesetter over the full chapter copy, rebuilt when the display + /// content changes; layout frames are recomputed per bounds change. + private var coreTextLayouter: DTCoreTextLayouter? #endif private let interactionController = RDEPUBPageInteractionController() @@ -313,7 +317,18 @@ final class RDEPUBTextContentView: UIView, UIGestureRecognizerDelegate, RDReader } var shouldAvoidReaderPageCaching: Bool { - currentPage == nil || loadingSpinner.isAnimating +#if canImport(DTCoreText) + // In-context text layout keeps a chapter-length attributed copy and + // layouter alive for the visible page. Avoid reader-level page + // caching so preloading does not retain several full-chapter + // display copies at once. + return currentPage == nil + || loadingSpinner.isAnimating + || coreTextDisplayContent != nil +#else + currentPage == nil + || loadingSpinner.isAnimating +#endif } private var hasInteractiveTextContent: Bool { @@ -405,6 +420,7 @@ final class RDEPUBTextContentView: UIView, UIGestureRecognizerDelegate, RDReader coreTextContentView.layoutFrame = nil coreTextDisplayContent = nil coreTextDisplayRange = nil + coreTextLayouter = nil #endif updateStaticGestureAvailability() updateSelectionPanAvailability() @@ -418,15 +434,26 @@ final class RDEPUBTextContentView: UIView, UIGestureRecognizerDelegate, RDReader coverImageView.image = nil #if canImport(DTCoreText) - let displayContent = RDEPUBDarkImageAdjuster.adjustIfNeeded( - normalizedPageContent(from: page), + // In-context display: keep the full chapter string and lay out only the + // page's range. CTTypesetter line breaks are context-sensitive, so + // re-wrapping a page substring can break ±1 character away from the + // paginator's line ends (lone characters spilling onto the last line); + // laying out the same chapter string the paginator used cannot. + // String indices in the layout frame are therefore chapter-absolute. + let displayContent = NSMutableAttributedString(attributedString: page.chapterContent) + let pageRange = NSIntersectionRange( + page.contentRange, + NSRange(location: 0, length: displayContent.length) + ) + _ = RDEPUBDarkImageAdjuster.adjustIfNeeded( + displayContent, + in: pageRange, configuration: configuration ) - let fullRange = NSRange(location: 0, length: displayContent.length) displayContent.addAttribute( .foregroundColor, value: configuration.theme.contentTextColor, - range: fullRange + range: pageRange ) applyHighlightsToContent(displayContent, highlights: highlights, page: page) @@ -434,7 +461,9 @@ final class RDEPUBTextContentView: UIView, UIGestureRecognizerDelegate, RDReader coreTextContentView.backgroundColor = .clear coreTextContentView.accessibilityIdentifier = "epub.reader.selection.text" coreTextDisplayContent = displayContent - coreTextDisplayRange = NSRange(location: 0, length: displayContent.length) + coreTextDisplayRange = pageRange + coreTextLayouter = DTCoreTextLayouter(attributedString: displayContent) + coreTextLayouter?.shouldCacheLayoutFrames = false coreTextContentView.attributedDisplayContent = displayContent updateCoreTextLayoutFrameIfNeeded() #else @@ -493,6 +522,7 @@ final class RDEPUBTextContentView: UIView, UIGestureRecognizerDelegate, RDReader coreTextContentView.layoutFrame = nil coreTextDisplayContent = nil coreTextDisplayRange = nil + coreTextLayouter = nil #endif overlayView.clearSelection() @@ -540,6 +570,7 @@ final class RDEPUBTextContentView: UIView, UIGestureRecognizerDelegate, RDReader coreTextContentView.layoutFrame = nil coreTextDisplayContent = nil coreTextDisplayRange = nil + coreTextLayouter = nil #endif return true } @@ -581,26 +612,27 @@ final class RDEPUBTextContentView: UIView, UIGestureRecognizerDelegate, RDReader return image(from: attachmentValue) } + /// Marks highlight ranges on the chapter-length display copy. Ranges stay + /// chapter-absolute — the in-context layout frame uses the same indices. private func applyHighlightsToContent( _ content: NSMutableAttributedString, highlights: [RDEPUBHighlight], page: RDEPUBTextPage ) { for highlight in highlights { + guard highlight.location.href == page.href else { continue } guard let rangeInfo = highlight.rangeInfo, let info = RDEPUBTextOffsetRangeInfo.decode(from: rangeInfo), let absoluteRange = info.nsRange else { continue } let overlap = NSIntersectionRange(absoluteRange, page.contentRange) - guard overlap.length > 0 else { continue } - let relativeRange = NSRange(location: overlap.location - page.pageStartOffset, length: overlap.length) - guard relativeRange.location >= 0, - relativeRange.location + relativeRange.length <= content.length else { continue } + guard overlap.length > 0, + overlap.location + overlap.length <= content.length else { continue } switch highlight.style { case .highlight: - content.addAttribute(kRDEPUBHighlightAttributeName, value: highlight.uiColor, range: relativeRange) + content.addAttribute(kRDEPUBHighlightAttributeName, value: highlight.uiColor, range: overlap) case .underline: - content.addAttribute(kRDEPUBUnderlineAttributeName, value: highlight.uiColor, range: relativeRange) + content.addAttribute(kRDEPUBUnderlineAttributeName, value: highlight.uiColor, range: overlap) } } } @@ -698,13 +730,26 @@ final class RDEPUBTextContentView: UIView, UIGestureRecognizerDelegate, RDReader return } - guard let layouter = DTCoreTextLayouter(attributedString: displayContent) else { + guard let layouter = coreTextLayouter else { coreTextContentView.layoutFrame = nil interactionController.configure(layoutFrame: nil, page: page) return } - layouter.shouldCacheLayoutFrames = false let layoutFrame = layouter.layoutFrame(with: coreTextContentView.bounds, range: displayRange) + if let layoutFrame { + RDEPUBTextPageBoundaryValidator.validate( + page: page, + displayLayoutFrame: layoutFrame, + displayContent: displayContent, + displayBounds: coreTextContentView.bounds + ) + RDEPUBTextPageVerticalJustifier.justify( + layoutFrame, + contentHeight: coreTextContentView.bounds.height, + isChapterLastPage: page.pageIndexInChapter >= page.totalPagesInChapter - 1, + pixelScale: window?.screen.scale ?? UIScreen.main.scale + ) + } coreTextContentView.layoutFrame = layoutFrame interactionController.configure(layoutFrame: layoutFrame, page: page) overlayView.updateSnapshot(interactionController.snapshot) @@ -713,6 +758,9 @@ final class RDEPUBTextContentView: UIView, UIGestureRecognizerDelegate, RDReader if let page = currentPage { let (bgDecorations, fgDecorations) = overlayView.buildDecorations( page: page, + // Text-page highlights/underlines are already painted by the + // CoreText render view via display-content attributes. Keep + // overlay decorations for search only to avoid double drawing. highlights: [], searchState: currentSearchState, interactionController: interactionController @@ -845,10 +893,15 @@ final class RDEPUBTextContentView: UIView, UIGestureRecognizerDelegate, RDReader !targetRect.isEmpty else { return } + let resolvedTargetRect = resolvedSelectionMenuTargetRect(from: targetRect) if #available(iOS 16.0, *), let interaction = _editMenuInteraction as? UIEditMenuInteraction { - let anchor = CGPoint(x: targetRect.midX, y: targetRect.midY) + becomeFirstResponder() + let anchor = CGPoint(x: resolvedTargetRect.midX, y: resolvedTargetRect.midY) let config = UIEditMenuConfiguration(identifier: "SelectionMenu", sourcePoint: anchor) - interaction.presentEditMenu(with: config) + DispatchQueue.main.async { [weak self, weak interaction] in + guard let self, self.currentSelection != nil else { return } + interaction?.presentEditMenu(with: config) + } } else { becomeFirstResponder() let menuController = UIMenuController.shared @@ -857,7 +910,7 @@ final class RDEPUBTextContentView: UIView, UIGestureRecognizerDelegate, RDReader UIMenuItem(title: "高亮", action: #selector(rd_highlight(_:))), UIMenuItem(title: "批注", action: #selector(rd_annotate(_:))) ] - menuController.setTargetRect(targetRect, in: coreTextRenderView ?? self) + menuController.setTargetRect(resolvedTargetRect, in: self) menuController.setMenuVisible(true, animated: true) } } @@ -891,6 +944,11 @@ final class RDEPUBTextContentView: UIView, UIGestureRecognizerDelegate, RDReader #endif } + private func resolvedSelectionMenuTargetRect(from rect: CGRect) -> CGRect { + guard let renderView = coreTextRenderView else { return rect } + return convert(rect, from: renderView) + } + private func updateAccessibilityDecorationSummary() { #if canImport(DTCoreText) coreTextContentView.accessibilityValue = [ @@ -901,14 +959,17 @@ final class RDEPUBTextContentView: UIView, UIGestureRecognizerDelegate, RDReader } private func highlight(at point: CGPoint) -> RDEPUBHighlight? { - guard currentPage != nil else { return nil } - let absoluteRange = backgroundOverlayView.absoluteRange(at: point) ?? overlayView.absoluteRange(at: point) - guard let absoluteRange else { return nil } + guard let page = currentPage else { return nil } let matches = currentHighlights.filter { highlight in - guard let range = RDEPUBTextOffsetRangeInfo.decode(from: highlight.rangeInfo)?.nsRange else { + guard highlight.location.href == page.href, + let range = RDEPUBTextOffsetRangeInfo.decode(from: highlight.rangeInfo)?.nsRange else { return false } - return NSIntersectionRange(range, absoluteRange).length > 0 + let overlap = NSIntersectionRange(range, page.contentRange) + guard overlap.length > 0 else { return false } + return interactionController.selectionRects(for: overlap).contains { + $0.insetBy(dx: -4, dy: -4).contains(point) + } } return matches.sorted { lhs, rhs in let lhsRange = RDEPUBTextOffsetRangeInfo.decode(from: lhs.rangeInfo)?.nsRange?.length ?? .max @@ -1090,8 +1151,9 @@ final class RDEPUBTextContentView: UIView, UIGestureRecognizerDelegate, RDReader extension RDEPUBTextContentView: UIEditMenuInteractionDelegate { func editMenuInteraction( _ interaction: UIEditMenuInteraction, - menuFor configuration: UIEditMenuConfiguration - ) -> UIMenu { + menuFor configuration: UIEditMenuConfiguration, + suggestedActions: [UIMenuElement] + ) -> UIMenu? { UIMenu(children: [ UICommand(title: "拷贝", action: #selector(rd_copy(_:))), UICommand(title: "高亮", action: #selector(rd_highlight(_:))), @@ -1105,7 +1167,7 @@ extension RDEPUBTextContentView: UIEditMenuInteractionDelegate { ) -> CGRect { if let targetRect = selectionController.menuAnchorRect(interactionController: interactionController), !targetRect.isEmpty { - return targetRect + return resolvedSelectionMenuTargetRect(from: targetRect) } return bounds } diff --git a/Sources/RDReaderView/EPUBUI/TextPage/RDEPUBTextPageBoundaryValidator.swift b/Sources/RDReaderView/EPUBUI/TextPage/RDEPUBTextPageBoundaryValidator.swift new file mode 100644 index 0000000..323f771 --- /dev/null +++ b/Sources/RDReaderView/EPUBUI/TextPage/RDEPUBTextPageBoundaryValidator.swift @@ -0,0 +1,223 @@ +import UIKit + +#if canImport(DTCoreText) +import DTCoreText + +/// Debug-only detector for pagination/display metric mismatches, enabled by +/// the `--demo-pagination-validate` launch argument. +/// +/// For every displayed text page it re-wraps the chapter text from the page +/// start at the display width (same CoreText engine the paginator used, in +/// chapter context) and compares the resulting line breaks against both the +/// page range and the lines actually drawn. Two failure classes: +/// +/// - `STALE-RANGE`: the page range does not end on a line boundary of the +/// current metrics — the range was produced under different metrics than +/// the ones on screen (stale page table). +/// - `DISPLAY-DIVERGE`: the range is fine, but the drawn lines break at +/// different offsets than the in-context wrap — the display-side content +/// transform (e.g. continuation-paragraph normalization) changed wrapping. +enum RDEPUBTextPageBoundaryValidator { + + static let isEnabled = ProcessInfo.processInfo.arguments.contains("--demo-pagination-validate") + + /// Extra characters wrapped past the page end so the probe can see the + /// line that a mid-line page boundary cuts through. + private static let probeTailLength = 400 + + static func validate( + page: RDEPUBTextPage, + displayLayoutFrame: DTCoreTextLayoutFrame, + displayContent: NSAttributedString?, + displayBounds: CGRect + ) { + guard isEnabled else { return } + let chapter = page.chapterContent + let pageStart = page.contentRange.location + let pageEnd = page.contentRange.location + page.contentRange.length + guard page.contentRange.length > 0, + pageStart >= 0, + pageEnd <= chapter.length, + displayBounds.width > 0 else { return } + + guard let layouter = DTCoreTextLayouter(attributedString: chapter) else { return } + layouter.shouldCacheLayoutFrames = false + let probeLength = min(chapter.length - pageStart, page.contentRange.length + probeTailLength) + let probeRect = CGRect(x: 0, y: 0, width: displayBounds.width, height: 4_000_000) + guard let probeFrame = layouter.layoutFrame( + with: probeRect, + range: NSRange(location: pageStart, length: probeLength) + ), let probeLines = probeFrame.lines as? [DTCoreTextLayoutLine] else { return } + + let probeRanges = probeLines.map { $0.stringRange() } + + // Class A: the page must end on a line boundary of the current wrap + // (unless it is the chapter's last page, which ends at chapter end). + let isChapterLastPage = pageEnd >= chapter.length + if !isChapterLastPage, + !probeRanges.contains(where: { NSMaxRange($0) == pageEnd }), + let cutLine = probeRanges.first(where: { NSLocationInRange(pageEnd - 1, $0) }) { + let text = chapter.string as NSString + let lineText = safeSubstring(text, cutLine) + print("[PAGINATION-VALIDATE] STALE-RANGE spine=\(page.spineIndex) page=\(page.pageIndexInChapter + 1)/\(page.totalPagesInChapter) pageEnd=\(pageEnd) cutLine=\(NSStringFromRange(cutLine)) width=\(displayBounds.width) line=\"\(lineText)\"") + } + + // Class B: the drawn lines must break at the same offsets as the + // in-context wrap. The display layout frame is built in chapter + // context, so its string ranges are chapter-absolute. + guard let displayLines = displayLayoutFrame.lines as? [DTCoreTextLayoutLine] else { return } + for (index, displayLine) in displayLines.enumerated() { + let displayRange = displayLine.stringRange() + let displayEndInChapter = NSMaxRange(displayRange) + guard displayEndInChapter < pageEnd else { break } + guard index < probeRanges.count else { break } + let probeEnd = NSMaxRange(probeRanges[index]) + if probeEnd != displayEndInChapter { + let text = chapter.string as NSString + let lineStartInChapter = displayRange.location + let displayLineRangeInChapter = displayRange + let isParagraphStart = lineStartInChapter == 0 + || text.character(at: lineStartInChapter - 1) == 0x0A + let chapterStyle = chapter.attribute( + .paragraphStyle, at: lineStartInChapter, effectiveRange: nil + ) as? NSParagraphStyle + let displayStyle = displayContent?.attribute( + .paragraphStyle, at: displayRange.location, effectiveRange: nil + ) as? NSParagraphStyle + let displayLineWidth = displayLine.frame.width + let probeLineWidth = index < probeLines.count ? probeLines[index].frame.width : -1 + print("[PAGINATION-VALIDATE] DISPLAY-DIVERGE spine=\(page.spineIndex) page=\(page.pageIndexInChapter + 1)/\(page.totalPagesInChapter) lineIndex=\(index) displayLineEnd=\(displayEndInChapter) probeLineEnd=\(probeEnd) width=\(displayBounds.width) paraStart=\(isParagraphStart) chapterIndents=(\(chapterStyle?.firstLineHeadIndent ?? -1),\(chapterStyle?.headIndent ?? -1),tail:\(chapterStyle?.tailIndent ?? -1)) displayIndents=(\(displayStyle?.firstLineHeadIndent ?? -1),\(displayStyle?.headIndent ?? -1),tail:\(displayStyle?.tailIndent ?? -1)) displayLineWidth=\(displayLineWidth) probeLineWidth=\(probeLineWidth) displayLine=\"\(safeSubstring(text, displayLineRangeInChapter))\" displayBreak=\"…\(safeSubstring(text, NSRange(location: max(displayEndInChapter - 2, 0), length: min(4, text.length - max(displayEndInChapter - 2, 0)))))\" probeBreak=\"…\(safeSubstring(text, NSRange(location: max(probeEnd - 2, 0), length: min(4, text.length - max(probeEnd - 2, 0)))))\"") + diagnoseDivergence( + page: page, + displayContent: displayContent, + lineIndex: index, + lineStartInChapter: lineStartInChapter, + displayEndInChapter: displayEndInChapter, + probeEnd: probeEnd, + width: displayBounds.width + ) + break + } + } + } + + /// Narrows a display/probe line-break divergence down to its cause by + /// re-wrapping controlled variants and diffing attributes over the line. + private static func diagnoseDivergence( + page: RDEPUBTextPage, + displayContent: NSAttributedString?, + lineIndex: Int, + lineStartInChapter: Int, + displayEndInChapter: Int, + probeEnd: Int, + width: CGFloat + ) { + let chapter = page.chapterContent + + // Variant 1: the raw page substring with no display normalization. + let rawSubstring = chapter.attributedSubstring(from: page.contentRange) + let rawEnd = lineEnd( + wrapping: rawSubstring, + lineIndex: lineIndex, + width: width + ).map { $0 + page.pageStartOffset } + + // Variant 2: wrap the chapter from the start of the paragraph that + // contains the diverging line (context = current paragraph only). + let text = chapter.string as NSString + let paragraphRange = text.paragraphRange( + for: NSRange(location: lineStartInChapter, length: 0) + ) + let paraString = chapter.attributedSubstring( + from: NSRange( + location: paragraphRange.location, + length: min(chapter.length - paragraphRange.location, paragraphRange.length + probeTailLength) + ) + ) + var paraEnd: Int? + if let layouter = DTCoreTextLayouter(attributedString: paraString) { + layouter.shouldCacheLayoutFrames = false + let frame = layouter.layoutFrame( + with: CGRect(x: 0, y: 0, width: width, height: 4_000_000), + range: NSRange(location: 0, length: paraString.length) + ) + if let lines = frame?.lines as? [DTCoreTextLayoutLine] { + let target = lineStartInChapter - paragraphRange.location + if let matched = lines.first(where: { $0.stringRange().location == target }) { + paraEnd = NSMaxRange(matched.stringRange()) + paragraphRange.location + } + } + } + + print("[PAGINATION-VALIDATE] DIAGNOSE lineStart=\(lineStartInChapter) display=\(displayEndInChapter) probeFullContext=\(probeEnd) rawSubstringWrap=\(rawEnd ?? -1) paragraphContextWrap=\(paraEnd ?? -1)") + + // Attribute diff between chapter text and display content over the + // diverging line (through the longer of the two ends). The display + // content is a chapter-length copy, so indices are shared. + guard let displayContent else { return } + let diffEnd = max(displayEndInChapter, probeEnd) + var position = lineStartInChapter + while position < diffEnd { + guard position >= 0, position < displayContent.length, position < chapter.length else { break } + var chapterRunRange = NSRange() + let chapterAttrs = chapter.attributes(at: position, effectiveRange: &chapterRunRange) + var displayRunRange = NSRange() + let displayAttrs = displayContent.attributes(at: position, effectiveRange: &displayRunRange) + + let keys = Set(chapterAttrs.keys).union(displayAttrs.keys) + for key in keys { + let lhs = chapterAttrs[key] as AnyObject? + let rhs = displayAttrs[key] as AnyObject? + if let lhs, let rhs, lhs.isEqual(rhs) { continue } + if lhs == nil, rhs == nil { continue } + print("[PAGINATION-VALIDATE] ATTR-DIFF pos=\(position) key=\(key.rawValue) chapter=\(describeAttr(lhs)) display=\(describeAttr(rhs))") + } + let nextPosition = min( + NSMaxRange(chapterRunRange), + NSMaxRange(displayRunRange) + ) + guard nextPosition > position else { break } + position = nextPosition + } + } + + private static func describeAttr(_ value: AnyObject?) -> String { + guard let value else { return "nil" } + if let font = value as? UIFont { + return "font(\(font.fontName),\(font.pointSize))" + } + if let style = value as? NSParagraphStyle { + return "para(fli:\(style.firstLineHeadIndent),hi:\(style.headIndent),ti:\(style.tailIndent),lbm:\(style.lineBreakMode.rawValue),align:\(style.alignment.rawValue),lhm:\(style.lineHeightMultiple),ls:\(style.lineSpacing),min:\(style.minimumLineHeight),max:\(style.maximumLineHeight))" + } + if let number = value as? NSNumber { + return "num(\(number))" + } + return String(describing: type(of: value)) + } + + /// Wraps `content` page-locally and returns the chapter-relative end of + /// line `lineIndex`, or nil if it cannot be produced. + private static func lineEnd( + wrapping content: NSAttributedString, + lineIndex: Int, + width: CGFloat + ) -> Int? { + guard content.length > 0, + let layouter = DTCoreTextLayouter(attributedString: content) else { return nil } + layouter.shouldCacheLayoutFrames = false + let frame = layouter.layoutFrame( + with: CGRect(x: 0, y: 0, width: width, height: 4_000_000), + range: NSRange(location: 0, length: content.length) + ) + guard let lines = frame?.lines as? [DTCoreTextLayoutLine], + lineIndex < lines.count else { return nil } + return NSMaxRange(lines[lineIndex].stringRange()) + } + + private static func safeSubstring(_ text: NSString, _ range: NSRange) -> String { + guard range.location >= 0, NSMaxRange(range) <= text.length else { return "" } + return text.substring(with: range) + .replacingOccurrences(of: "\n", with: "⏎") + } +} +#endif diff --git a/Sources/RDReaderView/EPUBUI/TextPage/RDEPUBTextPageVerticalJustifier.swift b/Sources/RDReaderView/EPUBUI/TextPage/RDEPUBTextPageVerticalJustifier.swift new file mode 100644 index 0000000..01aae72 --- /dev/null +++ b/Sources/RDReaderView/EPUBUI/TextPage/RDEPUBTextPageVerticalJustifier.swift @@ -0,0 +1,57 @@ +import UIKit + +#if canImport(DTCoreText) +import DTCoreText + +/// Redistributes the leftover space at the bottom of a page into the gaps +/// between lines so the last line sits flush with the content bottom edge +/// (vertical justification), keeping page character ranges untouched. +/// +/// Mutating each line's `baselineOrigin` is sufficient: DTCoreText derives +/// line frames, glyph-run frames and attachment positions from it lazily, +/// so drawing, selection, highlights and hit-testing all stay consistent. +enum RDEPUBTextPageVerticalJustifier { + + /// Leftover larger than this many typical line advances is kept as + /// whitespace instead of being stretched: it usually comes from a whole + /// block (image, table) pushed to the next page, and stretching would + /// make the line spacing visibly sparse. + static let maxStretchLineAdvanceRatio: CGFloat = 1.5 + + static func justify( + _ layoutFrame: DTCoreTextLayoutFrame, + contentHeight: CGFloat, + isChapterLastPage: Bool, + pixelScale: CGFloat + ) { + guard !isChapterLastPage, + contentHeight > 0, + let lines = layoutFrame.lines as? [DTCoreTextLayoutLine], + lines.count >= 2, + let firstLine = lines.first, + let lastLine = lines.last else { + return + } + + let leftover = contentHeight - lastLine.frame.maxY + guard leftover > 0.5 else { return } + + let gapCount = CGFloat(lines.count - 1) + let typicalAdvance = (lastLine.baselineOrigin.y - firstLine.baselineOrigin.y) / gapCount + guard typicalAdvance > 0, + leftover <= typicalAdvance * maxStretchLineAdvanceRatio else { + return + } + + let scale = max(pixelScale, 1) + for (index, line) in lines.enumerated() where index > 0 { + // Round each cumulative shift down to the pixel grid so glyphs + // stay sharp and the last line never overshoots the bottom edge. + let shift = floor(leftover * CGFloat(index) / gapCount * scale) / scale + var origin = line.baselineOrigin + origin.y += shift + line.baselineOrigin = origin + } + } +} +#endif