aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/zwobble
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2016-02-24 09:04:14 +0000
committerMichael Williamson <mike@zwobble.org>2016-02-24 09:04:14 +0000
commit8dd12c1ca7703a085b57fe4c5c35ef6e19d92134 (patch)
tree2e2c47733e868a6a0deadceed8b1c564643bb2cc /src/main/java/org/zwobble
parent9903fc49d41142934012a5ec2bf16d80f0cf4b16 (diff)
Allow style maps to be added
Diffstat (limited to 'src/main/java/org/zwobble')
-rw-r--r--src/main/java/org/zwobble/mammoth/Mammoth.java6
-rw-r--r--src/main/java/org/zwobble/mammoth/internal/DocumentConverter.java4
-rw-r--r--src/main/java/org/zwobble/mammoth/internal/DocumentToHtmlOptions.java9
-rw-r--r--src/main/java/org/zwobble/mammoth/internal/styles/StyleMap.java23
-rw-r--r--src/main/java/org/zwobble/mammoth/internal/styles/StyleMapBuilder.java14
-rw-r--r--src/main/java/org/zwobble/mammoth/internal/util/MammothOptionals.java8
6 files changed, 47 insertions, 17 deletions
diff --git a/src/main/java/org/zwobble/mammoth/Mammoth.java b/src/main/java/org/zwobble/mammoth/Mammoth.java
index b8dac98..d7f5679 100644
--- a/src/main/java/org/zwobble/mammoth/Mammoth.java
+++ b/src/main/java/org/zwobble/mammoth/Mammoth.java
@@ -31,7 +31,7 @@ public class Mammoth {
private final DocumentToHtmlOptions options;
public Mammoth() {
- this(DocumentToHtmlOptions.DEFAULT.styleMap(DefaultStyles.DEFAULT_STYLE_MAP));
+ this(DocumentToHtmlOptions.DEFAULT.addStyleMap(DefaultStyles.DEFAULT_STYLE_MAP));
}
private Mammoth(DocumentToHtmlOptions options) {
@@ -46,6 +46,10 @@ public class Mammoth {
return new Mammoth(options.preserveEmptyParagraphs());
}
+ public Mammoth addStyleMap(String styleMap) {
+ return new Mammoth(options.addStyleMap(styleMap));
+ }
+
public Result<String> convertToHtml(InputStream stream) throws IOException {
return withDocxFile(stream, zipFile ->
convertToHtml(Optional.empty(), zipFile));
diff --git a/src/main/java/org/zwobble/mammoth/internal/DocumentConverter.java b/src/main/java/org/zwobble/mammoth/internal/DocumentConverter.java
index ab28651..4e5dc05 100644
--- a/src/main/java/org/zwobble/mammoth/internal/DocumentConverter.java
+++ b/src/main/java/org/zwobble/mammoth/internal/DocumentConverter.java
@@ -114,10 +114,10 @@ public class DocumentConverter {
public List<HtmlNode> visit(Run run) {
List<HtmlNode> nodes = convertChildrenToHtml(run);
if (run.isStrikethrough()) {
- nodes = styleMap.getStrikethrough().wrap(nodes);
+ nodes = styleMap.getStrikethrough().orElse(HtmlPath.collapsibleElement("s")).wrap(nodes);
}
if (run.isUnderline()) {
- nodes = styleMap.getUnderline().wrap(nodes);
+ nodes = styleMap.getUnderline().orElse(HtmlPath.EMPTY).wrap(nodes);
}
if (run.getVerticalAlignment() == VerticalAlignment.SUBSCRIPT) {
nodes = list(Html.collapsibleElement("sub", nodes));
diff --git a/src/main/java/org/zwobble/mammoth/internal/DocumentToHtmlOptions.java b/src/main/java/org/zwobble/mammoth/internal/DocumentToHtmlOptions.java
index f7cbf0d..4cd6372 100644
--- a/src/main/java/org/zwobble/mammoth/internal/DocumentToHtmlOptions.java
+++ b/src/main/java/org/zwobble/mammoth/internal/DocumentToHtmlOptions.java
@@ -1,6 +1,7 @@
package org.zwobble.mammoth.internal;
import org.zwobble.mammoth.internal.styles.StyleMap;
+import org.zwobble.mammoth.internal.styles.parsing.StyleMapParser;
public class DocumentToHtmlOptions {
public static final DocumentToHtmlOptions DEFAULT = new DocumentToHtmlOptions("", false, StyleMap.EMPTY);
@@ -23,8 +24,12 @@ public class DocumentToHtmlOptions {
return new DocumentToHtmlOptions(idPrefix, true, styleMap);
}
- public DocumentToHtmlOptions styleMap(StyleMap styleMap) {
- return new DocumentToHtmlOptions(idPrefix, preserveEmptyParagraphs, styleMap);
+ public DocumentToHtmlOptions addStyleMap(String styleMap) {
+ return addStyleMap(StyleMapParser.parse(styleMap));
+ }
+
+ public DocumentToHtmlOptions addStyleMap(StyleMap styleMap) {
+ return new DocumentToHtmlOptions(idPrefix, preserveEmptyParagraphs, this.styleMap.update(styleMap));
}
public String idPrefix() {
diff --git a/src/main/java/org/zwobble/mammoth/internal/styles/StyleMap.java b/src/main/java/org/zwobble/mammoth/internal/styles/StyleMap.java
index 7d28bf1..b181074 100644
--- a/src/main/java/org/zwobble/mammoth/internal/styles/StyleMap.java
+++ b/src/main/java/org/zwobble/mammoth/internal/styles/StyleMap.java
@@ -3,6 +3,8 @@ package org.zwobble.mammoth.internal.styles;
import com.google.common.collect.Iterables;
import org.zwobble.mammoth.internal.documents.Paragraph;
import org.zwobble.mammoth.internal.documents.Run;
+import org.zwobble.mammoth.internal.util.MammothLists;
+import org.zwobble.mammoth.internal.util.MammothOptionals;
import java.util.List;
import java.util.Optional;
@@ -14,14 +16,14 @@ public class StyleMap {
public static final StyleMap EMPTY = new StyleMapBuilder().build();
- private final HtmlPath underline;
- private final HtmlPath strikethrough;
+ private final Optional<HtmlPath> underline;
+ private final Optional<HtmlPath> strikethrough;
private final List<StyleMapping<Paragraph>> paragraphStyles;
private final List<StyleMapping<Run>> runStyles;
public StyleMap(
- HtmlPath underline,
- HtmlPath strikethrough,
+ Optional<HtmlPath> underline,
+ Optional<HtmlPath> strikethrough,
List<StyleMapping<Paragraph>> paragraphStyles,
List<StyleMapping<Run>> runStyles)
{
@@ -31,11 +33,20 @@ public class StyleMap {
this.runStyles = runStyles;
}
- public HtmlPath getUnderline() {
+ public StyleMap update(StyleMap styleMap) {
+ // TODO: add appropriate tests
+ return new StyleMap(
+ MammothOptionals.first(styleMap.underline, underline),
+ MammothOptionals.first(styleMap.strikethrough, strikethrough),
+ MammothLists.concat(styleMap.paragraphStyles, paragraphStyles),
+ MammothLists.concat(styleMap.runStyles, runStyles));
+ }
+
+ public Optional<HtmlPath> getUnderline() {
return underline;
}
- public HtmlPath getStrikethrough() {
+ public Optional<HtmlPath> getStrikethrough() {
return strikethrough;
}
diff --git a/src/main/java/org/zwobble/mammoth/internal/styles/StyleMapBuilder.java b/src/main/java/org/zwobble/mammoth/internal/styles/StyleMapBuilder.java
index 6300d29..ae7140e 100644
--- a/src/main/java/org/zwobble/mammoth/internal/styles/StyleMapBuilder.java
+++ b/src/main/java/org/zwobble/mammoth/internal/styles/StyleMapBuilder.java
@@ -4,24 +4,26 @@ import com.google.common.collect.ImmutableList;
import org.zwobble.mammoth.internal.documents.Paragraph;
import org.zwobble.mammoth.internal.documents.Run;
+import java.util.Optional;
+
public class StyleMapBuilder {
- private HtmlPath underline;
- private HtmlPath strikethrough;
+ private Optional<HtmlPath> underline;
+ private Optional<HtmlPath> strikethrough;
private final ImmutableList.Builder<StyleMapping<Paragraph>> paragraphStyles = ImmutableList.builder();
private final ImmutableList.Builder<StyleMapping<Run>> runStyles = ImmutableList.builder();
public StyleMapBuilder() {
- this.underline = HtmlPath.EMPTY;
- this.strikethrough = HtmlPath.collapsibleElement("s");
+ this.underline = Optional.empty();
+ this.strikethrough = Optional.empty();
}
public StyleMapBuilder underline(HtmlPath path) {
- this.underline = path;
+ this.underline = Optional.of(path);
return this;
}
public StyleMapBuilder strikethrough(HtmlPath path) {
- this.strikethrough = path;
+ this.strikethrough = Optional.of(path);
return this;
}
diff --git a/src/main/java/org/zwobble/mammoth/internal/util/MammothOptionals.java b/src/main/java/org/zwobble/mammoth/internal/util/MammothOptionals.java
index b94a168..6f2c100 100644
--- a/src/main/java/org/zwobble/mammoth/internal/util/MammothOptionals.java
+++ b/src/main/java/org/zwobble/mammoth/internal/util/MammothOptionals.java
@@ -4,6 +4,14 @@ import java.util.Optional;
import java.util.function.BiFunction;
public class MammothOptionals {
+ public static <T> Optional<T> first(Optional<T> first, Optional<T> second) {
+ if (first.isPresent()) {
+ return first;
+ } else {
+ return second;
+ }
+ }
+
public static <T1, T2, R> Optional<R> flatMap(
Optional<T1> first,
Optional<T2> second,