From 15daf7d09b8f3da093eea154f49579cdf2002fa7 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sun, 17 Mar 2019 17:06:25 +0000 Subject: Read numbering styles --- .../zwobble/mammoth/internal/docx/StylesXml.java | 40 +++++++++++++++++++--- 1 file changed, 36 insertions(+), 4 deletions(-) (limited to 'src/main/java/org/zwobble/mammoth/internal/docx/StylesXml.java') diff --git a/src/main/java/org/zwobble/mammoth/internal/docx/StylesXml.java b/src/main/java/org/zwobble/mammoth/internal/docx/StylesXml.java index b7320e0..656b0dd 100644 --- a/src/main/java/org/zwobble/mammoth/internal/docx/StylesXml.java +++ b/src/main/java/org/zwobble/mammoth/internal/docx/StylesXml.java @@ -1,5 +1,6 @@ package org.zwobble.mammoth.internal.docx; +import org.zwobble.mammoth.internal.documents.NumberingStyle; import org.zwobble.mammoth.internal.documents.Style; import org.zwobble.mammoth.internal.xml.XmlElement; import org.zwobble.mammoth.internal.xml.XmlElementList; @@ -17,19 +18,50 @@ public class StylesXml { return new Styles( readStyles(styleElements, "paragraph"), readStyles(styleElements, "character"), - readStyles(styleElements, "table") + readStyles(styleElements, "table"), + readNumberingStyles(styleElements) ); } private static Map readStyles(XmlElementList styleElements, String styleType) { return toMap( - lazyFilter(styleElements, styleElement -> styleElement.getAttribute("w:type").equals(styleType)), - StylesXml::readStyle); + styleElementsOfType(styleElements, styleType), + StylesXml::readStyle + ); } private static Map.Entry readStyle(XmlElement element) { - String styleId = element.getAttribute("w:styleId"); + String styleId = readStyleId(element); Optional styleName = element.findChildOrEmpty("w:name").getAttributeOrNone("w:val"); return entry(styleId, new Style(styleId, styleName)); } + + private static Map readNumberingStyles(XmlElementList styleElements) { + return toMap( + styleElementsOfType(styleElements, "numbering"), + StylesXml::readNumberingStyle + ); + } + + private static Map.Entry readNumberingStyle(XmlElement element) { + String styleId = readStyleId(element); + Optional numId = element + .findChildOrEmpty("w:pPr") + .findChildOrEmpty("w:numPr") + .findChildOrEmpty("w:numId") + .getAttributeOrNone("w:val"); + return entry(styleId, new NumberingStyle(numId)); + } + + private static String readStyleId(XmlElement element) { + return element.getAttribute("w:styleId"); + } + + private static Iterable styleElementsOfType(XmlElementList styleElements, String styleType) { + return lazyFilter(styleElements, styleElement -> isStyleType(styleElement, styleType)); + } + + private static boolean isStyleType(XmlElement styleElement, String styleType) { + return styleElement.getAttribute("w:type").equals(styleType); + } } -- cgit v1.2.3