Skip to content

Commit

Permalink
Process inline tags as HTML blocks when they span multiple lines
Browse files Browse the repository at this point in the history
This fixes an issue where inline tags were being wrapped in paragraph tags
  • Loading branch information
Crozzers committed Mar 23, 2024
1 parent 54a9dd2 commit 7f80009
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 0 deletions.
13 changes: 13 additions & 0 deletions lib/markdown2.py
Expand Up @@ -833,6 +833,11 @@ def _detab(self, text):
_block_tags_b = 'p|div|h[1-6]|blockquote|pre|table|dl|ol|ul|script|noscript|form|fieldset|iframe|math'
_block_tags_b += _html5tags

_span_tags = (
'a|abbr|acronym|b|bdo|big|br|button|cite|code|dfn|em|i|img|input|kbd|label|map|object|output|q'
'|samp|script|select|small|span|strong|sub|sup|textarea|time|tt|var'
)

_liberal_tag_block_re = re.compile(r"""
( # save in \1
^ # start of line (with re.M)
Expand Down Expand Up @@ -927,6 +932,14 @@ def _hash_html_blocks(self, text, raw=False):
# Now match more liberally, simply from `\n<tag>` to `</tag>\n`
text = self._liberal_tag_block_re.sub(hash_html_block_sub, text)

# now do the same for spans that are acting like blocks
# eg: an anchor split over multiple lines for readability
text = self._strict_tag_block_sub(
text, self._span_tags,
# inline elements can't contain block level elements, so only span gamut is required
lambda t: hash_html_block_sub(self._run_span_gamut(t))
)

# Special case just for <hr />. It was easier to make a special
# case than to make the other regex more complicated.
if "<hr" in text:
Expand Down
7 changes: 7 additions & 0 deletions test/tm-cases/block_like_spans.html
@@ -0,0 +1,7 @@
<a href="www.google.com">

<img src="image.jpg" width="300px" height="auto" alt="Sample image"/>

Some <strong>markdown</strong> text as well, but <em>no</em> block level elements, since we're still <a href="https://google.com">inside a span</a>

</a>
7 changes: 7 additions & 0 deletions test/tm-cases/block_like_spans.text
@@ -0,0 +1,7 @@
<a href="www.google.com">

<img src="image.jpg" width="300px" height="auto" alt="Sample image"/>

Some **markdown** text as well, but _no_ block level elements, since we're still [inside a span](https://google.com)

</a>

0 comments on commit 7f80009

Please sign in to comment.