- 实现EPUB阅读器搜索功能及选中注释功能 - 优化CFI模块,修复代码审查发现的11个问题 - 实现大书远距目录跳转与后台补全优化方案 - 优化设置面板与章节运行时联动 - 重构及大量改进优化
71 lines
1.8 KiB
Swift
71 lines
1.8 KiB
Swift
|
|
import Foundation
|
|
|
|
public final class RDEPUBPublication {
|
|
|
|
public let parser: RDEPUBParser
|
|
|
|
public let resourceResolver: RDEPUBResourceResolver
|
|
|
|
public init(parser: RDEPUBParser) {
|
|
self.parser = parser
|
|
self.resourceResolver = RDEPUBResourceResolver(parser: parser)
|
|
}
|
|
|
|
public var metadata: RDEPUBMetadata {
|
|
parser.metadata
|
|
}
|
|
|
|
public var manifest: [String: RDEPUBManifestItem] {
|
|
parser.manifest
|
|
}
|
|
|
|
public var spine: [RDEPUBSpineItem] {
|
|
parser.spine
|
|
}
|
|
|
|
public var tableOfContents: [EPUBTableOfContentsItem] {
|
|
parser.tableOfContents
|
|
}
|
|
|
|
public var layout: RDEPUBLayout {
|
|
metadata.layout
|
|
}
|
|
|
|
public var readingProfile: RDEPUBReadingProfile {
|
|
parser.readingProfile()
|
|
}
|
|
|
|
public var readingProgression: RDEPUBReadingProgression {
|
|
metadata.readingProgression
|
|
}
|
|
|
|
public var bookIdentifier: String? {
|
|
metadata.identifier
|
|
}
|
|
|
|
public func fixedLayoutSpreadEnabled(for preferences: RDEPUBPreferences, viewportSize: CGSize) -> Bool {
|
|
guard layout == .fixed else {
|
|
return false
|
|
}
|
|
guard metadata.spread?.lowercased() != "none" else {
|
|
return false
|
|
}
|
|
|
|
switch preferences.fixedLayoutSpreadMode {
|
|
case .never:
|
|
return false
|
|
case .always:
|
|
return spine.count > 1
|
|
case .automatic:
|
|
return viewportSize.width > viewportSize.height
|
|
}
|
|
}
|
|
|
|
public func makeFixedSpreads(preferences: RDEPUBPreferences, viewportSize: CGSize) -> [EPUBFixedSpread] {
|
|
EPUBFixedSpread.makeSpreads(
|
|
spine: spine,
|
|
spreadEnabled: fixedLayoutSpreadEnabled(for: preferences, viewportSize: viewportSize)
|
|
)
|
|
}
|
|
} |