47 lines
1.3 KiB
Swift
47 lines
1.3 KiB
Swift
import UIKit
|
|
|
|
public struct RDEPUBTextRenderStyle {
|
|
public var font: UIFont
|
|
public var lineSpacing: CGFloat
|
|
public var textColor: UIColor?
|
|
public var backgroundColor: UIColor?
|
|
|
|
public init(font: UIFont, lineSpacing: CGFloat, textColor: UIColor? = nil, backgroundColor: UIColor? = nil) {
|
|
self.font = font
|
|
self.lineSpacing = lineSpacing
|
|
self.textColor = textColor
|
|
self.backgroundColor = backgroundColor
|
|
}
|
|
}
|
|
|
|
public struct RDEPUBRenderedChapterContent {
|
|
public var attributedString: NSAttributedString
|
|
public var fragmentOffsets: [String: Int]
|
|
|
|
public init(attributedString: NSAttributedString, fragmentOffsets: [String: Int]) {
|
|
self.attributedString = attributedString
|
|
self.fragmentOffsets = fragmentOffsets
|
|
}
|
|
}
|
|
|
|
public protocol RDEPUBTextRenderer {
|
|
func renderChapter(
|
|
html: String,
|
|
baseURL: URL?,
|
|
style: RDEPUBTextRenderStyle
|
|
) throws -> RDEPUBRenderedChapterContent
|
|
}
|
|
|
|
public enum RDEPUBTextRenderingError: LocalizedError {
|
|
case htmlEncodingFailed
|
|
case htmlImportFailed
|
|
|
|
public var errorDescription: String? {
|
|
switch self {
|
|
case .htmlEncodingFailed:
|
|
return "HTML 编码失败"
|
|
case .htmlImportFailed:
|
|
return "HTML 富文本导入失败"
|
|
}
|
|
}
|
|
} |