From 6c4a8ccebb22e910c60fe75b0cff790b9e2fa1b5 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Wed, 31 Aug 2022 21:46:48 +0100 Subject: Move InternalImageConverter to conversion package --- .../conversion/InternalImageConverter.java | 58 ++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 src/main/java/org/zwobble/mammoth/internal/conversion/InternalImageConverter.java (limited to 'src/main/java/org/zwobble/mammoth/internal/conversion/InternalImageConverter.java') diff --git a/src/main/java/org/zwobble/mammoth/internal/conversion/InternalImageConverter.java b/src/main/java/org/zwobble/mammoth/internal/conversion/InternalImageConverter.java new file mode 100644 index 0000000..3aad8e8 --- /dev/null +++ b/src/main/java/org/zwobble/mammoth/internal/conversion/InternalImageConverter.java @@ -0,0 +1,58 @@ +package org.zwobble.mammoth.internal.conversion; + +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 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 getAltText() { + return internalImage.getAltText(); + } + + @Override + public String getContentType() { + return contentType; + } + + @Override + public InputStream getInputStream() throws IOException { + return internalImage.open(); + } + }; + + Map attributes = new HashMap<>(PassThroughException.wrap(() -> imgElement.convert(image))); + internalImage.getAltText().ifPresent(altText -> attributes.put("alt", altText)); + return list(Html.element("img", attributes)); + }) + .orElse(list()); + }); + } +} -- cgit v1.2.3