diff options
Diffstat (limited to 'src/main/java')
4 files changed, 74 insertions, 11 deletions
diff --git a/src/main/java/org/zwobble/mammoth/styles/ParagraphMatcher.java b/src/main/java/org/zwobble/mammoth/styles/ParagraphMatcher.java new file mode 100644 index 0000000..715ac94 --- /dev/null +++ b/src/main/java/org/zwobble/mammoth/styles/ParagraphMatcher.java @@ -0,0 +1,42 @@ +package org.zwobble.mammoth.styles; + +import org.zwobble.mammoth.documents.Paragraph; +import org.zwobble.mammoth.documents.Style; + +import java.util.Optional; + +public class ParagraphMatcher { + public static ParagraphMatcher styleId(String styleId) { + return new ParagraphMatcher(Optional.of(styleId), Optional.empty()); + } + + public static ParagraphMatcher styleName(String styleName) { + return new ParagraphMatcher(Optional.empty(), Optional.of(styleName)); + } + + private final Optional<String> styleId; + private final Optional<String> styleName; + + public ParagraphMatcher(Optional<String> styleId, Optional<String> styleName) { + this.styleId = styleId; + this.styleName = styleName; + } + + public boolean matches(Paragraph paragraph) { + return matchesStyleId(paragraph) && matchesStyleName(paragraph); + } + + private boolean matchesStyleId(Paragraph paragraph) { + return matches(styleId, paragraph.getStyle().map(Style::getStyleId)); + } + + private boolean matchesStyleName(Paragraph paragraph) { + return matches(styleName, paragraph.getStyle().flatMap(Style::getName)); + } + + private boolean matches(Optional<String> required, Optional<String> actual) { + return required + .map(requiredValue -> actual.map(requiredValue::equals).orElse(false)) + .orElse(true); + } +} diff --git a/src/main/java/org/zwobble/mammoth/styles/StyleMap.java b/src/main/java/org/zwobble/mammoth/styles/StyleMap.java index 237a20e..e498246 100644 --- a/src/main/java/org/zwobble/mammoth/styles/StyleMap.java +++ b/src/main/java/org/zwobble/mammoth/styles/StyleMap.java @@ -1,9 +1,9 @@ package org.zwobble.mammoth.styles; +import com.google.common.collect.Iterables; import org.zwobble.mammoth.documents.Paragraph; -import java.util.Map; -import java.util.Optional; +import java.util.List; public class StyleMap { public static StyleMapBuilder builder() { @@ -14,9 +14,9 @@ public class StyleMap { private final HtmlPath underline; private final HtmlPath strikethrough; - private final Map<String, HtmlPath> paragraphStyles; + private final List<StyleMapping> paragraphStyles; - public StyleMap(HtmlPath underline, HtmlPath strikethrough, Map<String, HtmlPath> paragraphStyles) { + public StyleMap(HtmlPath underline, HtmlPath strikethrough, List<StyleMapping> paragraphStyles) { this.underline = underline; this.strikethrough = strikethrough; this.paragraphStyles = paragraphStyles; @@ -31,8 +31,8 @@ public class StyleMap { } public HtmlPath getParagraphStyleMapping(Paragraph paragraph) { - return paragraph.getStyle() - .flatMap(style -> Optional.ofNullable(paragraphStyles.get(style.getStyleId()))) - .orElse(HtmlPath.element("p")); + return Iterables.tryFind(paragraphStyles, styleMapping -> styleMapping.matches(paragraph)) + .transform(StyleMapping::getHtmlPath) + .or(HtmlPath.element("p")); } } diff --git a/src/main/java/org/zwobble/mammoth/styles/StyleMapBuilder.java b/src/main/java/org/zwobble/mammoth/styles/StyleMapBuilder.java index 98ae351..b33e0db 100644 --- a/src/main/java/org/zwobble/mammoth/styles/StyleMapBuilder.java +++ b/src/main/java/org/zwobble/mammoth/styles/StyleMapBuilder.java @@ -1,11 +1,11 @@ package org.zwobble.mammoth.styles; -import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ImmutableList; public class StyleMapBuilder { private HtmlPath underline; private HtmlPath strikethrough; - private final ImmutableMap.Builder<String, HtmlPath> paragraphStyles = ImmutableMap.builder(); + private final ImmutableList.Builder<StyleMapping> paragraphStyles = ImmutableList.builder(); public StyleMapBuilder() { this.underline = HtmlPath.EMPTY; @@ -22,8 +22,8 @@ public class StyleMapBuilder { return this; } - public StyleMapBuilder mapParagraph(String styleId, HtmlPath path) { - paragraphStyles.put(styleId, path); + public StyleMapBuilder mapParagraph(ParagraphMatcher paragraphMatcher, HtmlPath path) { + paragraphStyles.add(new StyleMapping(paragraphMatcher, path)); return this; } diff --git a/src/main/java/org/zwobble/mammoth/styles/StyleMapping.java b/src/main/java/org/zwobble/mammoth/styles/StyleMapping.java new file mode 100644 index 0000000..59abb84 --- /dev/null +++ b/src/main/java/org/zwobble/mammoth/styles/StyleMapping.java @@ -0,0 +1,21 @@ +package org.zwobble.mammoth.styles; + +import org.zwobble.mammoth.documents.Paragraph; + +public class StyleMapping { + private final ParagraphMatcher matcher; + private final HtmlPath htmlPath; + + public StyleMapping(ParagraphMatcher matcher, HtmlPath htmlPath) { + this.matcher = matcher; + this.htmlPath = htmlPath; + } + + public boolean matches(Paragraph paragraph) { + return matcher.matches(paragraph); + } + + public HtmlPath getHtmlPath() { + return htmlPath; + } +} |
