aboutsummaryrefslogtreecommitdiff
path: root/src/main
diff options
context:
space:
mode:
Diffstat (limited to 'src/main')
-rw-r--r--src/main/java/org/zwobble/mammoth/styles/ParagraphMatcher.java42
-rw-r--r--src/main/java/org/zwobble/mammoth/styles/StyleMap.java14
-rw-r--r--src/main/java/org/zwobble/mammoth/styles/StyleMapBuilder.java8
-rw-r--r--src/main/java/org/zwobble/mammoth/styles/StyleMapping.java21
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;
+ }
+}