From 871df6bd1a1f7c45e750a49589c7a195c3506205 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sat, 2 Jan 2016 22:26:45 +0000 Subject: Add reading of style IDs --- .../org/zwobble/mammoth/documents/Documents.java | 4 +++ .../org/zwobble/mammoth/documents/HasChildren.java | 7 +++++ .../mammoth/documents/ParagraphElement.java | 11 ++++++-- .../org/zwobble/mammoth/documents/RunElement.java | 2 +- .../java/org/zwobble/mammoth/docx/BodyXml.java | 33 ++++++++++++++++++---- 5 files changed, 48 insertions(+), 9 deletions(-) create mode 100644 src/main/java/org/zwobble/mammoth/documents/Documents.java create mode 100644 src/main/java/org/zwobble/mammoth/documents/HasChildren.java (limited to 'src/main/java') 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 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 styleId; private final List children; - public ParagraphElement(List children) { + public ParagraphElement(Optional styleId, List children) { + this.styleId = styleId; this.children = children; } + public Optional getStyleId() { + return styleId; + } + public List 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 children; public RunElement(List 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 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 readParagraphStyleId(XmlElement paragraph) { + XmlElementLike properties = paragraph.findChildOrEmpty("w:pPr"); + return properties.findChildOrEmpty("w:pStyle").getAttributeOrNone("w:val"); + } + private static List readElements(Iterable nodes) { return ImmutableList.copyOf( - transform( - filter(nodes, XmlElement.class), - BodyXml::readBodyXmlElement)); + concat( + transform( + filter(nodes, XmlElement.class), + BodyXml::readElement))); } } -- cgit v1.2.3