From 9f91b3bb403c0cda34fa91bdbf8cb5ea22cb7525 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sat, 20 Feb 2016 15:55:36 +0000 Subject: Add paragraph matchers for numbering --- .../zwobble/mammoth/documents/NumberingLevel.java | 4 ++++ .../zwobble/mammoth/styles/ParagraphMatcher.java | 28 +++++++++++++++++----- 2 files changed, 26 insertions(+), 6 deletions(-) (limited to 'src/main/java') 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 styleId; private final Optional styleName; + private final Optional numbering; - public ParagraphMatcher(Optional styleId, Optional styleName) { + public ParagraphMatcher(Optional styleId, Optional styleName, Optional 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 required, Optional actual, BiPredicate areEqual) { + private boolean matchesNumbering(Paragraph paragraph) { + return matches(numbering, paragraph.getNumbering(), (first, second) -> + first.isOrdered() == second.isOrdered() && first.getLevelIndex().equalsIgnoreCase(second.getLevelIndex())); + } + + private boolean matches(Optional required, Optional actual, BiPredicate areEqual) { return required .map(requiredValue -> actual.map(actualValue -> areEqual.test(requiredValue, actualValue)).orElse(false)) .orElse(true); -- cgit v1.2.3