Files
ReadViewSDK/Sources/RDReaderView/EPUBTextRendering/RDEPUBTextPaginationSupport.swift
T
shenandshen 54798ba578 refactor: 添加中文注释 + 优化模块结构
- 给全部 78 个 Swift 源文件添加详细的中文注释(文件级、类级、方法级)
- 删除 LegacyRDReaderController/ 死代码目录(16 文件 4592 行)
- 根目录翻页容器文件移入 ReaderView/ 目录
- Resources/ 移入 EPUBCore/Resources/(与使用者归属一致)
- RDEPUBTextIndexTable.swift 移入 EPUBTextRendering/(消除反向依赖)
- RDURLReaderController.swift 移入 EPUBUI/(入口控制器归入 UI 层)
- 更新 podspec 资源路径
2026-05-25 10:19:14 +08:00

45 lines
1.7 KiB
Swift

import CoreText
import UIKit
// MARK: - NSAttributedString 分页扩展
/// 为 NSAttributedString 提供便捷的分页方法,是渲染链路中 CoreText 分页的入口点。
extension NSAttributedString {
/// 将富文本按指定页面尺寸分页,返回布局帧列表(每帧对应一页)。
///
/// 这是 `RDEPUBTextBookBuilder` 和 `RDPlainTextBookBuilder` 调用的核心分页方法。
/// - Parameters:
/// - size: 页面尺寸
/// - fragmentOffsets: fragment ID → 字符偏移量映射(用于阅读位置恢复)
/// - config: 布局配置(孤行控制、avoidPageBreakInside 等)
/// - Returns: 分页后的布局帧列表
func rd_paginatedFrames(
size: CGSize,
fragmentOffsets: [String: Int] = [:],
config: RDEPUBTextLayoutConfig = .default
) -> [RDEPUBTextLayoutFrame] {
RDEPUBTextLayouter(attributedString: self, pageSize: size, config: config)
.layoutFrames(fragmentOffsets: fragmentOffsets)
}
/// 简化版分页:只返回每页的 NSRange 列表(不含语义元数据)
func ss_pageRanges(size: CGSize) -> [NSRange] {
rd_paginatedFrames(size: size).map(\.contentRange)
}
}
// MARK: - UIColor CSS 转换扩展
/// 为 UIColor 提供 CSS 颜色字符串转换,用于动态生成暗色模式 CSS。
extension UIColor {
/// 将 UIColor 转换为 CSS rgba() 字符串格式
var ss_cssString: String {
var red: CGFloat = 0
var green: CGFloat = 0
var blue: CGFloat = 0
var alpha: CGFloat = 0
getRed(&red, green: &green, blue: &blue, alpha: &alpha)
return String(format: "rgba(%d, %d, %d, %.3f)", Int(red * 255), Int(green * 255), Int(blue * 255), alpha)
}
}