From 23182e8b5aef89528cb152dc1a61aadb53865c8b Mon Sep 17 00:00:00 2001 From: shen <> Date: Mon, 25 May 2026 22:15:24 +0800 Subject: [PATCH] feat(epub): align wxread css and overlay pagination behavior --- Doc/架构对比分析_WXRead_vs_ReadViewSDK.md | 41 +- ReadViewDemo/Podfile.lock | 2 +- .../Local Podspecs/RDReaderView.podspec.json | 2 +- ReadViewDemo/Pods/Manifest.lock | 2 +- .../Pods/Pods.xcodeproj/project.pbxproj | 2658 ++++++++--------- .../xcschemes/xcschememanagement.plist | 22 - .../ReadViewDemo.xcodeproj/project.pbxproj | 4 - .../UserInterfaceState.xcuserstate | Bin 64568 -> 70102 bytes .../EPUBCore/RDEPUBAssetRepository.swift | 12 +- .../EPUBCore/RDEPUBJavaScriptBridge.swift | 163 +- .../EPUBCore/RDEPUBWebView+FixedLayout.swift | 15 +- .../EPUBCore/RDEPUBWebView+Reflowable.swift | 13 +- .../EPUBCore/RDEPUBWebView+Search.swift | 101 + .../RDReaderView/EPUBCore/RDEPUBWebView.swift | 3 + .../EPUBCore/Resources/epub-bridge.js | 222 +- .../EPUBCore/Resources/wxread-dark.css | 56 + .../EPUBCore/Resources/wxread-default.css | 221 ++ .../Resources/wxread-replace-latin.css | 113 + .../EPUBCore/Resources/wxread-replace.css | 171 ++ .../RDEPUBTextBookBuilder.swift | 16 +- .../RDEPUBTextBookCache.swift | 5 +- .../RDEPUBTextLayouter.swift | 24 +- .../RDEPUBTextRenderer.swift | 72 + .../RDEPUBTextRendererSupport.swift | 192 +- .../RDPlainTextBookBuilder.swift | 9 +- .../EPUBUI/RDEPUBReaderController.swift | 25 +- .../EPUBUI/RDEPUBTextContentView.swift | 20 +- .../EPUBUI/RDEPUBWebContentView.swift | 12 +- .../RDEPUBWebDecorationOverlayView.swift | 50 + .../EPUBUI/RDURLReaderController.swift | 15 +- .../EPUBUI/UIColor+RDEPUBHex.swift | 15 + 31 files changed, 2585 insertions(+), 1691 deletions(-) create mode 100644 Sources/RDReaderView/EPUBCore/Resources/wxread-dark.css create mode 100644 Sources/RDReaderView/EPUBCore/Resources/wxread-default.css create mode 100644 Sources/RDReaderView/EPUBCore/Resources/wxread-replace-latin.css create mode 100644 Sources/RDReaderView/EPUBCore/Resources/wxread-replace.css create mode 100644 Sources/RDReaderView/EPUBUI/RDEPUBWebDecorationOverlayView.swift create mode 100644 Sources/RDReaderView/EPUBUI/UIColor+RDEPUBHex.swift diff --git a/Doc/架构对比分析_WXRead_vs_ReadViewSDK.md b/Doc/架构对比分析_WXRead_vs_ReadViewSDK.md index 1a593c8..b439e46 100644 --- a/Doc/架构对比分析_WXRead_vs_ReadViewSDK.md +++ b/Doc/架构对比分析_WXRead_vs_ReadViewSDK.md @@ -40,9 +40,10 @@ ReadViewSDK 当前已经不是“旧 UITextView 阅读器”了,文本主链 - 5 层 CSS 级联和 EPUB `` 外部样式表内联都已经落地。 - CoreText 页面 hit test、长按选区、菜单锚点、复制/高亮/批注主链路已经接入页面几何。 - CoreText 路径的高亮、注释、搜索命中已经走页面装饰层,而不是继续改正文布局真值。 -- WebView 路径的高亮/批注展示链路已经补齐,不再因为 DOM 包裹失败而“有记录但不着色”。 +- WebView 路径的标注绘制、搜索高亮已经改成“JS 产出 rect,原生 overlay 负责 CGContext 绘制”,不再依赖 DOM 包裹着色。 - 分页器已经补上 inline footnote attachment 不整段挪页、标题 `keepWithNext`、`weread-page-relate` 页首借行这几类 WXRead 风格规则。 - 章节尾部“仅空白/段落分隔符”的尾页丢弃,以及极短尾页回并已经落地,`宝山辽墓材料与释读` 第 31 页空白问题已修复。 +- `RDEPUBTextLayoutConfig` 已补齐到 WXRead 同级配置面:`frameWidth/frameHeight/edgeInsets/numberOfColumns/columnGap/avoidOrphans/avoidWidows/hyphenation`,并已接入分页入口与缓存键。 ### ⚠️ 有差异/有问题 @@ -51,14 +52,14 @@ ReadViewSDK 当前已经不是“旧 UITextView 阅读器”了,文本主链 - 位置模型虽然已经有 `rangeAnchor` 和 `fileIndex/row/column` 语义,但还不是完整的 WXRead 双向位置转换器。 - `RDEPUBChapterData` 已承担页内高亮/搜索/页码查询职责,但还没完全吸收 controller/book 层的章节语义。 - `RDReaderView` 已有 `pageCurl` fault patch、预加载、预测翻页和显示切换位置恢复,但还不是 WXRead 那种完整宿主层补丁集。 -- `default.css` / `replace.css` / `dark.css` 的效果已接近,但资源体系和 WXRead 私有 CSS 仍不是一比一镜像。 +- `default.css` / `replace.css` / `dark.css` / `replaceForLatinLanguageBook.css` 已切到内置资源镜像,并接入章节语言分支选择。 ### ❌ 未实现 - 完整 `WRChapterData` 同构模型 - 完整 `WREpubPositionConverter` 同构模型 - 预加载、预测翻页、显示切换一致性的完整宿主层方案 -- 多栏、字体动态加载、繁简转换 +- 字体动态加载、繁简转换 - TTS / DRM / Pencil --- @@ -70,10 +71,10 @@ ReadViewSDK 当前已经不是“旧 UITextView 阅读器”了,文本主链 | EPUB 文本渲染 | `WRPageView.drawRect:` → `CTFrameDraw` 到 CGContext | `RDEPUBTextContentView` → `RDEPUBDirectCoreTextPageView.draw(_:)` + `DTCoreTextLayoutFrame.draw(in:)` 页面级直绘 | ✅ 已实现 | | WebView 路径 | WKWebView(公众号/文集文章) | WKWebView(interactive/fixed-layout EPUB) | ✅ 已实现 | | 文本选区 | `CTLineGetStringIndexForPosition` 坐标级 hit test | `RDEPUBPageInteractionController` + `RDEPUBSelectionOverlayView` 已接入主链路 | ✅ 已实现 | -| 标注绘制 | `CTFrame` 层叠加绘制(CGContext) | CoreText 路径已走页面装饰层;WebView 路径仍是 JS/DOM 高亮 | ⚠️ 有差异/有问题 | -| 搜索高亮 | `WRCoreTextLayoutFrame.highlightSearchResults:` 直接绘制 | CoreText 路径已页面化;不同渲染路径仍不是同一套对象模型 | ⚠️ 有差异/有问题 | +| 标注绘制 | `CTFrame` 层叠加绘制(CGContext) | CoreText / WebView 两条链路都已收口到原生页面装饰层绘制 | ✅ 已实现 | +| 搜索高亮 | `WRCoreTextLayoutFrame.highlightSearchResults:` 直接绘制 | CoreText / WebView 两条链路都已统一为原生页面装饰对象绘制 | ✅ 已实现 | -**结论:** 文本页的“是否页面级 CoreText”已经不是问题,当前差距是页面装饰对象和双路径一致性。 +**结论:** 渲染层里“页面级绘制 + 页面装饰对象收口”这一块已经完成,当前剩余差距不再是标注/搜索高亮链路。 --- @@ -88,7 +89,7 @@ ReadViewSDK 当前已经不是“旧 UITextView 阅读器”了,文本主链 | 标题 keep-with-next | 标题不能孤悬页尾 | 已补 `keepWithNext` 语义与页尾回退 | ✅ 已实现 | | `weread-page-relate` | 页首关联块需要借上一页一行 | 已补页首 `pageRelate` 借行规则 | ✅ 已实现 | | 章节尾页收口 | 丢弃空白尾页、合并极短尾页 | 已补尾页空白丢弃与超短尾页回并 | ✅ 已实现 | -| 分页配置 | `WRCoreTextLayoutConfig`(含多栏等) | 已有 `RDEPUBTextLayoutConfig`,但多栏等仍缺 | ⚠️ 有差异/有问题 | +| 分页配置 | `WRCoreTextLayoutConfig`(含多栏等) | `RDEPUBTextLayoutConfig` 已补齐同级参数,并接入分页入口/缓存键/列路径构建 | ✅ 已实现 | | 缓存 | 按书籍 + 排版设置缓存 | 已有 `RDEPUBTextBookCache` 磁盘缓存 | ✅ 已实现 | **结论:** 当前分页质量问题已经进入问题书细抠阶段,不再是“缺分页器”的阶段;章节尾部空白页这类系统性问题也已经开始按 WXRead 规则收口。 @@ -101,11 +102,11 @@ ReadViewSDK 当前已经不是“旧 UITextView 阅读器”了,文本主链 |------|---------|-------------|------| | CSS 级联层级 | 5 级:`default < replace < dark < epub < user` | `RDEPUBTextStyleSheetPackage` 已实际生成并注入 5 层 | ✅ 已实现 | | EPUB `` CSS | 解析前级联合并外部样式 | 已实现抽取、内联、URL 重写与诊断 | ✅ 已实现 | -| 自定义 CSS 属性 | `wr-vertical-center-style`、`weread-page-relate`、断页相关私有属性 | 已支持 `pageRelate`、`avoidPageBreakInside`、attachment placement;仍非完整 WeRead 属性全集 | ⚠️ 有差异/有问题 | -| WXRead 私有 CSS 文件 | 使用 WeRead 自带 `default/replace/dark/...` | 当前是等价策略,不是原文件原样镜像 | ⚠️ 有差异/有问题 | -| `replaceForLatinLanguageBook.css` | 拉丁语言专项字体规则 | 无对应 | ❌ 未实现 | +| 自定义 CSS 属性 | `wr-vertical-center-style`、`weread-page-relate`、断页相关私有属性 | 已按 WXRead 语义接入 `wr-vertical-center-style`、`weread-page-relate`、`page-break-* / break-*`、`avoidPageBreakInside` 与 attachment placement | ✅ 已实现 | +| WXRead 私有 CSS 文件 | 使用 WeRead 自带 `default/replace/dark/...` | 已把 `default/replace/dark` 作为 SDK 内置资源镜像注入 5 层级联 | ✅ 已实现 | +| `replaceForLatinLanguageBook.css` | 拉丁语言专项字体规则 | 已按章节语言 / 正文拉丁字符占比自动切换 Latin replace 层 | ✅ 已实现 | -**结论:** CSS 主机制已对齐,剩下是规则细节和私有资源体系差异。 +**结论:** CSS 主机制、私有资源层和拉丁语言分支都已经按 WXRead 路径收口;这一节当前不再是剩余差距。 --- @@ -156,22 +157,22 @@ ReadViewSDK 当前已经不是“旧 UITextView 阅读器”了,文本主链 | 文件 | 读书职责 | ReadViewSDK 状态 | 核查 | |------|-------------|-----------------|------| -| `default.css` | 基础 HTML 标签样式 | 已有等价基础 CSS | ⚠️ 有差异/有问题 | -| `replace.css` | 标题、图片、引用、分页控制 | 已有等价 replace 层 | ⚠️ 有差异/有问题 | -| `dark.css` | 暗色主题 | 已有 dark 层 | ⚠️ 有差异/有问题 | -| `replaceForLatinLanguageBook.css` | 拉丁语言字体 | 无 | ❌ 未实现 | +| `default.css` | 基础 HTML 标签样式 | 已以内置资源镜像接入 | ✅ 已实现 | +| `replace.css` | 标题、图片、引用、分页控制 | 已以内置资源镜像接入 | ✅ 已实现 | +| `dark.css` | 暗色主题 | 已以内置资源镜像接入,并保留主题色覆盖层 | ✅ 已实现 | +| `replaceForLatinLanguageBook.css` | 拉丁语言字体 | 已接入章节语言自动切换 | ✅ 已实现 | | `replaceForMPChapter.css` | 公众号文章专用 | EPUB 主链路不需要 | ❌ 未实现(暂不需要) | ### JS | 文件 | 读书职责 | ReadViewSDK 状态 | 核查 | |------|-------------|-----------------|------| -| `weread-highlighter.js` | Web 高亮引擎 | `epub-bridge.js` 已接住高亮/批注展示 | ⚠️ 有差异/有问题 | +| `weread-highlighter.js` | Web 高亮引擎 | `epub-bridge.js` 现只负责 rect 解析与桥接,最终由原生 overlay 绘制 | ✅ 已实现 | | `rangy-*` | 选区/高亮库 | CoreText 路径不需要,Web 路径也未采用 | ⚠️ 有差异/有问题 | | `cssInjector.js` | 动态 CSS 注入 | 现为原生侧静态注入 | ⚠️ 有差异/有问题 | | `WeReadApi.js` | JS-Native 桥接 | `window.RDReaderBridge` | ⚠️ 有差异/有问题 | -**结论:** 不建议也不应该把 WXRead 私有 JS/CSS 资源整包原样搬用;当前应继续走“能力等价、实现自有”的路线。 +**结论:** CSS 资源层已经按 WXRead 的文件级职责收口;剩余差距主要在 JS 桥接策略,而不是 CSS 处理能力。 --- @@ -186,7 +187,7 @@ ReadViewSDK 当前已经不是“旧 UITextView 阅读器”了,文本主链 | 预加载 | ⚠️ 有差异/有问题 | P3 | | 预测翻页 | ⚠️ 有差异/有问题 | P3 | | 显示切换一致性 | ⚠️ 有差异/有问题 | P3 | -| 多栏排版 | ❌ 未实现 | P4 | +| 多栏排版 | ⚠️ 引擎配置与列路径已接入,阅读器侧未暴露切换 | P4 | | 字体动态加载 | ❌ 未实现 | P4 | | 繁简转换 | ❌ 未实现 | P4 | | TTS / DRM / Pencil | ❌ 未实现 | P4 | @@ -221,12 +222,12 @@ ReadViewSDK 当前已经不是“旧 UITextView 阅读器”了,文本主链 ### P4:外围能力 -- 多栏 +- 多栏阅读器开关 / UI 暴露 - 字体系统 - 繁简转换 - TTS / DRM / Pencil -当前状态:`❌ 未开始` +当前状态:`⚠️ 进行中` --- diff --git a/ReadViewDemo/Podfile.lock b/ReadViewDemo/Podfile.lock index b274494..7ee89af 100644 --- a/ReadViewDemo/Podfile.lock +++ b/ReadViewDemo/Podfile.lock @@ -43,7 +43,7 @@ EXTERNAL SOURCES: SPEC CHECKSUMS: DTCoreText: 11b7fe2104f476f82e75a4e3dbdde74d7186cecb DTFoundation: 76b624967cf5bcaae6bb057d622c536c36ef36d0 - RDReaderView: 438edba3372d14a7dde3c0334ebd4cc1945ca926 + RDReaderView: 54205c82c62ea6c674b43c833642d2643c98c573 SnapKit: d612e99e678a2d3b95bf60b0705ed0a35c03484a SSAlertSwift: aad8dc0c20b36fcffe700b81d7be89d60c7ba4f1 ZIPFoundation: dfd3d681c4053ff7e2f7350bc4e53b5dba3f5351 diff --git a/ReadViewDemo/Pods/Local Podspecs/RDReaderView.podspec.json b/ReadViewDemo/Pods/Local Podspecs/RDReaderView.podspec.json index 08b7912..76eb8d6 100644 --- a/ReadViewDemo/Pods/Local Podspecs/RDReaderView.podspec.json +++ b/ReadViewDemo/Pods/Local Podspecs/RDReaderView.podspec.json @@ -20,7 +20,7 @@ "source_files": "Sources/RDReaderView/**/*.{swift}", "resource_bundles": { "RDReaderViewAssets": [ - "Sources/RDReaderView/Resources/**/*" + "Sources/RDReaderView/EPUBCore/Resources/**/*" ] }, "dependencies": { diff --git a/ReadViewDemo/Pods/Manifest.lock b/ReadViewDemo/Pods/Manifest.lock index b274494..7ee89af 100644 --- a/ReadViewDemo/Pods/Manifest.lock +++ b/ReadViewDemo/Pods/Manifest.lock @@ -43,7 +43,7 @@ EXTERNAL SOURCES: SPEC CHECKSUMS: DTCoreText: 11b7fe2104f476f82e75a4e3dbdde74d7186cecb DTFoundation: 76b624967cf5bcaae6bb057d622c536c36ef36d0 - RDReaderView: 438edba3372d14a7dde3c0334ebd4cc1945ca926 + RDReaderView: 54205c82c62ea6c674b43c833642d2643c98c573 SnapKit: d612e99e678a2d3b95bf60b0705ed0a35c03484a SSAlertSwift: aad8dc0c20b36fcffe700b81d7be89d60c7ba4f1 ZIPFoundation: dfd3d681c4053ff7e2f7350bc4e53b5dba3f5351 diff --git a/ReadViewDemo/Pods/Pods.xcodeproj/project.pbxproj b/ReadViewDemo/Pods/Pods.xcodeproj/project.pbxproj index 77c3387..1b8c4b2 100644 --- a/ReadViewDemo/Pods/Pods.xcodeproj/project.pbxproj +++ b/ReadViewDemo/Pods/Pods.xcodeproj/project.pbxproj @@ -8,523 +8,508 @@ /* Begin PBXBuildFile section */ 002685407B9C4D548571DA24AFD6E8F1 /* NSString+Paragraphs.m in Sources */ = {isa = PBXBuildFile; fileRef = F53CCB60DE5D06A43E4A52EDB274E7D2 /* NSString+Paragraphs.m */; }; + 00BDAA46C4F6569C11D4D34AF68DA505 /* RDEPUBTextLayoutFrame.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02375C5EDA3CE9379DB415A85CFCC0F2 /* RDEPUBTextLayoutFrame.swift */; }; 014449AE560FFF3C628FAE639D043004 /* DTAnchorHTMLElement.m in Sources */ = {isa = PBXBuildFile; fileRef = 7D63AE1801C7AB149219317BE7529B26 /* DTAnchorHTMLElement.m */; }; - 0352E0436A8BB258753C1EC5BEFF1F41 /* RDEPUBPageInteractionController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 63CED2EEF113FB7F7860A952BD829D2D /* RDEPUBPageInteractionController.swift */; }; - 03774C35209F5A37D230DDDF85EB2161 /* DTSmartPagingScrollView.m in Sources */ = {isa = PBXBuildFile; fileRef = 96EEB6B022E22A4ABC86D87469D4815B /* DTSmartPagingScrollView.m */; }; + 03324B9DEBB7953076EDCD4091EE150E /* UIView+DTFoundation.m in Sources */ = {isa = PBXBuildFile; fileRef = 4219E7C32019899890CAB66E5FBDF524 /* UIView+DTFoundation.m */; }; + 0394CD46435D6EE15D3996A7FDEAC0AD /* DTFoundation-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FAB3C7F19A511C2B1B7DFBA3CA308C4 /* DTFoundation-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 03D35920862F172B8E69BC901CD4FA44 /* UIImage+DTFoundation.m in Sources */ = {isa = PBXBuildFile; fileRef = D85A85D891A320165843EF9F489178F7 /* UIImage+DTFoundation.m */; }; 03D90C831397E8636A33CE557024A136 /* NSMutableAttributedString+HTML.h in Headers */ = {isa = PBXBuildFile; fileRef = A2C299CFB47AA6ECF86F7348E1EB751F /* NSMutableAttributedString+HTML.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 03E14288F6DAEF1E198FEB136AF9E18C /* SSAlertSwift-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 2DE4FA5133891593CB45AF36B8EBF60C /* SSAlertSwift-dummy.m */; }; - 0422C1F781664D2A4E72357045B9DD5D /* RDEPUBDTCoreTextRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = FDCC61D962C1AB64399EDBEAD42DF918 /* RDEPUBDTCoreTextRenderer.swift */; }; - 04D1C39F2057763F32310F080E0C3806 /* Archive+ReadingDeprecated.swift in Sources */ = {isa = PBXBuildFile; fileRef = 934F9BB2B3A313294F121484C3A97A14 /* Archive+ReadingDeprecated.swift */; }; + 043840E0B152ECBD4C589446AA1870F9 /* ConstraintMakerEditable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 392A75EAF280876545D14AA00517BA4C /* ConstraintMakerEditable.swift */; }; + 053AFBB60D220EA22D1CF22AB354BBB9 /* UIImage+DTFoundation.h in Headers */ = {isa = PBXBuildFile; fileRef = 15941683D394FB8D7EAE91CD2CF03FF1 /* UIImage+DTFoundation.h */; settings = {ATTRIBUTES = (Public, ); }; }; 0561DF6793C8516F469D9813F5CE3211 /* DTCoreTextLayouter.m in Sources */ = {isa = PBXBuildFile; fileRef = 1D6DA580F40DF113709E15CF6542A35C /* DTCoreTextLayouter.m */; }; - 0584DE84F5D4432DA37BF213B826E77D /* LayoutConstraint.swift in Sources */ = {isa = PBXBuildFile; fileRef = 932FD688DE493323BA6B691BC2CB5094 /* LayoutConstraint.swift */; }; - 062F7A0AF438FB115F10473702ACA6A2 /* RDEPUBWebViewDebug.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7BB01C859C89276EA05BDF3460278A88 /* RDEPUBWebViewDebug.swift */; }; - 07229219971E7CEE13214DB1C5836E52 /* ConstraintDescription.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6578DFAB51436E8DF266FD087700E26B /* ConstraintDescription.swift */; }; - 075559137D3553EA01AB7DB6C4CC0068 /* NSString+DTPaths.h in Headers */ = {isa = PBXBuildFile; fileRef = FC5EC7C3D1808C9CF53354D7A3D69EE7 /* NSString+DTPaths.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 075F7790DDEF329B07C4D9B2A62EC120 /* NSURL+DTAppLinks.h in Headers */ = {isa = PBXBuildFile; fileRef = 557DA029E15EC99631B647AE8922007F /* NSURL+DTAppLinks.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 07BCF764A2F17AC516719E5C6273DFE2 /* NSFileWrapper+DTCopying.m in Sources */ = {isa = PBXBuildFile; fileRef = 1756C6FFCA695290BA62DA4E7B6DD20B /* NSFileWrapper+DTCopying.m */; }; - 09A7BC122A57A698B01DB3E5FBF5A11C /* RDReaderTheme.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CE4B942B105AC852002D99139C83CC7 /* RDReaderTheme.swift */; }; - 0A8CCD26A03E62301DC688C7F9A451C2 /* SnapKit-SnapKit_Privacy in Resources */ = {isa = PBXBuildFile; fileRef = B9DCB5EC0B1CDADD221717CADDF62359 /* SnapKit-SnapKit_Privacy */; }; + 060B0F956EE34AB3BFC0257E84DFAC7E /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0834E84632886CDD9911CAB76183F1CE /* QuartzCore.framework */; }; + 07B6FA62334B326D5179B16E555A1163 /* Archive+MemoryFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = 174FC0CA05D20BB995E211DE5A0857DB /* Archive+MemoryFile.swift */; }; + 07E956FB24A5153D59F07A4A3966CCF4 /* ConstraintMaker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 60657D08CCDB38BFED30BD40F4720CE4 /* ConstraintMaker.swift */; }; + 08B28F7D56429BDC3EA13F4EBBF2BCDF /* UIColor+RDEPUBHex.swift in Sources */ = {isa = PBXBuildFile; fileRef = A37FEAB6B0E196275B35332A30FF74DD /* UIColor+RDEPUBHex.swift */; }; + 0918ED4A491D011B46EE71AA40DDACB6 /* RDEPUBWebView+FixedLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = FB2892BCC3CD841C8364FBBE0DC10C12 /* RDEPUBWebView+FixedLayout.swift */; }; 0AAA5BB1DBF584102B15CF8738F1815E /* NSScanner+HTML.m in Sources */ = {isa = PBXBuildFile; fileRef = CA538A48DD3691701EC6B5021D7B7381 /* NSScanner+HTML.m */; }; 0ABC4D62588EABAA636441FD9A82C940 /* CTLineUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = DD58A1908F3C532210EA65ACE410A44D /* CTLineUtils.h */; settings = {ATTRIBUTES = (Public, ); }; }; 0B6FA1F22150D7F8B1865F41FF70C922 /* DTImage+HTML.h in Headers */ = {isa = PBXBuildFile; fileRef = 7AB9016408894675D11069CDAACEDE94 /* DTImage+HTML.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0B8E980D0F1E9A6215675791FC2CC79B /* Entry.swift in Sources */ = {isa = PBXBuildFile; fileRef = BDD081272B47A3B73CE693D21DC26827 /* Entry.swift */; }; - 0B9E080AFBFAD644577C307CDF475CEB /* DTWeakSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = C422BCADBB48E28B549495663705A0FB /* DTWeakSupport.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0C3C5BE6AFC1CC7F03DD9115DD8E79D7 /* ConstraintConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7176B677A350927FC670368313DC2CA1 /* ConstraintConfig.swift */; }; - 0C409FB96827DAF04354BBC3B18B73EB /* RDReaderController+EPUBText.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3572593435302A8E2EC2D722D61D2158 /* RDReaderController+EPUBText.swift */; }; - 0D295E2E5B4C0CBA30CA5935A28EF515 /* ZIPFoundation-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = D927F128EBF26AD2C61FD0E6B6F6F5ED /* ZIPFoundation-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0EA6382076ABCCCD14C8ECD8C2762E8A /* RDEPUBWebView+JavaScriptBridge.swift in Sources */ = {isa = PBXBuildFile; fileRef = DC65D0ABA3F040468B590D5BD075E3EF /* RDEPUBWebView+JavaScriptBridge.swift */; }; - 0F2907771DCAE2DD152ACE6A52219CB8 /* Archive+Progress.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD987C2FA7C8FBC96FD024E421DA0E68 /* Archive+Progress.swift */; }; + 0BB905F057CB7578CB867DC3F8277CF6 /* RDEPUBParser+Archive.swift in Sources */ = {isa = PBXBuildFile; fileRef = 871BA1C45F545C9EAD9E1795144209C6 /* RDEPUBParser+Archive.swift */; }; + 0D2BE6D40EA436C99BC88C4AC84DDE71 /* DTLog.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B007AEEACE9EA271DD73AFD80A74D83 /* DTLog.m */; }; + 0EA168CF3EF3FCB8AC5BB8404F02167F /* ConstraintDirectionalInsets.swift in Sources */ = {isa = PBXBuildFile; fileRef = 91144FC099DD458E61625CD939577DAA /* ConstraintDirectionalInsets.swift */; }; + 0F1EB5CB3A6EB0627B076B7AABA22D9E /* RDEPUBResourceURLSchemeHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82C37B4E513CEF203D7C832740579E6B /* RDEPUBResourceURLSchemeHandler.swift */; }; 0FCBC8C64D8862F2A0E8794EDADDECBD /* UIFont+DTCoreText.h in Headers */ = {isa = PBXBuildFile; fileRef = 647FB0C5AAF84C71A7784DD277E48910 /* UIFont+DTCoreText.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0FFB43EC39E5940C49E18FB5CFE5D9D0 /* RDEPUBSelectionOverlayView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D961D2FCB14D4968F1D6B43EC27280D9 /* RDEPUBSelectionOverlayView.swift */; }; 100BFFBD24F234C095EDB001B8088DB1 /* DTCoreTextLayoutFrameAccessibilityElementGenerator.m in Sources */ = {isa = PBXBuildFile; fileRef = D1599698B5A62671C488F13E07272B09 /* DTCoreTextLayoutFrameAccessibilityElementGenerator.m */; }; + 108AFD87D054CA4FB49572ED7B16AE99 /* RDEPUBTextPaginationSupport.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC026AD0A9538F72B62BFB9EC8C98353 /* RDEPUBTextPaginationSupport.swift */; }; 109458F9D48FD4F381F0E40E2DB3D91C /* DTLazyImageView.h in Headers */ = {isa = PBXBuildFile; fileRef = E5F69A1E1260BAD7737BEB533F643A15 /* DTLazyImageView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 10C736BFEF1A0AF28FAFF1635B224C09 /* RDEPUBPreferences.swift in Sources */ = {isa = PBXBuildFile; fileRef = 48A4E8E3CD48799CF1E9D64CD7CE0C86 /* RDEPUBPreferences.swift */; }; 11AB1902A68385851FB81E870991F9A0 /* DTImageTextAttachment.m in Sources */ = {isa = PBXBuildFile; fileRef = FEEB15F87BA6575BBFE1C5FD19B17CD7 /* DTImageTextAttachment.m */; }; + 123FF942A68B336E49F46CD34F0BB593 /* RDEPUBSelectionOverlayView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 065F46518D05F6DEA21AB45C485CCBAC /* RDEPUBSelectionOverlayView.swift */; }; + 129A4894D5C076AC8FBB4AC2159B0AB8 /* RDReaderView-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4E662F4176B8840BB4DF9A76EB5443 /* RDReaderView-dummy.m */; }; 12B4A35B8E40C112E18A7C5511F023E9 /* CoreText.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4472755F83C121DE5E1E505D145F6DBE /* CoreText.framework */; }; 130C3A85D9F9F445222C2E31EC245B0A /* NSScanner+HTML.h in Headers */ = {isa = PBXBuildFile; fileRef = A0927A875CA1F11DBCE60DFC6F0CA0B6 /* NSScanner+HTML.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 132DF5F7962BFC5EEC9098C425B51EB7 /* DTFoundation-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = FCC718115E5C31C88A680522AE36B089 /* DTFoundation-dummy.m */; }; + 13EB572E58E7D92462C8BE1114375C43 /* UIScreen+DTFoundation.m in Sources */ = {isa = PBXBuildFile; fileRef = 7F051D813D50D20D53205D5FDCAA877C /* UIScreen+DTFoundation.m */; }; + 14ADB66FB45D862147EB6E6C4B5EA229 /* RDEPUBTextBookBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4EF375B490014DEFC2BB798269AA0985 /* RDEPUBTextBookBuilder.swift */; }; 14BDD9FB7A7AC5C8ABFF8D24C381F3DA /* NSAttributedString+DTCoreText.m in Sources */ = {isa = PBXBuildFile; fileRef = DBC9280BA00935565E9658775DD7404D /* NSAttributedString+DTCoreText.m */; }; + 14FC98FD822FD9609F753AD2D8EAC873 /* Debugging.swift in Sources */ = {isa = PBXBuildFile; fileRef = D495E2AB1223BD4D4909F8FF1FF47DAF /* Debugging.swift */; }; + 1573AF8F1FE294F259B6D172647DE0E4 /* UIApplication+DTNetworkActivity.m in Sources */ = {isa = PBXBuildFile; fileRef = 77213203802F44012346181FED2856F9 /* UIApplication+DTNetworkActivity.m */; }; 15A7ED15DA03DD3B9F26A017D270D1C2 /* DTCSSListStyle.h in Headers */ = {isa = PBXBuildFile; fileRef = FDD333B409D528E5006FA48F4D70A6F5 /* DTCSSListStyle.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 190925A3A3BD3FAC45890FC69E9979C3 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B50104DE2E35D820ECA22CDB3E6F96EA /* Foundation.framework */; }; + 16421662EE90ABA9A6EE98B2A0FE0210 /* ConstraintMakerExtendable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5245010774F8F1C4857763CC7B96E7B4 /* ConstraintMakerExtendable.swift */; }; + 17F1C63137132337E12752FDF7633A9A /* ConstraintMultiplierTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09BE22EE711B7A38A4443E1C1C12BD79 /* ConstraintMultiplierTarget.swift */; }; + 186520D7BA8216DB8A28FD45F7F75498 /* NSURL+DTUnshorten.m in Sources */ = {isa = PBXBuildFile; fileRef = C80065DBA5634DAA71129404975D7349 /* NSURL+DTUnshorten.m */; }; 191824B2B1E1B0A7DD3B6298100B4B8A /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DE4821B98DDE6C71411EC139EC6D2762 /* CoreGraphics.framework */; }; 19649ED312D92A6F5D2D6AF4E540CE75 /* DTHorizontalRuleHTMLElement.h in Headers */ = {isa = PBXBuildFile; fileRef = E28CA95D89DBAB2FE56BC8513D5838D7 /* DTHorizontalRuleHTMLElement.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1B8FB8BD30A923B250D1AB42D92116AF /* RDReaderContentCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7056386E170F7F887E72F81D4D5E1285 /* RDReaderContentCell.swift */; }; - 1CF912B81E8C27A754FAB150AD9C5B3B /* NSData+DTCrypto.m in Sources */ = {isa = PBXBuildFile; fileRef = 17F750F38183302BF345F40F5A4CDD43 /* NSData+DTCrypto.m */; }; + 19E2B4D2CF3DA91EEBAD4079DDBE076C /* RDReaderView-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 606D7AB51D4BF9B4AAD104DF89B5B9AD /* RDReaderView-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1C1666D7A5833BE0178BD004E8EF21C6 /* Data+CompressionDeprecated.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4D641809A99849F80FDCB02F8CE8D6A0 /* Data+CompressionDeprecated.swift */; }; + 1CBC0ED3AF6CAA617BA3ECB04DA68DF5 /* epub-bridge.js in Resources */ = {isa = PBXBuildFile; fileRef = BE53A6D6898393B5A8B54F23ED0065D0 /* epub-bridge.js */; }; 1D460603DCA4A4E5ECFE8FF1F1CACC10 /* DTColorFunctions.m in Sources */ = {isa = PBXBuildFile; fileRef = AFC4C9F69BF2D0CAEBAA83896C139D2C /* DTColorFunctions.m */; }; - 1DBFC8CDE798B2723356B71588E4E8FF /* ConstraintLayoutSupport.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50297AAB8278F2BB6FCFE82B20C7A049 /* ConstraintLayoutSupport.swift */; }; - 1E6141B4021BC57182100FD706789994 /* DTExtendedFileAttributes.h in Headers */ = {isa = PBXBuildFile; fileRef = 538572A5C098252D629F2185F1B1C9E8 /* DTExtendedFileAttributes.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1FF46E77DCE6A1499477A7F74B0A4A2E /* RDEPUBTextPerformanceSampler.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF6F03EB82A94D1E7920748BD168D22F /* RDEPUBTextPerformanceSampler.swift */; }; - 2002DB78ED8AF0DD231FA449122865ED /* UIApplication+DTNetworkActivity.m in Sources */ = {isa = PBXBuildFile; fileRef = 77213203802F44012346181FED2856F9 /* UIApplication+DTNetworkActivity.m */; }; - 21ACD023C20493BDA7A7AD4F908D3B0C /* ConstraintMakerEditable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 392A75EAF280876545D14AA00517BA4C /* ConstraintMakerEditable.swift */; }; + 1E53C95A5D9629D8721ED8DF87983841 /* RDEPUBPageInteractionController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8DF21684A2D45C7724718A05AB269C7A /* RDEPUBPageInteractionController.swift */; }; + 1E553A18817913A102F1CC344D62F482 /* ConstraintDirectionalInsetTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = A651CEE8062C84A597DBC44ECA3DBCC1 /* ConstraintDirectionalInsetTarget.swift */; }; + 1F3E265C62041BC60ED9107DB03798BC /* Archive+Reading.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0619F98DA80922E78A07321D0DC54F62 /* Archive+Reading.swift */; }; + 202E7C69357BE581D13B25A696C16209 /* Archive+BackingConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 61E36C4FE448DDDA03450847FCB785B6 /* Archive+BackingConfiguration.swift */; }; + 2112D33A6C8A659AB911EF9AA8528E32 /* RDEPUBTextRendererSupport.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEAF5559BCE747CDC3F13886B8385344 /* RDEPUBTextRendererSupport.swift */; }; + 2202864554457158A3863F9F6515EE13 /* RDEPUBTextContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA4B1095936DBB3491E580EE642E6966 /* RDEPUBTextContentView.swift */; }; 2203356EEA94A9172BC7902923E43CBE /* DTCoreTextFontCollection.h in Headers */ = {isa = PBXBuildFile; fileRef = 0B7771FDE9AB1688166584C0AA03F12A /* DTCoreTextFontCollection.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 22C064DC473AC7E7B364AFF251CC12BD /* DTHTMLParser.m in Sources */ = {isa = PBXBuildFile; fileRef = 32FB2B1B0498DCBE7B79BDF49E963E3D /* DTHTMLParser.m */; }; - 22C3C681A6AE1F5D9D9EC3556DD4C744 /* Entry+ZIP64.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7345CE45F696634CEA692A86D16F684C /* Entry+ZIP64.swift */; }; - 22C9366B907210A7AF9BC2BBB7992740 /* Archive+Writing.swift in Sources */ = {isa = PBXBuildFile; fileRef = DF988440049800DB7824A94B81D20254 /* Archive+Writing.swift */; }; 24395BEB3C360D9DA5180BFB955B04A0 /* DTAttributedLabel.m in Sources */ = {isa = PBXBuildFile; fileRef = 21BAA93E67D8CBC5297302D798FB4F7A /* DTAttributedLabel.m */; }; 2445709667CB3820E51CD4AA915E6943 /* DTHTMLParserTextNode.h in Headers */ = {isa = PBXBuildFile; fileRef = C30D143134EEC5D4BA99459104B76A2E /* DTHTMLParserTextNode.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2497BAA78EA8AC017F85E951D57C1DB5 /* ConstraintMultiplierTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09BE22EE711B7A38A4443E1C1C12BD79 /* ConstraintMultiplierTarget.swift */; }; 24C5B52FD2AA9C49731DC6859ABA7CDE /* NSDictionary+DTCoreText.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C50CAB4241C141EF6EC9ED22AB3A7E8 /* NSDictionary+DTCoreText.m */; }; - 25EE699AF556B4288FF8FB7D6F08AAEC /* ConstraintInsetTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32A5ABB8F3656A110B955B0306E9A8C3 /* ConstraintInsetTarget.swift */; }; - 26DBE362D68A07702CA30DD3CA667C85 /* RDReaderView-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A66404CE3169BD8F63D23D4D33D77D8 /* RDReaderView-dummy.m */; }; + 2534C9D06B3696A12408C710CA2757F5 /* RDReaderPageChildViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96718D9DDA02E4E22568D880B91E7D8C /* RDReaderPageChildViewController.swift */; }; + 25DEC09B82998CE7055BA7EB0E4D2F0F /* Date+ZIP.swift in Sources */ = {isa = PBXBuildFile; fileRef = F76A97683FB5E8E8B86EA4AD71F6F4B4 /* Date+ZIP.swift */; }; + 25EE412DAC29154BBA2A29A3064C7A2B /* RDEPUBModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = AB417EFC922BE57A7D61CFCD8F5C356A /* RDEPUBModels.swift */; }; 270C5C10028F0BC5A62548326CCB379B /* DTColor+Compatibility.m in Sources */ = {isa = PBXBuildFile; fileRef = E196F56E68578181D5BDE787DE5C0F3A /* DTColor+Compatibility.m */; }; - 27C701B26FFA1212EE52732791DBDE6E /* RDReaderCoverView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6805A9F7BC278ACA3055C1604ECA2CDA /* RDReaderCoverView.swift */; }; - 27C9DC51F8B053244F4E50001D278499 /* SSAlertView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F410ED25E4E84C3D5166261CDF4B58F2 /* SSAlertView.swift */; }; - 284CFEFC15F5A6C4FD157B2804064EE0 /* NSData+DTCrypto.h in Headers */ = {isa = PBXBuildFile; fileRef = 02EDFE0EEA47398F3E1A361A73AF6A6C /* NSData+DTCrypto.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 285E663B78A3A883EAB51AA1831CF6AF /* SSAlertSwift-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 937CEFA81DA4227008DBFB114783A08B /* SSAlertSwift-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 285B09F819BD8AFFD69226251C8EC268 /* NSDictionary+DTError.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FC368BD2A8D266EB771E5FB9A5A5B3C /* NSDictionary+DTError.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2993DF5CE6F83258DE9DA1CA296CEBDB /* DTActivityTitleView.h in Headers */ = {isa = PBXBuildFile; fileRef = 8272D0B59ABD6652D0CAE3DFCC2C5EE1 /* DTActivityTitleView.h */; settings = {ATTRIBUTES = (Public, ); }; }; 29D9B32DFFC59A157EDEF005DB92A5AC /* DTCoreTextLayoutLine.m in Sources */ = {isa = PBXBuildFile; fileRef = C71D83D6AEF198FA680B8A80BF2D9605 /* DTCoreTextLayoutLine.m */; }; - 2A46F03145D58286BBD2174712D5F145 /* DTPieProgressIndicator.m in Sources */ = {isa = PBXBuildFile; fileRef = 5DA1E8494B86FFD79C639DCB8C21E1BB /* DTPieProgressIndicator.m */; }; 2AAF9361720FC2D8FFCA93B5FAE42019 /* NSMutableString+HTML.m in Sources */ = {isa = PBXBuildFile; fileRef = 31F3F91D5624C451E5D44D85B1DDE7C5 /* NSMutableString+HTML.m */; }; - 2B670D48D3797BC147B65F001DB64A2D /* RDEPUBParser+ReadingProfile.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F6A518246FE5F3F14F56A59B9D1DF19 /* RDEPUBParser+ReadingProfile.swift */; }; - 2BC3F3158B809CE11479E5939B863982 /* UIImage+DTFoundation.h in Headers */ = {isa = PBXBuildFile; fileRef = 15941683D394FB8D7EAE91CD2CF03FF1 /* UIImage+DTFoundation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2BD573BF6C3F7775A01C29D6C830CD0B /* RDEPUBTextRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0C172FFAA0EF6BCF47B5204C12C088FE /* RDEPUBTextRenderer.swift */; }; - 2BDEF7E69D3DCD02429CEF9303E07E95 /* RDReaderTopToolView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 20E5E5D5715B6B1FBEC53F0E67DB5683 /* RDReaderTopToolView.swift */; }; - 2D2D9DFF3844283170924BD6FAE8A6D0 /* ConstraintLayoutSupportDSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = F5B34EE2160C27947D1EEFD42184CF5D /* ConstraintLayoutSupportDSL.swift */; }; - 2ED7C867C6A914E51D564C7C0A4CDC9E /* ConstraintPriority.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45C7129757B54DFD9E445D0A17D73A83 /* ConstraintPriority.swift */; }; + 2B020F7C6FC381A28960B363D24FF8F7 /* RDEPUBWebDecorationOverlayView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A7797621CF825900662A85E723445CD /* RDEPUBWebDecorationOverlayView.swift */; }; + 2BB93FF5C17C381807DFC46B0772102D /* RDEPUBReaderTheme.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23AD6E6A62F1EE4221018B6DA2391BA7 /* RDEPUBReaderTheme.swift */; }; + 2C2C452DC3EE68E1BFE8C8D72A3D2750 /* NSData+DTCrypto.m in Sources */ = {isa = PBXBuildFile; fileRef = 17F750F38183302BF345F40F5A4CDD43 /* NSData+DTCrypto.m */; }; + 2C4B949CE9C8AFB2C207204995DEF3A7 /* NSMutableArray+DTMoving.m in Sources */ = {isa = PBXBuildFile; fileRef = 53499F40E1790A6CBE8AFEB3AC5BEFC8 /* NSMutableArray+DTMoving.m */; }; + 2D7DB1A4CC032FD9E04052F34C519146 /* ConstraintConstantTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F090A0289338B14050FAF16C22605B0 /* ConstraintConstantTarget.swift */; }; + 2E1F852AC5FF95720D26E4D4650B6441 /* Entry+ZIP64.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7345CE45F696634CEA692A86D16F684C /* Entry+ZIP64.swift */; }; + 2EA63DE8EF8EE4114C95521A1A8A0DFF /* Data+Compression.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5964AF1336E2F0DA0E2C32991E76C78C /* Data+Compression.swift */; }; + 2F36566E071CAF9BB1D665CF3027E6B4 /* RDEPUBReadingSession.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29E5523049D286F000DEB6F1D59AD428 /* RDEPUBReadingSession.swift */; }; 2FD7360250C2255A80583D4CF518FBFA /* DTTextAttachment.m in Sources */ = {isa = PBXBuildFile; fileRef = F35039A8D0AA1F7BAFC4E5E016057E15 /* DTTextAttachment.m */; }; 30C01FE491C26314F776AD8B2AF136FA /* NSAttributedStringRunDelegates.m in Sources */ = {isa = PBXBuildFile; fileRef = E6F2E79CC33E0823C4E719ECDDFBBE08 /* NSAttributedStringRunDelegates.m */; }; - 315CA2CF90E2C8C8BDDBBFEAD998132D /* UILayoutSupport+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C647A2EB2720BCBF88B160D124B57BF /* UILayoutSupport+Extensions.swift */; }; + 30FB567639FBF7B1D963B9A9E644C55F /* DTWeakSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = C422BCADBB48E28B549495663705A0FB /* DTWeakSupport.h */; settings = {ATTRIBUTES = (Public, ); }; }; 31B805C50E0E187E6242B0C878C4D30D /* DTCoreTextMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F5D34047BAA894BEF1DFA23E6A9DAB1 /* DTCoreTextMacros.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 31E6A93269CC2B8231CEF265EF5F56CA /* SSAlertAnimation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D2EC0B845131A88247902AEA26F40AE /* SSAlertAnimation.swift */; }; - 32DDB2C5A40C23CA48CA0A4D6ACF9385 /* DTSmartPagingScrollView.h in Headers */ = {isa = PBXBuildFile; fileRef = D2BA6D5DBD4C6A9285C4592721790A26 /* DTSmartPagingScrollView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 335F165AF7F9FA4887E5D3BBDD610F25 /* epub-fixed-layout.html in Resources */ = {isa = PBXBuildFile; fileRef = 60884EDD3BAA2D90E3558705210402E4 /* epub-fixed-layout.html */; }; - 33DD79618082A50270C76DC051D9EB07 /* RDEPUBWebView+Reflowable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8D8BB5522D848ED0D5EB8D6C55B5BD60 /* RDEPUBWebView+Reflowable.swift */; }; + 33346EAF6E558DAD2572AB45E4046AE0 /* Archive+Progress.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD987C2FA7C8FBC96FD024E421DA0E68 /* Archive+Progress.swift */; }; 343E794F88AA503F5139C2244DC1A2B1 /* DTTextAttachmentHTMLElement.h in Headers */ = {isa = PBXBuildFile; fileRef = C298199F5DC5390E8B6666F638B34C10 /* DTTextAttachmentHTMLElement.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3446650779C0B4DFA2F9A38E9316595B /* RDEPUBNavigatorLayoutContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B9B09D14E157387B4541DC0B4F80DE5 /* RDEPUBNavigatorLayoutContext.swift */; }; - 34CB7239245E865E3F20FF5AAEEB8683 /* RDEPUBReaderConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8B57EA1434AA54B81DE1CFCBD3BA3420 /* RDEPUBReaderConfiguration.swift */; }; + 3466B5D6804C323ACD624A91A77CE318 /* RDEPUBTextPerformanceSampler.swift in Sources */ = {isa = PBXBuildFile; fileRef = F38A5EF3AB47504A0F63F91180092B45 /* RDEPUBTextPerformanceSampler.swift */; }; 35C5BE59CA712CCDF93D6E7010D93883 /* DTAttributedTextContentView.h in Headers */ = {isa = PBXBuildFile; fileRef = C123C127CC539ACCB510F665DB774899 /* DTAttributedTextContentView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3648EA27B0A27DD5E6451A7F44B0C185 /* RDEPUBReaderPersistence.swift in Sources */ = {isa = PBXBuildFile; fileRef = 684215FCFE21769A54F1F98739057EF1 /* RDEPUBReaderPersistence.swift */; }; 372E907DF08263D0E1AF904F1FCD66EB /* DTTextAttachment.h in Headers */ = {isa = PBXBuildFile; fileRef = D36ED8209C907E3E9B074DDB399F54FF /* DTTextAttachment.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 37EE68FDABB4D7933B44A360E66CA6A4 /* RDEPUBReadingSession.swift in Sources */ = {isa = PBXBuildFile; fileRef = 21DC85814825F7507AD22499EF31F73A /* RDEPUBReadingSession.swift */; }; + 385DA8247F55E886F3FBC57CC15BEF4E /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 1E89FE5F2996336E862E82C1E14E0EE7 /* PrivacyInfo.xcprivacy */; }; 389F7C8400F9223C019F2D7825CD2369 /* NSCharacterSet+HTML.m in Sources */ = {isa = PBXBuildFile; fileRef = 713C9FD0354D16AFCCFA630A97F2DA68 /* NSCharacterSet+HTML.m */; }; - 39F88C59749B6E10C997BAF695675968 /* RDPlainTextBookBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 63C815D99D3B252F4FD7E1E2D9771B10 /* RDPlainTextBookBuilder.swift */; }; - 3AC334CD99FEF528D5DDE072512CBA37 /* Archive.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C8F0DCEAA5A3DF38C503CA30DC94C1C /* Archive.swift */; }; - 3BBAC439B0A9F8101569083C8C975256 /* RDEPUBTextAnchor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5DDF2DF67BE36B35797B29961757F372 /* RDEPUBTextAnchor.swift */; }; + 394D91C2D2C148AD3633ADB12DF96012 /* DTCustomColoredAccessory.h in Headers */ = {isa = PBXBuildFile; fileRef = 33DB57DF8C5AE334B1BBE9F989352F1D /* DTCustomColoredAccessory.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 39FF966DAE554008F4CFD71A2570E676 /* RDEPUBTextSearchEngine.swift in Sources */ = {isa = PBXBuildFile; fileRef = BA1661CEEEBB7BDE901B5716D99DDE90 /* RDEPUBTextSearchEngine.swift */; }; + 3C8CE770C755B822C569A4F9D302F342 /* ConstraintRelation.swift in Sources */ = {isa = PBXBuildFile; fileRef = D3593ADF561D422F73C8EABAD4A4F440 /* ConstraintRelation.swift */; }; 3DC8F9474FC6A0BB7E81A703CE958966 /* NSAttributedString+DTDebug.h in Headers */ = {isa = PBXBuildFile; fileRef = 71E2D85A099C99CD82FD1842EE7C52D2 /* NSAttributedString+DTDebug.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 42114ECE137FCF922A2780148B1416D6 /* ConstraintMakerRelatable+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = ECFE19508E12BF8B0B52E8CB4F724217 /* ConstraintMakerRelatable+Extensions.swift */; }; - 42F63B30779ACF09333EAD7C6B7140DE /* RDReaderView-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 0C4C3F52F41CC00A37BF981231036C1A /* RDReaderView-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 434031D0C3AF65DA56E6907F4B961DCF /* ConstraintDSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02CF362F88AB69253F1898E53D7A286A /* ConstraintDSL.swift */; }; - 437D9E58DE50722DFAA49573EC8B1CA6 /* DTAnimatedGIF.h in Headers */ = {isa = PBXBuildFile; fileRef = A9FBC69C7DA29A7283920FDA9EBBCE8A /* DTAnimatedGIF.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 43E88F26739695D134332EF8837B1AB0 /* DTActivityTitleView.h in Headers */ = {isa = PBXBuildFile; fileRef = 8272D0B59ABD6652D0CAE3DFCC2C5EE1 /* DTActivityTitleView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4482252FA0C67A5210593A8858B3BF1E /* RDReaderFlowLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = C3D0FAB5FCC5D17DF5D0A330FD2B98A2 /* RDReaderFlowLayout.swift */; }; + 3EC890B2CE7B2360729F4EBF3023B68D /* SSAlertPresentAnimation.swift in Sources */ = {isa = PBXBuildFile; fileRef = E481007A8174943868EBC81CF3B04B9F /* SSAlertPresentAnimation.swift */; }; + 3FB38B080B976580510E01FCE7BA4C10 /* RDEPUBStyleSheetBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9BD3A31AFC4BC8216C0AA79606708051 /* RDEPUBStyleSheetBuilder.swift */; }; + 416A6514C1A35BB87A05A7C54ACAEAC4 /* RDEPUBWebView+Search.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA1A5B58D686782147F12C1A8781C47B /* RDEPUBWebView+Search.swift */; }; + 42BE9975B789B575433E93B4A10A1E34 /* RDEPUBParser+Package.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4331275EBF2F4E4FC5FBFFEE72E6E06 /* RDEPUBParser+Package.swift */; }; + 42E86E25D5B3335EF7DD6518E0863E72 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B50104DE2E35D820ECA22CDB3E6F96EA /* Foundation.framework */; }; + 43072D547164E92F733CF74B2B244DE8 /* DTHTMLParser.m in Sources */ = {isa = PBXBuildFile; fileRef = 32FB2B1B0498DCBE7B79BDF49E963E3D /* DTHTMLParser.m */; }; + 4353DBC7FB1A403EE787B421D75A1FDB /* RDReaderView-RDReaderViewAssets in Resources */ = {isa = PBXBuildFile; fileRef = 83410CC9CF2ABE63B90A92F2F988BF65 /* RDReaderView-RDReaderViewAssets */; }; + 43D10312CDEFDAB42D20488E9522F1DA /* DTTiledLayerWithoutFade.m in Sources */ = {isa = PBXBuildFile; fileRef = 70F5D03B9B3B7F182C8F5C1F5D4FA7E7 /* DTTiledLayerWithoutFade.m */; }; 44B1FBF893C06F314F8C9BD1405897D8 /* DTCoreTextGlyphRun.m in Sources */ = {isa = PBXBuildFile; fileRef = 36FCB869246FE45FD1C9609A34EB4E74 /* DTCoreTextGlyphRun.m */; }; + 44B3694130E8D04BB05A995AE726E37F /* RDEPUBTextAnchor.swift in Sources */ = {isa = PBXBuildFile; fileRef = B4E20D7801600727C16A2C13D5F84E38 /* RDEPUBTextAnchor.swift */; }; 45133E47CC5FBCF78BFCD38981BA027F /* DTDictationPlaceholderView.h in Headers */ = {isa = PBXBuildFile; fileRef = 982391EC8620A617B8788C8A6101C96A /* DTDictationPlaceholderView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 45CFC12970470E9E14C4CB5FECCBB5CB /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 53D473C6F07982D3D25781A343EC5A99 /* PrivacyInfo.xcprivacy */; }; - 45D5FC3E7DACA12FCC030260C863E73A /* ConstraintItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 28D62D3200AC3D4E42C81CDFF7E884E8 /* ConstraintItem.swift */; }; - 45E3F2369E1918D147E29851D41E5BD3 /* UIScreen+DTFoundation.m in Sources */ = {isa = PBXBuildFile; fileRef = 7F051D813D50D20D53205D5FDCAA877C /* UIScreen+DTFoundation.m */; }; - 45E833F2F3F69B54018B438D888A7795 /* UIImage+DTFoundation.m in Sources */ = {isa = PBXBuildFile; fileRef = D85A85D891A320165843EF9F489178F7 /* UIImage+DTFoundation.m */; }; + 457C0034B28FBD2A77FF784E2C20576E /* NSURL+DTAppLinks.m in Sources */ = {isa = PBXBuildFile; fileRef = 2D36F7CDCD7D5788CDCB3A1421DB242B /* NSURL+DTAppLinks.m */; }; 45F90B98546FDBA03AB112DFE859A185 /* DTCSSStylesheet.m in Sources */ = {isa = PBXBuildFile; fileRef = E0D90EB06FC37D534934542F9CAB1D74 /* DTCSSStylesheet.m */; }; + 4668DB9D177325F8E008E5D1C0F37CB4 /* RDEPUBTextLayouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = D14AB5026508804287BE9997A4CF7CE1 /* RDEPUBTextLayouter.swift */; }; 46EF32D586FF590CE2C60C66364B9357 /* ImageIO.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FEB14A8F8170777DB7CCC3F27C8EA57A /* ImageIO.framework */; }; - 47945010E88C9F7D024A136D5FFFFA63 /* ConstraintOffsetTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8F950CEF31AC0065C0BEAB26BA2CEFA1 /* ConstraintOffsetTarget.swift */; }; - 47B7267B80D06DE7190EA450B76F6987 /* RDEPUBTextBookBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = D19278824E5C15269B5C7096F35C2E2E /* RDEPUBTextBookBuilder.swift */; }; - 486E59ABF340FAC67DA871E38829BE75 /* DTActivityTitleView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4EEFAE80193E1F0DA53400C9AD641410 /* DTActivityTitleView.m */; }; - 49A57AB5E9E3EC6CC0C14F5707DA2084 /* DTCoreGraphicsUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = B6425B2235BA00FE865AF58EF44F1144 /* DTCoreGraphicsUtils.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4A00588D199637337DC0B14E95F96A6E /* RDEPUBTextBookCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = 306348D231BB9C268B7FDAA26E17D898 /* RDEPUBTextBookCache.swift */; }; + 494DB8491A940D9CCD0BAB65DA21D211 /* UIView+DTFoundation.h in Headers */ = {isa = PBXBuildFile; fileRef = 79A77584AB3B92B2508AE0BCFCB8FD87 /* UIView+DTFoundation.h */; settings = {ATTRIBUTES = (Public, ); }; }; 4A13B4E5EA8616A8F09D90BC6EAEEA64 /* CTLineUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = D24FE8634A7AD2562DB8ADB9D4BBB36A /* CTLineUtils.m */; }; - 4BF1BA5BD126AB5ECBD0130C10C93853 /* ConstraintConstantTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F090A0289338B14050FAF16C22605B0 /* ConstraintConstantTarget.swift */; }; - 4C87D7B8BAEE30CEA143FA1DA19CA5D9 /* ConstraintLayoutGuideDSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4684B406B325B35F39322D75B59B6479 /* ConstraintLayoutGuideDSL.swift */; }; - 4CD2CB8177523DECCC13135D98589143 /* epub-bridge.js in Resources */ = {isa = PBXBuildFile; fileRef = 5814F6427B71252C21BD93957769C5E5 /* epub-bridge.js */; }; + 4B711340B48B16DAAC3BF45DFBE54907 /* SSAlertAnimation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D2EC0B845131A88247902AEA26F40AE /* SSAlertAnimation.swift */; }; + 4BFE0AAE22726EDD75809FC131FCFD70 /* NSData+DTCrypto.h in Headers */ = {isa = PBXBuildFile; fileRef = 02EDFE0EEA47398F3E1A361A73AF6A6C /* NSData+DTCrypto.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4CA8DC97A929C818E3A2F3910087EF42 /* Constraint.swift in Sources */ = {isa = PBXBuildFile; fileRef = A0EBAC7714A5F73B75AAB47D24B08B71 /* Constraint.swift */; }; 4DA6EC46F8968265B96C6D7B2260C4E5 /* DTTextBlock.m in Sources */ = {isa = PBXBuildFile; fileRef = ADC5AC8FD4EC45E9BA5654A38715BB93 /* DTTextBlock.m */; }; 4E4939F6592B06D2CA764DCACFB47871 /* NSString+Paragraphs.h in Headers */ = {isa = PBXBuildFile; fileRef = 83E37DC74BB53F90A5AD54842858A62F /* NSString+Paragraphs.h */; settings = {ATTRIBUTES = (Public, ); }; }; 4F50C703427747B88405080B221349A1 /* DTLinkButton.h in Headers */ = {isa = PBXBuildFile; fileRef = D7B5E61166782ED8D585D4FCEE2074DB /* DTLinkButton.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 502B1A3EDBA9258860A7AD719190E1D9 /* ImageIO.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FEB14A8F8170777DB7CCC3F27C8EA57A /* ImageIO.framework */; }; - 5033E56795E2CCD284B775455E763724 /* NSDictionary+DTError.m in Sources */ = {isa = PBXBuildFile; fileRef = C18480913E002315E3F5EC6945371697 /* NSDictionary+DTError.m */; }; + 4F72A091B13820692027231A4160F4C2 /* ConstraintInsetTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32A5ABB8F3656A110B955B0306E9A8C3 /* ConstraintInsetTarget.swift */; }; 5065D99E1588E8CC60677E74916A5C03 /* DTAttributedTextCell.m in Sources */ = {isa = PBXBuildFile; fileRef = E1F63A854BBF28E93AC1D3F71CD48CBE /* DTAttributedTextCell.m */; }; - 506A657DA6FB6A7FC0D94D045A529ACF /* RDEPUBModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = F50147CE0F16CD5D3D739C9F2B3D59DE /* RDEPUBModels.swift */; }; + 5091243AEA2930A8C64CEFA7311A40E1 /* DTFoundation-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = FCC718115E5C31C88A680522AE36B089 /* DTFoundation-dummy.m */; }; + 516F6FF776A9581887D1F57F706443B8 /* NSString+DTFormatNumbers.h in Headers */ = {isa = PBXBuildFile; fileRef = 6D86C7063D1128EAEB3A30EBEF214B3F /* NSString+DTFormatNumbers.h */; settings = {ATTRIBUTES = (Public, ); }; }; 51A1B5800D23C355B1712E8D1103780C /* DTTextBlock.h in Headers */ = {isa = PBXBuildFile; fileRef = D497C3CA364E37DAAFF2C3B90CC7DBE8 /* DTTextBlock.h */; settings = {ATTRIBUTES = (Public, ); }; }; 528DBAC7FCEFC7D6575C1F6CB4399AEA /* DTStylesheetHTMLElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 96FA99AA7D4AD0D4246C8DAC1CC0C24E /* DTStylesheetHTMLElement.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 52FFFBD88C4002194EE205CB9B256E30 /* RDEPUBTextLayoutFrame.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AF90A2265FF213E86C36E9BF188E429 /* RDEPUBTextLayoutFrame.swift */; }; - 53CE89622198F59EC48355CBEF799273 /* RDReaderView-RDReaderViewAssets in Resources */ = {isa = PBXBuildFile; fileRef = 83410CC9CF2ABE63B90A92F2F988BF65 /* RDReaderView-RDReaderViewAssets */; }; - 53F310A4B878E4F0473F88F51660EEDF /* RDEPUBReaderController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5863A9106B12E189BFC4B3EDBB1973F8 /* RDEPUBReaderController.swift */; }; + 5317C2808FB00E27D36A26E1C906470B /* ConstraintLayoutGuideDSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4684B406B325B35F39322D75B59B6479 /* ConstraintLayoutGuideDSL.swift */; }; 5582735073EBB9F5078E6E8AEEFB646A /* DTCoreTextLayoutLine.h in Headers */ = {isa = PBXBuildFile; fileRef = 64AB89EAB10148C39B726B26BE04F4F8 /* DTCoreTextLayoutLine.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5613FC5946D7167110DC46B4E502C573 /* RDReaderGestureController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9F6439BD7A3574E7B6875DD32EF4D741 /* RDReaderGestureController.swift */; }; - 57911195873C1E7A4B93CF96DC4C6E27 /* UIView+DTFoundation.h in Headers */ = {isa = PBXBuildFile; fileRef = 79A77584AB3B92B2508AE0BCFCB8FD87 /* UIView+DTFoundation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 55DD9BD86A13F34592D44EF4AE3D7B52 /* ConstraintDSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02CF362F88AB69253F1898E53D7A286A /* ConstraintDSL.swift */; }; + 56B02B75B28FA5F1CA7CE6FAE832F228 /* NSURL+DTUnshorten.h in Headers */ = {isa = PBXBuildFile; fileRef = 054674EB90C625BB4BEA9368ED92592B /* NSURL+DTUnshorten.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 56FB160F2030BA8EA8409795DDF90428 /* UIViewFrameExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = D8C351514678D41C58869BD057D5483F /* UIViewFrameExtension.swift */; }; + 57C933175F60BBD9A591DF8B881EC809 /* epub-fixed-layout.html in Resources */ = {isa = PBXBuildFile; fileRef = 7F47BD1AD90D0D7227EC3804CB2C2AE8 /* epub-fixed-layout.html */; }; 57D5228C8A85628772D4D78E7FBEAF3C /* DTDictationPlaceholderTextAttachment.m in Sources */ = {isa = PBXBuildFile; fileRef = 477A0FC2A1F0B7F7CCF72D201ECEBAB0 /* DTDictationPlaceholderTextAttachment.m */; }; - 584D3FD696D10185D861280A9B0DE914 /* RDEPUBFixedLayoutTemplate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 642B52DF95544C7DEE9C304D088CF51D /* RDEPUBFixedLayoutTemplate.swift */; }; - 58C21CC57CC53042312E2A81AAAE67AA /* UIApplication+DTNetworkActivity.h in Headers */ = {isa = PBXBuildFile; fileRef = 957DB4675D5CCBD3CB1762F08619F3F7 /* UIApplication+DTNetworkActivity.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 595C625184A2C2870D9649E95698CE12 /* RDReaderEndView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9283701EE51EAD75A7011E1E560FDBCA /* RDReaderEndView.swift */; }; + 5857BD9A2659F2F93F2F2314C68A05E9 /* ConstraintPriorityTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 882FA707ED3513D263A1E0656AAD2D33 /* ConstraintPriorityTarget.swift */; }; + 59066938787B3F1835305B4B9C935216 /* ConstraintViewDSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8E5637603691B9B35C2A886B686D3CE7 /* ConstraintViewDSL.swift */; }; + 5939419CF19EE16A2BD1C9E7BD482E1A /* NSURL+DTAppLinks.h in Headers */ = {isa = PBXBuildFile; fileRef = 557DA029E15EC99631B647AE8922007F /* NSURL+DTAppLinks.h */; settings = {ATTRIBUTES = (Public, ); }; }; 597DE4CDF5C674E269F03F6AA0AFFCC1 /* NSAttributedString+HTML.m in Sources */ = {isa = PBXBuildFile; fileRef = 92460D196C5300656C9649784EBD3C58 /* NSAttributedString+HTML.m */; }; - 5BE32E64223CE82FA4A900B0F13D944C /* ConstraintAttributes.swift in Sources */ = {isa = PBXBuildFile; fileRef = C9593E7B37569219F8D9A504B47707DC /* ConstraintAttributes.swift */; }; - 5CD0793FA512BE64BE568BF2069BFF27 /* RDEPUBParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F0841502401055DFD529A9786C79418 /* RDEPUBParser.swift */; }; + 5A25F0EE0E239F179E9D15607175DD63 /* Archive.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C8F0DCEAA5A3DF38C503CA30DC94C1C /* Archive.swift */; }; + 5ABA46799727B3391DF32044DD086BDC /* DTFoundationConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = FD03567681A79FFB6E81B3105503065D /* DTFoundationConstants.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5CCDB7E1619E66D77F3877C5875E25C7 /* Archive+Writing.swift in Sources */ = {isa = PBXBuildFile; fileRef = DF988440049800DB7824A94B81D20254 /* Archive+Writing.swift */; }; 5D03A5B9DC067875CFEC9D4EA7B059E8 /* DTCoreTextLayoutFrameAccessibilityElementGenerator.h in Headers */ = {isa = PBXBuildFile; fileRef = D863AE4F659A0F71B22DC9FF334DDF4E /* DTCoreTextLayoutFrameAccessibilityElementGenerator.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5D7515A84856B26E6F0D68A13FD99E10 /* NSString+DTFormatNumbers.h in Headers */ = {isa = PBXBuildFile; fileRef = 6D86C7063D1128EAEB3A30EBEF214B3F /* NSString+DTFormatNumbers.h */; settings = {ATTRIBUTES = (Public, ); }; }; 5D8D65121E87E419D8D2F23F8AF43673 /* DTColor+Compatibility.h in Headers */ = {isa = PBXBuildFile; fileRef = 80B3D15ED0D19D020663EF055386291A /* DTColor+Compatibility.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5E6CF58989951EEAEF91FE2CF90B7902 /* URL+ZIP.swift in Sources */ = {isa = PBXBuildFile; fileRef = 537BB06317FA188DF7A8A960152520E8 /* URL+ZIP.swift */; }; - 5E8806A50F77E5707B6050B5D877D8EF /* DTVersion.m in Sources */ = {isa = PBXBuildFile; fileRef = 4AF6156128A1A0CA24D9D06E346B9445 /* DTVersion.m */; }; 5E90EBD876ED4E50AB890FB56C4BFA57 /* DTHTMLParserNode.h in Headers */ = {isa = PBXBuildFile; fileRef = C8343CDCF82729A8EBCCA37A6650E34F /* DTHTMLParserNode.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5F3CC8E7C5DAEF103A730272E43EAA70 /* DTFolderMonitor.h in Headers */ = {isa = PBXBuildFile; fileRef = 2101691D5743105B2E3E40376584B91C /* DTFolderMonitor.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 601A35BA023A80B888C0B1615C4945DE /* ConstraintMaker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 60657D08CCDB38BFED30BD40F4720CE4 /* ConstraintMaker.swift */; }; + 5EA53D60B0C24989B91348B1350DC2D1 /* ZIPFoundation-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 4A06A36ADBE678DB44158D32E751FAFF /* ZIPFoundation-dummy.m */; }; + 5F7D5EB957828E8657530DBB033EB6EA /* SSAlertViewExtention.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2280F2302F54E90122747821FE681543 /* SSAlertViewExtention.swift */; }; + 5F87019EF9B64242F8644A03D18A2B87 /* DTActivityTitleView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4EEFAE80193E1F0DA53400C9AD641410 /* DTActivityTitleView.m */; }; 60532A2E06CCFF814933D2FAE6793AE9 /* DTCoreTextLayouter.h in Headers */ = {isa = PBXBuildFile; fileRef = C26DBE1150BC9A30B69839783E000358 /* DTCoreTextLayouter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 609B1D7C204655284FF2AC7D8CB3AC70 /* RDEPUBWebViewDebug.swift in Sources */ = {isa = PBXBuildFile; fileRef = 264D3D6CCA46CD555E458C17F6BEC460 /* RDEPUBWebViewDebug.swift */; }; 61BE3607EABD2657BC71AF8ACB1C25D4 /* DTHTMLAttributedStringBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B59C9A1B265393E4BA8383B308A5917 /* DTHTMLAttributedStringBuilder.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6318702950DA669233AA24BCDF1C3D30 /* RDReaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C803671F2CAE478CF422696554011E4F /* RDReaderView.swift */; }; - 64503FA8D1076A9BB628B9EA5A34DD93 /* NSMutableArray+DTMoving.h in Headers */ = {isa = PBXBuildFile; fileRef = B0AC307F12521444C973EA0DE38B4608 /* NSMutableArray+DTMoving.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 655AE9F36D60D94097486866EBC3AB57 /* ConstraintPriorityTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 882FA707ED3513D263A1E0656AAD2D33 /* ConstraintPriorityTarget.swift */; }; - 65FADAE11F685F04EDCC87C3AF75E120 /* FileManager+ZIP.swift in Sources */ = {isa = PBXBuildFile; fileRef = 27B7D3C6F0C845E3D42BBA613FFB0465 /* FileManager+ZIP.swift */; }; + 6335F55C18A585E2E2B9CBAEE154B648 /* RDEPUBAssetRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = F61A8DFA3305799C8739646FD400B495 /* RDEPUBAssetRepository.swift */; }; + 650C4E331160D891B5B2ACAB6CE9F557 /* ConstraintDescription.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6578DFAB51436E8DF266FD087700E26B /* ConstraintDescription.swift */; }; + 652C87BB289F6D2C0C6AC0DACBF43591 /* DTBase64Coding.h in Headers */ = {isa = PBXBuildFile; fileRef = B8E40E302B85493BDE0FE91F829EC01E /* DTBase64Coding.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 66166EB34D3554721D6FE8EB70D2E15B /* FileManager+ZIP.swift in Sources */ = {isa = PBXBuildFile; fileRef = 27B7D3C6F0C845E3D42BBA613FFB0465 /* FileManager+ZIP.swift */; }; 6634D568E49F5610242E1454680E5885 /* NSAttributedString+SmallCaps.h in Headers */ = {isa = PBXBuildFile; fileRef = DD189DA6054AAE2242F6644A2623B50E /* NSAttributedString+SmallCaps.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 670FAE2A4BBB7FD7219F4D4B8658864F /* RDReaderToolView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E4A20625A21D7316BDC2C08B3D7593F9 /* RDReaderToolView.swift */; }; - 67AB64233CF13B33E45E8E3A858F22E3 /* RDEPUBReaderDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8DE938647F6DF9F7935710F6D4DBD331 /* RDEPUBReaderDelegate.swift */; }; 67AE2AC8D9B961D45871077774E11FD3 /* DTObjectTextAttachment.h in Headers */ = {isa = PBXBuildFile; fileRef = 073A7F9DF1A554BD1B324EA9E0090E91 /* DTObjectTextAttachment.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 68AA68C1215B53D73BF956D53B61F432 /* SnapKit-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 9CE078B465FDEF40EC0469626A2C2469 /* SnapKit-dummy.m */; }; - 68D3E1A09DCCFBF7DCEB1412BCCEA210 /* SSAlertViewExtention.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2280F2302F54E90122747821FE681543 /* SSAlertViewExtention.swift */; }; + 68341B3169494A21A1B419AFA1DF652B /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B50104DE2E35D820ECA22CDB3E6F96EA /* Foundation.framework */; }; 69674FEA70899F07BE6098AAEC849978 /* DTAccessibilityViewProxy.m in Sources */ = {isa = PBXBuildFile; fileRef = 43CFADE0F46014990052AD67F17C86FF /* DTAccessibilityViewProxy.m */; }; - 6A8B278C528FED70B045F0A33AB4B3CA /* NSMutableArray+DTMoving.m in Sources */ = {isa = PBXBuildFile; fileRef = 53499F40E1790A6CBE8AFEB3AC5BEFC8 /* NSMutableArray+DTMoving.m */; }; - 6A928B256860425CF3C61592BD0642CF /* NSArray+DTError.m in Sources */ = {isa = PBXBuildFile; fileRef = 73940D215D644B6815A09DA802CFBDDF /* NSArray+DTError.m */; }; - 6AFC33684AE2B95CEAA5F24BB8F3E498 /* DTFoundation-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FAB3C7F19A511C2B1B7DFBA3CA308C4 /* DTFoundation-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6E36C0DD65546668F59E74F48121BBCE /* NSString+DTPaths.m in Sources */ = {isa = PBXBuildFile; fileRef = A3565FEE19F19CB43A43409AFFF2BD2C /* NSString+DTPaths.m */; }; + 6A70936CDC3B178976FFE24E63AAD354 /* RDEPUBPublication.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9F596AE7A8707C4D27AD9ABE552C6C59 /* RDEPUBPublication.swift */; }; + 6C73F94B5C73FBE0C06678707B5DC77F /* DTPieProgressIndicator.m in Sources */ = {isa = PBXBuildFile; fileRef = 5DA1E8494B86FFD79C639DCB8C21E1BB /* DTPieProgressIndicator.m */; }; + 6C99D26D2589D26461CE7EDA02676075 /* RDEPUBReaderSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 178D1E4BA4980627DBDDD27A035D98EF /* RDEPUBReaderSettings.swift */; }; + 6CF2260408BBD6B12C40E62D1D9CFBF3 /* DTVersion.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BD9F2023FF826F67E69E3407A70A8A6 /* DTVersion.h */; settings = {ATTRIBUTES = (Public, ); }; }; 6E3D0FDD78ECC20F4B3697ED21D64224 /* MediaPlayer.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4C2B218B5EAA5831A036BBF7E1EFC1B9 /* MediaPlayer.framework */; }; - 6F1FCD907B0CEFF17054F80A9983F5AA /* RDEPUBParser+Archive.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F1D00374FF48425EE72CF7A117BA5CC /* RDEPUBParser+Archive.swift */; }; + 6E6AF65D6FD1082D14D897B70FC6E2D2 /* RDEPUBReaderTopToolView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1D87EC99EB119D764849BD1E582C7D06 /* RDEPUBReaderTopToolView.swift */; }; + 6E7C5CAB02BA409743CFF48D5218D68D /* NSURL+DTComparing.h in Headers */ = {isa = PBXBuildFile; fileRef = 731C0C61E3AD227D691FBA1C2C17BF7B /* NSURL+DTComparing.h */; settings = {ATTRIBUTES = (Public, ); }; }; 6FA0125F16DDEDAD341DB75DEB084F4B /* DTHTMLWriter.m in Sources */ = {isa = PBXBuildFile; fileRef = E16D20FA492E085BD0871B107B3077B7 /* DTHTMLWriter.m */; }; - 7023C35A3056FF0E5401DD8CE47EB02E /* ConstraintView+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6DB34ACB132E465CDF8191F7DB71EF6 /* ConstraintView+Extensions.swift */; }; 7027EF8D77D4082C1BB9B80FF61FCADC /* DTCoreTextLayoutFrame+Cursor.h in Headers */ = {isa = PBXBuildFile; fileRef = 28043173CA3B3787DC401ACEB5398108 /* DTCoreTextLayoutFrame+Cursor.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 707121640F9C2DCBB05B60D20EDB2CC1 /* NSArray+DTError.h in Headers */ = {isa = PBXBuildFile; fileRef = CEA93EDA6ED54D374265AA5D6B9EBBA9 /* NSArray+DTError.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 70842C59A29DA75B9D42AF0863043578 /* SSAlertCommonView.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE4EE750340347ED584C5A2C1164331A /* SSAlertCommonView.swift */; }; + 70952AD584BE1EAABAFE3C6DD47865DE /* DTTiledLayerWithoutFade.h in Headers */ = {isa = PBXBuildFile; fileRef = DF5EDCA3B21964D0462BE0982E2F0BF8 /* DTTiledLayerWithoutFade.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 710A1F70CC5FDB1C54EACF92B4D990D9 /* LayoutConstraintItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E8C0D83EB6EDE71B264B6B0DD4644F5 /* LayoutConstraintItem.swift */; }; + 712370237E48CF01BC1C6E7E764F4015 /* DTSmartPagingScrollView.m in Sources */ = {isa = PBXBuildFile; fileRef = 96EEB6B022E22A4ABC86D87469D4815B /* DTSmartPagingScrollView.m */; }; + 72BA060C1C2B29E6F76C5923BC45DD3F /* NSArray+DTError.m in Sources */ = {isa = PBXBuildFile; fileRef = 73940D215D644B6815A09DA802CFBDDF /* NSArray+DTError.m */; }; 730ACB99580C5982DC08D50FC5084D41 /* DTAttributedTextView.h in Headers */ = {isa = PBXBuildFile; fileRef = A276DE925253460239BFAEC7663F60D3 /* DTAttributedTextView.h */; settings = {ATTRIBUTES = (Public, ); }; }; 7459A1656EDC29D685073B83561B783E /* NSNumber+RomanNumerals.h in Headers */ = {isa = PBXBuildFile; fileRef = 8552BE1A1F6A6D2879763DE3B2B8A2DD /* NSNumber+RomanNumerals.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 750F96C034751A3373A9BA6F990585B7 /* RDReaderEditView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A42C1076ED8123D5A0DB51530B2E4105 /* RDReaderEditView.swift */; }; - 77525198C94D40A5ADCB6FF025B0DDC8 /* RDEPUBJavaScriptBridge.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3F53156C1740538E2577CD8931C1C2F2 /* RDEPUBJavaScriptBridge.swift */; }; - 776B82036BE500048310C53BE5660749 /* DTHTMLParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 0D75FEDE65722CF41F7F32A164376926 /* DTHTMLParser.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 77F480039359E619AB5D0DF13C20A730 /* DTCustomColoredAccessory.m in Sources */ = {isa = PBXBuildFile; fileRef = 0C6BE3B2DA9A8C4CD3760CDAD6F305A5 /* DTCustomColoredAccessory.m */; }; + 7472100778E71912C37D22EBC4895FF3 /* Archive+WritingDeprecated.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98C7359A7C3FC7675FED220200A43A17 /* Archive+WritingDeprecated.swift */; }; + 752B74E15CF0FD1F56043470AD23C602 /* DTPieProgressIndicator.h in Headers */ = {isa = PBXBuildFile; fileRef = 1B443D035BA5652B03A41BE905C5AC17 /* DTPieProgressIndicator.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 75B39488A594591F53B48AEB9121FAD2 /* RDEPUBReadingModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDD70A0AF6652B8B142FE99A2E3BFCFE /* RDEPUBReadingModels.swift */; }; + 7619C2726F04F3217F63C597C69BA011 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B50104DE2E35D820ECA22CDB3E6F96EA /* Foundation.framework */; }; + 776701E3D6C8347A9A8727DD1C0A2057 /* ZIPFoundation-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = D927F128EBF26AD2C61FD0E6B6F6F5ED /* ZIPFoundation-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; 7821105EF320619993B3BF7FB90C7ADA /* DTCSSStylesheet.h in Headers */ = {isa = PBXBuildFile; fileRef = 3B610E558C4917C4257DC198EAFEE2F6 /* DTCSSStylesheet.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7855E6B91A9A7BBE78110F56E7551661 /* UIView+DTFoundation.m in Sources */ = {isa = PBXBuildFile; fileRef = 4219E7C32019899890CAB66E5FBDF524 /* UIView+DTFoundation.m */; }; + 78B4D94D1FD3726A02C1ED8FEE039C22 /* RDEPUBJavaScriptBridge.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC270D100F485EEEB920AB37D4476FB3 /* RDEPUBJavaScriptBridge.swift */; }; 78D24D82D98D77E744FF73C9040618A8 /* DTHTMLParserNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 11B604FC3B0D5C91FEA763DCC0BE4DC5 /* DTHTMLParserNode.m */; }; + 790F591F6FBBF7C3D96992967CAD376F /* RDEPUBResourceResolver.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49708F53EFFC5069D69D7BDBE145D5CB /* RDEPUBResourceResolver.swift */; }; + 7912E2B42F9391E4EA65BAF15B15F896 /* RDEPUBWebView+Reflowable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3B52BDF13EFDE5C61F7A1B1FF5B79F02 /* RDEPUBWebView+Reflowable.swift */; }; 7A48CDFB40202EFD09A2A9AB0EE0770D /* DTCoreTextFontDescriptor.h in Headers */ = {isa = PBXBuildFile; fileRef = 56489D9BA834497E48438A4B4E1CCCFF /* DTCoreTextFontDescriptor.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7B34D900828BEC759105BC26F048790F /* DTFolderMonitor.h in Headers */ = {isa = PBXBuildFile; fileRef = 2101691D5743105B2E3E40376584B91C /* DTFolderMonitor.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7B6E5A0F2FC3FDB0CC0E70246D29C486 /* DTCustomColoredAccessory.m in Sources */ = {isa = PBXBuildFile; fileRef = 0C6BE3B2DA9A8C4CD3760CDAD6F305A5 /* DTCustomColoredAccessory.m */; }; 7C05F56B62B15EFF344C5CDE4A52B8FB /* DTHTMLElement.m in Sources */ = {isa = PBXBuildFile; fileRef = 1D4C9B7ED5E04C216AB28E3A4065C1C5 /* DTHTMLElement.m */; }; - 7C5EA82AF4E5712D1015E35DB81338E4 /* Data+Compression.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5964AF1336E2F0DA0E2C32991E76C78C /* Data+Compression.swift */; }; + 7CBCCA6CA9877B5B485B3321929131AD /* ConstraintView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A02EA0374C693F881AB36202FB276DCD /* ConstraintView.swift */; }; 7D29C0A53AB1B4C1B257D46EBBDC9DA3 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B50104DE2E35D820ECA22CDB3E6F96EA /* Foundation.framework */; }; - 7E00928144BADF78965A4074BBE2225B /* RDEPUBParser+Resources.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A9B2DE1872018CD5707B3815621E71F /* RDEPUBParser+Resources.swift */; }; - 7E6B673B451CC71F4E28C93D533A82CA /* ConstraintDirectionalInsets.swift in Sources */ = {isa = PBXBuildFile; fileRef = 91144FC099DD458E61625CD939577DAA /* ConstraintDirectionalInsets.swift */; }; + 7F3C9504CE51675D8526B0C8049F6376 /* RDEPUBPageLayoutSnapshot.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5931AEB1E931A7219B0643093173E4B1 /* RDEPUBPageLayoutSnapshot.swift */; }; 7F9CC306B17D409DB903DF850FEDA64C /* DTListItemHTMLElement.m in Sources */ = {isa = PBXBuildFile; fileRef = F7B0087DE7C394A677F5883541AB4FB7 /* DTListItemHTMLElement.m */; }; - 7FEDE56E5BC44A13164CC403BF0828F4 /* NSURL+DTComparing.h in Headers */ = {isa = PBXBuildFile; fileRef = 731C0C61E3AD227D691FBA1C2C17BF7B /* NSURL+DTComparing.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7FDAEFDFE0E3207DFD5A7B41A5D6D6A6 /* NSString+DTPaths.m in Sources */ = {isa = PBXBuildFile; fileRef = A3565FEE19F19CB43A43409AFFF2BD2C /* NSString+DTPaths.m */; }; + 807DCEB839DA036D9FCD04FB6AE9A7CC /* NSURL+DTComparing.m in Sources */ = {isa = PBXBuildFile; fileRef = 9BFCAC7C2AEA867E67C63A852576774F /* NSURL+DTComparing.m */; }; 8099F1E613A15275EF5FC59ED3C73579 /* NSAttributedString+HTML.h in Headers */ = {isa = PBXBuildFile; fileRef = 2D3D7C8444F58D9B3FCB4F3006D2CFBA /* NSAttributedString+HTML.h */; settings = {ATTRIBUTES = (Public, ); }; }; 811D7CBCD710AE45FF80A4B05BFE444C /* UIFont+DTCoreText.m in Sources */ = {isa = PBXBuildFile; fileRef = 13E1548FC42118F1A4164739DE6BE4E9 /* UIFont+DTCoreText.m */; }; - 81392F89518BD9156914EDA6F365A368 /* Constraint.swift in Sources */ = {isa = PBXBuildFile; fileRef = A0EBAC7714A5F73B75AAB47D24B08B71 /* Constraint.swift */; }; + 8136892B4CED3C9F5693FCC921ED6014 /* RDEPUBDTCoreTextRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 749ECE28D47716A820DFDFAE1C9E294D /* RDEPUBDTCoreTextRenderer.swift */; }; 814D0D63E5FD4AB7231E63064FE9EB5C /* NSAttributedString+DTDebug.m in Sources */ = {isa = PBXBuildFile; fileRef = BF4F3EC137168B92A5DA85AF50CD239F /* NSAttributedString+DTDebug.m */; }; - 8164A4848BC14152FDF449DADDF92A8A /* DTFoundationConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = FD03567681A79FFB6E81B3105503065D /* DTFoundationConstants.h */; settings = {ATTRIBUTES = (Public, ); }; }; 81905A7717925A17E6B98E934A75B8BA /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0834E84632886CDD9911CAB76183F1CE /* QuartzCore.framework */; }; 82119A0DC4981CC2AF389C7C4CC08186 /* DTListItemHTMLElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 98658510AA525496EBF5792E5D9884ED /* DTListItemHTMLElement.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 82CEA6913EFFCCED6B98AC2BCAE0A5EC /* DTCustomColoredAccessory.h in Headers */ = {isa = PBXBuildFile; fileRef = 33DB57DF8C5AE334B1BBE9F989352F1D /* DTCustomColoredAccessory.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 837E032420CD913BC5F1072122B4F3F9 /* DTLog.h in Headers */ = {isa = PBXBuildFile; fileRef = 6A1EBB9497F4846C84CA0BF5E4F84FC7 /* DTLog.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8237C1DEFAFDF60BF4B7180EE80E0493 /* RDURLReaderController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8CC598DC4A28E4CD6EF8AA1BDBED7D2D /* RDURLReaderController.swift */; }; 83A4BC9FE4765C9B848DD4925D99F362 /* DTAccessibilityElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 99299A9FD6EF739D18352AC5B9325CB0 /* DTAccessibilityElement.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 84430BC311162C1FC54D47C5B2E7B112 /* UIScreen+DTFoundation.h in Headers */ = {isa = PBXBuildFile; fileRef = A3765B289CB7E6C5DF6160D8EBC83C3C /* UIScreen+DTFoundation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 85144D4B5699EE46A3019CB97F227166 /* NSURL+DTUnshorten.m in Sources */ = {isa = PBXBuildFile; fileRef = C80065DBA5634DAA71129404975D7349 /* NSURL+DTUnshorten.m */; }; + 852D45A539C10E1089633476FA1BF72F /* DTFoundationConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BD568D38C209BA1CC0EBFA809A35204 /* DTFoundationConstants.m */; }; + 86B08C25B03944090A4196B7EC75BD4D /* ConstraintLayoutSupportDSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = F5B34EE2160C27947D1EEFD42184CF5D /* ConstraintLayoutSupportDSL.swift */; }; 8A0A0FB23DB0021ADC9AD0D90631883A /* NSMutableString+HTML.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C6293E97E128E98559FB74D9A342EAD /* NSMutableString+HTML.h */; settings = {ATTRIBUTES = (Public, ); }; }; 8A35CC67F0AA6B26397C10D756EA34E8 /* DTTextHTMLElement.h in Headers */ = {isa = PBXBuildFile; fileRef = FB2ABB1D297442D91AA42F1407DB4A58 /* DTTextHTMLElement.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8A9FE5BF5D0F11AF4BB5FC428D3405FE /* UILayoutSupport+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C647A2EB2720BCBF88B160D124B57BF /* UILayoutSupport+Extensions.swift */; }; 8AC90941E71199090BCED76DE89EFB60 /* DTAttributedTextView.m in Sources */ = {isa = PBXBuildFile; fileRef = 77A613841EB90827AF321DD50B21DB5D /* DTAttributedTextView.m */; }; 8B405CE13E7D718A9340A82B52766AB2 /* NSCharacterSet+HTML.h in Headers */ = {isa = PBXBuildFile; fileRef = 75FA8E843D9225BD65EB9D17825EC0F4 /* NSCharacterSet+HTML.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8DA3D4CF85CC1776E58E21CBC63EF449 /* RDReaderCommon.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA181DAFB74B541D9856647CD227A813 /* RDReaderCommon.swift */; }; + 8BE89C6E06DB76798A757F2F0CF95AA9 /* ConstraintAttributes.swift in Sources */ = {isa = PBXBuildFile; fileRef = C9593E7B37569219F8D9A504B47707DC /* ConstraintAttributes.swift */; }; + 8C514EA67EF511F82BED7E0D07FB3D02 /* RDEPUBWebView+JavaScriptBridge.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5AC9A769CBC46F65ECAE32EAD0F196B6 /* RDEPUBWebView+JavaScriptBridge.swift */; }; + 8CB79CDF6D245B7ECD4762E30F742545 /* NSString+DTFormatNumbers.m in Sources */ = {isa = PBXBuildFile; fileRef = 1ACA5E519F100582F0D772FCD76125C0 /* NSString+DTFormatNumbers.m */; }; + 8DBBF8ACAED4591294503366E9309DD7 /* RDEPUBReaderDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 114B1402AFD8DC2B76F64E2A702FF5EC /* RDEPUBReaderDelegate.swift */; }; 8E8726381CBCFB1EDB350183456D4EF7 /* DTHTMLParserTextNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 13AB6A32A293E3DC21A7047C6DB958CA /* DTHTMLParserTextNode.m */; }; - 8F32BDF151727ABDBCA7DA71FF2AF51D /* RDEPUBParser+Package.swift in Sources */ = {isa = PBXBuildFile; fileRef = BCCC92CE5B8DB2389EFEC1715B72E56E /* RDEPUBParser+Package.swift */; }; - 8F42BB7442552CDB69232D0FBD9A9228 /* RDEPUBTextRendererSupport.swift in Sources */ = {isa = PBXBuildFile; fileRef = 42BA21BD7D701376F3EE3EDE8DDAAD1A /* RDEPUBTextRendererSupport.swift */; }; - 8FC6A1E3022D83FA9D6930D0E1556401 /* RDEPUBRenderRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 20E401E01605056D23F4A3345AEAE066 /* RDEPUBRenderRequest.swift */; }; - 9046691B08F5E42ED792259C83DED239 /* Data+Serialization.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3DC78D0B0F37BF9AD1058CACA9AAF9BE /* Data+Serialization.swift */; }; - 91A9AFD5B7BE0756A4E57A75AA62C170 /* RDReaderManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B58F5EFAD7D9727BD8DC7BE81B09B9D /* RDReaderManager.swift */; }; - 91D5532B0FC54915B026853E9DB9A5D6 /* Data+CompressionDeprecated.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4D641809A99849F80FDCB02F8CE8D6A0 /* Data+CompressionDeprecated.swift */; }; + 90AC69AC4EBE7EE54AF3C57F6A9C1338 /* SSAlertSwift-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 2DE4FA5133891593CB45AF36B8EBF60C /* SSAlertSwift-dummy.m */; }; + 90FD859AE0F48677673C091645657C80 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 53D473C6F07982D3D25781A343EC5A99 /* PrivacyInfo.xcprivacy */; }; + 910E6231340C7EC7B59EEAE300B4C9DE /* SnapKit-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 9CE078B465FDEF40EC0469626A2C2469 /* SnapKit-dummy.m */; }; + 9140D603032BA04797811C739821C2DC /* RDEPUBWebContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 586127E2E5DFA220EAB96633512B3DF3 /* RDEPUBWebContentView.swift */; }; + 916313DF0E690AD86DE2126CB2027880 /* DTAnimatedGIF.h in Headers */ = {isa = PBXBuildFile; fileRef = A9FBC69C7DA29A7283920FDA9EBBCE8A /* DTAnimatedGIF.h */; settings = {ATTRIBUTES = (Public, ); }; }; 91FDA47810CE5CE2C48AED9205AE89B5 /* DTStylesheetHTMLElement.m in Sources */ = {isa = PBXBuildFile; fileRef = DA25968B7C9A40031DA45BB328EA8A2E /* DTStylesheetHTMLElement.m */; }; + 922286D89E1F6F86F3876FD0EFFE4002 /* ConstraintMakerRelatable+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = ECFE19508E12BF8B0B52E8CB4F724217 /* ConstraintMakerRelatable+Extensions.swift */; }; 92C59F96D443525E8833676479FA60C5 /* DTVideoTextAttachment.h in Headers */ = {isa = PBXBuildFile; fileRef = 73A99927E52B24583A6A2CF7E6F23848 /* DTVideoTextAttachment.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 9390C501C84065ED158067C716D2A000 /* DTBase64Coding.h in Headers */ = {isa = PBXBuildFile; fileRef = B8E40E302B85493BDE0FE91F829EC01E /* DTBase64Coding.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 94AF9378D2748A9AAF896797E3558994 /* RDReaderController.swift in Sources */ = {isa = PBXBuildFile; fileRef = CFED6323FA0DAECA37182F168CADE220 /* RDReaderController.swift */; }; + 948D7F9528860715954579106312B012 /* RDEPUBRenderRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04B40D87ADCB26B8270415FAA057AACB /* RDEPUBRenderRequest.swift */; }; + 94B1E7C8F5A10584F39D7CAE59E49801 /* NSString+DTURLEncoding.m in Sources */ = {isa = PBXBuildFile; fileRef = CB7F3535507F56824BA21509302CF8B3 /* NSString+DTURLEncoding.m */; }; 94F5846979DBC90E2B646E975F5ECBA8 /* DTHTMLWriter.h in Headers */ = {isa = PBXBuildFile; fileRef = 6B96B0998B49D8E149C995474DA5FE5F /* DTHTMLWriter.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 957C9375185A452D0B1A7BF4CD8F40A4 /* Typealiases.swift in Sources */ = {isa = PBXBuildFile; fileRef = 945D4549E0B9168D7DDB910DE874B874 /* Typealiases.swift */; }; 96507B8910C8C9DE0B221CFF0E8518D0 /* Pods-ReadViewDemo-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = EBA0272559B0F7FAD8AC670AC7431188 /* Pods-ReadViewDemo-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 9665911A01848B4658F6DD00460BB9DC /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B50104DE2E35D820ECA22CDB3E6F96EA /* Foundation.framework */; }; - 9794756327AD1842DF177DDDC7938544 /* Debugging.swift in Sources */ = {isa = PBXBuildFile; fileRef = D495E2AB1223BD4D4909F8FF1FF47DAF /* Debugging.swift */; }; - 97C17065E4DF1D032EB1A28E71B994AC /* NSString+DTUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = DCECDBD73595CA88A2208000B4B68352 /* NSString+DTUtilities.m */; }; + 96ACAABF6BCAE1D6A957F7C5A5B291CA /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B50104DE2E35D820ECA22CDB3E6F96EA /* Foundation.framework */; }; + 9817C19157DE66A9BD607AA3931E5325 /* RDEPUBReaderToolView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5E372F6B632B54653CBA022D20FB3367 /* RDEPUBReaderToolView.swift */; }; 9854DC3F1763B6272C2EA3FC6EC40B95 /* NSAttributedStringRunDelegates.h in Headers */ = {isa = PBXBuildFile; fileRef = E20272295EC253826AEE1F83A15D47C5 /* NSAttributedStringRunDelegates.h */; settings = {ATTRIBUTES = (Public, ); }; }; 987538B07E11741899878EA8BC947F51 /* NSCoder+DTCompatibility.h in Headers */ = {isa = PBXBuildFile; fileRef = 354C5DD0ACC742762200A640ADA859C6 /* NSCoder+DTCompatibility.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 98A581201B38BE408DF45B4151784877 /* FileManager+ZIPDeprecated.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04F9B298989305B9569B71E448E8C1D4 /* FileManager+ZIPDeprecated.swift */; }; 9917E9B804CD33AF3BE2A992A3510C97 /* NSNumber+RomanNumerals.m in Sources */ = {isa = PBXBuildFile; fileRef = B7672A26922DBD934FA1AC60D49EB322 /* NSNumber+RomanNumerals.m */; }; 992B7C8C824B5EA190EF1DB096064DB7 /* DTDictationPlaceholderTextAttachment.h in Headers */ = {isa = PBXBuildFile; fileRef = F9A2565B302334B662AB51DCF8E65EEE /* DTDictationPlaceholderTextAttachment.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 99975BFB806AEA2B17A03F91182EAB4E /* NSArray+DTError.h in Headers */ = {isa = PBXBuildFile; fileRef = CEA93EDA6ED54D374265AA5D6B9EBBA9 /* NSArray+DTError.h */; settings = {ATTRIBUTES = (Public, ); }; }; 9B199D71D2F48B2055A7FDF9BD7051CC /* NSString+CSS.m in Sources */ = {isa = PBXBuildFile; fileRef = E27C503C8128BC3CE109FFE077AEF325 /* NSString+CSS.m */; }; - 9B52DF773933891D81C7443869D6CC1B /* ConstraintMakerPrioritizable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E138EC76D0DF24544D29D1A4D7429E3 /* ConstraintMakerPrioritizable.swift */; }; + 9BAD2444EA7739384CC2A7353A214B0D /* Entry.swift in Sources */ = {isa = PBXBuildFile; fileRef = BDD081272B47A3B73CE693D21DC26827 /* Entry.swift */; }; 9BD146F72B29C703798001F138B069C2 /* NSCoder+DTCompatibility.m in Sources */ = {isa = PBXBuildFile; fileRef = 9129D37C7F89AD8FD530663BB4503FC0 /* NSCoder+DTCompatibility.m */; }; - 9C49F7E0F38CB092455FE48289EAB3D9 /* ConstraintLayoutGuide+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5A9A82CB094636AFB53D6D130D6219BA /* ConstraintLayoutGuide+Extensions.swift */; }; + 9D360F6B48A691B42343D7DB4CD973AB /* NSString+DTURLEncoding.h in Headers */ = {isa = PBXBuildFile; fileRef = 31BD7533867336DEA9B835F471767178 /* NSString+DTURLEncoding.h */; settings = {ATTRIBUTES = (Public, ); }; }; 9DE04C83A68C7512C0A860FFF5CEC113 /* DTCoreText.h in Headers */ = {isa = PBXBuildFile; fileRef = 53F98F0F060B066CAFBCD3C85C26B2B4 /* DTCoreText.h */; settings = {ATTRIBUTES = (Public, ); }; }; 9E4AB71DE8B3E7218B53B2C8EF6B843A /* DTAttributedTextContentView.m in Sources */ = {isa = PBXBuildFile; fileRef = F0D72C5680EBE6CA716EE77281AA4436 /* DTAttributedTextContentView.m */; }; + A0A17EBE6BE92D7B152E9FB2FE0C013A /* RDEPUBNavigatorLayoutContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = 87EBF2D16BA02CD25CD1367A4F7026BB /* RDEPUBNavigatorLayoutContext.swift */; }; A132A0C9EB13B65FB886B11AA2E6304C /* NSDictionary+DTCoreText.h in Headers */ = {isa = PBXBuildFile; fileRef = 27205D159B39090908CA0E9C3997B784 /* NSDictionary+DTCoreText.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A253C9DB104E33942633BCECDCFD08BF /* RDEPUBSearchEngine.swift in Sources */ = {isa = PBXBuildFile; fileRef = 35D6A841E33C5FB20FE0A8999084F939 /* RDEPUBSearchEngine.swift */; }; + A13631B78D3686CCBB05AFFA9A9BB1E4 /* Archive+ReadingDeprecated.swift in Sources */ = {isa = PBXBuildFile; fileRef = 934F9BB2B3A313294F121484C3A97A14 /* Archive+ReadingDeprecated.swift */; }; + A1DC5CA85CD9DCBCD24E2066426AE72A /* ConstraintMakerFinalizable.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0B32EA4B7A492EEF26CE260E9AEFA0B /* ConstraintMakerFinalizable.swift */; }; A2CA9C27EB2B77637A12723F8CFE7AAB /* NSString+HTML.m in Sources */ = {isa = PBXBuildFile; fileRef = 4428633C8EC3F6289CCF376F588CE0C4 /* NSString+HTML.m */; }; A30D5C1E413A3D319A83D3410A8A549F /* DTCoreTextParagraphStyle.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F760D62F6C6F083374702146337F2CB /* DTCoreTextParagraphStyle.m */; }; - A3384B5355ABB59CE409F412B47B905A /* DTFolderMonitor.m in Sources */ = {isa = PBXBuildFile; fileRef = B245F7E143F3091652C64F6593E33F7A /* DTFolderMonitor.m */; }; - A38609882E97C006B085419AA7664BB4 /* NSDictionary+DTError.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FC368BD2A8D266EB771E5FB9A5A5B3C /* NSDictionary+DTError.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A4B88D8D1171124A42962E8D49DB6AEE /* DTBase64Coding.m in Sources */ = {isa = PBXBuildFile; fileRef = 061BD3911E4E530C792E65CED7868C33 /* DTBase64Coding.m */; }; - A5400AE6A717A45B250401FE7C77219E /* RDEPUBWebView+Search.swift in Sources */ = {isa = PBXBuildFile; fileRef = FB7C4CBF5F5A017C5CFA8208247F39B8 /* RDEPUBWebView+Search.swift */; }; - A584EC5BB6EE1ABA8F720E9790C1A791 /* RDEPUBResourceURLSchemeHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8A364960A519577D66C4536227B2261D /* RDEPUBResourceURLSchemeHandler.swift */; }; - A5BFFBDBE3C5F4F12FD417759BB6E166 /* ConstraintRelation.swift in Sources */ = {isa = PBXBuildFile; fileRef = D3593ADF561D422F73C8EABAD4A4F440 /* ConstraintRelation.swift */; }; + A361BD208575C1F9519EBD2A7987D353 /* RDEPUBParser+ReadingProfile.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9DE1E0CEE577C4985CB816FDA2AFDA3F /* RDEPUBParser+ReadingProfile.swift */; }; + A38360C4EBCCE4450D52F7B9CE4F6D8D /* DTBase64Coding.m in Sources */ = {isa = PBXBuildFile; fileRef = 061BD3911E4E530C792E65CED7868C33 /* DTBase64Coding.m */; }; + A6CCC9339127977A4582A5AFFD2035E5 /* RDPlainTextBookBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 034E4400505DA6AC50F9D93914301F45 /* RDPlainTextBookBuilder.swift */; }; A72E9F983E5BBFA7485EFB482B80E89E /* DTWeakSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = 5155CCDD61E030184249A020FE5D74B0 /* DTWeakSupport.h */; settings = {ATTRIBUTES = (Public, ); }; }; A7D665BBDADBE3D64023FF52E218FCFA /* DTCoreTextConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = B2B3D0CB47B0A8E9EC5AF48B7F2DD6B0 /* DTCoreTextConstants.m */; }; - A84A592630C3AD92B8A4573E70FEB997 /* RDEPUBTextLayouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1030C3F7928F1D26875118AA9E6328CC /* RDEPUBTextLayouter.swift */; }; - A9D583EB26D1E604D466C9C1D9DECA52 /* ConstraintMakerRelatable.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD768C27E392C934C06DFB4AC401037C /* ConstraintMakerRelatable.swift */; }; AA3722CC8B4992EDA8A9F5E9116835B7 /* DTCoreText-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 015F3EE69253C66E11B931E3360BA5FE /* DTCoreText-dummy.m */; }; - AB309F24A7B20345C39F1715CBE06973 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B50104DE2E35D820ECA22CDB3E6F96EA /* Foundation.framework */; }; - AB88558953805E03A0C043B8C1D9AB1E /* RDEPUBWebView+Configuration.swift in Sources */ = {isa = PBXBuildFile; fileRef = E5EF1E546716198DA3F842D520EABDF3 /* RDEPUBWebView+Configuration.swift */; }; + ABC61D4F3EAE00629A5CD56CCEDEC8D8 /* RDEPUBWebView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37D54A0CE6965D4142DB16CE54293F16 /* RDEPUBWebView.swift */; }; AC7000465258822B466855B12F1F97A3 /* DTCoreTextGlyphRun.h in Headers */ = {isa = PBXBuildFile; fileRef = 49A21AE1A0AB5383F895B34EA7D6973D /* DTCoreTextGlyphRun.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AE2E9B84461C139566575F4A4FC257BD /* ConstraintLayoutGuide.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E6BA0ECCB0ACF8580C3B5192CA9F11B /* ConstraintLayoutGuide.swift */; }; + AD517D4065385465763EC380F2F12210 /* DTExtendedFileAttributes.h in Headers */ = {isa = PBXBuildFile; fileRef = 538572A5C098252D629F2185F1B1C9E8 /* DTExtendedFileAttributes.h */; settings = {ATTRIBUTES = (Public, ); }; }; + ADC19D506FE3D818BB4A2C0889F43DBC /* RDEPUBTextBookCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = 57A61F7A5E8A862AB61CC09109D9E81E /* RDEPUBTextBookCache.swift */; }; + AE9DBB66E3281E810742770F88E04078 /* RDReaderFlowLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = CF89E84A24C211E605EDA599629D3CA1 /* RDReaderFlowLayout.swift */; }; + AF5E5ED905BF79ECA8E838CC7DB39673 /* RDEPUBReaderPersistence.swift in Sources */ = {isa = PBXBuildFile; fileRef = E2D1BAA539790DA3C1EA46236EEEA14E /* RDEPUBReaderPersistence.swift */; }; AF7A1DC953992A149CB0815C90769529 /* DTIframeTextAttachment.h in Headers */ = {isa = PBXBuildFile; fileRef = 3B931AB189BDDE2CCE8578B50BD60AF0 /* DTIframeTextAttachment.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AFDB92359CF646B7441BAB9058164D1B /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B50104DE2E35D820ECA22CDB3E6F96EA /* Foundation.framework */; }; - B04544815C66022E2340CC310F5C0229 /* RDEPUBTextPaging.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3D72E6224669305A4D5B7706034F3B54 /* RDEPUBTextPaging.swift */; }; - B104B0AFE56ED4C5FE9011D9C59C42A2 /* RDEPUBWebView+FixedLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = EF6CD9301E24937522B95FEAE873312F /* RDEPUBWebView+FixedLayout.swift */; }; - B224E89A4C6948BBAF5EB39658FE69C7 /* Archive+ZIP64.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED5693BD171B879406EA14C97F4AD8D8 /* Archive+ZIP64.swift */; }; + AFF930A701A1822364C2C86FD8636D74 /* SSAlertView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F410ED25E4E84C3D5166261CDF4B58F2 /* SSAlertView.swift */; }; + B02240DE23EEB84EEAC33F34ABD35184 /* RDEPUBReaderController.swift in Sources */ = {isa = PBXBuildFile; fileRef = FDA0CBC0DF8A08DDB5F0FE3812677CC9 /* RDEPUBReaderController.swift */; }; + B0FA52DE4CFAD71D0DEB6397C606BE5B /* ConstraintLayoutGuide+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5A9A82CB094636AFB53D6D130D6219BA /* ConstraintLayoutGuide+Extensions.swift */; }; + B16ABF4764576CCAB4D26AED089DAF5E /* RDEPUBReaderTableOfContentsItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9661A4FD82D29BF44C5DB5D68F4FF237 /* RDEPUBReaderTableOfContentsItem.swift */; }; B24FAD34A7915FC4B90FE9038E814FF2 /* DTLazyImageView.m in Sources */ = {isa = PBXBuildFile; fileRef = A4E43DCDE0C8751557E7E65FEEB1C865 /* DTLazyImageView.m */; }; - B34C800AA0718E8ECAA2557561FD2347 /* RDEPUBPageLayoutSnapshot.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1D9C04C513F60B0120316FE7BB7D1F5C /* RDEPUBPageLayoutSnapshot.swift */; }; - B4315ADED08DA9F87FEB2E9C9AC440EC /* RDEPUBPreferences.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6ADD582CD37BE7FB4C862E3995BBD6E2 /* RDEPUBPreferences.swift */; }; - B5B7E9B7DC6ED149D4A0DE2768155F73 /* RDEPUBParser+TOC.swift in Sources */ = {isa = PBXBuildFile; fileRef = A473941494879F30EF71401673A3AB9E /* RDEPUBParser+TOC.swift */; }; + B30DE6DB9957309D3931784688842305 /* ConstraintItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 28D62D3200AC3D4E42C81CDFF7E884E8 /* ConstraintItem.swift */; }; + B338DD4D050174DC3BB7EA0E1A603333 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B50104DE2E35D820ECA22CDB3E6F96EA /* Foundation.framework */; }; + B49110DD052390A83B240527E04925C2 /* DTCoreGraphicsUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = A8DFDCAB69B471EB5667C964865C26CF /* DTCoreGraphicsUtils.m */; }; + B682D806EE482878932EEA0F55456938 /* ConstraintLayoutSupport.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50297AAB8278F2BB6FCFE82B20C7A049 /* ConstraintLayoutSupport.swift */; }; + B6B040EE86C6F779D5ED7097204F977C /* Typealiases.swift in Sources */ = {isa = PBXBuildFile; fileRef = 945D4549E0B9168D7DDB910DE874B874 /* Typealiases.swift */; }; B7BDD79FC06A1E4E0E17592860844108 /* NSAttributedString+DTCoreText.h in Headers */ = {isa = PBXBuildFile; fileRef = FF3F7BA20A1213804048557D946CEEA9 /* NSAttributedString+DTCoreText.h */; settings = {ATTRIBUTES = (Public, ); }; }; B8332F36582F7A001FE85A8D54B27C9E /* DTCoreTextParagraphStyle.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D62C5531667F364F14DB67D33FFA554 /* DTCoreTextParagraphStyle.h */; settings = {ATTRIBUTES = (Public, ); }; }; B86493B996A888D1DA7814ECB6028E22 /* DTHorizontalRuleHTMLElement.m in Sources */ = {isa = PBXBuildFile; fileRef = A68D72764140BC3DF67A2B9E52CEC7A4 /* DTHorizontalRuleHTMLElement.m */; }; B94CD41727DFCA8791EED8FB2CA397DD /* DTCompatibility.h in Headers */ = {isa = PBXBuildFile; fileRef = 2702E05AA7A266B7D8D0F881FD4E09DA /* DTCompatibility.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B97756D8DD2617114D1C418A0B53D436 /* Archive+MemoryFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = 174FC0CA05D20BB995E211DE5A0857DB /* Archive+MemoryFile.swift */; }; - BA34B5326FE1A3DAAF1DA4B7EE28B0C8 /* ConstraintView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A02EA0374C693F881AB36202FB276DCD /* ConstraintView.swift */; }; - BA4A866FF1973645F3B94118221D45C4 /* ConstraintMakerExtendable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5245010774F8F1C4857763CC7B96E7B4 /* ConstraintMakerExtendable.swift */; }; - BC9FFC60945AE2DCC1F6562B113484A5 /* Archive+Reading.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0619F98DA80922E78A07321D0DC54F62 /* Archive+Reading.swift */; }; - BCF9824F6721BE357FAD2971B9861BC0 /* DTBlockFunctions.m in Sources */ = {isa = PBXBuildFile; fileRef = 375179DD3A4576CEF947E1760BBDC69B /* DTBlockFunctions.m */; }; + B9638897A5C60E1B8F5B659021B80961 /* NSString+DTPaths.h in Headers */ = {isa = PBXBuildFile; fileRef = FC5EC7C3D1808C9CF53354D7A3D69EE7 /* NSString+DTPaths.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BBDF9E3F2B2A1390FA7DB0CC57E775FE /* ConstraintMakerPrioritizable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E138EC76D0DF24544D29D1A4D7429E3 /* ConstraintMakerPrioritizable.swift */; }; + BC1548A44F95A81E27BDA91203A45145 /* URL+ZIP.swift in Sources */ = {isa = PBXBuildFile; fileRef = 537BB06317FA188DF7A8A960152520E8 /* URL+ZIP.swift */; }; + BCA7D49D31B99D9B3522A16BA0F2FFED /* DTHTMLParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 0D75FEDE65722CF41F7F32A164376926 /* DTHTMLParser.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BCD19BC9907BD61075E963B0F808D4C2 /* RDEPUBTextRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = C879D1B97FBCF728EA0A7A1FD445EEC9 /* RDEPUBTextRenderer.swift */; }; BE12CD112F82AD9050D7FB29395F27F9 /* DTVideoTextAttachment.m in Sources */ = {isa = PBXBuildFile; fileRef = 63A6EDF10DA5A051C6CDCBE5D97AF11E /* DTVideoTextAttachment.m */; }; - BE5A5C661394781D353CC954A455D95D /* DTVersion.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BD9F2023FF826F67E69E3407A70A8A6 /* DTVersion.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BFD2EC5F6AC4D7FACE606143C00320DC /* DTLog.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B007AEEACE9EA271DD73AFD80A74D83 /* DTLog.m */; }; - C06147F22A2F3039C3A3D506352B888E /* SnapKit-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 0B10D3EC1701BBA4D69926915F942558 /* SnapKit-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C10F21E650BA9795CDC46672FBAC6E03 /* NSString+DTURLEncoding.h in Headers */ = {isa = PBXBuildFile; fileRef = 31BD7533867336DEA9B835F471767178 /* NSString+DTURLEncoding.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C246D21500378C6DC9A76CC52D363662 /* NSURL+DTComparing.m in Sources */ = {isa = PBXBuildFile; fileRef = 9BFCAC7C2AEA867E67C63A852576774F /* NSURL+DTComparing.m */; }; - C2E3CBC4C851CC868F4841D3B6392099 /* SSAlertAnimationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 97995C73297871C353364E685939DED9 /* SSAlertAnimationController.swift */; }; - C322CE4976348F20B13EA053DCBBF04C /* DTCompatibility.h in Headers */ = {isa = PBXBuildFile; fileRef = B5FCE04EBB553439D1C2BA1001936293 /* DTCompatibility.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C5A14B2FB99FA6789827FB62C5EAECB9 /* RDEPUBTextSearchEngine.swift in Sources */ = {isa = PBXBuildFile; fileRef = 607A6747DD754112DE73B195EC10FA62 /* RDEPUBTextSearchEngine.swift */; }; + BEA95EC6964968F6BF8F97E94B7E557C /* ConstraintConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7176B677A350927FC670368313DC2CA1 /* ConstraintConfig.swift */; }; + BF24D074ED2DFCDA87CD3D72881E3BFF /* ZIPFoundation-ZIPFoundation_Privacy in Resources */ = {isa = PBXBuildFile; fileRef = CA4A114775B98CEA4A566C18123B145F /* ZIPFoundation-ZIPFoundation_Privacy */; }; + BF5BC9DDDF08C70BBD4F9C31D2226D54 /* Entry+Serialization.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5F991240340FA026C71B68EB25B9F9C8 /* Entry+Serialization.swift */; }; + BFB26B0704E537A580EC61D6E2A3605A /* RDEPUBChapterData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 31A85F27E07E44ECFCCBCECAAE32A56F /* RDEPUBChapterData.swift */; }; + C077B7981B6ADE25D1D51BAEE316C65B /* RDEPUBTextIndexTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = BE99150A429F1AA375BD9A89473100CB /* RDEPUBTextIndexTable.swift */; }; + C18438DC910FD5C2AD24CFC0A967061D /* DTBlockFunctions.h in Headers */ = {isa = PBXBuildFile; fileRef = A0BD48DAF5AE9DB087F2552E99069709 /* DTBlockFunctions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C1F30655811FDBB6920A8D300F06C1E5 /* DTAnimatedGIF.m in Sources */ = {isa = PBXBuildFile; fileRef = BC332335B380BC51C4F05C5CCDFB9189 /* DTAnimatedGIF.m */; }; + C27B98C72CD3AA827D7CBC3A9E0A3AEF /* Archive+Deprecated.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BA251BAC8B430B3A4D4C4321046B990 /* Archive+Deprecated.swift */; }; + C4AEFF8185BBEBD05C3CB6EFA6E43AB9 /* Data+Serialization.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3DC78D0B0F37BF9AD1058CACA9AAF9BE /* Data+Serialization.swift */; }; + C4F9BFFF7470026F06CF1E0B4794435F /* RDEPUBParser+TOC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 28D388240137738CB7BC33CB6B82A62A /* RDEPUBParser+TOC.swift */; }; + C518E17914E24B57ED13D1C1E11104BF /* DTCoreGraphicsUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = B6425B2235BA00FE865AF58EF44F1144 /* DTCoreGraphicsUtils.h */; settings = {ATTRIBUTES = (Public, ); }; }; C5EE8E7373FBD24E66C678356393D871 /* DTCoreTextFontCollection.m in Sources */ = {isa = PBXBuildFile; fileRef = 5E791886E59DC0FAB02C6BBAB5BE5B6B /* DTCoreTextFontCollection.m */; }; - C62885CE50835A1728C5C9F946CCEC19 /* RDEPUBSearchModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = 26AA3263BCEE270CAF59B9DE895B504F /* RDEPUBSearchModels.swift */; }; + C61A176195700DBE89F52D928319C4CB /* ConstraintLayoutGuide.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E6BA0ECCB0ACF8580C3B5192CA9F11B /* ConstraintLayoutGuide.swift */; }; + C661BA0FD7C2D7693FF02A57384EDCE1 /* RDReaderGestureController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 573B36675B38E2D9301B3CCFD9E7CCFF /* RDReaderGestureController.swift */; }; + C6A421CEC68B444EFC2E496473EDD93D /* SSAlertDefaultAnmation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81B8F42440B802E6EC2B1FF7E3022F3A /* SSAlertDefaultAnmation.swift */; }; C6B65C0EA759DF426FBBBB113BA3C3E8 /* DTBreakHTMLElement.m in Sources */ = {isa = PBXBuildFile; fileRef = F734214E067BDBDB581911E1A5CDAADB /* DTBreakHTMLElement.m */; }; - C7167F66848716139711535C67CAD1DF /* Entry+Serialization.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5F991240340FA026C71B68EB25B9F9C8 /* Entry+Serialization.swift */; }; C72CE4B974DFAE2C3037D425EB559314 /* DTCoreTextLayoutFrame.h in Headers */ = {isa = PBXBuildFile; fileRef = CE6907AC04870132CCE3177E894607DD /* DTCoreTextLayoutFrame.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C79757E697CD7EF75F202446A9D0400D /* RDEPUBChapterData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2F917B8708AE5A66B32AB42073824846 /* RDEPUBChapterData.swift */; }; - C7C63CB579E508714F53673545B225E3 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 1E89FE5F2996336E862E82C1E14E0EE7 /* PrivacyInfo.xcprivacy */; }; C8F753B56A6C4D2A938B6EA68CF522F8 /* DTColorFunctions.h in Headers */ = {isa = PBXBuildFile; fileRef = 86A0361390AA0C29BC1A5487083A12A7 /* DTColorFunctions.h */; settings = {ATTRIBUTES = (Public, ); }; }; C9DD05EF2D27FFEBFA7BF6F437168501 /* DTCoreTextConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = C8C20D9A71E6605DEE80342E7122B683 /* DTCoreTextConstants.h */; settings = {ATTRIBUTES = (Public, ); }; }; - CA23D9627413150E03866CCBDC873138 /* DTBlockFunctions.h in Headers */ = {isa = PBXBuildFile; fileRef = A0BD48DAF5AE9DB087F2552E99069709 /* DTBlockFunctions.h */; settings = {ATTRIBUTES = (Public, ); }; }; - CA7C881F1BD15B22A468E90B8ADAE507 /* ConstraintViewDSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8E5637603691B9B35C2A886B686D3CE7 /* ConstraintViewDSL.swift */; }; - CB82DEF19C7E53EB48196A1537AED7B9 /* RDEPUBAssetRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9BCF0450FD674EA7F8B1B321287ABDCB /* RDEPUBAssetRepository.swift */; }; + CBF07238641A620765EA20CD83EAAF39 /* ConstraintView+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6DB34ACB132E465CDF8191F7DB71EF6 /* ConstraintView+Extensions.swift */; }; + CC4CDD671505535301C6D768F83B4932 /* NSFileWrapper+DTCopying.m in Sources */ = {isa = PBXBuildFile; fileRef = 1756C6FFCA695290BA62DA4E7B6DD20B /* NSFileWrapper+DTCopying.m */; }; CC8B8F3D758E98B51F69EDFAA69663A4 /* NSString+HTML.h in Headers */ = {isa = PBXBuildFile; fileRef = 8ABDEFEA94DC6408D92AC66DA3625DE5 /* NSString+HTML.h */; settings = {ATTRIBUTES = (Public, ); }; }; - CCBB33BDE73DE338A0B9B5C9F90FE3D9 /* RDEPUBTextContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC40316C34D94C00C0FA86716C45D484 /* RDEPUBTextContentView.swift */; }; - CD0530223461098E5EC80357AA55A5B4 /* RDEPUBStyleSheetBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9C81AA278ED7B2807938E6D37F1ADFEF /* RDEPUBStyleSheetBuilder.swift */; }; - CD2604AAAF2EC774A7D01DD2BC9CC41F /* DTTiledLayerWithoutFade.h in Headers */ = {isa = PBXBuildFile; fileRef = DF5EDCA3B21964D0462BE0982E2F0BF8 /* DTTiledLayerWithoutFade.h */; settings = {ATTRIBUTES = (Public, ); }; }; - CD899BE16D2EAE1D35EB97DD80E5E85D /* RDEPUBTextIndexTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = E07EF51BDABF4AA72556DE2BD0202095 /* RDEPUBTextIndexTable.swift */; }; + CCCED38A43502AC6473C11606D64057D /* DTBlockFunctions.m in Sources */ = {isa = PBXBuildFile; fileRef = 375179DD3A4576CEF947E1760BBDC69B /* DTBlockFunctions.m */; }; + CD6559AD4A5AF89AC14C50508DDE8AD7 /* RDEPUBParser+Resources.swift in Sources */ = {isa = PBXBuildFile; fileRef = 44009B7A804BFDD7B2AD3F1CBE12CE42 /* RDEPUBParser+Resources.swift */; }; + CD687E7FE5C54C6CB1ACD0156881B031 /* RDEPUBWebView+Configuration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3DD8D4287E569AB98F04CF03AE208B71 /* RDEPUBWebView+Configuration.swift */; }; + CE8D398221836AA888D3253140243BA2 /* SSAlertSwift-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 937CEFA81DA4227008DBFB114783A08B /* SSAlertSwift-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + CEDB56407E114E2183F982942D98EE80 /* ConstraintInsets.swift in Sources */ = {isa = PBXBuildFile; fileRef = C241AD9CEC9D6732CFBA6A55B49E64C9 /* ConstraintInsets.swift */; }; CFC49467FE75BFABC22A1CE2FFA26570 /* DTImage+HTML.m in Sources */ = {isa = PBXBuildFile; fileRef = 12A5EA26EE7539EDDA90649D22FB675D /* DTImage+HTML.m */; }; - D08B7390DE9AAC26FB01D4031E1D8CFB /* RDEPUBReaderTableOfContentsItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 857A06908857B19DB09FADB8C32EC3EB /* RDEPUBReaderTableOfContentsItem.swift */; }; - D11E6B202F71D4A9C74DACEFD6CB30FC /* ConstraintMakerFinalizable.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0B32EA4B7A492EEF26CE260E9AEFA0B /* ConstraintMakerFinalizable.swift */; }; + D0AE0A76C7B05D961789B619FE18B12E /* RDReaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC1C84185018F1316377F86BE207A7A3 /* RDReaderView.swift */; }; + D0D213E45A7BFA290F79682A8B42C610 /* RDEPUBFixedLayoutTemplate.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6D9DE483A33AFF82D025E95ABAE82B1 /* RDEPUBFixedLayoutTemplate.swift */; }; D1A93B2D7F1B312755C48790338D7712 /* DTIframeTextAttachment.m in Sources */ = {isa = PBXBuildFile; fileRef = AA3CFD777AD76F97EBA05B3920F5786A /* DTIframeTextAttachment.m */; }; - D2AC557EE061D17C27D8F452BF157E7E /* Archive+Deprecated.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BA251BAC8B430B3A4D4C4321046B990 /* Archive+Deprecated.swift */; }; - D2BE2C62544E9FBC20FF6C608672EF94 /* Date+ZIP.swift in Sources */ = {isa = PBXBuildFile; fileRef = F76A97683FB5E8E8B86EA4AD71F6F4B4 /* Date+ZIP.swift */; }; - D4A1EEBE30716DC77526E8268BA4F00A /* DTTiledLayerWithoutFade.m in Sources */ = {isa = PBXBuildFile; fileRef = 70F5D03B9B3B7F182C8F5C1F5D4FA7E7 /* DTTiledLayerWithoutFade.m */; }; + D2D54E0E6F07EFBB725682A8D8A213C3 /* ConstraintPriority.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45C7129757B54DFD9E445D0A17D73A83 /* ConstraintPriority.swift */; }; + D2F269387653D0FA410A3555AB58DCE6 /* DTVersion.m in Sources */ = {isa = PBXBuildFile; fileRef = 4AF6156128A1A0CA24D9D06E346B9445 /* DTVersion.m */; }; + D3602269C1605E3C28EABBACBE425778 /* RDEPUBNavigatorState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3CD377E1D9608FD654CA2A3B1D4DF344 /* RDEPUBNavigatorState.swift */; }; + D412271B77856413B1001384E7C9AE82 /* SnapKit-SnapKit_Privacy in Resources */ = {isa = PBXBuildFile; fileRef = B9DCB5EC0B1CDADD221717CADDF62359 /* SnapKit-SnapKit_Privacy */; }; D526E03C098DA6CF8F01C1BC126C9BBA /* DTCoreText-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = CE7768E097F8BDE9FBE3752B98CD0101 /* DTCoreText-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D5EC51991CA73F63A22827297DD2C9C3 /* RDEPUBResourceResolver.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6BE5AD476A35217D43210F7FBA858910 /* RDEPUBResourceResolver.swift */; }; - D63EC37A3A69375F0B49035524A21278 /* default.css in Resources */ = {isa = PBXBuildFile; fileRef = 05D57D16346FAF830F1F82067307EA9F /* default.css */; }; - D6AE712A6154151CC5157D950D5A7968 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0834E84632886CDD9911CAB76183F1CE /* QuartzCore.framework */; }; - D6C2CE40FA7AC2E59120835A68293210 /* LayoutConstraintItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E8C0D83EB6EDE71B264B6B0DD4644F5 /* LayoutConstraintItem.swift */; }; - D75BC043A6A20065A6F040FB2ADCBD25 /* NSURL+DTUnshorten.h in Headers */ = {isa = PBXBuildFile; fileRef = 054674EB90C625BB4BEA9368ED92592B /* NSURL+DTUnshorten.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D583A6E063AFB5A0E1B24EBAC86F5BB5 /* DTCompatibility.h in Headers */ = {isa = PBXBuildFile; fileRef = B5FCE04EBB553439D1C2BA1001936293 /* DTCompatibility.h */; settings = {ATTRIBUTES = (Public, ); }; }; D82DDA4C1E5C4D5378A9E5EA3F8E9DFE /* DTBreakHTMLElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 533CFFF04BE7BC4BDEAE11DF675A84CA /* DTBreakHTMLElement.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D889C7FE0B0ECD9EC6E1D4F8BC22B7E9 /* RDEPUBTextPaginationSupport.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8043FBCCFAB2524C1853D06CA3672CF /* RDEPUBTextPaginationSupport.swift */; }; - DA19BFF1EA6B721BB46BDA953F158EBF /* NSFileWrapper+DTCopying.h in Headers */ = {isa = PBXBuildFile; fileRef = 09C957F3199C596781EFA1DEA1DDCEC8 /* NSFileWrapper+DTCopying.h */; settings = {ATTRIBUTES = (Public, ); }; }; DA5B51E5D80C161D2902B6FC60DA5EC8 /* DTImageTextAttachment.h in Headers */ = {isa = PBXBuildFile; fileRef = 426D442C01742E4361F5BC34D43152A6 /* DTImageTextAttachment.h */; settings = {ATTRIBUTES = (Public, ); }; }; DAD16D3E6EBB32FF96C63BFE6037065F /* DTLinkButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 9A1B75050E71BDD96FC19EC6BA129E6A /* DTLinkButton.m */; }; + DB1699CD46DB4D42E854405177569B84 /* ConstraintOffsetTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8F950CEF31AC0065C0BEAB26BA2CEFA1 /* ConstraintOffsetTarget.swift */; }; + DB8DE9962C27333B7EAE30671A2F87AC /* ImageIO.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FEB14A8F8170777DB7CCC3F27C8EA57A /* ImageIO.framework */; }; DBCA42F7E1697F4EC82E0E7C9657851D /* DTAttributedTextCell.h in Headers */ = {isa = PBXBuildFile; fileRef = D4093D30B372960168C1349100DF7DE0 /* DTAttributedTextCell.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DBDDC7AC62461D9F8C6F013E9A07E74C /* NSString+DTUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = BE547E464E5D34F9FFB24BAC81D1E4CC /* NSString+DTUtilities.h */; settings = {ATTRIBUTES = (Public, ); }; }; DC3E2932A82AD5D88D8B1EFBF004BEC8 /* DTCSSListStyle.m in Sources */ = {isa = PBXBuildFile; fileRef = B509CD4B498635D4536245E43D802ED9 /* DTCSSListStyle.m */; }; DD73CD0E5148961D1ABD80E050122314 /* DTCoreTextFunctions.h in Headers */ = {isa = PBXBuildFile; fileRef = A1B031E2B903C2F177195C1C3D1D1EDB /* DTCoreTextFunctions.h */; settings = {ATTRIBUTES = (Public, ); }; }; DE68AD2F426FD462BC70F968E5AF5553 /* DTTextAttachmentHTMLElement.m in Sources */ = {isa = PBXBuildFile; fileRef = 1ABC2F552388CD08EC1EFDEF606AE222 /* DTTextAttachmentHTMLElement.m */; }; + DF1ADB5D7BB4EE951433FBEAD1FD02DC /* RDEPUBReaderConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDF01B7EF5DD6EA4CA5168C35069C495 /* RDEPUBReaderConfiguration.swift */; }; + DF51C9A2429A74A4DFB895937B7C0B85 /* LayoutConstraint.swift in Sources */ = {isa = PBXBuildFile; fileRef = 932FD688DE493323BA6B691BC2CB5094 /* LayoutConstraint.swift */; }; DFB5A1C64C7908FD05BEFF7C7B571353 /* DTAttributedLabel.h in Headers */ = {isa = PBXBuildFile; fileRef = 5679D281C282896E6FC352C48E0AF439 /* DTAttributedLabel.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E07E85BBB20877643467668F80A4C373 /* RDEPUBPaginator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1DD978B18AE5C3EA439E75A39DF62FA4 /* RDEPUBPaginator.swift */; }; - E161E4B33F70299F7B0B202368B7CCA9 /* DTExtendedFileAttributes.m in Sources */ = {isa = PBXBuildFile; fileRef = F5389D4E96A4AFE175691B4D3D4524E7 /* DTExtendedFileAttributes.m */; }; - E1D9FC0A5280B34E23C78E3A4E9FC806 /* RDURLReaderController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07789F5F0A4B4DBFB43191296F14327E /* RDURLReaderController.swift */; }; + E121E052DAF546C0204B13A0A1C50401 /* RDEPUBReaderBottomToolView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEDE060ABAEC551BD0CD924CE4DE7058 /* RDEPUBReaderBottomToolView.swift */; }; E1DA58105A72D6C0B77A8A9F7822BD68 /* DTCoreTextLayoutFrame.m in Sources */ = {isa = PBXBuildFile; fileRef = 029130886CE8E422D16ADF97468CB1B0 /* DTCoreTextLayoutFrame.m */; }; - E382CE8616C91DF935F6999E7FA00DF2 /* NSString+DTFormatNumbers.m in Sources */ = {isa = PBXBuildFile; fileRef = 1ACA5E519F100582F0D772FCD76125C0 /* NSString+DTFormatNumbers.m */; }; E38FC7829B5BDD1588FA487E0FBAC208 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B50104DE2E35D820ECA22CDB3E6F96EA /* Foundation.framework */; }; - E413C3EDDEBE0F5567B629AF4045916A /* DTAnimatedGIF.m in Sources */ = {isa = PBXBuildFile; fileRef = BC332335B380BC51C4F05C5CCDFB9189 /* DTAnimatedGIF.m */; }; - E48ADC81CF102479B6B36491D01140FC /* UIViewFrameExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = D8C351514678D41C58869BD057D5483F /* UIViewFrameExtension.swift */; }; - E577551DA3ED9891514F73784C23FF7E /* Archive+WritingDeprecated.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98C7359A7C3FC7675FED220200A43A17 /* Archive+WritingDeprecated.swift */; }; - E5F415F4C6D1EB5C3E6661396850B8B9 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B50104DE2E35D820ECA22CDB3E6F96EA /* Foundation.framework */; }; - E65097450760D6BE9D8565E4C599A5E7 /* Archive+BackingConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 61E36C4FE448DDDA03450847FCB785B6 /* Archive+BackingConfiguration.swift */; }; - E84164CB9A2828386B5A78D2AFE8E1B0 /* SSAlertCommonView.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE4EE750340347ED584C5A2C1164331A /* SSAlertCommonView.swift */; }; - E87BDF4A1C3B7A38268D846385D83AAA /* NSURL+DTAppLinks.m in Sources */ = {isa = PBXBuildFile; fileRef = 2D36F7CDCD7D5788CDCB3A1421DB242B /* NSURL+DTAppLinks.m */; }; + E61908BD6CB88CC2A456AADBD820C9F0 /* Archive+ZIP64.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED5693BD171B879406EA14C97F4AD8D8 /* Archive+ZIP64.swift */; }; + E815C9978BE13179EAD3578B50814E1F /* SnapKit-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 0B10D3EC1701BBA4D69926915F942558 /* SnapKit-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; E8AB5CE26A5224EF09E9E363D70C7775 /* DTDictationPlaceholderView.m in Sources */ = {isa = PBXBuildFile; fileRef = AFE0B56638AFB77F4455784A7ED59876 /* DTDictationPlaceholderView.m */; }; - E8B86A105BDCDBF88586F123DAB8BA52 /* RDEPUBPublication.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F7FFE5D5B710020A10F6B3D97E36B92 /* RDEPUBPublication.swift */; }; - E9DD1F98736B2173B0E0D9C8E1FCA481 /* NSString+DTURLEncoding.m in Sources */ = {isa = PBXBuildFile; fileRef = CB7F3535507F56824BA21509302CF8B3 /* NSString+DTURLEncoding.m */; }; EA0040823CCF8E97363DB5891F5DA6D0 /* DTCoreTextFunctions.m in Sources */ = {isa = PBXBuildFile; fileRef = 8F2D44B82815CA3397BE2C9F64819B88 /* DTCoreTextFunctions.m */; }; - EA21CF8EA74860489E729A37897447E8 /* RDReaderEPUBContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0512178F8D1B6546A1F570515BE9E048 /* RDReaderEPUBContentView.swift */; }; - EB415DC23191916ECCFB799BCEDB9365 /* SSAlertPresentAnimation.swift in Sources */ = {isa = PBXBuildFile; fileRef = E481007A8174943868EBC81CF3B04B9F /* SSAlertPresentAnimation.swift */; }; + EA27A76BD9FD576755BA1179041236A9 /* RDEPUBReaderChapterListController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8B3CCE79B11EBF54E7B1195D4F4CD00E /* RDEPUBReaderChapterListController.swift */; }; EBB7E4D4DB253B5F1267CF9B4DDB4E93 /* DTCoreTextFontDescriptor.m in Sources */ = {isa = PBXBuildFile; fileRef = BCCA590DB72AA93275262A414F16578A /* DTCoreTextFontDescriptor.m */; }; - EC47E2058FB73366CF0612EA4A2D4017 /* SSEventTrigger.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3DE43A617859DCF838AD6B3704F27495 /* SSEventTrigger.swift */; }; + ED6C2ECBB71A2E3E35FE6C3AF96EF5B7 /* NSDictionary+DTError.m in Sources */ = {isa = PBXBuildFile; fileRef = C18480913E002315E3F5EC6945371697 /* NSDictionary+DTError.m */; }; EDA269B595D70EC2B9D81DC890157D63 /* DTAccessibilityViewProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = F37563A56C180CE18EEFADE56FA3C17F /* DTAccessibilityViewProxy.h */; settings = {ATTRIBUTES = (Public, ); }; }; - EDA59F9024ADFFE3A39A298A5EFBFAD7 /* RDEPUBReadingModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = C506BF259F8E66CC0F44BA4893C355B9 /* RDEPUBReadingModels.swift */; }; EE4F0992A0F597320FF7BDE4691D0FD4 /* NSString+CSS.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D6C48939A8498A09DCFC7F41ECB8A25 /* NSString+CSS.h */; settings = {ATTRIBUTES = (Public, ); }; }; - EEB9F37C54BC153160D565FDB6787F94 /* DTPieProgressIndicator.h in Headers */ = {isa = PBXBuildFile; fileRef = 1B443D035BA5652B03A41BE905C5AC17 /* DTPieProgressIndicator.h */; settings = {ATTRIBUTES = (Public, ); }; }; - EEFC445C91985EA88162CF8B44914B06 /* ConstraintRelatableTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 885653999BD237A574B67DB279DE7E87 /* ConstraintRelatableTarget.swift */; }; - EF4851785CFC9C5508757999351C5CA7 /* RDReaderBottomToolView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 993C7A07FD4B0D50DE5C6E2F70AFBE88 /* RDReaderBottomToolView.swift */; }; + EE90D86ECB7ABC204BFB13F2FC315D03 /* NSMutableArray+DTMoving.h in Headers */ = {isa = PBXBuildFile; fileRef = B0AC307F12521444C973EA0DE38B4608 /* NSMutableArray+DTMoving.h */; settings = {ATTRIBUTES = (Public, ); }; }; + EFAF5BBFB7E60F9044B865B5771FE618 /* DTLog.h in Headers */ = {isa = PBXBuildFile; fileRef = 6A1EBB9497F4846C84CA0BF5E4F84FC7 /* DTLog.h */; settings = {ATTRIBUTES = (Public, ); }; }; F006F73F17F2E3CC0E7852E9357BA946 /* DTAnchorHTMLElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 424F12BEB0EDAAF1C719B5103D30C653 /* DTAnchorHTMLElement.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F0D47930AC51626265F4CEDCAEB0D1B6 /* DTSmartPagingScrollView.h in Headers */ = {isa = PBXBuildFile; fileRef = D2BA6D5DBD4C6A9285C4592721790A26 /* DTSmartPagingScrollView.h */; settings = {ATTRIBUTES = (Public, ); }; }; F0F631056BADA32253528247DF493272 /* DTHTMLElement.h in Headers */ = {isa = PBXBuildFile; fileRef = EE9D4A455723797A27F04A15C4E47823 /* DTHTMLElement.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F114FE8DD8A8AE524AE8671D72E07543 /* ConstraintDirectionalInsetTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = A651CEE8062C84A597DBC44ECA3DBCC1 /* ConstraintDirectionalInsetTarget.swift */; }; + F1223D1CEF088198A2B27D90D3CC4F58 /* NSString+DTUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = BE547E464E5D34F9FFB24BAC81D1E4CC /* NSString+DTUtilities.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F1DEB3C74B8755D6FEB5D0A98B1516DC /* DTExtendedFileAttributes.m in Sources */ = {isa = PBXBuildFile; fileRef = F5389D4E96A4AFE175691B4D3D4524E7 /* DTExtendedFileAttributes.m */; }; + F1E14DC7A9D61093A030F7A69D0AA8B6 /* RDEPUBReaderHighlightsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 91E98E8EB07A175FB72DCB4D69B1BF40 /* RDEPUBReaderHighlightsViewController.swift */; }; F1E9B6D0728711AE4D7154616DBC17EC /* Pods-ReadViewDemo-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = AA0811310099A4BCB3D52683B70DB3D1 /* Pods-ReadViewDemo-dummy.m */; }; - F23864EEAD7D80FDFD30A59422389312 /* RDEPUBWebView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E2CFC831716F8266E64D7A3B4B01A7D /* RDEPUBWebView.swift */; }; - F260288B7580531015A3CE1028871921 /* ConstraintInsets.swift in Sources */ = {isa = PBXBuildFile; fileRef = C241AD9CEC9D6732CFBA6A55B49E64C9 /* ConstraintInsets.swift */; }; - F399A7049167A7FE633E834ECB2E0621 /* RDEPUBReaderChapterListController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51BABDA6EF5FDECBFDCD039867E35C96 /* RDEPUBReaderChapterListController.swift */; }; + F3405C56A63F0B88682C17782422E787 /* UIScreen+DTFoundation.h in Headers */ = {isa = PBXBuildFile; fileRef = A3765B289CB7E6C5DF6160D8EBC83C3C /* UIScreen+DTFoundation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F3EAFDDD47F845D1096ED136515CC915 /* NSFileWrapper+DTCopying.h in Headers */ = {isa = PBXBuildFile; fileRef = 09C957F3199C596781EFA1DEA1DDCEC8 /* NSFileWrapper+DTCopying.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F41E072AEF83CD3DE72E7375FEBC91A1 /* DTFolderMonitor.m in Sources */ = {isa = PBXBuildFile; fileRef = B245F7E143F3091652C64F6593E33F7A /* DTFolderMonitor.m */; }; + F4653CC8B73CE175A4A677165D687137 /* default.css in Resources */ = {isa = PBXBuildFile; fileRef = 05D57D16346FAF830F1F82067307EA9F /* default.css */; }; + F47E741B08FF5641DA24EBE1B7EC9DC7 /* RDEPUBSearchEngine.swift in Sources */ = {isa = PBXBuildFile; fileRef = 982BAB73B44D6A14A904822EB0836FDA /* RDEPUBSearchEngine.swift */; }; F4A2E3C4237B8931F61B72FF0BDD6D69 /* DTObjectTextAttachment.m in Sources */ = {isa = PBXBuildFile; fileRef = F038FB491B9A4A53447EF0DC333301AE /* DTObjectTextAttachment.m */; }; - F516B474B9CFAC247FDB14E4DB55EBEE /* SSChapterListController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4070E0D5D24CF679BE8BE47F788CA37F /* SSChapterListController.swift */; }; + F51883B7D8D4858816A049BE80A3082C /* SSAlertAnimationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 97995C73297871C353364E685939DED9 /* SSAlertAnimationController.swift */; }; + F56CB98504978D122BE9C266F138F5FC /* RDEPUBSearchModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = B6C092A5458F6A10FC8ACE9435997C5B /* RDEPUBSearchModels.swift */; }; F58ABA106C6200175DF574DF05A75BA8 /* DTAccessibilityElement.m in Sources */ = {isa = PBXBuildFile; fileRef = 4F0486D3B46DC92AB254D6EE9CC233BF /* DTAccessibilityElement.m */; }; F5A424E67F41C4F7B830CE2F7E71570D /* DTCoreText-Resources in Resources */ = {isa = PBXBuildFile; fileRef = F4E2B1AC73977F10254628C0B7EBE38F /* DTCoreText-Resources */; }; F6036BBDFE7484F5A453F6876C97C098 /* NSAttributedString+SmallCaps.m in Sources */ = {isa = PBXBuildFile; fileRef = 76F99C8130EE83A22CD223C7F5E6E66E /* NSAttributedString+SmallCaps.m */; }; F61102C9BF3D6296CB6C6B754ABF98C5 /* DTTextHTMLElement.m in Sources */ = {isa = PBXBuildFile; fileRef = 8CFEE298DD52246B46E6FA62B16B38DF /* DTTextHTMLElement.m */; }; - F6651FBF52F86EEEFCE9CB45C74E7799 /* Archive+Helpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A2659DB0685E16ABAE0382F726DA8C8 /* Archive+Helpers.swift */; }; - F7172C7DA5875C79ACC0F94260AB5E91 /* SSAlertDefaultAnmation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81B8F42440B802E6EC2B1FF7E3022F3A /* SSAlertDefaultAnmation.swift */; }; - F729DC6AEE60EE7C4FE7813D563530C7 /* DTFoundationConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BD568D38C209BA1CC0EBFA809A35204 /* DTFoundationConstants.m */; }; - F7918D8B5949911FE2DBBA8EE5E85143 /* RDEPUBNavigatorState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2CBCFA278227D30D24F6B58959F297CC /* RDEPUBNavigatorState.swift */; }; - F7EBC998D744D374559CD533FACDEF3F /* RDEPUBReaderBottomToolView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B513B2BF2E788D09AEEDEBBADF6669E4 /* RDEPUBReaderBottomToolView.swift */; }; - F8AAC2AC6DC6FEC91F84C7C7E5A34374 /* RDReaderPageChildViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5F63A66B843D13F64610EC901D02B0A5 /* RDReaderPageChildViewController.swift */; }; - F960A17FE57ABD06B45B9CE73DED4CCA /* RDEPUBReaderHighlightsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA847F68D13E0DA48A387B5B4AAF2037 /* RDEPUBReaderHighlightsViewController.swift */; }; - F9A92F65867DDF068CD0B010228F9442 /* DTCoreGraphicsUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = A8DFDCAB69B471EB5667C964865C26CF /* DTCoreGraphicsUtils.m */; }; - F9CCEB78FC86D96F173399994677C148 /* FileManager+ZIPDeprecated.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04F9B298989305B9569B71E448E8C1D4 /* FileManager+ZIPDeprecated.swift */; }; - FA31A38C141B31B155BADEE7CDE58F85 /* ZIPFoundation-ZIPFoundation_Privacy in Resources */ = {isa = PBXBuildFile; fileRef = CA4A114775B98CEA4A566C18123B145F /* ZIPFoundation-ZIPFoundation_Privacy */; }; - FA7A84BF5497E47E0B71A3AEF1BA06D5 /* RDReaderContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4911CA3333EDF39D421801CC06FE7034 /* RDReaderContentView.swift */; }; - FA9195273E927472B76A30803735FEB8 /* RDEPUBReaderSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = C71109E29D1694579CB003FFC654788B /* RDEPUBReaderSettings.swift */; }; - FB43703A695256DAC61B0BA1AD9CC89F /* RDEPUBReaderTopToolView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A3AA501DEB82EBB5C47EEADCF2BC4723 /* RDEPUBReaderTopToolView.swift */; }; + F63D8AF90CA41EC0AD2B733300965F65 /* NSString+DTUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = DCECDBD73595CA88A2208000B4B68352 /* NSString+DTUtilities.m */; }; + F6AB64DF24798D3F7A7019EBA1131AF1 /* RDEPUBReaderSettingsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1AA7CFC7A07A8C9400697DA331E35860 /* RDEPUBReaderSettingsViewController.swift */; }; + FB7120CA0EB9D7C08AFA863E338CBA90 /* RDEPUBPaginator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 99EF157E0B58EE5D8605F8EDDF4D9350 /* RDEPUBPaginator.swift */; }; + FBA09EE40DD15105176DD088697EBA72 /* ConstraintMakerRelatable.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD768C27E392C934C06DFB4AC401037C /* ConstraintMakerRelatable.swift */; }; + FBA3629CEC806A18708776D770036541 /* Archive+Helpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A2659DB0685E16ABAE0382F726DA8C8 /* Archive+Helpers.swift */; }; FC5F52919451A15639442B46B38E4C67 /* DTCoreTextLayoutFrame+Cursor.m in Sources */ = {isa = PBXBuildFile; fileRef = E62C5E593037EF8A45E7FAA847D0277C /* DTCoreTextLayoutFrame+Cursor.m */; }; - FD16DD17E47ACF4FFE71C2010A8F6B74 /* ZIPFoundation-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 4A06A36ADBE678DB44158D32E751FAFF /* ZIPFoundation-dummy.m */; }; FD5D68887297CFA94F543C49DC68A156 /* DTHTMLAttributedStringBuilder.m in Sources */ = {isa = PBXBuildFile; fileRef = 7C496AB6A73C2D0BD0FF340A6A2960D5 /* DTHTMLAttributedStringBuilder.m */; }; - FD6C714A251CE1A94B668A6CFF1D4F8A /* RDEPUBReaderToolView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7400D161F463EBD6D0B3A3E3E03DE2EF /* RDEPUBReaderToolView.swift */; }; + FDC2B2E1061CAC09A759B152654FA327 /* RDReaderContentCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8114D77A6959999E364B801F9499589D /* RDReaderContentCell.swift */; }; + FDF36E20A3B3BF130C9F20C6269900B5 /* ConstraintRelatableTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 885653999BD237A574B67DB279DE7E87 /* ConstraintRelatableTarget.swift */; }; FEB00C614DCB6A8A7BDF8DEE11260984 /* NSMutableAttributedString+HTML.m in Sources */ = {isa = PBXBuildFile; fileRef = B0500CA69405E23B09291359EB28331E /* NSMutableAttributedString+HTML.m */; }; - FED6EDF26E767BB1FABAEB222ADB7E5C /* RDEPUBWebContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEBB66A484525660253E69D4094BD628 /* RDEPUBWebContentView.swift */; }; - FF4E65F5F6EB52C8F11DF01F4910E97F /* RDEPUBReaderTheme.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD22BF379DBBBAD804366BA4DF2C3C04 /* RDEPUBReaderTheme.swift */; }; - FFBE9B1A45573B10D1C96BDEB7A288DC /* RDEPUBReaderSettingsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = E66516D9422D6E88704BB9AE04A75EAB /* RDEPUBReaderSettingsViewController.swift */; }; + FF435595580C1A21539112F520F0609B /* RDEPUBParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = B97DAD182D1BD5778630EF4A56BDD988 /* RDEPUBParser.swift */; }; + FFFF063445858983090A4E58B19291CA /* UIApplication+DTNetworkActivity.h in Headers */ = {isa = PBXBuildFile; fileRef = 957DB4675D5CCBD3CB1762F08619F3F7 /* UIApplication+DTNetworkActivity.h */; settings = {ATTRIBUTES = (Public, ); }; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ - 21EEF6C20A7AF8C8E70CEEC8D5BC63F3 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 8619D5ADECF2B26CFD9A9826D61D289A; - remoteInfo = SSAlertSwift; - }; - 26767DE6C253EB8F214B5373F25404CB /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 8F6E5A5BF72D62CDFD25F91A7CFA3309; - remoteInfo = DTFoundation; - }; - 5D31C98D88A1A93108A3BE724175F1C0 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 8A8DB685241263AFDF5E6B20FE67B93A; - remoteInfo = "SnapKit-SnapKit_Privacy"; - }; - 774B64636A23A5EFA6D85FC3509D6BFF /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 0C24CB0E87A728A11AA1124CB360D6A1; - remoteInfo = "DTCoreText-Resources"; - }; - 7D26844A6F94FF0C841AA0846D1A0A0A /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = AA15C8469D67684160CC2A7098EB841C; - remoteInfo = ZIPFoundation; - }; - 828CF8C6B64AF83C23F627454D91DB82 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = AA15C8469D67684160CC2A7098EB841C; - remoteInfo = ZIPFoundation; - }; - 917C4D05587FB2E0FD2A11632BEC2F9D /* PBXContainerItemProxy */ = { + 21F9491451FF3DCCE2F7ABE74FA1BF71 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; remoteGlobalIDString = AA2E57587AA8EECA63C4BE08EA3CB6D2; remoteInfo = RDReaderView; }; - 976E30463A8036E3D8D1477F07FA7BD6 /* PBXContainerItemProxy */ = { + 2C341FDE4508BEEBB3BC7DF6B51D37E3 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; remoteGlobalIDString = 19622742EBA51E823D6DAE3F8CDBFAD4; remoteInfo = SnapKit; }; - 98EA671A7DB63934E21A28845DCB9C8A /* PBXContainerItemProxy */ = { + 3A88EB3BFD0B1573E2C1D4D635B1C0F4 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 19622742EBA51E823D6DAE3F8CDBFAD4; - remoteInfo = SnapKit; + remoteGlobalIDString = AA15C8469D67684160CC2A7098EB841C; + remoteInfo = ZIPFoundation; }; - D224871CEC07B0D7BBFD32511315959B /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 8619D5ADECF2B26CFD9A9826D61D289A; - remoteInfo = SSAlertSwift; - }; - DE34F65282FF96865061019049BBF1E6 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = AE7F393FB7805DE2664AB4111873F907; - remoteInfo = "RDReaderView-RDReaderViewAssets"; - }; - E10395D53992688715C1F23F6FDB0ECB /* PBXContainerItemProxy */ = { + 3B5D920B697B5CC498D21895C14A2822 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; remoteGlobalIDString = C7A8D82E407CD3FDC3BA55CEE519B252; remoteInfo = "ZIPFoundation-ZIPFoundation_Privacy"; }; - FB62369371339A72FDF69546952F2BC1 /* PBXContainerItemProxy */ = { + 4B12DDA215649FC0BD01FDED78F56A1D /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; remoteGlobalIDString = 8F6E5A5BF72D62CDFD25F91A7CFA3309; remoteInfo = DTFoundation; }; - FCBD6F1BB5C6853449BA270D434F2F8A /* PBXContainerItemProxy */ = { + 68CF89A2645BAD91F4A2A60A2B03BC9C /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 19622742EBA51E823D6DAE3F8CDBFAD4; + remoteInfo = SnapKit; + }; + 6BE1421CDA00F2733A05769CE52ACDB0 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; remoteGlobalIDString = B88F4EA0695B6B3165C64594850D72C7; remoteInfo = DTCoreText; }; - FD8B1379DFAF4624B6341C6E0A635FF7 /* PBXContainerItemProxy */ = { + 769E3922D6EF90FC105378371AD83AE0 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 8F6E5A5BF72D62CDFD25F91A7CFA3309; + remoteInfo = DTFoundation; + }; + 8495735DE53D4168DC26101C6D19DD8D /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 8A8DB685241263AFDF5E6B20FE67B93A; + remoteInfo = "SnapKit-SnapKit_Privacy"; + }; + 923111445E67BE92A223CBD0DE4D82E7 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = AE7F393FB7805DE2664AB4111873F907; + remoteInfo = "RDReaderView-RDReaderViewAssets"; + }; + 95F7ED85ACE5FB85F86AE0577F0DAA2A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 8619D5ADECF2B26CFD9A9826D61D289A; + remoteInfo = SSAlertSwift; + }; + C4FE1D60CA9E1F9C78E4DE7CCF714CA7 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 8619D5ADECF2B26CFD9A9826D61D289A; + remoteInfo = SSAlertSwift; + }; + CF573978303F543D918F1C88627EF0FD /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; remoteGlobalIDString = B88F4EA0695B6B3165C64594850D72C7; remoteInfo = DTCoreText; }; + E715D8F65E7D7E80C6F0C07416FCE5F1 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 0C24CB0E87A728A11AA1124CB360D6A1; + remoteInfo = "DTCoreText-Resources"; + }; + F23CFA277994E35BABC3ADBD5AF87BC8 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = AA15C8469D67684160CC2A7098EB841C; + remoteInfo = ZIPFoundation; + }; /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ - 012A1C7A060C2FBFD9949523E0D8B321 /* RDReaderView.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = RDReaderView.podspec; sourceTree = ""; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; 015F3EE69253C66E11B931E3360BA5FE /* DTCoreText-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "DTCoreText-dummy.m"; sourceTree = ""; }; + 02375C5EDA3CE9379DB415A85CFCC0F2 /* RDEPUBTextLayoutFrame.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextLayoutFrame.swift; sourceTree = ""; }; 029130886CE8E422D16ADF97468CB1B0 /* DTCoreTextLayoutFrame.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTCoreTextLayoutFrame.m; path = Core/Source/DTCoreTextLayoutFrame.m; sourceTree = ""; }; 02CF362F88AB69253F1898E53D7A286A /* ConstraintDSL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintDSL.swift; path = Sources/ConstraintDSL.swift; sourceTree = ""; }; 02EDFE0EEA47398F3E1A361A73AF6A6C /* NSData+DTCrypto.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSData+DTCrypto.h"; path = "Core/Source/NSData+DTCrypto.h"; sourceTree = ""; }; + 034E4400505DA6AC50F9D93914301F45 /* RDPlainTextBookBuilder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDPlainTextBookBuilder.swift; sourceTree = ""; }; 045ADBF2087ADD914A9CA0B62EBF2A9F /* Pods-ReadViewDemo.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-ReadViewDemo.modulemap"; sourceTree = ""; }; + 04B40D87ADCB26B8270415FAA057AACB /* RDEPUBRenderRequest.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBRenderRequest.swift; sourceTree = ""; }; 04F9B298989305B9569B71E448E8C1D4 /* FileManager+ZIPDeprecated.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "FileManager+ZIPDeprecated.swift"; path = "Sources/ZIPFoundation/FileManager+ZIPDeprecated.swift"; sourceTree = ""; }; - 0512178F8D1B6546A1F570515BE9E048 /* RDReaderEPUBContentView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDReaderEPUBContentView.swift; sourceTree = ""; }; 054674EB90C625BB4BEA9368ED92592B /* NSURL+DTUnshorten.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSURL+DTUnshorten.h"; path = "Core/Source/NSURL+DTUnshorten.h"; sourceTree = ""; }; 05D57D16346FAF830F1F82067307EA9F /* default.css */ = {isa = PBXFileReference; includeInIndex = 1; name = default.css; path = Core/Source/default.css; sourceTree = ""; }; 0619F98DA80922E78A07321D0DC54F62 /* Archive+Reading.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Archive+Reading.swift"; path = "Sources/ZIPFoundation/Archive+Reading.swift"; sourceTree = ""; }; 061BD3911E4E530C792E65CED7868C33 /* DTBase64Coding.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTBase64Coding.m; path = Core/Source/DTBase64Coding.m; sourceTree = ""; }; + 065F46518D05F6DEA21AB45C485CCBAC /* RDEPUBSelectionOverlayView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBSelectionOverlayView.swift; sourceTree = ""; }; 073A7F9DF1A554BD1B324EA9E0090E91 /* DTObjectTextAttachment.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTObjectTextAttachment.h; path = Core/Source/DTObjectTextAttachment.h; sourceTree = ""; }; - 07789F5F0A4B4DBFB43191296F14327E /* RDURLReaderController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RDURLReaderController.swift; path = Sources/RDReaderView/RDURLReaderController.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; }; 09BE22EE711B7A38A4443E1C1C12BD79 /* ConstraintMultiplierTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMultiplierTarget.swift; path = Sources/ConstraintMultiplierTarget.swift; sourceTree = ""; }; 09C2D4A3D4F602D125FF38B56C91CF84 /* ZIPFoundation.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = ZIPFoundation.modulemap; sourceTree = ""; }; 09C957F3199C596781EFA1DEA1DDCEC8 /* NSFileWrapper+DTCopying.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSFileWrapper+DTCopying.h"; path = "Core/Source/NSFileWrapper+DTCopying.h"; sourceTree = ""; }; - 0AF90A2265FF213E86C36E9BF188E429 /* RDEPUBTextLayoutFrame.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextLayoutFrame.swift; sourceTree = ""; }; 0B10D3EC1701BBA4D69926915F942558 /* SnapKit-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SnapKit-umbrella.h"; sourceTree = ""; }; 0B7771FDE9AB1688166584C0AA03F12A /* DTCoreTextFontCollection.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTCoreTextFontCollection.h; path = Core/Source/DTCoreTextFontCollection.h; sourceTree = ""; }; - 0C172FFAA0EF6BCF47B5204C12C088FE /* RDEPUBTextRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextRenderer.swift; sourceTree = ""; }; - 0C4C3F52F41CC00A37BF981231036C1A /* RDReaderView-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "RDReaderView-umbrella.h"; sourceTree = ""; }; 0C6BE3B2DA9A8C4CD3760CDAD6F305A5 /* DTCustomColoredAccessory.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTCustomColoredAccessory.m; path = Core/Source/iOS/DTCustomColoredAccessory.m; sourceTree = ""; }; 0D75FEDE65722CF41F7F32A164376926 /* DTHTMLParser.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTHTMLParser.h; path = Core/Source/DTHTMLParser/DTHTMLParser.h; sourceTree = ""; }; 0E138EC76D0DF24544D29D1A4D7429E3 /* ConstraintMakerPrioritizable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMakerPrioritizable.swift; path = Sources/ConstraintMakerPrioritizable.swift; sourceTree = ""; }; 0E8C0D83EB6EDE71B264B6B0DD4644F5 /* LayoutConstraintItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LayoutConstraintItem.swift; path = Sources/LayoutConstraintItem.swift; sourceTree = ""; }; + 0EBF956AF4A708B6D77C0765D1B8D059 /* RDReaderView.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = RDReaderView.podspec; sourceTree = ""; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; 0F5D34047BAA894BEF1DFA23E6A9DAB1 /* DTCoreTextMacros.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTCoreTextMacros.h; path = Core/Source/DTCoreTextMacros.h; sourceTree = ""; }; 0FC368BD2A8D266EB771E5FB9A5A5B3C /* NSDictionary+DTError.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSDictionary+DTError.h"; path = "Core/Source/NSDictionary+DTError.h"; sourceTree = ""; }; - 1030C3F7928F1D26875118AA9E6328CC /* RDEPUBTextLayouter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextLayouter.swift; sourceTree = ""; }; + 114B1402AFD8DC2B76F64E2A702FF5EC /* RDEPUBReaderDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderDelegate.swift; sourceTree = ""; }; 11B604FC3B0D5C91FEA763DCC0BE4DC5 /* DTHTMLParserNode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTHTMLParserNode.m; path = Core/Source/DTHTMLParserNode.m; sourceTree = ""; }; 12A5EA26EE7539EDDA90649D22FB675D /* DTImage+HTML.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "DTImage+HTML.m"; path = "Core/Source/DTImage+HTML.m"; sourceTree = ""; }; 13AB6A32A293E3DC21A7047C6DB958CA /* DTHTMLParserTextNode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTHTMLParserTextNode.m; path = Core/Source/DTHTMLParserTextNode.m; sourceTree = ""; }; @@ -532,49 +517,46 @@ 15941683D394FB8D7EAE91CD2CF03FF1 /* UIImage+DTFoundation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+DTFoundation.h"; path = "Core/Source/iOS/UIImage+DTFoundation.h"; sourceTree = ""; }; 174FC0CA05D20BB995E211DE5A0857DB /* Archive+MemoryFile.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Archive+MemoryFile.swift"; path = "Sources/ZIPFoundation/Archive+MemoryFile.swift"; sourceTree = ""; }; 1756C6FFCA695290BA62DA4E7B6DD20B /* NSFileWrapper+DTCopying.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSFileWrapper+DTCopying.m"; path = "Core/Source/NSFileWrapper+DTCopying.m"; sourceTree = ""; }; + 178D1E4BA4980627DBDDD27A035D98EF /* RDEPUBReaderSettings.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderSettings.swift; sourceTree = ""; }; 17F750F38183302BF345F40F5A4CDD43 /* NSData+DTCrypto.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSData+DTCrypto.m"; path = "Core/Source/NSData+DTCrypto.m"; sourceTree = ""; }; 18387159515E0523AFB4204B1AF940ED /* SSAlertSwift.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SSAlertSwift.debug.xcconfig; sourceTree = ""; }; + 1AA7CFC7A07A8C9400697DA331E35860 /* RDEPUBReaderSettingsViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderSettingsViewController.swift; sourceTree = ""; }; 1ABC2F552388CD08EC1EFDEF606AE222 /* DTTextAttachmentHTMLElement.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTTextAttachmentHTMLElement.m; path = Core/Source/DTTextAttachmentHTMLElement.m; sourceTree = ""; }; 1ACA5E519F100582F0D772FCD76125C0 /* NSString+DTFormatNumbers.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSString+DTFormatNumbers.m"; path = "Core/Source/NSString+DTFormatNumbers.m"; sourceTree = ""; }; 1AD502A1FA6EB1E38200B5283F979504 /* Pods-ReadViewDemo.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-ReadViewDemo.release.xcconfig"; sourceTree = ""; }; 1B443D035BA5652B03A41BE905C5AC17 /* DTPieProgressIndicator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTPieProgressIndicator.h; path = Core/Source/iOS/DTPieProgressIndicator.h; sourceTree = ""; }; 1C8F0DCEAA5A3DF38C503CA30DC94C1C /* Archive.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Archive.swift; path = Sources/ZIPFoundation/Archive.swift; sourceTree = ""; }; - 1D1FA5C8971E56EB08777D1A25206FD8 /* ResourceBundle-RDReaderViewAssets-RDReaderView-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-RDReaderViewAssets-RDReaderView-Info.plist"; sourceTree = ""; }; 1D4C9B7ED5E04C216AB28E3A4065C1C5 /* DTHTMLElement.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTHTMLElement.m; path = Core/Source/DTHTMLElement.m; sourceTree = ""; }; 1D6DA580F40DF113709E15CF6542A35C /* DTCoreTextLayouter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTCoreTextLayouter.m; path = Core/Source/DTCoreTextLayouter.m; sourceTree = ""; }; - 1D9C04C513F60B0120316FE7BB7D1F5C /* RDEPUBPageLayoutSnapshot.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBPageLayoutSnapshot.swift; sourceTree = ""; }; - 1DD978B18AE5C3EA439E75A39DF62FA4 /* RDEPUBPaginator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBPaginator.swift; sourceTree = ""; }; + 1D87EC99EB119D764849BD1E582C7D06 /* RDEPUBReaderTopToolView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderTopToolView.swift; sourceTree = ""; }; 1E89FE5F2996336E862E82C1E14E0EE7 /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; name = PrivacyInfo.xcprivacy; path = Sources/ZIPFoundation/Resources/PrivacyInfo.xcprivacy; sourceTree = ""; }; 1F090A0289338B14050FAF16C22605B0 /* ConstraintConstantTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintConstantTarget.swift; path = Sources/ConstraintConstantTarget.swift; sourceTree = ""; }; - 1F1D00374FF48425EE72CF7A117BA5CC /* RDEPUBParser+Archive.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBParser+Archive.swift"; sourceTree = ""; }; + 1F4E662F4176B8840BB4DF9A76EB5443 /* RDReaderView-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "RDReaderView-dummy.m"; sourceTree = ""; }; 2047430DF5C84E0A8FC8874A2B915FC3 /* Pods-ReadViewDemo-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-ReadViewDemo-acknowledgements.markdown"; sourceTree = ""; }; - 20E401E01605056D23F4A3345AEAE066 /* RDEPUBRenderRequest.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBRenderRequest.swift; sourceTree = ""; }; - 20E5E5D5715B6B1FBEC53F0E67DB5683 /* RDReaderTopToolView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDReaderTopToolView.swift; sourceTree = ""; }; 2101691D5743105B2E3E40376584B91C /* DTFolderMonitor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTFolderMonitor.h; path = Core/Source/DTFolderMonitor.h; sourceTree = ""; }; 21BAA93E67D8CBC5297302D798FB4F7A /* DTAttributedLabel.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTAttributedLabel.m; path = Core/Source/DTAttributedLabel.m; sourceTree = ""; }; - 21DC85814825F7507AD22499EF31F73A /* RDEPUBReadingSession.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReadingSession.swift; sourceTree = ""; }; 2280F2302F54E90122747821FE681543 /* SSAlertViewExtention.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SSAlertViewExtention.swift; path = Sources/SSAlertSwift/SSAlertViewExtention.swift; sourceTree = ""; }; 238893C9CBD95CB9BDF069EB5A303E17 /* RDReaderView */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = RDReaderView; path = RDReaderView.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 23AD6E6A62F1EE4221018B6DA2391BA7 /* RDEPUBReaderTheme.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderTheme.swift; sourceTree = ""; }; 249747495DE8349E480E4789B12D366D /* SnapKit.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SnapKit.modulemap; sourceTree = ""; }; 25F52D9C765ED2FA87834D4310203E0B /* DTFoundation-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "DTFoundation-prefix.pch"; sourceTree = ""; }; - 26AA3263BCEE270CAF59B9DE895B504F /* RDEPUBSearchModels.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBSearchModels.swift; sourceTree = ""; }; + 264D3D6CCA46CD555E458C17F6BEC460 /* RDEPUBWebViewDebug.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBWebViewDebug.swift; sourceTree = ""; }; 2702E05AA7A266B7D8D0F881FD4E09DA /* DTCompatibility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTCompatibility.h; path = Core/Source/DTCompatibility.h; sourceTree = ""; }; 27205D159B39090908CA0E9C3997B784 /* NSDictionary+DTCoreText.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSDictionary+DTCoreText.h"; path = "Core/Source/NSDictionary+DTCoreText.h"; sourceTree = ""; }; 27B7D3C6F0C845E3D42BBA613FFB0465 /* FileManager+ZIP.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "FileManager+ZIP.swift"; path = "Sources/ZIPFoundation/FileManager+ZIP.swift"; sourceTree = ""; }; 28043173CA3B3787DC401ACEB5398108 /* DTCoreTextLayoutFrame+Cursor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "DTCoreTextLayoutFrame+Cursor.h"; path = "Core/Source/DTCoreTextLayoutFrame+Cursor.h"; sourceTree = ""; }; + 28D388240137738CB7BC33CB6B82A62A /* RDEPUBParser+TOC.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBParser+TOC.swift"; sourceTree = ""; }; 28D62D3200AC3D4E42C81CDFF7E884E8 /* ConstraintItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintItem.swift; path = Sources/ConstraintItem.swift; sourceTree = ""; }; - 2A9B2DE1872018CD5707B3815621E71F /* RDEPUBParser+Resources.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBParser+Resources.swift"; sourceTree = ""; }; + 29E5523049D286F000DEB6F1D59AD428 /* RDEPUBReadingSession.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReadingSession.swift; sourceTree = ""; }; + 2A7797621CF825900662A85E723445CD /* RDEPUBWebDecorationOverlayView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBWebDecorationOverlayView.swift; sourceTree = ""; }; 2BA19BD582C1BD54AF673014C04848B6 /* DTFoundation-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "DTFoundation-Info.plist"; sourceTree = ""; }; 2C50CAB4241C141EF6EC9ED22AB3A7E8 /* NSDictionary+DTCoreText.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSDictionary+DTCoreText.m"; path = "Core/Source/NSDictionary+DTCoreText.m"; sourceTree = ""; }; - 2CBCFA278227D30D24F6B58959F297CC /* RDEPUBNavigatorState.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBNavigatorState.swift; sourceTree = ""; }; 2CD63BBDA1CB02B15A54D2CDD8A3ACD7 /* SnapKit-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SnapKit-prefix.pch"; sourceTree = ""; }; 2D36F7CDCD7D5788CDCB3A1421DB242B /* NSURL+DTAppLinks.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSURL+DTAppLinks.m"; path = "Core/Source/iOS/NSURL+DTAppLinks.m"; sourceTree = ""; }; 2D3D7C8444F58D9B3FCB4F3006D2CFBA /* NSAttributedString+HTML.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSAttributedString+HTML.h"; path = "Core/Source/NSAttributedString+HTML.h"; sourceTree = ""; }; 2DE4FA5133891593CB45AF36B8EBF60C /* SSAlertSwift-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SSAlertSwift-dummy.m"; sourceTree = ""; }; - 2EE5C4D730F22EEA9668C71B88034A9B /* RDReaderView-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "RDReaderView-Info.plist"; sourceTree = ""; }; - 2F917B8708AE5A66B32AB42073824846 /* RDEPUBChapterData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBChapterData.swift; sourceTree = ""; }; - 306348D231BB9C268B7FDAA26E17D898 /* RDEPUBTextBookCache.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextBookCache.swift; sourceTree = ""; }; 306477706BBB1E784F55BCF8EB1AD737 /* Pods-ReadViewDemo.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-ReadViewDemo.debug.xcconfig"; sourceTree = ""; }; + 31A85F27E07E44ECFCCBCECAAE32A56F /* RDEPUBChapterData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBChapterData.swift; sourceTree = ""; }; 31BD7533867336DEA9B835F471767178 /* NSString+DTURLEncoding.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSString+DTURLEncoding.h"; path = "Core/Source/NSString+DTURLEncoding.h"; sourceTree = ""; }; 31F3F91D5624C451E5D44D85B1DDE7C5 /* NSMutableString+HTML.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSMutableString+HTML.m"; path = "Core/Source/NSMutableString+HTML.m"; sourceTree = ""; }; 32A5ABB8F3656A110B955B0306E9A8C3 /* ConstraintInsetTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintInsetTarget.swift; path = Sources/ConstraintInsetTarget.swift; sourceTree = ""; }; @@ -582,25 +564,22 @@ 32FB2B1B0498DCBE7B79BDF49E963E3D /* DTHTMLParser.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTHTMLParser.m; path = Core/Source/DTHTMLParser/DTHTMLParser.m; sourceTree = ""; }; 33DB57DF8C5AE334B1BBE9F989352F1D /* DTCustomColoredAccessory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTCustomColoredAccessory.h; path = Core/Source/iOS/DTCustomColoredAccessory.h; sourceTree = ""; }; 354C5DD0ACC742762200A640ADA859C6 /* NSCoder+DTCompatibility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSCoder+DTCompatibility.h"; path = "Core/Source/NSCoder+DTCompatibility.h"; sourceTree = ""; }; - 3572593435302A8E2EC2D722D61D2158 /* RDReaderController+EPUBText.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDReaderController+EPUBText.swift"; sourceTree = ""; }; - 35D6A841E33C5FB20FE0A8999084F939 /* RDEPUBSearchEngine.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBSearchEngine.swift; sourceTree = ""; }; 365FB4C3E0FF364C076EE4E9E47C32EA /* DTCoreText.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = DTCoreText.modulemap; sourceTree = ""; }; 36FCB869246FE45FD1C9609A34EB4E74 /* DTCoreTextGlyphRun.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTCoreTextGlyphRun.m; path = Core/Source/DTCoreTextGlyphRun.m; sourceTree = ""; }; 375179DD3A4576CEF947E1760BBDC69B /* DTBlockFunctions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTBlockFunctions.m; path = Core/Source/DTBlockFunctions.m; sourceTree = ""; }; + 37D54A0CE6965D4142DB16CE54293F16 /* RDEPUBWebView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBWebView.swift; sourceTree = ""; }; 392A75EAF280876545D14AA00517BA4C /* ConstraintMakerEditable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMakerEditable.swift; path = Sources/ConstraintMakerEditable.swift; sourceTree = ""; }; - 3A66404CE3169BD8F63D23D4D33D77D8 /* RDReaderView-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "RDReaderView-dummy.m"; sourceTree = ""; }; + 3B52BDF13EFDE5C61F7A1B1FF5B79F02 /* RDEPUBWebView+Reflowable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBWebView+Reflowable.swift"; sourceTree = ""; }; 3B610E558C4917C4257DC198EAFEE2F6 /* DTCSSStylesheet.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTCSSStylesheet.h; path = Core/Source/DTCSSStylesheet.h; sourceTree = ""; }; 3B931AB189BDDE2CCE8578B50BD60AF0 /* DTIframeTextAttachment.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTIframeTextAttachment.h; path = Core/Source/DTIframeTextAttachment.h; sourceTree = ""; }; - 3D72E6224669305A4D5B7706034F3B54 /* RDEPUBTextPaging.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextPaging.swift; sourceTree = ""; }; + 3CD377E1D9608FD654CA2A3B1D4DF344 /* RDEPUBNavigatorState.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBNavigatorState.swift; sourceTree = ""; }; 3DC78D0B0F37BF9AD1058CACA9AAF9BE /* Data+Serialization.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Data+Serialization.swift"; path = "Sources/ZIPFoundation/Data+Serialization.swift"; sourceTree = ""; }; - 3DE43A617859DCF838AD6B3704F27495 /* SSEventTrigger.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SSEventTrigger.swift; sourceTree = ""; }; - 3F53156C1740538E2577CD8931C1C2F2 /* RDEPUBJavaScriptBridge.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBJavaScriptBridge.swift; sourceTree = ""; }; - 4070E0D5D24CF679BE8BE47F788CA37F /* SSChapterListController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SSChapterListController.swift; sourceTree = ""; }; + 3DD8D4287E569AB98F04CF03AE208B71 /* RDEPUBWebView+Configuration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBWebView+Configuration.swift"; sourceTree = ""; }; 4219E7C32019899890CAB66E5FBDF524 /* UIView+DTFoundation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+DTFoundation.m"; path = "Core/Source/iOS/UIView+DTFoundation.m"; sourceTree = ""; }; 424F12BEB0EDAAF1C719B5103D30C653 /* DTAnchorHTMLElement.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTAnchorHTMLElement.h; path = Core/Source/DTAnchorHTMLElement.h; sourceTree = ""; }; 426D442C01742E4361F5BC34D43152A6 /* DTImageTextAttachment.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTImageTextAttachment.h; path = Core/Source/DTImageTextAttachment.h; sourceTree = ""; }; - 42BA21BD7D701376F3EE3EDE8DDAAD1A /* RDEPUBTextRendererSupport.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextRendererSupport.swift; sourceTree = ""; }; 43CFADE0F46014990052AD67F17C86FF /* DTAccessibilityViewProxy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTAccessibilityViewProxy.m; path = Core/Source/DTAccessibilityViewProxy.m; sourceTree = ""; }; + 44009B7A804BFDD7B2AD3F1CBE12CE42 /* RDEPUBParser+Resources.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBParser+Resources.swift"; sourceTree = ""; }; 4428633C8EC3F6289CCF376F588CE0C4 /* NSString+HTML.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSString+HTML.m"; path = "Core/Source/NSString+HTML.m"; 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; }; 45C7129757B54DFD9E445D0A17D73A83 /* ConstraintPriority.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintPriority.swift; path = Sources/ConstraintPriority.swift; sourceTree = ""; }; @@ -608,21 +587,20 @@ 4684B406B325B35F39322D75B59B6479 /* ConstraintLayoutGuideDSL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintLayoutGuideDSL.swift; path = Sources/ConstraintLayoutGuideDSL.swift; sourceTree = ""; }; 477A0FC2A1F0B7F7CCF72D201ECEBAB0 /* DTDictationPlaceholderTextAttachment.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTDictationPlaceholderTextAttachment.m; path = Core/Source/DTDictationPlaceholderTextAttachment.m; sourceTree = ""; }; 48A4A6EDC08C8AC933D0DCD507E9D173 /* ZIPFoundation */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = ZIPFoundation; path = ZIPFoundation.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 4911CA3333EDF39D421801CC06FE7034 /* RDReaderContentView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDReaderContentView.swift; sourceTree = ""; }; + 48A4E8E3CD48799CF1E9D64CD7CE0C86 /* RDEPUBPreferences.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBPreferences.swift; sourceTree = ""; }; + 49708F53EFFC5069D69D7BDBE145D5CB /* RDEPUBResourceResolver.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBResourceResolver.swift; sourceTree = ""; }; 49A21AE1A0AB5383F895B34EA7D6973D /* DTCoreTextGlyphRun.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTCoreTextGlyphRun.h; path = Core/Source/DTCoreTextGlyphRun.h; sourceTree = ""; }; 4A06A36ADBE678DB44158D32E751FAFF /* ZIPFoundation-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "ZIPFoundation-dummy.m"; sourceTree = ""; }; 4A2659DB0685E16ABAE0382F726DA8C8 /* Archive+Helpers.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Archive+Helpers.swift"; path = "Sources/ZIPFoundation/Archive+Helpers.swift"; sourceTree = ""; }; 4AF6156128A1A0CA24D9D06E346B9445 /* DTVersion.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTVersion.m; path = Core/Source/DTVersion.m; sourceTree = ""; }; 4BEC60CB3EDA1C189D3B062E29217440 /* ZIPFoundation.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = ZIPFoundation.debug.xcconfig; 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; }; - 4CE4B942B105AC852002D99139C83CC7 /* RDReaderTheme.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDReaderTheme.swift; sourceTree = ""; }; 4D641809A99849F80FDCB02F8CE8D6A0 /* Data+CompressionDeprecated.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Data+CompressionDeprecated.swift"; path = "Sources/ZIPFoundation/Data+CompressionDeprecated.swift"; sourceTree = ""; }; 4EEFAE80193E1F0DA53400C9AD641410 /* DTActivityTitleView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTActivityTitleView.m; path = Core/Source/iOS/DTActivityTitleView.m; sourceTree = ""; }; + 4EF375B490014DEFC2BB798269AA0985 /* RDEPUBTextBookBuilder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextBookBuilder.swift; sourceTree = ""; }; 4F0486D3B46DC92AB254D6EE9CC233BF /* DTAccessibilityElement.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTAccessibilityElement.m; path = Core/Source/DTAccessibilityElement.m; sourceTree = ""; }; - 4F0841502401055DFD529A9786C79418 /* RDEPUBParser.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBParser.swift; sourceTree = ""; }; 50297AAB8278F2BB6FCFE82B20C7A049 /* ConstraintLayoutSupport.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintLayoutSupport.swift; path = Sources/ConstraintLayoutSupport.swift; sourceTree = ""; }; 5155CCDD61E030184249A020FE5D74B0 /* DTWeakSupport.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTWeakSupport.h; path = Core/Source/DTWeakSupport.h; sourceTree = ""; }; - 51BABDA6EF5FDECBFDCD039867E35C96 /* RDEPUBReaderChapterListController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderChapterListController.swift; sourceTree = ""; }; 5245010774F8F1C4857763CC7B96E7B4 /* ConstraintMakerExtendable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMakerExtendable.swift; path = Sources/ConstraintMakerExtendable.swift; sourceTree = ""; }; 533CFFF04BE7BC4BDEAE11DF675A84CA /* DTBreakHTMLElement.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTBreakHTMLElement.h; path = Core/Source/DTBreakHTMLElement.h; sourceTree = ""; }; 53499F40E1790A6CBE8AFEB3AC5BEFC8 /* NSMutableArray+DTMoving.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSMutableArray+DTMoving.m"; path = "Core/Source/NSMutableArray+DTMoving.m"; sourceTree = ""; }; @@ -634,48 +612,37 @@ 557DA029E15EC99631B647AE8922007F /* NSURL+DTAppLinks.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSURL+DTAppLinks.h"; path = "Core/Source/iOS/NSURL+DTAppLinks.h"; sourceTree = ""; }; 56489D9BA834497E48438A4B4E1CCCFF /* DTCoreTextFontDescriptor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTCoreTextFontDescriptor.h; path = Core/Source/DTCoreTextFontDescriptor.h; sourceTree = ""; }; 5679D281C282896E6FC352C48E0AF439 /* DTAttributedLabel.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTAttributedLabel.h; path = Core/Source/DTAttributedLabel.h; sourceTree = ""; }; - 5814F6427B71252C21BD93957769C5E5 /* epub-bridge.js */ = {isa = PBXFileReference; includeInIndex = 1; name = "epub-bridge.js"; path = "Sources/RDReaderView/Resources/epub-bridge.js"; sourceTree = ""; }; - 5863A9106B12E189BFC4B3EDBB1973F8 /* RDEPUBReaderController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderController.swift; sourceTree = ""; }; + 573B36675B38E2D9301B3CCFD9E7CCFF /* RDReaderGestureController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDReaderGestureController.swift; sourceTree = ""; }; + 57A61F7A5E8A862AB61CC09109D9E81E /* RDEPUBTextBookCache.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextBookCache.swift; sourceTree = ""; }; + 586127E2E5DFA220EAB96633512B3DF3 /* RDEPUBWebContentView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBWebContentView.swift; sourceTree = ""; }; + 5931AEB1E931A7219B0643093173E4B1 /* RDEPUBPageLayoutSnapshot.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBPageLayoutSnapshot.swift; sourceTree = ""; }; 5964AF1336E2F0DA0E2C32991E76C78C /* Data+Compression.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Data+Compression.swift"; path = "Sources/ZIPFoundation/Data+Compression.swift"; sourceTree = ""; }; 5977986EDFE76D5EF96A6D95483B12F7 /* Pods-ReadViewDemo-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-ReadViewDemo-frameworks.sh"; sourceTree = ""; }; 5A9A82CB094636AFB53D6D130D6219BA /* ConstraintLayoutGuide+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ConstraintLayoutGuide+Extensions.swift"; path = "Sources/ConstraintLayoutGuide+Extensions.swift"; sourceTree = ""; }; + 5AC9A769CBC46F65ECAE32EAD0F196B6 /* RDEPUBWebView+JavaScriptBridge.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBWebView+JavaScriptBridge.swift"; sourceTree = ""; }; 5B007AEEACE9EA271DD73AFD80A74D83 /* DTLog.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTLog.m; path = Core/Source/DTLog.m; sourceTree = ""; }; - 5B58F5EFAD7D9727BD8DC7BE81B09B9D /* RDReaderManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDReaderManager.swift; sourceTree = ""; }; - 5B9B09D14E157387B4541DC0B4F80DE5 /* RDEPUBNavigatorLayoutContext.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBNavigatorLayoutContext.swift; sourceTree = ""; }; 5BA251BAC8B430B3A4D4C4321046B990 /* Archive+Deprecated.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Archive+Deprecated.swift"; path = "Sources/ZIPFoundation/Archive+Deprecated.swift"; sourceTree = ""; }; 5D62C5531667F364F14DB67D33FFA554 /* DTCoreTextParagraphStyle.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTCoreTextParagraphStyle.h; path = Core/Source/DTCoreTextParagraphStyle.h; sourceTree = ""; }; 5DA1E8494B86FFD79C639DCB8C21E1BB /* DTPieProgressIndicator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTPieProgressIndicator.m; path = Core/Source/iOS/DTPieProgressIndicator.m; sourceTree = ""; }; - 5DDF2DF67BE36B35797B29961757F372 /* RDEPUBTextAnchor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextAnchor.swift; sourceTree = ""; }; + 5E372F6B632B54653CBA022D20FB3367 /* RDEPUBReaderToolView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderToolView.swift; sourceTree = ""; }; 5E791886E59DC0FAB02C6BBAB5BE5B6B /* DTCoreTextFontCollection.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTCoreTextFontCollection.m; path = Core/Source/DTCoreTextFontCollection.m; sourceTree = ""; }; - 5F63A66B843D13F64610EC901D02B0A5 /* RDReaderPageChildViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RDReaderPageChildViewController.swift; path = Sources/RDReaderView/RDReaderPageChildViewController.swift; sourceTree = ""; }; 5F760D62F6C6F083374702146337F2CB /* DTCoreTextParagraphStyle.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTCoreTextParagraphStyle.m; path = Core/Source/DTCoreTextParagraphStyle.m; sourceTree = ""; }; 5F991240340FA026C71B68EB25B9F9C8 /* Entry+Serialization.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Entry+Serialization.swift"; path = "Sources/ZIPFoundation/Entry+Serialization.swift"; sourceTree = ""; }; 5FAB3C7F19A511C2B1B7DFBA3CA308C4 /* DTFoundation-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "DTFoundation-umbrella.h"; sourceTree = ""; }; 6014DA7213E4687224F2BF921E30002C /* DTFoundation.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = DTFoundation.debug.xcconfig; sourceTree = ""; }; 60657D08CCDB38BFED30BD40F4720CE4 /* ConstraintMaker.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMaker.swift; path = Sources/ConstraintMaker.swift; sourceTree = ""; }; - 607A6747DD754112DE73B195EC10FA62 /* RDEPUBTextSearchEngine.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextSearchEngine.swift; sourceTree = ""; }; - 60884EDD3BAA2D90E3558705210402E4 /* epub-fixed-layout.html */ = {isa = PBXFileReference; includeInIndex = 1; name = "epub-fixed-layout.html"; path = "Sources/RDReaderView/Resources/epub-fixed-layout.html"; sourceTree = ""; }; + 606D7AB51D4BF9B4AAD104DF89B5B9AD /* RDReaderView-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "RDReaderView-umbrella.h"; sourceTree = ""; }; 61E36C4FE448DDDA03450847FCB785B6 /* Archive+BackingConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Archive+BackingConfiguration.swift"; path = "Sources/ZIPFoundation/Archive+BackingConfiguration.swift"; sourceTree = ""; }; 63A6EDF10DA5A051C6CDCBE5D97AF11E /* DTVideoTextAttachment.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTVideoTextAttachment.m; path = Core/Source/DTVideoTextAttachment.m; sourceTree = ""; }; - 63C815D99D3B252F4FD7E1E2D9771B10 /* RDPlainTextBookBuilder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDPlainTextBookBuilder.swift; sourceTree = ""; }; - 63CED2EEF113FB7F7860A952BD829D2D /* RDEPUBPageInteractionController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBPageInteractionController.swift; sourceTree = ""; }; - 642B52DF95544C7DEE9C304D088CF51D /* RDEPUBFixedLayoutTemplate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBFixedLayoutTemplate.swift; sourceTree = ""; }; 647FB0C5AAF84C71A7784DD277E48910 /* UIFont+DTCoreText.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIFont+DTCoreText.h"; path = "Core/Source/UIFont+DTCoreText.h"; sourceTree = ""; }; 64868ADD0419A5D112863F638932DA34 /* ZIPFoundation-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ZIPFoundation-Info.plist"; sourceTree = ""; }; 64AB89EAB10148C39B726B26BE04F4F8 /* DTCoreTextLayoutLine.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTCoreTextLayoutLine.h; path = Core/Source/DTCoreTextLayoutLine.h; sourceTree = ""; }; 6578DFAB51436E8DF266FD087700E26B /* ConstraintDescription.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintDescription.swift; path = Sources/ConstraintDescription.swift; sourceTree = ""; }; - 6805A9F7BC278ACA3055C1604ECA2CDA /* RDReaderCoverView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDReaderCoverView.swift; sourceTree = ""; }; - 684215FCFE21769A54F1F98739057EF1 /* RDEPUBReaderPersistence.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderPersistence.swift; sourceTree = ""; }; 6A1EBB9497F4846C84CA0BF5E4F84FC7 /* DTLog.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTLog.h; path = Core/Source/DTLog.h; sourceTree = ""; }; - 6ADD582CD37BE7FB4C862E3995BBD6E2 /* RDEPUBPreferences.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBPreferences.swift; sourceTree = ""; }; 6B96B0998B49D8E149C995474DA5FE5F /* DTHTMLWriter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTHTMLWriter.h; path = Core/Source/DTHTMLWriter.h; sourceTree = ""; }; - 6BE5AD476A35217D43210F7FBA858910 /* RDEPUBResourceResolver.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBResourceResolver.swift; sourceTree = ""; }; 6C647A2EB2720BCBF88B160D124B57BF /* UILayoutSupport+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UILayoutSupport+Extensions.swift"; path = "Sources/UILayoutSupport+Extensions.swift"; sourceTree = ""; }; 6D2EC0B845131A88247902AEA26F40AE /* SSAlertAnimation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SSAlertAnimation.swift; path = Sources/SSAlertSwift/SSAlertAnimation.swift; sourceTree = ""; }; 6D86C7063D1128EAEB3A30EBEF214B3F /* NSString+DTFormatNumbers.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSString+DTFormatNumbers.h"; path = "Core/Source/NSString+DTFormatNumbers.h"; sourceTree = ""; }; - 6F6A518246FE5F3F14F56A59B9D1DF19 /* RDEPUBParser+ReadingProfile.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBParser+ReadingProfile.swift"; sourceTree = ""; }; - 6F7FFE5D5B710020A10F6B3D97E36B92 /* RDEPUBPublication.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBPublication.swift; sourceTree = ""; }; - 7056386E170F7F887E72F81D4D5E1285 /* RDReaderContentCell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RDReaderContentCell.swift; path = Sources/RDReaderView/RDReaderContentCell.swift; sourceTree = ""; }; 70F5D03B9B3B7F182C8F5C1F5D4FA7E7 /* DTTiledLayerWithoutFade.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTTiledLayerWithoutFade.m; path = Core/Source/iOS/DTTiledLayerWithoutFade.m; sourceTree = ""; }; 713C9FD0354D16AFCCFA630A97F2DA68 /* NSCharacterSet+HTML.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSCharacterSet+HTML.m"; path = "Core/Source/NSCharacterSet+HTML.m"; sourceTree = ""; }; 7176B677A350927FC670368313DC2CA1 /* ConstraintConfig.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintConfig.swift; path = Sources/ConstraintConfig.swift; sourceTree = ""; }; @@ -684,7 +651,7 @@ 7345CE45F696634CEA692A86D16F684C /* Entry+ZIP64.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Entry+ZIP64.swift"; path = "Sources/ZIPFoundation/Entry+ZIP64.swift"; sourceTree = ""; }; 73940D215D644B6815A09DA802CFBDDF /* NSArray+DTError.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSArray+DTError.m"; path = "Core/Source/NSArray+DTError.m"; sourceTree = ""; }; 73A99927E52B24583A6A2CF7E6F23848 /* DTVideoTextAttachment.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTVideoTextAttachment.h; path = Core/Source/DTVideoTextAttachment.h; sourceTree = ""; }; - 7400D161F463EBD6D0B3A3E3E03DE2EF /* RDEPUBReaderToolView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderToolView.swift; sourceTree = ""; }; + 749ECE28D47716A820DFDFAE1C9E294D /* RDEPUBDTCoreTextRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBDTCoreTextRenderer.swift; sourceTree = ""; }; 75C5986EF2D63801A8A30B9D77A7FDD0 /* ResourceBundle-ZIPFoundation_Privacy-ZIPFoundation-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-ZIPFoundation_Privacy-ZIPFoundation-Info.plist"; sourceTree = ""; }; 75FA8E843D9225BD65EB9D17825EC0F4 /* NSCharacterSet+HTML.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSCharacterSet+HTML.h"; path = "Core/Source/NSCharacterSet+HTML.h"; sourceTree = ""; }; 76F99C8130EE83A22CD223C7F5E6E66E /* NSAttributedString+SmallCaps.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSAttributedString+SmallCaps.m"; path = "Core/Source/NSAttributedString+SmallCaps.m"; sourceTree = ""; }; @@ -694,65 +661,70 @@ 78EA0DF405F8465A86BFD3DDFD2EC295 /* Pods-ReadViewDemo */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = "Pods-ReadViewDemo"; path = Pods_ReadViewDemo.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 79A77584AB3B92B2508AE0BCFCB8FD87 /* UIView+DTFoundation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+DTFoundation.h"; path = "Core/Source/iOS/UIView+DTFoundation.h"; sourceTree = ""; }; 7AB9016408894675D11069CDAACEDE94 /* DTImage+HTML.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "DTImage+HTML.h"; path = "Core/Source/DTImage+HTML.h"; sourceTree = ""; }; - 7BB01C859C89276EA05BDF3460278A88 /* RDEPUBWebViewDebug.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBWebViewDebug.swift; sourceTree = ""; }; 7C496AB6A73C2D0BD0FF340A6A2960D5 /* DTHTMLAttributedStringBuilder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTHTMLAttributedStringBuilder.m; path = Core/Source/DTHTMLAttributedStringBuilder.m; sourceTree = ""; }; 7D63AE1801C7AB149219317BE7529B26 /* DTAnchorHTMLElement.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTAnchorHTMLElement.m; path = Core/Source/DTAnchorHTMLElement.m; sourceTree = ""; }; 7F051D813D50D20D53205D5FDCAA877C /* UIScreen+DTFoundation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIScreen+DTFoundation.m"; path = "Core/Source/iOS/UIScreen+DTFoundation.m"; sourceTree = ""; }; + 7F47BD1AD90D0D7227EC3804CB2C2AE8 /* epub-fixed-layout.html */ = {isa = PBXFileReference; includeInIndex = 1; name = "epub-fixed-layout.html"; path = "Sources/RDReaderView/EPUBCore/Resources/epub-fixed-layout.html"; sourceTree = ""; }; 80B3D15ED0D19D020663EF055386291A /* DTColor+Compatibility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "DTColor+Compatibility.h"; path = "Core/Source/DTColor+Compatibility.h"; sourceTree = ""; }; - 80B5A7EFACEE28D5031428C8FB33C4BA /* RDReaderView-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "RDReaderView-prefix.pch"; sourceTree = ""; }; + 8114D77A6959999E364B801F9499589D /* RDReaderContentCell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDReaderContentCell.swift; sourceTree = ""; }; 81B8F42440B802E6EC2B1FF7E3022F3A /* SSAlertDefaultAnmation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SSAlertDefaultAnmation.swift; path = Sources/SSAlertSwift/SSAlertDefaultAnmation.swift; sourceTree = ""; }; 8272D0B59ABD6652D0CAE3DFCC2C5EE1 /* DTActivityTitleView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTActivityTitleView.h; path = Core/Source/iOS/DTActivityTitleView.h; sourceTree = ""; }; + 82C37B4E513CEF203D7C832740579E6B /* RDEPUBResourceURLSchemeHandler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBResourceURLSchemeHandler.swift; sourceTree = ""; }; 83410CC9CF2ABE63B90A92F2F988BF65 /* RDReaderView-RDReaderViewAssets */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; name = "RDReaderView-RDReaderViewAssets"; path = RDReaderViewAssets.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; 83E37DC74BB53F90A5AD54842858A62F /* NSString+Paragraphs.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSString+Paragraphs.h"; path = "Core/Source/NSString+Paragraphs.h"; sourceTree = ""; }; + 84ECF423776A6EE042F30DF5BF40DC58 /* RDReaderView-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "RDReaderView-prefix.pch"; sourceTree = ""; }; 8552BE1A1F6A6D2879763DE3B2B8A2DD /* NSNumber+RomanNumerals.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSNumber+RomanNumerals.h"; path = "Core/Source/NSNumber+RomanNumerals.h"; sourceTree = ""; }; - 857A06908857B19DB09FADB8C32EC3EB /* RDEPUBReaderTableOfContentsItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderTableOfContentsItem.swift; sourceTree = ""; }; 86A0361390AA0C29BC1A5487083A12A7 /* DTColorFunctions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTColorFunctions.h; path = Core/Source/DTColorFunctions.h; sourceTree = ""; }; + 871BA1C45F545C9EAD9E1795144209C6 /* RDEPUBParser+Archive.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBParser+Archive.swift"; sourceTree = ""; }; + 87EBF2D16BA02CD25CD1367A4F7026BB /* RDEPUBNavigatorLayoutContext.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBNavigatorLayoutContext.swift; sourceTree = ""; }; 882FA707ED3513D263A1E0656AAD2D33 /* ConstraintPriorityTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintPriorityTarget.swift; path = Sources/ConstraintPriorityTarget.swift; sourceTree = ""; }; 885653999BD237A574B67DB279DE7E87 /* ConstraintRelatableTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintRelatableTarget.swift; path = Sources/ConstraintRelatableTarget.swift; sourceTree = ""; }; - 8A364960A519577D66C4536227B2261D /* RDEPUBResourceURLSchemeHandler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBResourceURLSchemeHandler.swift; sourceTree = ""; }; 8ABDEFEA94DC6408D92AC66DA3625DE5 /* NSString+HTML.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSString+HTML.h"; path = "Core/Source/NSString+HTML.h"; sourceTree = ""; }; 8B35D0622F339A5B8A864FAA0C9EAE47 /* Pods-ReadViewDemo-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-ReadViewDemo-acknowledgements.plist"; sourceTree = ""; }; - 8B57EA1434AA54B81DE1CFCBD3BA3420 /* RDEPUBReaderConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderConfiguration.swift; sourceTree = ""; }; + 8B3CCE79B11EBF54E7B1195D4F4CD00E /* RDEPUBReaderChapterListController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderChapterListController.swift; sourceTree = ""; }; 8B59C9A1B265393E4BA8383B308A5917 /* DTHTMLAttributedStringBuilder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTHTMLAttributedStringBuilder.h; path = Core/Source/DTHTMLAttributedStringBuilder.h; sourceTree = ""; }; 8BD568D38C209BA1CC0EBFA809A35204 /* DTFoundationConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTFoundationConstants.m; path = Core/Source/DTFoundationConstants.m; sourceTree = ""; }; 8BD9F2023FF826F67E69E3407A70A8A6 /* DTVersion.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTVersion.h; path = Core/Source/DTVersion.h; sourceTree = ""; }; + 8CC598DC4A28E4CD6EF8AA1BDBED7D2D /* RDURLReaderController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDURLReaderController.swift; sourceTree = ""; }; 8CFEE298DD52246B46E6FA62B16B38DF /* DTTextHTMLElement.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTTextHTMLElement.m; path = Core/Source/DTTextHTMLElement.m; sourceTree = ""; }; - 8D8BB5522D848ED0D5EB8D6C55B5BD60 /* RDEPUBWebView+Reflowable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBWebView+Reflowable.swift"; sourceTree = ""; }; - 8DE938647F6DF9F7935710F6D4DBD331 /* RDEPUBReaderDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderDelegate.swift; sourceTree = ""; }; + 8DF21684A2D45C7724718A05AB269C7A /* RDEPUBPageInteractionController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBPageInteractionController.swift; sourceTree = ""; }; 8E3E834CCC952717089550F50A2DE59C /* SSAlertSwift-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "SSAlertSwift-Info.plist"; sourceTree = ""; }; 8E5637603691B9B35C2A886B686D3CE7 /* ConstraintViewDSL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintViewDSL.swift; path = Sources/ConstraintViewDSL.swift; sourceTree = ""; }; 8F2D44B82815CA3397BE2C9F64819B88 /* DTCoreTextFunctions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTCoreTextFunctions.m; path = Core/Source/DTCoreTextFunctions.m; sourceTree = ""; }; 8F950CEF31AC0065C0BEAB26BA2CEFA1 /* ConstraintOffsetTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintOffsetTarget.swift; path = Sources/ConstraintOffsetTarget.swift; sourceTree = ""; }; 91144FC099DD458E61625CD939577DAA /* ConstraintDirectionalInsets.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintDirectionalInsets.swift; path = Sources/ConstraintDirectionalInsets.swift; sourceTree = ""; }; 9129D37C7F89AD8FD530663BB4503FC0 /* NSCoder+DTCompatibility.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSCoder+DTCompatibility.m"; path = "Core/Source/NSCoder+DTCompatibility.m"; sourceTree = ""; }; + 91E98E8EB07A175FB72DCB4D69B1BF40 /* RDEPUBReaderHighlightsViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderHighlightsViewController.swift; sourceTree = ""; }; 92460D196C5300656C9649784EBD3C58 /* NSAttributedString+HTML.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSAttributedString+HTML.m"; path = "Core/Source/NSAttributedString+HTML.m"; sourceTree = ""; }; - 9283701EE51EAD75A7011E1E560FDBCA /* RDReaderEndView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDReaderEndView.swift; sourceTree = ""; }; 932FD688DE493323BA6B691BC2CB5094 /* LayoutConstraint.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LayoutConstraint.swift; path = Sources/LayoutConstraint.swift; sourceTree = ""; }; 934F9BB2B3A313294F121484C3A97A14 /* Archive+ReadingDeprecated.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Archive+ReadingDeprecated.swift"; path = "Sources/ZIPFoundation/Archive+ReadingDeprecated.swift"; sourceTree = ""; }; 937CEFA81DA4227008DBFB114783A08B /* SSAlertSwift-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SSAlertSwift-umbrella.h"; sourceTree = ""; }; 945D4549E0B9168D7DDB910DE874B874 /* Typealiases.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Typealiases.swift; path = Sources/Typealiases.swift; sourceTree = ""; }; 957DB4675D5CCBD3CB1762F08619F3F7 /* UIApplication+DTNetworkActivity.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIApplication+DTNetworkActivity.h"; path = "Core/Source/iOS/UIApplication+DTNetworkActivity.h"; sourceTree = ""; }; - 96AD00324920CF04C9BB0564B1B6148A /* RDReaderView.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = RDReaderView.release.xcconfig; sourceTree = ""; }; + 960542929FBAAFA1C1B1991BDD522CEB /* RDReaderView.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = RDReaderView.modulemap; sourceTree = ""; }; + 9661A4FD82D29BF44C5DB5D68F4FF237 /* RDEPUBReaderTableOfContentsItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderTableOfContentsItem.swift; sourceTree = ""; }; + 96718D9DDA02E4E22568D880B91E7D8C /* RDReaderPageChildViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDReaderPageChildViewController.swift; sourceTree = ""; }; 96EEB6B022E22A4ABC86D87469D4815B /* DTSmartPagingScrollView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTSmartPagingScrollView.m; path = Core/Source/iOS/DTSmartPagingScrollView.m; sourceTree = ""; }; 96FA99AA7D4AD0D4246C8DAC1CC0C24E /* DTStylesheetHTMLElement.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTStylesheetHTMLElement.h; path = Core/Source/DTStylesheetHTMLElement.h; sourceTree = ""; }; 979486118B3E90C08386079D57962701 /* SnapKit */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = SnapKit; path = SnapKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 97995C73297871C353364E685939DED9 /* SSAlertAnimationController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SSAlertAnimationController.swift; path = Sources/SSAlertSwift/SSAlertAnimationController.swift; sourceTree = ""; }; 982391EC8620A617B8788C8A6101C96A /* DTDictationPlaceholderView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTDictationPlaceholderView.h; path = Core/Source/DTDictationPlaceholderView.h; sourceTree = ""; }; + 982BAB73B44D6A14A904822EB0836FDA /* RDEPUBSearchEngine.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBSearchEngine.swift; sourceTree = ""; }; 98658510AA525496EBF5792E5D9884ED /* DTListItemHTMLElement.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTListItemHTMLElement.h; path = Core/Source/DTListItemHTMLElement.h; sourceTree = ""; }; 98C7359A7C3FC7675FED220200A43A17 /* Archive+WritingDeprecated.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Archive+WritingDeprecated.swift"; path = "Sources/ZIPFoundation/Archive+WritingDeprecated.swift"; sourceTree = ""; }; 99299A9FD6EF739D18352AC5B9325CB0 /* DTAccessibilityElement.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTAccessibilityElement.h; path = Core/Source/DTAccessibilityElement.h; sourceTree = ""; }; - 993C7A07FD4B0D50DE5C6E2F70AFBE88 /* RDReaderBottomToolView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDReaderBottomToolView.swift; sourceTree = ""; }; + 99EF157E0B58EE5D8605F8EDDF4D9350 /* RDEPUBPaginator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBPaginator.swift; sourceTree = ""; }; 9A1B75050E71BDD96FC19EC6BA129E6A /* DTLinkButton.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTLinkButton.m; path = Core/Source/DTLinkButton.m; sourceTree = ""; }; - 9BCF0450FD674EA7F8B1B321287ABDCB /* RDEPUBAssetRepository.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBAssetRepository.swift; sourceTree = ""; }; + 9BD3A31AFC4BC8216C0AA79606708051 /* RDEPUBStyleSheetBuilder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBStyleSheetBuilder.swift; sourceTree = ""; }; 9BFCAC7C2AEA867E67C63A852576774F /* NSURL+DTComparing.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSURL+DTComparing.m"; path = "Core/Source/NSURL+DTComparing.m"; sourceTree = ""; }; + 9C0D3D9DE44CEB89B16F1D598A049EF0 /* ResourceBundle-RDReaderViewAssets-RDReaderView-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-RDReaderViewAssets-RDReaderView-Info.plist"; sourceTree = ""; }; 9C6293E97E128E98559FB74D9A342EAD /* NSMutableString+HTML.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSMutableString+HTML.h"; path = "Core/Source/NSMutableString+HTML.h"; sourceTree = ""; }; - 9C81AA278ED7B2807938E6D37F1ADFEF /* RDEPUBStyleSheetBuilder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBStyleSheetBuilder.swift; sourceTree = ""; }; 9CE078B465FDEF40EC0469626A2C2469 /* SnapKit-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SnapKit-dummy.m"; sourceTree = ""; }; 9D6C48939A8498A09DCFC7F41ECB8A25 /* NSString+CSS.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSString+CSS.h"; path = "Core/Source/NSString+CSS.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; }; - 9E2CFC831716F8266E64D7A3B4B01A7D /* RDEPUBWebView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBWebView.swift; sourceTree = ""; }; + 9DE1E0CEE577C4985CB816FDA2AFDA3F /* RDEPUBParser+ReadingProfile.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBParser+ReadingProfile.swift"; sourceTree = ""; }; 9E6BA0ECCB0ACF8580C3B5192CA9F11B /* ConstraintLayoutGuide.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintLayoutGuide.swift; path = Sources/ConstraintLayoutGuide.swift; sourceTree = ""; }; - 9F6439BD7A3574E7B6875DD32EF4D741 /* RDReaderGestureController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RDReaderGestureController.swift; path = Sources/RDReaderView/RDReaderGestureController.swift; sourceTree = ""; }; + 9F596AE7A8707C4D27AD9ABE552C6C59 /* RDEPUBPublication.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBPublication.swift; sourceTree = ""; }; 9F8F40493DF0BBB3EA5FC1F759A883C4 /* ResourceBundle-Resources-DTCoreText-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-Resources-DTCoreText-Info.plist"; sourceTree = ""; }; A02EA0374C693F881AB36202FB276DCD /* ConstraintView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintView.swift; path = Sources/ConstraintView.swift; sourceTree = ""; }; A0927A875CA1F11DBCE60DFC6F0CA0B6 /* NSScanner+HTML.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSScanner+HTML.h"; path = "Core/Source/NSScanner+HTML.h"; sourceTree = ""; }; @@ -763,46 +735,46 @@ A2C299CFB47AA6ECF86F7348E1EB751F /* NSMutableAttributedString+HTML.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSMutableAttributedString+HTML.h"; path = "Core/Source/NSMutableAttributedString+HTML.h"; sourceTree = ""; }; A3565FEE19F19CB43A43409AFFF2BD2C /* NSString+DTPaths.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSString+DTPaths.m"; path = "Core/Source/NSString+DTPaths.m"; sourceTree = ""; }; A3765B289CB7E6C5DF6160D8EBC83C3C /* UIScreen+DTFoundation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIScreen+DTFoundation.h"; path = "Core/Source/iOS/UIScreen+DTFoundation.h"; sourceTree = ""; }; - A3AA501DEB82EBB5C47EEADCF2BC4723 /* RDEPUBReaderTopToolView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderTopToolView.swift; sourceTree = ""; }; - A42C1076ED8123D5A0DB51530B2E4105 /* RDReaderEditView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDReaderEditView.swift; sourceTree = ""; }; - A473941494879F30EF71401673A3AB9E /* RDEPUBParser+TOC.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBParser+TOC.swift"; sourceTree = ""; }; + A37FEAB6B0E196275B35332A30FF74DD /* UIColor+RDEPUBHex.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "UIColor+RDEPUBHex.swift"; sourceTree = ""; }; A4E43DCDE0C8751557E7E65FEEB1C865 /* DTLazyImageView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTLazyImageView.m; path = Core/Source/DTLazyImageView.m; sourceTree = ""; }; - A50AEC805674BAACE0061FF64A17695B /* RDReaderView.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = RDReaderView.debug.xcconfig; sourceTree = ""; }; A651CEE8062C84A597DBC44ECA3DBCC1 /* ConstraintDirectionalInsetTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintDirectionalInsetTarget.swift; path = Sources/ConstraintDirectionalInsetTarget.swift; sourceTree = ""; }; A68D72764140BC3DF67A2B9E52CEC7A4 /* DTHorizontalRuleHTMLElement.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTHorizontalRuleHTMLElement.m; path = Core/Source/DTHorizontalRuleHTMLElement.m; sourceTree = ""; }; - A8043FBCCFAB2524C1853D06CA3672CF /* RDEPUBTextPaginationSupport.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextPaginationSupport.swift; sourceTree = ""; }; A8DFDCAB69B471EB5667C964865C26CF /* DTCoreGraphicsUtils.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTCoreGraphicsUtils.m; path = Core/Source/DTCoreGraphicsUtils.m; sourceTree = ""; }; A9FBC69C7DA29A7283920FDA9EBBCE8A /* DTAnimatedGIF.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTAnimatedGIF.h; path = Core/Source/iOS/DTAnimatedGIF/DTAnimatedGIF.h; sourceTree = ""; }; AA0811310099A4BCB3D52683B70DB3D1 /* Pods-ReadViewDemo-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-ReadViewDemo-dummy.m"; sourceTree = ""; }; AA3CFD777AD76F97EBA05B3920F5786A /* DTIframeTextAttachment.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTIframeTextAttachment.m; path = Core/Source/DTIframeTextAttachment.m; sourceTree = ""; }; + AB417EFC922BE57A7D61CFCD8F5C356A /* RDEPUBModels.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBModels.swift; sourceTree = ""; }; AD987C2FA7C8FBC96FD024E421DA0E68 /* Archive+Progress.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Archive+Progress.swift"; path = "Sources/ZIPFoundation/Archive+Progress.swift"; sourceTree = ""; }; ADC5AC8FD4EC45E9BA5654A38715BB93 /* DTTextBlock.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTTextBlock.m; path = Core/Source/DTTextBlock.m; sourceTree = ""; }; - AEBB66A484525660253E69D4094BD628 /* RDEPUBWebContentView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBWebContentView.swift; sourceTree = ""; }; - AF6F03EB82A94D1E7920748BD168D22F /* RDEPUBTextPerformanceSampler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextPerformanceSampler.swift; sourceTree = ""; }; + AEDE060ABAEC551BD0CD924CE4DE7058 /* RDEPUBReaderBottomToolView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderBottomToolView.swift; sourceTree = ""; }; AFC4C9F69BF2D0CAEBAA83896C139D2C /* DTColorFunctions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTColorFunctions.m; path = Core/Source/DTColorFunctions.m; sourceTree = ""; }; AFE0B56638AFB77F4455784A7ED59876 /* DTDictationPlaceholderView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTDictationPlaceholderView.m; path = Core/Source/DTDictationPlaceholderView.m; sourceTree = ""; }; B0500CA69405E23B09291359EB28331E /* NSMutableAttributedString+HTML.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSMutableAttributedString+HTML.m"; path = "Core/Source/NSMutableAttributedString+HTML.m"; sourceTree = ""; }; B0AC307F12521444C973EA0DE38B4608 /* NSMutableArray+DTMoving.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSMutableArray+DTMoving.h"; path = "Core/Source/NSMutableArray+DTMoving.h"; sourceTree = ""; }; B0B32EA4B7A492EEF26CE260E9AEFA0B /* ConstraintMakerFinalizable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMakerFinalizable.swift; path = Sources/ConstraintMakerFinalizable.swift; sourceTree = ""; }; - B0C27E3B9AE80C4C2791620C2F1FF187 /* RDReaderView.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = RDReaderView.modulemap; sourceTree = ""; }; B245F7E143F3091652C64F6593E33F7A /* DTFolderMonitor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTFolderMonitor.m; path = Core/Source/DTFolderMonitor.m; sourceTree = ""; }; B2B3D0CB47B0A8E9EC5AF48B7F2DD6B0 /* DTCoreTextConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTCoreTextConstants.m; path = Core/Source/DTCoreTextConstants.m; sourceTree = ""; }; + B4E20D7801600727C16A2C13D5F84E38 /* RDEPUBTextAnchor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextAnchor.swift; 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; }; B509CD4B498635D4536245E43D802ED9 /* DTCSSListStyle.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTCSSListStyle.m; path = Core/Source/DTCSSListStyle.m; sourceTree = ""; }; - B513B2BF2E788D09AEEDEBBADF6669E4 /* RDEPUBReaderBottomToolView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderBottomToolView.swift; sourceTree = ""; }; B5FCE04EBB553439D1C2BA1001936293 /* DTCompatibility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTCompatibility.h; path = Core/Source/DTCompatibility.h; sourceTree = ""; }; B6425B2235BA00FE865AF58EF44F1144 /* DTCoreGraphicsUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTCoreGraphicsUtils.h; path = Core/Source/DTCoreGraphicsUtils.h; sourceTree = ""; }; + B6C092A5458F6A10FC8ACE9435997C5B /* RDEPUBSearchModels.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBSearchModels.swift; sourceTree = ""; }; B7672A26922DBD934FA1AC60D49EB322 /* NSNumber+RomanNumerals.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSNumber+RomanNumerals.m"; path = "Core/Source/NSNumber+RomanNumerals.m"; sourceTree = ""; }; B8E40E302B85493BDE0FE91F829EC01E /* DTBase64Coding.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTBase64Coding.h; path = Core/Source/DTBase64Coding.h; sourceTree = ""; }; + B97DAD182D1BD5778630EF4A56BDD988 /* RDEPUBParser.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBParser.swift; sourceTree = ""; }; B9DCB5EC0B1CDADD221717CADDF62359 /* SnapKit-SnapKit_Privacy */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; name = "SnapKit-SnapKit_Privacy"; path = SnapKit_Privacy.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; B9E40164920C9AC1B1413C51835CD370 /* DTCoreText-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "DTCoreText-Info.plist"; sourceTree = ""; }; + BA1661CEEEBB7BDE901B5716D99DDE90 /* RDEPUBTextSearchEngine.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextSearchEngine.swift; sourceTree = ""; }; + BC270D100F485EEEB920AB37D4476FB3 /* RDEPUBJavaScriptBridge.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBJavaScriptBridge.swift; sourceTree = ""; }; BC332335B380BC51C4F05C5CCDFB9189 /* DTAnimatedGIF.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTAnimatedGIF.m; path = Core/Source/iOS/DTAnimatedGIF/DTAnimatedGIF.m; sourceTree = ""; }; - BC40316C34D94C00C0FA86716C45D484 /* RDEPUBTextContentView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextContentView.swift; sourceTree = ""; }; BCCA590DB72AA93275262A414F16578A /* DTCoreTextFontDescriptor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTCoreTextFontDescriptor.m; path = Core/Source/DTCoreTextFontDescriptor.m; sourceTree = ""; }; - BCCC92CE5B8DB2389EFEC1715B72E56E /* RDEPUBParser+Package.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBParser+Package.swift"; sourceTree = ""; }; BD768C27E392C934C06DFB4AC401037C /* ConstraintMakerRelatable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMakerRelatable.swift; path = Sources/ConstraintMakerRelatable.swift; sourceTree = ""; }; BDD081272B47A3B73CE693D21DC26827 /* Entry.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Entry.swift; path = Sources/ZIPFoundation/Entry.swift; sourceTree = ""; }; + BE53A6D6898393B5A8B54F23ED0065D0 /* epub-bridge.js */ = {isa = PBXFileReference; includeInIndex = 1; name = "epub-bridge.js"; path = "Sources/RDReaderView/EPUBCore/Resources/epub-bridge.js"; sourceTree = ""; }; BE547E464E5D34F9FFB24BAC81D1E4CC /* NSString+DTUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSString+DTUtilities.h"; path = "Core/Source/NSString+DTUtilities.h"; sourceTree = ""; }; + BE99150A429F1AA375BD9A89473100CB /* RDEPUBTextIndexTable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextIndexTable.swift; sourceTree = ""; }; + BEBB599A31B8BC71D00B843E8EB0971F /* RDReaderView.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = RDReaderView.debug.xcconfig; sourceTree = ""; }; BF4F3EC137168B92A5DA85AF50CD239F /* NSAttributedString+DTDebug.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSAttributedString+DTDebug.m"; path = "Core/Source/NSAttributedString+DTDebug.m"; sourceTree = ""; }; C123C127CC539ACCB510F665DB774899 /* DTAttributedTextContentView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTAttributedTextContentView.h; path = Core/Source/DTAttributedTextContentView.h; sourceTree = ""; }; C18480913E002315E3F5EC6945371697 /* NSDictionary+DTError.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSDictionary+DTError.m"; path = "Core/Source/NSDictionary+DTError.m"; sourceTree = ""; }; @@ -811,28 +783,33 @@ C2840BE6D91479CCBC2E908FBD9DA183 /* DTCoreText.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = DTCoreText.release.xcconfig; sourceTree = ""; }; C298199F5DC5390E8B6666F638B34C10 /* DTTextAttachmentHTMLElement.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTTextAttachmentHTMLElement.h; path = Core/Source/DTTextAttachmentHTMLElement.h; sourceTree = ""; }; C30D143134EEC5D4BA99459104B76A2E /* DTHTMLParserTextNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTHTMLParserTextNode.h; path = Core/Source/DTHTMLParserTextNode.h; sourceTree = ""; }; - C3D0FAB5FCC5D17DF5D0A330FD2B98A2 /* RDReaderFlowLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RDReaderFlowLayout.swift; path = Sources/RDReaderView/RDReaderFlowLayout.swift; sourceTree = ""; }; C422BCADBB48E28B549495663705A0FB /* DTWeakSupport.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTWeakSupport.h; path = Core/Source/DTWeakSupport.h; sourceTree = ""; }; - C506BF259F8E66CC0F44BA4893C355B9 /* RDEPUBReadingModels.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReadingModels.swift; sourceTree = ""; }; + C4331275EBF2F4E4FC5FBFFEE72E6E06 /* RDEPUBParser+Package.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBParser+Package.swift"; sourceTree = ""; }; + C455253D491919E5B727AD431FD333E3 /* RDReaderView-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "RDReaderView-Info.plist"; sourceTree = ""; }; + C6D9DE483A33AFF82D025E95ABAE82B1 /* RDEPUBFixedLayoutTemplate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBFixedLayoutTemplate.swift; sourceTree = ""; }; C6DB34ACB132E465CDF8191F7DB71EF6 /* ConstraintView+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ConstraintView+Extensions.swift"; path = "Sources/ConstraintView+Extensions.swift"; sourceTree = ""; }; - C71109E29D1694579CB003FFC654788B /* RDEPUBReaderSettings.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderSettings.swift; sourceTree = ""; }; C71D83D6AEF198FA680B8A80BF2D9605 /* DTCoreTextLayoutLine.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTCoreTextLayoutLine.m; path = Core/Source/DTCoreTextLayoutLine.m; sourceTree = ""; }; C80065DBA5634DAA71129404975D7349 /* NSURL+DTUnshorten.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSURL+DTUnshorten.m"; path = "Core/Source/NSURL+DTUnshorten.m"; sourceTree = ""; }; - C803671F2CAE478CF422696554011E4F /* RDReaderView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RDReaderView.swift; path = Sources/RDReaderView/RDReaderView.swift; sourceTree = ""; }; C8343CDCF82729A8EBCCA37A6650E34F /* DTHTMLParserNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTHTMLParserNode.h; path = Core/Source/DTHTMLParserNode.h; sourceTree = ""; }; + C879D1B97FBCF728EA0A7A1FD445EEC9 /* RDEPUBTextRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextRenderer.swift; sourceTree = ""; }; C8C20D9A71E6605DEE80342E7122B683 /* DTCoreTextConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTCoreTextConstants.h; path = Core/Source/DTCoreTextConstants.h; sourceTree = ""; }; C8E2FC7BE14F90878CE3FB3E317996ED /* ResourceBundle-SnapKit_Privacy-SnapKit-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-SnapKit_Privacy-SnapKit-Info.plist"; sourceTree = ""; }; C9593E7B37569219F8D9A504B47707DC /* ConstraintAttributes.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintAttributes.swift; path = Sources/ConstraintAttributes.swift; sourceTree = ""; }; C960B7AA0B9B8CC473FACFEC64F9906D /* SnapKit.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SnapKit.debug.xcconfig; sourceTree = ""; }; + CA1A5B58D686782147F12C1A8781C47B /* RDEPUBWebView+Search.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBWebView+Search.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; }; + CA4B1095936DBB3491E580EE642E6966 /* RDEPUBTextContentView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextContentView.swift; sourceTree = ""; }; CA538A48DD3691701EC6B5021D7B7381 /* NSScanner+HTML.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSScanner+HTML.m"; path = "Core/Source/NSScanner+HTML.m"; sourceTree = ""; }; CB7F3535507F56824BA21509302CF8B3 /* NSString+DTURLEncoding.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSString+DTURLEncoding.m"; path = "Core/Source/NSString+DTURLEncoding.m"; sourceTree = ""; }; + CDD70A0AF6652B8B142FE99A2E3BFCFE /* RDEPUBReadingModels.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReadingModels.swift; sourceTree = ""; }; CE6907AC04870132CCE3177E894607DD /* DTCoreTextLayoutFrame.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTCoreTextLayoutFrame.h; path = Core/Source/DTCoreTextLayoutFrame.h; sourceTree = ""; }; CE7768E097F8BDE9FBE3752B98CD0101 /* DTCoreText-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "DTCoreText-umbrella.h"; sourceTree = ""; }; CEA93EDA6ED54D374265AA5D6B9EBBA9 /* NSArray+DTError.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSArray+DTError.h"; path = "Core/Source/NSArray+DTError.h"; sourceTree = ""; }; - CFED6323FA0DAECA37182F168CADE220 /* RDReaderController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDReaderController.swift; sourceTree = ""; }; + CEAF5559BCE747CDC3F13886B8385344 /* RDEPUBTextRendererSupport.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextRendererSupport.swift; sourceTree = ""; }; + CF89E84A24C211E605EDA599629D3CA1 /* RDReaderFlowLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDReaderFlowLayout.swift; sourceTree = ""; }; + D0AA4E895BB85E9FC893F2FEE774981F /* RDReaderView.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = RDReaderView.release.xcconfig; sourceTree = ""; }; + D14AB5026508804287BE9997A4CF7CE1 /* RDEPUBTextLayouter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextLayouter.swift; sourceTree = ""; }; D1599698B5A62671C488F13E07272B09 /* DTCoreTextLayoutFrameAccessibilityElementGenerator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTCoreTextLayoutFrameAccessibilityElementGenerator.m; path = Core/Source/DTCoreTextLayoutFrameAccessibilityElementGenerator.m; sourceTree = ""; }; - D19278824E5C15269B5C7096F35C2E2E /* RDEPUBTextBookBuilder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextBookBuilder.swift; sourceTree = ""; }; D1E89A31867FF1FB44B4B999988F1B82 /* DTFoundation */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = DTFoundation; path = DTFoundation.framework; sourceTree = BUILT_PRODUCTS_DIR; }; D24FE8634A7AD2562DB8ADB9D4BBB36A /* CTLineUtils.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = CTLineUtils.m; path = Core/Source/CTLineUtils.m; sourceTree = ""; }; D2BA6D5DBD4C6A9285C4592721790A26 /* DTSmartPagingScrollView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTSmartPagingScrollView.h; path = Core/Source/iOS/DTSmartPagingScrollView.h; sourceTree = ""; }; @@ -847,21 +824,18 @@ D863AE4F659A0F71B22DC9FF334DDF4E /* DTCoreTextLayoutFrameAccessibilityElementGenerator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTCoreTextLayoutFrameAccessibilityElementGenerator.h; path = Core/Source/DTCoreTextLayoutFrameAccessibilityElementGenerator.h; sourceTree = ""; }; D8C351514678D41C58869BD057D5483F /* UIViewFrameExtension.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = UIViewFrameExtension.swift; path = Sources/SSAlertSwift/UIViewFrameExtension.swift; sourceTree = ""; }; D927F128EBF26AD2C61FD0E6B6F6F5ED /* ZIPFoundation-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ZIPFoundation-umbrella.h"; sourceTree = ""; }; - D961D2FCB14D4968F1D6B43EC27280D9 /* RDEPUBSelectionOverlayView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBSelectionOverlayView.swift; sourceTree = ""; }; D9AFC4B66F872436A059FE53780D216F /* SSAlertSwift */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = SSAlertSwift; path = SSAlertSwift.framework; sourceTree = BUILT_PRODUCTS_DIR; }; DA25968B7C9A40031DA45BB328EA8A2E /* DTStylesheetHTMLElement.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTStylesheetHTMLElement.m; path = Core/Source/DTStylesheetHTMLElement.m; sourceTree = ""; }; DA9E9711A4073440ECC06C5BD6D8702F /* SnapKit-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "SnapKit-Info.plist"; sourceTree = ""; }; DBC9280BA00935565E9658775DD7404D /* NSAttributedString+DTCoreText.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSAttributedString+DTCoreText.m"; path = "Core/Source/NSAttributedString+DTCoreText.m"; sourceTree = ""; }; - DC65D0ABA3F040468B590D5BD075E3EF /* RDEPUBWebView+JavaScriptBridge.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBWebView+JavaScriptBridge.swift"; sourceTree = ""; }; DCECDBD73595CA88A2208000B4B68352 /* NSString+DTUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSString+DTUtilities.m"; path = "Core/Source/NSString+DTUtilities.m"; sourceTree = ""; }; DD189DA6054AAE2242F6644A2623B50E /* NSAttributedString+SmallCaps.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSAttributedString+SmallCaps.h"; path = "Core/Source/NSAttributedString+SmallCaps.h"; sourceTree = ""; }; - DD22BF379DBBBAD804366BA4DF2C3C04 /* RDEPUBReaderTheme.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderTheme.swift; sourceTree = ""; }; DD58A1908F3C532210EA65ACE410A44D /* CTLineUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CTLineUtils.h; path = Core/Source/CTLineUtils.h; sourceTree = ""; }; + DDF01B7EF5DD6EA4CA5168C35069C495 /* RDEPUBReaderConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderConfiguration.swift; 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; }; DF5EDCA3B21964D0462BE0982E2F0BF8 /* DTTiledLayerWithoutFade.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTTiledLayerWithoutFade.h; path = Core/Source/iOS/DTTiledLayerWithoutFade.h; sourceTree = ""; }; DF670EC438F05ACC1F1C7B725DBDAA18 /* DTFoundation.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = DTFoundation.release.xcconfig; sourceTree = ""; }; DF988440049800DB7824A94B81D20254 /* Archive+Writing.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Archive+Writing.swift"; path = "Sources/ZIPFoundation/Archive+Writing.swift"; sourceTree = ""; }; - E07EF51BDABF4AA72556DE2BD0202095 /* RDEPUBTextIndexTable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextIndexTable.swift; sourceTree = ""; }; E0D90EB06FC37D534934542F9CAB1D74 /* DTCSSStylesheet.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTCSSStylesheet.m; path = Core/Source/DTCSSStylesheet.m; sourceTree = ""; }; E16D20FA492E085BD0871B107B3077B7 /* DTHTMLWriter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTHTMLWriter.m; path = Core/Source/DTHTMLWriter.m; sourceTree = ""; }; E196F56E68578181D5BDE787DE5C0F3A /* DTColor+Compatibility.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "DTColor+Compatibility.m"; path = "Core/Source/DTColor+Compatibility.m"; sourceTree = ""; }; @@ -869,45 +843,43 @@ E20272295EC253826AEE1F83A15D47C5 /* NSAttributedStringRunDelegates.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = NSAttributedStringRunDelegates.h; path = Core/Source/NSAttributedStringRunDelegates.h; sourceTree = ""; }; E27C503C8128BC3CE109FFE077AEF325 /* NSString+CSS.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSString+CSS.m"; path = "Core/Source/NSString+CSS.m"; sourceTree = ""; }; E28CA95D89DBAB2FE56BC8513D5838D7 /* DTHorizontalRuleHTMLElement.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTHorizontalRuleHTMLElement.h; path = Core/Source/DTHorizontalRuleHTMLElement.h; sourceTree = ""; }; + E2D1BAA539790DA3C1EA46236EEEA14E /* RDEPUBReaderPersistence.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderPersistence.swift; sourceTree = ""; }; E481007A8174943868EBC81CF3B04B9F /* SSAlertPresentAnimation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SSAlertPresentAnimation.swift; path = Sources/SSAlertSwift/SSAlertPresentAnimation.swift; sourceTree = ""; }; - E4A20625A21D7316BDC2C08B3D7593F9 /* RDReaderToolView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDReaderToolView.swift; sourceTree = ""; }; - E5EF1E546716198DA3F842D520EABDF3 /* RDEPUBWebView+Configuration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBWebView+Configuration.swift"; sourceTree = ""; }; E5F69A1E1260BAD7737BEB533F643A15 /* DTLazyImageView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTLazyImageView.h; path = Core/Source/DTLazyImageView.h; sourceTree = ""; }; E62C5E593037EF8A45E7FAA847D0277C /* DTCoreTextLayoutFrame+Cursor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "DTCoreTextLayoutFrame+Cursor.m"; path = "Core/Source/DTCoreTextLayoutFrame+Cursor.m"; sourceTree = ""; }; - E66516D9422D6E88704BB9AE04A75EAB /* RDEPUBReaderSettingsViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderSettingsViewController.swift; sourceTree = ""; }; E6F2E79CC33E0823C4E719ECDDFBBE08 /* NSAttributedStringRunDelegates.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = NSAttributedStringRunDelegates.m; path = Core/Source/NSAttributedStringRunDelegates.m; sourceTree = ""; }; - EA181DAFB74B541D9856647CD227A813 /* RDReaderCommon.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDReaderCommon.swift; sourceTree = ""; }; - EA847F68D13E0DA48A387B5B4AAF2037 /* RDEPUBReaderHighlightsViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderHighlightsViewController.swift; sourceTree = ""; }; EBA0272559B0F7FAD8AC670AC7431188 /* Pods-ReadViewDemo-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-ReadViewDemo-umbrella.h"; sourceTree = ""; }; + EC026AD0A9538F72B62BFB9EC8C98353 /* RDEPUBTextPaginationSupport.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextPaginationSupport.swift; sourceTree = ""; }; + EC1C84185018F1316377F86BE207A7A3 /* RDReaderView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDReaderView.swift; sourceTree = ""; }; ECFE19508E12BF8B0B52E8CB4F724217 /* ConstraintMakerRelatable+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ConstraintMakerRelatable+Extensions.swift"; path = "Sources/ConstraintMakerRelatable+Extensions.swift"; sourceTree = ""; }; ED5693BD171B879406EA14C97F4AD8D8 /* Archive+ZIP64.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Archive+ZIP64.swift"; path = "Sources/ZIPFoundation/Archive+ZIP64.swift"; sourceTree = ""; }; EDA6D5D7D0A04878EE78FAAE94F65068 /* DTCoreText */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = DTCoreText; path = DTCoreText.framework; sourceTree = BUILT_PRODUCTS_DIR; }; EE4EE750340347ED584C5A2C1164331A /* SSAlertCommonView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SSAlertCommonView.swift; path = Sources/SSAlertSwift/SSAlertCommonView.swift; sourceTree = ""; }; EE9D4A455723797A27F04A15C4E47823 /* DTHTMLElement.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTHTMLElement.h; path = Core/Source/DTHTMLElement.h; sourceTree = ""; }; EF27E643619E369E8A9C1FE6EFE18C78 /* DTFoundation.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = DTFoundation.modulemap; sourceTree = ""; }; - EF6CD9301E24937522B95FEAE873312F /* RDEPUBWebView+FixedLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBWebView+FixedLayout.swift"; sourceTree = ""; }; F038FB491B9A4A53447EF0DC333301AE /* DTObjectTextAttachment.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTObjectTextAttachment.m; path = Core/Source/DTObjectTextAttachment.m; sourceTree = ""; }; F0548F684CA2D8C445086389A2BD5265 /* ZIPFoundation-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ZIPFoundation-prefix.pch"; sourceTree = ""; }; F0D72C5680EBE6CA716EE77281AA4436 /* DTAttributedTextContentView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTAttributedTextContentView.m; path = Core/Source/DTAttributedTextContentView.m; sourceTree = ""; }; F35039A8D0AA1F7BAFC4E5E016057E15 /* DTTextAttachment.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTTextAttachment.m; path = Core/Source/DTTextAttachment.m; sourceTree = ""; }; F37563A56C180CE18EEFADE56FA3C17F /* DTAccessibilityViewProxy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTAccessibilityViewProxy.h; path = Core/Source/DTAccessibilityViewProxy.h; sourceTree = ""; }; + F38A5EF3AB47504A0F63F91180092B45 /* RDEPUBTextPerformanceSampler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextPerformanceSampler.swift; sourceTree = ""; }; F410ED25E4E84C3D5166261CDF4B58F2 /* SSAlertView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SSAlertView.swift; path = Sources/SSAlertSwift/SSAlertView.swift; sourceTree = ""; }; F4E2B1AC73977F10254628C0B7EBE38F /* DTCoreText-Resources */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; name = "DTCoreText-Resources"; path = Resources.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; - F50147CE0F16CD5D3D739C9F2B3D59DE /* RDEPUBModels.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBModels.swift; sourceTree = ""; }; F5389D4E96A4AFE175691B4D3D4524E7 /* DTExtendedFileAttributes.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTExtendedFileAttributes.m; path = Core/Source/DTExtendedFileAttributes.m; sourceTree = ""; }; F53CCB60DE5D06A43E4A52EDB274E7D2 /* NSString+Paragraphs.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSString+Paragraphs.m"; path = "Core/Source/NSString+Paragraphs.m"; sourceTree = ""; }; F5B34EE2160C27947D1EEFD42184CF5D /* ConstraintLayoutSupportDSL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintLayoutSupportDSL.swift; path = Sources/ConstraintLayoutSupportDSL.swift; sourceTree = ""; }; + F61A8DFA3305799C8739646FD400B495 /* RDEPUBAssetRepository.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBAssetRepository.swift; sourceTree = ""; }; F699881ABDBEB419AEBA661AD5A21F35 /* ZIPFoundation.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = ZIPFoundation.release.xcconfig; sourceTree = ""; }; F734214E067BDBDB581911E1A5CDAADB /* DTBreakHTMLElement.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTBreakHTMLElement.m; path = Core/Source/DTBreakHTMLElement.m; sourceTree = ""; }; F76A97683FB5E8E8B86EA4AD71F6F4B4 /* Date+ZIP.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Date+ZIP.swift"; path = "Sources/ZIPFoundation/Date+ZIP.swift"; sourceTree = ""; }; F7B0087DE7C394A677F5883541AB4FB7 /* DTListItemHTMLElement.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTListItemHTMLElement.m; path = Core/Source/DTListItemHTMLElement.m; sourceTree = ""; }; F9A2565B302334B662AB51DCF8E65EEE /* DTDictationPlaceholderTextAttachment.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTDictationPlaceholderTextAttachment.h; path = Core/Source/DTDictationPlaceholderTextAttachment.h; sourceTree = ""; }; + FB2892BCC3CD841C8364FBBE0DC10C12 /* RDEPUBWebView+FixedLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBWebView+FixedLayout.swift"; sourceTree = ""; }; FB2ABB1D297442D91AA42F1407DB4A58 /* DTTextHTMLElement.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTTextHTMLElement.h; path = Core/Source/DTTextHTMLElement.h; sourceTree = ""; }; - FB7C4CBF5F5A017C5CFA8208247F39B8 /* RDEPUBWebView+Search.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBWebView+Search.swift"; sourceTree = ""; }; FC5EC7C3D1808C9CF53354D7A3D69EE7 /* NSString+DTPaths.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSString+DTPaths.h"; path = "Core/Source/NSString+DTPaths.h"; sourceTree = ""; }; FCC718115E5C31C88A680522AE36B089 /* DTFoundation-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "DTFoundation-dummy.m"; sourceTree = ""; }; FD03567681A79FFB6E81B3105503065D /* DTFoundationConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTFoundationConstants.h; path = Core/Source/DTFoundationConstants.h; sourceTree = ""; }; - FDCC61D962C1AB64399EDBEAD42DF918 /* RDEPUBDTCoreTextRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBDTCoreTextRenderer.swift; sourceTree = ""; }; + FDA0CBC0DF8A08DDB5F0FE3812677CC9 /* RDEPUBReaderController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderController.swift; sourceTree = ""; }; FDD333B409D528E5006FA48F4D70A6F5 /* DTCSSListStyle.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTCSSListStyle.h; path = Core/Source/DTCSSListStyle.h; sourceTree = ""; }; FE2991699D0391172DEADF2F4613E320 /* SSAlertSwift.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SSAlertSwift.release.xcconfig; sourceTree = ""; }; FEA9F91758013B23B0EEA71DA22E7475 /* Pods-ReadViewDemo-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-ReadViewDemo-Info.plist"; sourceTree = ""; }; @@ -917,35 +889,18 @@ /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 111C5938174F5B99CC4DBB155F98AB3D /* Frameworks */ = { + 0AFD099807E2D6382B8C17CF9956C5B0 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - 22035088E60E34EADEA43A38FB910640 /* Frameworks */ = { + 4E8AF910316D5C65065B2C33E7E141E8 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - AFDB92359CF646B7441BAB9058164D1B /* Foundation.framework in Frameworks */, - 502B1A3EDBA9258860A7AD719190E1D9 /* ImageIO.framework in Frameworks */, - D6AE712A6154151CC5157D950D5A7968 /* QuartzCore.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 22FB16AE5E15436AA6D1120D414CF17A /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 349759691B7A071CE1F7A3CC08016823 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - AB309F24A7B20345C39F1715CBE06973 /* Foundation.framework in Frameworks */, + 42E86E25D5B3335EF7DD6518E0863E72 /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -957,21 +912,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 646A1A60E4370242567CB9DC85606613 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 190925A3A3BD3FAC45890FC69E9979C3 /* Foundation.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 6A3FD1585419E85D3BBC2749DB6D228E /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; 6F1DC7DF5E89C820D04E068D56B1D0EF /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -985,32 +925,103 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - AA441E21DDC830B0D304EB01DC469318 /* Frameworks */ = { + 76F596E482EF168AD1A768D8E5195B77 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - BD78C31B7A4E3E1A3FE73C4E5648FE24 /* Frameworks */ = { + 9455F1AD1B1A8CCDDF067216C54B6E14 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - E5F415F4C6D1EB5C3E6661396850B8B9 /* Foundation.framework in Frameworks */, + B338DD4D050174DC3BB7EA0E1A603333 /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - F3918C9FD7E196E572625FBE64D9105C /* Frameworks */ = { + A25365B66F39632CA9A6B4D8B0CF909A /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + BC7FD3F4F58EE1BDAA7142FF12B449C0 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 7619C2726F04F3217F63C597C69BA011 /* Foundation.framework in Frameworks */, + DB8DE9962C27333B7EAE30671A2F87AC /* ImageIO.framework in Frameworks */, + 060B0F956EE34AB3BFC0257E84DFAC7E /* QuartzCore.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + CCE272E8FF30C2ADD80D9F83D1BE1FAB /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 68341B3169494A21A1B419AFA1DF652B /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + E638817414C3E194C7AFCC1928B26BEE /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 96ACAABF6BCAE1D6A957F7C5A5B291CA /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + F80F0F6E3FE94609184884B26D41F6D2 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 9665911A01848B4658F6DD00460BB9DC /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 02AFB2418BD147B76FA9046226099987 /* EPUBCore */ = { + isa = PBXGroup; + children = ( + F61A8DFA3305799C8739646FD400B495 /* RDEPUBAssetRepository.swift */, + C6D9DE483A33AFF82D025E95ABAE82B1 /* RDEPUBFixedLayoutTemplate.swift */, + BC270D100F485EEEB920AB37D4476FB3 /* RDEPUBJavaScriptBridge.swift */, + AB417EFC922BE57A7D61CFCD8F5C356A /* RDEPUBModels.swift */, + 87EBF2D16BA02CD25CD1367A4F7026BB /* RDEPUBNavigatorLayoutContext.swift */, + 3CD377E1D9608FD654CA2A3B1D4DF344 /* RDEPUBNavigatorState.swift */, + 99EF157E0B58EE5D8605F8EDDF4D9350 /* RDEPUBPaginator.swift */, + B97DAD182D1BD5778630EF4A56BDD988 /* RDEPUBParser.swift */, + 871BA1C45F545C9EAD9E1795144209C6 /* RDEPUBParser+Archive.swift */, + C4331275EBF2F4E4FC5FBFFEE72E6E06 /* RDEPUBParser+Package.swift */, + 9DE1E0CEE577C4985CB816FDA2AFDA3F /* RDEPUBParser+ReadingProfile.swift */, + 44009B7A804BFDD7B2AD3F1CBE12CE42 /* RDEPUBParser+Resources.swift */, + 28D388240137738CB7BC33CB6B82A62A /* RDEPUBParser+TOC.swift */, + 48A4E8E3CD48799CF1E9D64CD7CE0C86 /* RDEPUBPreferences.swift */, + 9F596AE7A8707C4D27AD9ABE552C6C59 /* RDEPUBPublication.swift */, + CDD70A0AF6652B8B142FE99A2E3BFCFE /* RDEPUBReadingModels.swift */, + 29E5523049D286F000DEB6F1D59AD428 /* RDEPUBReadingSession.swift */, + 04B40D87ADCB26B8270415FAA057AACB /* RDEPUBRenderRequest.swift */, + 49708F53EFFC5069D69D7BDBE145D5CB /* RDEPUBResourceResolver.swift */, + 82C37B4E513CEF203D7C832740579E6B /* RDEPUBResourceURLSchemeHandler.swift */, + 982BAB73B44D6A14A904822EB0836FDA /* RDEPUBSearchEngine.swift */, + B6C092A5458F6A10FC8ACE9435997C5B /* RDEPUBSearchModels.swift */, + 9BD3A31AFC4BC8216C0AA79606708051 /* RDEPUBStyleSheetBuilder.swift */, + B4E20D7801600727C16A2C13D5F84E38 /* RDEPUBTextAnchor.swift */, + 37D54A0CE6965D4142DB16CE54293F16 /* RDEPUBWebView.swift */, + 3DD8D4287E569AB98F04CF03AE208B71 /* RDEPUBWebView+Configuration.swift */, + FB2892BCC3CD841C8364FBBE0DC10C12 /* RDEPUBWebView+FixedLayout.swift */, + 5AC9A769CBC46F65ECAE32EAD0F196B6 /* RDEPUBWebView+JavaScriptBridge.swift */, + 3B52BDF13EFDE5C61F7A1B1FF5B79F02 /* RDEPUBWebView+Reflowable.swift */, + CA1A5B58D686782147F12C1A8781C47B /* RDEPUBWebView+Search.swift */, + 264D3D6CCA46CD555E458C17F6BEC460 /* RDEPUBWebViewDebug.swift */, + ); + name = EPUBCore; + path = Sources/RDReaderView/EPUBCore; + sourceTree = ""; + }; 0388AB194A762ACB56242F4BF9BA4498 /* Resources */ = { isa = PBXGroup; children = ( @@ -1083,24 +1094,12 @@ path = "Target Support Files/Pods-ReadViewDemo"; sourceTree = ""; }; - 1A491D9BFA61CB0E7872949CB4D0984B /* EPUBTextRendering */ = { + 0FC6890E20D396658E1D6AADD29A4975 /* Pod */ = { isa = PBXGroup; children = ( - 2F917B8708AE5A66B32AB42073824846 /* RDEPUBChapterData.swift */, - FDCC61D962C1AB64399EDBEAD42DF918 /* RDEPUBDTCoreTextRenderer.swift */, - D19278824E5C15269B5C7096F35C2E2E /* RDEPUBTextBookBuilder.swift */, - 306348D231BB9C268B7FDAA26E17D898 /* RDEPUBTextBookCache.swift */, - 1030C3F7928F1D26875118AA9E6328CC /* RDEPUBTextLayouter.swift */, - 0AF90A2265FF213E86C36E9BF188E429 /* RDEPUBTextLayoutFrame.swift */, - A8043FBCCFAB2524C1853D06CA3672CF /* RDEPUBTextPaginationSupport.swift */, - AF6F03EB82A94D1E7920748BD168D22F /* RDEPUBTextPerformanceSampler.swift */, - 0C172FFAA0EF6BCF47B5204C12C088FE /* RDEPUBTextRenderer.swift */, - 42BA21BD7D701376F3EE3EDE8DDAAD1A /* RDEPUBTextRendererSupport.swift */, - 607A6747DD754112DE73B195EC10FA62 /* RDEPUBTextSearchEngine.swift */, - 63C815D99D3B252F4FD7E1E2D9771B10 /* RDPlainTextBookBuilder.swift */, + 0EBF956AF4A708B6D77C0765D1B8D059 /* RDReaderView.podspec */, ); - name = EPUBTextRendering; - path = Sources/RDReaderView/EPUBTextRendering; + name = Pod; sourceTree = ""; }; 1B7515007EDD63EDCCE4BAD15D6CA9BA /* Support Files */ = { @@ -1118,6 +1117,19 @@ path = "../Target Support Files/DTFoundation"; sourceTree = ""; }; + 217676B43561F8FE56D48D7D43F168C2 /* ReaderView */ = { + isa = PBXGroup; + children = ( + 8114D77A6959999E364B801F9499589D /* RDReaderContentCell.swift */, + CF89E84A24C211E605EDA599629D3CA1 /* RDReaderFlowLayout.swift */, + 573B36675B38E2D9301B3CCFD9E7CCFF /* RDReaderGestureController.swift */, + 96718D9DDA02E4E22568D880B91E7D8C /* RDReaderPageChildViewController.swift */, + EC1C84185018F1316377F86BE207A7A3 /* RDReaderView.swift */, + ); + name = ReaderView; + path = Sources/RDReaderView/ReaderView; + sourceTree = ""; + }; 29A410FBD4C19138B1D732EC94D8EFB2 /* DTFoundation */ = { isa = PBXGroup; children = ( @@ -1131,6 +1143,22 @@ path = DTFoundation; sourceTree = ""; }; + 2FF861328354D1DF610EF63695EED6E7 /* RDReaderView */ = { + isa = PBXGroup; + children = ( + BE53A6D6898393B5A8B54F23ED0065D0 /* epub-bridge.js */, + 7F47BD1AD90D0D7227EC3804CB2C2AE8 /* epub-fixed-layout.html */, + 02AFB2418BD147B76FA9046226099987 /* EPUBCore */, + EF95074650C9523E655FD1CC42E4C1FB /* EPUBTextRendering */, + C637EF30F5586D11014D2CC2185B9EBE /* EPUBUI */, + 0FC6890E20D396658E1D6AADD29A4975 /* Pod */, + 217676B43561F8FE56D48D7D43F168C2 /* ReaderView */, + C120B336609DB6C321AAFED0509117EA /* Support Files */, + ); + name = RDReaderView; + path = ../..; + sourceTree = ""; + }; 3595ED200AA07F0B71CB42506574798F /* Support Files */ = { isa = PBXGroup; children = ( @@ -1156,46 +1184,6 @@ name = DTAnimatedGIF; sourceTree = ""; }; - 3E83E448E1F499CC03414F8E5E10521C /* EPUBCore */ = { - isa = PBXGroup; - children = ( - 9BCF0450FD674EA7F8B1B321287ABDCB /* RDEPUBAssetRepository.swift */, - 642B52DF95544C7DEE9C304D088CF51D /* RDEPUBFixedLayoutTemplate.swift */, - 3F53156C1740538E2577CD8931C1C2F2 /* RDEPUBJavaScriptBridge.swift */, - F50147CE0F16CD5D3D739C9F2B3D59DE /* RDEPUBModels.swift */, - 5B9B09D14E157387B4541DC0B4F80DE5 /* RDEPUBNavigatorLayoutContext.swift */, - 2CBCFA278227D30D24F6B58959F297CC /* RDEPUBNavigatorState.swift */, - 1DD978B18AE5C3EA439E75A39DF62FA4 /* RDEPUBPaginator.swift */, - 4F0841502401055DFD529A9786C79418 /* RDEPUBParser.swift */, - 1F1D00374FF48425EE72CF7A117BA5CC /* RDEPUBParser+Archive.swift */, - BCCC92CE5B8DB2389EFEC1715B72E56E /* RDEPUBParser+Package.swift */, - 6F6A518246FE5F3F14F56A59B9D1DF19 /* RDEPUBParser+ReadingProfile.swift */, - 2A9B2DE1872018CD5707B3815621E71F /* RDEPUBParser+Resources.swift */, - A473941494879F30EF71401673A3AB9E /* RDEPUBParser+TOC.swift */, - 6ADD582CD37BE7FB4C862E3995BBD6E2 /* RDEPUBPreferences.swift */, - 6F7FFE5D5B710020A10F6B3D97E36B92 /* RDEPUBPublication.swift */, - C506BF259F8E66CC0F44BA4893C355B9 /* RDEPUBReadingModels.swift */, - 21DC85814825F7507AD22499EF31F73A /* RDEPUBReadingSession.swift */, - 20E401E01605056D23F4A3345AEAE066 /* RDEPUBRenderRequest.swift */, - 6BE5AD476A35217D43210F7FBA858910 /* RDEPUBResourceResolver.swift */, - 8A364960A519577D66C4536227B2261D /* RDEPUBResourceURLSchemeHandler.swift */, - 35D6A841E33C5FB20FE0A8999084F939 /* RDEPUBSearchEngine.swift */, - 26AA3263BCEE270CAF59B9DE895B504F /* RDEPUBSearchModels.swift */, - 9C81AA278ED7B2807938E6D37F1ADFEF /* RDEPUBStyleSheetBuilder.swift */, - 5DDF2DF67BE36B35797B29961757F372 /* RDEPUBTextAnchor.swift */, - E07EF51BDABF4AA72556DE2BD0202095 /* RDEPUBTextIndexTable.swift */, - 9E2CFC831716F8266E64D7A3B4B01A7D /* RDEPUBWebView.swift */, - E5EF1E546716198DA3F842D520EABDF3 /* RDEPUBWebView+Configuration.swift */, - EF6CD9301E24937522B95FEAE873312F /* RDEPUBWebView+FixedLayout.swift */, - DC65D0ABA3F040468B590D5BD075E3EF /* RDEPUBWebView+JavaScriptBridge.swift */, - 8D8BB5522D848ED0D5EB8D6C55B5BD60 /* RDEPUBWebView+Reflowable.swift */, - FB7C4CBF5F5A017C5CFA8208247F39B8 /* RDEPUBWebView+Search.swift */, - 7BB01C859C89276EA05BDF3460278A88 /* RDEPUBWebViewDebug.swift */, - ); - name = EPUBCore; - path = Sources/RDReaderView/EPUBCore; - sourceTree = ""; - }; 43D8ECA62CF48C3CD5F77E3CA6F466AF /* Products */ = { isa = PBXGroup; children = ( @@ -1231,22 +1219,6 @@ path = SSAlertSwift; sourceTree = ""; }; - 4A7E4E60EC8A89E658948FDA6AEAB8F8 /* Support Files */ = { - isa = PBXGroup; - children = ( - B0C27E3B9AE80C4C2791620C2F1FF187 /* RDReaderView.modulemap */, - 3A66404CE3169BD8F63D23D4D33D77D8 /* RDReaderView-dummy.m */, - 2EE5C4D730F22EEA9668C71B88034A9B /* RDReaderView-Info.plist */, - 80B5A7EFACEE28D5031428C8FB33C4BA /* RDReaderView-prefix.pch */, - 0C4C3F52F41CC00A37BF981231036C1A /* RDReaderView-umbrella.h */, - A50AEC805674BAACE0061FF64A17695B /* RDReaderView.debug.xcconfig */, - 96AD00324920CF04C9BB0564B1B6148A /* RDReaderView.release.xcconfig */, - 1D1FA5C8971E56EB08777D1A25206FD8 /* ResourceBundle-RDReaderViewAssets-RDReaderView-Info.plist */, - ); - name = "Support Files"; - path = "ReadViewDemo/Pods/Target Support Files/RDReaderView"; - sourceTree = ""; - }; 4DABD1D106D01055A2AB87F3DA58A3CC /* iOS */ = { isa = PBXGroup; children = ( @@ -1276,36 +1248,6 @@ path = "../Target Support Files/DTCoreText"; sourceTree = ""; }; - 5B6ACA6FBD2C20B7558BF9864BA127D5 /* Pod */ = { - isa = PBXGroup; - children = ( - 012A1C7A060C2FBFD9949523E0D8B321 /* RDReaderView.podspec */, - ); - name = Pod; - sourceTree = ""; - }; - 5E3A08CAB1F49088DC2FF08EFCF3D0E9 /* RDReaderView */ = { - isa = PBXGroup; - children = ( - 5814F6427B71252C21BD93957769C5E5 /* epub-bridge.js */, - 60884EDD3BAA2D90E3558705210402E4 /* epub-fixed-layout.html */, - 7056386E170F7F887E72F81D4D5E1285 /* RDReaderContentCell.swift */, - C3D0FAB5FCC5D17DF5D0A330FD2B98A2 /* RDReaderFlowLayout.swift */, - 9F6439BD7A3574E7B6875DD32EF4D741 /* RDReaderGestureController.swift */, - 5F63A66B843D13F64610EC901D02B0A5 /* RDReaderPageChildViewController.swift */, - C803671F2CAE478CF422696554011E4F /* RDReaderView.swift */, - 07789F5F0A4B4DBFB43191296F14327E /* RDURLReaderController.swift */, - 3E83E448E1F499CC03414F8E5E10521C /* EPUBCore */, - 1A491D9BFA61CB0E7872949CB4D0984B /* EPUBTextRendering */, - D1C25548683561AAC91C82CF6FB0C161 /* EPUBUI */, - 891D653B102D71837940D479272A6869 /* LegacyRDReaderController */, - 5B6ACA6FBD2C20B7558BF9864BA127D5 /* Pod */, - 4A7E4E60EC8A89E658948FDA6AEAB8F8 /* Support Files */, - ); - name = RDReaderView; - path = ../..; - sourceTree = ""; - }; 62598D566A90C2374701CEB798B77521 /* Support Files */ = { isa = PBXGroup; children = ( @@ -1361,6 +1303,14 @@ name = DTHTMLParser; sourceTree = ""; }; + 74C748234E2064C0224731FBE0F11F3A /* Development Pods */ = { + isa = PBXGroup; + children = ( + 2FF861328354D1DF610EF63695EED6E7 /* RDReaderView */, + ); + name = "Development Pods"; + sourceTree = ""; + }; 81FAF4124052D4A411C0A8C21B48174C /* Core */ = { isa = PBXGroup; children = ( @@ -1368,30 +1318,6 @@ name = Core; sourceTree = ""; }; - 891D653B102D71837940D479272A6869 /* LegacyRDReaderController */ = { - isa = PBXGroup; - children = ( - 3D72E6224669305A4D5B7706034F3B54 /* RDEPUBTextPaging.swift */, - 993C7A07FD4B0D50DE5C6E2F70AFBE88 /* RDReaderBottomToolView.swift */, - EA181DAFB74B541D9856647CD227A813 /* RDReaderCommon.swift */, - 4911CA3333EDF39D421801CC06FE7034 /* RDReaderContentView.swift */, - CFED6323FA0DAECA37182F168CADE220 /* RDReaderController.swift */, - 3572593435302A8E2EC2D722D61D2158 /* RDReaderController+EPUBText.swift */, - 6805A9F7BC278ACA3055C1604ECA2CDA /* RDReaderCoverView.swift */, - A42C1076ED8123D5A0DB51530B2E4105 /* RDReaderEditView.swift */, - 9283701EE51EAD75A7011E1E560FDBCA /* RDReaderEndView.swift */, - 0512178F8D1B6546A1F570515BE9E048 /* RDReaderEPUBContentView.swift */, - 5B58F5EFAD7D9727BD8DC7BE81B09B9D /* RDReaderManager.swift */, - 4CE4B942B105AC852002D99139C83CC7 /* RDReaderTheme.swift */, - E4A20625A21D7316BDC2C08B3D7593F9 /* RDReaderToolView.swift */, - 20E5E5D5715B6B1FBEC53F0E67DB5683 /* RDReaderTopToolView.swift */, - 4070E0D5D24CF679BE8BE47F788CA37F /* SSChapterListController.swift */, - 3DE43A617859DCF838AD6B3704F27495 /* SSEventTrigger.swift */, - ); - name = LegacyRDReaderController; - path = Sources/RDReaderView/LegacyRDReaderController; - sourceTree = ""; - }; 994C39A644C0722C7A9E97AB46DB8965 /* Targets Support Files */ = { isa = PBXGroup; children = ( @@ -1537,6 +1463,22 @@ path = DTCoreText; sourceTree = ""; }; + C120B336609DB6C321AAFED0509117EA /* Support Files */ = { + isa = PBXGroup; + children = ( + 960542929FBAAFA1C1B1991BDD522CEB /* RDReaderView.modulemap */, + 1F4E662F4176B8840BB4DF9A76EB5443 /* RDReaderView-dummy.m */, + C455253D491919E5B727AD431FD333E3 /* RDReaderView-Info.plist */, + 84ECF423776A6EE042F30DF5BF40DC58 /* RDReaderView-prefix.pch */, + 606D7AB51D4BF9B4AAD104DF89B5B9AD /* RDReaderView-umbrella.h */, + BEBB599A31B8BC71D00B843E8EB0971F /* RDReaderView.debug.xcconfig */, + D0AA4E895BB85E9FC893F2FEE774981F /* RDReaderView.release.xcconfig */, + 9C0D3D9DE44CEB89B16F1D598A049EF0 /* ResourceBundle-RDReaderViewAssets-RDReaderView-Info.plist */, + ); + name = "Support Files"; + path = "ReadViewDemo/Pods/Target Support Files/RDReaderView"; + sourceTree = ""; + }; C2775EE99F51E41166DFC2EFD6739CA0 /* Resources */ = { isa = PBXGroup; children = ( @@ -1545,6 +1487,35 @@ name = Resources; sourceTree = ""; }; + C637EF30F5586D11014D2CC2185B9EBE /* EPUBUI */ = { + isa = PBXGroup; + children = ( + 8DF21684A2D45C7724718A05AB269C7A /* RDEPUBPageInteractionController.swift */, + 5931AEB1E931A7219B0643093173E4B1 /* RDEPUBPageLayoutSnapshot.swift */, + AEDE060ABAEC551BD0CD924CE4DE7058 /* RDEPUBReaderBottomToolView.swift */, + 8B3CCE79B11EBF54E7B1195D4F4CD00E /* RDEPUBReaderChapterListController.swift */, + DDF01B7EF5DD6EA4CA5168C35069C495 /* RDEPUBReaderConfiguration.swift */, + FDA0CBC0DF8A08DDB5F0FE3812677CC9 /* RDEPUBReaderController.swift */, + 114B1402AFD8DC2B76F64E2A702FF5EC /* RDEPUBReaderDelegate.swift */, + 91E98E8EB07A175FB72DCB4D69B1BF40 /* RDEPUBReaderHighlightsViewController.swift */, + E2D1BAA539790DA3C1EA46236EEEA14E /* RDEPUBReaderPersistence.swift */, + 178D1E4BA4980627DBDDD27A035D98EF /* RDEPUBReaderSettings.swift */, + 1AA7CFC7A07A8C9400697DA331E35860 /* RDEPUBReaderSettingsViewController.swift */, + 9661A4FD82D29BF44C5DB5D68F4FF237 /* RDEPUBReaderTableOfContentsItem.swift */, + 23AD6E6A62F1EE4221018B6DA2391BA7 /* RDEPUBReaderTheme.swift */, + 5E372F6B632B54653CBA022D20FB3367 /* RDEPUBReaderToolView.swift */, + 1D87EC99EB119D764849BD1E582C7D06 /* RDEPUBReaderTopToolView.swift */, + 065F46518D05F6DEA21AB45C485CCBAC /* RDEPUBSelectionOverlayView.swift */, + CA4B1095936DBB3491E580EE642E6966 /* RDEPUBTextContentView.swift */, + 586127E2E5DFA220EAB96633512B3DF3 /* RDEPUBWebContentView.swift */, + 2A7797621CF825900662A85E723445CD /* RDEPUBWebDecorationOverlayView.swift */, + 8CC598DC4A28E4CD6EF8AA1BDBED7D2D /* RDURLReaderController.swift */, + A37FEAB6B0E196275B35332A30FF74DD /* UIColor+RDEPUBHex.swift */, + ); + name = EPUBUI; + path = Sources/RDReaderView/EPUBUI; + sourceTree = ""; + }; CA6142FEF8E51F79243E3C87378F50AF /* UIKit */ = { isa = PBXGroup; children = ( @@ -1576,7 +1547,7 @@ isa = PBXGroup; children = ( 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */, - E03EB3EF6180DD26F3E26719694BFDC7 /* Development Pods */, + 74C748234E2064C0224731FBE0F11F3A /* Development Pods */, D68CA58901FBF589D75F5E40F1EAF5BA /* Frameworks */, E861498A78913BA984BA96358FC61449 /* Pods */, 43D8ECA62CF48C3CD5F77E3CA6F466AF /* Products */, @@ -1584,32 +1555,6 @@ ); sourceTree = ""; }; - D1C25548683561AAC91C82CF6FB0C161 /* EPUBUI */ = { - isa = PBXGroup; - children = ( - 63CED2EEF113FB7F7860A952BD829D2D /* RDEPUBPageInteractionController.swift */, - 1D9C04C513F60B0120316FE7BB7D1F5C /* RDEPUBPageLayoutSnapshot.swift */, - B513B2BF2E788D09AEEDEBBADF6669E4 /* RDEPUBReaderBottomToolView.swift */, - 51BABDA6EF5FDECBFDCD039867E35C96 /* RDEPUBReaderChapterListController.swift */, - 8B57EA1434AA54B81DE1CFCBD3BA3420 /* RDEPUBReaderConfiguration.swift */, - 5863A9106B12E189BFC4B3EDBB1973F8 /* RDEPUBReaderController.swift */, - 8DE938647F6DF9F7935710F6D4DBD331 /* RDEPUBReaderDelegate.swift */, - EA847F68D13E0DA48A387B5B4AAF2037 /* RDEPUBReaderHighlightsViewController.swift */, - 684215FCFE21769A54F1F98739057EF1 /* RDEPUBReaderPersistence.swift */, - C71109E29D1694579CB003FFC654788B /* RDEPUBReaderSettings.swift */, - E66516D9422D6E88704BB9AE04A75EAB /* RDEPUBReaderSettingsViewController.swift */, - 857A06908857B19DB09FADB8C32EC3EB /* RDEPUBReaderTableOfContentsItem.swift */, - DD22BF379DBBBAD804366BA4DF2C3C04 /* RDEPUBReaderTheme.swift */, - 7400D161F463EBD6D0B3A3E3E03DE2EF /* RDEPUBReaderToolView.swift */, - A3AA501DEB82EBB5C47EEADCF2BC4723 /* RDEPUBReaderTopToolView.swift */, - D961D2FCB14D4968F1D6B43EC27280D9 /* RDEPUBSelectionOverlayView.swift */, - BC40316C34D94C00C0FA86716C45D484 /* RDEPUBTextContentView.swift */, - AEBB66A484525660253E69D4094BD628 /* RDEPUBWebContentView.swift */, - ); - name = EPUBUI; - path = Sources/RDReaderView/EPUBUI; - sourceTree = ""; - }; D68CA58901FBF589D75F5E40F1EAF5BA /* Frameworks */ = { isa = PBXGroup; children = ( @@ -1626,14 +1571,6 @@ name = Resources; sourceTree = ""; }; - E03EB3EF6180DD26F3E26719694BFDC7 /* Development Pods */ = { - isa = PBXGroup; - children = ( - 5E3A08CAB1F49088DC2FF08EFCF3D0E9 /* RDReaderView */, - ); - name = "Development Pods"; - sourceTree = ""; - }; E2CD122CF123DD3681DAEE021EA37359 /* Core */ = { isa = PBXGroup; children = ( @@ -1693,6 +1630,27 @@ name = Pods; sourceTree = ""; }; + EF95074650C9523E655FD1CC42E4C1FB /* EPUBTextRendering */ = { + isa = PBXGroup; + children = ( + 31A85F27E07E44ECFCCBCECAAE32A56F /* RDEPUBChapterData.swift */, + 749ECE28D47716A820DFDFAE1C9E294D /* RDEPUBDTCoreTextRenderer.swift */, + 4EF375B490014DEFC2BB798269AA0985 /* RDEPUBTextBookBuilder.swift */, + 57A61F7A5E8A862AB61CC09109D9E81E /* RDEPUBTextBookCache.swift */, + BE99150A429F1AA375BD9A89473100CB /* RDEPUBTextIndexTable.swift */, + D14AB5026508804287BE9997A4CF7CE1 /* RDEPUBTextLayouter.swift */, + 02375C5EDA3CE9379DB415A85CFCC0F2 /* RDEPUBTextLayoutFrame.swift */, + EC026AD0A9538F72B62BFB9EC8C98353 /* RDEPUBTextPaginationSupport.swift */, + F38A5EF3AB47504A0F63F91180092B45 /* RDEPUBTextPerformanceSampler.swift */, + C879D1B97FBCF728EA0A7A1FD445EEC9 /* RDEPUBTextRenderer.swift */, + CEAF5559BCE747CDC3F13886B8385344 /* RDEPUBTextRendererSupport.swift */, + BA1661CEEEBB7BDE901B5716D99DDE90 /* RDEPUBTextSearchEngine.swift */, + 034E4400505DA6AC50F9D93914301F45 /* RDPlainTextBookBuilder.swift */, + ); + name = EPUBTextRendering; + path = Sources/RDReaderView/EPUBTextRendering; + sourceTree = ""; + }; F3D99F452BF74190AE8A6D307FDF149B /* Support Files */ = { isa = PBXGroup; children = ( @@ -1712,6 +1670,47 @@ /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ + 1FADA470E172C3C05C051DCE71529883 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 2993DF5CE6F83258DE9DA1CA296CEBDB /* DTActivityTitleView.h in Headers */, + 916313DF0E690AD86DE2126CB2027880 /* DTAnimatedGIF.h in Headers */, + 652C87BB289F6D2C0C6AC0DACBF43591 /* DTBase64Coding.h in Headers */, + C18438DC910FD5C2AD24CFC0A967061D /* DTBlockFunctions.h in Headers */, + D583A6E063AFB5A0E1B24EBAC86F5BB5 /* DTCompatibility.h in Headers */, + C518E17914E24B57ED13D1C1E11104BF /* DTCoreGraphicsUtils.h in Headers */, + 394D91C2D2C148AD3633ADB12DF96012 /* DTCustomColoredAccessory.h in Headers */, + AD517D4065385465763EC380F2F12210 /* DTExtendedFileAttributes.h in Headers */, + 7B34D900828BEC759105BC26F048790F /* DTFolderMonitor.h in Headers */, + 0394CD46435D6EE15D3996A7FDEAC0AD /* DTFoundation-umbrella.h in Headers */, + 5ABA46799727B3391DF32044DD086BDC /* DTFoundationConstants.h in Headers */, + BCA7D49D31B99D9B3522A16BA0F2FFED /* DTHTMLParser.h in Headers */, + EFAF5BBFB7E60F9044B865B5771FE618 /* DTLog.h in Headers */, + 752B74E15CF0FD1F56043470AD23C602 /* DTPieProgressIndicator.h in Headers */, + F0D47930AC51626265F4CEDCAEB0D1B6 /* DTSmartPagingScrollView.h in Headers */, + 70952AD584BE1EAABAFE3C6DD47865DE /* DTTiledLayerWithoutFade.h in Headers */, + 6CF2260408BBD6B12C40E62D1D9CFBF3 /* DTVersion.h in Headers */, + 30FB567639FBF7B1D963B9A9E644C55F /* DTWeakSupport.h in Headers */, + 707121640F9C2DCBB05B60D20EDB2CC1 /* NSArray+DTError.h in Headers */, + 4BFE0AAE22726EDD75809FC131FCFD70 /* NSData+DTCrypto.h in Headers */, + 285B09F819BD8AFFD69226251C8EC268 /* NSDictionary+DTError.h in Headers */, + F3EAFDDD47F845D1096ED136515CC915 /* NSFileWrapper+DTCopying.h in Headers */, + EE90D86ECB7ABC204BFB13F2FC315D03 /* NSMutableArray+DTMoving.h in Headers */, + 516F6FF776A9581887D1F57F706443B8 /* NSString+DTFormatNumbers.h in Headers */, + B9638897A5C60E1B8F5B659021B80961 /* NSString+DTPaths.h in Headers */, + 9D360F6B48A691B42343D7DB4CD973AB /* NSString+DTURLEncoding.h in Headers */, + F1223D1CEF088198A2B27D90D3CC4F58 /* NSString+DTUtilities.h in Headers */, + 5939419CF19EE16A2BD1C9E7BD482E1A /* NSURL+DTAppLinks.h in Headers */, + 6E7C5CAB02BA409743CFF48D5218D68D /* NSURL+DTComparing.h in Headers */, + 56B02B75B28FA5F1CA7CE6FAE832F228 /* NSURL+DTUnshorten.h in Headers */, + FFFF063445858983090A4E58B19291CA /* UIApplication+DTNetworkActivity.h in Headers */, + 053AFBB60D220EA22D1CF22AB354BBB9 /* UIImage+DTFoundation.h in Headers */, + F3405C56A63F0B88682C17782422E787 /* UIScreen+DTFoundation.h in Headers */, + 494DB8491A940D9CCD0BAB65DA21D211 /* UIView+DTFoundation.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 29CB77F5EC62298B8E19FEFFD791AEAD /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; @@ -1785,68 +1784,19 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 5C5E063EBE102ED7C5E991C33DAE5D1E /* Headers */ = { + 6D19D7B6BF811EA824842865B59283BA /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 43E88F26739695D134332EF8837B1AB0 /* DTActivityTitleView.h in Headers */, - 437D9E58DE50722DFAA49573EC8B1CA6 /* DTAnimatedGIF.h in Headers */, - 9390C501C84065ED158067C716D2A000 /* DTBase64Coding.h in Headers */, - CA23D9627413150E03866CCBDC873138 /* DTBlockFunctions.h in Headers */, - C322CE4976348F20B13EA053DCBBF04C /* DTCompatibility.h in Headers */, - 49A57AB5E9E3EC6CC0C14F5707DA2084 /* DTCoreGraphicsUtils.h in Headers */, - 82CEA6913EFFCCED6B98AC2BCAE0A5EC /* DTCustomColoredAccessory.h in Headers */, - 1E6141B4021BC57182100FD706789994 /* DTExtendedFileAttributes.h in Headers */, - 5F3CC8E7C5DAEF103A730272E43EAA70 /* DTFolderMonitor.h in Headers */, - 6AFC33684AE2B95CEAA5F24BB8F3E498 /* DTFoundation-umbrella.h in Headers */, - 8164A4848BC14152FDF449DADDF92A8A /* DTFoundationConstants.h in Headers */, - 776B82036BE500048310C53BE5660749 /* DTHTMLParser.h in Headers */, - 837E032420CD913BC5F1072122B4F3F9 /* DTLog.h in Headers */, - EEB9F37C54BC153160D565FDB6787F94 /* DTPieProgressIndicator.h in Headers */, - 32DDB2C5A40C23CA48CA0A4D6ACF9385 /* DTSmartPagingScrollView.h in Headers */, - CD2604AAAF2EC774A7D01DD2BC9CC41F /* DTTiledLayerWithoutFade.h in Headers */, - BE5A5C661394781D353CC954A455D95D /* DTVersion.h in Headers */, - 0B9E080AFBFAD644577C307CDF475CEB /* DTWeakSupport.h in Headers */, - 99975BFB806AEA2B17A03F91182EAB4E /* NSArray+DTError.h in Headers */, - 284CFEFC15F5A6C4FD157B2804064EE0 /* NSData+DTCrypto.h in Headers */, - A38609882E97C006B085419AA7664BB4 /* NSDictionary+DTError.h in Headers */, - DA19BFF1EA6B721BB46BDA953F158EBF /* NSFileWrapper+DTCopying.h in Headers */, - 64503FA8D1076A9BB628B9EA5A34DD93 /* NSMutableArray+DTMoving.h in Headers */, - 5D7515A84856B26E6F0D68A13FD99E10 /* NSString+DTFormatNumbers.h in Headers */, - 075559137D3553EA01AB7DB6C4CC0068 /* NSString+DTPaths.h in Headers */, - C10F21E650BA9795CDC46672FBAC6E03 /* NSString+DTURLEncoding.h in Headers */, - DBDDC7AC62461D9F8C6F013E9A07E74C /* NSString+DTUtilities.h in Headers */, - 075F7790DDEF329B07C4D9B2A62EC120 /* NSURL+DTAppLinks.h in Headers */, - 7FEDE56E5BC44A13164CC403BF0828F4 /* NSURL+DTComparing.h in Headers */, - D75BC043A6A20065A6F040FB2ADCBD25 /* NSURL+DTUnshorten.h in Headers */, - 58C21CC57CC53042312E2A81AAAE67AA /* UIApplication+DTNetworkActivity.h in Headers */, - 2BC3F3158B809CE11479E5939B863982 /* UIImage+DTFoundation.h in Headers */, - 84430BC311162C1FC54D47C5B2E7B112 /* UIScreen+DTFoundation.h in Headers */, - 57911195873C1E7A4B93CF96DC4C6E27 /* UIView+DTFoundation.h in Headers */, + 19E2B4D2CF3DA91EEBAD4079DDBE076C /* RDReaderView-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - 6419F5A5CE690B1E0FA06DF62B3CF3A9 /* Headers */ = { + 772A5C32E9DCE729FF7841B4D27CE9D3 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - C06147F22A2F3039C3A3D506352B888E /* SnapKit-umbrella.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - C0A53D575AA49985083C60A304DF027B /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 285E663B78A3A883EAB51AA1831CF6AF /* SSAlertSwift-umbrella.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - C2AD59D42F3A95B58F735379B945F8C3 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 0D295E2E5B4C0CBA30CA5935A28EF515 /* ZIPFoundation-umbrella.h in Headers */, + 776701E3D6C8347A9A8727DD1C0A2057 /* ZIPFoundation-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1858,11 +1808,19 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - FF9945115402ABAE5CD4208B033DE65F /* Headers */ = { + E55EDAE810E658EF73B5C5E87B8273F0 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 42F63B30779ACF09333EAD7C6B7140DE /* RDReaderView-umbrella.h in Headers */, + E815C9978BE13179EAD3578B50814E1F /* SnapKit-umbrella.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + E673243D8C0BE7FBFD077C7ABDE8992D /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + CE8D398221836AA888D3253140243BA2 /* SSAlertSwift-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1871,11 +1829,11 @@ /* Begin PBXNativeTarget section */ 0C24CB0E87A728A11AA1124CB360D6A1 /* DTCoreText-Resources */ = { isa = PBXNativeTarget; - buildConfigurationList = 59D4ACA9BDD07D02746B022E16367F21 /* Build configuration list for PBXNativeTarget "DTCoreText-Resources" */; + buildConfigurationList = C0CF038C60823EB4C6318C9BCA487473 /* Build configuration list for PBXNativeTarget "DTCoreText-Resources" */; buildPhases = ( - 24DBE49439369467B1A4C7A90DA80E17 /* Sources */, - AA441E21DDC830B0D304EB01DC469318 /* Frameworks */, - 4B5BC69213FD2A88932E1D9C3149D40C /* Resources */, + EA9382AFDD8D8CEB6687FE718577C981 /* Sources */, + A25365B66F39632CA9A6B4D8B0CF909A /* Frameworks */, + 20A2FF028E9B8BAC22A25368376AC743 /* Resources */, ); buildRules = ( ); @@ -1888,17 +1846,17 @@ }; 19622742EBA51E823D6DAE3F8CDBFAD4 /* SnapKit */ = { isa = PBXNativeTarget; - buildConfigurationList = 832A3D5DD444455A9E1B502E0372D9BE /* Build configuration list for PBXNativeTarget "SnapKit" */; + buildConfigurationList = B753DAE9D62F1C3970033983902D5DA9 /* Build configuration list for PBXNativeTarget "SnapKit" */; buildPhases = ( - 6419F5A5CE690B1E0FA06DF62B3CF3A9 /* Headers */, - BBC52FA5EFC9956E353F39F892CF3046 /* Sources */, - 349759691B7A071CE1F7A3CC08016823 /* Frameworks */, - AD79BC71FE12C70EEDE9A04D8BA1F124 /* Resources */, + E55EDAE810E658EF73B5C5E87B8273F0 /* Headers */, + BB4553EEA6A3EACB98062F0C554894CA /* Sources */, + E638817414C3E194C7AFCC1928B26BEE /* Frameworks */, + 0B8EAC4EF34912444677B41D5506F245 /* Resources */, ); buildRules = ( ); dependencies = ( - 69495A43C04C0CEDD34406175F11D62B /* PBXTargetDependency */, + E40E639D5188E207B340EA9ED760ACED /* PBXTargetDependency */, ); name = SnapKit; productName = SnapKit; @@ -1907,12 +1865,12 @@ }; 8619D5ADECF2B26CFD9A9826D61D289A /* SSAlertSwift */ = { isa = PBXNativeTarget; - buildConfigurationList = 85C2E55E5BBFD92BAF4539620F0BF19A /* Build configuration list for PBXNativeTarget "SSAlertSwift" */; + buildConfigurationList = B854881981700E80EC9A3C5D38C9C2B2 /* Build configuration list for PBXNativeTarget "SSAlertSwift" */; buildPhases = ( - C0A53D575AA49985083C60A304DF027B /* Headers */, - 68ADB37B1975A5B5FBE4BE568254B94B /* Sources */, - F3918C9FD7E196E572625FBE64D9105C /* Frameworks */, - DC7B79508DC977C261CC9DAC477C2B6F /* Resources */, + E673243D8C0BE7FBFD077C7ABDE8992D /* Headers */, + CAA75A1C6B0CE8C39109E2DC8439D628 /* Sources */, + 9455F1AD1B1A8CCDDF067216C54B6E14 /* Frameworks */, + DCE7EB0C59A9D131D463715781CCA703 /* Resources */, ); buildRules = ( ); @@ -1935,12 +1893,12 @@ buildRules = ( ); dependencies = ( - 764AD8B0B300BB13F93E93AF867DE227 /* PBXTargetDependency */, - 2C5FD1E1E2070E5EBE646713A45DB2B9 /* PBXTargetDependency */, - 40CC40CD6B8A23C53B535DEE5FF859FE /* PBXTargetDependency */, - E2DE1C22258272D0662E7E2B6C450D22 /* PBXTargetDependency */, - 5D182D70D1019D59C765F9D214A48ADE /* PBXTargetDependency */, - 1185C81725D4CE93912B9E16C92C27D2 /* PBXTargetDependency */, + D0CEDCF680E61097CCDE7BA3F3A2FFE6 /* PBXTargetDependency */, + AD7C7A49E57F6923698611B511B2B28F /* PBXTargetDependency */, + 65B8919CE6A759D6293DEB6F9CF41247 /* PBXTargetDependency */, + ABE2047F82C60D4CF6F168BF11D6D45A /* PBXTargetDependency */, + 4331C47887871F4A75A8D2C450D2F02E /* PBXTargetDependency */, + 00ABC7E516DCCCD5F93019180D10975F /* PBXTargetDependency */, ); name = "Pods-ReadViewDemo"; productName = Pods_ReadViewDemo; @@ -1949,11 +1907,11 @@ }; 8A8DB685241263AFDF5E6B20FE67B93A /* SnapKit-SnapKit_Privacy */ = { isa = PBXNativeTarget; - buildConfigurationList = 146510F23B8D9FA2A1BDECF70126432F /* Build configuration list for PBXNativeTarget "SnapKit-SnapKit_Privacy" */; + buildConfigurationList = E3DCB66E157E16D180F49EF0D7945A6B /* Build configuration list for PBXNativeTarget "SnapKit-SnapKit_Privacy" */; buildPhases = ( - 913953CE3F7F71A434A439E4A234296D /* Sources */, - 22FB16AE5E15436AA6D1120D414CF17A /* Frameworks */, - 874F1BAACFC8CEBC37469EBA5B4B3989 /* Resources */, + 1F5CFCB69780B9B91F58925C75C272EB /* Sources */, + 76F596E482EF168AD1A768D8E5195B77 /* Frameworks */, + E043B25EC4E2E674621B54CF3AE78049 /* Resources */, ); buildRules = ( ); @@ -1966,12 +1924,12 @@ }; 8F6E5A5BF72D62CDFD25F91A7CFA3309 /* DTFoundation */ = { isa = PBXNativeTarget; - buildConfigurationList = F781B55CF246D24B6927D30207AF5C5D /* Build configuration list for PBXNativeTarget "DTFoundation" */; + buildConfigurationList = C5194BAF57874F6FA713A09DD4FEDA8F /* Build configuration list for PBXNativeTarget "DTFoundation" */; buildPhases = ( - 5C5E063EBE102ED7C5E991C33DAE5D1E /* Headers */, - CE706C0FF86BCB65F074BA7986D5683D /* Sources */, - 22035088E60E34EADEA43A38FB910640 /* Frameworks */, - 38A9CBAE5C9F89BF2DAA3814C6ED01DA /* Resources */, + 1FADA470E172C3C05C051DCE71529883 /* Headers */, + 78A07A5515A0D9B8118427D112933DEE /* Sources */, + BC7FD3F4F58EE1BDAA7142FF12B449C0 /* Frameworks */, + C71360FC1A1A29C29DD55EB01FA10C2D /* Resources */, ); buildRules = ( ); @@ -1984,17 +1942,17 @@ }; AA15C8469D67684160CC2A7098EB841C /* ZIPFoundation */ = { isa = PBXNativeTarget; - buildConfigurationList = 5D4CFC975A92A145963D53753FC8AC89 /* Build configuration list for PBXNativeTarget "ZIPFoundation" */; + buildConfigurationList = 4FCF0AB7FD0EE29DDF61FB0406216C6A /* Build configuration list for PBXNativeTarget "ZIPFoundation" */; buildPhases = ( - C2AD59D42F3A95B58F735379B945F8C3 /* Headers */, - 34779BFA3BDC3C9F6BAA9A08CADE9D59 /* Sources */, - 646A1A60E4370242567CB9DC85606613 /* Frameworks */, - 45CD3BE43E859F6CB8D75E313F5E2A4D /* Resources */, + 772A5C32E9DCE729FF7841B4D27CE9D3 /* Headers */, + 2EF070BD723DEA0B5E5041B729127675 /* Sources */, + CCE272E8FF30C2ADD80D9F83D1BE1FAB /* Frameworks */, + 3D60EF1849F05707317805D9FC8D4C6A /* Resources */, ); buildRules = ( ); dependencies = ( - 539E22EA5F9AF290E589802235381163 /* PBXTargetDependency */, + 0DBBB35856C6D1690FE07A57337CDCDF /* PBXTargetDependency */, ); name = ZIPFoundation; productName = ZIPFoundation; @@ -2003,21 +1961,21 @@ }; AA2E57587AA8EECA63C4BE08EA3CB6D2 /* RDReaderView */ = { isa = PBXNativeTarget; - buildConfigurationList = 9596E616EF7D80741A6CCE44B4D15B85 /* Build configuration list for PBXNativeTarget "RDReaderView" */; + buildConfigurationList = BE593AFEA35446DBF1FCE7A2B316369D /* Build configuration list for PBXNativeTarget "RDReaderView" */; buildPhases = ( - FF9945115402ABAE5CD4208B033DE65F /* Headers */, - B38E05C32EF746533F95B182E7DC044E /* Sources */, - BD78C31B7A4E3E1A3FE73C4E5648FE24 /* Frameworks */, - 6F6F5D0C03F5CD2CBB694DB29895441C /* Resources */, + 6D19D7B6BF811EA824842865B59283BA /* Headers */, + 08A523DB34E8D00D86B45DD70F42B0CE /* Sources */, + 4E8AF910316D5C65065B2C33E7E141E8 /* Frameworks */, + 675131E792E03320A750B2041174A336 /* Resources */, ); buildRules = ( ); dependencies = ( - F0CD507973775CB7F06382ED2935BAB3 /* PBXTargetDependency */, - B55271E23085B24B317D2B09312EC02F /* PBXTargetDependency */, - DDB322C84BAE34BEC08C59A41E9918FE /* PBXTargetDependency */, - 71896C44775581E458645C753EA9B870 /* PBXTargetDependency */, - F69D5901314F54280E18CC2DF7527292 /* PBXTargetDependency */, + 6851A166D92E8FE23B3DD15126C207E7 /* PBXTargetDependency */, + E2C4FFF39012D9E3D504FB9F916D8FA0 /* PBXTargetDependency */, + 1C2E282B93D9AF8F3BA02A0882B283DB /* PBXTargetDependency */, + 425221FB78517B513A8DA086E9F4EBA9 /* PBXTargetDependency */, + 1383EEFEE990132E5DC3E6752707B3A0 /* PBXTargetDependency */, ); name = RDReaderView; productName = RDReaderView; @@ -2026,11 +1984,11 @@ }; AE7F393FB7805DE2664AB4111873F907 /* RDReaderView-RDReaderViewAssets */ = { isa = PBXNativeTarget; - buildConfigurationList = 3AF4F1BD33DEDBCC8C91880182355131 /* Build configuration list for PBXNativeTarget "RDReaderView-RDReaderViewAssets" */; + buildConfigurationList = 85398FFFE9D1D55653F32CBCF3C6D9EA /* Build configuration list for PBXNativeTarget "RDReaderView-RDReaderViewAssets" */; buildPhases = ( - 6F1393432E818B7AECED1DAA114FF0D5 /* Sources */, - 111C5938174F5B99CC4DBB155F98AB3D /* Frameworks */, - 8A2AEB2B9299BBDD2E62342B0778150D /* Resources */, + 6A6488B3294C25F89F5C22825D2CFEBC /* Sources */, + F80F0F6E3FE94609184884B26D41F6D2 /* Frameworks */, + 60CDF980339DCF0F863966E1D2345D3C /* Resources */, ); buildRules = ( ); @@ -2053,8 +2011,8 @@ buildRules = ( ); dependencies = ( - B96D111A165DEBBC0FC70B34145B71DE /* PBXTargetDependency */, - 4975D70531E0EE3EE9351B34B65FC21D /* PBXTargetDependency */, + 1DE36CCA8EDA5E355423FD755697B40D /* PBXTargetDependency */, + 85B6CD064D8FD6BBD877D6E19EB6F8F7 /* PBXTargetDependency */, ); name = DTCoreText; productName = DTCoreText; @@ -2063,11 +2021,11 @@ }; C7A8D82E407CD3FDC3BA55CEE519B252 /* ZIPFoundation-ZIPFoundation_Privacy */ = { isa = PBXNativeTarget; - buildConfigurationList = 4A718C262E82351DB8994D391FE2EA91 /* Build configuration list for PBXNativeTarget "ZIPFoundation-ZIPFoundation_Privacy" */; + buildConfigurationList = EB464E7C400BBAF32186D983363BE1DB /* Build configuration list for PBXNativeTarget "ZIPFoundation-ZIPFoundation_Privacy" */; buildPhases = ( - AB3EC7D1A9842C9DD599E8B6A2BADF93 /* Sources */, - 6A3FD1585419E85D3BBC2749DB6D228E /* Frameworks */, - 372BB41D0A200F4CF97707013B9A3501 /* Resources */, + 9512CE04C3E1E9C6A95D3397945E0E44 /* Sources */, + 0AFD099807E2D6382B8C17CF9956C5B0 /* Frameworks */, + 59106F2645BF1D2BBF8012E9E440D3F6 /* Resources */, ); buildRules = ( ); @@ -2118,11 +2076,19 @@ /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ - 372BB41D0A200F4CF97707013B9A3501 /* Resources */ = { + 0B8EAC4EF34912444677B41D5506F245 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - C7C63CB579E508714F53673545B225E3 /* PrivacyInfo.xcprivacy in Resources */, + D412271B77856413B1001384E7C9AE82 /* SnapKit-SnapKit_Privacy in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 20A2FF028E9B8BAC22A25368376AC743 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + F4653CC8B73CE175A4A677165D687137 /* default.css in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2134,34 +2100,36 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 38A9CBAE5C9F89BF2DAA3814C6ED01DA /* Resources */ = { + 3D60EF1849F05707317805D9FC8D4C6A /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + BF24D074ED2DFCDA87CD3D72881E3BFF /* ZIPFoundation-ZIPFoundation_Privacy in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 45CD3BE43E859F6CB8D75E313F5E2A4D /* Resources */ = { + 59106F2645BF1D2BBF8012E9E440D3F6 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - FA31A38C141B31B155BADEE7CDE58F85 /* ZIPFoundation-ZIPFoundation_Privacy in Resources */, + 385DA8247F55E886F3FBC57CC15BEF4E /* PrivacyInfo.xcprivacy in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 4B5BC69213FD2A88932E1D9C3149D40C /* Resources */ = { + 60CDF980339DCF0F863966E1D2345D3C /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - D63EC37A3A69375F0B49035524A21278 /* default.css in Resources */, + 1CBC0ED3AF6CAA617BA3ECB04DA68DF5 /* epub-bridge.js in Resources */, + 57C933175F60BBD9A591DF8B881EC809 /* epub-fixed-layout.html in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 6F6F5D0C03F5CD2CBB694DB29895441C /* Resources */ = { + 675131E792E03320A750B2041174A336 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 53CE89622198F59EC48355CBEF799273 /* RDReaderView-RDReaderViewAssets in Resources */, + 4353DBC7FB1A403EE787B421D75A1FDB /* RDReaderView-RDReaderViewAssets in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2172,90 +2140,149 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 874F1BAACFC8CEBC37469EBA5B4B3989 /* Resources */ = { + C71360FC1A1A29C29DD55EB01FA10C2D /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 45CFC12970470E9E14C4CB5FECCBB5CB /* PrivacyInfo.xcprivacy in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 8A2AEB2B9299BBDD2E62342B0778150D /* Resources */ = { + DCE7EB0C59A9D131D463715781CCA703 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 4CD2CB8177523DECCC13135D98589143 /* epub-bridge.js in Resources */, - 335F165AF7F9FA4887E5D3BBDD610F25 /* epub-fixed-layout.html in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; - AD79BC71FE12C70EEDE9A04D8BA1F124 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 0A8CCD26A03E62301DC688C7F9A451C2 /* SnapKit-SnapKit_Privacy in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - DC7B79508DC977C261CC9DAC477C2B6F /* Resources */ = { + E043B25EC4E2E674621B54CF3AE78049 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + 90FD859AE0F48677673C091645657C80 /* PrivacyInfo.xcprivacy in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXResourcesBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ - 24DBE49439369467B1A4C7A90DA80E17 /* Sources */ = { + 08A523DB34E8D00D86B45DD70F42B0CE /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 6335F55C18A585E2E2B9CBAEE154B648 /* RDEPUBAssetRepository.swift in Sources */, + BFB26B0704E537A580EC61D6E2A3605A /* RDEPUBChapterData.swift in Sources */, + 8136892B4CED3C9F5693FCC921ED6014 /* RDEPUBDTCoreTextRenderer.swift in Sources */, + D0D213E45A7BFA290F79682A8B42C610 /* RDEPUBFixedLayoutTemplate.swift in Sources */, + 78B4D94D1FD3726A02C1ED8FEE039C22 /* RDEPUBJavaScriptBridge.swift in Sources */, + 25EE412DAC29154BBA2A29A3064C7A2B /* RDEPUBModels.swift in Sources */, + A0A17EBE6BE92D7B152E9FB2FE0C013A /* RDEPUBNavigatorLayoutContext.swift in Sources */, + D3602269C1605E3C28EABBACBE425778 /* RDEPUBNavigatorState.swift in Sources */, + 1E53C95A5D9629D8721ED8DF87983841 /* RDEPUBPageInteractionController.swift in Sources */, + 7F3C9504CE51675D8526B0C8049F6376 /* RDEPUBPageLayoutSnapshot.swift in Sources */, + FB7120CA0EB9D7C08AFA863E338CBA90 /* RDEPUBPaginator.swift in Sources */, + FF435595580C1A21539112F520F0609B /* RDEPUBParser.swift in Sources */, + 0BB905F057CB7578CB867DC3F8277CF6 /* RDEPUBParser+Archive.swift in Sources */, + 42BE9975B789B575433E93B4A10A1E34 /* RDEPUBParser+Package.swift in Sources */, + A361BD208575C1F9519EBD2A7987D353 /* RDEPUBParser+ReadingProfile.swift in Sources */, + CD6559AD4A5AF89AC14C50508DDE8AD7 /* RDEPUBParser+Resources.swift in Sources */, + C4F9BFFF7470026F06CF1E0B4794435F /* RDEPUBParser+TOC.swift in Sources */, + 10C736BFEF1A0AF28FAFF1635B224C09 /* RDEPUBPreferences.swift in Sources */, + 6A70936CDC3B178976FFE24E63AAD354 /* RDEPUBPublication.swift in Sources */, + E121E052DAF546C0204B13A0A1C50401 /* RDEPUBReaderBottomToolView.swift in Sources */, + EA27A76BD9FD576755BA1179041236A9 /* RDEPUBReaderChapterListController.swift in Sources */, + DF1ADB5D7BB4EE951433FBEAD1FD02DC /* RDEPUBReaderConfiguration.swift in Sources */, + B02240DE23EEB84EEAC33F34ABD35184 /* RDEPUBReaderController.swift in Sources */, + 8DBBF8ACAED4591294503366E9309DD7 /* RDEPUBReaderDelegate.swift in Sources */, + F1E14DC7A9D61093A030F7A69D0AA8B6 /* RDEPUBReaderHighlightsViewController.swift in Sources */, + AF5E5ED905BF79ECA8E838CC7DB39673 /* RDEPUBReaderPersistence.swift in Sources */, + 6C99D26D2589D26461CE7EDA02676075 /* RDEPUBReaderSettings.swift in Sources */, + F6AB64DF24798D3F7A7019EBA1131AF1 /* RDEPUBReaderSettingsViewController.swift in Sources */, + B16ABF4764576CCAB4D26AED089DAF5E /* RDEPUBReaderTableOfContentsItem.swift in Sources */, + 2BB93FF5C17C381807DFC46B0772102D /* RDEPUBReaderTheme.swift in Sources */, + 9817C19157DE66A9BD607AA3931E5325 /* RDEPUBReaderToolView.swift in Sources */, + 6E6AF65D6FD1082D14D897B70FC6E2D2 /* RDEPUBReaderTopToolView.swift in Sources */, + 75B39488A594591F53B48AEB9121FAD2 /* RDEPUBReadingModels.swift in Sources */, + 2F36566E071CAF9BB1D665CF3027E6B4 /* RDEPUBReadingSession.swift in Sources */, + 948D7F9528860715954579106312B012 /* RDEPUBRenderRequest.swift in Sources */, + 790F591F6FBBF7C3D96992967CAD376F /* RDEPUBResourceResolver.swift in Sources */, + 0F1EB5CB3A6EB0627B076B7AABA22D9E /* RDEPUBResourceURLSchemeHandler.swift in Sources */, + F47E741B08FF5641DA24EBE1B7EC9DC7 /* RDEPUBSearchEngine.swift in Sources */, + F56CB98504978D122BE9C266F138F5FC /* RDEPUBSearchModels.swift in Sources */, + 123FF942A68B336E49F46CD34F0BB593 /* RDEPUBSelectionOverlayView.swift in Sources */, + 3FB38B080B976580510E01FCE7BA4C10 /* RDEPUBStyleSheetBuilder.swift in Sources */, + 44B3694130E8D04BB05A995AE726E37F /* RDEPUBTextAnchor.swift in Sources */, + 14ADB66FB45D862147EB6E6C4B5EA229 /* RDEPUBTextBookBuilder.swift in Sources */, + ADC19D506FE3D818BB4A2C0889F43DBC /* RDEPUBTextBookCache.swift in Sources */, + 2202864554457158A3863F9F6515EE13 /* RDEPUBTextContentView.swift in Sources */, + C077B7981B6ADE25D1D51BAEE316C65B /* RDEPUBTextIndexTable.swift in Sources */, + 4668DB9D177325F8E008E5D1C0F37CB4 /* RDEPUBTextLayouter.swift in Sources */, + 00BDAA46C4F6569C11D4D34AF68DA505 /* RDEPUBTextLayoutFrame.swift in Sources */, + 108AFD87D054CA4FB49572ED7B16AE99 /* RDEPUBTextPaginationSupport.swift in Sources */, + 3466B5D6804C323ACD624A91A77CE318 /* RDEPUBTextPerformanceSampler.swift in Sources */, + BCD19BC9907BD61075E963B0F808D4C2 /* RDEPUBTextRenderer.swift in Sources */, + 2112D33A6C8A659AB911EF9AA8528E32 /* RDEPUBTextRendererSupport.swift in Sources */, + 39FF966DAE554008F4CFD71A2570E676 /* RDEPUBTextSearchEngine.swift in Sources */, + 9140D603032BA04797811C739821C2DC /* RDEPUBWebContentView.swift in Sources */, + 2B020F7C6FC381A28960B363D24FF8F7 /* RDEPUBWebDecorationOverlayView.swift in Sources */, + ABC61D4F3EAE00629A5CD56CCEDEC8D8 /* RDEPUBWebView.swift in Sources */, + CD687E7FE5C54C6CB1ACD0156881B031 /* RDEPUBWebView+Configuration.swift in Sources */, + 0918ED4A491D011B46EE71AA40DDACB6 /* RDEPUBWebView+FixedLayout.swift in Sources */, + 8C514EA67EF511F82BED7E0D07FB3D02 /* RDEPUBWebView+JavaScriptBridge.swift in Sources */, + 7912E2B42F9391E4EA65BAF15B15F896 /* RDEPUBWebView+Reflowable.swift in Sources */, + 416A6514C1A35BB87A05A7C54ACAEAC4 /* RDEPUBWebView+Search.swift in Sources */, + 609B1D7C204655284FF2AC7D8CB3AC70 /* RDEPUBWebViewDebug.swift in Sources */, + A6CCC9339127977A4582A5AFFD2035E5 /* RDPlainTextBookBuilder.swift in Sources */, + FDC2B2E1061CAC09A759B152654FA327 /* RDReaderContentCell.swift in Sources */, + AE9DBB66E3281E810742770F88E04078 /* RDReaderFlowLayout.swift in Sources */, + C661BA0FD7C2D7693FF02A57384EDCE1 /* RDReaderGestureController.swift in Sources */, + 2534C9D06B3696A12408C710CA2757F5 /* RDReaderPageChildViewController.swift in Sources */, + D0AE0A76C7B05D961789B619FE18B12E /* RDReaderView.swift in Sources */, + 129A4894D5C076AC8FBB4AC2159B0AB8 /* RDReaderView-dummy.m in Sources */, + 8237C1DEFAFDF60BF4B7180EE80E0493 /* RDURLReaderController.swift in Sources */, + 08B28F7D56429BDC3EA13F4EBBF2BCDF /* UIColor+RDEPUBHex.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 1F5CFCB69780B9B91F58925C75C272EB /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - 34779BFA3BDC3C9F6BAA9A08CADE9D59 /* Sources */ = { + 2EF070BD723DEA0B5E5041B729127675 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 3AC334CD99FEF528D5DDE072512CBA37 /* Archive.swift in Sources */, - E65097450760D6BE9D8565E4C599A5E7 /* Archive+BackingConfiguration.swift in Sources */, - D2AC557EE061D17C27D8F452BF157E7E /* Archive+Deprecated.swift in Sources */, - F6651FBF52F86EEEFCE9CB45C74E7799 /* Archive+Helpers.swift in Sources */, - B97756D8DD2617114D1C418A0B53D436 /* Archive+MemoryFile.swift in Sources */, - 0F2907771DCAE2DD152ACE6A52219CB8 /* Archive+Progress.swift in Sources */, - BC9FFC60945AE2DCC1F6562B113484A5 /* Archive+Reading.swift in Sources */, - 04D1C39F2057763F32310F080E0C3806 /* Archive+ReadingDeprecated.swift in Sources */, - 22C9366B907210A7AF9BC2BBB7992740 /* Archive+Writing.swift in Sources */, - E577551DA3ED9891514F73784C23FF7E /* Archive+WritingDeprecated.swift in Sources */, - B224E89A4C6948BBAF5EB39658FE69C7 /* Archive+ZIP64.swift in Sources */, - 7C5EA82AF4E5712D1015E35DB81338E4 /* Data+Compression.swift in Sources */, - 91D5532B0FC54915B026853E9DB9A5D6 /* Data+CompressionDeprecated.swift in Sources */, - 9046691B08F5E42ED792259C83DED239 /* Data+Serialization.swift in Sources */, - D2BE2C62544E9FBC20FF6C608672EF94 /* Date+ZIP.swift in Sources */, - 0B8E980D0F1E9A6215675791FC2CC79B /* Entry.swift in Sources */, - C7167F66848716139711535C67CAD1DF /* Entry+Serialization.swift in Sources */, - 22C3C681A6AE1F5D9D9EC3556DD4C744 /* Entry+ZIP64.swift in Sources */, - 65FADAE11F685F04EDCC87C3AF75E120 /* FileManager+ZIP.swift in Sources */, - F9CCEB78FC86D96F173399994677C148 /* FileManager+ZIPDeprecated.swift in Sources */, - 5E6CF58989951EEAEF91FE2CF90B7902 /* URL+ZIP.swift in Sources */, - FD16DD17E47ACF4FFE71C2010A8F6B74 /* ZIPFoundation-dummy.m in Sources */, + 5A25F0EE0E239F179E9D15607175DD63 /* Archive.swift in Sources */, + 202E7C69357BE581D13B25A696C16209 /* Archive+BackingConfiguration.swift in Sources */, + C27B98C72CD3AA827D7CBC3A9E0A3AEF /* Archive+Deprecated.swift in Sources */, + FBA3629CEC806A18708776D770036541 /* Archive+Helpers.swift in Sources */, + 07B6FA62334B326D5179B16E555A1163 /* Archive+MemoryFile.swift in Sources */, + 33346EAF6E558DAD2572AB45E4046AE0 /* Archive+Progress.swift in Sources */, + 1F3E265C62041BC60ED9107DB03798BC /* Archive+Reading.swift in Sources */, + A13631B78D3686CCBB05AFFA9A9BB1E4 /* Archive+ReadingDeprecated.swift in Sources */, + 5CCDB7E1619E66D77F3877C5875E25C7 /* Archive+Writing.swift in Sources */, + 7472100778E71912C37D22EBC4895FF3 /* Archive+WritingDeprecated.swift in Sources */, + E61908BD6CB88CC2A456AADBD820C9F0 /* Archive+ZIP64.swift in Sources */, + 2EA63DE8EF8EE4114C95521A1A8A0DFF /* Data+Compression.swift in Sources */, + 1C1666D7A5833BE0178BD004E8EF21C6 /* Data+CompressionDeprecated.swift in Sources */, + C4AEFF8185BBEBD05C3CB6EFA6E43AB9 /* Data+Serialization.swift in Sources */, + 25DEC09B82998CE7055BA7EB0E4D2F0F /* Date+ZIP.swift in Sources */, + 9BAD2444EA7739384CC2A7353A214B0D /* Entry.swift in Sources */, + BF5BC9DDDF08C70BBD4F9C31D2226D54 /* Entry+Serialization.swift in Sources */, + 2E1F852AC5FF95720D26E4D4650B6441 /* Entry+ZIP64.swift in Sources */, + 66166EB34D3554721D6FE8EB70D2E15B /* FileManager+ZIP.swift in Sources */, + 98A581201B38BE408DF45B4151784877 /* FileManager+ZIPDeprecated.swift in Sources */, + BC1548A44F95A81E27BDA91203A45145 /* URL+ZIP.swift in Sources */, + 5EA53D60B0C24989B91348B1350DC2D1 /* ZIPFoundation-dummy.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 68ADB37B1975A5B5FBE4BE568254B94B /* Sources */ = { + 6A6488B3294C25F89F5C22825D2CFEBC /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 31E6A93269CC2B8231CEF265EF5F56CA /* SSAlertAnimation.swift in Sources */, - C2E3CBC4C851CC868F4841D3B6392099 /* SSAlertAnimationController.swift in Sources */, - E84164CB9A2828386B5A78D2AFE8E1B0 /* SSAlertCommonView.swift in Sources */, - F7172C7DA5875C79ACC0F94260AB5E91 /* SSAlertDefaultAnmation.swift in Sources */, - EB415DC23191916ECCFB799BCEDB9365 /* SSAlertPresentAnimation.swift in Sources */, - 03E14288F6DAEF1E198FEB136AF9E18C /* SSAlertSwift-dummy.m in Sources */, - 27C9DC51F8B053244F4E50001D278499 /* SSAlertView.swift in Sources */, - 68D3E1A09DCCFBF7DCEB1412BCCEA210 /* SSAlertViewExtention.swift in Sources */, - E48ADC81CF102479B6B36491D01140FC /* UIViewFrameExtension.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2267,200 +2294,117 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 6F1393432E818B7AECED1DAA114FF0D5 /* Sources */ = { + 78A07A5515A0D9B8118427D112933DEE /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 5F87019EF9B64242F8644A03D18A2B87 /* DTActivityTitleView.m in Sources */, + C1F30655811FDBB6920A8D300F06C1E5 /* DTAnimatedGIF.m in Sources */, + A38360C4EBCCE4450D52F7B9CE4F6D8D /* DTBase64Coding.m in Sources */, + CCCED38A43502AC6473C11606D64057D /* DTBlockFunctions.m in Sources */, + B49110DD052390A83B240527E04925C2 /* DTCoreGraphicsUtils.m in Sources */, + 7B6E5A0F2FC3FDB0CC0E70246D29C486 /* DTCustomColoredAccessory.m in Sources */, + F1DEB3C74B8755D6FEB5D0A98B1516DC /* DTExtendedFileAttributes.m in Sources */, + F41E072AEF83CD3DE72E7375FEBC91A1 /* DTFolderMonitor.m in Sources */, + 5091243AEA2930A8C64CEFA7311A40E1 /* DTFoundation-dummy.m in Sources */, + 852D45A539C10E1089633476FA1BF72F /* DTFoundationConstants.m in Sources */, + 43072D547164E92F733CF74B2B244DE8 /* DTHTMLParser.m in Sources */, + 0D2BE6D40EA436C99BC88C4AC84DDE71 /* DTLog.m in Sources */, + 6C73F94B5C73FBE0C06678707B5DC77F /* DTPieProgressIndicator.m in Sources */, + 712370237E48CF01BC1C6E7E764F4015 /* DTSmartPagingScrollView.m in Sources */, + 43D10312CDEFDAB42D20488E9522F1DA /* DTTiledLayerWithoutFade.m in Sources */, + D2F269387653D0FA410A3555AB58DCE6 /* DTVersion.m in Sources */, + 72BA060C1C2B29E6F76C5923BC45DD3F /* NSArray+DTError.m in Sources */, + 2C2C452DC3EE68E1BFE8C8D72A3D2750 /* NSData+DTCrypto.m in Sources */, + ED6C2ECBB71A2E3E35FE6C3AF96EF5B7 /* NSDictionary+DTError.m in Sources */, + CC4CDD671505535301C6D768F83B4932 /* NSFileWrapper+DTCopying.m in Sources */, + 2C4B949CE9C8AFB2C207204995DEF3A7 /* NSMutableArray+DTMoving.m in Sources */, + 8CB79CDF6D245B7ECD4762E30F742545 /* NSString+DTFormatNumbers.m in Sources */, + 7FDAEFDFE0E3207DFD5A7B41A5D6D6A6 /* NSString+DTPaths.m in Sources */, + 94B1E7C8F5A10584F39D7CAE59E49801 /* NSString+DTURLEncoding.m in Sources */, + F63D8AF90CA41EC0AD2B733300965F65 /* NSString+DTUtilities.m in Sources */, + 457C0034B28FBD2A77FF784E2C20576E /* NSURL+DTAppLinks.m in Sources */, + 807DCEB839DA036D9FCD04FB6AE9A7CC /* NSURL+DTComparing.m in Sources */, + 186520D7BA8216DB8A28FD45F7F75498 /* NSURL+DTUnshorten.m in Sources */, + 1573AF8F1FE294F259B6D172647DE0E4 /* UIApplication+DTNetworkActivity.m in Sources */, + 03D35920862F172B8E69BC901CD4FA44 /* UIImage+DTFoundation.m in Sources */, + 13EB572E58E7D92462C8BE1114375C43 /* UIScreen+DTFoundation.m in Sources */, + 03324B9DEBB7953076EDCD4091EE150E /* UIView+DTFoundation.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 9512CE04C3E1E9C6A95D3397945E0E44 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - 913953CE3F7F71A434A439E4A234296D /* Sources */ = { + BB4553EEA6A3EACB98062F0C554894CA /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + 4CA8DC97A929C818E3A2F3910087EF42 /* Constraint.swift in Sources */, + 8BE89C6E06DB76798A757F2F0CF95AA9 /* ConstraintAttributes.swift in Sources */, + BEA95EC6964968F6BF8F97E94B7E557C /* ConstraintConfig.swift in Sources */, + 2D7DB1A4CC032FD9E04052F34C519146 /* ConstraintConstantTarget.swift in Sources */, + 650C4E331160D891B5B2ACAB6CE9F557 /* ConstraintDescription.swift in Sources */, + 0EA168CF3EF3FCB8AC5BB8404F02167F /* ConstraintDirectionalInsets.swift in Sources */, + 1E553A18817913A102F1CC344D62F482 /* ConstraintDirectionalInsetTarget.swift in Sources */, + 55DD9BD86A13F34592D44EF4AE3D7B52 /* ConstraintDSL.swift in Sources */, + CEDB56407E114E2183F982942D98EE80 /* ConstraintInsets.swift in Sources */, + 4F72A091B13820692027231A4160F4C2 /* ConstraintInsetTarget.swift in Sources */, + B30DE6DB9957309D3931784688842305 /* ConstraintItem.swift in Sources */, + C61A176195700DBE89F52D928319C4CB /* ConstraintLayoutGuide.swift in Sources */, + B0FA52DE4CFAD71D0DEB6397C606BE5B /* ConstraintLayoutGuide+Extensions.swift in Sources */, + 5317C2808FB00E27D36A26E1C906470B /* ConstraintLayoutGuideDSL.swift in Sources */, + B682D806EE482878932EEA0F55456938 /* ConstraintLayoutSupport.swift in Sources */, + 86B08C25B03944090A4196B7EC75BD4D /* ConstraintLayoutSupportDSL.swift in Sources */, + 07E956FB24A5153D59F07A4A3966CCF4 /* ConstraintMaker.swift in Sources */, + 043840E0B152ECBD4C589446AA1870F9 /* ConstraintMakerEditable.swift in Sources */, + 16421662EE90ABA9A6EE98B2A0FE0210 /* ConstraintMakerExtendable.swift in Sources */, + A1DC5CA85CD9DCBCD24E2066426AE72A /* ConstraintMakerFinalizable.swift in Sources */, + BBDF9E3F2B2A1390FA7DB0CC57E775FE /* ConstraintMakerPrioritizable.swift in Sources */, + FBA09EE40DD15105176DD088697EBA72 /* ConstraintMakerRelatable.swift in Sources */, + 922286D89E1F6F86F3876FD0EFFE4002 /* ConstraintMakerRelatable+Extensions.swift in Sources */, + 17F1C63137132337E12752FDF7633A9A /* ConstraintMultiplierTarget.swift in Sources */, + DB1699CD46DB4D42E854405177569B84 /* ConstraintOffsetTarget.swift in Sources */, + D2D54E0E6F07EFBB725682A8D8A213C3 /* ConstraintPriority.swift in Sources */, + 5857BD9A2659F2F93F2F2314C68A05E9 /* ConstraintPriorityTarget.swift in Sources */, + FDF36E20A3B3BF130C9F20C6269900B5 /* ConstraintRelatableTarget.swift in Sources */, + 3C8CE770C755B822C569A4F9D302F342 /* ConstraintRelation.swift in Sources */, + 7CBCCA6CA9877B5B485B3321929131AD /* ConstraintView.swift in Sources */, + CBF07238641A620765EA20CD83EAAF39 /* ConstraintView+Extensions.swift in Sources */, + 59066938787B3F1835305B4B9C935216 /* ConstraintViewDSL.swift in Sources */, + 14FC98FD822FD9609F753AD2D8EAC873 /* Debugging.swift in Sources */, + DF51C9A2429A74A4DFB895937B7C0B85 /* LayoutConstraint.swift in Sources */, + 710A1F70CC5FDB1C54EACF92B4D990D9 /* LayoutConstraintItem.swift in Sources */, + 910E6231340C7EC7B59EEAE300B4C9DE /* SnapKit-dummy.m in Sources */, + B6B040EE86C6F779D5ED7097204F977C /* Typealiases.swift in Sources */, + 8A9FE5BF5D0F11AF4BB5FC428D3405FE /* UILayoutSupport+Extensions.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - AB3EC7D1A9842C9DD599E8B6A2BADF93 /* Sources */ = { + CAA75A1C6B0CE8C39109E2DC8439D628 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + 4B711340B48B16DAAC3BF45DFBE54907 /* SSAlertAnimation.swift in Sources */, + F51883B7D8D4858816A049BE80A3082C /* SSAlertAnimationController.swift in Sources */, + 70842C59A29DA75B9D42AF0863043578 /* SSAlertCommonView.swift in Sources */, + C6A421CEC68B444EFC2E496473EDD93D /* SSAlertDefaultAnmation.swift in Sources */, + 3EC890B2CE7B2360729F4EBF3023B68D /* SSAlertPresentAnimation.swift in Sources */, + 90AC69AC4EBE7EE54AF3C57F6A9C1338 /* SSAlertSwift-dummy.m in Sources */, + AFF930A701A1822364C2C86FD8636D74 /* SSAlertView.swift in Sources */, + 5F7D5EB957828E8657530DBB033EB6EA /* SSAlertViewExtention.swift in Sources */, + 56FB160F2030BA8EA8409795DDF90428 /* UIViewFrameExtension.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - B38E05C32EF746533F95B182E7DC044E /* Sources */ = { + EA9382AFDD8D8CEB6687FE718577C981 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - CB82DEF19C7E53EB48196A1537AED7B9 /* RDEPUBAssetRepository.swift in Sources */, - C79757E697CD7EF75F202446A9D0400D /* RDEPUBChapterData.swift in Sources */, - 0422C1F781664D2A4E72357045B9DD5D /* RDEPUBDTCoreTextRenderer.swift in Sources */, - 584D3FD696D10185D861280A9B0DE914 /* RDEPUBFixedLayoutTemplate.swift in Sources */, - 77525198C94D40A5ADCB6FF025B0DDC8 /* RDEPUBJavaScriptBridge.swift in Sources */, - 506A657DA6FB6A7FC0D94D045A529ACF /* RDEPUBModels.swift in Sources */, - 3446650779C0B4DFA2F9A38E9316595B /* RDEPUBNavigatorLayoutContext.swift in Sources */, - F7918D8B5949911FE2DBBA8EE5E85143 /* RDEPUBNavigatorState.swift in Sources */, - 0352E0436A8BB258753C1EC5BEFF1F41 /* RDEPUBPageInteractionController.swift in Sources */, - B34C800AA0718E8ECAA2557561FD2347 /* RDEPUBPageLayoutSnapshot.swift in Sources */, - E07E85BBB20877643467668F80A4C373 /* RDEPUBPaginator.swift in Sources */, - 5CD0793FA512BE64BE568BF2069BFF27 /* RDEPUBParser.swift in Sources */, - 6F1FCD907B0CEFF17054F80A9983F5AA /* RDEPUBParser+Archive.swift in Sources */, - 8F32BDF151727ABDBCA7DA71FF2AF51D /* RDEPUBParser+Package.swift in Sources */, - 2B670D48D3797BC147B65F001DB64A2D /* RDEPUBParser+ReadingProfile.swift in Sources */, - 7E00928144BADF78965A4074BBE2225B /* RDEPUBParser+Resources.swift in Sources */, - B5B7E9B7DC6ED149D4A0DE2768155F73 /* RDEPUBParser+TOC.swift in Sources */, - B4315ADED08DA9F87FEB2E9C9AC440EC /* RDEPUBPreferences.swift in Sources */, - E8B86A105BDCDBF88586F123DAB8BA52 /* RDEPUBPublication.swift in Sources */, - F7EBC998D744D374559CD533FACDEF3F /* RDEPUBReaderBottomToolView.swift in Sources */, - F399A7049167A7FE633E834ECB2E0621 /* RDEPUBReaderChapterListController.swift in Sources */, - 34CB7239245E865E3F20FF5AAEEB8683 /* RDEPUBReaderConfiguration.swift in Sources */, - 53F310A4B878E4F0473F88F51660EEDF /* RDEPUBReaderController.swift in Sources */, - 67AB64233CF13B33E45E8E3A858F22E3 /* RDEPUBReaderDelegate.swift in Sources */, - F960A17FE57ABD06B45B9CE73DED4CCA /* RDEPUBReaderHighlightsViewController.swift in Sources */, - 3648EA27B0A27DD5E6451A7F44B0C185 /* RDEPUBReaderPersistence.swift in Sources */, - FA9195273E927472B76A30803735FEB8 /* RDEPUBReaderSettings.swift in Sources */, - FFBE9B1A45573B10D1C96BDEB7A288DC /* RDEPUBReaderSettingsViewController.swift in Sources */, - D08B7390DE9AAC26FB01D4031E1D8CFB /* RDEPUBReaderTableOfContentsItem.swift in Sources */, - FF4E65F5F6EB52C8F11DF01F4910E97F /* RDEPUBReaderTheme.swift in Sources */, - FD6C714A251CE1A94B668A6CFF1D4F8A /* RDEPUBReaderToolView.swift in Sources */, - FB43703A695256DAC61B0BA1AD9CC89F /* RDEPUBReaderTopToolView.swift in Sources */, - EDA59F9024ADFFE3A39A298A5EFBFAD7 /* RDEPUBReadingModels.swift in Sources */, - 37EE68FDABB4D7933B44A360E66CA6A4 /* RDEPUBReadingSession.swift in Sources */, - 8FC6A1E3022D83FA9D6930D0E1556401 /* RDEPUBRenderRequest.swift in Sources */, - D5EC51991CA73F63A22827297DD2C9C3 /* RDEPUBResourceResolver.swift in Sources */, - A584EC5BB6EE1ABA8F720E9790C1A791 /* RDEPUBResourceURLSchemeHandler.swift in Sources */, - A253C9DB104E33942633BCECDCFD08BF /* RDEPUBSearchEngine.swift in Sources */, - C62885CE50835A1728C5C9F946CCEC19 /* RDEPUBSearchModels.swift in Sources */, - 0FFB43EC39E5940C49E18FB5CFE5D9D0 /* RDEPUBSelectionOverlayView.swift in Sources */, - CD0530223461098E5EC80357AA55A5B4 /* RDEPUBStyleSheetBuilder.swift in Sources */, - 3BBAC439B0A9F8101569083C8C975256 /* RDEPUBTextAnchor.swift in Sources */, - 47B7267B80D06DE7190EA450B76F6987 /* RDEPUBTextBookBuilder.swift in Sources */, - 4A00588D199637337DC0B14E95F96A6E /* RDEPUBTextBookCache.swift in Sources */, - CCBB33BDE73DE338A0B9B5C9F90FE3D9 /* RDEPUBTextContentView.swift in Sources */, - CD899BE16D2EAE1D35EB97DD80E5E85D /* RDEPUBTextIndexTable.swift in Sources */, - A84A592630C3AD92B8A4573E70FEB997 /* RDEPUBTextLayouter.swift in Sources */, - 52FFFBD88C4002194EE205CB9B256E30 /* RDEPUBTextLayoutFrame.swift in Sources */, - D889C7FE0B0ECD9EC6E1D4F8BC22B7E9 /* RDEPUBTextPaginationSupport.swift in Sources */, - B04544815C66022E2340CC310F5C0229 /* RDEPUBTextPaging.swift in Sources */, - 1FF46E77DCE6A1499477A7F74B0A4A2E /* RDEPUBTextPerformanceSampler.swift in Sources */, - 2BD573BF6C3F7775A01C29D6C830CD0B /* RDEPUBTextRenderer.swift in Sources */, - 8F42BB7442552CDB69232D0FBD9A9228 /* RDEPUBTextRendererSupport.swift in Sources */, - C5A14B2FB99FA6789827FB62C5EAECB9 /* RDEPUBTextSearchEngine.swift in Sources */, - FED6EDF26E767BB1FABAEB222ADB7E5C /* RDEPUBWebContentView.swift in Sources */, - F23864EEAD7D80FDFD30A59422389312 /* RDEPUBWebView.swift in Sources */, - AB88558953805E03A0C043B8C1D9AB1E /* RDEPUBWebView+Configuration.swift in Sources */, - B104B0AFE56ED4C5FE9011D9C59C42A2 /* RDEPUBWebView+FixedLayout.swift in Sources */, - 0EA6382076ABCCCD14C8ECD8C2762E8A /* RDEPUBWebView+JavaScriptBridge.swift in Sources */, - 33DD79618082A50270C76DC051D9EB07 /* RDEPUBWebView+Reflowable.swift in Sources */, - A5400AE6A717A45B250401FE7C77219E /* RDEPUBWebView+Search.swift in Sources */, - 062F7A0AF438FB115F10473702ACA6A2 /* RDEPUBWebViewDebug.swift in Sources */, - 39F88C59749B6E10C997BAF695675968 /* RDPlainTextBookBuilder.swift in Sources */, - EF4851785CFC9C5508757999351C5CA7 /* RDReaderBottomToolView.swift in Sources */, - 8DA3D4CF85CC1776E58E21CBC63EF449 /* RDReaderCommon.swift in Sources */, - 1B8FB8BD30A923B250D1AB42D92116AF /* RDReaderContentCell.swift in Sources */, - FA7A84BF5497E47E0B71A3AEF1BA06D5 /* RDReaderContentView.swift in Sources */, - 94AF9378D2748A9AAF896797E3558994 /* RDReaderController.swift in Sources */, - 0C409FB96827DAF04354BBC3B18B73EB /* RDReaderController+EPUBText.swift in Sources */, - 27C701B26FFA1212EE52732791DBDE6E /* RDReaderCoverView.swift in Sources */, - 750F96C034751A3373A9BA6F990585B7 /* RDReaderEditView.swift in Sources */, - 595C625184A2C2870D9649E95698CE12 /* RDReaderEndView.swift in Sources */, - EA21CF8EA74860489E729A37897447E8 /* RDReaderEPUBContentView.swift in Sources */, - 4482252FA0C67A5210593A8858B3BF1E /* RDReaderFlowLayout.swift in Sources */, - 5613FC5946D7167110DC46B4E502C573 /* RDReaderGestureController.swift in Sources */, - 91A9AFD5B7BE0756A4E57A75AA62C170 /* RDReaderManager.swift in Sources */, - F8AAC2AC6DC6FEC91F84C7C7E5A34374 /* RDReaderPageChildViewController.swift in Sources */, - 09A7BC122A57A698B01DB3E5FBF5A11C /* RDReaderTheme.swift in Sources */, - 670FAE2A4BBB7FD7219F4D4B8658864F /* RDReaderToolView.swift in Sources */, - 2BDEF7E69D3DCD02429CEF9303E07E95 /* RDReaderTopToolView.swift in Sources */, - 6318702950DA669233AA24BCDF1C3D30 /* RDReaderView.swift in Sources */, - 26DBE362D68A07702CA30DD3CA667C85 /* RDReaderView-dummy.m in Sources */, - E1D9FC0A5280B34E23C78E3A4E9FC806 /* RDURLReaderController.swift in Sources */, - F516B474B9CFAC247FDB14E4DB55EBEE /* SSChapterListController.swift in Sources */, - EC47E2058FB73366CF0612EA4A2D4017 /* SSEventTrigger.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - BBC52FA5EFC9956E353F39F892CF3046 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 81392F89518BD9156914EDA6F365A368 /* Constraint.swift in Sources */, - 5BE32E64223CE82FA4A900B0F13D944C /* ConstraintAttributes.swift in Sources */, - 0C3C5BE6AFC1CC7F03DD9115DD8E79D7 /* ConstraintConfig.swift in Sources */, - 4BF1BA5BD126AB5ECBD0130C10C93853 /* ConstraintConstantTarget.swift in Sources */, - 07229219971E7CEE13214DB1C5836E52 /* ConstraintDescription.swift in Sources */, - 7E6B673B451CC71F4E28C93D533A82CA /* ConstraintDirectionalInsets.swift in Sources */, - F114FE8DD8A8AE524AE8671D72E07543 /* ConstraintDirectionalInsetTarget.swift in Sources */, - 434031D0C3AF65DA56E6907F4B961DCF /* ConstraintDSL.swift in Sources */, - F260288B7580531015A3CE1028871921 /* ConstraintInsets.swift in Sources */, - 25EE699AF556B4288FF8FB7D6F08AAEC /* ConstraintInsetTarget.swift in Sources */, - 45D5FC3E7DACA12FCC030260C863E73A /* ConstraintItem.swift in Sources */, - AE2E9B84461C139566575F4A4FC257BD /* ConstraintLayoutGuide.swift in Sources */, - 9C49F7E0F38CB092455FE48289EAB3D9 /* ConstraintLayoutGuide+Extensions.swift in Sources */, - 4C87D7B8BAEE30CEA143FA1DA19CA5D9 /* ConstraintLayoutGuideDSL.swift in Sources */, - 1DBFC8CDE798B2723356B71588E4E8FF /* ConstraintLayoutSupport.swift in Sources */, - 2D2D9DFF3844283170924BD6FAE8A6D0 /* ConstraintLayoutSupportDSL.swift in Sources */, - 601A35BA023A80B888C0B1615C4945DE /* ConstraintMaker.swift in Sources */, - 21ACD023C20493BDA7A7AD4F908D3B0C /* ConstraintMakerEditable.swift in Sources */, - BA4A866FF1973645F3B94118221D45C4 /* ConstraintMakerExtendable.swift in Sources */, - D11E6B202F71D4A9C74DACEFD6CB30FC /* ConstraintMakerFinalizable.swift in Sources */, - 9B52DF773933891D81C7443869D6CC1B /* ConstraintMakerPrioritizable.swift in Sources */, - A9D583EB26D1E604D466C9C1D9DECA52 /* ConstraintMakerRelatable.swift in Sources */, - 42114ECE137FCF922A2780148B1416D6 /* ConstraintMakerRelatable+Extensions.swift in Sources */, - 2497BAA78EA8AC017F85E951D57C1DB5 /* ConstraintMultiplierTarget.swift in Sources */, - 47945010E88C9F7D024A136D5FFFFA63 /* ConstraintOffsetTarget.swift in Sources */, - 2ED7C867C6A914E51D564C7C0A4CDC9E /* ConstraintPriority.swift in Sources */, - 655AE9F36D60D94097486866EBC3AB57 /* ConstraintPriorityTarget.swift in Sources */, - EEFC445C91985EA88162CF8B44914B06 /* ConstraintRelatableTarget.swift in Sources */, - A5BFFBDBE3C5F4F12FD417759BB6E166 /* ConstraintRelation.swift in Sources */, - BA34B5326FE1A3DAAF1DA4B7EE28B0C8 /* ConstraintView.swift in Sources */, - 7023C35A3056FF0E5401DD8CE47EB02E /* ConstraintView+Extensions.swift in Sources */, - CA7C881F1BD15B22A468E90B8ADAE507 /* ConstraintViewDSL.swift in Sources */, - 9794756327AD1842DF177DDDC7938544 /* Debugging.swift in Sources */, - 0584DE84F5D4432DA37BF213B826E77D /* LayoutConstraint.swift in Sources */, - D6C2CE40FA7AC2E59120835A68293210 /* LayoutConstraintItem.swift in Sources */, - 68AA68C1215B53D73BF956D53B61F432 /* SnapKit-dummy.m in Sources */, - 957C9375185A452D0B1A7BF4CD8F40A4 /* Typealiases.swift in Sources */, - 315CA2CF90E2C8C8BDDBBFEAD998132D /* UILayoutSupport+Extensions.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - CE706C0FF86BCB65F074BA7986D5683D /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 486E59ABF340FAC67DA871E38829BE75 /* DTActivityTitleView.m in Sources */, - E413C3EDDEBE0F5567B629AF4045916A /* DTAnimatedGIF.m in Sources */, - A4B88D8D1171124A42962E8D49DB6AEE /* DTBase64Coding.m in Sources */, - BCF9824F6721BE357FAD2971B9861BC0 /* DTBlockFunctions.m in Sources */, - F9A92F65867DDF068CD0B010228F9442 /* DTCoreGraphicsUtils.m in Sources */, - 77F480039359E619AB5D0DF13C20A730 /* DTCustomColoredAccessory.m in Sources */, - E161E4B33F70299F7B0B202368B7CCA9 /* DTExtendedFileAttributes.m in Sources */, - A3384B5355ABB59CE409F412B47B905A /* DTFolderMonitor.m in Sources */, - 132DF5F7962BFC5EEC9098C425B51EB7 /* DTFoundation-dummy.m in Sources */, - F729DC6AEE60EE7C4FE7813D563530C7 /* DTFoundationConstants.m in Sources */, - 22C064DC473AC7E7B364AFF251CC12BD /* DTHTMLParser.m in Sources */, - BFD2EC5F6AC4D7FACE606143C00320DC /* DTLog.m in Sources */, - 2A46F03145D58286BBD2174712D5F145 /* DTPieProgressIndicator.m in Sources */, - 03774C35209F5A37D230DDDF85EB2161 /* DTSmartPagingScrollView.m in Sources */, - D4A1EEBE30716DC77526E8268BA4F00A /* DTTiledLayerWithoutFade.m in Sources */, - 5E8806A50F77E5707B6050B5D877D8EF /* DTVersion.m in Sources */, - 6A928B256860425CF3C61592BD0642CF /* NSArray+DTError.m in Sources */, - 1CF912B81E8C27A754FAB150AD9C5B3B /* NSData+DTCrypto.m in Sources */, - 5033E56795E2CCD284B775455E763724 /* NSDictionary+DTError.m in Sources */, - 07BCF764A2F17AC516719E5C6273DFE2 /* NSFileWrapper+DTCopying.m in Sources */, - 6A8B278C528FED70B045F0A33AB4B3CA /* NSMutableArray+DTMoving.m in Sources */, - E382CE8616C91DF935F6999E7FA00DF2 /* NSString+DTFormatNumbers.m in Sources */, - 6E36C0DD65546668F59E74F48121BBCE /* NSString+DTPaths.m in Sources */, - E9DD1F98736B2173B0E0D9C8E1FCA481 /* NSString+DTURLEncoding.m in Sources */, - 97C17065E4DF1D032EB1A28E71B994AC /* NSString+DTUtilities.m in Sources */, - E87BDF4A1C3B7A38268D846385D83AAA /* NSURL+DTAppLinks.m in Sources */, - C246D21500378C6DC9A76CC52D363662 /* NSURL+DTComparing.m in Sources */, - 85144D4B5699EE46A3019CB97F227166 /* NSURL+DTUnshorten.m in Sources */, - 2002DB78ED8AF0DD231FA449122865ED /* UIApplication+DTNetworkActivity.m in Sources */, - 45E833F2F3F69B54018B438D888A7795 /* UIImage+DTFoundation.m in Sources */, - 45E3F2369E1918D147E29851D41E5BD3 /* UIScreen+DTFoundation.m in Sources */, - 7855E6B91A9A7BBE78110F56E7551661 /* UIView+DTFoundation.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2536,104 +2480,103 @@ /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ - 1185C81725D4CE93912B9E16C92C27D2 /* PBXTargetDependency */ = { + 00ABC7E516DCCCD5F93019180D10975F /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = ZIPFoundation; target = AA15C8469D67684160CC2A7098EB841C /* ZIPFoundation */; - targetProxy = 828CF8C6B64AF83C23F627454D91DB82 /* PBXContainerItemProxy */; + targetProxy = 3A88EB3BFD0B1573E2C1D4D635B1C0F4 /* PBXContainerItemProxy */; }; - 2C5FD1E1E2070E5EBE646713A45DB2B9 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = DTFoundation; - target = 8F6E5A5BF72D62CDFD25F91A7CFA3309 /* DTFoundation */; - targetProxy = FB62369371339A72FDF69546952F2BC1 /* PBXContainerItemProxy */; - }; - 40CC40CD6B8A23C53B535DEE5FF859FE /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = RDReaderView; - target = AA2E57587AA8EECA63C4BE08EA3CB6D2 /* RDReaderView */; - targetProxy = 917C4D05587FB2E0FD2A11632BEC2F9D /* PBXContainerItemProxy */; - }; - 4975D70531E0EE3EE9351B34B65FC21D /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = DTFoundation; - target = 8F6E5A5BF72D62CDFD25F91A7CFA3309 /* DTFoundation */; - targetProxy = 26767DE6C253EB8F214B5373F25404CB /* PBXContainerItemProxy */; - }; - 539E22EA5F9AF290E589802235381163 /* PBXTargetDependency */ = { + 0DBBB35856C6D1690FE07A57337CDCDF /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = "ZIPFoundation-ZIPFoundation_Privacy"; target = C7A8D82E407CD3FDC3BA55CEE519B252 /* ZIPFoundation-ZIPFoundation_Privacy */; - targetProxy = E10395D53992688715C1F23F6FDB0ECB /* PBXContainerItemProxy */; + targetProxy = 3B5D920B697B5CC498D21895C14A2822 /* PBXContainerItemProxy */; }; - 5D182D70D1019D59C765F9D214A48ADE /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = SnapKit; - target = 19622742EBA51E823D6DAE3F8CDBFAD4 /* SnapKit */; - targetProxy = 98EA671A7DB63934E21A28845DCB9C8A /* PBXContainerItemProxy */; - }; - 69495A43C04C0CEDD34406175F11D62B /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = "SnapKit-SnapKit_Privacy"; - target = 8A8DB685241263AFDF5E6B20FE67B93A /* SnapKit-SnapKit_Privacy */; - targetProxy = 5D31C98D88A1A93108A3BE724175F1C0 /* PBXContainerItemProxy */; - }; - 71896C44775581E458645C753EA9B870 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = SnapKit; - target = 19622742EBA51E823D6DAE3F8CDBFAD4 /* SnapKit */; - targetProxy = 976E30463A8036E3D8D1477F07FA7BD6 /* PBXContainerItemProxy */; - }; - 764AD8B0B300BB13F93E93AF867DE227 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = DTCoreText; - target = B88F4EA0695B6B3165C64594850D72C7 /* DTCoreText */; - targetProxy = FCBD6F1BB5C6853449BA270D434F2F8A /* PBXContainerItemProxy */; - }; - B55271E23085B24B317D2B09312EC02F /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = "RDReaderView-RDReaderViewAssets"; - target = AE7F393FB7805DE2664AB4111873F907 /* RDReaderView-RDReaderViewAssets */; - targetProxy = DE34F65282FF96865061019049BBF1E6 /* PBXContainerItemProxy */; - }; - B96D111A165DEBBC0FC70B34145B71DE /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = "DTCoreText-Resources"; - target = 0C24CB0E87A728A11AA1124CB360D6A1 /* DTCoreText-Resources */; - targetProxy = 774B64636A23A5EFA6D85FC3509D6BFF /* PBXContainerItemProxy */; - }; - DDB322C84BAE34BEC08C59A41E9918FE /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = SSAlertSwift; - target = 8619D5ADECF2B26CFD9A9826D61D289A /* SSAlertSwift */; - targetProxy = D224871CEC07B0D7BBFD32511315959B /* PBXContainerItemProxy */; - }; - E2DE1C22258272D0662E7E2B6C450D22 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = SSAlertSwift; - target = 8619D5ADECF2B26CFD9A9826D61D289A /* SSAlertSwift */; - targetProxy = 21EEF6C20A7AF8C8E70CEEC8D5BC63F3 /* PBXContainerItemProxy */; - }; - F0CD507973775CB7F06382ED2935BAB3 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = DTCoreText; - target = B88F4EA0695B6B3165C64594850D72C7 /* DTCoreText */; - targetProxy = FD8B1379DFAF4624B6341C6E0A635FF7 /* PBXContainerItemProxy */; - }; - F69D5901314F54280E18CC2DF7527292 /* PBXTargetDependency */ = { + 1383EEFEE990132E5DC3E6752707B3A0 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = ZIPFoundation; target = AA15C8469D67684160CC2A7098EB841C /* ZIPFoundation */; - targetProxy = 7D26844A6F94FF0C841AA0846D1A0A0A /* PBXContainerItemProxy */; + targetProxy = F23CFA277994E35BABC3ADBD5AF87BC8 /* PBXContainerItemProxy */; + }; + 1C2E282B93D9AF8F3BA02A0882B283DB /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = SSAlertSwift; + target = 8619D5ADECF2B26CFD9A9826D61D289A /* SSAlertSwift */; + targetProxy = 95F7ED85ACE5FB85F86AE0577F0DAA2A /* PBXContainerItemProxy */; + }; + 1DE36CCA8EDA5E355423FD755697B40D /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "DTCoreText-Resources"; + target = 0C24CB0E87A728A11AA1124CB360D6A1 /* DTCoreText-Resources */; + targetProxy = E715D8F65E7D7E80C6F0C07416FCE5F1 /* PBXContainerItemProxy */; + }; + 425221FB78517B513A8DA086E9F4EBA9 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = SnapKit; + target = 19622742EBA51E823D6DAE3F8CDBFAD4 /* SnapKit */; + targetProxy = 2C341FDE4508BEEBB3BC7DF6B51D37E3 /* PBXContainerItemProxy */; + }; + 4331C47887871F4A75A8D2C450D2F02E /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = SnapKit; + target = 19622742EBA51E823D6DAE3F8CDBFAD4 /* SnapKit */; + targetProxy = 68CF89A2645BAD91F4A2A60A2B03BC9C /* PBXContainerItemProxy */; + }; + 65B8919CE6A759D6293DEB6F9CF41247 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = RDReaderView; + target = AA2E57587AA8EECA63C4BE08EA3CB6D2 /* RDReaderView */; + targetProxy = 21F9491451FF3DCCE2F7ABE74FA1BF71 /* PBXContainerItemProxy */; + }; + 6851A166D92E8FE23B3DD15126C207E7 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = DTCoreText; + target = B88F4EA0695B6B3165C64594850D72C7 /* DTCoreText */; + targetProxy = CF573978303F543D918F1C88627EF0FD /* PBXContainerItemProxy */; + }; + 85B6CD064D8FD6BBD877D6E19EB6F8F7 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = DTFoundation; + target = 8F6E5A5BF72D62CDFD25F91A7CFA3309 /* DTFoundation */; + targetProxy = 769E3922D6EF90FC105378371AD83AE0 /* PBXContainerItemProxy */; + }; + ABE2047F82C60D4CF6F168BF11D6D45A /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = SSAlertSwift; + target = 8619D5ADECF2B26CFD9A9826D61D289A /* SSAlertSwift */; + targetProxy = C4FE1D60CA9E1F9C78E4DE7CCF714CA7 /* PBXContainerItemProxy */; + }; + AD7C7A49E57F6923698611B511B2B28F /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = DTFoundation; + target = 8F6E5A5BF72D62CDFD25F91A7CFA3309 /* DTFoundation */; + targetProxy = 4B12DDA215649FC0BD01FDED78F56A1D /* PBXContainerItemProxy */; + }; + D0CEDCF680E61097CCDE7BA3F3A2FFE6 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = DTCoreText; + target = B88F4EA0695B6B3165C64594850D72C7 /* DTCoreText */; + targetProxy = 6BE1421CDA00F2733A05769CE52ACDB0 /* PBXContainerItemProxy */; + }; + E2C4FFF39012D9E3D504FB9F916D8FA0 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "RDReaderView-RDReaderViewAssets"; + target = AE7F393FB7805DE2664AB4111873F907 /* RDReaderView-RDReaderViewAssets */; + targetProxy = 923111445E67BE92A223CBD0DE4D82E7 /* PBXContainerItemProxy */; + }; + E40E639D5188E207B340EA9ED760ACED /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "SnapKit-SnapKit_Privacy"; + target = 8A8DB685241263AFDF5E6B20FE67B93A /* SnapKit-SnapKit_Privacy */; + targetProxy = 8495735DE53D4168DC26101C6D19DD8D /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ /* Begin XCBuildConfiguration section */ - 059CA7234E54BE8D982E1E68B332B524 /* Debug */ = { + 00BBE9F334DD6E2CF39B1BCF305FA780 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 6014DA7213E4687224F2BF921E30002C /* DTFoundation.debug.xcconfig */; + baseConfigurationReference = 18387159515E0523AFB4204B1AF940ED /* SSAlertSwift.debug.xcconfig */; buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; @@ -2644,9 +2587,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/SSAlertSwift/SSAlertSwift-prefix.pch"; GENERATE_INFOPLIST_FILE = NO; - INFOPLIST_FILE = "Target Support Files/DTFoundation/DTFoundation-Info.plist"; + INFOPLIST_FILE = "Target Support Files/SSAlertSwift/SSAlertSwift-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 15.6; LD_RUNPATH_SEARCH_PATHS = ( @@ -2654,9 +2597,9 @@ "@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/SSAlertSwift/SSAlertSwift.modulemap"; + PRODUCT_MODULE_NAME = SSAlertSwift; + PRODUCT_NAME = SSAlertSwift; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; @@ -2708,17 +2651,17 @@ }; name = Release; }; - 1083CA665B11E1188F09AC45CC8F51F2 /* Release */ = { + 19DEC1081411E882012E53266DE19419 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 96AD00324920CF04C9BB0564B1B6148A /* RDReaderView.release.xcconfig */; + baseConfigurationReference = 53D2AB2348A9B9C582FDC2CDB2E434FC /* SnapKit.release.xcconfig */; buildSettings = { CODE_SIGNING_ALLOWED = NO; - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/RDReaderView"; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/SnapKit"; ENABLE_USER_SCRIPT_SANDBOXING = NO; - IBSC_MODULE = RDReaderView; - INFOPLIST_FILE = "Target Support Files/RDReaderView/ResourceBundle-RDReaderViewAssets-RDReaderView-Info.plist"; + IBSC_MODULE = SnapKit; + INFOPLIST_FILE = "Target Support Files/SnapKit/ResourceBundle-SnapKit_Privacy-SnapKit-Info.plist"; IPHONEOS_DEPLOYMENT_TARGET = 15.6; - PRODUCT_NAME = RDReaderViewAssets; + PRODUCT_NAME = SnapKit_Privacy; SDKROOT = iphoneos; SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = "1,2"; @@ -2726,66 +2669,9 @@ }; name = Release; }; - 1DC93BD8B6C13D9B16312D0EB121A294 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = C960B7AA0B9B8CC473FACFEC64F9906D /* SnapKit.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/SnapKit/SnapKit-prefix.pch"; - GENERATE_INFOPLIST_FILE = NO; - INFOPLIST_FILE = "Target Support Files/SnapKit/SnapKit-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/SnapKit/SnapKit.modulemap"; - PRODUCT_MODULE_NAME = SnapKit; - PRODUCT_NAME = SnapKit; - 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; - }; - 31996E1889D8074E31FA0CB1525715EA /* Debug */ = { + 27A6482E4E33AEFD806FCD8EB3B00267 /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = 4BEC60CB3EDA1C189D3B062E29217440 /* 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; - }; - 32203608753D3EBFE785E82AAD03C4E9 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = F699881ABDBEB419AEBA661AD5A21F35 /* ZIPFoundation.release.xcconfig */; buildSettings = { CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -2817,51 +2703,28 @@ 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; + name = Debug; }; - 3561378ACB93B4CF9B2DA617C10DE49D /* Release */ = { + 374DFEFAFDD444AE16E699655CB41E87 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 96AD00324920CF04C9BB0564B1B6148A /* RDReaderView.release.xcconfig */; + baseConfigurationReference = 4BEC60CB3EDA1C189D3B062E29217440 /* ZIPFoundation.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)/ZIPFoundation"; 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 = ZIPFoundation; + INFOPLIST_FILE = "Target Support Files/ZIPFoundation/ResourceBundle-ZIPFoundation_Privacy-ZIPFoundation-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 = ZIPFoundation_Privacy; 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; }; 44A4B2FB6211B90C1949A44A381F6D1F /* Release */ = { isa = XCBuildConfiguration; @@ -2926,7 +2789,25 @@ }; name = Release; }; - 5702BD214F575603F008E9DC219953FD /* Release */ = { + 470B3560602421E1DD69EA1E4D9AF19B /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = C2840BE6D91479CCBC2E908FBD9DA183 /* DTCoreText.release.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 = Release; + }; + 552BEC477607B42F87ECF4851B27970F /* Release */ = { isa = XCBuildConfiguration; baseConfigurationReference = 53D2AB2348A9B9C582FDC2CDB2E434FC /* SnapKit.release.xcconfig */; buildSettings = { @@ -2966,6 +2847,85 @@ }; name = Release; }; + 6146737EC13EB59A94631D69D6BA370F /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = BEBB599A31B8BC71D00B843E8EB0971F /* 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; + }; + 6CBE5E4DDAC9330128A5498DDD8413D8 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = DF670EC438F05ACC1F1C7B725DBDAA18 /* 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; + }; 73BBB08AD96AC1A6A095E15ADC5FCEE1 /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = 306477706BBB1E784F55BCF8EB1AD737 /* Pods-ReadViewDemo.debug.xcconfig */; @@ -3005,17 +2965,17 @@ }; name = Debug; }; - 790D31292E238BF8415C4DAD916B9D39 /* Debug */ = { + 7D7A491D22450377454F79AF38F37E48 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = A50AEC805674BAACE0061FF64A17695B /* RDReaderView.debug.xcconfig */; + baseConfigurationReference = 78873FAFC0AD9E930D6050A7F976714B /* DTCoreText.debug.xcconfig */; buildSettings = { CODE_SIGNING_ALLOWED = NO; - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/RDReaderView"; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/DTCoreText"; ENABLE_USER_SCRIPT_SANDBOXING = NO; - IBSC_MODULE = RDReaderView; - INFOPLIST_FILE = "Target Support Files/RDReaderView/ResourceBundle-RDReaderViewAssets-RDReaderView-Info.plist"; + IBSC_MODULE = DTCoreText; + INFOPLIST_FILE = "Target Support Files/DTCoreText/ResourceBundle-Resources-DTCoreText-Info.plist"; IPHONEOS_DEPLOYMENT_TARGET = 15.6; - PRODUCT_NAME = RDReaderViewAssets; + PRODUCT_NAME = Resources; SDKROOT = iphoneos; SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = "1,2"; @@ -3023,27 +2983,48 @@ }; name = Debug; }; - 8733186F5297F5542D763660B5015229 /* Release */ = { + 84202CFD23DD601FC7576FC764DDFA0D /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F699881ABDBEB419AEBA661AD5A21F35 /* ZIPFoundation.release.xcconfig */; + baseConfigurationReference = FE2991699D0391172DEADF2F4613E320 /* SSAlertSwift.release.xcconfig */; buildSettings = { - CODE_SIGNING_ALLOWED = NO; - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/ZIPFoundation"; + "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; - IBSC_MODULE = ZIPFoundation; - INFOPLIST_FILE = "Target Support Files/ZIPFoundation/ResourceBundle-ZIPFoundation_Privacy-ZIPFoundation-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/SSAlertSwift/SSAlertSwift-prefix.pch"; + GENERATE_INFOPLIST_FILE = NO; + INFOPLIST_FILE = "Target Support Files/SSAlertSwift/SSAlertSwift-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 15.6; - PRODUCT_NAME = ZIPFoundation_Privacy; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MODULEMAP_FILE = "Target Support Files/SSAlertSwift/SSAlertSwift.modulemap"; + PRODUCT_MODULE_NAME = SSAlertSwift; + PRODUCT_NAME = SSAlertSwift; SDKROOT = iphoneos; SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_INSTALL_OBJC_HEADER = YES; + SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; - WRAPPER_EXTENSION = bundle; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; }; name = Release; }; - 877C7B7A128B7C9E81D5873EE4BE7041 /* Release */ = { + 92473191D454FAA879C071395CE486B3 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = DF670EC438F05ACC1F1C7B725DBDAA18 /* DTFoundation.release.xcconfig */; + baseConfigurationReference = 6014DA7213E4687224F2BF921E30002C /* DTFoundation.debug.xcconfig */; buildSettings = { CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -3075,12 +3056,69 @@ SWIFT_INSTALL_OBJC_HEADER = YES; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + 97BD02361EB65749FA19884A8A8D7937 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = D0AA4E895BB85E9FC893F2FEE774981F /* 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; }; + 9EE1D8E79EC1A35C141177A1BFAA69F3 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = C960B7AA0B9B8CC473FACFEC64F9906D /* SnapKit.debug.xcconfig */; + buildSettings = { + CODE_SIGNING_ALLOWED = NO; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/SnapKit"; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + IBSC_MODULE = SnapKit; + INFOPLIST_FILE = "Target Support Files/SnapKit/ResourceBundle-SnapKit_Privacy-SnapKit-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 15.6; + PRODUCT_NAME = SnapKit_Privacy; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + WRAPPER_EXTENSION = bundle; + }; + name = Debug; + }; A0DC1C2C814704734F83EAB35BB20B21 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -3188,101 +3226,6 @@ }; name = Release; }; - A32A6BDB3B62687C8F4431D4B85DF700 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = FE2991699D0391172DEADF2F4613E320 /* SSAlertSwift.release.xcconfig */; - buildSettings = { - "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/SSAlertSwift/SSAlertSwift-prefix.pch"; - GENERATE_INFOPLIST_FILE = NO; - INFOPLIST_FILE = "Target Support Files/SSAlertSwift/SSAlertSwift-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/SSAlertSwift/SSAlertSwift.modulemap"; - PRODUCT_MODULE_NAME = SSAlertSwift; - PRODUCT_NAME = SSAlertSwift; - 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; - }; - A3C14827227E3918283DDDC6D065A209 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 18387159515E0523AFB4204B1AF940ED /* SSAlertSwift.debug.xcconfig */; - buildSettings = { - "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/SSAlertSwift/SSAlertSwift-prefix.pch"; - GENERATE_INFOPLIST_FILE = NO; - INFOPLIST_FILE = "Target Support Files/SSAlertSwift/SSAlertSwift-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/SSAlertSwift/SSAlertSwift.modulemap"; - PRODUCT_MODULE_NAME = SSAlertSwift; - PRODUCT_NAME = SSAlertSwift; - 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; - }; - A44931F48B1199828D0FBDF4609CCBF1 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 78873FAFC0AD9E930D6050A7F976714B /* 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; - }; A843E21C1B95C92BE904EB3F8115DD30 /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = 78873FAFC0AD9E930D6050A7F976714B /* DTCoreText.debug.xcconfig */; @@ -3322,17 +3265,17 @@ }; name = Debug; }; - C01B0399E7DAD1C2A39EC2F0E3793417 /* Release */ = { + BCCB0643A85B64325B0404A1FEE4A49D /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C2840BE6D91479CCBC2E908FBD9DA183 /* DTCoreText.release.xcconfig */; + baseConfigurationReference = D0AA4E895BB85E9FC893F2FEE774981F /* RDReaderView.release.xcconfig */; buildSettings = { CODE_SIGNING_ALLOWED = NO; - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/DTCoreText"; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/RDReaderView"; ENABLE_USER_SCRIPT_SANDBOXING = NO; - IBSC_MODULE = DTCoreText; - INFOPLIST_FILE = "Target Support Files/DTCoreText/ResourceBundle-Resources-DTCoreText-Info.plist"; + IBSC_MODULE = RDReaderView; + INFOPLIST_FILE = "Target Support Files/RDReaderView/ResourceBundle-RDReaderViewAssets-RDReaderView-Info.plist"; IPHONEOS_DEPLOYMENT_TARGET = 15.6; - PRODUCT_NAME = Resources; + PRODUCT_NAME = RDReaderViewAssets; SDKROOT = iphoneos; SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = "1,2"; @@ -3340,9 +3283,84 @@ }; name = Release; }; - CE974F162C2634FCB707C7618F42347D /* Debug */ = { + E352847F1E2DD6BB84C566EBD9A180F7 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 4BEC60CB3EDA1C189D3B062E29217440 /* ZIPFoundation.debug.xcconfig */; + baseConfigurationReference = BEBB599A31B8BC71D00B843E8EB0971F /* 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; + }; + E9712DE9F1C3720961326B5B32217C15 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = C960B7AA0B9B8CC473FACFEC64F9906D /* SnapKit.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/SnapKit/SnapKit-prefix.pch"; + GENERATE_INFOPLIST_FILE = NO; + INFOPLIST_FILE = "Target Support Files/SnapKit/SnapKit-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/SnapKit/SnapKit.modulemap"; + PRODUCT_MODULE_NAME = SnapKit; + PRODUCT_NAME = SnapKit; + 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; + }; + F565CC9E3570B2986D96AD21E99CDE47 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = F699881ABDBEB419AEBA661AD5A21F35 /* 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; + }; + F5808AEC9721FCD87C6C34E78FE420C8 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = F699881ABDBEB419AEBA661AD5A21F35 /* ZIPFoundation.release.xcconfig */; buildSettings = { CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -3374,86 +3392,12 @@ 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; - }; - FB743E7CFE2D9F4A1D67F7051EB34BAD /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = C960B7AA0B9B8CC473FACFEC64F9906D /* SnapKit.debug.xcconfig */; - buildSettings = { - CODE_SIGNING_ALLOWED = NO; - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/SnapKit"; - ENABLE_USER_SCRIPT_SANDBOXING = NO; - IBSC_MODULE = SnapKit; - INFOPLIST_FILE = "Target Support Files/SnapKit/ResourceBundle-SnapKit_Privacy-SnapKit-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 15.6; - PRODUCT_NAME = SnapKit_Privacy; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - WRAPPER_EXTENSION = bundle; - }; - name = Debug; - }; - FD4E901E68E8DA6ED5CD9E96BBE3314F /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 53D2AB2348A9B9C582FDC2CDB2E434FC /* SnapKit.release.xcconfig */; - buildSettings = { - CODE_SIGNING_ALLOWED = NO; - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/SnapKit"; - ENABLE_USER_SCRIPT_SANDBOXING = NO; - IBSC_MODULE = SnapKit; - INFOPLIST_FILE = "Target Support Files/SnapKit/ResourceBundle-SnapKit_Privacy-SnapKit-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 15.6; - PRODUCT_NAME = SnapKit_Privacy; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - WRAPPER_EXTENSION = bundle; - }; name = Release; }; - FDA70778360460448E862234BF5144F8 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = A50AEC805674BAACE0061FF64A17695B /* 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; - }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ @@ -3466,24 +3410,6 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 146510F23B8D9FA2A1BDECF70126432F /* Build configuration list for PBXNativeTarget "SnapKit-SnapKit_Privacy" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - FB743E7CFE2D9F4A1D67F7051EB34BAD /* Debug */, - FD4E901E68E8DA6ED5CD9E96BBE3314F /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 3AF4F1BD33DEDBCC8C91880182355131 /* Build configuration list for PBXNativeTarget "RDReaderView-RDReaderViewAssets" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 790D31292E238BF8415C4DAD916B9D39 /* Debug */, - 1083CA665B11E1188F09AC45CC8F51F2 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */ = { isa = XCConfigurationList; buildConfigurations = ( @@ -3493,56 +3419,65 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 4A718C262E82351DB8994D391FE2EA91 /* Build configuration list for PBXNativeTarget "ZIPFoundation-ZIPFoundation_Privacy" */ = { + 4FCF0AB7FD0EE29DDF61FB0406216C6A /* Build configuration list for PBXNativeTarget "ZIPFoundation" */ = { isa = XCConfigurationList; buildConfigurations = ( - 31996E1889D8074E31FA0CB1525715EA /* Debug */, - 8733186F5297F5542D763660B5015229 /* Release */, + 27A6482E4E33AEFD806FCD8EB3B00267 /* Debug */, + F5808AEC9721FCD87C6C34E78FE420C8 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 59D4ACA9BDD07D02746B022E16367F21 /* Build configuration list for PBXNativeTarget "DTCoreText-Resources" */ = { + 85398FFFE9D1D55653F32CBCF3C6D9EA /* Build configuration list for PBXNativeTarget "RDReaderView-RDReaderViewAssets" */ = { isa = XCConfigurationList; buildConfigurations = ( - A44931F48B1199828D0FBDF4609CCBF1 /* Debug */, - C01B0399E7DAD1C2A39EC2F0E3793417 /* Release */, + E352847F1E2DD6BB84C566EBD9A180F7 /* Debug */, + BCCB0643A85B64325B0404A1FEE4A49D /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 5D4CFC975A92A145963D53753FC8AC89 /* Build configuration list for PBXNativeTarget "ZIPFoundation" */ = { + B753DAE9D62F1C3970033983902D5DA9 /* Build configuration list for PBXNativeTarget "SnapKit" */ = { isa = XCConfigurationList; buildConfigurations = ( - CE974F162C2634FCB707C7618F42347D /* Debug */, - 32203608753D3EBFE785E82AAD03C4E9 /* Release */, + E9712DE9F1C3720961326B5B32217C15 /* Debug */, + 552BEC477607B42F87ECF4851B27970F /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 832A3D5DD444455A9E1B502E0372D9BE /* Build configuration list for PBXNativeTarget "SnapKit" */ = { + B854881981700E80EC9A3C5D38C9C2B2 /* Build configuration list for PBXNativeTarget "SSAlertSwift" */ = { isa = XCConfigurationList; buildConfigurations = ( - 1DC93BD8B6C13D9B16312D0EB121A294 /* Debug */, - 5702BD214F575603F008E9DC219953FD /* Release */, + 00BBE9F334DD6E2CF39B1BCF305FA780 /* Debug */, + 84202CFD23DD601FC7576FC764DDFA0D /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 85C2E55E5BBFD92BAF4539620F0BF19A /* Build configuration list for PBXNativeTarget "SSAlertSwift" */ = { + BE593AFEA35446DBF1FCE7A2B316369D /* Build configuration list for PBXNativeTarget "RDReaderView" */ = { isa = XCConfigurationList; buildConfigurations = ( - A3C14827227E3918283DDDC6D065A209 /* Debug */, - A32A6BDB3B62687C8F4431D4B85DF700 /* Release */, + 6146737EC13EB59A94631D69D6BA370F /* Debug */, + 97BD02361EB65749FA19884A8A8D7937 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 9596E616EF7D80741A6CCE44B4D15B85 /* Build configuration list for PBXNativeTarget "RDReaderView" */ = { + C0CF038C60823EB4C6318C9BCA487473 /* Build configuration list for PBXNativeTarget "DTCoreText-Resources" */ = { isa = XCConfigurationList; buildConfigurations = ( - FDA70778360460448E862234BF5144F8 /* Debug */, - 3561378ACB93B4CF9B2DA617C10DE49D /* Release */, + 7D7A491D22450377454F79AF38F37E48 /* Debug */, + 470B3560602421E1DD69EA1E4D9AF19B /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + C5194BAF57874F6FA713A09DD4FEDA8F /* Build configuration list for PBXNativeTarget "DTFoundation" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 92473191D454FAA879C071395CE486B3 /* Debug */, + 6CBE5E4DDAC9330128A5498DDD8413D8 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; @@ -3556,11 +3491,20 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - F781B55CF246D24B6927D30207AF5C5D /* Build configuration list for PBXNativeTarget "DTFoundation" */ = { + E3DCB66E157E16D180F49EF0D7945A6B /* Build configuration list for PBXNativeTarget "SnapKit-SnapKit_Privacy" */ = { isa = XCConfigurationList; buildConfigurations = ( - 059CA7234E54BE8D982E1E68B332B524 /* Debug */, - 877C7B7A128B7C9E81D5873EE4BE7041 /* Release */, + 9EE1D8E79EC1A35C141177A1BFAA69F3 /* Debug */, + 19DEC1081411E882012E53266DE19419 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + EB464E7C400BBAF32186D983363BE1DB /* Build configuration list for PBXNativeTarget "ZIPFoundation-ZIPFoundation_Privacy" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 374DFEFAFDD444AE16E699655CB41E87 /* Debug */, + F565CC9E3570B2986D96AD21E99CDE47 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; diff --git a/ReadViewDemo/Pods/Pods.xcodeproj/xcuserdata/shen.xcuserdatad/xcschemes/xcschememanagement.plist b/ReadViewDemo/Pods/Pods.xcodeproj/xcuserdata/shen.xcuserdatad/xcschemes/xcschememanagement.plist index 4e445b7..31f7503 100644 --- a/ReadViewDemo/Pods/Pods.xcodeproj/xcuserdata/shen.xcuserdatad/xcschemes/xcschememanagement.plist +++ b/ReadViewDemo/Pods/Pods.xcodeproj/xcuserdata/shen.xcuserdatad/xcschemes/xcschememanagement.plist @@ -8,78 +8,56 @@ isShown - orderHint - 1 DTCoreText.xcscheme isShown - orderHint - 0 DTFoundation.xcscheme isShown - orderHint - 2 Pods-ReadViewDemo.xcscheme isShown - orderHint - 3 RDReaderView-RDReaderViewAssets.xcscheme isShown - orderHint - 5 RDReaderView.xcscheme isShown - orderHint - 4 SSAlertSwift.xcscheme isShown - orderHint - 8 SnapKit-SnapKit_Privacy.xcscheme isShown - orderHint - 7 SnapKit.xcscheme isShown - orderHint - 6 ZIPFoundation-ZIPFoundation_Privacy.xcscheme isShown - orderHint - 10 ZIPFoundation.xcscheme isShown - orderHint - 9 SuppressBuildableAutocreation diff --git a/ReadViewDemo/ReadViewDemo.xcodeproj/project.pbxproj b/ReadViewDemo/ReadViewDemo.xcodeproj/project.pbxproj index 1a1aebb..0d517cc 100644 --- a/ReadViewDemo/ReadViewDemo.xcodeproj/project.pbxproj +++ b/ReadViewDemo/ReadViewDemo.xcodeproj/project.pbxproj @@ -185,14 +185,10 @@ inputFileListPaths = ( "${PODS_ROOT}/Target Support Files/Pods-ReadViewDemo/Pods-ReadViewDemo-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - ); name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( "${PODS_ROOT}/Target Support Files/Pods-ReadViewDemo/Pods-ReadViewDemo-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); - outputPaths = ( - ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-ReadViewDemo/Pods-ReadViewDemo-frameworks.sh\"\n"; diff --git a/ReadViewDemo/ReadViewDemo.xcworkspace/xcuserdata/shen.xcuserdatad/UserInterfaceState.xcuserstate b/ReadViewDemo/ReadViewDemo.xcworkspace/xcuserdata/shen.xcuserdatad/UserInterfaceState.xcuserstate index c16837bba6b505c0fc6a214217b7410150badb54..017734e8718f552dc1ce048f0515b9e1e24223a0 100644 GIT binary patch literal 70102 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 t$8Pp(RowG>m-k1^@#9AiMwo literal 64568 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 L>F@II(^~%zlkOZS diff --git a/Sources/RDReaderView/EPUBCore/RDEPUBAssetRepository.swift b/Sources/RDReaderView/EPUBCore/RDEPUBAssetRepository.swift index af05c31..848c02b 100644 --- a/Sources/RDReaderView/EPUBCore/RDEPUBAssetRepository.swift +++ b/Sources/RDReaderView/EPUBCore/RDEPUBAssetRepository.swift @@ -11,6 +11,14 @@ enum RDEPUBAsset: String { case bridgeScript = "epub-bridge" /// 固定版式 HTML 模板(epub-fixed-layout.html),用于渲染 pre-paginated 类型的 EPUB case fixedLayoutTemplate = "epub-fixed-layout" + /// WXRead 对齐的 default.css + case wxReadDefaultCSS = "wxread-default" + /// WXRead 对齐的 replace.css + case wxReadReplaceCSS = "wxread-replace" + /// WXRead 对齐的 dark.css + case wxReadDarkCSS = "wxread-dark" + /// WXRead 对齐的 replaceForLatinLanguageBook.css + case wxReadLatinReplaceCSS = "wxread-replace-latin" /// 对应的文件扩展名 var fileExtension: String { @@ -19,6 +27,8 @@ enum RDEPUBAsset: String { return "js" case .fixedLayoutTemplate: return "html" + case .wxReadDefaultCSS, .wxReadReplaceCSS, .wxReadDarkCSS, .wxReadLatinReplaceCSS: + return "css" } } } @@ -65,4 +75,4 @@ enum RDEPUBAssetRepository { } /// 用于定位当前模块 Bundle 的标记类 -private final class RDEPUBAssetBundleToken {} \ No newline at end of file +private final class RDEPUBAssetBundleToken {} diff --git a/Sources/RDReaderView/EPUBCore/RDEPUBJavaScriptBridge.swift b/Sources/RDReaderView/EPUBCore/RDEPUBJavaScriptBridge.swift index 0aa7cc3..27f71c2 100644 --- a/Sources/RDReaderView/EPUBCore/RDEPUBJavaScriptBridge.swift +++ b/Sources/RDReaderView/EPUBCore/RDEPUBJavaScriptBridge.swift @@ -81,163 +81,22 @@ enum RDEPUBJavaScriptBridge { let payload = jsonString(from: searchPayload(presentation), fallback: "null") return """ (function() { - var payload = \(payload); - function normalizeHref(rawHref) { - if (!rawHref) { return ''; } - var value = String(rawHref); - value = value.replace(/^.*?:\\/\\/[^/]+\\//, ''); - value = value.split('#')[0]; - value = value.replace(/^\\/+/, ''); - try { - value = decodeURIComponent(value); - } catch (error) { - } - return value; - } - - function ensureStyle(doc) { - if (!doc || !doc.head || doc.getElementById('ss-reader-search-style')) { return; } - var style = doc.createElement('style'); - style.id = 'ss-reader-search-style'; - style.textContent = '.ss-reader-search-mark{background:rgba(248,225,108,0.55);color:inherit;border-radius:2px;padding:0;}.ss-reader-search-mark-active{background:rgba(255,159,67,0.75);color:inherit;border-radius:2px;padding:0;}'; - doc.head.appendChild(style); - } - - function clearMarks(doc) { - if (!doc || !doc.body) { return; } - var marks = doc.querySelectorAll('span.ss-reader-search-mark, span.ss-reader-search-mark-active'); - marks.forEach(function(mark) { - var textNode = doc.createTextNode(mark.textContent || ''); - if (mark.parentNode) { - mark.parentNode.replaceChild(textNode, mark); - } - }); - doc.body.normalize(); - } - - function searchableDocuments(rootDoc) { - var items = []; - if (!rootDoc) { return items; } - items.push({ doc: rootDoc, href: normalizeHref(rootDoc.location && rootDoc.location.href) }); - var frames = rootDoc.querySelectorAll ? rootDoc.querySelectorAll('iframe') : []; - frames.forEach(function(frame) { - try { - if (frame.contentDocument) { - items.push({ - doc: frame.contentDocument, - href: normalizeHref(frame.contentWindow && frame.contentWindow.location && frame.contentWindow.location.href) - }); - } - } catch (error) { - } - }); - return items; - } - - function textNodes(doc) { - if (!doc || !doc.body) { return []; } - var walker = doc.createTreeWalker(doc.body, NodeFilter.SHOW_TEXT, { - acceptNode: function(node) { - if (!node || !node.nodeValue || !node.nodeValue.trim()) { - return NodeFilter.FILTER_REJECT; - } - var parent = node.parentNode; - if (!parent || !parent.nodeName) { - return NodeFilter.FILTER_REJECT; - } - var name = parent.nodeName.toLowerCase(); - if (['script', 'style', 'noscript'].indexOf(name) >= 0) { - return NodeFilter.FILTER_REJECT; - } - if (parent.classList && (parent.classList.contains('ss-reader-search-mark') || parent.classList.contains('ss-reader-search-mark-active'))) { - return NodeFilter.FILTER_REJECT; - } - return NodeFilter.FILTER_ACCEPT; - } - }); - - var nodes = []; - while (walker.nextNode()) { - nodes.push(walker.currentNode); - } - return nodes; - } - - function applyToDocument(doc, resourceState, keyword) { - clearMarks(doc); - ensureStyle(doc); - if (!doc || !doc.body || !resourceState || !keyword || resourceState.matchCount <= 0) { - return; - } - - var lowerKeyword = String(keyword).toLowerCase(); - var activeIndex = typeof resourceState.activeLocalMatchIndex === 'number' ? resourceState.activeLocalMatchIndex : null; - var currentLocalIndex = 0; - var activeElement = null; - - textNodes(doc).forEach(function(node) { - var source = node.nodeValue || ''; - var lowerSource = source.toLowerCase(); - var cursor = 0; - var replaced = false; - var fragment = doc.createDocumentFragment(); - - while (cursor < source.length) { - var foundIndex = lowerSource.indexOf(lowerKeyword, cursor); - if (foundIndex < 0) { - break; - } - - replaced = true; - if (foundIndex > cursor) { - fragment.appendChild(doc.createTextNode(source.slice(cursor, foundIndex))); - } - - var mark = doc.createElement('span'); - mark.className = currentLocalIndex === activeIndex ? 'ss-reader-search-mark-active' : 'ss-reader-search-mark'; - mark.textContent = source.slice(foundIndex, foundIndex + keyword.length); - fragment.appendChild(mark); - if (currentLocalIndex === activeIndex) { - activeElement = mark; - } - - currentLocalIndex += 1; - cursor = foundIndex + keyword.length; - } - - if (!replaced) { - return; - } - - if (cursor < source.length) { - fragment.appendChild(doc.createTextNode(source.slice(cursor))); - } - if (node.parentNode) { - node.parentNode.replaceChild(fragment, node); - } - }); - - if (activeElement && activeElement.scrollIntoView) { - activeElement.scrollIntoView({ block: 'center', inline: 'center', behavior: 'auto' }); - } - } - - var docs = searchableDocuments(document); - var states = new Map(); - if (payload && Array.isArray(payload.resources)) { - payload.resources.forEach(function(resource) { - states.set(normalizeHref(resource.href), resource); - }); - } - - docs.forEach(function(item) { - applyToDocument(item.doc, states.get(item.href), payload && payload.keyword ? payload.keyword : ''); - }); + if (!window.RDReaderBridge) { return false; } + window.RDReaderBridge.setSearchPresentation(\(payload)); return true; })(); """ } + static func resolveDecorationsScript() -> String { + """ + (function() { + if (!window.RDReaderBridge) { return { highlights: [], search: [] }; } + return window.RDReaderBridge.resolveDecorations(); + })(); + """ + } + /// 转义字符串中的反斜杠和反引号,避免 JS 模板字面量语法错误 private static func escapedJavaScriptTemplateLiteral(_ string: String) -> String { string diff --git a/Sources/RDReaderView/EPUBCore/RDEPUBWebView+FixedLayout.swift b/Sources/RDReaderView/EPUBCore/RDEPUBWebView+FixedLayout.swift index e989ecd..1652849 100644 --- a/Sources/RDReaderView/EPUBCore/RDEPUBWebView+FixedLayout.swift +++ b/Sources/RDReaderView/EPUBCore/RDEPUBWebView+FixedLayout.swift @@ -61,7 +61,17 @@ extension RDEPUBWebView { /// 生成固定版式加载签名(用于去重相同请求) func fixedLayoutLoadSignature(publicationKey: String, request: RDEPUBFixedRenderRequest) -> String { - [ + let searchSignature = [ + request.searchPresentation?.keyword ?? "", + request.searchPresentation?.resources.map { + [ + $0.href, + String($0.matchCount), + String($0.activeLocalMatchIndex ?? -1) + ].joined(separator: "|") + }.joined(separator: ",") ?? "" + ].joined(separator: "#") + return [ publicationKey, "fixed", request.spread.resources.map(\.href).joined(separator: "|"), @@ -72,7 +82,8 @@ extension RDEPUBWebView { String(format: "%.2f", request.contentInset.bottom), String(format: "%.2f", request.contentInset.right), request.backgroundColorCSS ?? "", - request.fit.rawValue + request.fit.rawValue, + searchSignature ].joined(separator: "#") } diff --git a/Sources/RDReaderView/EPUBCore/RDEPUBWebView+Reflowable.swift b/Sources/RDReaderView/EPUBCore/RDEPUBWebView+Reflowable.swift index 34feb84..bd39f1e 100644 --- a/Sources/RDReaderView/EPUBCore/RDEPUBWebView+Reflowable.swift +++ b/Sources/RDReaderView/EPUBCore/RDEPUBWebView+Reflowable.swift @@ -102,6 +102,16 @@ extension RDEPUBWebView { let highlightSignature = request.highlights .map { [$0.id, $0.rangeInfo ?? "", $0.color, $0.style.rawValue].joined(separator: "|") } .joined(separator: ",") + let searchSignature = [ + request.searchPresentation?.keyword ?? "", + request.searchPresentation?.resources.map { + [ + $0.href, + String($0.matchCount), + String($0.activeLocalMatchIndex ?? -1) + ].joined(separator: "|") + }.joined(separator: ",") ?? "" + ].joined(separator: "#") let presentation = request.presentation return [ publicationKey, @@ -121,7 +131,8 @@ extension RDEPUBWebView { presentation.themeBackgroundColor ?? "", presentation.themeTextColor ?? "", targetSignature, - highlightSignature + highlightSignature, + searchSignature ].joined(separator: "#") } diff --git a/Sources/RDReaderView/EPUBCore/RDEPUBWebView+Search.swift b/Sources/RDReaderView/EPUBCore/RDEPUBWebView+Search.swift index bed22b5..2825470 100644 --- a/Sources/RDReaderView/EPUBCore/RDEPUBWebView+Search.swift +++ b/Sources/RDReaderView/EPUBCore/RDEPUBWebView+Search.swift @@ -2,6 +2,7 @@ // RDEPUBWebView 的搜索高亮扩展 // 从当前渲染请求中提取搜索展示信息,生成搜索高亮脚本并注入到 WebView 中执行。 +import UIKit import WebKit extension RDEPUBWebView { @@ -31,7 +32,107 @@ extension RDEPUBWebView { if let error { self.delegate?.epubWebView(self, didLogJavaScriptError: error.localizedDescription) } + self.refreshNativeDecorationsIfNeeded(completion: completion) + } + } + + func refreshNativeDecorationsIfNeeded(completion: (() -> Void)? = nil) { + guard let webView else { + onDecorationsResolved?([]) + completion?() + return + } + + webView.evaluateJavaScript(RDEPUBJavaScriptBridge.resolveDecorationsScript()) { [weak self] result, error in + guard let self else { + completion?() + return + } + if let error { + self.delegate?.epubWebView(self, didLogJavaScriptError: error.localizedDescription) + self.onDecorationsResolved?([]) + completion?() + return + } + + let decorations = self.nativeDecorations(from: result) + self.onDecorationsResolved?(decorations) completion?() } } + + private func nativeDecorations(from result: Any?) -> [RDEPUBTextOverlayDecoration] { + guard let payload = result as? [String: Any] else { return [] } + + let highlightDecorations = decorationList( + from: payload["highlights"] as? [[String: Any]], + defaultColor: overlayColor(hex: "#F8E16C", alpha: 0.45) ?? UIColor(red: 248 / 255, green: 225 / 255, blue: 108 / 255, alpha: 0.45) + ) + let searchDecorations = decorationList( + from: payload["search"] as? [[String: Any]], + defaultColor: UIColor(red: 248 / 255, green: 225 / 255, blue: 108 / 255, alpha: 0.55) + ) + return highlightDecorations + searchDecorations + } + + private func decorationList( + from items: [[String: Any]]?, + defaultColor: UIColor + ) -> [RDEPUBTextOverlayDecoration] { + guard let items else { return [] } + + return items.enumerated().compactMap { index, item -> RDEPUBTextOverlayDecoration? in + guard let kindString = item["kind"] as? String, + let kind = RDEPUBTextOverlayDecoration.Kind(rawValue: kindString), + let rectPayloads = item["rects"] as? [[String: Any]] else { + return nil + } + + let rects = rectPayloads.compactMap { rectPayload -> CGRect? in + guard let x = (rectPayload["x"] as? NSNumber)?.doubleValue, + let y = (rectPayload["y"] as? NSNumber)?.doubleValue, + let width = (rectPayload["width"] as? NSNumber)?.doubleValue, + let height = (rectPayload["height"] as? NSNumber)?.doubleValue else { + return nil + } + return CGRect(x: x, y: y, width: width, height: height) + } + guard !rects.isEmpty else { return nil } + + let color: UIColor + switch kind { + case .underline: + let hex = item["color"] as? String ?? "#F8E16C" + color = overlayColor(hex: hex, alpha: 1) ?? defaultColor + case .activeSearch: + color = UIColor(red: 255 / 255, green: 159 / 255, blue: 67 / 255, alpha: 0.75) + case .search: + color = UIColor(red: 248 / 255, green: 225 / 255, blue: 108 / 255, alpha: 0.55) + case .highlight: + let hex = item["color"] as? String ?? "#F8E16C" + color = overlayColor(hex: hex, alpha: 0.45) ?? defaultColor + case .selection, .locate: + color = defaultColor + } + + return RDEPUBTextOverlayDecoration( + kind: kind, + absoluteRange: NSRange(location: index, length: 1), + rects: rects, + color: color + ) + } + } + + private func overlayColor(hex: String, alpha: CGFloat) -> UIColor? { + var value = hex.trimmingCharacters(in: .whitespacesAndNewlines) + value = value.replacingOccurrences(of: "#", with: "") + guard value.count == 6, let hexValue = Int(value, radix: 16) else { return nil } + return UIColor( + red: CGFloat((hexValue >> 16) & 0xFF) / 255, + green: CGFloat((hexValue >> 8) & 0xFF) / 255, + blue: CGFloat(hexValue & 0xFF) / 255, + alpha: alpha + ) + } } diff --git a/Sources/RDReaderView/EPUBCore/RDEPUBWebView.swift b/Sources/RDReaderView/EPUBCore/RDEPUBWebView.swift index 2060183..1523cb2 100644 --- a/Sources/RDReaderView/EPUBCore/RDEPUBWebView.swift +++ b/Sources/RDReaderView/EPUBCore/RDEPUBWebView.swift @@ -71,6 +71,8 @@ public final class RDEPUBWebView: UIView { public weak var delegate: RDEPUBWebViewDelegate? /// 渲染完成回调(与 delegate 并行使用) public var onRendered: (() -> Void)? + /// 内部原生装饰解析回调 + var onDecorationsResolved: (([RDEPUBTextOverlayDecoration]) -> Void)? /// 当前关联的出版物 var publication: RDEPUBPublication? @@ -143,6 +145,7 @@ public final class RDEPUBWebView: UIView { public func reset() { delegate = nil onRendered = nil + onDecorationsResolved = nil publication = nil currentRenderRequest = nil currentSpineIndex = 0 diff --git a/Sources/RDReaderView/EPUBCore/Resources/epub-bridge.js b/Sources/RDReaderView/EPUBCore/Resources/epub-bridge.js index 643554e..cc2b106 100644 --- a/Sources/RDReaderView/EPUBCore/Resources/epub-bridge.js +++ b/Sources/RDReaderView/EPUBCore/Resources/epub-bridge.js @@ -153,47 +153,195 @@ var absoluteLeft = Math.max(0, rect.left + currentPageOffset()); return Math.max(0, Math.floor(absoluteLeft / effectivePageStride())); } - function unwrapHighlights() { - document.querySelectorAll('mark.ss-reader-highlight').forEach(function(mark) { - var parent = mark.parentNode; - if (!parent) { return; } - while (mark.firstChild) { - parent.insertBefore(mark.firstChild, mark); - } - parent.removeChild(mark); - }); + var storedHighlights = []; + var storedSearchPresentation = null; + function normalizeHref(rawHref) { + if (!rawHref) { return ''; } + var value = String(rawHref); + value = value.replace(/^.*?:\/\/[^/]+\//, ''); + value = value.split('#')[0]; + value = value.replace(/^\/+/, ''); + try { + value = decodeURIComponent(value); + } catch (error) { + } + return value; + } + function clearHighlights() { + storedHighlights = []; } function setHighlights(items) { - unwrapHighlights(); - if (!Array.isArray(items)) { return; } - items.forEach(function(item) { - if (!item || !item.rangeInfo) { return; } - var range = rangeFromInfo(item.rangeInfo); - if (!range || range.collapsed) { return; } + storedHighlights = Array.isArray(items) ? items.slice() : []; + } + function setSearchPresentation(payload) { + storedSearchPresentation = payload || null; + } + function textNodes(doc) { + if (!doc || !doc.body) { return []; } + var walker = doc.createTreeWalker(doc.body, NodeFilter.SHOW_TEXT, { + acceptNode: function(node) { + if (!node || !node.nodeValue || !node.nodeValue.trim()) { + return NodeFilter.FILTER_REJECT; + } + var parent = node.parentNode; + if (!parent || !parent.nodeName) { + return NodeFilter.FILTER_REJECT; + } + var name = parent.nodeName.toLowerCase(); + if (['script', 'style', 'noscript'].indexOf(name) >= 0) { + return NodeFilter.FILTER_REJECT; + } + return NodeFilter.FILTER_ACCEPT; + } + }); + var nodes = []; + while (walker.nextNode()) { + nodes.push(walker.currentNode); + } + return nodes; + } + function documentContexts(rootDoc, baseOffsetX, baseOffsetY) { + var items = []; + if (!rootDoc) { return items; } + var offsetX = baseOffsetX || 0; + var offsetY = baseOffsetY || 0; + items.push({ + doc: rootDoc, + href: normalizeHref(rootDoc.location && rootDoc.location.href), + offsetX: offsetX, + offsetY: offsetY + }); + var frames = rootDoc.querySelectorAll ? rootDoc.querySelectorAll('iframe') : []; + frames.forEach(function(frame) { try { - var mark = document.createElement('mark'); - var style = item.style || 'highlight'; - mark.className = 'ss-reader-highlight ss-reader-highlight-' + style; - mark.style.color = 'inherit'; - if (style === 'underline') { - mark.style.background = 'transparent'; - mark.style.textDecorationLine = 'underline'; - mark.style.textDecorationStyle = 'solid'; - mark.style.textDecorationThickness = '2px'; - mark.style.textDecorationColor = item.color || '#F8E16C'; - } else { - mark.style.background = item.color || '#F8E16C'; - } - mark.dataset.highlightId = item.id || ''; - var fragment = range.extractContents(); - mark.appendChild(fragment); - range.insertNode(mark); - if (mark.parentNode && mark.parentNode.normalize) { - mark.parentNode.normalize(); - } + if (!frame.contentDocument) { return; } + var frameRect = frame.getBoundingClientRect(); + documentContexts( + frame.contentDocument, + offsetX + frameRect.left, + offsetY + frameRect.top + ).forEach(function(item) { + items.push(item); + }); } catch (error) { } }); + return items; + } + function rectPayloadForRange(range, offsetX, offsetY) { + if (!range || range.collapsed) { return []; } + var rects = []; + Array.prototype.forEach.call(range.getClientRects(), function(rect) { + if (!rect || rect.width < 0.5 || rect.height < 0.5) { return; } + rects.push({ + x: rect.left + (offsetX || 0), + y: rect.top + (offsetY || 0), + width: rect.width, + height: rect.height + }); + }); + return rects; + } + function collectHighlightDecorations() { + return storedHighlights.map(function(item, index) { + if (!item || !item.rangeInfo) { return null; } + var range = rangeFromInfo(item.rangeInfo); + var rects = rectPayloadForRange(range, 0, 0); + if (!rects.length) { return null; } + return { + key: item.id || ('highlight-' + index), + kind: item.style === 'underline' ? 'underline' : 'highlight', + color: item.color || '#F8E16C', + rangeInfo: item.rangeInfo, + rects: rects + }; + }).filter(Boolean); + } + function collectSearchDecorations() { + if (!storedSearchPresentation || !storedSearchPresentation.keyword) { + return []; + } + + var resources = new Map(); + if (Array.isArray(storedSearchPresentation.resources)) { + storedSearchPresentation.resources.forEach(function(resource) { + resources.set(normalizeHref(resource.href), resource); + }); + } + + var keyword = String(storedSearchPresentation.keyword); + var lowerKeyword = keyword.toLowerCase(); + var decorations = []; + + documentContexts(document, 0, 0).forEach(function(context) { + var resourceState = resources.get(context.href); + if (!resourceState || resourceState.matchCount <= 0) { + return; + } + + var activeIndex = typeof resourceState.activeLocalMatchIndex === 'number' ? resourceState.activeLocalMatchIndex : null; + var currentLocalIndex = 0; + var activeRect = null; + var contextStartIndex = decorations.length; + + textNodes(context.doc).forEach(function(node) { + var source = node.nodeValue || ''; + var lowerSource = source.toLowerCase(); + var cursor = 0; + + while (cursor < source.length) { + var foundIndex = lowerSource.indexOf(lowerKeyword, cursor); + if (foundIndex < 0) { + break; + } + + var range = context.doc.createRange(); + range.setStart(node, foundIndex); + range.setEnd(node, foundIndex + keyword.length); + var rects = rectPayloadForRange(range, context.offsetX, context.offsetY); + if (rects.length) { + var isActive = currentLocalIndex === activeIndex; + decorations.push({ + key: context.href + ':' + currentLocalIndex, + kind: isActive ? 'activeSearch' : 'search', + rects: rects + }); + if (isActive) { + activeRect = rects[0]; + } + } + + currentLocalIndex += 1; + cursor = foundIndex + keyword.length; + } + }); + + if (activeRect && !isFixedLayoutDocument()) { + var previousPageIndex = visiblePageIndex; + var activePageIndex = Math.max(0, Math.floor(Math.max(0, activeRect.x + currentPageOffset()) / effectivePageStride())); + setVisiblePageIndex(activePageIndex); + var deltaX = (activePageIndex - previousPageIndex) * effectivePageStride(); + if (deltaX !== 0) { + for (var index = contextStartIndex; index < decorations.length; index += 1) { + decorations[index].rects = decorations[index].rects.map(function(rect) { + return { + x: rect.x - deltaX, + y: rect.y, + width: rect.width, + height: rect.height + }; + }); + } + } + } + }); + return decorations; + } + function resolveDecorations() { + return { + highlights: collectHighlightDecorations(), + search: collectSearchDecorations() + }; } function selectionPayload() { var selection = window.getSelection(); @@ -290,7 +438,9 @@ this.scrollToPage(derivedPageIndex); }, setHighlights: setHighlights, - clearHighlights: unwrapHighlights, + clearHighlights: clearHighlights, + setSearchPresentation: setSearchPresentation, + resolveDecorations: resolveDecorations, reportProgression: reportProgression, selectionPayload: selectionPayload }; diff --git a/Sources/RDReaderView/EPUBCore/Resources/wxread-dark.css b/Sources/RDReaderView/EPUBCore/Resources/wxread-dark.css new file mode 100644 index 0000000..cb21780 --- /dev/null +++ b/Sources/RDReaderView/EPUBCore/Resources/wxread-dark.css @@ -0,0 +1,56 @@ +/* 适配搜狗百科 bar 里的 icon 被染色 */ +.header-home, .header-home:before, .header-logo, .loginBox, .header-search, .header-search:before, .header-more:before { + background-color: transparent !important; +} + +/* 适配搜狗百科 某些透明的 div 被染色导致挡住图片 */ +.abstract-img-none { + background: none !important; +} + +/* 适配百度搜索图片丢失 */ +.c-touchable-feedback-no-default * { + background-color: transparent !important; +} + +img, video { + z-index: 1 !important; +} + +/*背景纯黑*/ +*, *:before, *:after { + background-color: rgba(0, 0, 0, 1) !important; +} + +.wr-business-container, +.wr-business-container *, +.wr-business-container *:before, +.wr-business-container *:after { + background-color: rgb(28, 28, 29) !important; +} + +/*背景颜色和一般字体颜色*/ +div, h1, h2, h3, h4, h5, h6, p, body, em, html, link, textarea, form, select, input, span, button, em, menu, aside, table, tr, td, nav, dl, dt, dd, amp-iframe, main, section { + color: rgba(180, 180, 182, 1) !important; + border-color: #555555 !important; + text-shadow: 0 0 0 #000; +} + +/*超链接*/ +a { + color: rgba(84, 127, 176, 1) !important; +} + +blockquote { + color : rgb(218, 220, 224); + background-color : rgb(10, 14, 18) !important; + border-left: 1px solid rgba(116, 120, 124, 1); +} + +img { + border: none !important; +} + +ul li:before, ol li:before { + background-color: rgba(196, 200, 204, 1) !important; +} diff --git a/Sources/RDReaderView/EPUBCore/Resources/wxread-default.css b/Sources/RDReaderView/EPUBCore/Resources/wxread-default.css new file mode 100644 index 0000000..49323e0 --- /dev/null +++ b/Sources/RDReaderView/EPUBCore/Resources/wxread-default.css @@ -0,0 +1,221 @@ +/* this file is processed with xxd via a build rule and embedded in library */ + +/* these styles come from Safari */ + +/* note that comments are only permitted before selectors and before the styles */ + +/* DO NOT fiddle with this file if you want to have your own styles, + pass your own stylesheet via the option parameter to override these defaults */ + +head { + display:none; +} + +title { + display:none; +} + +style { + display:none; +} + +link { + display: none; +} + +meta { + display: none; +} + +script { + display: none; +} + +html { + display:block; + margin:0; + padding:0; +} + +body { + display:block; + font-size:16px; + margin:0; + padding:0; +} + +article,aside,footer,header,hgroup,nav,section { + display:block; +} + +p { + display:block; + margin:0; +} + +img { + margin:0; +} + +ul,ol,menu,dir { + display:block; + margin:1em 0 1em 0; + padding-left:24px; +} + +ul { + list-style-type:disc; +} + +ol { + list-style-type:decimal; +} + +li { + display:list-item; +} + +ul ul, ol ul { + list-style-type: circle; +} + +ol ol ul, ol ul ul, ul ol ul, ul ul ul { + list-style-type: square; +} + +code { + font-family:Courier; +} + +pre, xmp, plaintext, listing { + display: block; + font-family: monospace; + white-space: pre; + margin: 1em 0; +} + +a { + color:#2262A3; + text-decoration:underline; +} + +a:active { + color:#2262A3; +} + +center { + text-align:center; + display:block; +} + +strong,b { + font-weight:bold; +} + +i,em { + font-style:italic; +} + +u { + text-decoration:underline; +} + +big { + font-size:bigger; +} + +small { + font-size:smaller; +} + +sub { + font-size:smaller; + vertical-align:sub; +} + +sup { + font-size:smaller; + vertical-align:super; +} + +s,strike,del { + text-decoration:line-through; +} + +tt,code,kbd,samp { + font-family:monospace; +} + +pre,xmp,plaintext,listing { + display:block; + font-family:monospace; + white-space:pre; + margin-top:1em; + margin-right:0; + margin-bottom:1em; +} + +pre { + background-color:rgba(0,0,0,.05); + padding-top:1em; + padding-bottom:1em; + border-radius:0.3em; +} + +h1 { + display:block; + font-size:1.5em; + font-weight: normal; +} + +h2 { + display:block; + font-size:1.4em; + margin-top: 0.83em; +} + +h3 { + display:block; + font-size:1.3em; + margin-top: 1em; +} + +h4 { + display:block; + font-size:1.2em; + margin-top: 1.33em; +} + +h5 { + display:block; + font-size:1.1em; + margin-top: 1.67em; +} + +h6 { + display:block; + font-size:1em; + margin-top: 2.33em; +} + +div { + display: block; +} + +hr { + display: block; + margin:0.5em auto 0.5em auto; + border-style: inset; + border-width: 1px; +} + +table { + display: table; + border-collapse: separate; + border-spacing: 2px; + border-color: gray; +} + +blockquote { + display: block; +} diff --git a/Sources/RDReaderView/EPUBCore/Resources/wxread-replace-latin.css b/Sources/RDReaderView/EPUBCore/Resources/wxread-replace-latin.css new file mode 100644 index 0000000..318b912 --- /dev/null +++ b/Sources/RDReaderView/EPUBCore/Resources/wxread-replace-latin.css @@ -0,0 +1,113 @@ +/*
代码块,注意必须写font-weight使字体生效 */
+pre {
+    font-family: "Menlo";
+    font-weight: normal;
+    line-height: 1.5em;
+}
+
+/*版权信息*/
+.copyRightTitle {
+    color: black;
+    font-size: 1.5em;
+    font-family: "Source Han Serif CN";
+    font-weight: normal;
+}
+
+/*图片说明文字*/
+.eepub-single-image-title {
+    font-size: 0.75em;
+    text-align: center;
+    line-height: 1.4em;
+    color: rgba(0, 0, 0, 0.9);
+    margin: 0.2em 0.4em 1em 0.4em;
+    font-weight: normal;
+}
+
+/*标题*/
+.firstTitle, h1.firstTitle {
+    font-size: 1.5em;
+    font-weight: bold;
+    line-height: 1.25em;
+}
+.secondTitle, h2.secondTitle {
+    font-size: 1.4em;
+    font-weight: bold;
+    line-height: 1.35em;
+}
+.thirdTitle, h3.thirdTitle {
+    font-size: 1.3em;
+    font-weight: bold;
+    line-height: 1.5em;
+}
+.fourthTitle, h4.fourthTitle {
+    font-size: 1.2em;
+    font-weight: bold;
+    line-height: 1.65em;
+}
+.fifthTitle, h5.fifthTitle {
+    font-size: 1.1em;
+    font-weight: bold;
+    line-height: 1.85em;
+}
+.sixthTitle, h6.sixthTitle {
+    font-size: 1em;
+    font-weight: bold;
+    line-height: 2em;
+}
+
+/*首字加大*/
+/*浮动元素有默认的margin,所以这里会修复一下*/
+.ftext {
+    float: left;
+    margin: 0em;
+    font-size: 2.38em;
+    font-weight: normal;
+}
+
+/*引用内容*/
+.conQuot {
+    font-weight: normal;
+    margin: 0em 0em 0.2em 0em;
+}
+
+/*标题下来可能会有一行subHead*/
+.subHead{
+    text-indent: 2em;
+}
+
+pre, pre span, pre code {
+    font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace;
+    font-size:.7em!important;
+}
+
+.bodyPic {
+    wr-vertical-center-style: 2;
+}
+
+.qrbodyPic {
+    page-break-inside: avoid;
+    wr-vertical-center-style: 2;
+}
+
+/* 注标图 */
+.qqreader-footnote {
+    width: 1em;
+}
+
+/* 私有垂直居中类 */
+.wr-vertical-center {
+    wr-vertical-center-style: 1 !important;
+}
+
+/* 翻译 */
+.wr-translation {
+    line-height: 1.7em !important;
+}
+
+/* 章节结尾工具 */
+.book-chapter-tool {
+    display: block;
+    height: 78px;
+    width: 100%;
+    margin-top: 24px;
+}
diff --git a/Sources/RDReaderView/EPUBCore/Resources/wxread-replace.css b/Sources/RDReaderView/EPUBCore/Resources/wxread-replace.css
new file mode 100644
index 0000000..7c4909c
--- /dev/null
+++ b/Sources/RDReaderView/EPUBCore/Resources/wxread-replace.css
@@ -0,0 +1,171 @@
+/* 
代码块,注意必须写font-weight使字体生效 */
+pre {
+    font-family: "Menlo";
+    font-weight: normal;
+    line-height: 1.5em;
+}
+
+/*版权信息*/
+.copyRightTitle {
+    color: black;
+    font-size: 1.5em;
+    font-family: "Source Han Serif CN";
+    font-weight: normal;
+}
+
+/*图片说明文字*/
+.eepub-single-image-title {
+    font-size: 0.75em;
+    text-align: center;
+    line-height: 1.4em;
+    color: rgba(0, 0, 0, 0.9);
+    margin: 0.2em 0.4em 1em 0.4em;
+    font-family: "FZFSJW--GB1-0";
+    font-weight: normal;
+}
+
+/*标题*/
+.firstTitle, h1.firstTitle {
+    font-size: 1.5em;
+    font-family: "Source Han Serif CN";
+    font-weight: bold;
+    line-height: 1.25em;
+}
+.secondTitle, h2.secondTitle {
+    font-size: 1.4em;
+    font-family: "Source Han Serif CN";
+    font-weight: bold;
+    line-height: 1.35em;
+}
+.thirdTitle, h3.thirdTitle {
+    font-size: 1.3em;
+    font-family: "Source Han Serif CN";
+    font-weight: bold;
+    line-height: 1.5em;
+}
+.fourthTitle, h4.fourthTitle {
+    font-size: 1.2em;
+    font-family: "Source Han Serif CN";
+    font-weight: bold;
+    line-height: 1.65em;
+}
+.fifthTitle, h5.fifthTitle {
+    font-size: 1.1em;
+    font-family: "Source Han Serif CN";
+    font-weight: bold;
+    line-height: 1.85em;
+}
+.sixthTitle, h6.sixthTitle {
+    font-size: 1em;
+    font-family: "Source Han Serif CN";
+    font-weight: bold;
+    line-height: 2em;
+}
+
+/*首字加大*/
+/*浮动元素有默认的margin,所以这里会修复一下*/
+.ftext {
+    float: left;
+    margin: 0em;
+    font-size: 2.38em;
+    font-weight: normal;
+}
+
+/*引用内容*/
+.conQuot {
+    font-family: "FZFSJW--GB1-0";
+    font-weight: normal;
+    margin: 0em 0em 0.2em 0em;
+}
+
+/*标题下来可能会有一行subHead*/
+.subHead{
+    text-indent: 2em;
+}
+
+pre, pre span, pre code {
+    font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace;
+    font-size:.7em!important;
+}
+
+.bodyPic {
+    wr-vertical-center-style: 2;
+}
+
+.qrbodyPic {
+    page-break-inside: avoid;
+    wr-vertical-center-style: 2;
+}
+
+/* 注标图 */
+.qqreader-footnote {
+    width: 1em;
+}
+
+/* 翻译 */
+.wr-translation {
+    line-height: 1.7em !important;
+}
+
+/*-------------------- 小文章相关 ----------------------*/
+
+/*epub-custom-rule-6 如果 class="weread-page-relate" 在开头,需要把上一页末尾一行移到这一页*/
+.weread-page-relate {
+    weread-page-relate:true;
+}
+
+/*epub-custom-rule-29 小文章打赏的样式*/
+.chapter-reward {
+    display: block;
+    height: 120px;
+    width: 100%;
+    margin-top: 24px;
+}
+
+/*epub-custom-rule-7 小文章工具栏标签的样式*/
+.chapter-tool {
+    display: block;
+    height: 140px;
+    width: 100%;
+    margin-top: 24px;
+}
+
+/* 章节结尾工具 */
+.book-chapter-tool {
+    display: block;
+    height: 78px;
+    width: 100%;
+    margin-top: 24px;
+}
+
+/* 调试好样式后和安卓同步,交给后台随小文章 css 下发,并把下面的样式从replace.css 删除 */
+
+/* 安卓的re_bookItem是通过原生view留出上下空间的,但是iOS是通过css来控制 */
+.re_bookItem{
+    display: block;
+    margin: 18px 0 18px 0;
+}
+
+p {
+    text-align:justify;
+}
+
+img[data-image-size="large"] {
+    width: 100%;
+}
+
+/* 文集公众号文章不支持控件的样式 */
+.unsupported_iframe {
+    border-radius: 4px;
+    border: 1px solid #ffcdc0;
+    background: #fee;
+    padding: 12px 0px;
+    color: #ff8d8d;
+    text-align: center;
+    font-size: 14px;
+}
+
+/* 私有垂直居中类 */
+.wr-vertical-center {
+    wr-vertical-center-style: 1 !important;
+}
diff --git a/Sources/RDReaderView/EPUBTextRendering/RDEPUBTextBookBuilder.swift b/Sources/RDReaderView/EPUBTextRendering/RDEPUBTextBookBuilder.swift
index 08b4513..117ce95 100644
--- a/Sources/RDReaderView/EPUBTextRendering/RDEPUBTextBookBuilder.swift
+++ b/Sources/RDReaderView/EPUBTextRendering/RDEPUBTextBookBuilder.swift
@@ -177,6 +177,7 @@ public struct RDEPUBTextBook {
 public final class RDEPUBTextBookBuilder {
     private let renderer: RDEPUBTextRenderer
     private let cache: RDEPUBTextBookCache?
+    private let layoutConfig: RDEPUBTextLayoutConfig
     private let sampler: RDEPUBTextPerformanceSampler
 
     /// 最后一次构建的资源引用诊断(样式表、图片等)
@@ -188,9 +189,14 @@ public final class RDEPUBTextBookBuilder {
     /// 最后一次构建的缓存命中/未命中统计
     public private(set) var lastBuildCacheStats: (hits: Int, misses: Int) = (0, 0)
 
-    public init(renderer: RDEPUBTextRenderer, cache: RDEPUBTextBookCache? = nil) {
+    public init(
+        renderer: RDEPUBTextRenderer,
+        cache: RDEPUBTextBookCache? = nil,
+        layoutConfig: RDEPUBTextLayoutConfig = .default
+    ) {
         self.renderer = renderer
         self.cache = cache
+        self.layoutConfig = layoutConfig
         self.sampler = RDEPUBTextPerformanceSampler()
     }
 
@@ -268,7 +274,8 @@ public final class RDEPUBTextBookBuilder {
                 rawHTML: rawHTML,
                 baseURL: parser.fileURL(forRelativePath: item.href)?.deletingLastPathComponent(),
                 style: style,
-                resourceResolver: publication.resourceResolver
+                resourceResolver: publication.resourceResolver,
+                contentLanguageCode: publication.metadata.language
             )
 
             // 渲染 HTML → NSAttributedString
@@ -339,7 +346,7 @@ public final class RDEPUBTextBookBuilder {
             } else {
                 // 缓存未命中:调用 CoreText 分页引擎
                 layoutFrames = content.length > 0
-                    ? content.rd_paginatedFrames(size: pageSize, fragmentOffsets: rendered.fragmentOffsets)
+                    ? content.rd_paginatedFrames(size: pageSize, fragmentOffsets: rendered.fragmentOffsets, config: layoutConfig)
                     : []
                 isCacheHit = false
             }
@@ -711,7 +718,8 @@ public final class RDEPUBTextBookBuilder {
             fontSize: style.font.pointSize,
             lineHeightMultiple: style.lineSpacing,
             contentInsets: .zero,
-            pageSize: pageSize
+            pageSize: pageSize,
+            layoutConfigSignature: layoutConfig.cacheSignature
         )
     }
 }
diff --git a/Sources/RDReaderView/EPUBTextRendering/RDEPUBTextBookCache.swift b/Sources/RDReaderView/EPUBTextRendering/RDEPUBTextBookCache.swift
index 6d7b511..2d57b6c 100644
--- a/Sources/RDReaderView/EPUBTextRendering/RDEPUBTextBookCache.swift
+++ b/Sources/RDReaderView/EPUBTextRendering/RDEPUBTextBookCache.swift
@@ -152,9 +152,10 @@ public final class RDEPUBTextBookCache {
         fontSize: CGFloat,
         lineHeightMultiple: CGFloat,
         contentInsets: UIEdgeInsets,
-        pageSize: CGSize
+        pageSize: CGSize,
+        layoutConfigSignature: String = RDEPUBTextLayoutConfig.default.cacheSignature
     ) -> String {
-        let raw = "\(bookID)_\(fontSize)_\(lineHeightMultiple)_\(contentInsets.top)_\(contentInsets.left)_\(contentInsets.bottom)_\(contentInsets.right)_\(pageSize.width)_\(pageSize.height)_v\(schemaVersion)"
+        let raw = "\(bookID)_\(fontSize)_\(lineHeightMultiple)_\(contentInsets.top)_\(contentInsets.left)_\(contentInsets.bottom)_\(contentInsets.right)_\(pageSize.width)_\(pageSize.height)_\(layoutConfigSignature)_v\(schemaVersion)"
         let digest = SHA256.hash(data: Data(raw.utf8))
         let hex = digest.map { String(format: "%02x", $0) }.joined()
         return hex + ".cache"
diff --git a/Sources/RDReaderView/EPUBTextRendering/RDEPUBTextLayouter.swift b/Sources/RDReaderView/EPUBTextRendering/RDEPUBTextLayouter.swift
index 61c7986..dfaaf41 100644
--- a/Sources/RDReaderView/EPUBTextRendering/RDEPUBTextLayouter.swift
+++ b/Sources/RDReaderView/EPUBTextRendering/RDEPUBTextLayouter.swift
@@ -27,6 +27,8 @@ struct RDEPUBTextLayouter {
     private let framesetter: CTFramesetter
     /// 页面矩形路径(用于 CTFrame 排版)
     private let path: CGPath
+    /// DTCoreText 路径可直接消费的单矩形布局区域
+    private let dtLayoutRect: CGRect
     /// 布局配置(avoidPageBreakInside、孤行控制等)
     private let config: RDEPUBTextLayoutConfig
 
@@ -35,7 +37,8 @@ struct RDEPUBTextLayouter {
         self.pageSize = pageSize
         self.config = config
         self.framesetter = CTFramesetterCreateWithAttributedString(attributedString)
-        self.path = CGPath(rect: CGRect(origin: .zero, size: pageSize), transform: nil)
+        self.dtLayoutRect = config.contentRect(fallback: pageSize)
+        self.path = Self.makeLayoutPath(pageSize: pageSize, config: config)
     }
 
     /// 执行分页,返回布局帧列表(每帧对应一页)。
@@ -119,6 +122,10 @@ struct RDEPUBTextLayouter {
 #if canImport(DTCoreText)
     /// 使用 DTCoreTextLayouter 进行分页,提供更精确的行级语义处理。
     private func layoutFramesUsingDTCoreText(fragmentOffsets: [String: Int]) -> [RDEPUBTextLayoutFrame] {
+        guard config.numberOfColumns == 1 else {
+            return layoutFramesUsingCoreText(fragmentOffsets: fragmentOffsets)
+        }
+
         guard let layouter = DTCoreTextLayouter(attributedString: attributedString) else {
             return layoutFramesUsingCoreText(fragmentOffsets: fragmentOffsets)
         }
@@ -127,7 +134,7 @@ struct RDEPUBTextLayouter {
 
         var frames: [RDEPUBTextLayoutFrame] = []
         var location = 0
-        let pageRect = CGRect(origin: .zero, size: pageSize)
+        let pageRect = dtLayoutRect
 
         while location < attributedString.length {
             guard let layoutFrame = layouter.layoutFrame(with: pageRect, range: NSRange(location: location, length: 0)) else {
@@ -180,6 +187,19 @@ struct RDEPUBTextLayouter {
     }
 #endif
 
+    private static func makeLayoutPath(pageSize: CGSize, config: RDEPUBTextLayoutConfig) -> CGPath {
+        let columnRects = config.columnRects(fallback: pageSize)
+        guard columnRects.count > 1 else {
+            return CGPath(rect: columnRects.first ?? CGRect(origin: .zero, size: pageSize), transform: nil)
+        }
+
+        let path = CGMutablePath()
+        for rect in columnRects {
+            path.addRect(rect)
+        }
+        return path
+    }
+
     // MARK: - 语义边界调整
 
     /// 对 CoreText 提出的分页范围进行语义边界调整。
diff --git a/Sources/RDReaderView/EPUBTextRendering/RDEPUBTextRenderer.swift b/Sources/RDReaderView/EPUBTextRendering/RDEPUBTextRenderer.swift
index bcb8468..683cc0b 100644
--- a/Sources/RDReaderView/EPUBTextRendering/RDEPUBTextRenderer.swift
+++ b/Sources/RDReaderView/EPUBTextRendering/RDEPUBTextRenderer.swift
@@ -80,29 +80,101 @@ public struct RDEPUBTextRenderStyle {
 
 /// 分页引擎的布局控制参数。
 public struct RDEPUBTextLayoutConfig: Equatable {
+    /// 页面帧宽度;传 0 时回退为分页入口传入的 pageSize.width
+    public var frameWidth: CGFloat
+    /// 页面帧高度;传 0 时回退为分页入口传入的 pageSize.height
+    public var frameHeight: CGFloat
+    /// 页面内容内边距,对标 WXRead 的 WRCoreTextLayoutConfig.edgeInsets
+    public var edgeInsets: UIEdgeInsets
+    /// 栏数,对标 WXRead 的 numberOfColumns
+    public var numberOfColumns: Int
+    /// 栏间距,对标 WXRead 的 columnGap
+    public var columnGap: CGFloat
     /// 是否避免孤行(段落最后一行单独在下一页顶部)
     public var avoidOrphans: Bool
     /// 是否避免寡行(段落第一行单独在上一页底部)
     public var avoidWidows: Bool
     /// 是否启用 avoidPageBreakInside 保护(对标 WXRead 的行级回退扫描)
     public var avoidPageBreakInsideEnabled: Bool
+    /// 是否启用连字符断字,对标 WXRead 的 hyphenation
+    public var hyphenation: Bool
     /// 图片最大高度占页面高度的比例
     public var imageMaxHeightRatio: CGFloat
 
     public init(
+        frameWidth: CGFloat = 0,
+        frameHeight: CGFloat = 0,
+        edgeInsets: UIEdgeInsets = .zero,
+        numberOfColumns: Int = 1,
+        columnGap: CGFloat = 20,
         avoidOrphans: Bool = true,
         avoidWidows: Bool = true,
         avoidPageBreakInsideEnabled: Bool = true,
+        hyphenation: Bool = true,
         imageMaxHeightRatio: CGFloat = 0.85
     ) {
+        self.frameWidth = frameWidth
+        self.frameHeight = frameHeight
+        self.edgeInsets = edgeInsets
+        self.numberOfColumns = max(1, numberOfColumns)
+        self.columnGap = max(0, columnGap)
         self.avoidOrphans = avoidOrphans
         self.avoidWidows = avoidWidows
         self.avoidPageBreakInsideEnabled = avoidPageBreakInsideEnabled
+        self.hyphenation = hyphenation
         self.imageMaxHeightRatio = imageMaxHeightRatio
     }
 
     /// 默认配置
     public static let `default` = RDEPUBTextLayoutConfig()
+
+    /// 结合调用方 pageSize 解析后的实际页面尺寸。
+    public func resolvedFrameSize(fallback pageSize: CGSize) -> CGSize {
+        CGSize(
+            width: max(frameWidth > 0 ? frameWidth : pageSize.width, 1),
+            height: max(frameHeight > 0 ? frameHeight : pageSize.height, 1)
+        )
+    }
+
+    /// 实际内容区域;对标 WXRead 的 frame + edgeInsets 组合。
+    public func contentRect(fallback pageSize: CGSize) -> CGRect {
+        let size = resolvedFrameSize(fallback: pageSize)
+        return CGRect(origin: .zero, size: size).inset(by: edgeInsets)
+    }
+
+    /// 多栏布局时的列矩形数组。
+    public func columnRects(fallback pageSize: CGSize) -> [CGRect] {
+        let rect = contentRect(fallback: pageSize)
+        let columns = max(1, numberOfColumns)
+        guard columns > 1 else { return [rect] }
+
+        let totalGap = CGFloat(columns - 1) * columnGap
+        let columnWidth = max((rect.width - totalGap) / CGFloat(columns), 1)
+
+        return (0.. RDEPUBTextChapterRenderRequest {
         let normalizedHTML = injectPaginationSemanticMarkers(into: normalizeHTML(rawHTML))
         let stylesheetHrefReplacements = inlineLinkedStyleSheets(
@@ -204,7 +205,9 @@ enum RDEPUBTextRendererSupport {
         )
         let layers = makeStyleSheetLayers(
             style: style,
-            epubCSS: stylesheetHrefReplacements.inlinedCSS
+            epubCSS: stylesheetHrefReplacements.inlinedCSS,
+            contentLanguageCode: contentLanguageCode,
+            sourceHTML: rawHTML
         )
         let htmlWithBase = injectBaseHref(into: stylesheetHrefReplacements.html, baseURL: baseURL)
         let htmlWithDefaultLayers = injectStyleTag(
@@ -293,11 +296,17 @@ enum RDEPUBTextRendererSupport {
 
     private static func makeStyleSheetLayers(
         style: RDEPUBTextRenderStyle,
-        epubCSS: String
+        epubCSS: String,
+        contentLanguageCode: String?,
+        sourceHTML: String
     ) -> [RDEPUBTextStyleSheetLayer] {
+        let useLatinReplace = prefersLatinLanguageCSS(
+            languageCode: contentLanguageCode,
+            sourceHTML: sourceHTML
+        )
         var layers: [RDEPUBTextStyleSheetLayer] = [
             .init(kind: .default, css: defaultCSS()),
-            .init(kind: .replace, css: replaceCSS())
+            .init(kind: .replace, css: replaceCSS(useLatinVariant: useLatinReplace))
         ]
         if isDarkTheme(style: style) {
             layers.append(.init(kind: .dark, css: darkCSS(style: style)))
@@ -310,65 +319,12 @@ enum RDEPUBTextRendererSupport {
     }
 
     private static func defaultCSS() -> String {
-        """
-        html, body {
-          margin: 0;
-          padding: 0;
-          background: transparent;
-        }
-        body {
-          word-break: break-word;
-          overflow-wrap: break-word;
-          -webkit-text-size-adjust: 100%;
-        }
-        p, div, li, blockquote {
-          margin-top: 0;
-          margin-bottom: 0.75em;
-        }
-        """
+        RDEPUBAssetRepository.string(for: .wxReadDefaultCSS)
     }
 
-    private static func replaceCSS() -> String {
-        """
-        img, svg, video, canvas {
-          max-width: 100%;
-          height: auto;
-        }
-        .frontCover,
-        .bodyPic,
-        .qrbodyPic,
-        figure {
-          text-align: center;
-          text-indent: 0;
-        }
-        .frontCover img,
-        .rd-front-cover-image,
-        .bodyPic img,
-        .qrbodyPic img,
-        figure img {
-          display: block;
-          margin-left: auto;
-          margin-right: auto;
-        }
-        .qqreader-footnote,
-        .s-pic,
-        .h-pic,
-        .g-pic {
-          display: inline;
-          vertical-align: middle;
-        }
-        h1, h2, h3, h4, h5, h6 {
-          page-break-after: avoid;
-          break-after: avoid;
-        }
-        pre, code {
-          white-space: pre-wrap;
-          word-break: break-word;
-        }
-        table {
-          max-width: 100%;
-        }
-        """
+    private static func replaceCSS(useLatinVariant: Bool) -> String {
+        let asset: RDEPUBAsset = useLatinVariant ? .wxReadLatinReplaceCSS : .wxReadReplaceCSS
+        return RDEPUBAssetRepository.string(for: asset)
     }
 
     private static func normalizeAttachmentHTMLMarkers(in html: String) -> String {
@@ -517,7 +473,7 @@ enum RDEPUBTextRendererSupport {
     private static func darkCSS(style: RDEPUBTextRenderStyle) -> String {
         let background = style.backgroundColor?.ss_cssString ?? "rgba(0, 0, 0, 1.000)"
         let text = style.textColor?.ss_cssString ?? "rgba(255, 255, 255, 1.000)"
-        return """
+        return RDEPUBAssetRepository.string(for: .wxReadDarkCSS) + "\n\n" + """
         html, body {
           background: \(background) !important;
           color: \(text) !important;
@@ -556,6 +512,118 @@ enum RDEPUBTextRendererSupport {
         return luminance < 0.5
     }
 
+    private static func prefersLatinLanguageCSS(
+        languageCode: String?,
+        sourceHTML: String
+    ) -> Bool {
+        let candidateCodes = inferredLanguageCodes(
+            explicitLanguageCode: languageCode,
+            sourceHTML: sourceHTML
+        )
+
+        if candidateCodes.contains(where: isExplicitLatinLanguageCode) {
+            return true
+        }
+        if candidateCodes.contains(where: isExplicitCJKLanguageCode) {
+            return false
+        }
+
+        let textSample = plainTextSample(from: sourceHTML)
+        guard !textSample.isEmpty else { return false }
+
+        var alphabeticCount = 0
+        var latinCount = 0
+        for scalar in textSample.unicodeScalars {
+            guard CharacterSet.letters.contains(scalar) else { continue }
+            alphabeticCount += 1
+            if isLatinScalar(scalar) {
+                latinCount += 1
+            }
+        }
+
+        guard alphabeticCount >= 80 else { return false }
+        return (Double(latinCount) / Double(alphabeticCount)) >= 0.6
+    }
+
+    private static func inferredLanguageCodes(
+        explicitLanguageCode: String?,
+        sourceHTML: String
+    ) -> [String] {
+        var codes: [String] = []
+        if let explicitLanguageCode {
+            let normalized = explicitLanguageCode.trimmingCharacters(in: .whitespacesAndNewlines).lowercased()
+            if !normalized.isEmpty {
+                codes.append(normalized)
+            }
+        }
+
+        if let regex = try? NSRegularExpression(
+            pattern: #"\b(?:xml:lang|lang)\s*=\s*["']([^"']+)["']"#,
+            options: [.caseInsensitive]
+        ) {
+            let nsHTML = sourceHTML as NSString
+            let range = NSRange(location: 0, length: min(nsHTML.length, 8_000))
+            for match in regex.matches(in: sourceHTML, options: [], range: range) {
+                guard match.numberOfRanges > 1 else { continue }
+                let code = nsHTML.substring(with: match.range(at: 1))
+                    .trimmingCharacters(in: .whitespacesAndNewlines)
+                    .lowercased()
+                if !code.isEmpty {
+                    codes.append(code)
+                }
+            }
+        }
+
+        return Array(NSOrderedSet(array: codes)) as? [String] ?? codes
+    }
+
+    private static func isExplicitLatinLanguageCode(_ code: String) -> Bool {
+        let normalized = code.lowercased()
+        if normalized.contains("latn") {
+            return true
+        }
+
+        let prefix = normalized.split(separator: "-").first.map(String.init) ?? normalized
+        let latinPrefixes: Set = [
+            "en", "fr", "de", "es", "it", "pt", "nl", "sv", "da", "no", "fi",
+            "is", "ga", "cy", "pl", "cs", "sk", "sl", "hr", "hu", "ro", "tr",
+            "vi", "id", "ms", "tl", "sw", "af", "sq", "et", "lv", "lt"
+        ]
+        return latinPrefixes.contains(prefix)
+    }
+
+    private static func isExplicitCJKLanguageCode(_ code: String) -> Bool {
+        let prefix = code.lowercased().split(separator: "-").first.map(String.init) ?? code.lowercased()
+        return ["zh", "ja", "ko"].contains(prefix)
+    }
+
+    private static func plainTextSample(from html: String) -> String {
+        let maxLength = min(html.count, 20_000)
+        let sample = String(html.prefix(maxLength))
+        let withoutTags = sample.replacingOccurrences(
+            of: #"<[^>]+>"#,
+            with: " ",
+            options: .regularExpression
+        )
+        return withoutTags.replacingOccurrences(
+            of: #"&[A-Za-z0-9#]+;"#,
+            with: " ",
+            options: .regularExpression
+        )
+    }
+
+    private static func isLatinScalar(_ scalar: UnicodeScalar) -> Bool {
+        switch scalar.value {
+        case 0x0041...0x007A,
+             0x00C0...0x00FF,
+             0x0100...0x024F,
+             0x1E00...0x1EFF:
+            return true
+        default:
+            return false
+        }
+    }
+
     private static func injectBaseHref(into html: String, baseURL: URL?) -> String {
         guard let baseURL else {
             return html
diff --git a/Sources/RDReaderView/EPUBTextRendering/RDPlainTextBookBuilder.swift b/Sources/RDReaderView/EPUBTextRendering/RDPlainTextBookBuilder.swift
index ca776c0..49ac3ba 100644
--- a/Sources/RDReaderView/EPUBTextRendering/RDPlainTextBookBuilder.swift
+++ b/Sources/RDReaderView/EPUBTextRendering/RDPlainTextBookBuilder.swift
@@ -13,9 +13,14 @@ import UIKit
 /// 5. CoreText 分页 → RDEPUBTextBook
 public final class RDPlainTextBookBuilder {
     private let renderer: RDEPUBTextRenderer
+    private let layoutConfig: RDEPUBTextLayoutConfig
 
-    public init(renderer: RDEPUBTextRenderer = RDEPUBDTCoreTextRenderer()) {
+    public init(
+        renderer: RDEPUBTextRenderer = RDEPUBDTCoreTextRenderer(),
+        layoutConfig: RDEPUBTextLayoutConfig = .default
+    ) {
         self.renderer = renderer
+        self.layoutConfig = layoutConfig
     }
 
     /// 从纯文本文件构建分页书籍。
@@ -41,7 +46,7 @@ public final class RDPlainTextBookBuilder {
             let rendered = try renderer.renderChapter(html: html, baseURL: nil, style: style)
 
             let content = NSMutableAttributedString(attributedString: rendered.attributedString)
-            let layoutFrames = content.length > 0 ? content.rd_paginatedFrames(size: pageSize) : []
+            let layoutFrames = content.length > 0 ? content.rd_paginatedFrames(size: pageSize, config: layoutConfig) : []
             let effectiveFrames = layoutFrames.isEmpty && content.length > 0
                 ? [
                     RDEPUBTextLayoutFrame(
diff --git a/Sources/RDReaderView/EPUBUI/RDEPUBReaderController.swift b/Sources/RDReaderView/EPUBUI/RDEPUBReaderController.swift
index b95a123..9d52d81 100644
--- a/Sources/RDReaderView/EPUBUI/RDEPUBReaderController.swift
+++ b/Sources/RDReaderView/EPUBUI/RDEPUBReaderController.swift
@@ -679,8 +679,9 @@ public final class RDEPUBReaderController: UIViewController {
 
         if publication.readingProfile == .textReflowable {
             let renderer = resolvedTextRenderer()
-            let builder = RDEPUBTextBookBuilder(renderer: renderer, cache: textBookCache)
             let pageSize = currentTextPageSize()
+            let layoutConfig = currentTextLayoutConfig(pageSize: pageSize)
+            let builder = RDEPUBTextBookBuilder(renderer: renderer, cache: textBookCache, layoutConfig: layoutConfig)
             let renderStyle = currentTextRenderStyle()
 
             DispatchQueue.global(qos: .userInitiated).async { [weak self] in
@@ -913,7 +914,7 @@ public final class RDEPUBReaderController: UIViewController {
         let restoreLocation = currentVisibleLocation() ?? persistenceLocation()
         let pageSize = currentTextPageSize()
         let style = currentTextRenderStyle()
-        let builder = RDPlainTextBookBuilder()
+        let builder = RDPlainTextBookBuilder(layoutConfig: currentTextLayoutConfig(pageSize: pageSize))
         if let newBook = try? builder.build(textFileURL: textFileURL, pageSize: pageSize, style: style) {
             applyTextBook(newBook, restoreLocation: restoreLocation)
         }
@@ -1231,6 +1232,26 @@ public final class RDEPUBReaderController: UIViewController {
         )
     }
 
+    private func currentTextLayoutConfig(pageSize: CGSize) -> RDEPUBTextLayoutConfig {
+        let viewportSize = currentLayoutContext().viewportSize
+        let derivedFrameSize = CGSize(
+            width: max(viewportSize.width, pageSize.width),
+            height: max(viewportSize.height, pageSize.height)
+        )
+        return RDEPUBTextLayoutConfig(
+            frameWidth: derivedFrameSize.width,
+            frameHeight: derivedFrameSize.height,
+            edgeInsets: .zero,
+            numberOfColumns: 1,
+            columnGap: 20,
+            avoidOrphans: true,
+            avoidWidows: true,
+            avoidPageBreakInsideEnabled: true,
+            hyphenation: true,
+            imageMaxHeightRatio: 0.85
+        )
+    }
+
     private func resolvedTextRenderer() -> RDEPUBTextRenderer {
         RDEPUBDTCoreTextRenderer()
     }
diff --git a/Sources/RDReaderView/EPUBUI/RDEPUBTextContentView.swift b/Sources/RDReaderView/EPUBUI/RDEPUBTextContentView.swift
index 896d35f..efd6f88 100644
--- a/Sources/RDReaderView/EPUBUI/RDEPUBTextContentView.swift
+++ b/Sources/RDReaderView/EPUBUI/RDEPUBTextContentView.swift
@@ -445,12 +445,12 @@ final class RDEPUBTextContentView: UIView {
             case .highlight:
                 content.addAttribute(
                     .backgroundColor,
-                    value: UIColor(hexString: highlight.color, alpha: 0.45) ?? UIColor(red: 248 / 255, green: 225 / 255, blue: 108 / 255, alpha: 0.45),
+                    value: UIColor(rdHexString: highlight.color, alpha: 0.45) ?? UIColor(red: 248 / 255, green: 225 / 255, blue: 108 / 255, alpha: 0.45),
                     range: relativeRange
                 )
             case .underline:
                 content.addAttribute(.underlineStyle, value: NSUnderlineStyle.single.rawValue, range: relativeRange)
-                if let color = UIColor(hexString: highlight.color, alpha: 1) {
+                if let color = UIColor(rdHexString: highlight.color, alpha: 1) {
                     content.addAttribute(.underlineColor, value: color, range: relativeRange)
                 }
             }
@@ -545,7 +545,7 @@ final class RDEPUBTextContentView: UIView {
             let rects = interactionController.selectionRects(for: absoluteRange)
             guard !rects.isEmpty else { continue }
 
-            let color = UIColor(hexString: highlight.color, alpha: 0.45)
+            let color = UIColor(rdHexString: highlight.color, alpha: 0.45)
                 ?? UIColor(red: 248 / 255, green: 225 / 255, blue: 108 / 255, alpha: 0.45)
             let decoration = RDEPUBTextOverlayDecoration(
                 kind: highlight.style == .underline ? .underline : .highlight,
@@ -712,17 +712,3 @@ extension RDEPUBTextContentView: UITextViewDelegate {
         delegate?.textContentView(self, didChangeSelection: selection)
     }
 }
-
-private extension UIColor {
-    convenience init?(hexString: String, alpha: CGFloat) {
-        var value = hexString.trimmingCharacters(in: .whitespacesAndNewlines)
-        value = value.replacingOccurrences(of: "#", with: "")
-        guard value.count == 6, let hex = Int(value, radix: 16) else { return nil }
-        self.init(
-            red: CGFloat((hex >> 16) & 0xFF) / 255,
-            green: CGFloat((hex >> 8) & 0xFF) / 255,
-            blue: CGFloat(hex & 0xFF) / 255,
-            alpha: alpha
-        )
-    }
-}
diff --git a/Sources/RDReaderView/EPUBUI/RDEPUBWebContentView.swift b/Sources/RDReaderView/EPUBUI/RDEPUBWebContentView.swift
index c1744f7..6d626df 100644
--- a/Sources/RDReaderView/EPUBUI/RDEPUBWebContentView.swift
+++ b/Sources/RDReaderView/EPUBUI/RDEPUBWebContentView.swift
@@ -28,6 +28,7 @@ final class RDEPUBWebContentView: UIView {
     weak var delegate: RDEPUBWebContentViewDelegate?
 
     private let epubWebView = RDEPUBWebView()
+    private let decorationOverlayView = RDEPUBWebDecorationOverlayView()
     private let pageNumberLabel: UILabel = {
         let label = UILabel()
         label.font = UIFont.systemFont(ofSize: 13)
@@ -40,8 +41,12 @@ final class RDEPUBWebContentView: UIView {
         layer.masksToBounds = true
 
         addSubview(epubWebView)
+        addSubview(decorationOverlayView)
         addSubview(pageNumberLabel)
         epubWebView.delegate = self
+        epubWebView.onDecorationsResolved = { [weak self] decorations in
+            self?.decorationOverlayView.applyDecorations(decorations)
+        }
     }
 
     required init?(coder: NSCoder) {
@@ -51,6 +56,7 @@ final class RDEPUBWebContentView: UIView {
     override func layoutSubviews() {
         super.layoutSubviews()
         epubWebView.frame = bounds
+        decorationOverlayView.frame = bounds
 
         let labelSize = pageNumberLabel.sizeThatFits(CGSize(width: bounds.width, height: 20))
         pageNumberLabel.frame = CGRect(
@@ -71,13 +77,18 @@ final class RDEPUBWebContentView: UIView {
         backgroundColor = theme.contentBackgroundColor
         pageNumberLabel.textColor = theme.contentTextColor
         pageNumberLabel.text = "\(pageNumber) / \(totalPages)"
+        decorationOverlayView.applyDecorations([])
         epubWebView.load(publication: publication, request: request)
         setNeedsLayout()
     }
 
     func releaseResources() {
+        decorationOverlayView.applyDecorations([])
         epubWebView.reset()
         epubWebView.delegate = self
+        epubWebView.onDecorationsResolved = { [weak self] decorations in
+            self?.decorationOverlayView.applyDecorations(decorations)
+        }
     }
 }
 
@@ -105,6 +116,5 @@ extension RDEPUBWebContentView: RDEPUBWebViewDelegate {
     func epubWebView(_ webView: RDEPUBWebView, didLogJavaScriptError message: String) {
         delegate?.epubWebContentView(self, didLogJavaScriptError: message)
     }
-
     func epubWebViewDidFinishRendering(_ webView: RDEPUBWebView) {}
 }
diff --git a/Sources/RDReaderView/EPUBUI/RDEPUBWebDecorationOverlayView.swift b/Sources/RDReaderView/EPUBUI/RDEPUBWebDecorationOverlayView.swift
new file mode 100644
index 0000000..0e69417
--- /dev/null
+++ b/Sources/RDReaderView/EPUBUI/RDEPUBWebDecorationOverlayView.swift
@@ -0,0 +1,50 @@
+import UIKit
+
+/// WebView 路径的原生装饰覆盖层。
+/// 对标 WXRead 的页面级装饰绘制思路:JS 只负责提供 rect,实际视觉绘制由原生 CGContext 完成。
+final class RDEPUBWebDecorationOverlayView: UIView {
+    private var decorations: [RDEPUBTextOverlayDecoration] = []
+    private let verticalAdjustment: CGFloat = -1
+
+    override init(frame: CGRect) {
+        super.init(frame: frame)
+        backgroundColor = .clear
+        isOpaque = false
+        isUserInteractionEnabled = false
+    }
+
+    required init?(coder: NSCoder) {
+        fatalError("init(coder:) has not been implemented")
+    }
+
+    func applyDecorations(_ decorations: [RDEPUBTextOverlayDecoration]) {
+        self.decorations = decorations.filter { !$0.rects.isEmpty }
+        setNeedsDisplay()
+    }
+
+    override func draw(_ rect: CGRect) {
+        guard let context = UIGraphicsGetCurrentContext() else { return }
+
+        for decoration in decorations {
+            switch decoration.kind {
+            case .underline:
+                context.setStrokeColor(decoration.color.cgColor)
+                context.setLineWidth(2)
+                for underlineRect in decoration.rects {
+                    let y = underlineRect.maxY - 1
+                    context.move(to: CGPoint(x: underlineRect.minX, y: y))
+                    context.addLine(to: CGPoint(x: underlineRect.maxX, y: y))
+                    context.strokePath()
+                }
+            default:
+                context.setFillColor(decoration.color.cgColor)
+                for selectionRect in decoration.rects {
+                    let adjustedRect = selectionRect.offsetBy(dx: 0, dy: verticalAdjustment)
+                    let path = UIBezierPath(roundedRect: adjustedRect.insetBy(dx: -1, dy: -1), cornerRadius: 4)
+                    context.addPath(path.cgPath)
+                    context.fillPath()
+                }
+            }
+        }
+    }
+}
diff --git a/Sources/RDReaderView/EPUBUI/RDURLReaderController.swift b/Sources/RDReaderView/EPUBUI/RDURLReaderController.swift
index 1eebbea..a9cdac0 100644
--- a/Sources/RDReaderView/EPUBUI/RDURLReaderController.swift
+++ b/Sources/RDReaderView/EPUBUI/RDURLReaderController.swift
@@ -119,7 +119,20 @@ public final class RDURLReaderController: UIViewController {
             let bookTitle = bookURL.deletingPathExtension().lastPathComponent
             let pageSize = currentTextPageSize()
             let renderStyle = currentTextRenderStyle()
-            let builder = RDPlainTextBookBuilder()
+            let builder = RDPlainTextBookBuilder(
+                layoutConfig: RDEPUBTextLayoutConfig(
+                    frameWidth: pageSize.width,
+                    frameHeight: pageSize.height,
+                    edgeInsets: .zero,
+                    numberOfColumns: 1,
+                    columnGap: 20,
+                    avoidOrphans: true,
+                    avoidWidows: true,
+                    avoidPageBreakInsideEnabled: true,
+                    hyphenation: true,
+                    imageMaxHeightRatio: 0.85
+                )
+            )
             if let textBook = try? builder.build(textFileURL: bookURL, pageSize: pageSize, style: renderStyle) {
                 controller = RDEPUBReaderController(
                     textBook: textBook,
diff --git a/Sources/RDReaderView/EPUBUI/UIColor+RDEPUBHex.swift b/Sources/RDReaderView/EPUBUI/UIColor+RDEPUBHex.swift
new file mode 100644
index 0000000..81a1ffa
--- /dev/null
+++ b/Sources/RDReaderView/EPUBUI/UIColor+RDEPUBHex.swift
@@ -0,0 +1,15 @@
+import UIKit
+
+extension UIColor {
+    convenience init?(rdHexString: String, alpha: CGFloat) {
+        var value = rdHexString.trimmingCharacters(in: .whitespacesAndNewlines)
+        value = value.replacingOccurrences(of: "#", with: "")
+        guard value.count == 6, let hex = Int(value, radix: 16) else { return nil }
+        self.init(
+            red: CGFloat((hex >> 16) & 0xFF) / 255,
+            green: CGFloat((hex >> 8) & 0xFF) / 255,
+            blue: CGFloat(hex & 0xFF) / 255,
+            alpha: alpha
+        )
+    }
+}