diff options
Diffstat (limited to 'src/main/java/org')
5 files changed, 48 insertions, 9 deletions
diff --git a/src/main/java/org/zwobble/mammoth/documents/Documents.java b/src/main/java/org/zwobble/mammoth/documents/Documents.java new file mode 100644 index 0000000..b599c51 --- /dev/null +++ b/src/main/java/org/zwobble/mammoth/documents/Documents.java @@ -0,0 +1,4 @@ +package org.zwobble.mammoth.documents; + +public class Documents { +} diff --git a/src/main/java/org/zwobble/mammoth/documents/HasChildren.java b/src/main/java/org/zwobble/mammoth/documents/HasChildren.java new file mode 100644 index 0000000..cfd6c44 --- /dev/null +++ b/src/main/java/org/zwobble/mammoth/documents/HasChildren.java @@ -0,0 +1,7 @@ +package org.zwobble.mammoth.documents; + +import java.util.List; + +public interface HasChildren { + List<DocumentElement> getChildren(); +} diff --git a/src/main/java/org/zwobble/mammoth/documents/ParagraphElement.java b/src/main/java/org/zwobble/mammoth/documents/ParagraphElement.java index 3a8e447..dcf8dad 100644 --- a/src/main/java/org/zwobble/mammoth/documents/ParagraphElement.java +++ b/src/main/java/org/zwobble/mammoth/documents/ParagraphElement.java @@ -1,14 +1,21 @@ package org.zwobble.mammoth.documents; import java.util.List; +import java.util.Optional; -public class ParagraphElement implements DocumentElement { +public class ParagraphElement implements DocumentElement, HasChildren { + private final Optional<String> styleId; private final List<DocumentElement> children; - public ParagraphElement(List<DocumentElement> children) { + public ParagraphElement(Optional<String> styleId, List<DocumentElement> children) { + this.styleId = styleId; this.children = children; } + public Optional<String> getStyleId() { + return styleId; + } + public List<DocumentElement> getChildren() { return children; } diff --git a/src/main/java/org/zwobble/mammoth/documents/RunElement.java b/src/main/java/org/zwobble/mammoth/documents/RunElement.java index 3f80872..ef063dc 100644 --- a/src/main/java/org/zwobble/mammoth/documents/RunElement.java +++ b/src/main/java/org/zwobble/mammoth/documents/RunElement.java @@ -2,7 +2,7 @@ package org.zwobble.mammoth.documents; import java.util.List; -public class RunElement implements DocumentElement { +public class RunElement implements DocumentElement, HasChildren { private final List<DocumentElement> children; public RunElement(List<DocumentElement> children) { diff --git a/src/main/java/org/zwobble/mammoth/docx/BodyXml.java b/src/main/java/org/zwobble/mammoth/docx/BodyXml.java index 94faf83..8aba487 100644 --- a/src/main/java/org/zwobble/mammoth/docx/BodyXml.java +++ b/src/main/java/org/zwobble/mammoth/docx/BodyXml.java @@ -6,31 +6,52 @@ import org.zwobble.mammoth.documents.ParagraphElement; import org.zwobble.mammoth.documents.RunElement; import org.zwobble.mammoth.documents.TextElement; import org.zwobble.mammoth.xml.XmlElement; +import org.zwobble.mammoth.xml.XmlElementLike; import org.zwobble.mammoth.xml.XmlNode; import java.util.List; +import java.util.Optional; +import static com.google.common.collect.Iterables.concat; 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) { + return readElement(element).get(0); + } + + private static List<DocumentElement> readElement(XmlElement element) { switch (element.getName()) { case "w:t": - return new TextElement(element.innerText()); + return ImmutableList.of(new TextElement(element.innerText())); case "w:r": - return new RunElement(readElements(element.children())); + return ImmutableList.of(new RunElement(readElements(element.children()))); case "w:p": - return new ParagraphElement(readElements(element.children())); + return ImmutableList.of(readParagraph(element)); + + case "w:pPr": + return ImmutableList.of(); + default: throw new UnsupportedOperationException(); } } + private static ParagraphElement readParagraph(XmlElement element) { + return new ParagraphElement(readParagraphStyleId(element), readElements(element.children())); + } + + private static Optional<String> readParagraphStyleId(XmlElement paragraph) { + XmlElementLike properties = paragraph.findChildOrEmpty("w:pPr"); + return properties.findChildOrEmpty("w:pStyle").getAttributeOrNone("w:val"); + } + private static List<DocumentElement> readElements(Iterable<XmlNode> nodes) { return ImmutableList.copyOf( - transform( - filter(nodes, XmlElement.class), - BodyXml::readBodyXmlElement)); + concat( + transform( + filter(nodes, XmlElement.class), + BodyXml::readElement))); } } |
