blob: 99410e33f48397d85cbf255a8b6d1768f73d0ae7 [file] [view] [edit]
# markdown-it-py
[![Github-DI][github-ci]][github-link]
[![Coverage Status][codecov-badge]][codecov-link]
[![PyPI][pypi-badge]][pypi-link]
[![Conda][conda-badge]][conda-link]
[![Code style: black][black-badge]][black-link]
> Markdown parser done right. Fast and easy to extend.
- Follows the __[CommonMark spec]__ + adds syntax extensions & sugar (URL autolinking, typographer).
- Configurable syntax! You can add new rules and even replace existing ones.
- High speed.
- [Safe][security-doc] by default.
- Pluginable
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:
- The __[Live demo](https://markdown-it.github.io)__
- [The markdown-it README][markdown-it-readme]
__Table of content__
- [markdown-it-py](#markdown-it-py)
- [The Port](#the-port)
- [Install](#install)
- [Basic usage](#basic-usage)
- [Benchmarking](#benchmarking)
- [Syntax extensions](#syntax-extensions)
- [Authors](#authors)
- [References / Thanks](#references--thanks)
- [Related Links](#related-links)
- [Other Ports](#other-ports)
## The Port
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!
## Install
```bash
conda install -c conda-forge markdown-it-py
```
or
```bash
pip install markdown-it-py
```
## Basic usage
See also:
- [Using the api] - for an executable notebook guide to the API
- [Development info] - for plugins writers.
```python
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:
```console
$ 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>
```
## Benchmarking
markdown-it-py is the fastest _**CommonMark compliant**_ parser written in python!
```console
$ 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.
\*Note `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](https://github.com/miyuchina/mistletoe#performance)
for further details.
## Syntax extensions
Embedded (enabled when using the `"default"` preset configuration):
- [Tables](https://help.github.com/articles/organizing-information-with-tables/) (GFM)
- [Strikethrough](https://help.github.com/articles/basic-writing-and-formatting-syntax/#styling-text) (GFM)
*Via* plugins:
A list of plugins that have/can be ported:
- [subscript](https://github.com/markdown-it/markdown-it-sub)
- [superscript](https://github.com/markdown-it/markdown-it-sup)
- [footnote](https://github.com/markdown-it/markdown-it-footnote)
- [definition list](https://github.com/markdown-it/markdown-it-deflist)
- [abbreviation](https://github.com/markdown-it/markdown-it-abbr)
- [emoji](https://github.com/markdown-it/markdown-it-emoji)
- [custom container](https://github.com/markdown-it/markdown-it-container)
- [insert](https://github.com/markdown-it/markdown-it-ins)
- [mark](https://github.com/markdown-it/markdown-it-mark)
- ... and [others](https://www.npmjs.org/browse/keyword/markdown-it-plugin)
## Authors
- Chris Sewell [github/chrisjsewell](https://github.com/chrisjsewell)
## References / Thanks
Big thanks to the authors of [markdown-it]
- Alex Kocharin [github/rlidwka](https://github.com/rlidwka)
- Vitaly Puzrin [github/puzrin](https://github.com/puzrin)
Also [John MacFarlane](https://github.com/jgm) for his work on the
CommonMark spec and reference implementations.
### Related Links
- https://github.com/jgm/CommonMark - reference CommonMark implementations in C & JS,
also contains latest spec & online demo.
- http://talk.commonmark.org - CommonMark forum, good place to collaborate
developers' efforts.
### Other Ports
- [motion-markdown-it](https://github.com/digitalmoksha/motion-markdown-it) - Ruby/RubyMotion
[github-ci]: https://github.com/ExecutableBookProject/markdown-it-py/workflows/Python%20package/badge.svg?branch=master
[github-link]: https://github.com/ExecutableBookProject/markdown-it-py
[pypi-badge]: https://img.shields.io/pypi/v/markdown-it-py.svg
[pypi-link]: https://pypi.org/project/markdown-it-py
[conda-badge]: https://anaconda.org/conda-forge/markdown-it-py/badges/version.svg
[conda-link]: https://anaconda.org/conda-forge/markdown-it-py
[codecov-badge]: https://codecov.io/gh/ExecutableBookProject/markdown-it-py/branch/master/graph/badge.svg
[codecov-link]: https://codecov.io/gh/ExecutableBookProject/markdown-it-py
[black-badge]: https://img.shields.io/badge/code%20style-black-000000.svg
[black-link]: https://github.com/ambv/black
[CommonMark spec]: http://spec.commonmark.org/
[markdown-it]: https://github.com/markdown-it/markdown-it
[markdown-it-readme]: https://github.com/markdown-it/markdown-it/blob/master/README.md
[security-doc]: https://github.com/ExecutableBookProject/markdown-it-py/tree/master/docs/security.md
[Using the api]: https://github.com/ExecutableBookProject/markdown-it-py/tree/master/docs/Using_the_api.md
[Development info]: https://github.com/ExecutableBookProject/markdown-it-py/tree/master/docs/development.md