aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/zwobble/mammoth/internal/docx/Numbering.java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2021-01-09 17:25:55 +0000
committerMichael Williamson <mike@zwobble.org>2021-01-09 17:25:55 +0000
commit437a3029d872ec5f2113aa6e074567de7fd2d61f (patch)
tree1ab117b3ca019f6232d842113e45f5097107d419 /src/main/java/org/zwobble/mammoth/internal/docx/Numbering.java
parente65a011e679931377af77793fc36b671766c4118 (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.java41
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());
+ }
}