aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/zwobble
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2016-08-28 23:11:57 +0100
committerMichael Williamson <mike@zwobble.org>2016-08-28 23:11:57 +0100
commit93e92326208e3a374c170beeb323578fedf0d337 (patch)
tree45f4208ca050dd39ea024d97ea90d8119abafd1a /src/main/java/org/zwobble
parent7456c5d58ca40c039de055f39b5b90fedc834f6b (diff)
Defer generation of child nodes until necessary
Diffstat (limited to 'src/main/java/org/zwobble')
-rw-r--r--src/main/java/org/zwobble/mammoth/internal/conversion/DocumentToHtml.java17
-rw-r--r--src/main/java/org/zwobble/mammoth/internal/styles/HtmlPath.java7
-rw-r--r--src/main/java/org/zwobble/mammoth/internal/styles/HtmlPathElement.java7
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));
}
}