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 % hoedown ## hi\### ^D

hi\

% hoedown [ΑΓΩ]: /φου [αγω] ^D

[αγω]

% hoedown ``` [foo]: /url ``` [foo] ^D

```

```

foo

% hoedown [foo](url "ti\*tle") ^D

foo

% ./hoedown - one - two - three - four ^D `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))'