aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2016-02-14 12:58:58 +0000
committerMichael Williamson <mike@zwobble.org>2016-02-14 12:58:58 +0000
commita82d898bc1c6901749f89a905e63c9e511baae84 (patch)
tree12d5c2d6557c718fda59c43226ea97c39e72ba74
parent3eb73c4ba53dc273e9724d1b4a498502628eaf8f (diff)
Include alt text for images if available
-rw-r--r--src/main/java/org/zwobble/mammoth/DocumentConverter.java9
-rw-r--r--src/main/java/org/zwobble/mammoth/html/HtmlSelfClosingElement.java4
-rw-r--r--src/test/java/org/zwobble/mammoth/tests/DocumentConverterTests.java14
3 files changed, 26 insertions, 1 deletions
diff --git a/src/main/java/org/zwobble/mammoth/DocumentConverter.java b/src/main/java/org/zwobble/mammoth/DocumentConverter.java
index da10324..f4c15b3 100644
--- a/src/main/java/org/zwobble/mammoth/DocumentConverter.java
+++ b/src/main/java/org/zwobble/mammoth/DocumentConverter.java
@@ -1,5 +1,6 @@
package org.zwobble.mammoth;
+import com.google.common.collect.ImmutableMap;
import com.google.common.io.ByteStreams;
import org.zwobble.mammoth.documents.*;
import org.zwobble.mammoth.html.Html;
@@ -134,9 +135,15 @@ public class DocumentConverter {
return image.getContentType()
.map(contentType -> {
try {
+ ImmutableMap.Builder<String, String> attributes = ImmutableMap.builder();
+
String base64 = Base64.getEncoder().encodeToString(ByteStreams.toByteArray(image.open()));
String src = "data:" + contentType + ";base64," + base64;
- return list(Html.selfClosingElement("img", map("src", src)));
+ attributes.put("src", src);
+
+ image.getAltText().ifPresent(altText -> attributes.put("alt", altText));
+
+ return list(Html.selfClosingElement("img", attributes.build()));
} catch (IOException exception) {
// TODO: return a result with a warning
throw new RuntimeException(exception);
diff --git a/src/main/java/org/zwobble/mammoth/html/HtmlSelfClosingElement.java b/src/main/java/org/zwobble/mammoth/html/HtmlSelfClosingElement.java
index 73f4734..f8bea1d 100644
--- a/src/main/java/org/zwobble/mammoth/html/HtmlSelfClosingElement.java
+++ b/src/main/java/org/zwobble/mammoth/html/HtmlSelfClosingElement.java
@@ -11,6 +11,10 @@ public class HtmlSelfClosingElement implements HtmlNode {
this.attributes = attributes;
}
+ public Map<String, String> getAttributes() {
+ return attributes;
+ }
+
@Override
public void write(StringBuilder builder) {
builder.append("<").append(tagName);
diff --git a/src/test/java/org/zwobble/mammoth/tests/DocumentConverterTests.java b/src/test/java/org/zwobble/mammoth/tests/DocumentConverterTests.java
index 9287f74..3ae5d16 100644
--- a/src/test/java/org/zwobble/mammoth/tests/DocumentConverterTests.java
+++ b/src/test/java/org/zwobble/mammoth/tests/DocumentConverterTests.java
@@ -12,6 +12,9 @@ import java.util.Optional;
import static com.natpryce.makeiteasy.MakeItEasy.*;
import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.contains;
+import static org.hamcrest.Matchers.hasEntry;
+import static org.hamcrest.Matchers.hasProperty;
import static org.zwobble.mammoth.documents.VerticalAlignment.SUBSCRIPT;
import static org.zwobble.mammoth.documents.VerticalAlignment.SUPERSCRIPT;
import static org.zwobble.mammoth.tests.DeepReflectionMatcher.deepEquals;
@@ -149,6 +152,17 @@ public class DocumentConverterTests {
deepEquals(list(Html.selfClosingElement("img", map("src", "data:image/png;base64,YWJj")))));
}
+ @Test
+ public void imagesHaveAltTagsIfAvailable() {
+ Image image = new Image(
+ Optional.of("It's a hat"),
+ Optional.of("image/png"),
+ () -> new ByteArrayInputStream(new byte[]{97, 98, 99}));
+ assertThat(
+ convertToHtml(image),
+ contains(hasProperty("attributes", hasEntry("alt", "It's a hat"))));
+ }
+
private List<HtmlNode> convertToHtml(DocumentElement element) {
return documentConverter().convertToHtml(element);
}