From 15346cd3a73f108bf11c57907b32737f8365d6bd Mon Sep 17 00:00:00 2001 From: facelessuser Date: Mon, 21 Jul 2025 08:56:43 -0600 Subject: [PATCH] Fix failing cases for Python 3.14 New change requires us to monkey patch `locatetagend` to prevent capturing incomplete tags in code spans. --- docs/changelog.md | 6 ++++++ markdown/htmlparser.py | 14 ++++++++++++++ 2 files changed, 20 insertions(+) Index: markdown-3.8.2/docs/changelog.md =================================================================== --- markdown-3.8.2.orig/docs/changelog.md 2025-06-19 19:12:28.000000000 +0200 +++ markdown-3.8.2/docs/changelog.md 2025-08-12 21:13:46.980036183 +0200 @@ -10,6 +10,12 @@ [Python Version Specification]: https://packaging.python.org/en/latest/specifications/version-specifiers/. See the [Contributing Guide](contributing.md) for details. +## [Unreleased] + +### Fixed + +* Fix handling of incomplete HTML tags in code spans in Python 3.14. + ## [3.8.2] - 2025-06-19 ### Fixed Index: markdown-3.8.2/markdown/htmlparser.py =================================================================== --- markdown-3.8.2.orig/markdown/htmlparser.py 2025-06-19 19:12:28.000000000 +0200 +++ markdown-3.8.2/markdown/htmlparser.py 2025-08-12 21:13:46.980214669 +0200 @@ -69,6 +69,20 @@ )? \s* # trailing whitespace """, re.VERBOSE) +htmlparser.locatetagend = re.compile(r""" + [a-zA-Z][^`\t\n\r\f />]* # tag name + [\t\n\r\f /]* # optional whitespace before attribute name + (?:(?<=['"\t\n\r\f /])[^`\t\n\r\f />][^\t\n\r\f /=>]* # attribute name + (?:= # value indicator + (?:'[^']*' # LITA-enclosed value + |"[^"]*" # LIT-enclosed value + |(?!['"])[^>\t\n\r\f ]* # bare value + ) + )? + [\t\n\r\f /]* # possibly followed by a space + )* + >? +""", re.VERBOSE) # Match a blank line at the start of a block of text (two newlines). # The newlines may be preceded by additional whitespace.