aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2016-11-28 12:26:13 +0000
committerMichael Williamson <mike@zwobble.org>2016-11-28 12:26:13 +0000
commitaa9e88a3997b3aab6c66afb81369fd5c279d662a (patch)
tree77b3a295c3fe3b79fc197103ee10e7add9c7be7c /src
parentc1398251e1946f2449a920642a7304b570838378 (diff)
Read page breaks
Diffstat (limited to 'src')
-rw-r--r--src/main/java/org/zwobble/mammoth/internal/conversion/DocumentToHtml.java8
-rw-r--r--src/main/java/org/zwobble/mammoth/internal/documents/Break.java26
-rw-r--r--src/main/java/org/zwobble/mammoth/internal/documents/DocumentElementVisitor.java2
-rw-r--r--src/main/java/org/zwobble/mammoth/internal/documents/LineBreak.java13
-rw-r--r--src/main/java/org/zwobble/mammoth/internal/docx/BodyXmlReader.java4
-rw-r--r--src/test/java/org/zwobble/mammoth/tests/conversion/DocumentToHtmlTests.java10
-rw-r--r--src/test/java/org/zwobble/mammoth/tests/docx/BodyXmlTests.java18
7 files changed, 59 insertions, 22 deletions
diff --git a/src/main/java/org/zwobble/mammoth/internal/conversion/DocumentToHtml.java b/src/main/java/org/zwobble/mammoth/internal/conversion/DocumentToHtml.java
index b22742c..e88688a 100644
--- a/src/main/java/org/zwobble/mammoth/internal/conversion/DocumentToHtml.java
+++ b/src/main/java/org/zwobble/mammoth/internal/conversion/DocumentToHtml.java
@@ -186,8 +186,12 @@ public class DocumentToHtml {
}
@Override
- public List<HtmlNode> visit(LineBreak lineBreak) {
- return list(Html.selfClosingElement("br"));
+ public List<HtmlNode> visit(Break breakElement) {
+ if (breakElement.getType() == Break.Type.LINE) {
+ return list(Html.selfClosingElement("br"));
+ } else {
+ return list();
+ }
}
@Override
diff --git a/src/main/java/org/zwobble/mammoth/internal/documents/Break.java b/src/main/java/org/zwobble/mammoth/internal/documents/Break.java
new file mode 100644
index 0000000..9076d21
--- /dev/null
+++ b/src/main/java/org/zwobble/mammoth/internal/documents/Break.java
@@ -0,0 +1,26 @@
+package org.zwobble.mammoth.internal.documents;
+
+public class Break implements DocumentElement {
+ public enum Type {
+ LINE,
+ PAGE
+ }
+
+ public static final Break LINE_BREAK = new Break(Type.LINE);
+ public static final Break PAGE_BREAK = new Break(Type.PAGE);
+
+ private final Type type;
+
+ private Break(Type type) {
+ this.type = type;
+ }
+
+ public Type getType() {
+ return type;
+ }
+
+ @Override
+ public <T> T accept(DocumentElementVisitor<T> visitor) {
+ return visitor.visit(this);
+ }
+}
diff --git a/src/main/java/org/zwobble/mammoth/internal/documents/DocumentElementVisitor.java b/src/main/java/org/zwobble/mammoth/internal/documents/DocumentElementVisitor.java
index e087746..c83e3c5 100644
--- a/src/main/java/org/zwobble/mammoth/internal/documents/DocumentElementVisitor.java
+++ b/src/main/java/org/zwobble/mammoth/internal/documents/DocumentElementVisitor.java
@@ -6,7 +6,7 @@ public interface DocumentElementVisitor<T> {
T visit(Text text);
T visit(Tab tab);
- T visit(LineBreak lineBreak);
+ T visit(Break lineBreak);
T visit(Table table);
T visit(TableRow tableRow);
diff --git a/src/main/java/org/zwobble/mammoth/internal/documents/LineBreak.java b/src/main/java/org/zwobble/mammoth/internal/documents/LineBreak.java
deleted file mode 100644
index 00b2a06..0000000
--- a/src/main/java/org/zwobble/mammoth/internal/documents/LineBreak.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package org.zwobble.mammoth.internal.documents;
-
-public class LineBreak implements DocumentElement {
- public static final LineBreak LINE_BREAK = new LineBreak();
-
- private LineBreak() {
- }
-
- @Override
- public <T> T accept(DocumentElementVisitor<T> visitor) {
- return visitor.visit(this);
- }
-}
diff --git a/src/main/java/org/zwobble/mammoth/internal/docx/BodyXmlReader.java b/src/main/java/org/zwobble/mammoth/internal/docx/BodyXmlReader.java
index ba09182..35f4aa1 100644
--- a/src/main/java/org/zwobble/mammoth/internal/docx/BodyXmlReader.java
+++ b/src/main/java/org/zwobble/mammoth/internal/docx/BodyXmlReader.java
@@ -243,7 +243,9 @@ public class BodyXmlReader {
private ReadResult readBreak(XmlElement element) {
String breakType = element.getAttributeOrNone("w:type").orElse("");
if (breakType.equals("")) {
- return success(LineBreak.LINE_BREAK);
+ return success(Break.LINE_BREAK);
+ } else if (breakType.equals("page")) {
+ return success(Break.PAGE_BREAK);
} else {
return ReadResult.emptyWithWarning("Unsupported break type: " + breakType);
}
diff --git a/src/test/java/org/zwobble/mammoth/tests/conversion/DocumentToHtmlTests.java b/src/test/java/org/zwobble/mammoth/tests/conversion/DocumentToHtmlTests.java
index b144b78..c93460e 100644
--- a/src/test/java/org/zwobble/mammoth/tests/conversion/DocumentToHtmlTests.java
+++ b/src/test/java/org/zwobble/mammoth/tests/conversion/DocumentToHtmlTests.java
@@ -197,11 +197,19 @@ public class DocumentToHtmlTests {
@Test
public void lineBreakIsConvertedToBreakElement() {
assertThat(
- convertToHtml(LineBreak.LINE_BREAK),
+ convertToHtml(Break.LINE_BREAK),
deepEquals(list(Html.selfClosingElement("br"))));
}
@Test
+ public void breaksThatAreNotLineBreaksAreIgnored() {
+ assertThat(
+ convertToHtml(Break.PAGE_BREAK),
+ deepEquals(list())
+ );
+ }
+
+ @Test
public void tableIsConvertedToHtmlTable() {
assertThat(
convertToHtml(new Table(list(
diff --git a/src/test/java/org/zwobble/mammoth/tests/docx/BodyXmlTests.java b/src/test/java/org/zwobble/mammoth/tests/docx/BodyXmlTests.java
index 05ea9f0..1206c41 100644
--- a/src/test/java/org/zwobble/mammoth/tests/docx/BodyXmlTests.java
+++ b/src/test/java/org/zwobble/mammoth/tests/docx/BodyXmlTests.java
@@ -348,21 +348,31 @@ public class BodyXmlTests {
}
@Test
- public void brIsReadAsLineBreak() {
+ public void brWithoutExplicitTypeIsReadAsLineBreak() {
XmlElement element = element("w:br");
assertThat(
readSuccess(bodyReader(), element),
- equalTo(LineBreak.LINE_BREAK));
+ equalTo(Break.LINE_BREAK));
}
@Test
- public void warningOnBreaksThatArentLineBreaks() {
+ public void brWithPageTypeIsReadAsPageBreak() {
XmlElement element = element("w:br", map("w:type", "page"));
assertThat(
+ readSuccess(bodyReader(), element),
+ equalTo(Break.PAGE_BREAK)
+ );
+ }
+
+ @Test
+ public void warningOnBreaksThatArentLineBreaks() {
+ XmlElement element = element("w:br", map("w:type", "column"));
+
+ assertThat(
readAll(bodyReader(), element),
- isInternalResult(equalTo(list()), list("Unsupported break type: page")));
+ isInternalResult(equalTo(list()), list("Unsupported break type: column")));
}
@Test