cmark and not X?hoedownhoedown (which derives from sundown) is slightly faster than cmark in our benchmarks (0.21s vs. 0.29s). But both are much faster than any other available implementations.
hoedown boasts of including “protection against all possible DOS attacks,” but there are some chinks in the armor:
% time python -c 'print(("[" * 50000) + "a" + ("]" * 50000))' | cmark
...
user 0m0.073s
% time python -c 'print(("[" * 50000) + "a" + ("]" * 50000))' | hoedown
...
0m17.84s
hoedown has many parsing bugs. Here is a selection:
% hoedown
- one
- two
1. three
^D
<ul>
<li>one
<ul>
<li>two</li>
<li>three</li>
</ul></li>
</ul>
% hoedown
## hi\###
^D
<h2>hi\</h2>
% hoedown
[ΑΓΩ]: /φου
[αγω]
^D
<p>[αγω]</p>
% hoedown
```
[foo]: /url
```
[foo]
^D
<p>```</p>
<p>```</p>
<p><a href="/url">foo</a></p>
% hoedown
[foo](url "ti\*tle")
^D
<p><a href="url" title="ti\*tle">foo</a></p>
discountcmark is about six times faster.
kramdowncmark is about a hundred times faster.
kramdown also gets tied in knots by pathological input like
python -c 'print(("[" * 50000) + "a" + ("]" * 50000))'