aboutsummaryrefslogtreecommitdiff
path: root/mammoth
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2013-12-14 17:25:23 +0000
committerMichael Williamson <mike@zwobble.org>2013-12-14 17:25:23 +0000
commitf5595b78f59d3f3a04c4e83702114dc2704f808a (patch)
treebb58b9fc9fc28ac81f7d96f1c48a2cbf9f09968a /mammoth
parenta5574fbb4540ca31ab0d4c639f6cd2a633e749fc (diff)
Match document matchers with numbering correctly
Diffstat (limited to 'mammoth')
-rw-r--r--mammoth/conversion.py16
-rw-r--r--mammoth/documents.py5
-rw-r--r--mammoth/docx/numbering_xml.py4
-rw-r--r--mammoth/style_reader/document_matcher_reader.py2
4 files changed, 20 insertions, 7 deletions
diff --git a/mammoth/conversion.py b/mammoth/conversion.py
index 3f30b22..87e1bf9 100644
--- a/mammoth/conversion.py
+++ b/mammoth/conversion.py
@@ -103,9 +103,7 @@ class DocumentConverter(object):
def _find_html_path(self, element, element_type, default):
for style in self._styles:
document_matcher = style.document_matcher
- if document_matcher.element_type == element_type and (
- document_matcher.style_name is None or
- document_matcher.style_name == element.style_name):
+ if _document_matcher_matches(document_matcher, element, element_type):
return style.html_path
if element.style_name is not None:
@@ -113,3 +111,15 @@ class DocumentConverter(object):
return default
+
+def _document_matcher_matches(matcher, element, element_type):
+ return (
+ matcher.element_type == element_type and (
+ matcher.style_name is None or
+ matcher.style_name == element.style_name
+ ) and (
+ element_type != "paragraph" or
+ matcher.numbering is None or
+ matcher.numbering == element.numbering
+ )
+ )
diff --git a/mammoth/documents.py b/mammoth/documents.py
index ba03e92..0f2d767 100644
--- a/mammoth/documents.py
+++ b/mammoth/documents.py
@@ -37,4 +37,7 @@ image = Image
hyperlink = Hyperlink
-NumberingLevel = collections.namedtuple("NumberingLevel", ["level_index", "is_ordered"])
+def numbering_level(level_index, is_ordered):
+ return _NumberingLevel(str(level_index), bool(is_ordered))
+
+_NumberingLevel = collections.namedtuple("NumberingLevel", ["level_index", "is_ordered"])
diff --git a/mammoth/docx/numbering_xml.py b/mammoth/docx/numbering_xml.py
index 115d812..ebac1c8 100644
--- a/mammoth/docx/numbering_xml.py
+++ b/mammoth/docx/numbering_xml.py
@@ -1,4 +1,4 @@
-from ..documents import NumberingLevel
+from ..documents import numbering_level
def read_numbering_xml_element(element):
@@ -30,7 +30,7 @@ def _read_abstract_num_level(element):
level_index = element.attributes["w:ilvl"]
num_fmt = element.find_child_or_null("w:numFmt").attributes.get("w:val")
is_ordered = num_fmt != "bullet"
- return NumberingLevel(level_index, is_ordered)
+ return numbering_level(level_index, is_ordered)
def _read_nums(element, abstract_nums):
diff --git a/mammoth/style_reader/document_matcher_reader.py b/mammoth/style_reader/document_matcher_reader.py
index fba6092..4bc7247 100644
--- a/mammoth/style_reader/document_matcher_reader.py
+++ b/mammoth/style_reader/document_matcher_reader.py
@@ -36,7 +36,7 @@ def _read_style_node(style_node):
def _read_list_node(list_node):
if list_node.children:
- return documents.NumberingLevel(
+ return documents.numbering_level(
int(list_node.children[0].children[3].text),
is_ordered=list_node.children[0].children[1].text == "ordered-list",
)