From f2fd5ec08b2b87278f2929d7c15c9ed71fbac8d8 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sun, 17 Mar 2019 21:44:44 +0000 Subject: Follow w:numStyleLink in w:abstractNum --- .../zwobble/mammoth/internal/docx/Numbering.java | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) (limited to 'src/main/java/org/zwobble/mammoth/internal/docx/Numbering.java') 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 levels; + private final Optional numStyleLink; - public AbstractNum(Map levels) { + public AbstractNum(Map levels, Optional 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 abstractNums; private final Map nums; + private final Styles styles; public Numbering( Map abstractNums, - Map nums + Map nums, + Styles styles ) { this.abstractNums = abstractNums; this.nums = nums; + this.styles = styles; } public Optional 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); + } + }); } } -- cgit v1.2.3