Skip to main content

Blazingly fast Markdown parser

Project description

PyroMark

CI Downloads

PyroMark (stands for Python Rust Optimized Markdown) is a blazingly fast Markdown parser for Python.

Uses pulldown-cmark Rust crate under the hood.

Installation

python -m pip install -U pyromark

Usage

pyromark.markdown

import pyromark

html = pyromark.markdown(
    "# Hello world",
    # Optional, include the ones you want
    extensions=(
        "tables",
        "footnotes",
        "strikethrough",
        "tasklists",
        "smart_punctuation",
        "heading_attributes",
    ),
)
print(html)  # <h1>Hello world</h1>\n

pyromark.Markdown

import pyromark

md = pyromark.Markdown(
    # Optional, include the ones you want
    extensions=(
        "tables",
        "footnotes",
        "strikethrough",
        "tasklists",
        "smart_punctuation",
        "heading_attributes",
    )
)
html = md.convert("# Hello world")
print(html)  # <h1>Hello world</h1>\n

Extensions

You can see examples of how each extension affects the result in the tests.

Performance

125x faster than Markdown, 109x faster than markdown-it-py, 86x faster than mistune.

If you use threading, the difference with other libraries will be even more enormous, since pyromark releases the GIL.

Python 3.11.3 (main, Apr  5 2023, 15:52:25) [GCC 12.2.1 20230201]
Type 'copyright', 'credits' or 'license' for more information
IPython 8.13.2 -- An enhanced Interactive Python. Type '?' for help.

In [1]: import requests, markdown, markdown_it, mistune, pyromark

In [2]: markdown.__version__, markdown_it.__version__, mistune.__version__
Out[2]: ('3.4.3', '2.2.0', '2.0.5')

In [3]: text = requests.get(
   ...:     "https://raw.githubusercontent.com/rust-lang/rust/1.69.0/README.md"
   ...: ).text

In [4]: %timeit markdown.markdown(text)
7.51 ms ± 22 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

In [5]: %timeit markdown_it.MarkdownIt().render(text)
6.5 ms ± 42.8 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

In [6]: %timeit mistune.html(text)
5.16 ms ± 40.1 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

In [7]: %timeit pyromark.markdown(text)
59.9 µs ± 202 ns per loop (mean ± std. dev. of 7 runs, 10,000 loops each)

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pyromark-0.1.3.tar.gz (7.3 kB view hashes)

Uploaded Source

Built Distributions

pyromark-0.1.3-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl (417.4 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ s390x

pyromark-0.1.3-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (325.8 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ ppc64le

pyromark-0.1.3-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (285.5 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ ARMv7l

pyromark-0.1.3-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (294.1 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ ARM64

pyromark-0.1.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (310.4 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

pyromark-0.1.3-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl (417.4 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ s390x

pyromark-0.1.3-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (325.8 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ ppc64le

pyromark-0.1.3-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (285.4 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ ARMv7l

pyromark-0.1.3-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (294.1 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ ARM64

pyromark-0.1.3-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl (308.9 kB view hashes)

Uploaded PyPy manylinux: glibc 2.5+ i686

pyromark-0.1.3-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (310.5 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

pyromark-0.1.3-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl (417.8 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ s390x

pyromark-0.1.3-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (326.1 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ ppc64le

pyromark-0.1.3-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (285.8 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ ARMv7l

pyromark-0.1.3-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (294.3 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ ARM64

pyromark-0.1.3-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl (309.5 kB view hashes)

Uploaded PyPy manylinux: glibc 2.5+ i686

pyromark-0.1.3-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (311.8 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

pyromark-0.1.3-pp37-pypy37_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl (420.3 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ s390x

pyromark-0.1.3-pp37-pypy37_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (327.2 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ ppc64le

pyromark-0.1.3-pp37-pypy37_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (286.9 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ ARMv7l

pyromark-0.1.3-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (295.4 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ ARM64

pyromark-0.1.3-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.whl (310.6 kB view hashes)

Uploaded PyPy manylinux: glibc 2.5+ i686

pyromark-0.1.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (310.3 kB view hashes)

Uploaded CPython 3.12 manylinux: glibc 2.17+ x86-64

pyromark-0.1.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl (416.8 kB view hashes)

Uploaded CPython 3.12 manylinux: glibc 2.17+ s390x

pyromark-0.1.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (325.6 kB view hashes)

Uploaded CPython 3.12 manylinux: glibc 2.17+ ppc64le

pyromark-0.1.3-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (285.4 kB view hashes)

Uploaded CPython 3.12 manylinux: glibc 2.17+ ARMv7l

pyromark-0.1.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (293.8 kB view hashes)

Uploaded CPython 3.12 manylinux: glibc 2.17+ ARM64

pyromark-0.1.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl (308.8 kB view hashes)

Uploaded CPython 3.12 manylinux: glibc 2.5+ i686

pyromark-0.1.3-cp311-none-win_amd64.whl (225.8 kB view hashes)

Uploaded CPython 3.11 Windows x86-64

pyromark-0.1.3-cp311-none-win32.whl (216.9 kB view hashes)

Uploaded CPython 3.11 Windows x86

pyromark-0.1.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (310.3 kB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ x86-64

pyromark-0.1.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl (416.8 kB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ s390x

pyromark-0.1.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (325.6 kB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ ppc64le

pyromark-0.1.3-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (285.4 kB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ ARMv7l

pyromark-0.1.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (293.8 kB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ ARM64

pyromark-0.1.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl (308.8 kB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.5+ i686

pyromark-0.1.3-cp311-cp311-macosx_11_0_arm64.whl (266.7 kB view hashes)

Uploaded CPython 3.11 macOS 11.0+ ARM64

pyromark-0.1.3-cp311-cp311-macosx_10_7_x86_64.whl (283.2 kB view hashes)

Uploaded CPython 3.11 macOS 10.7+ x86-64

pyromark-0.1.3-cp310-none-win_amd64.whl (225.8 kB view hashes)

Uploaded CPython 3.10 Windows x86-64

pyromark-0.1.3-cp310-none-win32.whl (216.8 kB view hashes)

Uploaded CPython 3.10 Windows x86

pyromark-0.1.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (310.3 kB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64

pyromark-0.1.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl (416.8 kB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ s390x

pyromark-0.1.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (325.6 kB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ ppc64le

pyromark-0.1.3-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (285.4 kB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ ARMv7l

pyromark-0.1.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (293.8 kB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ ARM64

pyromark-0.1.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl (308.8 kB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.5+ i686

pyromark-0.1.3-cp310-cp310-macosx_11_0_arm64.whl (266.7 kB view hashes)

Uploaded CPython 3.10 macOS 11.0+ ARM64

pyromark-0.1.3-cp310-cp310-macosx_10_7_x86_64.whl (283.2 kB view hashes)

Uploaded CPython 3.10 macOS 10.7+ x86-64

pyromark-0.1.3-cp39-none-win_amd64.whl (226.1 kB view hashes)

Uploaded CPython 3.9 Windows x86-64

pyromark-0.1.3-cp39-none-win32.whl (217.1 kB view hashes)

Uploaded CPython 3.9 Windows x86

pyromark-0.1.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (310.4 kB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ x86-64

pyromark-0.1.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl (417.2 kB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ s390x

pyromark-0.1.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (325.9 kB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ ppc64le

pyromark-0.1.3-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (285.7 kB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ ARMv7l

pyromark-0.1.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (294.1 kB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ ARM64

pyromark-0.1.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl (309.1 kB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.5+ i686

pyromark-0.1.3-cp38-none-win_amd64.whl (226.2 kB view hashes)

Uploaded CPython 3.8 Windows x86-64

pyromark-0.1.3-cp38-none-win32.whl (217.3 kB view hashes)

Uploaded CPython 3.8 Windows x86

pyromark-0.1.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (310.8 kB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.17+ x86-64

pyromark-0.1.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl (417.5 kB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.17+ s390x

pyromark-0.1.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (326.3 kB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.17+ ppc64le

pyromark-0.1.3-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (286.0 kB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.17+ ARMv7l

pyromark-0.1.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (294.4 kB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.17+ ARM64

pyromark-0.1.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl (309.6 kB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.5+ i686

pyromark-0.1.3-cp37-none-win_amd64.whl (226.1 kB view hashes)

Uploaded CPython 3.7 Windows x86-64

pyromark-0.1.3-cp37-none-win32.whl (217.3 kB view hashes)

Uploaded CPython 3.7 Windows x86

pyromark-0.1.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (310.8 kB view hashes)

Uploaded CPython 3.7m manylinux: glibc 2.17+ x86-64

pyromark-0.1.3-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl (417.9 kB view hashes)

Uploaded CPython 3.7m manylinux: glibc 2.17+ s390x

pyromark-0.1.3-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (326.2 kB view hashes)

Uploaded CPython 3.7m manylinux: glibc 2.17+ ppc64le

pyromark-0.1.3-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (285.9 kB view hashes)

Uploaded CPython 3.7m manylinux: glibc 2.17+ ARMv7l

pyromark-0.1.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (294.4 kB view hashes)

Uploaded CPython 3.7m manylinux: glibc 2.17+ ARM64

pyromark-0.1.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl (309.6 kB view hashes)

Uploaded CPython 3.7m manylinux: glibc 2.5+ i686

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page