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))'