diff options
Diffstat (limited to 'src')
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; } } |
