import UIKit protocol RDEPUBTextBookBuilding { func build( parser: RDEPUBParser, publication: RDEPUBPublication, pageSize: CGSize, style: RDEPUBTextRenderStyle ) throws -> RDEPUBTextBook } struct RDEPUBChapterRenderPipeline { private let renderer: RDEPUBTextRenderer init(renderer: RDEPUBTextRenderer) { self.renderer = renderer } func render(_ request: RDEPUBTextChapterRenderRequest) throws -> RDEPUBRenderedChapterContent { try renderer.renderChapter(request: request) } } struct RDEPUBChapterPaginationPipeline { private let frameFactory: RDEPUBPageFrameBuilding init(frameFactory: RDEPUBPageFrameBuilding = RDEPUBCoreTextPageFrameFactory()) { self.frameFactory = frameFactory } 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 {}