diff options
author | Waylan Limberg <waylan.limberg@icloud.com> | 2020-07-01 09:41:28 -0400 |
---|---|---|
committer | Waylan Limberg <waylan.limberg@icloud.com> | 2020-07-01 09:48:51 -0400 |
commit | a4b6ec9fcea353dd6f1c509ad6834aa6fd10564d (patch) | |
tree | 3677a421d32937d7a51d8875d6ce61c8f59009cf | |
parent | 2164c4b4752b9061c742326ea0413719333058fc (diff) | |
download | python-markdown-a4b6ec9fcea353dd6f1c509ad6834aa6fd10564d.tar.gz |
Support short reference image links.
Fixes #894.
-rw-r--r-- | docs/change_log/release-3.3.md | 1 | ||||
-rw-r--r-- | markdown/inlinepatterns.py | 11 | ||||
-rw-r--r-- | tests/test_syntax/inline/test_images.py | 24 |
3 files changed, 36 insertions, 0 deletions
diff --git a/docs/change_log/release-3.3.md b/docs/change_log/release-3.3.md index 0e0bb89..897308c 100644 --- a/docs/change_log/release-3.3.md +++ b/docs/change_log/release-3.3.md @@ -70,6 +70,7 @@ The following new features have been included in the 3.3 release: The following bug fixes are included in the 3.3 release: +* Support short reference image links (#894). * Avoid a `RecursionError` from deeply nested blockquotes (#799). * Fix issues with complex emphasis (#979). * Fix unescaping of HTML characters `<>` in CodeHilite (#990). diff --git a/markdown/inlinepatterns.py b/markdown/inlinepatterns.py index 0655047..1d0a7e1 100644 --- a/markdown/inlinepatterns.py +++ b/markdown/inlinepatterns.py @@ -84,6 +84,9 @@ def build_inlinepatterns(md, **kwargs): inlinePatterns.register( ShortReferenceInlineProcessor(REFERENCE_RE, md), 'short_reference', 130 ) + inlinePatterns.register( + ShortImageReferenceInlineProcessor(IMAGE_REFERENCE_RE, md), 'short_image_ref', 125 + ) inlinePatterns.register(AutolinkInlineProcessor(AUTOLINK_RE, md), 'autolink', 120) inlinePatterns.register(AutomailInlineProcessor(AUTOMAIL_RE, md), 'automail', 110) inlinePatterns.register(SubstituteTagInlineProcessor(LINE_BREAK_RE, 'br'), 'linebreak', 100) @@ -844,6 +847,14 @@ class ImageReferenceInlineProcessor(ReferenceInlineProcessor): return el +class ShortImageReferenceInlineProcessor(ImageReferenceInlineProcessor): + """ Short form of inage reference: ![ref]. """ + def evalId(self, data, index, text): + """Evaluate the id from of [ref] """ + + return text.lower(), index, True + + class AutolinkInlineProcessor(InlineProcessor): """ Return a link Element given an autolink (`<http://example/com>`). """ def handleMatch(self, m, data): diff --git a/tests/test_syntax/inline/test_images.py b/tests/test_syntax/inline/test_images.py index 261c24b..c9c7cb8 100644 --- a/tests/test_syntax/inline/test_images.py +++ b/tests/test_syntax/inline/test_images.py @@ -158,3 +158,27 @@ class TestAdvancedImages(TestCase): """![Image](http://humane man.jpg)""", """<p><img alt="Image" src="http://humane man.jpg" /></p>""" ) + + def test_short_ref(self): + self.assertMarkdownRenders( + self.dedent( + """ + ![ref] + + [ref]: ./image.jpg + """ + ), + '<p><img alt="ref" src="./image.jpg" /></p>' + ) + + def test_short_ref_in_link(self): + self.assertMarkdownRenders( + self.dedent( + """ + [![img ref]](http://example.com/) + + [img ref]: ./image.jpg + """ + ), + '<p><a href="http://example.com/"><img alt="img ref" src="./image.jpg" /></a></p>' + ) |