aboutsummaryrefslogtreecommitdiff
path: root/mammoth/conversion.py
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2013-12-14 16:16:51 +0000
committerMichael Williamson <mike@zwobble.org>2013-12-14 16:16:51 +0000
commit94638afbc228c9005e302ab6bc3d16c4e3e32b1d (patch)
treebbde2adf4a67f177711e7ddef2f9704473dd88c3 /mammoth/conversion.py
parent47c7a524e001bd0d9aef872b4a12c0b8efd0d6ff (diff)
Add conversion of paragraphs using styles
Diffstat (limited to 'mammoth/conversion.py')
-rw-r--r--mammoth/conversion.py68
1 files changed, 43 insertions, 25 deletions
diff --git a/mammoth/conversion.py b/mammoth/conversion.py
index 0d6dd6d..4a4cf99 100644
--- a/mammoth/conversion.py
+++ b/mammoth/conversion.py
@@ -1,41 +1,59 @@
-from .results import Result
-from . import documents
+from . import documents, results, html_paths
+from .html_generation import HtmlGenerator, satisfy_html_path
-def convert_document_element_to_html(element):
- return _converters[type(element)](element)
-
+def convert_document_element_to_html(element, styles=None):
+ if styles is None:
+ styles = []
+ html_generator = HtmlGenerator()
+ converter = DocumentConverter(styles)
+ converter.convert_element_to_html(element, html_generator)
+ html_generator.end_all()
+ return results.success(html_generator.html_string())
-_converters = {}
+class DocumentConverter(object):
+ def __init__(self, styles):
+ self._styles = styles
+ self._converters = {
+ documents.Document: self._convert_document,
+ documents.Paragraph: self._convert_paragraph,
+ documents.Run: self._convert_run,
+ documents.Text: self._convert_text,
+ }
-def _converter(element_type):
- def add(func):
- _converters[element_type] = func
-
- return add
+ def convert_element_to_html(self, element, html_generator):
+ self._converters[type(element)](element, html_generator)
-@_converter(documents.Document)
-def convert_document(document):
- return _convert_elements_to_html(document.children)
+ def _convert_document(self, document, html_generator):
+ self._convert_elements_to_html(document.children, html_generator)
-@_converter(documents.Paragraph)
-def convert_paragraph(paragraph):
- return "<p>{0}</p>".format(_convert_elements_to_html(paragraph.children))
+ def _convert_paragraph(self, paragraph, html_generator):
+ html_path = self._find_html_path_for_paragraph(paragraph)
+ satisfy_html_path(html_generator, html_path)
+ self._convert_elements_to_html(paragraph.children, html_generator)
-@_converter(documents.Run)
-def convert_run(run):
- return _convert_elements_to_html(run.children)
+ def _convert_run(self, run, html_generator):
+ self._convert_elements_to_html(run.children, html_generator)
-@_converter(documents.Text)
-def convert_text(text):
- return text.value
+ def _convert_text(self, text, html_generator):
+ html_generator.text(text.value)
-def _convert_elements_to_html(elements):
- return "".join(map(convert_document_element_to_html, elements))
+ def _convert_elements_to_html(self, elements, html_generator):
+ for element in elements:
+ self.convert_element_to_html(element, html_generator)
+
+
+ def _find_html_path_for_paragraph(self, paragraph):
+ for style in self._styles:
+ document_matcher = style.document_matcher
+ if document_matcher.element_type == "paragraph" and document_matcher.style_name == paragraph.style_name:
+ return style.html_path
+
+ return html_paths.path([html_paths.element("p")])