The first stable release of markdown-it-py ๐
See the changes in the beta releases below, thanks to all the contributors in the last year!
RendererProtocol
type, for typing renderers (thanks to @hukkinj1)None
is no longer allowed as a valid src
input for StateBase
subclassesโผ๏ธ BREAKING: Move mdit-py-plugins
out of the core install requirements and into a plugins
extra.
Synchronised code with the upstream Markdown-It v12.0.6
:
This is the first beta release of the stable v1.x series.
There are four notable (and breaking) changes:
v12.0.4
. In particular, this update alters the parsing of tables to be consistent with the GFM specification: https://github.github.com/gfm/#tables-extension- A number of parsing performance and validation improvements are also included.Token.attrs
are now stored as dictionaries, rather than a list of lists. This is a departure from upstream Markdown-It, allowed by Pythons guarantee of ordered dictionaries (see #142), and is the more natural representation. Note attrGet
, attrSet
, attrPush
and attrJoin
methods remain identical to those upstream, and Token.as_dict(as_upstream=True)
will convert the token back to a directly comparable dict.AttrDict
has been replaced: For env
any Python mutable mapping is now allowed, and so attribute access to keys is not (differing from the Javascript dictionary). For MarkdownIt.options
it is now set as an OptionsDict
, which is a dictionary sub-class, with attribute access only for core MarkdownIt configuration keys.SyntaxTreeNode
. This is a more comprehensive replacement for nest_tokens
and NestedTokens
(which are now deprecated). It allows for the Token
stream to be converted to/from a nested tree structure, with opening/closing tokens collapsed into a single SyntaxTreeNode
and the intermediate tokens set as children. See Creating a syntax tree documentation for details.Ruler.at
for pluginsThis release brings Markdown-It-Py inline with Markdown-It v11.0.1 (2020-09-14), applying two fixes:
Thanks to @hukkinj1!
This release provides some improvements to the code base:
๐ DEPRECATE: Move plugins to mdit_py_plugins
Plugins (in markdown_it.extensions
) have now been moved to executablebooks/mdit-py-plugins. This will allow for their maintenance to occur on a different cycle to the core code, facilitating the release of a v1.0.0 for this package
๐ง MAINTAIN: Add mypy type-checking, thanks to @hukkinj1.
โจ NEW: Add linkify, thanks to @tsutsu3.
This extension uses linkify-it-py to identify URL links within text:
github.com
-> <a href="http://github.com">github.com</a>
Important: To use this extension you must install linkify-it-py; pip install markdown-it-py[linkify]
It can then be activated by:
from markdown_it import MarkdownIt md = MarkdownIt().enable("linkify") md.options["linkify"] = True
โจ NEW: Add smartquotes, thanks to @tsutsu3.
This extension will convert basic quote marks to their opening and closing variants:
It can be activated by:
from markdown_it import MarkdownIt md = MarkdownIt().enable("smartquotes") md.options["typographer"] = True
โจ NEW: Add markdown-it-task-lists plugin, thanks to @wna-se.
This is a port of the JS markdown-it-task-lists, for building task/todo lists out of markdown lists with items starting with [ ]
or [x]
. For example:
- [ ] An item that needs doing - [x] An item that is complete
This plugin can be activated by:
from markdown_it import MarkdownIt from markdown_it.extensions.tasklists import tasklists_plugin md = MarkdownIt().use(tasklists_plugin)
๐ Various bug fixes, thanks to @hukkinj1:
env
arg in MarkdownIt.render
_Entities.__contains__
fix return dataskipSpacesBack
and skipCharsBack
methods๐งช TESTS: Add CI for Python 3.9 and PyPy3
โจ NEW: Add simple typographic replacements, thanks to @tsutsu3: This allows you to add the typographer
option to the parser, to replace particular text constructs:
(c)
, (C)
โ ยฉ(tm)
, (TM)
โ โข(r)
, (R)
โ ยฎ(p)
, (P)
โ ยง+-
โ ยฑ...
โ โฆ?....
โ ?..!....
โ !..????????
โ ???!!!!!
โ !!!,,,
โ ,--
โ &ndash---
โ &mdashmd = MarkdownIt().enable("replacements") md.options["typographer"] = True
๐ DOCS: Improve documentation for CLI, thanks to @westurner
๐ IMPROVE: Use re.sub()
instead of re.subn()[0]
, thanks to @hukkinj1
๐ FIX: An exception raised by having multiple blank lines at the end of some files
๐ IMPROVE: Add store_labels
option.
This allows for storage of original reference label in link/image token's metadata, which can be useful for renderers.
โจ NEW: Add anchors_plugin
for headers, which can produce:
<h1 id="title-string">Title String <a class="header-anchor" href="#title-string">ยถ</a></h1>
๐ Fixed an undefined variable in the reference block.
๐ Fixed an IndexError
in container_plugin
, when there is no newline on the closing tag line.
โฌ๏ธ UPGRADE: attrs -> v20
This is not breaking, since it only deprecates Python 3.4 (see CHANGELOG.rst)
deflist
and dollarmath
plugins (see plugins list).containers
plugin (see plugins list)