diff options
| author | Michael Williamson <mike@zwobble.org> | 2024-03-20 19:20:02 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2024-03-20 19:20:02 +0000 |
| commit | b826c4a4df92c5280e4f8a4d7e1bebbbb03affb3 (patch) | |
| tree | 02e6d71ea44af7be0251f2b87e1924587cdd3872 | |
| parent | f1227a9f026f34c48515332770944049656a272f (diff) | |
Prefer numbering properties to numbering from paragraph style
| -rw-r--r-- | NEWS | 6 | ||||
| -rw-r--r-- | src/main/java/org/zwobble/mammoth/internal/docx/StatefulBodyXmlReader.java | 13 | ||||
| -rw-r--r-- | src/test/java/org/zwobble/mammoth/tests/docx/BodyXmlTests.java | 30 |
3 files changed, 41 insertions, 8 deletions
@@ -1,3 +1,9 @@ +# 1.7.1 + +* Switch the precedence of numbering properties in paragraph properties and the + numbering in paragraph styles so that the numbering properties in paragraph + properties takes precedence. + # 1.7.0 * Support attributes in HTML paths in style mappings. diff --git a/src/main/java/org/zwobble/mammoth/internal/docx/StatefulBodyXmlReader.java b/src/main/java/org/zwobble/mammoth/internal/docx/StatefulBodyXmlReader.java index 3be34ad..d17a404 100644 --- a/src/main/java/org/zwobble/mammoth/internal/docx/StatefulBodyXmlReader.java +++ b/src/main/java/org/zwobble/mammoth/internal/docx/StatefulBodyXmlReader.java @@ -354,6 +354,13 @@ class StatefulBodyXmlReader { } private Optional<NumberingLevel> readNumbering(Optional<Style> style, XmlElementLike properties) { + XmlElementLike numberingProperties = properties.findChildOrEmpty("w:numPr"); + Optional<String> numId = readVal(numberingProperties, "w:numId"); + Optional<String> levelIndex = readVal(numberingProperties, "w:ilvl"); + if (numId.isPresent() && levelIndex.isPresent()) { + return numbering.findLevel(numId.get(), levelIndex.get()); + } + if (style.isPresent()) { String styleId = style.get().getStyleId(); Optional<NumberingLevel> level = numbering.findLevelByParagraphStyleId(styleId); @@ -362,11 +369,7 @@ class StatefulBodyXmlReader { } } - XmlElementLike numberingProperties = properties.findChildOrEmpty("w:numPr"); - return Optionals.flatMap( - readVal(numberingProperties, "w:numId"), - readVal(numberingProperties, "w:ilvl"), - numbering::findLevel); + return Optional.empty(); } private ParagraphIndent readParagraphIndent(XmlElementLike properties) { 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 c8b6c7c..429b280 100644 --- a/src/test/java/org/zwobble/mammoth/tests/docx/BodyXmlTests.java +++ b/src/test/java/org/zwobble/mammoth/tests/docx/BodyXmlTests.java @@ -206,7 +206,31 @@ public class BodyXmlTests { } @Test - public void numberingOnParagraphStyleTakesPrecedenceOverNumPr() { + public void paragraphHasNumberingFromParagraphStyleIfPresent() { + XmlElement element = paragraphXml(list( + element("w:pPr", list( + element("w:pStyle", map("w:val", "List")) + )) + )); + + Numbering numbering = numberingMap(map( + "43", map("1", new Numbering.AbstractNumLevel("1", true, Optional.of("List"))) + )); + Styles styles = new Styles( + map("List", new Style("List", Optional.empty())), + map(), + map(), + map() + ); + + assertThat( + readSuccess(bodyReader(numbering, styles), element), + hasNumbering(NumberingLevel.ordered("1")) + ); + } + + @Test + public void numberingPropertiesInParagraphPropertiesTakesPrecedenceOverNumberingInParagraphStyle() { XmlElement element = paragraphXml(list( element("w:pPr", list( element("w:pStyle", map("w:val", "List")), @@ -218,8 +242,8 @@ public class BodyXmlTests { )); Numbering numbering = numberingMap(map( - "42", map("1", new Numbering.AbstractNumLevel("1", false, Optional.empty())), - "43", map("1", new Numbering.AbstractNumLevel("1", true, Optional.of("List"))) + "42", map("1", new Numbering.AbstractNumLevel("1", true, Optional.empty())), + "43", map("1", new Numbering.AbstractNumLevel("2", true, Optional.of("List"))) )); Styles styles = new Styles( map("List", new Style("List", Optional.empty())), |
