diff --git a/markdownify/__init__.py b/markdownify/__init__.py index 3272ce5..07f7cfc 100644 --- a/markdownify/__init__.py +++ b/markdownify/__init__.py @@ -2,6 +2,7 @@ from textwrap import fill import re import six +from urllib.parse import urlparse convert_heading_re = re.compile(r'convert_h(\d+)') @@ -104,6 +105,7 @@ class DefaultOptions: sup_symbol = '' wrap = False wrap_width = 80 + base_url = None class Options(DefaultOptions): pass @@ -340,6 +342,16 @@ def convert_img(self, el, text, convert_as_inline): src = el.attrs.get('src', None) or '' title = el.attrs.get('title', None) or '' title_part = ' "%s"' % title.replace('"', r'\"') if title else '' + + if not src.startswith(('http://', 'https://', 'data:')): + if self.options['base_url']: + if src.startswith('/'): + parsed_url = urlparse(self.options['base_url']) + base_path = f"{parsed_url.scheme}://{parsed_url.netloc}" + src = f"{base_path}{src}" + else: + src = f"{self.options['base_url'].rstrip('/')}/{src.lstrip('/')}" + if (convert_as_inline and el.parent.name not in self.options['keep_inline_images_in']): return alt diff --git a/tests/test_conversions.py b/tests/test_conversions.py index 2283c29..0d15ca8 100644 --- a/tests/test_conversions.py +++ b/tests/test_conversions.py @@ -306,6 +306,14 @@ def callback(el): assert md('
test\n foo\nbar
', code_language_callback=callback) == '\n```javascript\ntest\n foo\nbar\n```\n'
assert md('test\n foo\nbar
', code_language_callback=callback) == '\n```javascript\ntest\n foo\nbar\n```\n'
+def test_img():
+ assert md('a b
c d
') == '\n\na b\n\nc d\n\n'