33 lines
1.2 KiB
Swift
33 lines
1.2 KiB
Swift
import Foundation
|
||
|
||
/// 章节级位置模型——单章内的精确定位
|
||
/// 取代旧版 RDEPUBLocation 的全局 progression 方式
|
||
public struct RDEPUBChapterLocation: Codable, Equatable {
|
||
/// 章节在 spine 中的索引
|
||
public var spineIndex: Int
|
||
/// 章内字符偏移(从章首算起,0-based)
|
||
public var chapterOffset: Int
|
||
/// HTML fragment ID(如章节内锚点 #section1)
|
||
public var fragmentID: String?
|
||
/// 章内 progression(可选,fragmentID 优先时为 nil)
|
||
public var progressionInChapter: Double?
|
||
/// schema 版本:1=粗估降级, 2=精确值
|
||
public var schemaVersion: Int
|
||
|
||
public init(
|
||
spineIndex: Int,
|
||
chapterOffset: Int,
|
||
fragmentID: String? = nil,
|
||
progressionInChapter: Double? = nil,
|
||
schemaVersion: Int = 2
|
||
) {
|
||
self.spineIndex = spineIndex
|
||
self.chapterOffset = chapterOffset
|
||
self.fragmentID = fragmentID.flatMap { $0.isEmpty ? nil : $0 }
|
||
self.progressionInChapter = progressionInChapter
|
||
self.schemaVersion = schemaVersion
|
||
}
|
||
|
||
/// 粗估结果标记:schemaVersion == 1 表示 chapterOffset 由 progression 粗估得来
|
||
var isFallbackEstimate: Bool { schemaVersion == 1 }
|
||
} |