commonmark-d: A fast CommonMark and Github Flavoured Markdown parser, translation of MD4C

Guillaume Piolat first.last at gmail.com
Wed Oct 2 00:15:30 UTC 2019


On Tuesday, 1 October 2019 at 16:02:47 UTC, bachmeier wrote:
> On Monday, 30 September 2019 at 23:06:42 UTC, Guillaume Piolat 
> wrote:
>> Hello,
>>
>> commonmark-d is a D translation of MD4C, a fast SAX-like 
>> Markdown parser.
>> MD4C achieves remarkable parsing speed through the lack of AST 
>> and careful memory usage.
>>
>> The route of translation was choosen because parsing Markdown 
>> is much more involved that first thought. The D translation 
>> largely preserve the speed benefits of M4DC.
>>
>>
>> Usage:
>>
>>     // Parse CommonMark, generate HTML
>>     import commonmarkd;
>>     string html = convertMarkdownToHTML(markdown);
>>
>> Key Performance Numbers:
>>     - commonmark-d compiles 3x faster than dmarkdown and 40x 
>> faster than hunt-markdown.
>>     - commonmark-d parses Markdown 2x faster than dmarkdown 
>> and 15x faster than hunt-markdown (see GitHub for benchmark 
>> details)
>>
>> I haven't measured memory usage of either compile time or run 
>> time, but I feel like it's also better.
>>
>> Available now on DUB: 
>> http://code.dlang.org/packages/commonmark-d
>> GitHub page: https://github.com/p0nce/commonmark-d
>
> This is really nice. The examples show only conversion to html. 
> Is there an easy way to get the intermediate output and convert 
> to PDF through latex, to org-mode, etc., or to change the html 
> conversion? One use case that is easy with Pandoc is to copy 
> just the code from markdown into its own source file as a 
> simple form of literate programming.

MD4C is a push parser without AST so you have to give it 
callbacks to generate any koind of intermediate output. You'd 
have to make md_parse public in commonmark-d, this is a C-style 
API

My long term goal is indeed super fast conversion of markdown to 
PDF, now we have the commonmark parser and the PDF generation, I 
just need the time to manage layout. Possibly making a minimal 
browser is a better route, dunno.



More information about the Digitalmars-d-announce mailing list