Markdown parser done right. Fast and easy to extend.
This is a Python port of markdown-it, and some of its associated plugins. It is still under development, so for now should be used with caution.
For details on markdown-it itself, see:
Table of content
Details of the port can be found in
markdown_it/port.yaml and in
port.yaml within the extension folders. But the driving design philosophy has been to change as little of the fundamental code structure (file names, function name, etc) as possible, just sprinkling in a little Python syntactic sugar. It is very simple to write complimentary extensions for both language implementations!
conda install -c conda-forge markdown-it-py
pip install markdown-it-py
from markdown_it import MarkdownIt from markdown_it.extensions.front_matter import front_matter_plugin from markdown_it.extensions.footnote import footnote_plugin md = ( MarkdownIt() .use(front_matter_plugin) .use(footnote_plugin) .disable('image') .enable('table') ) text = (""" --- a: 1 --- a | b - | - 1 | 2 A footnote [^1] [^1]: some details """) tokens = md.parse(text) html_text = md.render(text)
Also you can use it from the command-line:
$ markdown-it markdown-it-py [version 0.1.0] (interactive) Type Ctrl-D to complete input, or Ctrl-C to exit. >>> > **hallo** there! ... <blockquote> <p><strong>hallo</strong> there!</p> </blockquote>
markdown-it-py is the fastest CommonMark compliant parser written in python!
$ markdown-it-bench -n 30 Test document: spec.md Test iterations: 30 Running 7 test(s) ... ===================== [mistune (0.8.4): 3.62 s]* markdown-it-py (0.1.0): 9.03 s mistletoe (0.10.0): 9.89 s commonmark-py (0.9.1): 20.82 s pymarkdown (3.2.1): 34.50 s pymarkdown:extra (3.2.1): 41.86 s panflute (1.12.5): 35.02 s
As you can see,
markdown-it-py doesn‘t pay with speed for it’s flexibility.
mistune is not CommonMark compliant, which is what allows for its faster parsing, at the expense of issues, for example, with nested inline parsing. See mistletoes's explanation for further details.
Embedded (enabled when using the
"default" preset configuration):
A list of plugins that have/can be ported:
Big thanks to the authors of markdown-it
Also John MacFarlane for his work on the CommonMark spec and reference implementations.