From 1db36be2c2ed7db9b1e3ec96720cd1f3f17753c2 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sun, 18 Feb 2024 13:02:48 +0000 Subject: Add support for the strict document format --- NEWS | 2 ++ mammoth/docx/office_xml.py | 16 +++++++++++++--- tests/mammoth_tests.py | 7 +++++++ tests/test-data/strict-format.docx | Bin 0 -> 11692 bytes 4 files changed, 22 insertions(+), 3 deletions(-) create mode 100644 tests/test-data/strict-format.docx diff --git a/NEWS b/NEWS index d627a85..6a3950b 100644 --- a/NEWS +++ b/NEWS @@ -6,6 +6,8 @@ * Drop support for Python 2.7, Python 3.5 and Python 3.6. +* Add support for the strict document format. + # 1.6.0 * Support merged paragraphs when revisions are tracked. diff --git a/mammoth/docx/office_xml.py b/mammoth/docx/office_xml.py index 0a6a8a8..bebd04c 100644 --- a/mammoth/docx/office_xml.py +++ b/mammoth/docx/office_xml.py @@ -3,22 +3,32 @@ from .xmlparser import parse_xml, XmlElement _namespaces = [ + # Transitional format ("w", "http://schemas.openxmlformats.org/wordprocessingml/2006/main"), + ("r", "http://schemas.openxmlformats.org/officeDocument/2006/relationships"), ("wp", "http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing"), ("a", "http://schemas.openxmlformats.org/drawingml/2006/main"), ("pic", "http://schemas.openxmlformats.org/drawingml/2006/picture"), + + # Strict format + ("w", "http://purl.oclc.org/ooxml/wordprocessingml/main"), + ("r", "http://purl.oclc.org/ooxml/officeDocument/relationships"), + ("wp", "http://purl.oclc.org/ooxml/drawingml/wordprocessingDrawing"), + ("a", "http://purl.oclc.org/ooxml/drawingml/main"), + ("pic", "http://purl.oclc.org/ooxml/drawingml/picture"), + + # Common ("content-types", "http://schemas.openxmlformats.org/package/2006/content-types"), - ("r", "http://schemas.openxmlformats.org/officeDocument/2006/relationships"), ("relationships", "http://schemas.openxmlformats.org/package/2006/relationships"), - ("v", "urn:schemas-microsoft-com:vml"), ("mc", "http://schemas.openxmlformats.org/markup-compatibility/2006"), + ("v", "urn:schemas-microsoft-com:vml"), ("office-word", "urn:schemas-microsoft-com:office:word"), ] def read(fileobj): return _collapse_alternate_content(parse_xml(fileobj, _namespaces))[0] - + def _collapse_alternate_content(node): if isinstance(node, XmlElement): diff --git a/tests/mammoth_tests.py b/tests/mammoth_tests.py index b8c6a11..36d0e83 100644 --- a/tests/mammoth_tests.py +++ b/tests/mammoth_tests.py @@ -299,6 +299,13 @@ def test_can_extract_raw_text(): assert_equal("Apple\n\nBanana\n\n", result.value) +def test_can_read_strict_format(): + with open(generate_test_path("strict-format.docx"), "rb") as fileobj: + result = mammoth.convert_to_html(fileobj=fileobj) + assert_equal([], result.messages) + assert_equal("

Test

", result.value) + + def _copy_of_test_data(path): destination = io.BytesIO() with open(generate_test_path(path), "rb") as source: diff --git a/tests/test-data/strict-format.docx b/tests/test-data/strict-format.docx new file mode 100644 index 0000000..4495720 Binary files /dev/null and b/tests/test-data/strict-format.docx differ -- cgit v1.2.3