diff options
Diffstat (limited to 'src/main/java')
3 files changed, 36 insertions, 6 deletions
diff --git a/src/main/java/org/zwobble/mammoth/docx/ContentTypes.java b/src/main/java/org/zwobble/mammoth/docx/ContentTypes.java index 18aa8e4..bd61763 100644 --- a/src/main/java/org/zwobble/mammoth/docx/ContentTypes.java +++ b/src/main/java/org/zwobble/mammoth/docx/ContentTypes.java @@ -7,13 +7,19 @@ import java.util.Optional; public class ContentTypes { private final Map<String, String> extensionDefaults; + private final Map<String, String> overrides; - public ContentTypes(Map<String, String> extensionDefaults) { + public ContentTypes(Map<String, String> extensionDefaults, Map<String, String> overrides) { this.extensionDefaults = extensionDefaults; + this.overrides = overrides; } public Optional<String> findContentType(String path) { - String extension = Files.getFileExtension(path); - return Optional.ofNullable(extensionDefaults.get(extension)); + if (overrides.containsKey(path)) { + return Optional.ofNullable(overrides.get(path)); + } else { + String extension = Files.getFileExtension(path); + return Optional.ofNullable(extensionDefaults.get(extension)); + } } } diff --git a/src/main/java/org/zwobble/mammoth/docx/ContentTypesXml.java b/src/main/java/org/zwobble/mammoth/docx/ContentTypesXml.java index 6ecf8e2..afcc6c0 100644 --- a/src/main/java/org/zwobble/mammoth/docx/ContentTypesXml.java +++ b/src/main/java/org/zwobble/mammoth/docx/ContentTypesXml.java @@ -3,14 +3,17 @@ package org.zwobble.mammoth.docx; import org.zwobble.mammoth.xml.XmlElement; import org.zwobble.mammoth.xml.XmlElementList; -import java.util.AbstractMap; import java.util.Map; +import static com.google.common.collect.Maps.immutableEntry; import static org.zwobble.mammoth.util.MammothMaps.toMap; +import static org.zwobble.mammoth.util.MammothStrings.trimLeft; public class ContentTypesXml { public static ContentTypes readContentTypesXmlElement(XmlElement element) { - return new ContentTypes(readDefaults(element.findChildren("content-types:Default"))); + return new ContentTypes( + readDefaults(element.findChildren("content-types:Default")), + readOverrides(element.findChildren("content-types:Override"))); } private static Map<String, String> readDefaults(XmlElementList children) { @@ -18,8 +21,18 @@ public class ContentTypesXml { } private static Map.Entry<String, String> readDefault(XmlElement element) { - return new AbstractMap.SimpleImmutableEntry<>( + return immutableEntry( element.getAttribute("Extension"), element.getAttribute("ContentType")); } + + private static Map<String, String> readOverrides(XmlElementList children) { + return toMap(children, ContentTypesXml::readOverride); + } + + private static Map.Entry<String, String> readOverride(XmlElement element) { + return immutableEntry( + trimLeft(element.getAttribute("PartName"), '/'), + element.getAttribute("ContentType")); + } } diff --git a/src/main/java/org/zwobble/mammoth/util/MammothStrings.java b/src/main/java/org/zwobble/mammoth/util/MammothStrings.java new file mode 100644 index 0000000..bdd826c --- /dev/null +++ b/src/main/java/org/zwobble/mammoth/util/MammothStrings.java @@ -0,0 +1,11 @@ +package org.zwobble.mammoth.util; + +public class MammothStrings { + public static String trimLeft(String value, char character) { + int index = 0; + while (index < value.length() && value.charAt(index) == character) { + index++; + } + return value.substring(index); + } +} |
