- 实现EPUB阅读器搜索功能及选中注释功能 - 优化CFI模块,修复代码审查发现的11个问题 - 实现大书远距目录跳转与后台补全优化方案 - 优化设置面板与章节运行时联动 - 重构及大量改进优化
42 lines
1.1 KiB
Swift
42 lines
1.1 KiB
Swift
import Foundation
|
|
|
|
struct RDEPUBChapterOffsetMap {
|
|
|
|
let fragmentOffsets: [String: Int]
|
|
|
|
let pageStartOffsets: [Int]
|
|
|
|
let pageEndOffsets: [Int]
|
|
|
|
let cfiMap: RDEPUBCFIMap?
|
|
|
|
let chapterText: String?
|
|
|
|
func chapterOffset(forFragmentID fragmentID: String) -> Int? {
|
|
return fragmentOffsets[fragmentID]
|
|
}
|
|
|
|
func chapterOffset(forCFI rawCFI: String?) -> Int? {
|
|
guard let cfi = RDEPUBCFICompatibility.parseLossy(rawCFI) else { return nil }
|
|
let resolved = RDEPUBCFIResolver.resolve(cfi)
|
|
let lastOffset = max((pageEndOffsets.max() ?? 0), 0)
|
|
return RDEPUBCFIRecoveryEngine.recover(
|
|
cfi: cfi,
|
|
cfiMap: cfiMap,
|
|
chapterText: chapterText,
|
|
fragmentOffsets: fragmentOffsets,
|
|
fallbackOffset: resolved.chapterOffset,
|
|
lastOffset: lastOffset
|
|
)?.chapterOffset
|
|
}
|
|
|
|
func pageIndex(forChapterOffset offset: Int) -> Int? {
|
|
for i in 0..<pageStartOffsets.count {
|
|
if offset >= pageStartOffsets[i] && offset <= pageEndOffsets[i] {
|
|
return i
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
}
|