diff options
| author | Michael Williamson <mike@zwobble.org> | 2013-12-14 16:16:51 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2013-12-14 16:16:51 +0000 |
| commit | 94638afbc228c9005e302ab6bc3d16c4e3e32b1d (patch) | |
| tree | bbde2adf4a67f177711e7ddef2f9704473dd88c3 /mammoth/conversion.py | |
| parent | 47c7a524e001bd0d9aef872b4a12c0b8efd0d6ff (diff) | |
Add conversion of paragraphs using styles
Diffstat (limited to 'mammoth/conversion.py')
| -rw-r--r-- | mammoth/conversion.py | 68 |
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")]) |
