summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2014-08-05 16:36:15 +0100
committerMichael Williamson <mike@zwobble.org>2014-08-05 16:36:15 +0100
commitef76dd48d78fc715ce428e07cec2401b3bfbee74 (patch)
treec5d673054c3e6be30430ba72dfa5a64499f21c5f
parent5b82690434d0cbccfe7d58b4ba00a402c83087b3 (diff)
Add support for reading w:br
-rw-r--r--mammoth/documents.py2
-rw-r--r--mammoth/docx/document_xml.py9
-rw-r--r--tests/docx/document_xml_tests.py16
3 files changed, 27 insertions, 0 deletions
diff --git a/mammoth/documents.py b/mammoth/documents.py
index 4f67850..326fbeb 100644
--- a/mammoth/documents.py
+++ b/mammoth/documents.py
@@ -9,6 +9,7 @@ Hyperlink = dodge.data_class("Hyperlink", ["href", "children"])
Table = dodge.data_class("Table", ["children"])
TableRow = dodge.data_class("TableRow", ["children"])
TableCell = dodge.data_class("TableCell", ["children"])
+LineBreak = dodge.data_class("LineBreak", [])
class Tab(object):
pass
@@ -42,6 +43,7 @@ hyperlink = Hyperlink
table = Table
table_row = TableRow
table_cell = TableCell
+line_break = LineBreak
def numbering_level(level_index, is_ordered):
return _NumberingLevel(str(level_index), bool(is_ordered))
diff --git a/mammoth/docx/document_xml.py b/mammoth/docx/document_xml.py
index 32d655c..f96098e 100644
--- a/mammoth/docx/document_xml.py
+++ b/mammoth/docx/document_xml.py
@@ -159,6 +159,15 @@ def _create_reader(numbering, content_types, relationships, styles, docx_file):
href = relationships[relationship_id].target
return children_result.map(lambda children: documents.hyperlink(href, children))
+ @handler("w:br")
+ def br(element):
+ break_type = element.attributes.get("w:type")
+ if break_type:
+ warning = results.warning("Unsupported break type: {0}".format(break_type))
+ return results.Result(None, [warning])
+ else:
+ return results.success(documents.line_break())
+
@handler("wp:inline")
@handler("wp:anchor")
def inline(element):
diff --git a/tests/docx/document_xml_tests.py b/tests/docx/document_xml_tests.py
index 984609d..963a75f 100644
--- a/tests/docx/document_xml_tests.py
+++ b/tests/docx/document_xml_tests.py
@@ -219,6 +219,22 @@ class ReadXmlElementTests(object):
[documents.run([])],
_read_and_get_document_xml_element(element)
)
+
+
+ @istest
+ def br_is_read_as_line_break(self):
+ break_element = xml_element("w:br", {}, [])
+ result = _read_and_get_document_xml_element(break_element)
+ assert_equal(result, documents.line_break())
+
+
+ @istest
+ def warning_on_breaks_that_arent_line_breaks(self):
+ break_element = xml_element("w:br", {"w:type": "page"}, [])
+ result = read_document_xml_element(break_element)
+ expected_warning = results.warning("Unsupported break type: page")
+ assert_equal([expected_warning], result.messages)
+ assert_equal(None, result.value)
@istest