From 02ac29cbd29ff95c7174981edaea213e2b7315c7 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sat, 2 Jan 2016 14:16:09 +0000 Subject: Parse children of run --- .../org/zwobble/mammoth/documents/RunElement.java | 15 ++++++++++++ .../java/org/zwobble/mammoth/docx/BodyXml.java | 17 +++++++++++++ .../zwobble/mammoth/tests/docx/BodyXmlTests.java | 28 +++++++++++++++++++++- 3 files changed, 59 insertions(+), 1 deletion(-) create mode 100644 src/main/java/org/zwobble/mammoth/documents/RunElement.java diff --git a/src/main/java/org/zwobble/mammoth/documents/RunElement.java b/src/main/java/org/zwobble/mammoth/documents/RunElement.java new file mode 100644 index 0000000..3f80872 --- /dev/null +++ b/src/main/java/org/zwobble/mammoth/documents/RunElement.java @@ -0,0 +1,15 @@ +package org.zwobble.mammoth.documents; + +import java.util.List; + +public class RunElement implements DocumentElement { + private final List children; + + public RunElement(List children) { + this.children = children; + } + + public List getChildren() { + return children; + } +} diff --git a/src/main/java/org/zwobble/mammoth/docx/BodyXml.java b/src/main/java/org/zwobble/mammoth/docx/BodyXml.java index 7b3e74e..a8b7246 100644 --- a/src/main/java/org/zwobble/mammoth/docx/BodyXml.java +++ b/src/main/java/org/zwobble/mammoth/docx/BodyXml.java @@ -1,16 +1,33 @@ package org.zwobble.mammoth.docx; +import com.google.common.collect.ImmutableList; import org.zwobble.mammoth.documents.DocumentElement; +import org.zwobble.mammoth.documents.RunElement; import org.zwobble.mammoth.documents.TextElement; import org.zwobble.mammoth.xml.XmlElement; +import org.zwobble.mammoth.xml.XmlNode; + +import java.util.List; + +import static com.google.common.collect.Iterables.filter; +import static com.google.common.collect.Iterables.transform; public class BodyXml { public static DocumentElement readBodyXmlElement(XmlElement element) { switch (element.getName()) { case "w:t": return new TextElement(element.innerText()); + case "w:r": + return new RunElement(readElements(element.children())); default: throw new UnsupportedOperationException(); } } + + private static List readElements(Iterable nodes) { + return ImmutableList.copyOf( + transform( + filter(nodes, XmlElement.class), + BodyXml::readBodyXmlElement)); + } } diff --git a/src/test/java/org/zwobble/mammoth/tests/docx/BodyXmlTests.java b/src/test/java/org/zwobble/mammoth/tests/docx/BodyXmlTests.java index 2b6323e..8b04b51 100644 --- a/src/test/java/org/zwobble/mammoth/tests/docx/BodyXmlTests.java +++ b/src/test/java/org/zwobble/mammoth/tests/docx/BodyXmlTests.java @@ -4,8 +4,12 @@ import com.google.common.collect.ImmutableList; import org.hamcrest.Matcher; import org.junit.Test; import org.zwobble.mammoth.documents.DocumentElement; +import org.zwobble.mammoth.documents.RunElement; import org.zwobble.mammoth.documents.TextElement; import org.zwobble.mammoth.xml.XmlElement; +import org.zwobble.mammoth.xml.XmlNode; + +import java.util.List; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.*; @@ -16,10 +20,32 @@ import static org.zwobble.mammoth.xml.XmlNodes.text; public class BodyXmlTests { @Test public void textFromTextElementIsRead() { - XmlElement element = element("w:t", ImmutableList.of(text("Hello!"))); + XmlElement element = textXml("Hello!"); assertThat(readBodyXmlElement(element), isTextElement("Hello!")); } + @Test + public void canReadTextWithinRun() { + XmlElement element = runXml(ImmutableList.of(textXml("Hello!"))); + assertThat( + readBodyXmlElement(element), + isRunElement(isTextElement("Hello!"))); + } + + private XmlElement runXml(List children) { + return element("w:r", children); + } + + private XmlElement textXml(String value) { + return element("w:t", ImmutableList.of(text(value))); + } + + private Matcher isRunElement(Matcher child) { + return allOf( + instanceOf(RunElement.class), + hasProperty("children", contains(child))); + } + private Matcher isTextElement(String value) { return allOf( instanceOf(TextElement.class), -- cgit v1.2.3