aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/zwobble/mammoth/Mammoth.java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2015-09-26 18:11:53 +0100
committerMichael Williamson <mike@zwobble.org>2015-09-26 18:11:53 +0100
commit6005c9dc75a8d17761d775b6a86d79892aef1a56 (patch)
treebad795608d29184bdc7ab1f2da54d42c67eeab81 /src/main/java/org/zwobble/mammoth/Mammoth.java
parent2da5b5790131faaafa5d87dd83ad388a3f38ffc2 (diff)
Add conversion of single paragraph documents
Diffstat (limited to 'src/main/java/org/zwobble/mammoth/Mammoth.java')
-rw-r--r--src/main/java/org/zwobble/mammoth/Mammoth.java50
1 files changed, 48 insertions, 2 deletions
diff --git a/src/main/java/org/zwobble/mammoth/Mammoth.java b/src/main/java/org/zwobble/mammoth/Mammoth.java
index 5a2ed17..aa3514f 100644
--- a/src/main/java/org/zwobble/mammoth/Mammoth.java
+++ b/src/main/java/org/zwobble/mammoth/Mammoth.java
@@ -1,11 +1,57 @@
package org.zwobble.mammoth;
+import java.io.File;
+import java.io.IOException;
import java.io.InputStream;
+import java.util.zip.ZipFile;
+
+import org.zwobble.mammoth.xml.XmlElement;
+import org.zwobble.mammoth.xml.XmlNodeVisitor;
+import org.zwobble.mammoth.xml.XmlParser;
+import org.zwobble.mammoth.xml.XmlTextNode;
+
+import com.google.common.base.Joiner;
+import com.google.common.base.Strings;
+import com.google.common.collect.ImmutableBiMap;
+
+import static com.google.common.collect.Iterables.transform;
+
+import lombok.val;
public class Mammoth {
- public static String convertToHtml(InputStream stream) {
- return "";
+ public static String convertToHtml(File file) {
+ try (val zipFile = new ZipFile(file)) {
+ val entry = zipFile.getEntry("word/document.xml");
+ val documentXml = parseXml(zipFile.getInputStream(entry));
+ val text = extractText(documentXml);
+ if (Strings.isNullOrEmpty(text)) {
+ return "";
+ } else {
+ return "<p>" + text + "</p>";
+ }
+ } catch (IOException e) {
+ throw new UnsupportedOperationException("Should return a result of failure");
+ }
+ }
+
+ private static XmlElement parseXml(InputStream inputStream) {
+ return new XmlParser(ImmutableBiMap.of()).parseStream(inputStream);
+ }
+
+ private static String extractText(XmlElement documentXml) {
+ return documentXml.accept(new XmlNodeVisitor<String>() {
+ @Override
+ public String visit(XmlElement element) {
+ return Joiner.on("").join(
+ transform(element.children(), child -> child.accept(this)));
+ }
+
+ @Override
+ public String Visit(XmlTextNode textNode) {
+ return textNode.getValue();
+ }
+ });
}
}