Skip to content

Releases: Python-Markdown/markdown

Release 3.11.0

Choose a tag to compare

@github-actions github-actions released this 25 Sep 13:46

Changed

  • Inline processors now resume searching after the previous match, improving
    performance for repeated inline patterns (#1619).
  • Officially support Python 3.15 and drop support for Python 3.10
  • Walk backtick runs in BacktickInlineProcessor without a regex (#1620).
  • Switch static site generator for documentation from MkDocs to Zensical
    (#1627, #1635, #1637, and #1638).

Fixed

  • Ensure removing Abbreviations does not raise an error (#1634).
  • Fix an issue with excessive backtracking when matching inline code blocks (#1617).
  • md_in_html now honors tags added to Markdown.block_level_elements after
    the extension is loaded (#1246).
  • Fix quadratic-time regex backtracking in ReferenceProcessor when a link
    reference definition has no URL, e.g. a line consisting only of [id]:
    followed by many trailing spaces (#798).
  • Document attr_list usage for def_list (#1123).

Release 3.10.3

Choose a tag to compare

@github-actions github-actions released this 30 Jul 19:05

Fixed

  • Fix SetextHeaderProcessor regex to prevent mixed = and - chars in setext-style headers (#1606).
  • Add AI Policy to Contributing Guide.
  • Officially document all included extensions as being in maintenance mode.
  • Link the Extension API documentation to the API Reference (#1612).

Release 3.10.2

Choose a tag to compare

@github-actions github-actions released this 09 Feb 14:57
e7a0efb

Fixed

  • Fix a regression related to comment handling (#1590).
  • More reliable fix for </ (#1593).

Release 3.10.1

Choose a tag to compare

@github-actions github-actions released this 21 Jan 18:09

Fixed

  • Ensure nested elements inside inline comments are properly unescaped (#1571).
  • Make the docs build successfully with mkdocstrings-python 2.0 (#1575).
  • Fix infinite loop when multiple bogus or unclosed HTML comments appear in input (#1578).
  • Fix another infinite loop when handling bad comments (#1586).

Release 3.10.0

Choose a tag to compare

@github-actions github-actions released this 03 Nov 19:51

Changed

  • Officially support Python 3.14 and PyPy 3.11 and drop support for Python 3.9
    and PyPy 3.9.

Fixed

  • Fix an HTML comment parsing case in some Python versions that can cause an
    infinite loop (#1554).
  • Revert the default behavior of USE_DEFINITION_ORDER (to True). The new
    behavior introduced in 3.9.0 is experimental and results are inconsistent.
    It should not have been made the default behavior (#1561).

Release 3.9.0

Choose a tag to compare

@github-actions github-actions released this 04 Sep 20:25

Changed

  • Footnotes are now ordered by the occurrence of their references in the
    document. A new configuration option for the footnotes extension,
    USE_DEFINITION_ORDER, has been added to support restoring the previous
    behavior of ordering footnotes by the occurrence of definitions (#1367).

Fixed

  • Ensure inline processing iterates through elements in document order (#1546).
  • Fix handling of incomplete HTML tags in code spans in Python 3.14 (#1547).

Release 3.8.2

Choose a tag to compare

@github-actions github-actions released this 19 Jun 17:12

Fixed

  • Fix codecs deprecation in Python 3.14.
  • Fix issue with unclosed comment parsing in Python 3.14.
  • Fix issue with unclosed declarations in Python 3.14.
  • Fix issue with unclosed HTML tag <foo and Python 3.14.

Release 3.8.1

Choose a tag to compare

@github-actions github-actions released this 18 Jun 14:50

Fixed

  • Ensure incomplete markup declaration in raw HTML doesn't crash parser (#1534).
  • Fixed dropped content in md_in_html (#1526).
  • Fixed HTML handling corner case that prevented some content from not being rendered (#1528).

Release 3.8

Choose a tag to compare

@waylan waylan released this 11 Apr 14:47

Changed

  • DRY fix in abbr extension by introducing method create_element (#1483).
  • Clean up test directory by removing some redundant tests and port
    non-redundant cases to the newer test framework.
  • Improved performance of the raw HTML post-processor (#1510).

Fixed

  • Backslash Unescape IDs set via attr_list on toc (#1493).
  • Ensure md_in_html processes content inside "markdown" blocks as they are
    parsed outside of "markdown" blocks to keep things more consistent for
    third-party extensions (#1503).
  • md_in_html handle tags within inline code blocks better (#1075).
  • md_in_html fix handling of one-liner block HTML handling (#1074).
  • Ensure <center> is treated like a block-level element (#1481).
  • Ensure that abbr extension respects AtomicString and does not process
    perceived abbreviations in these strings (#1512).
  • Ensure smarty extension correctly renders nested closing quotes (#1514).

Release 3.7

Choose a tag to compare

@waylan waylan released this 16 Aug 17:12

Changed

Refactor abbr Extension

A new AbbrTreeprocessor has been introduced, which replaces the now deprecated
AbbrInlineProcessor. Abbreviation processing now happens after Attribute Lists,
avoiding a conflict between the two extensions (#1460).

The AbbrPreprocessor class has been renamed to AbbrBlockprocessor, which
better reflects what it is. AbbrPreprocessor has been deprecated.

A call to Markdown.reset() now clears all previously defined abbreviations.

Abbreviations are now sorted by length before executing AbbrTreeprocessor
to ensure that multi-word abbreviations are implemented even if an abbreviation
exists for one of those component words. (#1465)

Abbreviations without a definition are now ignored. This avoids applying
abbr tags to text without a title value.

Added an optional glossary configuration option to the abbreviations extension.
This provides a simple and efficient way to apply a dictionary of abbreviations
to every page.

Abbreviations can now be disabled by setting their definition to "" or ''.
This can be useful when using the glossary option.

Fixed

  • Fixed links to source code on GitHub from the documentation (#1453).