From f1fde50666d283ff34acf00faaa2ff194915e899 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sun, 6 Jul 2014 17:37:10 +0100 Subject: Read tables from docx files --- mammoth/docx/document_xml.py | 18 ++++++++++++++++++ tests/docx/document_xml_tests.py | 23 ++++++++++++++++++++++- 2 files changed, 40 insertions(+), 1 deletion(-) diff --git a/mammoth/docx/document_xml.py b/mammoth/docx/document_xml.py index 247bcbc..125b35e 100644 --- a/mammoth/docx/document_xml.py +++ b/mammoth/docx/document_xml.py @@ -119,6 +119,24 @@ def _create_reader(numbering, content_types, relationships, styles, docx_file): return results.success(documents.tab()) + @handler("w:tbl") + def table(element): + return _read_xml_elements(element.children) \ + .map(documents.table) + + + @handler("w:tr") + def table(element): + return _read_xml_elements(element.children) \ + .map(documents.table_row) + + + @handler("w:tc") + def table(element): + return _read_xml_elements(element.children) \ + .map(documents.table_cell) + + @handler("w:ins") @handler("w:smartTag") @handler("w:drawing") diff --git a/tests/docx/document_xml_tests.py b/tests/docx/document_xml_tests.py index 5c73cc3..133726c 100644 --- a/tests/docx/document_xml_tests.py +++ b/tests/docx/document_xml_tests.py @@ -143,7 +143,28 @@ class ReadXmlElementTests(object): element = xml_element("w:tab") tab = _read_and_get_document_xml_element(element) assert_equal(documents.tab(), tab) - + + + @istest + def word_table_is_read_as_document_table_element(self): + element = xml_element("w:tbl", {}, [ + xml_element("w:tr", {}, [ + xml_element("w:tc", {}, [ + xml_element("w:p", {}, []) + ]), + ]), + ]) + table = _read_and_get_document_xml_element(element) + expected_result = documents.table([ + documents.table_row([ + documents.table_cell([ + documents.paragraph([]) + ]) + ]) + ]) + assert_equal(expected_result, table) + + @istest def children_of_w_ins_are_converted_normally(self): element = xml_element("w:p", {}, [ -- cgit v1.2.3