aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2016-02-20 15:55:36 +0000
committerMichael Williamson <mike@zwobble.org>2016-02-20 15:55:36 +0000
commit9f91b3bb403c0cda34fa91bdbf8cb5ea22cb7525 (patch)
tree18c3e91cca011b83c08018956aaac98940d90b77 /src/main/java/org
parentf61e177abb96034353572e5c32df0a8ae671a4d5 (diff)
Add paragraph matchers for numbering
Diffstat (limited to 'src/main/java/org')
-rw-r--r--src/main/java/org/zwobble/mammoth/documents/NumberingLevel.java4
-rw-r--r--src/main/java/org/zwobble/mammoth/styles/ParagraphMatcher.java28
2 files changed, 26 insertions, 6 deletions
diff --git a/src/main/java/org/zwobble/mammoth/documents/NumberingLevel.java b/src/main/java/org/zwobble/mammoth/documents/NumberingLevel.java
index cdbb0c4..9baa3fc 100644
--- a/src/main/java/org/zwobble/mammoth/documents/NumberingLevel.java
+++ b/src/main/java/org/zwobble/mammoth/documents/NumberingLevel.java
@@ -5,6 +5,10 @@ public class NumberingLevel {
return new NumberingLevel(levelIndex, true);
}
+ public static NumberingLevel unordered(String levelIndex) {
+ return new NumberingLevel(levelIndex, false);
+ }
+
private final String levelIndex;
private final boolean isOrdered;
diff --git a/src/main/java/org/zwobble/mammoth/styles/ParagraphMatcher.java b/src/main/java/org/zwobble/mammoth/styles/ParagraphMatcher.java
index 3a6432d..5ce1512 100644
--- a/src/main/java/org/zwobble/mammoth/styles/ParagraphMatcher.java
+++ b/src/main/java/org/zwobble/mammoth/styles/ParagraphMatcher.java
@@ -1,5 +1,6 @@
package org.zwobble.mammoth.styles;
+import org.zwobble.mammoth.documents.NumberingLevel;
import org.zwobble.mammoth.documents.Paragraph;
import org.zwobble.mammoth.documents.Style;
@@ -7,26 +8,36 @@ import java.util.Optional;
import java.util.function.BiPredicate;
public class ParagraphMatcher {
- public static final ParagraphMatcher ANY = new ParagraphMatcher(Optional.empty(), Optional.empty());
+ public static final ParagraphMatcher ANY = new ParagraphMatcher(Optional.empty(), Optional.empty(), Optional.empty());
public static ParagraphMatcher styleId(String styleId) {
- return new ParagraphMatcher(Optional.of(styleId), Optional.empty());
+ return new ParagraphMatcher(Optional.of(styleId), Optional.empty(), Optional.empty());
}
public static ParagraphMatcher styleName(String styleName) {
- return new ParagraphMatcher(Optional.empty(), Optional.of(styleName));
+ return new ParagraphMatcher(Optional.empty(), Optional.of(styleName), Optional.empty());
+ }
+
+ public static ParagraphMatcher orderedList(String level) {
+ return new ParagraphMatcher(Optional.empty(), Optional.empty(), Optional.of(NumberingLevel.ordered(level)));
+ }
+
+ public static ParagraphMatcher unorderedList(String level) {
+ return new ParagraphMatcher(Optional.empty(), Optional.empty(), Optional.of(NumberingLevel.unordered(level)));
}
private final Optional<String> styleId;
private final Optional<String> styleName;
+ private final Optional<NumberingLevel> numbering;
- public ParagraphMatcher(Optional<String> styleId, Optional<String> styleName) {
+ public ParagraphMatcher(Optional<String> styleId, Optional<String> styleName, Optional<NumberingLevel> numbering) {
this.styleId = styleId;
this.styleName = styleName;
+ this.numbering = numbering;
}
public boolean matches(Paragraph paragraph) {
- return matchesStyleId(paragraph) && matchesStyleName(paragraph);
+ return matchesStyleId(paragraph) && matchesStyleName(paragraph) && matchesNumbering(paragraph);
}
private boolean matchesStyleId(Paragraph paragraph) {
@@ -37,7 +48,12 @@ public class ParagraphMatcher {
return matches(styleName, paragraph.getStyle().flatMap(Style::getName), String::equalsIgnoreCase);
}
- private boolean matches(Optional<String> required, Optional<String> actual, BiPredicate<String, String> areEqual) {
+ private boolean matchesNumbering(Paragraph paragraph) {
+ return matches(numbering, paragraph.getNumbering(), (first, second) ->
+ first.isOrdered() == second.isOrdered() && first.getLevelIndex().equalsIgnoreCase(second.getLevelIndex()));
+ }
+
+ private <T> boolean matches(Optional<T> required, Optional<T> actual, BiPredicate<T, T> areEqual) {
return required
.map(requiredValue -> actual.map(actualValue -> areEqual.test(requiredValue, actualValue)).orElse(false))
.orElse(true);