aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/main/java/org/zwobble/mammoth/internal/InternalImageConverter.java58
-rw-r--r--src/main/java/org/zwobble/mammoth/internal/conversion/DocumentToHtml.java43
-rw-r--r--src/main/java/org/zwobble/mammoth/internal/conversion/DocumentToHtmlOptions.java21
3 files changed, 82 insertions, 40 deletions
diff --git a/src/main/java/org/zwobble/mammoth/internal/InternalImageConverter.java b/src/main/java/org/zwobble/mammoth/internal/InternalImageConverter.java
new file mode 100644
index 0000000..dee5b9d
--- /dev/null
+++ b/src/main/java/org/zwobble/mammoth/internal/InternalImageConverter.java
@@ -0,0 +1,58 @@
+package org.zwobble.mammoth.internal;
+
+import org.zwobble.mammoth.images.ImageConverter;
+import org.zwobble.mammoth.internal.documents.Image;
+import org.zwobble.mammoth.internal.html.Html;
+import org.zwobble.mammoth.internal.html.HtmlNode;
+import org.zwobble.mammoth.internal.util.PassThroughException;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+
+import static org.zwobble.mammoth.internal.util.Lists.list;
+
+public class InternalImageConverter {
+ private final ImageConverter.ImgElement imgElement;
+
+ public static InternalImageConverter imgElement(ImageConverter.ImgElement imgElement) {
+ return new InternalImageConverter(imgElement);
+ }
+
+ private InternalImageConverter(ImageConverter.ImgElement imgElement) {
+ this.imgElement = imgElement;
+ }
+
+ public List<HtmlNode> convert(Image internalImage) throws IOException {
+ // TODO: handle empty content type
+ return PassThroughException.unwrap(() -> {
+ return internalImage.getContentType()
+ .map(contentType -> {
+ org.zwobble.mammoth.images.Image image = new org.zwobble.mammoth.images.Image() {
+ @Override
+ public Optional<String> getAltText() {
+ return internalImage.getAltText();
+ }
+
+ @Override
+ public String getContentType() {
+ return contentType;
+ }
+
+ @Override
+ public InputStream getInputStream() throws IOException {
+ return internalImage.open();
+ }
+ };
+
+ Map<String, String> attributes = new HashMap<>(PassThroughException.wrap(() -> imgElement.convert(image)));
+ internalImage.getAltText().ifPresent(altText -> attributes.put("alt", altText));
+ return list(Html.element("img", attributes));
+ })
+ .orElse(list());
+ });
+ }
+}
diff --git a/src/main/java/org/zwobble/mammoth/internal/conversion/DocumentToHtml.java b/src/main/java/org/zwobble/mammoth/internal/conversion/DocumentToHtml.java
index 0f5a066..bc1c75b 100644
--- a/src/main/java/org/zwobble/mammoth/internal/conversion/DocumentToHtml.java
+++ b/src/main/java/org/zwobble/mammoth/internal/conversion/DocumentToHtml.java
@@ -1,6 +1,6 @@
package org.zwobble.mammoth.internal.conversion;
-import org.zwobble.mammoth.images.ImageConverter;
+import org.zwobble.mammoth.internal.InternalImageConverter;
import org.zwobble.mammoth.internal.documents.*;
import org.zwobble.mammoth.internal.html.Html;
import org.zwobble.mammoth.internal.html.HtmlNode;
@@ -11,16 +11,13 @@ import org.zwobble.mammoth.internal.util.Lists;
import org.zwobble.mammoth.internal.util.Maps;
import java.io.IOException;
-import java.io.InputStream;
import java.util.*;
import java.util.function.Supplier;
import static org.zwobble.mammoth.internal.util.Casts.tryCast;
import static org.zwobble.mammoth.internal.util.Iterables.findIndex;
import static org.zwobble.mammoth.internal.util.Lists.*;
-import static org.zwobble.mammoth.internal.util.Maps.mutableMap;
-import static org.zwobble.mammoth.internal.util.Maps.lookup;
-import static org.zwobble.mammoth.internal.util.Maps.map;
+import static org.zwobble.mammoth.internal.util.Maps.*;
public class DocumentToHtml {
public static InternalResult<List<HtmlNode>> convertToHtml(Document document, DocumentToHtmlOptions options) {
@@ -57,7 +54,7 @@ public class DocumentToHtml {
private final String idPrefix;
private final boolean preserveEmptyParagraphs;
private final StyleMap styleMap;
- private final ImageConverter.ImgElement imageConverter;
+ private final InternalImageConverter imageConverter;
private final Map<String, Comment> comments;
private final List<NoteReference> noteReferences = new ArrayList<>();
private final List<ReferencedComment> referencedComments = new ArrayList<>();
@@ -334,34 +331,12 @@ public class DocumentToHtml {
@Override
public List<HtmlNode> visit(Image image, Context context) {
// TODO: custom image handlers
- // TODO: handle empty content type
- return image.getContentType()
- .map(contentType -> {
- try {
- Map<String, String> attributes = new HashMap<>(imageConverter.convert(new org.zwobble.mammoth.images.Image() {
- @Override
- public Optional<String> getAltText() {
- return image.getAltText();
- }
-
- @Override
- public String getContentType() {
- return contentType;
- }
-
- @Override
- public InputStream getInputStream() throws IOException {
- return image.open();
- }
- }));
- image.getAltText().ifPresent(altText -> attributes.put("alt", altText));
- return list(Html.element("img", attributes));
- } catch (IOException exception) {
- warnings.add(exception.getMessage());
- return Lists.<HtmlNode>list();
- }
- })
- .orElse(list());
+ try {
+ return imageConverter.convert(image);
+ } catch (IOException exception) {
+ warnings.add(exception.getMessage());
+ return Lists.<HtmlNode>list();
+ }
}
}
diff --git a/src/main/java/org/zwobble/mammoth/internal/conversion/DocumentToHtmlOptions.java b/src/main/java/org/zwobble/mammoth/internal/conversion/DocumentToHtmlOptions.java
index 52b2558..4a72ae1 100644
--- a/src/main/java/org/zwobble/mammoth/internal/conversion/DocumentToHtmlOptions.java
+++ b/src/main/java/org/zwobble/mammoth/internal/conversion/DocumentToHtmlOptions.java
@@ -1,6 +1,7 @@
package org.zwobble.mammoth.internal.conversion;
import org.zwobble.mammoth.images.ImageConverter;
+import org.zwobble.mammoth.internal.InternalImageConverter;
import org.zwobble.mammoth.internal.styles.DefaultStyles;
import org.zwobble.mammoth.internal.styles.StyleMap;
import org.zwobble.mammoth.internal.styles.parsing.StyleMapParser;
@@ -16,11 +17,11 @@ public class DocumentToHtmlOptions {
StyleMap.EMPTY,
false,
false,
- image -> {
+ InternalImageConverter.imgElement(image -> {
String base64 = Base64Encoding.streamToBase64(image::getInputStream);
String src = "data:" + image.getContentType() + ";base64," + base64;
return map("src", src);
- }
+ })
);
@@ -30,7 +31,7 @@ public class DocumentToHtmlOptions {
private final StyleMap embeddedStyleMap;
private final boolean disableDefaultStyleMap;
private final boolean disableEmbeddedStyleMap;
- private final ImageConverter.ImgElement imageConverter;
+ private final InternalImageConverter imageConverter;
public DocumentToHtmlOptions(
String idPrefix,
@@ -39,7 +40,7 @@ public class DocumentToHtmlOptions {
StyleMap embeddedStyleMap,
boolean disableDefaultStyleMap,
boolean disableEmbeddedStyleMap,
- ImageConverter.ImgElement imageConverter
+ InternalImageConverter imageConverter
) {
this.idPrefix = idPrefix;
this.preserveEmptyParagraphs = preserveEmptyParagraphs;
@@ -79,7 +80,15 @@ public class DocumentToHtmlOptions {
}
public DocumentToHtmlOptions imageConverter(ImageConverter.ImgElement imageConverter) {
- return new DocumentToHtmlOptions(idPrefix, preserveEmptyParagraphs, styleMap, embeddedStyleMap, disableDefaultStyleMap, disableEmbeddedStyleMap, imageConverter);
+ return new DocumentToHtmlOptions(
+ idPrefix,
+ preserveEmptyParagraphs,
+ styleMap,
+ embeddedStyleMap,
+ disableDefaultStyleMap,
+ disableEmbeddedStyleMap,
+ InternalImageConverter.imgElement(imageConverter)
+ );
}
public String idPrefix() {
@@ -102,7 +111,7 @@ public class DocumentToHtmlOptions {
return styleMap;
}
- public ImageConverter.ImgElement imageConverter() {
+ public InternalImageConverter imageConverter() {
return imageConverter;
}
}