diff --git a/markdown/inlinepatterns.py b/markdown/inlinepatterns.py index 23f517ba..13b3c35f 100644 --- a/markdown/inlinepatterns.py +++ b/markdown/inlinepatterns.py @@ -159,10 +159,10 @@ def build_inlinepatterns(md: Markdown, **kwargs: Any) -> util.Registry[InlinePro """ Match an automatic email link (``). """ HTML_RE = ( - r'(<(\/?[a-zA-Z][^<>@ ]*( [^<>]*)?|' # Tag - r'!--(?:(?!).)*--|' # Comment - r'[?](?:(?!<[?]|[?]>).)*[?]|' # Processing instruction - r'@ ]*( [^<>]*)?|' # Tag + r'!--(?:(?!).)*--|' # Comment + r'[?](?:(?!<[?]|[?]>).)*[?]|' # Processing instruction + r'!\[CDATA\[(?:(?!).)*\]\]' # `CDATA` ')>)' ) """ Match an HTML tag (`<...>`). """ diff --git a/tests/test_syntax/extensions/test_md_in_html.py b/tests/test_syntax/extensions/test_md_in_html.py index c439a03b..d37a39ed 100644 --- a/tests/test_syntax/extensions/test_md_in_html.py +++ b/tests/test_syntax/extensions/test_md_in_html.py @@ -1206,6 +1206,115 @@ def test_md1_nested_footnote_ref(self): extensions=['md_in_html', 'footnotes'] ) + def test_md1_code_void_tag(self): + + # https://github.com/Python-Markdown/markdown/issues/1075 + self.assertMarkdownRenders( + self.dedent( + """ +
+ + Code: `` + +
+ +
+ + HTML: + +
+ """ + ), + '
\n' + '

Code: <label></input></label>

\n' + '
\n' + '
\n' + '

HTML:

\n' + '
', + extensions=['md_in_html'] + ) + + def test_md1_code_comment(self): + + self.assertMarkdownRenders( + self.dedent( + """ +
+ + Code: `` + +
+ +
+ + HTML: + +
+ """ + ), + '
\n' + '

Code: <label><!-- **comment** --></label>

\n' + '
\n' + '
\n' + '

HTML:

\n' + '
', + extensions=['md_in_html'] + ) + + def test_md1_code_pi(self): + + self.assertMarkdownRenders( + self.dedent( + """ +
+ + Code: `` + +
+ +
+ + HTML: + +
+ """ + ), + '
\n' + '

Code: <label><?php # echo \'**simple**\';?></label>

\n' + '
\n' + '
\n' + '

HTML:

\n' + '
', + extensions=['md_in_html'] + ) + + def test_md1_code_cdata(self): + + self.assertMarkdownRenders( + self.dedent( + """ +
+ + Code: `` + +
+ +
+ + HTML: + +
+ """ + ), + '
\n' + '

Code: <label><![CDATA[some stuff]]></label>

\n' + '
\n' + '
\n' + '

HTML:

\n' + '
', + extensions=['md_in_html'] + ) + def load_tests(loader, tests, pattern): """ Ensure `TestHTMLBlocks` doesn't get run twice by excluding it here. """