Skip to content
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions docs/changelog.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,12 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
See the [Contributing Guide](contributing.md) for details.

## [3.8.1] - xxxx-xx-xx

### Fixed

* Fixed dropped content in `md_in_html` (#1526).

## [3.8.0] - 2025-04-09

### Changed
Expand Down
6 changes: 5 additions & 1 deletion markdown/extensions/md_in_html.py
Original file line number Diff line number Diff line change
Expand Up @@ -387,12 +387,16 @@ def run(self, parent: etree.Element, blocks: list[str]) -> bool:
element = self.parser.md.htmlStash.rawHtmlBlocks[index]
if isinstance(element, etree.Element):
# We have a matched element. Process it.
blocks.pop(0)
block = blocks.pop(0)
parent.append(element)
self.parse_element_content(element)
# Cleanup stash. Replace element with empty string to avoid confusing postprocessor.
self.parser.md.htmlStash.rawHtmlBlocks.pop(index)
self.parser.md.htmlStash.rawHtmlBlocks.insert(index, '')
content = block[m.end(0):]
# Ensure the rest of the content gets handled
if content:
blocks.insert(0, content)
# Confirm the match to the `blockparser`.
return True
# No match found.
Expand Down
21 changes: 21 additions & 0 deletions tests/test_syntax/extensions/test_md_in_html.py
Original file line number Diff line number Diff line change
Expand Up @@ -1517,6 +1517,27 @@ def test_md1_code_cdata(self):
extensions=['md_in_html']
)

def test_trailing_content_after_tag_in_md_block(self):

# It should be noted that this is not the way `md_in_html` is intended to be used.
# What we are specifically testing is an edge case where content was previously lost.
# Lost content should not happen.
self.assertMarkdownRenders(
self.dedent(
"""
<div markdown>
<div class="circle"></div>AAAAA<div class="circle"></div>
</div>
"""
),
'<div>\n'
'<div class="circle"></div>\n'
'<p>AAAAA<div class="circle"></p>\n'
'</div>\n'
'</div>',
extensions=['md_in_html']
)


def load_tests(loader, tests, pattern):
""" Ensure `TestHTMLBlocks` doesn't get run twice by excluding it here. """
Expand Down
Loading