package net.rubygrapefruit.docs.theme; import net.rubygrapefruit.docs.model.*; import net.rubygrapefruit.docs.renderer.BuildableChunk; import net.rubygrapefruit.docs.renderer.RenderableDocument; public class MultipleChunkBuilder implements RenderableDocumentBuilder { public void buildDocument(Document source, RenderableDocument target) { addChunks(source, target); if (target.getContents().isEmpty()) { target.addChunk().setId(source.getId()); } } private void addChunks(Component component, RenderableDocument target) { if (!component.getTitle().isEmpty()) { BuildableChunk titlePage = target.addChunk(); titlePage.setId(component.getId()); titlePage.addTitlePage(component); } BuildableChunk current = null; for (Block block : component.getContents()) { if (block instanceof Part) { Part part = (Part) block; addChunks(part, target); current = null; } else if (block instanceof Component) { Component childComponent = (Component) block; current = target.addChunk(); current.setId(childComponent.getId()); current.add(block); current = null; } else { if (current == null) { current = target.addChunk(); current.setId("page" + target.getContents().size()); } current.add(block); } } } }