源码注释: - 为 ~60 个 Swift 文件补充缺失的 doc comment(file header、类型、属性、方法) - 修正 4 处错误注释:翻页模式数量、搜索行为描述、手势识别器描述、悬空文档块 文档维护: - 删除重复文档:WXRead/读书EPUB阅读器实现架构.md(与微信读书版完全一致) - 合并重叠文档:阅读器规划.md → 阅读器功能开发计划.md(单一真值) - 修正过时内容:所有文档中"四种翻页模式"→"三种",移除 horizontalCoverScroll - 更新架构图:补齐 EPUBUI/ReaderController、Paging/、Typesetter/ 等子目录 - 更新 index.md 索引:新增开发计划和架构对比文档引用
88 lines
3.8 KiB
Swift
88 lines
3.8 KiB
Swift
// RDEPUBReaderDependencies.swift
|
||
// EPUB 阅读器依赖注入配置,定义显示环境协议与核心组件工厂
|
||
|
||
import UIKit
|
||
|
||
/// 阅读器显示环境协议,抽象屏幕亮度和视口尺寸以支持测试和多平台适配
|
||
public protocol RDEPUBReaderDisplayEnvironment: AnyObject {
|
||
/// 当前屏幕亮度,取值范围 0.0 ~ 1.0
|
||
var currentBrightness: CGFloat { get set }
|
||
/// 后备视口尺寸,用于无法获取实际视图尺寸时的布局计算
|
||
var fallbackViewportSize: CGSize { get }
|
||
}
|
||
|
||
/// 基于 UIScreen 的默认显示环境实现,直接读写系统屏幕亮度
|
||
public final class RDEPUBUIScreenEnvironment: RDEPUBReaderDisplayEnvironment {
|
||
public init() {}
|
||
|
||
public var currentBrightness: CGFloat {
|
||
get { CGFloat(UIScreen.main.brightness) }
|
||
set { UIScreen.main.brightness = newValue }
|
||
}
|
||
|
||
public var fallbackViewportSize: CGSize {
|
||
UIScreen.main.bounds.size
|
||
}
|
||
}
|
||
|
||
/// EPUB 阅读器核心依赖容器,通过工厂闭包注入各组件以便替换和测试
|
||
public struct RDEPUBReaderDependencies {
|
||
/// 显示环境实例
|
||
public var environment: any RDEPUBReaderDisplayEnvironment
|
||
/// EPUB 解析器工厂
|
||
public var makeParser: () -> RDEPUBParser
|
||
/// 分页器工厂
|
||
public var makePaginator: () -> RDEPUBPaginator
|
||
/// 富文本书籍构建器工厂
|
||
public var makeTextBookBuilder: (RDEPUBTextRenderer, RDEPUBTextBookCache?, RDEPUBTextLayoutConfig) -> RDEPUBTextBookBuilder
|
||
/// 纯文本书籍构建器工厂
|
||
public var makePlainTextBookBuilder: (RDEPUBTextRenderer, RDEPUBTextLayoutConfig) -> RDPlainTextBookBuilder
|
||
/// 文本渲染器工厂
|
||
public var makeTextRenderer: (RDEPUBTextRenderingEngine) -> RDEPUBTextRenderer
|
||
|
||
/// 初始化依赖容器
|
||
/// - Parameters:
|
||
/// - environment: 显示环境实例
|
||
/// - makeParser: EPUB 解析器工厂闭包
|
||
/// - makePaginator: 分页器工厂闭包
|
||
/// - makeTextBookBuilder: 富文本书籍构建器工厂闭包
|
||
/// - makePlainTextBookBuilder: 纯文本书籍构建器工厂闭包
|
||
/// - makeTextRenderer: 文本渲染器工厂闭包
|
||
public init(
|
||
environment: any RDEPUBReaderDisplayEnvironment,
|
||
makeParser: @escaping () -> RDEPUBParser,
|
||
makePaginator: @escaping () -> RDEPUBPaginator,
|
||
makeTextBookBuilder: @escaping (RDEPUBTextRenderer, RDEPUBTextBookCache?, RDEPUBTextLayoutConfig) -> RDEPUBTextBookBuilder,
|
||
makePlainTextBookBuilder: @escaping (RDEPUBTextRenderer, RDEPUBTextLayoutConfig) -> RDPlainTextBookBuilder,
|
||
makeTextRenderer: @escaping (RDEPUBTextRenderingEngine) -> RDEPUBTextRenderer
|
||
) {
|
||
self.environment = environment
|
||
self.makeParser = makeParser
|
||
self.makePaginator = makePaginator
|
||
self.makeTextBookBuilder = makeTextBookBuilder
|
||
self.makePlainTextBookBuilder = makePlainTextBookBuilder
|
||
self.makeTextRenderer = makeTextRenderer
|
||
}
|
||
|
||
/// 默认生产环境依赖,使用系统屏幕环境和标准组件实现
|
||
public static var live: RDEPUBReaderDependencies {
|
||
RDEPUBReaderDependencies(
|
||
environment: RDEPUBUIScreenEnvironment(),
|
||
makeParser: { RDEPUBParser() },
|
||
makePaginator: { RDEPUBPaginator() },
|
||
makeTextBookBuilder: { renderer, cache, layoutConfig in
|
||
RDEPUBTextBookBuilder(renderer: renderer, cache: cache, layoutConfig: layoutConfig)
|
||
},
|
||
makePlainTextBookBuilder: { renderer, layoutConfig in
|
||
RDPlainTextBookBuilder(renderer: renderer, layoutConfig: layoutConfig)
|
||
},
|
||
makeTextRenderer: { engine in
|
||
switch engine {
|
||
case .dtCoreText:
|
||
return RDEPUBDTCoreTextRenderer()
|
||
}
|
||
}
|
||
)
|
||
}
|
||
}
|