aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mammoth/docx.py19
-rw-r--r--tests/docx_tests.py8
2 files changed, 23 insertions, 4 deletions
diff --git a/mammoth/docx.py b/mammoth/docx.py
index 2f383dd..bf4de0b 100644
--- a/mammoth/docx.py
+++ b/mammoth/docx.py
@@ -47,17 +47,24 @@ def run(element):
@handler("w:p")
def paragraph(element):
- return documents.paragraph(_read_xml_elements(element.children))
+ properties = _find_child(element, "w:pPr")
+ if properties is None:
+ style_name = None
+ else:
+ style_name = _find_child(properties, "w:pStyle").attributes.get("w:val")
+
+ children = _read_xml_elements(element.children)
+ return documents.paragraph(children, style_name)
@handler("w:body")
-def paragraph(element):
+def body(element):
return _read_xml_elements(element.children)
@handler("w:document")
-def paragraph(element):
- body_element = _find(lambda child: child.name == "w:body", element.children)
+def document(element):
+ body_element = _find_child(element, "w:body")
return documents.Document(_read_xml_elements(body_element.children))
@@ -67,6 +74,10 @@ def _find(predicate, iterable):
return item
+def _find_child(element, name):
+ return _find(lambda child: child.name == name, element.children)
+
+
def _read_xml_elements(elements):
return filter(None, map(read_xml_element, elements))
diff --git a/tests/docx_tests.py b/tests/docx_tests.py
index 80253fa..792ff14 100644
--- a/tests/docx_tests.py
+++ b/tests/docx_tests.py
@@ -55,6 +55,14 @@ class ReadXmlElementTests(object):
def paragraph_has_no_style_if_it_has_no_properties(self):
element = xml_element("w:p")
assert_equal(None, docx.read_xml_element(element).style_name)
+
+ @istest
+ def paragraph_has_style_name_read_from_paragraph_properties_if_present(self):
+ style_xml = xml_element("w:pStyle", {"w:val": "Heading1"})
+ properties_xml = xml_element("w:pPr", {}, [style_xml])
+ paragraph_xml = xml_element("w:p", {}, [properties_xml])
+ paragraph = docx.read_xml_element(paragraph_xml)
+ assert_equal("Heading1", paragraph.style_name)
@istest
def unrecognised_elements_are_ignored(self):