- Rename source module from RDReaderView to RDEpubReaderView - Move all source files from Sources/RDReaderView/ to Sources/RDEpubReaderView/ - Update podspec: RDReaderView.podspec -> RDEpubReaderView.podspec - Update Podfile, demo project, and CocoaPods config for new pod name - Delete old RDReaderView pod support files from ReadViewDemo/Pods - Add new RDEpubReaderView pod support files - Update documentation (API ref, architecture, UML, conventions, etc.) - Add FixedLayoutRotationTests - Update .gitignore: exclude .DS_Store, manual unpack backups, _ssoft-output
98 lines
3.9 KiB
Swift
98 lines
3.9 KiB
Swift
|
||
import UIKit
|
||
|
||
public protocol RDEPUBReaderDisplayEnvironment: AnyObject {
|
||
|
||
var currentBrightness: CGFloat { get set }
|
||
|
||
var fallbackViewportSize: CGSize { get }
|
||
}
|
||
|
||
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
|
||
}
|
||
}
|
||
|
||
public struct RDEPUBReaderDependencies {
|
||
|
||
public var environment: any RDEPUBReaderDisplayEnvironment
|
||
|
||
public var makeParser: () -> RDEPUBParser
|
||
|
||
public var makePaginator: () -> RDEPUBPaginator
|
||
|
||
public var makeTextBookBuilder: (RDEPUBTextRenderer, RDEPUBTextBookCache?, RDEPUBTextLayoutConfig) -> RDEPUBTextBookBuilder
|
||
|
||
public var makePlainTextBookBuilder: (RDEPUBTextRenderer, RDEPUBTextLayoutConfig) -> RDEpubPlainTextBookBuilder
|
||
|
||
public var makeTextRenderer: (RDEPUBTextRenderingEngine) -> RDEPUBTextRenderer
|
||
|
||
/// 自定义顶部工具栏工厂;nil 时使用内置 `RDEPUBReaderTopToolView`
|
||
public var makeTopToolView: (() -> RDEPUBReaderTopToolViewProviding)?
|
||
|
||
/// 自定义底部工具栏工厂;nil 时使用内置 `RDEPUBReaderBottomToolView`
|
||
public var makeBottomToolView: (() -> RDEPUBReaderBottomToolViewProviding)?
|
||
|
||
public init(
|
||
environment: any RDEPUBReaderDisplayEnvironment,
|
||
makeParser: @escaping () -> RDEPUBParser,
|
||
makePaginator: @escaping () -> RDEPUBPaginator,
|
||
makeTextBookBuilder: @escaping (RDEPUBTextRenderer, RDEPUBTextBookCache?, RDEPUBTextLayoutConfig) -> RDEPUBTextBookBuilder,
|
||
makePlainTextBookBuilder: @escaping (RDEPUBTextRenderer, RDEPUBTextLayoutConfig) -> RDEpubPlainTextBookBuilder,
|
||
makeTextRenderer: @escaping (RDEPUBTextRenderingEngine) -> RDEPUBTextRenderer,
|
||
makeTopToolView: (() -> RDEPUBReaderTopToolViewProviding)? = nil,
|
||
makeBottomToolView: (() -> RDEPUBReaderBottomToolViewProviding)? = nil
|
||
) {
|
||
self.environment = environment
|
||
self.makeParser = makeParser
|
||
self.makePaginator = makePaginator
|
||
self.makeTextBookBuilder = makeTextBookBuilder
|
||
self.makePlainTextBookBuilder = makePlainTextBookBuilder
|
||
self.makeTextRenderer = makeTextRenderer
|
||
self.makeTopToolView = makeTopToolView
|
||
self.makeBottomToolView = makeBottomToolView
|
||
}
|
||
|
||
/// 构建带加密资源 provider 的默认依赖:
|
||
/// 宿主实现 `RDEPUBResourceDataProvider` 后经此注入,即可打开单文件加密的 EPUB。
|
||
/// - Parameter resourceDataProvider: 解密数据提供者;传 nil 等价于 `.live`
|
||
public static func live(resourceDataProvider: RDEPUBResourceDataProvider?) -> RDEPUBReaderDependencies {
|
||
var dependencies = RDEPUBReaderDependencies.live
|
||
guard let resourceDataProvider else { return dependencies }
|
||
dependencies.makeParser = {
|
||
let parser = RDEPUBParser()
|
||
parser.resourceDataProvider = resourceDataProvider
|
||
return parser
|
||
}
|
||
return dependencies
|
||
}
|
||
|
||
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
|
||
RDEpubPlainTextBookBuilder(renderer: renderer, layoutConfig: layoutConfig)
|
||
},
|
||
makeTextRenderer: { engine in
|
||
switch engine {
|
||
case .dtCoreText:
|
||
return RDEPUBDTCoreTextRenderer()
|
||
}
|
||
}
|
||
)
|
||
}
|
||
}
|