From a5574fbb4540ca31ab0d4c639f6cd2a633e749fc Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sat, 14 Dec 2013 16:53:02 +0000 Subject: Allow custom image conversion --- mammoth/conversion.py | 10 +++++----- tests/conversion_tests.py | 11 +++++++++++ 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/mammoth/conversion.py b/mammoth/conversion.py index 635b57c..3f30b22 100644 --- a/mammoth/conversion.py +++ b/mammoth/conversion.py @@ -5,18 +5,18 @@ from . import documents, results, html_paths from .html_generation import HtmlGenerator, satisfy_html_path -def convert_document_element_to_html(element, styles=None): +def convert_document_element_to_html(element, styles=None, convert_image=None): if styles is None: styles = [] html_generator = HtmlGenerator() - converter = DocumentConverter(styles) - converter.convert_element_to_html(element, html_generator) + converter = DocumentConverter(styles, convert_image=convert_image) + converter.convert_element_to_html(element, html_generator,) html_generator.end_all() return results.Result(html_generator.html_string(), converter.messages) class DocumentConverter(object): - def __init__(self, styles): + def __init__(self, styles, convert_image): self.messages = [] self._styles = styles self._converters = { @@ -26,7 +26,7 @@ class DocumentConverter(object): documents.Text: self._convert_text, documents.Hyperlink: self._convert_hyperlink, documents.Tab: self._convert_tab, - documents.Image: self._convert_image, + documents.Image: convert_image or self._convert_image, } diff --git a/tests/conversion_tests.py b/tests/conversion_tests.py index 5088288..4732991 100644 --- a/tests/conversion_tests.py +++ b/tests/conversion_tests.py @@ -131,5 +131,16 @@ def images_have_alt_tags_if_available(): assert_equal('It\'s a hat', result.value) +@istest +def can_define_custom_conversion_for_images(): + def convert_image(image, html_generator): + with image.open() as image_file: + html_generator.self_closing("img", {"alt": image_file.read()}) + + image = documents.image(alt_text=None, content_type="image/png", open=lambda: io.BytesIO("abc")) + result = convert_document_element_to_html(image, convert_image=convert_image) + assert_equal('abc', result.value) + + def _run_with_text(text): return documents.run(children=[documents.text(text)]) -- cgit v1.2.3