diff options
| author | Michael Williamson <mike@zwobble.org> | 2021-01-09 17:25:55 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2021-01-09 17:25:55 +0000 |
| commit | 437a3029d872ec5f2113aa6e074567de7fd2d61f (patch) | |
| tree | 1ab117b3ca019f6232d842113e45f5097107d419 /src/main/java/org/zwobble/mammoth/internal/docx/Numbering.java | |
| parent | e65a011e679931377af77793fc36b671766c4118 (diff) | |
Support numbering defined by paragraph style
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 | 41 |
1 files changed, 38 insertions, 3 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 90ea5c1..8d29393 100644 --- a/src/main/java/org/zwobble/mammoth/internal/docx/Numbering.java +++ b/src/main/java/org/zwobble/mammoth/internal/docx/Numbering.java @@ -4,21 +4,47 @@ import org.zwobble.mammoth.internal.documents.NumberingLevel; import java.util.Map; import java.util.Optional; +import java.util.stream.Collectors; import static org.zwobble.mammoth.internal.util.Maps.lookup; import static org.zwobble.mammoth.internal.util.Maps.map; public class Numbering { + public static class AbstractNum { - private final Map<String, NumberingLevel> levels; + private final Map<String, AbstractNumLevel> levels; private final Optional<String> numStyleLink; - public AbstractNum(Map<String, NumberingLevel> levels, Optional<String> numStyleLink) { + public AbstractNum(Map<String, AbstractNumLevel> levels, Optional<String> numStyleLink) { this.levels = levels; this.numStyleLink = numStyleLink; } } + public static class AbstractNumLevel { + public static AbstractNumLevel ordered(String levelIndex) { + return new AbstractNumLevel(levelIndex, true, Optional.empty()); + } + + public static AbstractNumLevel unordered(String levelIndex) { + return new AbstractNumLevel(levelIndex, false, Optional.empty()); + } + + private final String levelIndex; + private final boolean isOrdered; + private final Optional<String> paragraphStyleId; + + public AbstractNumLevel(String levelIndex, boolean isOrdered, Optional<String> paragraphStyleId) { + this.levelIndex = levelIndex; + this.isOrdered = isOrdered; + this.paragraphStyleId = paragraphStyleId; + } + + public NumberingLevel toNumberingLevel() { + return new NumberingLevel(levelIndex, isOrdered); + } + } + public static class Num { private final Optional<String> abstractNumId; @@ -30,6 +56,7 @@ public class Numbering { public static final Numbering EMPTY = new Numbering(map(), map(), Styles.EMPTY); private final Map<String, AbstractNum> abstractNums; + private final Map<String, AbstractNumLevel> levelsByParagraphStyleId; private final Map<String, Num> nums; private final Styles styles; @@ -39,6 +66,10 @@ public class Numbering { Styles styles ) { this.abstractNums = abstractNums; + this.levelsByParagraphStyleId = abstractNums.values().stream() + .flatMap(abstractNum -> abstractNum.levels.values().stream()) + .filter(level -> level.paragraphStyleId.isPresent()) + .collect(Collectors.toMap(level -> level.paragraphStyleId.get(), level -> level)); this.nums = nums; this.styles = styles; } @@ -54,8 +85,12 @@ public class Numbering { .flatMap(style -> style.getNumId()) .flatMap(linkedNumId -> findLevel(linkedNumId, level)); } else { - return lookup(abstractNum.levels, level); + return lookup(abstractNum.levels, level).map(value -> value.toNumberingLevel()); } }); } + + public Optional<NumberingLevel> findLevelByParagraphStyleId(String styleId) { + return lookup(levelsByParagraphStyleId, styleId).map(value -> value.toNumberingLevel()); + } } |
