diff options
| author | Michael Williamson <mike@zwobble.org> | 2019-03-17 21:44:44 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2019-03-17 21:45:09 +0000 |
| commit | f2fd5ec08b2b87278f2929d7c15c9ed71fbac8d8 (patch) | |
| tree | dfe036e0e13aa68e2173702d27a17edca0df2643 /src/main/java/org/zwobble/mammoth/internal/docx/Numbering.java | |
| parent | 4d078c3842a40d723f79a5896250ad522ebd083a (diff) | |
Follow w:numStyleLink in w:abstractNum
Diffstat (limited to 'src/main/java/org/zwobble/mammoth/internal/docx/Numbering.java')
| -rw-r--r-- | src/main/java/org/zwobble/mammoth/internal/docx/Numbering.java | 22 |
1 files changed, 18 insertions, 4 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); + } + }); } } |
