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 c16837b..017734e 100644 Binary files a/ReadViewDemo/ReadViewDemo.xcworkspace/xcuserdata/shen.xcuserdatad/UserInterfaceState.xcuserstate and b/ReadViewDemo/ReadViewDemo.xcworkspace/xcuserdata/shen.xcuserdatad/UserInterfaceState.xcuserstate differ 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
+        )
+    }
+}