aboutsummaryrefslogtreecommitdiff
path: root/mammoth/docx/__init__.py
diff options
context:
space:
mode:
Diffstat (limited to 'mammoth/docx/__init__.py')
-rw-r--r--mammoth/docx/__init__.py31
1 files changed, 24 insertions, 7 deletions
diff --git a/mammoth/docx/__init__.py b/mammoth/docx/__init__.py
index 47e7a21..8fb150a 100644
--- a/mammoth/docx/__init__.py
+++ b/mammoth/docx/__init__.py
@@ -7,39 +7,56 @@ from .relationships_xml import read_relationships_xml_element, Relationships
from .numbering_xml import read_numbering_xml_element, Numbering
from .styles_xml import read_styles_xml_element
from .notes_xml import create_footnotes_reader, create_endnotes_reader
+from .comments_xml import create_comments_reader
from .files import Files
from . import body_xml, office_xml
from ..zips import open_zip
+_empty_result = results.success([])
+
+
def read(fileobj):
zip_file = open_zip(fileobj, "r")
body_readers = _body_readers(getattr(fileobj, "name", None), zip_file)
- return _read_notes(zip_file, body_readers).bind(lambda notes:
- _read_document(zip_file, body_readers, notes))
+ return results.combine([
+ _read_notes(zip_file, body_readers),
+ _read_comments(zip_file, body_readers),
+ ]).bind(lambda referents:
+ _read_document(zip_file, body_readers, notes=referents[0], comments=referents[1])
+ )
def _read_notes(zip_file, body_readers):
- empty_result = results.success([])
-
read_footnotes_xml = create_footnotes_reader(body_readers("footnotes"))
footnotes = _try_read_entry_or_default(
- zip_file, "word/footnotes.xml", read_footnotes_xml, default=empty_result)
+ zip_file, "word/footnotes.xml", read_footnotes_xml, default=_empty_result)
read_endnotes_xml = create_endnotes_reader(body_readers("endnotes"))
endnotes = _try_read_entry_or_default(
- zip_file, "word/endnotes.xml", read_endnotes_xml, default=empty_result)
+ zip_file, "word/endnotes.xml", read_endnotes_xml, default=_empty_result)
return results.combine([footnotes, endnotes]).map(lists.flatten)
+
+
+def _read_comments(zip_file, body_readers):
+ return _try_read_entry_or_default(
+ zip_file,
+ "word/comments.xml",
+ create_comments_reader(body_readers("comments")),
+ default=_empty_result,
+ )
+
-def _read_document(zip_file, body_readers, notes):
+def _read_document(zip_file, body_readers, notes, comments):
with zip_file.open("word/document.xml") as document_fileobj:
document_xml = office_xml.read(document_fileobj)
return read_document_xml_element(
document_xml,
body_reader=body_readers("document"),
notes=notes,
+ comments=comments,
)