summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWaylan Limberg <waylan.limberg@icloud.com>2020-07-01 09:41:28 -0400
committerWaylan Limberg <waylan.limberg@icloud.com>2020-07-01 09:48:51 -0400
commita4b6ec9fcea353dd6f1c509ad6834aa6fd10564d (patch)
tree3677a421d32937d7a51d8875d6ce61c8f59009cf
parent2164c4b4752b9061c742326ea0413719333058fc (diff)
downloadpython-markdown-a4b6ec9fcea353dd6f1c509ad6834aa6fd10564d.tar.gz
Support short reference image links.
Fixes #894.
-rw-r--r--docs/change_log/release-3.3.md1
-rw-r--r--markdown/inlinepatterns.py11
-rw-r--r--tests/test_syntax/inline/test_images.py24
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>'
+ )