summaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2019-03-17 21:44:44 +0000
committerMichael Williamson <mike@zwobble.org>2019-03-17 21:45:09 +0000
commitf2fd5ec08b2b87278f2929d7c15c9ed71fbac8d8 (patch)
treedfe036e0e13aa68e2173702d27a17edca0df2643 /src/main/java
parent4d078c3842a40d723f79a5896250ad522ebd083a (diff)
Follow w:numStyleLink in w:abstractNum
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/zwobble/mammoth/internal/docx/Numbering.java22
-rw-r--r--src/main/java/org/zwobble/mammoth/internal/docx/NumberingXml.java8
2 files changed, 24 insertions, 6 deletions
diff --git a/src/main/java/org/zwobble/mammoth/internal/docx/Numbering.java b/src/main/java/org/zwobble/mammoth/internal/docx/Numbering.java
index 0191763..90ea5c1 100644
--- a/src/main/java/org/zwobble/mammoth/internal/docx/Numbering.java
+++ b/src/main/java/org/zwobble/mammoth/internal/docx/Numbering.java
@@ -11,9 +11,11 @@ import static org.zwobble.mammoth.internal.util.Maps.map;
public class Numbering {
public static class AbstractNum {
private final Map<String, NumberingLevel> levels;
+ private final Optional<String> numStyleLink;
- public AbstractNum(Map<String, NumberingLevel> levels) {
+ public AbstractNum(Map<String, NumberingLevel> levels, Optional<String> numStyleLink) {
this.levels = levels;
+ this.numStyleLink = numStyleLink;
}
}
@@ -25,23 +27,35 @@ public class Numbering {
}
}
- public static final Numbering EMPTY = new Numbering(map(), map());
+ public static final Numbering EMPTY = new Numbering(map(), map(), Styles.EMPTY);
private final Map<String, AbstractNum> abstractNums;
private final Map<String, Num> nums;
+ private final Styles styles;
public Numbering(
Map<String, AbstractNum> abstractNums,
- Map<String, Num> nums
+ Map<String, Num> nums,
+ Styles styles
) {
this.abstractNums = abstractNums;
this.nums = nums;
+ this.styles = styles;
}
public Optional<NumberingLevel> findLevel(String numId, String level) {
return lookup(nums, numId)
.flatMap(num -> num.abstractNumId)
.flatMap(abstractNumId -> lookup(this.abstractNums, abstractNumId))
- .flatMap(abstractNum -> lookup(abstractNum.levels, level));
+ .flatMap(abstractNum -> {
+ if (abstractNum.numStyleLink.isPresent()) {
+ return abstractNum.numStyleLink
+ .flatMap(numStyleLink -> styles.findNumberingStyleById(numStyleLink))
+ .flatMap(style -> style.getNumId())
+ .flatMap(linkedNumId -> findLevel(linkedNumId, level));
+ } else {
+ return lookup(abstractNum.levels, level);
+ }
+ });
}
}
diff --git a/src/main/java/org/zwobble/mammoth/internal/docx/NumberingXml.java b/src/main/java/org/zwobble/mammoth/internal/docx/NumberingXml.java
index 6b5372f..b25ffdd 100644
--- a/src/main/java/org/zwobble/mammoth/internal/docx/NumberingXml.java
+++ b/src/main/java/org/zwobble/mammoth/internal/docx/NumberingXml.java
@@ -14,7 +14,7 @@ public class NumberingXml {
public static Numbering readNumberingXmlElement(XmlElement element, Styles styles) {
Map<String, Numbering.AbstractNum> abstractNums = readAbstractNums(element.findChildren("w:abstractNum"));
Map<String, Numbering.Num> nums = readNums(element.findChildren("w:num"));
- return new Numbering(abstractNums, nums);
+ return new Numbering(abstractNums, nums, styles);
}
private static Map<String, Numbering.AbstractNum> readAbstractNums(XmlElementList children) {
@@ -24,7 +24,11 @@ public class NumberingXml {
private static Map.Entry<String, Numbering.AbstractNum> readAbstractNum(XmlElement element) {
// TODO: in python-mammoth, we allow None here. Check whether that's actually possible or not
String abstractNumId = element.getAttribute("w:abstractNumId");
- return entry(abstractNumId, new Numbering.AbstractNum(readAbstractNumLevels(element)));
+ Numbering.AbstractNum abstractNum = new Numbering.AbstractNum(
+ readAbstractNumLevels(element),
+ element.findChildOrEmpty("w:numStyleLink").getAttributeOrNone("w:val")
+ );
+ return entry(abstractNumId, abstractNum);
}
private static Map<String, NumberingLevel> readAbstractNumLevels(XmlElement element) {