Closed
Description
<hr>
elements seem to interrupt markdown text processing:
- Markdown Input:
'*emphasis1*\n<hr>\n*emphasis2*'
- HTML Output (actual):
'<p><em>emphasis1</em></p>\n<hr>\n*emphasis2*'
- HTML Output (expected):
'<p><em>emphasis1</em>\n<hr>\n<em>emphasis2</em></p>'
*emphasis1*\n<hr/>\n*emphasis2*
(closing the hr
tag) causes *emphasis2*
to render correctly.
Naked <hr>
tags should be valid HTML: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/hr
Having the md_in_html
extension enabled or disabled doesn't seem to make a difference.
Versions
- Markdown==3.3.2 (affects 3.3.0 and above)
- CPython 3.8.6
Steps to reproduce
mderror.py
:
import markdown
def test(md_text):
html = markdown.markdown(
md_text,
# Same result with or without md_in_html
# extensions=["markdown.extensions.md_in_html"],
)
okay = "*emphasis" not in html
print(f"{'OK ' if okay else 'ERR'} {md_text!r} → {html!r}")
# ERR
test("*emphasis1*\n<hr>\n*emphasis2*")
# OK
test("*emphasis1*\n<hr/>\n*emphasis2*")
test("*emphasis1*\n<hr></hr>\n*emphasis2*")
test("*emphasis1*\n<img>\n*emphasis2*")
Output:
897c854 also fails:
pip install git+https://github.com/Python-Markdown/markdown@897c8541998cdbd0499b04942244f7fdf1191a6c && python mderror.py
ERR '*emphasis1*\n<hr>\n*emphasis2*' → '<p><em>emphasis1</em></p>\n<hr>\n*emphasis2*'
OK '*emphasis1*\n<hr/>\n*emphasis2*' → '<p><em>emphasis1</em>\n<hr/></p>\n<p><em>emphasis2</em></p>'
OK '*emphasis1*\n<hr></hr>\n*emphasis2*' → '<p><em>emphasis1</em></p>\n<hr></hr>\n<p><em>emphasis2</em></p>'
OK '*emphasis1*\n<img>\n*emphasis2*' → '<p><em>emphasis1</em>\n<img>\n<em>emphasis2</em></p>'
$ pip install Markdown==3.3.2 && python mderror.py
ERR '*emphasis1*\n<hr>\n*emphasis2*' → '<p><em>emphasis1</em></p>\n<hr>\n*emphasis2*'
OK '*emphasis1*\n<hr/>\n*emphasis2*' → '<p><em>emphasis1</em>\n<hr/></p>\n<p><em>emphasis2</em></p>'
OK '*emphasis1*\n<hr></hr>\n*emphasis2*' → '<p><em>emphasis1</em></p>\n<hr></hr>\n<p><em>emphasis2</em></p>'
OK '*emphasis1*\n<img>\n*emphasis2*' → '<p><em>emphasis1</em>\n<img>\n<em>emphasis2</em></p>'
$ pip install Markdown==3.3.1 && python mderror.py
ERR '*emphasis1*\n<hr>\n*emphasis2*' → '<p><em>emphasis1</em></p>\n<hr>\n*emphasis2*'
OK '*emphasis1*\n<hr/>\n*emphasis2*' → '<p><em>emphasis1</em>\n<hr/></p>\n<p><em>emphasis2</em></p>'
OK '*emphasis1*\n<hr></hr>\n*emphasis2*' → '<p><em>emphasis1</em></p>\n<hr></hr>\n<p><em>emphasis2</em></p>'
OK '*emphasis1*\n<img>\n*emphasis2*' → '<p><em>emphasis1</em>\n<img>\n<em>emphasis2</em></p>'
3.3.0
starts failing:
→ pip install Markdown==3.3.0 && python mderror.py
ERR '*emphasis1*\n<hr>\n*emphasis2*' → '<p><em>emphasis1</em></p>\n<hr>\n*emphasis2*'
OK '*emphasis1*\n<hr/>\n*emphasis2*' → '<p><em>emphasis1</em>\n<hr/></p>\n<p><em>emphasis2</em></p>'
OK '*emphasis1*\n<hr></hr>\n*emphasis2*' → '<p><em>emphasis1</em></p>\n<hr></hr>\n<p><em>emphasis2</em></p>'
OK '*emphasis1*\n<img>\n*emphasis2*' → '<p><em>emphasis1</em>\n<img>\n<em>emphasis2</em></p>'
3.2.2
passes all tests:
→ pip install Markdown==3.2.2 && python mderror.py
OK '*emphasis1*\n<hr>\n*emphasis2*' → '<p><em>emphasis1</em>\n<hr>\n<em>emphasis2</em></p>'
OK '*emphasis1*\n<hr/>\n*emphasis2*' → '<p><em>emphasis1</em>\n<hr/>\n<em>emphasis2</em></p>'
OK '*emphasis1*\n<hr></hr>\n*emphasis2*' → '<p><em>emphasis1</em>\n<hr></hr>\n<em>emphasis2</em></p>'
OK '*emphasis1*\n<img>\n*emphasis2*' → '<p><em>emphasis1</em>\n<img>\n<em>emphasis2</em></p>'