aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2024-03-20 19:20:02 +0000
committerMichael Williamson <mike@zwobble.org>2024-03-20 19:20:02 +0000
commitb826c4a4df92c5280e4f8a4d7e1bebbbb03affb3 (patch)
tree02e6d71ea44af7be0251f2b87e1924587cdd3872
parentf1227a9f026f34c48515332770944049656a272f (diff)
Prefer numbering properties to numbering from paragraph style
-rw-r--r--NEWS6
-rw-r--r--src/main/java/org/zwobble/mammoth/internal/docx/StatefulBodyXmlReader.java13
-rw-r--r--src/test/java/org/zwobble/mammoth/tests/docx/BodyXmlTests.java30
3 files changed, 41 insertions, 8 deletions
diff --git a/NEWS b/NEWS
index 3c5b54f..96af28e 100644
--- a/NEWS
+++ b/NEWS
@@ -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())),