aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mammoth/conversion.py10
-rw-r--r--tests/conversion_tests.py11
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('<img src="data:image/png;base64,YWJj" alt="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('<img alt="abc" />', result.value)
+
+
def _run_with_text(text):
return documents.run(children=[documents.text(text)])