diff options
Diffstat (limited to 'src/main/java/org/zwobble')
| -rw-r--r-- | src/main/java/org/zwobble/mammoth/internal/docx/Numbering.java | 22 | ||||
| -rw-r--r-- | src/main/java/org/zwobble/mammoth/internal/docx/NumberingXml.java | 8 |
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) { |
