Files
ReadViewSDK/Sources/RDReaderView/EPUBTextRendering/RDEPUBTextLayoutFrame.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
2.0 KiB
Swift

import Foundation
/// CoreText 分页引擎产生的单帧(单页)布局数据。
///
/// 由 `RDEPUBTextLayouter` 在分页过程中生成,记录了该页的内容范围、分页原因、
/// 附件信息和语义标记。`RDEPUBTextBookBuilder` 会将 `RDEPUBTextLayoutFrame` 转换为
/// `RDEPUBTextPage`,并纳入最终的 `RDEPUBTextBook` 模型。
struct RDEPUBTextLayoutFrame: Equatable {
/// 该帧在章节富文本中的字符范围
var contentRange: NSRange
/// 分页原因(语义边界、附件边界、帧限制等)
var breakReason: RDEPUBTextPageBreakReason
/// 所属 HTML 块级元素的范围(用于调试)
var blockRange: NSRange?
/// 帧内附件的字符范围列表
var attachmentRanges: [NSRange]
/// 帧内附件类型列表(图片、通用附件等)
var attachmentKinds: [RDEPUBTextAttachmentKind]
/// 帧内包含的 HTML 块级元素类型列表(段落、列表、表格等)
var blockKinds: [RDEPUBTextBlockKind]
/// 帧内语义提示列表(避免分页、保持与下一段同页等)
var semanticHints: [RDEPUBTextSemanticHint]
/// 帧内附件的布局方式(行内、基线、居中)
var attachmentPlacements: [RDEPUBTextAttachmentPlacement]
/// 帧尾部最近的 fragment ID(用于恢复阅读位置)
var trailingFragmentID: String?
/// 诊断日志列表(分页原因详情、范围信息等)
var diagnostics: [String]
/// 将布局帧数据转换为页元数据模型
var metadata: RDEPUBTextPageMetadata {
RDEPUBTextPageMetadata(
breakReason: breakReason,
blockRange: blockRange,
attachmentRanges: attachmentRanges,
attachmentKinds: attachmentKinds,
blockKinds: blockKinds,
semanticHints: semanticHints,
attachmentPlacements: attachmentPlacements,
trailingFragmentID: trailingFragmentID,
diagnostics: diagnostics
)
}
}