From 519dfddb18eea15c26d0d8d8da68e1cebd865c39 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Wed, 11 Feb 2015 20:27:25 +0000 Subject: Read bookmarks --- mammoth/documents.py | 2 ++ mammoth/docx/document_xml.py | 9 +++++++++ tests/docx/document_xml_tests.py | 16 ++++++++++++++-- 3 files changed, 25 insertions(+), 2 deletions(-) diff --git a/mammoth/documents.py b/mammoth/documents.py index 9028b03..0e96c05 100644 --- a/mammoth/documents.py +++ b/mammoth/documents.py @@ -58,6 +58,8 @@ image = Image def hyperlink(children, href=None, anchor=None): return Hyperlink(href, anchor, children) + +bookmark = Bookmark = dodge.data_class("Bookmark", ["name"]) table = Table diff --git a/mammoth/docx/document_xml.py b/mammoth/docx/document_xml.py index 56298f3..8bfdd6f 100644 --- a/mammoth/docx/document_xml.py +++ b/mammoth/docx/document_xml.py @@ -186,6 +186,15 @@ def _create_reader(numbering, content_types, relationships, styles, note_element else: return children_result + @handler("w:bookmarkStart") + def bookmark_start(element): + name = element.attributes.get("w:name") + if name == "_GoBack": + return results.success(None) + else: + return results.success(documents.bookmark(name)) + + @handler("w:br") def br(element): break_type = element.attributes.get("w:type") diff --git a/tests/docx/document_xml_tests.py b/tests/docx/document_xml_tests.py index 12fcef2..eecedf6 100644 --- a/tests/docx/document_xml_tests.py +++ b/tests/docx/document_xml_tests.py @@ -239,7 +239,19 @@ class ReadXmlElementTests(object): [documents.run([])], _read_and_get_document_xml_element(element) ) - + + @istest + def go_back_bookmark_is_ignored(self): + element = xml_element("w:bookmarkStart", {"w:name": "_GoBack"}) + assert_equal(None, _read_and_get_document_xml_element(element)) + + @istest + def bookmark_start_is_read_if_name_is_not_go_back(self): + element = xml_element("w:bookmarkStart", {"w:name": "start"}) + assert_equal( + documents.bookmark("start"), + _read_and_get_document_xml_element(element) + ) @istest def br_is_read_as_line_break(self): @@ -373,7 +385,7 @@ class ReadXmlElementTests(object): @istest def ignored_elements_are_ignored_without_message(self): - element = xml_element("w:bookmarkStart") + element = xml_element("w:bookmarkEnd") result = read_document_xml_element(element) assert_equal(None, result.value) assert_equal([], result.messages) -- cgit v1.2.3