Skip to content

Commit c7f091b

Browse files
author
Tom Keefe
committed
wrap headers/footers in semantic elements, refactor visit_document
1 parent 68657ab commit c7f091b

File tree

2 files changed

+44
-27
lines changed

2 files changed

+44
-27
lines changed

mammoth/conversion.py

Lines changed: 41 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -95,28 +95,13 @@ def visit_image(self, image, context):
9595
return []
9696

9797
def visit_document(self, document, context):
98+
headers = self.visit_headers(document.headers, context)
9899
nodes = self._visit_all(document.children, context)
100+
notes_list = self.visit_notes(document.notes, context)
101+
comments = self.visit_comments(context)
102+
footers = self.visit_footers(document.footers, context)
99103

100-
headers = []
101-
footers = []
102-
103-
if self._include_headers_and_footers:
104-
headers = self.visit_headers(document.headers, context)
105-
footers = self.visit_footers(document.footers, context)
106-
107-
notes = [
108-
document.notes.resolve(reference)
109-
for reference in self._note_references
110-
]
111-
notes_list = html.element("ol", {}, self._visit_all(notes, context))
112-
113-
comments = html.element("dl", {}, [
114-
html_node
115-
for referenced_comment in self._referenced_comments
116-
for html_node in self.visit_comment(referenced_comment, context)
117-
])
118-
119-
return headers + nodes + [notes_list, comments] + footers
104+
return headers + nodes + [notes_list, comments] + footers
120105

121106

122107
def visit_paragraph(self, paragraph, context):
@@ -282,6 +267,12 @@ def visit_note(self, note, context):
282267
html.element("li", {"id": self._note_html_id(note)}, note_body)
283268
]
284269

270+
def visit_notes(self, notes, context):
271+
resolved_notes = [
272+
notes.resolve(reference)
273+
for reference in self._note_references
274+
]
275+
return html.element("ol", {}, self._visit_all(resolved_notes, context))
285276

286277
def visit_comment_reference(self, reference, context):
287278
def nodes():
@@ -325,18 +316,31 @@ def visit_comment(self, referenced_comment, context):
325316
html.element("dd", {}, body),
326317
]
327318

319+
def visit_comments(self, context):
320+
return html.element("dl", {}, [
321+
html_node
322+
for referenced_comment in self._referenced_comments
323+
for html_node in self.visit_comment(referenced_comment, context)
324+
])
325+
328326
def visit_header(self, header, context):
329327
return self._visit_all(header.children, context)
330328

331329
def visit_headers(self, headers, context):
330+
if not self._include_headers_and_footers:
331+
return []
332+
332333
all_headers = [
333334
html_node
334335
for h in headers
335336
for html_node in self.visit_header(h, context)
336337
]
337338

338339
if not self._deduplicate_headers_and_footers:
339-
return all_headers
340+
return [
341+
html.element("header", {}, [h])
342+
for h in headers
343+
]
340344

341345
header_values = set()
342346
filtered_headers = []
@@ -345,29 +349,41 @@ def visit_headers(self, headers, context):
345349
filtered_headers.append(h)
346350
header_values.add(h.to_text())
347351

348-
return filtered_headers
352+
return [
353+
html.element("header", {}, [f])
354+
for f in filtered_headers
355+
]
349356

350357
def visit_footer(self, footer, context):
351358
return self._visit_all(footer.children, context)
352359

353360
def visit_footers(self, footers, context):
361+
if not self._include_headers_and_footers:
362+
return []
363+
354364
all_footers = [
355365
html_node
356366
for f in footers
357367
for html_node in self.visit_footer(f, context)
358368
]
359369

360370
if not self._deduplicate_headers_and_footers:
361-
return all_footers
371+
return [
372+
html.element("footer", {}, [f])
373+
for f in all_footers
374+
]
362375

363376
footer_values = set()
364377
filtered_footers = []
365378
for h in all_footers:
366379
if not h.to_text() in footer_values:
367380
filtered_footers.append(h)
368381
footer_values.add(h.to_text())
369-
370-
return filtered_footers
382+
383+
return [
384+
html.element("footer", {}, [f])
385+
for f in filtered_footers
386+
]
371387

372388
def _visit_all(self, elements, context):
373389
return [

mammoth/results.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,10 +33,11 @@ def combine(results):
3333
for result in results:
3434
if isinstance(result, list):
3535
values.append([r.value for r in result])
36+
for r in result:
37+
messages.extend(r.messages)
3638
else:
3739
values.append(result.value)
38-
for message in result.messages:
39-
messages.append(message)
40+
messages.extend(result.messages)
4041

4142
return Result(values, messages)
4243

0 commit comments

Comments
 (0)