diff options
Diffstat (limited to 'src/main/java/org/zwobble/mammoth/Mammoth.java')
| -rw-r--r-- | src/main/java/org/zwobble/mammoth/Mammoth.java | 22 |
1 files changed, 18 insertions, 4 deletions
diff --git a/src/main/java/org/zwobble/mammoth/Mammoth.java b/src/main/java/org/zwobble/mammoth/Mammoth.java index d466bed..5830c6a 100644 --- a/src/main/java/org/zwobble/mammoth/Mammoth.java +++ b/src/main/java/org/zwobble/mammoth/Mammoth.java @@ -8,14 +8,13 @@ import org.zwobble.mammoth.xml.XmlElement; import java.io.File; import java.io.IOException; +import java.util.Optional; import java.util.zip.ZipFile; public class Mammoth { public static Result<String> convertToHtml(File file) { try (DocxFile zipFile = new ZippedDocxFile(new ZipFile(file))) { - XmlElement documentXml = OfficeXml.parseXml(zipFile.getInputStream("word/document.xml")); - - Styles styles = Styles.EMPTY; + Styles styles = readStyles(zipFile); Numbering numbering = Numbering.EMPTY; Relationships relationships = Relationships.EMPTY; ContentTypes contentTypes = ContentTypes.DEFAULT; @@ -32,7 +31,7 @@ public class Mammoth { fileReader), notes); // TODO: prefix String idPrefix = "document"; - return reader.readElement(documentXml) + return reader.readElement(parseOfficeXml(zipFile, "word/document.xml")) .map(nodes -> DocumentConverter.convertToHtml(idPrefix, nodes)) .map(Html::stripEmpty) .map(Html::collapse) @@ -41,4 +40,19 @@ public class Mammoth { throw new UnsupportedOperationException("Should return a result of failure"); } } + + private static Styles readStyles(DocxFile file) throws IOException { + return tryParseOfficeXml(file, "word/styles.xml") + .map(StylesXml::readStylesXmlElement) + .orElse(Styles.EMPTY); + } + + private static Optional<XmlElement> tryParseOfficeXml(DocxFile zipFile, String name) throws IOException { + return zipFile.tryGetInputStream(name).map(OfficeXml::parseXml); + } + + private static XmlElement parseOfficeXml(DocxFile zipFile, String name) throws IOException { + return tryParseOfficeXml(zipFile, name) + .orElseThrow(() -> new IOException("Missing entry in file: " + name)); + } } |
