diff options
| author | Michael Williamson <mike@zwobble.org> | 2016-11-19 12:34:19 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2016-11-19 12:34:19 +0000 |
| commit | ff3faffc9fcf75370bc6955ce833b9a486edb11b (patch) | |
| tree | 4c7d062e69e43d7553d51475218faca7511094d4 /src | |
| parent | 8adbeb0f41d22431f660cacdbada7205d2a84489 (diff) | |
Introduce StringMatcher for style names
Diffstat (limited to 'src')
7 files changed, 51 insertions, 18 deletions
diff --git a/src/main/java/org/zwobble/mammoth/internal/styles/DocumentElementMatching.java b/src/main/java/org/zwobble/mammoth/internal/styles/DocumentElementMatching.java index a0c5aec..568a1a5 100644 --- a/src/main/java/org/zwobble/mammoth/internal/styles/DocumentElementMatching.java +++ b/src/main/java/org/zwobble/mammoth/internal/styles/DocumentElementMatching.java @@ -6,7 +6,7 @@ import java.util.Optional; import java.util.function.BiPredicate; class DocumentElementMatching { - static boolean matchesStyle(Optional<String> styleId, Optional<String> styleName, Optional<Style> style) { + static boolean matchesStyle(Optional<String> styleId, Optional<StringMatcher> styleName, Optional<Style> style) { return matchesStyleId(styleId, style) && matchesStyleName(styleName, style); } @@ -14,11 +14,11 @@ class DocumentElementMatching { return matches(styleId, style.map(Style::getStyleId), Object::equals); } - private static boolean matchesStyleName(Optional<String> styleName, Optional<Style> style) { - return matches(styleName, style.flatMap(Style::getName), String::equalsIgnoreCase); + private static boolean matchesStyleName(Optional<StringMatcher> styleName, Optional<Style> style) { + return matches(styleName, style.flatMap(Style::getName), StringMatcher::matches); } - static <T> boolean matches(Optional<T> required, Optional<T> actual, BiPredicate<T, T> areEqual) { + static <T, U> boolean matches(Optional<T> required, Optional<U> actual, BiPredicate<T, U> areEqual) { return required .map(requiredValue -> actual.map(actualValue -> areEqual.test(requiredValue, actualValue)).orElse(false)) .orElse(true); diff --git a/src/main/java/org/zwobble/mammoth/internal/styles/EqualToStringMatcher.java b/src/main/java/org/zwobble/mammoth/internal/styles/EqualToStringMatcher.java new file mode 100644 index 0000000..8c48c7e --- /dev/null +++ b/src/main/java/org/zwobble/mammoth/internal/styles/EqualToStringMatcher.java @@ -0,0 +1,14 @@ +package org.zwobble.mammoth.internal.styles; + +public class EqualToStringMatcher implements StringMatcher { + private final String value; + + public EqualToStringMatcher(String value) { + this.value = value; + } + + @Override + public boolean matches(String value) { + return this.value.equalsIgnoreCase(value); + } +} diff --git a/src/main/java/org/zwobble/mammoth/internal/styles/ParagraphMatcher.java b/src/main/java/org/zwobble/mammoth/internal/styles/ParagraphMatcher.java index 50d5df9..82f2a78 100644 --- a/src/main/java/org/zwobble/mammoth/internal/styles/ParagraphMatcher.java +++ b/src/main/java/org/zwobble/mammoth/internal/styles/ParagraphMatcher.java @@ -13,7 +13,7 @@ public class ParagraphMatcher implements DocumentElementMatcher<Paragraph> { } public static ParagraphMatcher styleName(String styleName) { - return new ParagraphMatcher(Optional.empty(), Optional.of(styleName), Optional.empty()); + return new ParagraphMatcher(Optional.empty(), Optional.of(new EqualToStringMatcher(styleName)), Optional.empty()); } public static ParagraphMatcher orderedList(String level) { @@ -25,10 +25,10 @@ public class ParagraphMatcher implements DocumentElementMatcher<Paragraph> { } private final Optional<String> styleId; - private final Optional<String> styleName; + private final Optional<StringMatcher> styleName; private final Optional<NumberingLevel> numbering; - public ParagraphMatcher(Optional<String> styleId, Optional<String> styleName, Optional<NumberingLevel> numbering) { + public ParagraphMatcher(Optional<String> styleId, Optional<StringMatcher> styleName, Optional<NumberingLevel> numbering) { this.styleId = styleId; this.styleName = styleName; this.numbering = numbering; diff --git a/src/main/java/org/zwobble/mammoth/internal/styles/RunMatcher.java b/src/main/java/org/zwobble/mammoth/internal/styles/RunMatcher.java index 93b50dd..55a6bb0 100644 --- a/src/main/java/org/zwobble/mammoth/internal/styles/RunMatcher.java +++ b/src/main/java/org/zwobble/mammoth/internal/styles/RunMatcher.java @@ -12,13 +12,13 @@ public class RunMatcher implements DocumentElementMatcher<Run> { } public static RunMatcher styleName(String styleName) { - return new RunMatcher(Optional.empty(), Optional.of(styleName)); + return new RunMatcher(Optional.empty(), Optional.of(new EqualToStringMatcher(styleName))); } private final Optional<String> styleId; - private final Optional<String> styleName; + private final Optional<StringMatcher> styleName; - public RunMatcher(Optional<String> styleId, Optional<String> styleName) { + public RunMatcher(Optional<String> styleId, Optional<StringMatcher> styleName) { this.styleId = styleId; this.styleName = styleName; } diff --git a/src/main/java/org/zwobble/mammoth/internal/styles/StringMatcher.java b/src/main/java/org/zwobble/mammoth/internal/styles/StringMatcher.java new file mode 100644 index 0000000..917abd2 --- /dev/null +++ b/src/main/java/org/zwobble/mammoth/internal/styles/StringMatcher.java @@ -0,0 +1,5 @@ +package org.zwobble.mammoth.internal.styles; + +public interface StringMatcher { + boolean matches(String value); +} diff --git a/src/main/java/org/zwobble/mammoth/internal/styles/parsing/DocumentMatcherParser.java b/src/main/java/org/zwobble/mammoth/internal/styles/parsing/DocumentMatcherParser.java index 94004f0..ff96a55 100644 --- a/src/main/java/org/zwobble/mammoth/internal/styles/parsing/DocumentMatcherParser.java +++ b/src/main/java/org/zwobble/mammoth/internal/styles/parsing/DocumentMatcherParser.java @@ -1,10 +1,7 @@ package org.zwobble.mammoth.internal.styles.parsing; import org.zwobble.mammoth.internal.documents.NumberingLevel; -import org.zwobble.mammoth.internal.styles.HtmlPath; -import org.zwobble.mammoth.internal.styles.ParagraphMatcher; -import org.zwobble.mammoth.internal.styles.RunMatcher; -import org.zwobble.mammoth.internal.styles.StyleMapBuilder; +import org.zwobble.mammoth.internal.styles.*; import java.math.BigInteger; import java.util.Optional; @@ -37,14 +34,14 @@ public class DocumentMatcherParser { public static ParagraphMatcher parseParagraphMatcher(TokenIterator<TokenType> tokens) { Optional<String> styleId = parseStyleId(tokens); - Optional<String> styleName = parseStyleName(tokens); + Optional<StringMatcher> styleName = parseStyleName(tokens); Optional<NumberingLevel> numbering = parseNumbering(tokens); return new ParagraphMatcher(styleId, styleName, numbering); } public static RunMatcher parseRunMatcher(TokenIterator<TokenType> tokens) { Optional<String> styleId = parseStyleId(tokens); - Optional<String> styleName = parseStyleName(tokens); + Optional<StringMatcher> styleName = parseStyleName(tokens); return new RunMatcher(styleId, styleName); } @@ -52,13 +49,13 @@ public class DocumentMatcherParser { return TokenParser.parseClassName(tokens); } - private static Optional<String> parseStyleName(TokenIterator<TokenType> tokens) { + private static Optional<StringMatcher> parseStyleName(TokenIterator<TokenType> tokens) { if (tokens.trySkip(TokenType.SYMBOL, "[")) { tokens.skip(TokenType.IDENTIFIER, "style-name"); tokens.skip(TokenType.SYMBOL, "="); String value = TokenParser.parseString(tokens); tokens.skip(TokenType.SYMBOL, "]"); - return Optional.of(value); + return Optional.of(new EqualToStringMatcher(value)); } else { return Optional.empty(); } diff --git a/src/test/java/org/zwobble/mammoth/tests/styles/EqualToStringMatcherTests.java b/src/test/java/org/zwobble/mammoth/tests/styles/EqualToStringMatcherTests.java new file mode 100644 index 0000000..7168a24 --- /dev/null +++ b/src/test/java/org/zwobble/mammoth/tests/styles/EqualToStringMatcherTests.java @@ -0,0 +1,17 @@ +package org.zwobble.mammoth.tests.styles; + +import org.junit.Test; +import org.zwobble.mammoth.internal.styles.EqualToStringMatcher; +import org.zwobble.mammoth.internal.styles.StringMatcher; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.equalTo; + +public class EqualToStringMatcherTests { + @Test + public void isCaseInsensitive() { + StringMatcher matcher = new EqualToStringMatcher("Heading 1"); + assertThat(matcher.matches("heaDING 1"), equalTo(true)); + assertThat(matcher.matches("heaDING 2"), equalTo(false)); + } +} |
