105 lines
1.6 KiB
Markdown
105 lines
1.6 KiB
Markdown
|
Why use `cmark` and not X?
|
||
|
==========================
|
||
|
|
||
|
`hoedown`
|
||
|
---------
|
||
|
|
||
|
`hoedown` (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 (as of
|
||
|
v3.0.3):
|
||
|
|
||
|
% 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>
|
||
|
|
||
|
|
||
|
% ./hoedown
|
||
|
- one
|
||
|
- two
|
||
|
- three
|
||
|
- four
|
||
|
^D
|
||
|
<ul>
|
||
|
<li>one
|
||
|
|
||
|
<ul>
|
||
|
<li>two</li>
|
||
|
<li>three</li>
|
||
|
<li>four</li>
|
||
|
</ul></li>
|
||
|
</ul>
|
||
|
|
||
|
|
||
|
`discount`
|
||
|
----------
|
||
|
|
||
|
`cmark` is about six times faster.
|
||
|
|
||
|
`kramdown`
|
||
|
----------
|
||
|
|
||
|
`cmark` is about a hundred times faster.
|
||
|
|
||
|
`kramdown` also gets tied in knots by pathological input like
|
||
|
|
||
|
python -c 'print(("[" * 50000) + "a" + ("]" * 50000))'
|
||
|
|
||
|
|