diff options
| author | Michael Williamson <mike@zwobble.org> | 2016-08-28 23:11:57 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2016-08-28 23:11:57 +0100 |
| commit | 93e92326208e3a374c170beeb323578fedf0d337 (patch) | |
| tree | 45f4208ca050dd39ea024d97ea90d8119abafd1a /src/main/java/org | |
| parent | 7456c5d58ca40c039de055f39b5b90fedc834f6b (diff) | |
Defer generation of child nodes until necessary
Diffstat (limited to 'src/main/java/org')
3 files changed, 20 insertions, 11 deletions
diff --git a/src/main/java/org/zwobble/mammoth/internal/conversion/DocumentToHtml.java b/src/main/java/org/zwobble/mammoth/internal/conversion/DocumentToHtml.java index 1eb66d3..1254747 100644 --- a/src/main/java/org/zwobble/mammoth/internal/conversion/DocumentToHtml.java +++ b/src/main/java/org/zwobble/mammoth/internal/conversion/DocumentToHtml.java @@ -11,6 +11,7 @@ import org.zwobble.mammoth.internal.util.Lists; import java.io.IOException; import java.util.*; +import java.util.function.Supplier; import static org.zwobble.mammoth.internal.util.Lists.*; import static org.zwobble.mammoth.internal.util.Maps.map; @@ -89,8 +90,10 @@ public class DocumentToHtml { return element.accept(new DocumentElementVisitor<List<HtmlNode>>() { @Override public List<HtmlNode> visit(Paragraph paragraph) { - List<HtmlNode> content = convertChildrenToHtml(paragraph); - List<HtmlNode> children = preserveEmptyParagraphs ? cons(Html.FORCE_WRITE, content) : content; + Supplier<List<HtmlNode>> children = () -> { + List<HtmlNode> content = convertChildrenToHtml(paragraph); + return preserveEmptyParagraphs ? cons(Html.FORCE_WRITE, content) : content; + }; HtmlPath mapping = styleMap.getParagraphHtmlPath(paragraph) .orElseGet(() -> { if (paragraph.getStyle().isPresent()) { @@ -98,12 +101,12 @@ public class DocumentToHtml { } return HtmlPath.element("p"); }); - return mapping.wrap(children); + return mapping.wrap(children).get(); } @Override public List<HtmlNode> visit(Run run) { - List<HtmlNode> nodes = convertChildrenToHtml(run); + Supplier<List<HtmlNode>> nodes = () -> convertChildrenToHtml(run); if (run.isStrikethrough()) { nodes = styleMap.getStrikethrough().orElse(HtmlPath.collapsibleElement("s")).wrap(nodes); } @@ -111,10 +114,10 @@ public class DocumentToHtml { nodes = styleMap.getUnderline().orElse(HtmlPath.EMPTY).wrap(nodes); } if (run.getVerticalAlignment() == VerticalAlignment.SUBSCRIPT) { - nodes = list(Html.collapsibleElement("sub", nodes)); + nodes = HtmlPath.collapsibleElement("sub").wrap(nodes); } if (run.getVerticalAlignment() == VerticalAlignment.SUPERSCRIPT) { - nodes = list(Html.collapsibleElement("sup", nodes)); + nodes = HtmlPath.collapsibleElement("sup").wrap(nodes); } if (run.isItalic()) { nodes = styleMap.getItalic().orElse(HtmlPath.collapsibleElement("em")).wrap(nodes); @@ -129,7 +132,7 @@ public class DocumentToHtml { } return HtmlPath.EMPTY; }); - return mapping.wrap(nodes); + return mapping.wrap(nodes).get(); } @Override diff --git a/src/main/java/org/zwobble/mammoth/internal/styles/HtmlPath.java b/src/main/java/org/zwobble/mammoth/internal/styles/HtmlPath.java index 93025d9..979f292 100644 --- a/src/main/java/org/zwobble/mammoth/internal/styles/HtmlPath.java +++ b/src/main/java/org/zwobble/mammoth/internal/styles/HtmlPath.java @@ -4,6 +4,7 @@ import org.zwobble.mammoth.internal.html.HtmlNode; import java.util.List; import java.util.Map; +import java.util.function.Supplier; import static org.zwobble.mammoth.internal.util.Lists.list; import static org.zwobble.mammoth.internal.util.Lists.reversed; @@ -42,10 +43,10 @@ public class HtmlPath { this.elements = elements; } - public List<HtmlNode> wrap(List<HtmlNode> nodes) { + public Supplier<List<HtmlNode>> wrap(Supplier<List<HtmlNode>> generateNodes) { for (HtmlPathElement element : reversed(elements)) { - nodes = element.wrap(nodes); + generateNodes = element.wrap(generateNodes); } - return nodes; + return generateNodes; } } diff --git a/src/main/java/org/zwobble/mammoth/internal/styles/HtmlPathElement.java b/src/main/java/org/zwobble/mammoth/internal/styles/HtmlPathElement.java index 08221eb..4c4ff98 100644 --- a/src/main/java/org/zwobble/mammoth/internal/styles/HtmlPathElement.java +++ b/src/main/java/org/zwobble/mammoth/internal/styles/HtmlPathElement.java @@ -5,6 +5,7 @@ import org.zwobble.mammoth.internal.html.HtmlNode; import java.util.List; import java.util.Map; +import java.util.function.Supplier; import static org.zwobble.mammoth.internal.util.Lists.list; import static org.zwobble.mammoth.internal.util.Maps.map; @@ -32,7 +33,11 @@ public class HtmlPathElement { this.isCollapsible = isCollapsible; } - public List<HtmlNode> wrap(List<HtmlNode> nodes) { + public Supplier<List<HtmlNode>> wrap(Supplier<List<HtmlNode>> generateNodes) { + return () -> wrapNodes(generateNodes.get()); + } + + private List<HtmlNode> wrapNodes(List<HtmlNode> nodes) { return list(new HtmlElement(tagNames, attributes, nodes, isCollapsible)); } } |
