cmark: Fast, accurate CommonMark (Markdown) parser and renderer

[ bsd3, library, text ] [ Propose Tags ] [ Report a vulnerability ]

This package provides Haskell bindings for libcmark, the reference parser for CommonMark, a fully specified variant of Markdown. It includes sources for libcmark (as of commit f40e098, implementing version 0.18 of the CommonMark spec) and does not require prior installation of the C library.

cmark provides the following advantages over existing Markdown libraries for Haskell:

  • Speed: Conversion speed is on par with the sundown library. We were unable to measure precisely against sundown, which raised a malloc error when compiled into our benchmark suite. Relative to other implementations: cmark was 82 times faster than cheapskate, 59 times faster than markdown, 105 times faster than pandoc, and 2.8 times faster than discount.

  • Memory footprint: Memory footprint is on par with sundown. On one sample, the library uses a fourth the memory that markdown uses, and less than a tenth the memory that pandoc uses.

  • Robustness: cmark can handle whatever is thrown at it, without the exponential blowups in parsing time one can sometimes get with other libraries. (The input bench/full-sample.md, for example, causes both pandoc and markdown to grind to a halt.)

  • Accuracy: cmark passes the CommonMark spec's suite of over 500 conformance tests.

  • Standardization: Since there is a spec and a comprehensive suite of tests, we can have a high degree of confidence that any two CommonMark implementations will behave the same. Thus, for example, one could use this library for server-side rendering and commonmark.js for client-side previewing.

  • Ease of installation: cmark is portable and has minimal dependencies.

cmark does not provide Haskell versions of the whole libcmark API, which is built around mutable cmark_node objects. Instead, it provides functions for converting CommonMark to HTML (and other formats), and a function for converting CommonMark to a Node tree that can be processed further using Haskell.

A note on security: This library does not attempt to sanitize HTML output. We recommend using xss-sanitize to filter the output.

A note on stability: There is a good chance the API will change significantly after this early release.


[Skip to Readme]

Modules

[Index]

Downloads

Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees

Candidates

Versions [RSS] 0.1.0.0, 0.1.0.1, 0.2, 0.2.0.1, 0.2.0.2, 0.3, 0.3.0.1, 0.3.1, 0.3.2, 0.3.3, 0.3.3.1, 0.3.4, 0.3.5, 0.4.0.1, 0.4.1, 0.5.0, 0.5.1, 0.5.2, 0.5.2.1, 0.5.3, 0.5.3.1, 0.5.4, 0.5.5, 0.5.5.1, 0.5.6, 0.5.6.1, 0.5.6.3, 0.6, 0.6.1 (info)
Change log changelog
Dependencies base (>=4.5 && <4.9), ghc-prim (>=0.2), text [details]
Tested with ghc ==7.4.2, ghc ==7.6.3, ghc ==7.8.2
License BSD-3-Clause
Copyright (C) 2015 John MacFarlane
Author John MacFarlane
Maintainer jgm@berkeley.edu
Category Text
Home page https://github.com/jgm/commonmark-hs
Source repo head: git clone git://github.com/jgm/cmark-hs.git
Uploaded by JohnMacFarlane at 2015-03-30T06:38:14Z
Distributions Debian:0.6, Fedora:0.6.1, FreeBSD:0.4.0.1, LTSHaskell:0.6.1, NixOS:0.6.1, Stackage:0.6.1
Reverse Dependencies 11 direct, 167 indirect [details]
Downloads 41261 total (228 in the last 30 days)
Rating 2.25 (votes: 2) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Docs available [build log]
Last success reported on 2015-03-30 [all 1 reports]

Readme for cmark-0.3.1

[back to package description]

cmark-hs

This package provides Haskell bindings for libcmark, the reference parser for CommonMark, a fully specified variant of Markdown. It includes sources for libcmark (as of commit f40e098, implementing version 0.18 of the spec) and does not require prior installation of the C library.

cmark provides the following advantages over existing Markdown libraries for Haskell:

  • Speed: Conversion speed is on par with the sundown library. We were unable to measure precisely against sundown, which raised a malloc error when compiled into our benchmark suite. Relative to other implementations: cmark was 82 times faster than cheapskate, 59 times faster than markdown, 105 times faster than pandoc, and 2.8 times faster than discount.

  • Memory footprint: Memory footprint is on par with sundown. On one sample, the library uses a fourth the memory that markdown uses, and less than a tenth the memory that pandoc uses.

  • Robustness: cmark can handle whatever is thrown at it, without the exponential blowups in parsing time that sometimes afflict other libraries. (The input bench/full-sample.md, for example, causes both pandoc and markdown to grind to a halt.)

  • Accuracy: cmark passes the CommonMark spec's suite of over 500 conformance tests.

  • Standardization: Since there is a spec and a comprehensive suite of tests, we can have a high degree of confidence that any two CommonMark implementations will behave the same. Thus, for example, one could use this library for server-side rendering and commonmark.js for client-side previewing.

  • Ease of installation: cmark is portable and has minimal dependencies.

cmark does not provide Haskell versions of the whole libcmark API, which is built around mutable cmark_node objects. Instead, it provides functions for converting CommonMark to HTML (and other formats), and a function for converting CommonMark to a Node tree that can be processed further using Haskell.

A note on security: This library does not attempt to sanitize HTML output. We recommend using xss-sanitize to filter the output.

A note on stability: There is a good chance the API will change significantly after this early release.