// RDEPUBTextBuildPipelineInterfaces.swift // EPUB 文本构建管线接口定义,包括全书构建、章节渲染与分页管线。 import UIKit /// EPUB 全书文本构建接口,将 EPUB 出版物解析为可分页的文本书籍。 protocol RDEPUBTextBookBuilding { func build( parser: RDEPUBParser, publication: RDEPUBPublication, pageSize: CGSize, style: RDEPUBTextRenderStyle ) throws -> RDEPUBTextBook } /// 章节渲染管线,将章节渲染请求委托给底层文本渲染器。 struct RDEPUBChapterRenderPipeline { private let renderer: RDEPUBTextRenderer /// 初始化渲染管线。 /// - Parameter renderer: 文本渲染器实例 init(renderer: RDEPUBTextRenderer) { self.renderer = renderer } /// 渲染单个章节,返回渲染后的富文本内容。 /// - Parameter request: 章节渲染请求 /// - Returns: 渲染完成的章节内容 func render(_ request: RDEPUBTextChapterRenderRequest) throws -> RDEPUBRenderedChapterContent { try renderer.renderChapter(request: request) } } /// 章节分页管线,将渲染后的富文本按页面尺寸拆分为文本帧数组。 struct RDEPUBChapterPaginationPipeline { private let frameFactory: RDEPUBPageFrameBuilding /// 初始化分页管线。 /// - Parameter frameFactory: 页面帧工厂,默认使用 CoreText 实现 init(frameFactory: RDEPUBPageFrameBuilding = RDEPUBCoreTextPageFrameFactory()) { self.frameFactory = frameFactory } /// 将富文本内容分页,返回页面帧数组。 /// - Parameters: /// - content: 待分页的富文本 /// - pageSize: 页面尺寸 /// - config: 排版配置 /// - fragmentOffsets: fragment 锚点偏移映射 /// - Returns: 页面帧数组 func frames( for content: NSAttributedString, pageSize: CGSize, config: RDEPUBTextLayoutConfig, fragmentOffsets: [String: Int] ) -> [RDEPUBTextLayoutFrame] { frameFactory.makeFrames( attributedString: content, pageSize: pageSize, config: config, fragmentOffsets: fragmentOffsets ) } } extension RDEPUBTextBookBuilder: RDEPUBTextBookBuilding {}