From aa9e88a3997b3aab6c66afb81369fd5c279d662a Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Mon, 28 Nov 2016 12:26:13 +0000 Subject: Read page breaks --- .../internal/conversion/DocumentToHtml.java | 8 +++++-- .../zwobble/mammoth/internal/documents/Break.java | 26 ++++++++++++++++++++++ .../internal/documents/DocumentElementVisitor.java | 2 +- .../mammoth/internal/documents/LineBreak.java | 13 ----------- .../mammoth/internal/docx/BodyXmlReader.java | 4 +++- .../tests/conversion/DocumentToHtmlTests.java | 10 ++++++++- .../zwobble/mammoth/tests/docx/BodyXmlTests.java | 18 +++++++++++---- 7 files changed, 59 insertions(+), 22 deletions(-) create mode 100644 src/main/java/org/zwobble/mammoth/internal/documents/Break.java delete mode 100644 src/main/java/org/zwobble/mammoth/internal/documents/LineBreak.java (limited to 'src') 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 visit(LineBreak lineBreak) { - return list(Html.selfClosingElement("br")); + public List 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 accept(DocumentElementVisitor 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 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 accept(DocumentElementVisitor 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,10 +197,18 @@ 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( 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 -- cgit v1.2.3