pax_global_header 0000666 0000000 0000000 00000000064 15265371675 0014533 g ustar 00root root 0000000 0000000 52 comment=f19057fdf339affb61ca63c7fe28df7a951ec588
lepture-mistune-f19057f/ 0000775 0000000 0000000 00000000000 15265371675 0015240 5 ustar 00root root 0000000 0000000 lepture-mistune-f19057f/.editorconfig 0000664 0000000 0000000 00000000231 15265371675 0017711 0 ustar 00root root 0000000 0000000 root=true
[*]
insert_final_newline = true
end_of_line = lf
indent_style = space
indent_size = 2
[*.py]
indent_size = 4
trim_trailing_whitespace = true
lepture-mistune-f19057f/.github/ 0000775 0000000 0000000 00000000000 15265371675 0016600 5 ustar 00root root 0000000 0000000 lepture-mistune-f19057f/.github/FUNDING.yml 0000664 0000000 0000000 00000000374 15265371675 0020421 0 ustar 00root root 0000000 0000000 # These are supported funding model platforms
github: [lepture]
patreon: lepture
open_collective: # Replace with a single Open Collective username
ko_fi: # Replace with a single Ko-fi username
tidelift: pypi/mistune
custom: https://lepture.com/donate
lepture-mistune-f19057f/.github/SECURITY.md 0000664 0000000 0000000 00000000252 15265371675 0020370 0 ustar 00root root 0000000 0000000 # Security
If you discover a security vulnerability, **do not submit a public issue or patch**.
Instead, please report it privately through the **GitHub Security** tab.
lepture-mistune-f19057f/.github/workflows/ 0000775 0000000 0000000 00000000000 15265371675 0020635 5 ustar 00root root 0000000 0000000 lepture-mistune-f19057f/.github/workflows/pypi.yml 0000664 0000000 0000000 00000002256 15265371675 0022346 0 ustar 00root root 0000000 0000000 name: Release to PyPI
on:
push:
tags:
- "v*"
jobs:
build:
name: build dist files
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
- uses: astral-sh/setup-uv@v10.3.0
with:
python-version: "3.10"
- name: build dist
run: uv build
- uses: actions/upload-artifact@v6
with:
name: artifacts
path: dist/*
if-no-files-found: error
publish:
permissions:
id-token: write
environment:
name: pypi-release
name: release to pypi
needs: build
runs-on: ubuntu-latest
steps:
- uses: actions/download-artifact@v7
with:
name: artifacts
path: dist
- name: Push build artifacts to PyPI
uses: pypa/gh-action-pypi-publish@release/v1
release:
permissions:
contents: write
name: write release note
runs-on: ubuntu-latest
needs: publish
steps:
- uses: actions/checkout@v7
with:
fetch-depth: 0
- uses: actions/setup-node@v6
with:
node-version: 24
- run: npx changelogithub --no-group
continue-on-error: true
env:
GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}
lepture-mistune-f19057f/.github/workflows/tests.yml 0000664 0000000 0000000 00000004562 15265371675 0022531 0 ustar 00root root 0000000 0000000 name: Run tests
on:
push:
branches-ignore:
- 'wip-*'
pull_request:
branches-ignore:
- 'wip-*'
workflow_dispatch:
jobs:
lint:
runs-on: ubuntu-latest
permissions:
contents: read
steps:
- uses: actions/checkout@v7
- uses: astral-sh/setup-uv@v10.3.0
with:
python-version: "3.13"
- name: ruff lint
run: uv run --locked --group lint ruff check .
- name: mypy lint
run: uv run --locked --group lint mypy
docs:
needs: lint
runs-on: ubuntu-latest
permissions:
contents: read
steps:
- uses: actions/checkout@v7
- uses: astral-sh/setup-uv@v10.3.0
with:
python-version: "3.13"
- name: Build documentation without remote inventories
env:
MISTUNE_DOCS_OFFLINE: "1"
run: uv run --locked --group docs sphinx-build -W -b dummy docs /tmp/mistune-docs
test:
needs: lint
runs-on: ubuntu-latest
permissions:
contents: read
pull-requests: read
strategy:
fail-fast: false
max-parallel: 3
matrix:
python-version:
- "3.10"
- "3.11"
- "3.12"
- "3.13"
- "3.14"
- "3.15"
- "pypy3.11"
steps:
- uses: actions/checkout@v7
- name: Set up uv and Python ${{ matrix.python-version }}
uses: astral-sh/setup-uv@v10.3.0
with:
python-version: ${{ matrix.python-version }}
- name: Report coverage
run: uv run --locked --group test pytest --cov=mistune --cov-branch --cov-report=xml
- name: Upload coverage reports to Codecov
uses: codecov/codecov-action@v7
with:
token: ${{ secrets.CODECOV_TOKEN }}
sonar:
needs: test
runs-on: ubuntu-latest
permissions:
contents: read
pull-requests: read
steps:
- uses: actions/checkout@v7
with:
ref: ${{ github.event.pull_request.head.sha || github.sha }}
- uses: astral-sh/setup-uv@v10.3.0
with:
python-version: "3.13"
- name: Generate coverage
run: uv run --locked --group test pytest --cov=mistune --cov-branch --cov-report=xml
- name: SonarCloud Scan
uses: SonarSource/sonarqube-scan-action@v8
continue-on-error: true
env:
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
lepture-mistune-f19057f/.gitignore 0000664 0000000 0000000 00000000333 15265371675 0017227 0 ustar 00root root 0000000 0000000 *.pyc
*.pyo
*.egg-info
.idea
__pycache__
bin
build
develop-eggs
dist
eggs
parts
.DS_Store
.installed.cfg
docs/_build
cover/
.tox
*.bak
*.c
*.so
.venv/
plans/
.python-version
.coverage
htmlcov
.eggs
coverage.xml
demo.py
lepture-mistune-f19057f/.readthedocs.yaml 0000664 0000000 0000000 00000000306 15265371675 0020466 0 ustar 00root root 0000000 0000000 version: 2
build:
os: "ubuntu-lts-latest"
tools:
python: "3.13"
sphinx:
configuration: docs/conf.py
python:
install:
- method: uv
command: sync
groups:
- docs
lepture-mistune-f19057f/LICENSE 0000664 0000000 0000000 00000002703 15265371675 0016247 0 ustar 00root root 0000000 0000000 Copyright (c) 2014, Hsiaoming Yang
All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
* Neither the name of the creator nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
lepture-mistune-f19057f/MANIFEST.in 0000664 0000000 0000000 00000000337 15265371675 0017001 0 ustar 00root root 0000000 0000000 # include all test files but avoid including .pyc
recursive-include benchmark *.py *.txt
recursive-include tests *.json *.html *.md *.py *.txt
# include documentation sources but not built docs
graft docs
prune docs/_build
lepture-mistune-f19057f/Makefile 0000664 0000000 0000000 00000000575 15265371675 0016707 0 ustar 00root root 0000000 0000000 .PHONY: clean-pyc clean-build build-docs
clean: clean-build clean-pyc
clean-build:
@rm -fr build/
@rm -fr dist/
@rm -fr *.egg-info
@rm -fr .coverage
clean-pyc:
@find . -name '*.pyc' -exec rm -f {} +
@find . -name '*.pyo' -exec rm -f {} +
@find . -name '*~' -exec rm -f {} +
@find . -name '__pycache__' -exec rm -fr {} +
build-docs:
@sphinx-build docs build/_html -a
lepture-mistune-f19057f/README.md 0000664 0000000 0000000 00000027671 15265371675 0016534 0 ustar 00root root 0000000 0000000
A fast yet powerful Python Markdown parser with renderers and plugins.
[](https://github.com/lepture/mistune/actions)
[](https://pypi.org/project/mistune)
[](https://anaconda.org/conda-forge/mistune)
[](https://pepy.tech/projects/mistune)
[](https://codecov.io/gh/lepture/mistune)
[](https://sonarcloud.io/summary/new_code?id=lepture_mistune)
[](https://sonarcloud.io/summary/new_code?id=lepture_mistune)
> [!NOTE]
>
> I’ve released [Wenmode](https://github.com/lepture/wenmode), a new Markdown parser inspired by the lessons learned from Mistune.
>
> Wenmode focuses on fast CommonMark-style parsing, explicit rule composition, mdast-compatible AST output, safe HTML defaults, streaming output, and pluggable renderers.
>
> In the current benchmark suite, Wenmode’s core Markdown-to-HTML path is about 1.5-1.8x as fast as Mistune across the tested documentation corpora. See the [benchmark results](https://wenmode.lepture.com/benchmarks/) for the exact setup and numbers.
Check [benchmark results for Wenmode](https://github.com/lepture/wenmode#benchmark).
## Sponsors
Convert Word, Excel, and text-based PDF files to Markdown—or turn Markdown into Word, Excel,
and PDF—with Spire.Office for Python. Automate document conversion directly in Python, without
requiring Microsoft Office.
## Install
To install mistune:
```
$ pip install mistune
```
## Overview
Convert Markdown to HTML with ease:
```python
import mistune
markdown = mistune.create_markdown()
markdown(your_markdown_text)
```
`create_markdown()` escapes raw HTML by default. For compatibility,
`mistune.html(trusted_markdown_text)` enables raw HTML and several plugins; use
that legacy helper only for trusted input or sanitize its output externally.
## Security Reporting
If you find a security bug, please do not send a public issue or patch. Follow
the repository's [security policy](.github/SECURITY.md) to report it privately.
## Benchmarks
Here is the benchmark score on my computer. Check the `benchmark/bench.py` script.
```
mistune (3.0.0) - atx: 13.901472091674805ms
mistune (slow) - atx: 13.122797012329102ms
mistune (fast) - atx: 13.248443603515625ms
mistune (full) - atx: 15.445232391357422ms
markdown (3.3.7) - atx: 48.41303825378418ms
markdown2 (2.4.3) - atx: 379.30870056152344ms
mistletoe (0.8.2) - atx: 25.46215057373047ms
markdown_it (2.1.0) - atx: 42.37723350524902ms
mistune (3.0.0) - setext: 8.43048095703125ms
mistune (slow) - setext: 8.97979736328125ms
mistune (fast) - setext: 8.122920989990234ms
mistune (full) - setext: 9.525299072265625ms
markdown (3.3.7) - setext: 30.74812889099121ms
markdown2 (2.4.3) - setext: 218.90878677368164ms
mistletoe (0.8.2) - setext: 20.46680450439453ms
markdown_it (2.1.0) - setext: 27.010202407836914ms
mistune (3.0.0) - normal_ul: 60.910940170288086ms
mistune (slow) - normal_ul: 59.69667434692383ms
mistune (fast) - normal_ul: 60.41216850280762ms
mistune (full) - normal_ul: 62.89219856262207ms
markdown (3.3.7) - normal_ul: 83.7857723236084ms
markdown2 (2.4.3) - normal_ul: 175.36139488220215ms
mistletoe (0.8.2) - normal_ul: 74.82385635375977ms
markdown_it (2.1.0) - normal_ul: 103.0113697052002ms
mistune (3.0.0) - insane_ul: 104.1865348815918ms
mistune (slow) - insane_ul: 105.83090782165527ms
mistune (fast) - insane_ul: 103.03664207458496ms
mistune (full) - insane_ul: 105.80086708068848ms
markdown (3.3.7) - insane_ul: 133.82673263549805ms
markdown2 (2.4.3) - insane_ul: 337.23902702331543ms
mistletoe (0.8.2) - insane_ul: 122.10249900817871ms
markdown_it (2.1.0) - insane_ul: 85.92629432678223ms
mistune (3.0.0) - normal_ol: 25.092601776123047ms
mistune (slow) - normal_ol: 25.321483612060547ms
mistune (fast) - normal_ol: 25.11453628540039ms
mistune (full) - normal_ol: 25.945663452148438ms
markdown (3.3.7) - normal_ol: 43.30158233642578ms
markdown2 (2.4.3) - normal_ol: 75.87885856628418ms
mistletoe (0.8.2) - normal_ol: 33.63537788391113ms
markdown_it (2.1.0) - normal_ol: 40.307044982910156ms
mistune (3.0.0) - insane_ol: 46.201229095458984ms
mistune (slow) - insane_ol: 49.14569854736328ms
mistune (fast) - insane_ol: 45.96853256225586ms
mistune (full) - insane_ol: 47.544002532958984ms
markdown (3.3.7) - insane_ol: 50.154924392700195ms
markdown2 (2.4.3) - insane_ol: 210.48712730407715ms
mistletoe (0.8.2) - insane_ol: 84.07974243164062ms
markdown_it (2.1.0) - insane_ol: 83.61554145812988ms
mistune (3.0.0) - blockquote: 15.484809875488281ms
mistune (slow) - blockquote: 16.12544059753418ms
mistune (fast) - blockquote: 15.350818634033203ms
mistune (full) - blockquote: 16.104936599731445ms
markdown (3.3.7) - blockquote: 63.04144859313965ms
markdown2 (2.4.3) - blockquote: 702.4445533752441ms
mistletoe (0.8.2) - blockquote: 28.56159210205078ms
markdown_it (2.1.0) - blockquote: 37.35041618347168ms
mistune (3.0.0) - blockhtml: 7.898569107055664ms
mistune (slow) - blockhtml: 7.080316543579102ms
mistune (fast) - blockhtml: 7.414340972900391ms
mistune (full) - blockhtml: 8.559703826904297ms
markdown (3.3.7) - blockhtml: 46.65660858154297ms
markdown2 (2.4.3) - blockhtml: 122.09773063659668ms
mistletoe (0.8.2) - blockhtml: 12.23611831665039ms
markdown_it (2.1.0) - blockhtml: 26.836156845092773ms
mistune (3.0.0) - fenced: 4.281282424926758ms
mistune (slow) - fenced: 4.092931747436523ms
mistune (fast) - fenced: 4.024267196655273ms
mistune (full) - fenced: 4.453897476196289ms
markdown (3.3.7) - fenced: 33.83779525756836ms
markdown2 (2.4.3) - fenced: 92.49091148376465ms
mistletoe (0.8.2) - fenced: 9.19342041015625ms
markdown_it (2.1.0) - fenced: 12.503623962402344ms
mistune (3.0.0) - paragraph: 95.94106674194336ms
mistune (slow) - paragraph: 561.2788200378418ms
mistune (fast) - paragraph: 93.597412109375ms
mistune (full) - paragraph: 110.09836196899414ms
markdown (3.3.7) - paragraph: 304.1346073150635ms
markdown2 (2.4.3) - paragraph: 267.84825325012207ms
mistletoe (0.8.2) - paragraph: 779.3235778808594ms
markdown_it (2.1.0) - paragraph: 825.5178928375244ms
mistune (3.0.0) - emphasis: 23.591041564941406ms
mistune (slow) - emphasis: 16.934871673583984ms
mistune (fast) - emphasis: 23.232460021972656ms
mistune (full) - emphasis: 25.2840518951416ms
markdown (3.3.7) - emphasis: 76.50399208068848ms
markdown2 (2.4.3) - emphasis: 9.393930435180664ms
mistletoe (0.8.2) - emphasis: 33.68663787841797ms
markdown_it (2.1.0) - emphasis: 60.90521812438965ms
mistune (3.0.0) - auto_links: 3.7980079650878906ms
mistune (slow) - auto_links: 3.3910274505615234ms
mistune (fast) - auto_links: 3.6630630493164062ms
mistune (full) - auto_links: 3.9186477661132812ms
markdown (3.3.7) - auto_links: 23.04673194885254ms
markdown2 (2.4.3) - auto_links: 6.537914276123047ms
mistletoe (0.8.2) - auto_links: 8.360624313354492ms
markdown_it (2.1.0) - auto_links: 19.732236862182617ms
mistune (3.0.0) - std_links: 21.920442581176758ms
mistune (slow) - std_links: 17.487764358520508ms
mistune (fast) - std_links: 19.87743377685547ms
mistune (full) - std_links: 24.514198303222656ms
markdown (3.3.7) - std_links: 39.1237735748291ms
markdown2 (2.4.3) - std_links: 14.519691467285156ms
mistletoe (0.8.2) - std_links: 22.84979820251465ms
markdown_it (2.1.0) - std_links: 32.60660171508789ms
mistune (3.0.0) - ref_links: 47.673940658569336ms
mistune (slow) - ref_links: 39.449214935302734ms
mistune (fast) - ref_links: 44.81911659240723ms
mistune (full) - ref_links: 52.37579345703125ms
markdown (3.3.7) - ref_links: 87.65625953674316ms
markdown2 (2.4.3) - ref_links: 23.118972778320312ms
mistletoe (0.8.2) - ref_links: 59.136390686035156ms
markdown_it (2.1.0) - ref_links: 80.44648170471191ms
mistune (3.0.0) - readme: 56.607723236083984ms
mistune (slow) - readme: 68.8173770904541ms
mistune (fast) - readme: 53.86018753051758ms
mistune (full) - readme: 61.25998497009277ms
markdown (3.3.7) - readme: 211.02523803710938ms
markdown2 (2.4.3) - readme: 533.4112644195557ms
mistletoe (0.8.2) - readme: 110.12959480285645ms
markdown_it (2.1.0) - readme: 247.9879856109619ms
```
All results are in milliseconds (ms).
| / Parser ➡ Case ⬇ | mistune (3.0.0) | mistune (slow) | mistune (fast) | mistune (full) | markdown (3.3.7) | markdown2 (2.4.3) | mistletoe (0.8.2) | markdown_it (2.1.0) |
| -------------- | --------------: | -------------: | -------------: | -------------: | ---------------: | ----------------: | ----------------: | ------------------: |
| **atx** | 13.90 | 13.12 | 13.25 | 15.45 | 48.41 | 379.31 | 25.46 | 42.38 |
| **setext** | 8.43 | 8.98 | 8.12 | 9.53 | 30.75 | 218.91 | 20.47 | 27.01 |
| **normal_ul** | 60.91 | 59.70 | 60.41 | 62.89 | 83.79 | 175.36 | 74.82 | 103.01 |
| **insane_ul** | 104.19 | 105.83 | 103.04 | 105.80 | 133.83 | 337.24 | 122.10 | 85.93 |
| **normal_ol** | 25.10 | 25.32 | 25.11 | 25.95 | 43.30 | 75.88 | 33.64 | 40.31 |
| **insane_ol** | 46.20 | 49.15 | 45.97 | 47.54 | 50.15 | 210.49 | 84.08 | 83.62 |
| **blockquote** | 15.48 | 16.13 | 15.35 | 16.10 | 63.04 | 702.44 | 28.56 | 37.35 |
| **blockhtml** | 7.90 | 7.08 | 7.41 | 8.56 | 46.66 | 122.10 | 12.24 | 26.84 |
| **fenced** | 4.28 | 4.09 | 4.02 | 4.45 | 33.84 | 92.49 | 9.19 | 12.50 |
| **paragraph** | 95.94 | 561.28 | 93.60 | 110.10 | 304.13 | 267.85 | 779.32 | 825.52 |
| **emphasis** | 23.59 | 16.93 | 23.23 | 25.28 | 76.50 | 9.39 | 33.69 | 60.91 |
| **auto_links** | 3.80 | 3.39 | 3.66 | 3.92 | 23.05 | 6.54 | 8.36 | 19.73 |
| **std_links** | 21.92 | 17.49 | 19.88 | 24.51 | 39.12 | 14.52 | 22.85 | 32.61 |
| **ref_links** | 47.67 | 39.45 | 44.82 | 52.38 | 87.66 | 23.12 | 59.14 | 80.45 |
| **readme** | 56.61 | 68.82 | 53.86 | 61.26 | 211.03 | 533.41 | 110.13 | 247.99 |
## License
Mistune is licensed under BSD. Please see LICENSE for licensing details.
lepture-mistune-f19057f/README.rst 0000664 0000000 0000000 00000001255 15265371675 0016732 0 ustar 00root root 0000000 0000000 Mistune v3
==========
A fast yet powerful Python Markdown parser with renderers and plugins.
Overview
--------
Convert Markdown to HTML with ease:
.. code-block:: python
import mistune
markdown = mistune.create_markdown()
markdown(your_markdown_text)
``create_markdown()`` escapes raw HTML by default. The legacy
``mistune.html(trusted_markdown_text)`` helper enables raw HTML and several
plugins; use it only for trusted input or sanitize its output externally.
Useful Links
------------
1. GitHub: https://github.com/lepture/mistune
2. Docs: https://mistune.lepture.com/
License
-------
Mistune is licensed under BSD. Please see LICENSE for licensing details.
lepture-mistune-f19057f/benchmark/ 0000775 0000000 0000000 00000000000 15265371675 0017172 5 ustar 00root root 0000000 0000000 lepture-mistune-f19057f/benchmark/bench.py 0000664 0000000 0000000 00000006351 15265371675 0020630 0 ustar 00root root 0000000 0000000 import os
import sys
import time
ROOT_DIR = os.path.dirname(__file__)
sys.path.insert(0, os.path.join(ROOT_DIR, ".."))
CASES = {}
def load_case(filename):
if filename == "readme.txt":
filepath = os.path.join(ROOT_DIR, "../README.md")
else:
filepath = os.path.join(ROOT_DIR, "cases", filename)
with open(filepath, "r") as f:
content = f.read()
name = filename.replace(".txt", "")
CASES[name] = content
return content
def run_case(method, content, count=100):
# ignore first trigger
method(content)
start = time.time()
while count > 0:
method(content)
count -= 1
duration = time.time() - start
return duration * 1000
def get_markdown_parsers():
parsers = {}
import mistune
from mistune.directives import Admonition, Include, RSTDirective, TableOfContents
parsers[f"mistune ({mistune.__version__})"] = mistune.html
parsers["mistune (core)"] = mistune.create_markdown(escape=False)
parsers["mistune (full)"] = mistune.create_markdown(
escape=False,
plugins=[
"url",
"abbr",
"ruby",
"strikethrough",
"mark",
"insert",
"subscript",
"superscript",
"footnotes",
"def_list",
"math",
"table",
"task_lists",
RSTDirective(
[
Admonition(),
TableOfContents(),
Include(),
]
),
],
)
try:
import mistune_v1
parsers[f"mistune ({mistune_v1.__version__})"] = mistune_v1.markdown
except ImportError:
pass
try:
import markdown
parsers[f"markdown ({markdown.__version__})"] = markdown.markdown
except ImportError:
pass
try:
from markdown2 import Markdown
from markdown2 import __version__ as m2v
markdowner = Markdown()
parsers[f"markdown2 ({m2v})"] = markdowner.convert
except ImportError:
pass
try:
import mistletoe
parsers[f"mistletoe ({mistletoe.__version__})"] = mistletoe.markdown
except ImportError:
pass
try:
from markdown_it import MarkdownIt
from markdown_it import __version__ as mitv
md = MarkdownIt()
parsers[f"markdown_it ({mitv})"] = md.render
except ImportError:
pass
return parsers
def benchmarks(cases, count=100):
methods = get_markdown_parsers()
for name in cases:
content = load_case(name + ".txt")
for md_name in methods:
func = methods[md_name]
duration = run_case(func, content, count)
print(f"{md_name} - {name}: {duration}ms")
if __name__ == "__main__":
cases = [
# block
"atx",
"setext",
"normal_ul",
"insane_ul",
"normal_ol",
"insane_ol",
"blockquote",
"blockhtml",
"fenced",
"paragraph",
# inline
"emphasis",
"auto_links",
"std_links",
"ref_links",
"readme",
]
if len(sys.argv) > 1:
benchmarks(sys.argv[1:])
else:
benchmarks(cases)
lepture-mistune-f19057f/benchmark/bench_edges.py 0000664 0000000 0000000 00000030155 15265371675 0021776 0 ustar 00root root 0000000 0000000 """Benchmark adversarial Markdown inputs.
Run one case with:
python benchmark/bench_edges.py --case blank-list-continuations
The ``normalized`` column is the time growth divided by the input-size
growth. Values near 1 indicate linear scaling; values near 2 indicate that
doubling the input takes roughly four times as long.
"""
from __future__ import annotations
import argparse
import math
import statistics
import time
from collections.abc import Callable
from dataclasses import dataclass
from typing import Optional
@dataclass(frozen=True)
class EdgeCase:
name: str
category: str
generate: Callable[[int], str]
make_markdown: Callable[[str], object]
sizes: tuple[int, ...]
@dataclass(frozen=True)
class Result:
case: str
renderer: str
size: int
bytes: int
best: float
mean: float
growth: Optional[float]
normalized_growth: Optional[float]
def markdown_factory(renderer: str = "html", plugins: Optional[list[str]] = None) -> Callable[[str], object]:
def make_markdown(_renderer: str = renderer, _plugins: Optional[list[str]] = plugins):
import mistune
return mistune.create_markdown(renderer=_renderer, escape=False, plugins=_plugins)
return make_markdown
CORE = markdown_factory()
SPOILER = markdown_factory(plugins=["spoiler"])
MATH = markdown_factory(plugins=["math"])
FOOTNOTES = markdown_factory(plugins=["footnotes"])
GITHUB = markdown_factory(plugins=["table", "task_lists"])
STRIKETHROUGH = markdown_factory(plugins=["strikethrough"])
MARK = markdown_factory(plugins=["mark"])
INSERT = markdown_factory(plugins=["insert"])
EDGE_CASES = {
"deep-blockquote": EdgeCase("deep-blockquote", "containers", lambda n: "> " * n + "text\n", CORE, (100, 1000, 10000)),
"deep-list": EdgeCase("deep-list", "containers", lambda n: "- " * n + "text\n", CORE, (100, 1000, 10000)),
"blockquote-depth-boundary": EdgeCase(
"blockquote-depth-boundary", "containers", lambda n: "> " * n + "text\n", CORE, (99, 100, 101, 1000)
),
"alternating-containers": EdgeCase(
"alternating-containers", "containers", lambda n: "> - " * n + "text\n", CORE, (64, 128, 256)
),
"deep-block-spoiler": EdgeCase(
"deep-block-spoiler", "containers", lambda n: ">! " * n + "text\n", SPOILER, (100, 1000, 10000)
),
"unmatched-links": EdgeCase("unmatched-links", "inline", lambda n: "[" * n + "\n", CORE, (1000, 10000, 100000)),
"nested-link-labels": EdgeCase(
"nested-link-labels", "inline", lambda n: "[" * n + "text" + "]" * n + "(/url)\n", CORE, (200, 1000, 5000)
),
"nested-image-labels": EdgeCase(
"nested-image-labels", "inline", lambda n: "" * n + "\n", CORE, (200, 1000, 5000)
),
"repeated-link-suffixes": EdgeCase(
"repeated-link-suffixes", "inline", lambda n: "[" * n + "a" + "](/u)" * n + "\n", CORE, (200, 1000, 5000)
),
"unclosed-inline-title": EdgeCase(
"unclosed-inline-title", "inline", lambda n: '[x](y "' + "\\!" * n + ")", CORE, (1000, 5000, 10000)
),
"dense-emphasis": EdgeCase("dense-emphasis", "inline", lambda n: "*a" * n + "\n", CORE, (1000, 10000, 100000)),
"long-code-span-runs": EdgeCase(
"long-code-span-runs", "inline", lambda n: "`" * n + "text" + "`" * (n - 1) + "\n", CORE, (1000, 10000, 100000)
),
"successful-long-code-span": EdgeCase(
"successful-long-code-span", "inline", lambda n: "`" * n + "text" + "`" * n + "\n", CORE, (1000, 10000, 100000)
),
"many-wrong-code-runs": EdgeCase(
"many-wrong-code-runs", "inline", lambda n: "``start " + "`x" * n + " ``\n", CORE, (1000, 10000, 100000)
),
"link-label-long-code-runs": EdgeCase(
"link-label-long-code-runs",
"inline",
lambda n: "[" + "`" * n + "text" + "`" * (n - 1) + "](/url)\n",
CORE,
(1000, 10000, 100000),
),
"unclosed-link-destinations": EdgeCase(
"unclosed-link-destinations", "inline", lambda n: "[](" * n + " [ok](/ok)\n", CORE, (1000, 5000, 10000)
),
"unclosed-inline-comments": EdgeCase(
"unclosed-inline-comments", "inline", lambda n: "text " + "
lepture-mistune-f19057f/benchmark/cases/blockquote.txt 0000664 0000000 0000000 00000000223 15265371675 0023176 0 ustar 00root root 0000000 0000000 > Block quote content
>
> Block quote paragraph
> Second block quote
> > Nested block quote
> > > > > > > > > > > > > > > > > > > > > Block quote
lepture-mistune-f19057f/benchmark/cases/emphasis.txt 0000664 0000000 0000000 00000000276 15265371675 0022647 0 ustar 00root root 0000000 0000000 case for emphasis: **bold** __bold__ *italic* _italic_, **bold and *italic***, **bold *italic* and __bold__**. ______________foo______________ and *********bar********* **__**__bold__**__**
lepture-mistune-f19057f/benchmark/cases/fenced.txt 0000664 0000000 0000000 00000000363 15265371675 0022257 0 ustar 00root root 0000000 0000000 ```
function foo() {
return 'foo'
}
```
```js
function foo() {
return 'foo'
}
```
~~~python
def foo():
return 'foo'
~~~
~~~python filename=foo.py
def foo():
return 'foo'
~~~
````
```
function foo() {
return 'foo'
}
```
````
lepture-mistune-f19057f/benchmark/cases/insane_ol.txt 0000664 0000000 0000000 00000000762 15265371675 0023005 0 ustar 00root root 0000000 0000000 1. List Item
2. List Item
3) List Item
3. List Item
5) List Item
- List Item
List Item
2. List Item
3. List Item
4. List Item
5. List Item
6. List Item
7. List Item
8. List Item
9. List Item
10. List Item
11. List Item
6) List Item
1. New list
2. Loose item
10) List Item
List Item
List Item
List Item
lepture-mistune-f19057f/benchmark/cases/insane_ul.txt 0000664 0000000 0000000 00000001240 15265371675 0023003 0 ustar 00root root 0000000 0000000 - List Item
- List Item
- List Item
- List Item
- List Item
- List Item
- List Item
- List Item
- List Item
- List Item
- List Item
- List Item
- List Item
- List Item
- List Item
- List Item
- List Item
- List Item
- List Item
- List Item
- List Item
- List Item
- Loose List Item
Loose paragraph
- List Item
- List Item
- List Item
+ List Item
- List Item
- List Item
- List Item
* List Item
List Item
List Item
List Item
lepture-mistune-f19057f/benchmark/cases/normal_ol.txt 0000664 0000000 0000000 00000000217 15265371675 0023013 0 ustar 00root root 0000000 0000000 1. List Item
2. List Item
3) List Item
3. List Item
1) New list
2) Loose item
10. List Item
List Item
List Item
List Item
lepture-mistune-f19057f/benchmark/cases/normal_ul.txt 0000664 0000000 0000000 00000000471 15265371675 0023023 0 ustar 00root root 0000000 0000000 - List Item
- List Item
- List Item
- List Item
- List Item
- List Item
- List Item
- List Item
+ List Item
- List Item
- List Item
- List Item
* List Item
List Item
List Item
List Item
* List Item
List Item
List Item
List Item
* List Item
List Item
List Item
List Item
lepture-mistune-f19057f/benchmark/cases/paragraph.txt 0000664 0000000 0000000 00000035657 15265371675 0023016 0 ustar 00root root 0000000 0000000 Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam eget
quam egestas, gravida quam sed, faucibus turpis. Curabitur commodo sit
amet arcu vitae hendrerit. Curabitur posuere quis nisi a lobortis.
Maecenas consectetur neque ut sem pulvinar tincidunt. Etiam mattis
ligula at quam varius, vel laoreet diam interdum. Proin vel tempus
arcu, venenatis facilisis diam. Praesent justo sapien, mattis in
tempus et, luctus fermentum mi. Proin mattis felis eget augue mollis
aliquet. Donec bibendum sem orci, a maximus nisi molestie in.
Vestibulum et varius nisl, a sodales ligula. Curabitur gravida massa
vel enim facilisis, id dapibus mauris tincidunt. Morbi pretium velit
velit, vel accumsan lacus malesuada et. Vivamus massa elit, feugiat at
aliquet ac, eleifend eget dui. Donec hendrerit metus elementum augue
gravida posuere. Quisque convallis egestas augue.
Fusce vel pulvinar
dui. Sed tincidunt felis nec placerat feugiat. Fusce laoreet ligula a
ipsum suscipit, id vehicula tortor scelerisque. Sed placerat est
massa, sit amet egestas magna interdum in. Vestibulum ante ipsum
primis in faucibus orci luctus et ultrices posuere cubilia curae; Ut
eget pretium felis. Fusce rhoncus fringilla ipsum, sed varius ante
placerat nec. Vestibulum ante ipsum primis in faucibus orci luctus et
ultrices posuere cubilia curae; Proin a maximus massa. Vestibulum
placerat urna quis venenatis ullamcorper. Morbi finibus imperdiet
ligula ac feugiat. Fusce consectetur gravida leo id efficitur.
Suspendisse potenti. Vivamus pellentesque turpis a erat sodales
venenatis vel quis justo. Ut vitae viverra dui. Quisque non sagittis
lectus. Nunc libero nisi, fermentum vitae imperdiet vel, pulvinar ut
augue. Maecenas at magna vel dolor tempor luctus. Etiam consectetur
est eu tortor luctus tristique. Aliquam rhoncus enim non felis feugiat
gravida. Suspendisse eget lorem hendrerit, pellentesque dolor et,
scelerisque nisl. Donec sit amet lacus a tellus mattis pretium. Sed
urna lectus, gravida sed est vel, molestie luctus neque. Phasellus
finibus tempor odio. Nunc ullamcorper dui at nunc sodales sagittis. In
mattis dolor vitae sem efficitur, vel auctor ipsum suscipit. Mauris
nec orci non justo facilisis posuere.
Sed id tortor vel est elementum
pellentesque non luctus lectus. Proin at quam non turpis dapibus
dapibus ac nec felis. Phasellus sapien nisi, pulvinar sit amet aliquam
ac, imperdiet vel leo. Nunc a nisi massa. Aenean ultricies sed dui id
dapibus. Sed sit amet risus et nisl mattis consequat. Praesent semper
orci eget sem imperdiet cursus. Donec fringilla convallis turpis, in
sodales metus elementum dignissim. Nunc eu cursus elit. Sed malesuada,
velit hendrerit volutpat varius, leo metus tristique quam, a imperdiet
nunc urna a purus. Donec id tristique quam, dictum egestas ligula.
Morbi varius suscipit bibendum. Etiam id diam tempor magna finibus
viverra.
Duis auctor interdum lorem, eget porttitor turpis.
Pellentesque at malesuada eros. Vestibulum efficitur eget neque sit
amet posuere. Ut est leo, ullamcorper efficitur lobortis sit amet,
facilisis ut purus. Cras hendrerit eu erat vitae dignissim. Aenean et
pharetra lectus. Etiam sed elementum lectus, ut interdum ligula.
Nunc
egestas nulla posuere, feugiat leo non, condimentum eros. Fusce
scelerisque turpis lacus, a dapibus diam mattis ut. Quisque vestibulum
laoreet libero, in lobortis felis ultrices id. Vivamus id tellus
efficitur, porta purus at, consequat magna. Donec dapibus justo dolor.
Aliquam erat volutpat. Aenean at tortor libero.
Suspendisse pharetra
mi urna, a accumsan mi placerat et. Proin accumsan, nunc id tristique
auctor, magna leo rhoncus nisl, at commodo sem lorem et lectus.
Integer massa dolor, fringilla at enim et, blandit imperdiet purus.
Phasellus sit amet leo at dolor ornare ultricies. Etiam a convallis
velit. Proin auctor, sem non lacinia luctus, purus metus luctus ipsum,
aliquet placerat arcu felis a erat. Cras et consequat leo, sagittis
ultrices sem. Nullam egestas ipsum eget porttitor tempus. Ut laoreet
non lectus quis imperdiet. Duis tempus in magna eget ornare.
Pellentesque habitant morbi tristique senectus et netus et malesuada
fames ac turpis egestas.
Curabitur a sagittis justo, et suscipit
nibh. Proin sed lorem lacinia, efficitur quam sed, imperdiet felis.
Morbi in condimentum arcu. Sed sodales vehicula nunc, vitae mollis
ipsum faucibus ut. Suspendisse ornare efficitur turpis, non placerat
nisl aliquet et. Aliquam aliquam, justo eu tincidunt ornare, nisi elit
tempor velit, placerat pulvinar erat tortor vehicula erat. Nam euismod
turpis eu congue pulvinar. Pellentesque fringilla sapien ac mauris
efficitur viverra. Suspendisse hendrerit leo et erat condimentum
sagittis. Ut lacinia mattis pharetra. Ut semper lacinia tristique.
Nullam fermentum nunc in erat interdum interdum. Pellentesque
fringilla, purus nec commodo elementum, nulla arcu elementum diam, vel
aliquam est ante in dolor. Integer vel elit posuere, commodo felis
non, aliquet diam. Duis cursus enim at metus sodales ultricies.
Mauris ultricies id elit eget elementum. Aenean elementum nisi quis
vehicula placerat. Morbi lobortis, neque quis lobortis vehicula, arcu
nisi blandit elit, eget rhoncus orci mauris a massa. Donec a purus
bibendum, vulputate tortor id, bibendum metus. Donec eget sagittis
sem. Maecenas metus ex, cursus a mollis a, imperdiet sed felis.
Integer gravida, lacus eget posuere laoreet, velit dui tincidunt
turpis, vel hendrerit sem massa iaculis odio.
Proin a metus
fringilla, ullamcorper nisl nec, imperdiet massa. Maecenas
sollicitudin egestas varius. Nulla dictum, nunc ut venenatis ornare,
mi nibh viverra leo, a aliquam tellus velit ac erat. Nulla eget
faucibus urna. Phasellus sit amet neque quis est finibus elementum. In
hac habitasse platea dictumst. Quisque ultricies, orci vel bibendum
venenatis, nibh nisl iaculis ipsum, sit amet interdum tortor neque non
urna. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
Pellentesque convallis in nibh sit amet pulvinar.
Vivamus sed orci
magna. Quisque fermentum leo nunc, sit amet fringilla lacus ultrices
consectetur. Nulla ullamcorper interdum aliquam. Nunc sagittis lectus
eget mauris molestie consectetur. Vivamus et imperdiet tortor. Fusce
faucibus velit quis rutrum tincidunt. Quisque consectetur blandit
massa a facilisis. Phasellus faucibus dui eu pretium laoreet.
Nullam
scelerisque pulvinar ante quis elementum. Curabitur placerat sem eu
neque fringilla interdum. Aliquam metus purus, vulputate ut augue vel,
aliquam interdum risus. Cras a lacus et nulla feugiat vestibulum.
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus
sagittis dui enim, et dictum erat ornare in. Donec fringilla placerat
ipsum, et viverra metus tincidunt et. Duis vestibulum elit pharetra
mauris mattis tempor. Maecenas a finibus tortor. Nullam sed massa ac
velit lacinia rutrum quis non purus. Vestibulum neque odio, accumsan
vitae posuere a, tempus sit amet est. Phasellus justo dui, rhoncus non
orci convallis, pulvinar consectetur ante.
Suspendisse pellentesque
enim magna, non accumsan tortor egestas sit amet. Proin et placerat
urna, in pretium metus. Sed nulla enim, lacinia vitae nisl id, rhoncus
aliquam dui. Aliquam tincidunt diam arcu, eget facilisis tellus
commodo quis. Morbi luctus bibendum viverra. Donec eget elementum ex.
Integer posuere turpis ac neque elementum volutpat. Nulla lacinia sem
vitae nisi mattis, at iaculis tellus congue. Donec sed luctus magna.
Sed sit amet gravida metus. Ut non dolor hendrerit, ultricies odio
eget, pretium tortor. Suspendisse potenti. In maximus ornare felis, at
rutrum enim viverra quis.
Curabitur at diam ultricies, pretium lacus
sed, sollicitudin dolor. Vestibulum consectetur nunc a ipsum rhoncus
dapibus. In eget augue non leo blandit consectetur. Nullam ut
ullamcorper nulla. Sed vulputate justo et leo scelerisque
sollicitudin. Ut tincidunt volutpat placerat. Curabitur ultrices dolor
eu quam venenatis, a scelerisque mi commodo. Phasellus vel venenatis
ante. Integer vulputate, mi eu lacinia fermentum, sapien purus sodales
massa, at malesuada urna lorem laoreet ligula. Fusce sit amet faucibus
purus, id facilisis turpis. Cras sit amet vestibulum elit, ac
facilisis sem. Proin eleifend semper enim non fringilla. Donec vitae
justo sed sapien gravida porta sit amet in velit. Nullam a diam quis
orci auctor sagittis vitae ac libero. Cras porta, nunc et auctor
lobortis, ligula elit lacinia nisi, quis ultrices elit mi ac lorem.
Morbi eu ligula eget turpis rhoncus aliquet et at nunc. Vivamus
fermentum vitae metus vel suscipit. Donec ante metus, auctor et sapien
ac, tempor eleifend sapien. Nunc viverra augue sit amet felis egestas,
id pellentesque libero vulputate. Cras faucibus, risus ac suscipit
semper, ipsum ante porta diam, eleifend luctus ante lectus ac ligula.
Curabitur in magna ac nisl fermentum volutpat sit amet at nunc.
Curabitur condimentum tempor risus in maximus. Integer ut congue nunc,
eu lobortis metus. Nam vulputate nisl ut ligula blandit ornare.
Suspendisse blandit pulvinar urna ac pulvinar. Maecenas rutrum pretium
turpis sit amet faucibus. Fusce commodo tempor nunc, quis tincidunt
felis. Pellentesque eu fermentum libero, at rutrum lacus. Quisque
volutpat dui ante, sed ullamcorper odio vestibulum ut.
Donec nec est
tempus, bibendum est ac, placerat orci. Praesent ligula orci, commodo
id iaculis vel, tristique id neque. Donec sed rhoncus arcu, vel
pharetra enim. Cras convallis eu tortor sit amet venenatis. Duis
posuere scelerisque justo sed posuere. Suspendisse facilisis, metus
vel pharetra rutrum, augue enim gravida arcu, non fringilla sem tellus
vel tortor. Cras vitae purus et erat lobortis auctor. Orci varius
natoque penatibus et magnis dis parturient montes, nascetur ridiculus
mus. Praesent magna tellus, semper vitae mauris vulputate, finibus
porta sem. Mauris et ipsum accumsan, dapibus dui ut, hendrerit magna.
Nam malesuada odio non orci tempor, ut gravida velit faucibus.
Vestibulum molestie eu nunc at tempus. Maecenas lacinia consequat
lorem non dapibus. In at ultricies nisl. Fusce pretium ac nisi non
euismod. Nunc ut metus turpis.
Donec efficitur tincidunt mattis. Sed
lacus lorem, bibendum non magna at, iaculis viverra est. Proin sed
interdum ligula. Maecenas gravida finibus augue, a laoreet nisl. Fusce
quis tempus sapien. Pellentesque vitae nulla risus. Fusce nec arcu
ipsum. Pellentesque dapibus congue arcu ac ornare. Donec sagittis enim
id dui hendrerit molestie eu pellentesque est. Donec et dui lacus.
Mauris vulputate dui a turpis malesuada lacinia. Nullam non dolor
pellentesque, ultrices justo id, blandit enim. Vestibulum dapibus
vestibulum quam, vel lobortis sapien eleifend vitae. Sed volutpat
libero sed odio vehicula ullamcorper in non nunc. Nullam placerat diam
sed ex interdum, ut egestas nibh posuere.
Pellentesque ac ante
mauris. Etiam turpis nulla, aliquam ut nibh a, lacinia tincidunt
augue. Cras ultricies nibh turpis, in consequat quam pulvinar non.
Aenean vel nunc quam. Sed pulvinar mauris nec metus pulvinar
vulputate. Praesent vitae varius quam, consequat sagittis sapien. In
vitae tristique lacus. Aenean egestas, elit at semper porta, enim nisi
eleifend lorem, at consequat sapien est suscipit velit. Duis a odio
risus. In in dolor condimentum, fringilla arcu egestas, sollicitudin
dui. Pellentesque laoreet lacinia dignissim.
Praesent ac consectetur
magna. Aliquam rutrum augue et tellus tristique consectetur. Integer
sollicitudin sollicitudin imperdiet. Duis in felis fringilla, dictum
risus quis, egestas odio. Nulla eu aliquet sem, sed sollicitudin
felis. Nullam mauris odio, fermentum at vulputate eu, tincidunt a
orci. Ut vehicula bibendum metus sed efficitur. Suspendisse dui risus,
accumsan in consectetur id, dignissim a dolor. Quisque vel volutpat
libero, non hendrerit lorem. Sed purus sem, accumsan id eros sed,
dapibus porta est.
Cras ac consequat lectus. Nam bibendum malesuada
metus, id varius lorem scelerisque a. In volutpat sapien eget varius
lacinia. Fusce lobortis interdum dolor, non cursus lectus. Ut blandit
arcu sed dui pulvinar, ornare mattis urna porta. Nunc nibh diam,
posuere vitae eleifend aliquet, egestas a magna. Morbi in orci libero.
Integer tincidunt nunc rhoncus blandit gravida. Nullam cursus
consequat ante vel sodales.
Quisque viverra turpis vel ultrices
mattis. Cras efficitur ipsum leo, sed elementum massa lacinia eget.
Etiam ac massa lorem. Vivamus vitae eros ipsum. Maecenas facilisis,
purus in laoreet maximus, ipsum libero luctus sem, ullamcorper
dignissim erat lorem at justo. Mauris laoreet, arcu at ultricies
posuere, mauris libero lacinia nibh, non faucibus velit mauris at
purus. Vivamus mollis hendrerit neque vitae suscipit. Pellentesque
ultricies porttitor ex id euismod. Praesent fermentum facilisis enim
et aliquam. Nulla feugiat lacinia purus, vel egestas elit maximus vel.
Vestibulum nunc libero, ultricies sed orci in, placerat varius eros.
Cras id nibh sed erat tincidunt scelerisque vel in ante. Nulla
facilisi. Orci varius natoque penatibus et magnis dis parturient
montes, nascetur ridiculus mus. Cras iaculis convallis nisl, eu
ultrices odio efficitur in. Donec eleifend nulla nec justo commodo, ac
consectetur quam consequat. Vivamus mattis condimentum massa, in
accumsan purus ornare ut. Nulla ac auctor arcu, nec tincidunt nibh.
Maecenas vitae nulla vel risus pretium faucibus.
Morbi vel facilisis
massa. Etiam tempus ornare turpis, a finibus ex aliquam eu. Praesent
aliquam libero non accumsan sollicitudin. Proin imperdiet libero diam,
vel malesuada leo maximus a. Ut vestibulum tortor et faucibus
pellentesque. Curabitur sed malesuada augue. Ut eu dignissim eros.
Integer pharetra efficitur est ut semper. Sed at lacinia justo, ut
imperdiet nulla. Phasellus bibendum libero sit amet tellus imperdiet,
eu consequat lorem tincidunt. Cras porttitor semper sem nec commodo.
Maecenas eget nisi id velit posuere iaculis. Nulla ut scelerisque dui.
Quisque sollicitudin luctus lacus, id condimentum lectus vestibulum
at. Quisque euismod ex dui, at ullamcorper quam interdum egestas.
Vestibulum dapibus efficitur tellus sed efficitur. Cras in felis ac
lacus laoreet rutrum. Praesent eget nunc placerat, feugiat sem eu,
elementum eros. Mauris vitae porta lorem, a viverra magna. Aliquam
quam diam, bibendum eu ante a, iaculis tincidunt tellus. Interdum et
malesuada fames ac ante ipsum primis in faucibus. Integer mattis
molestie libero a fermentum.
Integer pharetra, leo ut placerat
tempor, nisi velit laoreet purus, vel lobortis libero leo quis tortor.
Nunc viverra erat vel enim tempor, nec egestas ligula laoreet. Nam
finibus, orci vitae euismod dapibus, felis erat pretium lorem, sed
laoreet purus erat ut ligula. Curabitur eu rutrum purus. Nunc non
efficitur ex. Vivamus non pretium erat, eget viverra diam. Donec ac
orci ac mi lacinia posuere. Integer venenatis est hendrerit velit
pretium rutrum. Donec vehicula mattis mi vitae vehicula. Donec eget
tortor efficitur nulla semper sollicitudin. Aliquam nisl nisi,
consectetur id leo quis, imperdiet fringilla diam. Nulla ultricies
ipsum sapien, a posuere eros porttitor nec. Nam pretium auctor nunc at
auctor. Quisque mattis velit nec tortor aliquet porttitor. Proin nulla
ligula, hendrerit in fermentum sed, imperdiet ac ligula.
lepture-mistune-f19057f/benchmark/cases/ref_links.txt 0000664 0000000 0000000 00000000401 15265371675 0023000 0 ustar 00root root 0000000 0000000 [f1]: /bar
[f2]: /bar "baz"
[f3]:
[f4]: "baz"
[foo][f1] [foo][f2] [foo][f3] [foo][f4]
[f1][] [f2][] [f3][] [f4][]
[f1] [f2] [f3] [f4]
![foo][f1] ![foo][f2] ![foo][f3] ![foo][f4]
![f1][] ![f2][] ![f3][] ![f4][]
![f1] ![f2] ![f3] ![f4]
lepture-mistune-f19057f/benchmark/cases/setext.txt 0000664 0000000 0000000 00000000114 15265371675 0022341 0 ustar 00root root 0000000 0000000 h1
==
h2
--
----
heading
-------
h1
==
h1
==
h1
==
h1
h1
h1
h1
h1
h1
==
lepture-mistune-f19057f/benchmark/cases/std_links.txt 0000664 0000000 0000000 00000000204 15265371675 0023017 0 ustar 00root root 0000000 0000000 [foo](/bar) [foo](/bar "baz") [foo]() [foo]( "baz")
  ![foo]() 
lepture-mistune-f19057f/docs/ 0000775 0000000 0000000 00000000000 15265371675 0016170 5 ustar 00root root 0000000 0000000 lepture-mistune-f19057f/docs/Makefile 0000664 0000000 0000000 00000001172 15265371675 0017631 0 ustar 00root root 0000000 0000000 # Minimal makefile for Sphinx documentation
#
# You can set these variables from the command line, and also
# from the environment for the first two.
SPHINXOPTS ?=
SPHINXBUILD ?= sphinx-build
SOURCEDIR = .
BUILDDIR = _build
# Put it first so that "make" without argument is like "make help".
help:
@$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
.PHONY: help Makefile
# Catch-all target: route all unknown targets to Sphinx using the new
# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS).
%: Makefile
@$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
lepture-mistune-f19057f/docs/_static/ 0000775 0000000 0000000 00000000000 15265371675 0017616 5 ustar 00root root 0000000 0000000 lepture-mistune-f19057f/docs/_static/dark-icon.svg 0000664 0000000 0000000 00000004740 15265371675 0022213 0 ustar 00root root 0000000 0000000