aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/zwobble/mammoth/internal/docx/StylesXml.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/org/zwobble/mammoth/internal/docx/StylesXml.java')
-rw-r--r--src/main/java/org/zwobble/mammoth/internal/docx/StylesXml.java33
1 files changed, 33 insertions, 0 deletions
diff --git a/src/main/java/org/zwobble/mammoth/internal/docx/StylesXml.java b/src/main/java/org/zwobble/mammoth/internal/docx/StylesXml.java
new file mode 100644
index 0000000..78ba65f
--- /dev/null
+++ b/src/main/java/org/zwobble/mammoth/internal/docx/StylesXml.java
@@ -0,0 +1,33 @@
+package org.zwobble.mammoth.internal.docx;
+
+import org.zwobble.mammoth.internal.documents.Style;
+import org.zwobble.mammoth.internal.xml.XmlElement;
+import org.zwobble.mammoth.internal.xml.XmlElementList;
+
+import java.util.Map;
+import java.util.Optional;
+
+import static com.google.common.collect.Iterables.filter;
+import static com.google.common.collect.Maps.immutableEntry;
+import static org.zwobble.mammoth.internal.util.MammothMaps.toMap;
+
+public class StylesXml {
+ public static Styles readStylesXmlElement(XmlElement element) {
+ XmlElementList styleElements = element.findChildren("w:style");
+ return new Styles(
+ readStyles(styleElements, "paragraph"),
+ readStyles(styleElements, "character"));
+ }
+
+ private static Map<String, Style> readStyles(XmlElementList styleElements, String styleType) {
+ return toMap(
+ filter(styleElements, styleElement -> styleElement.getAttribute("w:type").equals(styleType)),
+ StylesXml::readStyle);
+ }
+
+ private static Map.Entry<String, Style> readStyle(XmlElement element) {
+ String styleId = element.getAttribute("w:styleId");
+ Optional<String> styleName = element.findChildOrEmpty("w:name").getAttributeOrNone("w:val");
+ return immutableEntry(styleId, new Style(styleId, styleName));
+ }
+}