aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2025-08-03 07:58:40 +0100
committerMichael Williamson <mike@zwobble.org>2025-08-03 07:58:40 +0100
commitbb0ff1066ea8f890f98092244d1b489ceab7c80e (patch)
tree139c662711a1cb46be5e979215c266c2537226bc
parentcbca9920da21f00110153175481472c56ec92436 (diff)
Unify flow for storing styles
-rw-r--r--mammoth/docx/styles_xml.py24
-rw-r--r--tests/docx/numbering_xml_tests.py4
2 files changed, 19 insertions, 9 deletions
diff --git a/mammoth/docx/styles_xml.py b/mammoth/docx/styles_xml.py
index 937f852..0b3f39d 100644
--- a/mammoth/docx/styles_xml.py
+++ b/mammoth/docx/styles_xml.py
@@ -56,17 +56,19 @@ def read_styles_xml_element(element):
"paragraph": paragraph_styles,
"character": character_styles,
"table": table_styles,
+ "numbering": numbering_styles,
}
for style_element in element.find_children("w:style"):
- style = _read_style_element(style_element)
element_type = style_element.attributes["w:type"]
if element_type == "numbering":
- numbering_styles[style.style_id] = _read_numbering_style_element(style_element)
+ style = _read_numbering_style_element(style_element)
else:
- style_set = styles.get(element_type)
- if style_set is not None:
- style_set[style.style_id] = style
+ style = _read_style_element(style_element)
+
+ style_set = styles.get(element_type)
+ if style_set is not None:
+ style_set[style.style_id] = style
return Styles(
paragraph_styles=paragraph_styles,
@@ -80,19 +82,25 @@ Style = collections.namedtuple("Style", ["style_id", "name"])
def _read_style_element(element):
- style_id = element.attributes["w:styleId"]
+ style_id = _read_style_id(element)
name = element.find_child_or_null("w:name").attributes.get("w:val")
return Style(style_id=style_id, name=name)
-NumberingStyle = collections.namedtuple("NumberingStyle", ["num_id"])
+NumberingStyle = collections.namedtuple("NumberingStyle", ["style_id", "num_id"])
def _read_numbering_style_element(element):
+ style_id = _read_style_id(element)
+
num_id = element \
.find_child_or_null("w:pPr") \
.find_child_or_null("w:numPr") \
.find_child_or_null("w:numId") \
.attributes.get("w:val")
- return NumberingStyle(num_id=num_id)
+ return NumberingStyle(style_id=style_id, num_id=num_id)
+
+
+def _read_style_id(element):
+ return element.attributes["w:styleId"]
diff --git a/tests/docx/numbering_xml_tests.py b/tests/docx/numbering_xml_tests.py
index 1fb4c63..6f1e447 100644
--- a/tests/docx/numbering_xml_tests.py
+++ b/tests/docx/numbering_xml_tests.py
@@ -90,7 +90,9 @@ def test_when_abstract_num_has_num_style_link_then_style_is_used_to_find_num():
xml_element("w:abstractNumId", {"w:val": "101"}),
])
]),
- styles=Styles.create(numbering_styles={"List1": NumberingStyle(num_id="200")}),
+ styles=Styles.create(numbering_styles={
+ "List1": NumberingStyle(style_id="List1", num_id="200"),
+ }),
)
assert_equal(True, numbering.find_level("201", "0").is_ordered)