| 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: |
| |
| % 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> |
| |
| |
| `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))' |
| |
| |