diff options
author | Philip Trauner <philip.trauner@arztpraxis.io> | 2019-02-07 20:59:04 +0100 |
---|---|---|
committer | Waylan Limberg <waylan.limberg@icloud.com> | 2019-02-07 14:59:04 -0500 |
commit | 12864d276855231c1d72f0da8efd8dace20a9062 (patch) | |
tree | e326d0040df666ff3655d16218cf4a8a6ca18202 | |
parent | 505cc0978c9a53b906cceec9aeebc0e2a5da74fc (diff) | |
download | python-markdown-12864d276855231c1d72f0da8efd8dace20a9062.tar.gz |
Handle overlapping raw HTML matches (#770)
Recursively run substitution to handle overlapping matches.
Fixes #458.
-rw-r--r-- | docs/change_log/release-3.1.md | 1 | ||||
-rw-r--r-- | markdown/postprocessors.py | 11 | ||||
-rw-r--r-- | tests/test_syntax/extensions/test_fenced_code.py | 53 |
3 files changed, 62 insertions, 3 deletions
diff --git a/docs/change_log/release-3.1.md b/docs/change_log/release-3.1.md index c5f0433..55dde79 100644 --- a/docs/change_log/release-3.1.md +++ b/docs/change_log/release-3.1.md @@ -31,6 +31,7 @@ The following new features have been included in the release: The following bug fixes are included in the 3.1 release: +* Overlapping raw HTML matches no longer leave placeholders behind (#458). * Emphasis patterns now recognize newline characters as whitespace (#783). * Version format had been updated to be PEP 440 compliant (#736). * Block level elements are defined per instance, not as class attributes diff --git a/markdown/postprocessors.py b/markdown/postprocessors.py index cecb4ad..5cfb4e6 100644 --- a/markdown/postprocessors.py +++ b/markdown/postprocessors.py @@ -81,9 +81,14 @@ class RawHtmlPostprocessor(Postprocessor): if replacements: pattern = re.compile("|".join(re.escape(k) for k in replacements)) - text = pattern.sub(lambda m: replacements[m.group(0)], text) - - return text + processed_text = pattern.sub(lambda m: replacements[m.group(0)], text) + else: + return text + + if processed_text == text: + return processed_text + else: + return self.run(processed_text) def isblocklevel(self, html): m = re.match(r'^\<\/?([^ >]+)', html) diff --git a/tests/test_syntax/extensions/test_fenced_code.py b/tests/test_syntax/extensions/test_fenced_code.py new file mode 100644 index 0000000..5f1d736 --- /dev/null +++ b/tests/test_syntax/extensions/test_fenced_code.py @@ -0,0 +1,53 @@ +# -*- coding: utf-8 -*- +""" +Python Markdown + +A Python implementation of John Gruber's Markdown. + +Documentation: https://python-markdown.github.io/ +GitHub: https://github.com/Python-Markdown/markdown/ +PyPI: https://pypi.org/project/Markdown/ + +Started by Manfred Stienstra (http://www.dwerg.net/). +Maintained for a few years by Yuri Takhteyev (http://www.freewisdom.org). +Currently maintained by Waylan Limberg (https://github.com/waylan), +Dmitry Shachnev (https://github.com/mitya57) and Isaac Muse (https://github.com/facelessuser). + +Copyright 2007-2018 The Python Markdown Project (v. 1.7 and later) +Copyright 2004, 2005, 2006 Yuri Takhteyev (v. 0.2-1.6b) +Copyright 2004 Manfred Stienstra (the original version) + +License: BSD (see LICENSE.md for details). +""" + +from __future__ import unicode_literals +from markdown.test_tools import TestCase + + +class TestFencedCode(TestCase): + + # TODO: Move the rest of the fenced code tests here. + + def test_fenced_code_in_raw_html(self): + self.assertMarkdownRenders( + self.dedent( + """ + <details> + ``` + Begone placeholders! + ``` + </details> + """ + ), + self.dedent( + """ + <details> + + <pre><code>Begone placeholders! + </code></pre> + + </details> + """ + ), + extensions=['fenced_code'] + ) |