aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2015-12-31 16:49:02 +0000
committerMichael Williamson <mike@zwobble.org>2015-12-31 16:49:02 +0000
commit7bc069e050e740432f86a780e13feae99968c831 (patch)
treed494a16fd392733be3ea41529c865907b4c9f2c3 /src
parent8e74ac206058628958bd98cb6ccf91bf144793c8 (diff)
Add fallback image content types
Diffstat (limited to 'src')
-rw-r--r--src/main/java/org/zwobble/mammoth/docx/ContentTypes.java18
-rw-r--r--src/main/java/org/zwobble/mammoth/xml/XmlNodes.java4
-rw-r--r--src/test/java/org/zwobble/mammoth/tests/docx/ContentTypesXmlTests.java27
3 files changed, 48 insertions, 1 deletions
diff --git a/src/main/java/org/zwobble/mammoth/docx/ContentTypes.java b/src/main/java/org/zwobble/mammoth/docx/ContentTypes.java
index bd61763..f36ca49 100644
--- a/src/main/java/org/zwobble/mammoth/docx/ContentTypes.java
+++ b/src/main/java/org/zwobble/mammoth/docx/ContentTypes.java
@@ -1,11 +1,22 @@
package org.zwobble.mammoth.docx;
+import com.google.common.collect.ImmutableMap;
import com.google.common.io.Files;
import java.util.Map;
import java.util.Optional;
public class ContentTypes {
+ private static final Map<String, String> imageExtensions = ImmutableMap.<String, String>builder()
+ .put("png", "png")
+ .put("gif", "gif")
+ .put("jpeg", "jpeg")
+ .put("jpg", "jpeg")
+ .put("bmp", "bmp")
+ .put("tif", "tiff")
+ .put("tiff", "tiff")
+ .build();
+
private final Map<String, String> extensionDefaults;
private final Map<String, String> overrides;
@@ -19,7 +30,12 @@ public class ContentTypes {
return Optional.ofNullable(overrides.get(path));
} else {
String extension = Files.getFileExtension(path);
- return Optional.ofNullable(extensionDefaults.get(extension));
+ if (extensionDefaults.containsKey(extension)) {
+ return Optional.ofNullable(extensionDefaults.get(extension));
+ } else {
+ return Optional.ofNullable(imageExtensions.get(extension.toLowerCase()))
+ .map(imageType -> "image/" + imageType);
+ }
}
}
}
diff --git a/src/main/java/org/zwobble/mammoth/xml/XmlNodes.java b/src/main/java/org/zwobble/mammoth/xml/XmlNodes.java
index 272a710..ce36615 100644
--- a/src/main/java/org/zwobble/mammoth/xml/XmlNodes.java
+++ b/src/main/java/org/zwobble/mammoth/xml/XmlNodes.java
@@ -7,6 +7,10 @@ import java.util.List;
import java.util.Map;
public class XmlNodes {
+ public static XmlElement element(String name) {
+ return element(name, ImmutableList.of());
+ }
+
public static XmlElement element(String name, Map<String, String> attributes) {
return element(name, attributes, ImmutableList.of());
}
diff --git a/src/test/java/org/zwobble/mammoth/tests/docx/ContentTypesXmlTests.java b/src/test/java/org/zwobble/mammoth/tests/docx/ContentTypesXmlTests.java
index 573103b..51273de 100644
--- a/src/test/java/org/zwobble/mammoth/tests/docx/ContentTypesXmlTests.java
+++ b/src/test/java/org/zwobble/mammoth/tests/docx/ContentTypesXmlTests.java
@@ -39,4 +39,31 @@ public class ContentTypesXmlTests {
Optional.of("image/hat"),
contentTypes.findContentType("word/media/hat.png"));
}
+
+ @Test
+ public void fallbackContentTypesHaveCommonImageTypes() {
+ XmlElement element = element("content-types:Types");
+ ContentTypes contentTypes = readContentTypesXmlElement(element);
+ assertEquals(
+ Optional.of("image/png"),
+ contentTypes.findContentType("word/media/hat.png"));
+ assertEquals(
+ Optional.of("image/gif"),
+ contentTypes.findContentType("word/media/hat.gif"));
+ assertEquals(
+ Optional.of("image/jpeg"),
+ contentTypes.findContentType("word/media/hat.jpg"));
+ assertEquals(
+ Optional.of("image/jpeg"),
+ contentTypes.findContentType("word/media/hat.jpeg"));
+ assertEquals(
+ Optional.of("image/bmp"),
+ contentTypes.findContentType("word/media/hat.bmp"));
+ assertEquals(
+ Optional.of("image/tiff"),
+ contentTypes.findContentType("word/media/hat.tif"));
+ assertEquals(
+ Optional.of("image/tiff"),
+ contentTypes.findContentType("word/media/hat.tiff"));
+ }
}