Erik Edrosa writes: > Hello everyone, > > Awhile back for the potluck I posted a CommonMark[0] parser I written in > pure Guile Scheme which outputs SXML. Today I have decided to release > version 0.1, it currently supports parsing almost the entire CommonMark > spec besides block and inline HTML. guile-commonmark will not support > block and inline HTML as the spec allows malformed HTML to be written > which can't be transformed to SXML. guile-commonmark also follows a > slightly older version of the spec and one of the major differences are > tabs are expanded into spaces(including tabs in code blocks). > > Here is an example usage: > (use-modules (commonmark) > (sxml simple)) > > (define doc > "A CommonMark Document > =============== > Here is some *scheme* `code` > ```scheme > (display \"Hello, World!\") > ``` > > 1. A list > 2. Another item in a list > > Read more about [CommonMark](http://commonmark.org/)") > > ;; Parse the CommonMark document into sxml > (define doc-sxml (commonmark->sxml doc)) > > ;; Writes to current output port > (sxml->xml doc-sxml) > (newline) > > > Which outputs(formatted for readability): > > <h1>A CommonMark Document</h1> > <p>Here is some <em>scheme</em> <code>code</code></p> > <pre> > <code class="language-scheme">(display "Hello, World!") > </code> > </pre> > <ol> > <li>A list</li> > <li>Another item in a list</li> > </ol> > <p>Read more about <a href="http://commonmark.org/">CommonMark</a></p> > > > You may download the release at > https://github.com/OrangeShark/guile-commonmark/releases/download/v0.1/guile-commonmark-0.1.tar.gz > > GNU Guix users can install guile-commonmark using the attached guix.scm file > > guile-commonmark is still a young project, so expect plenty of bugs. > Please report any bugs to https://github.com/OrangeShark/guile-commonmark > > > As a bonus for haunt users, here is an example using guile-commonmark as > a reader to generate a blog written in markdown. > > (use-modules (haunt asset) > (haunt builder blog) > (haunt builder atom) > (haunt reader) > (haunt site) > (haunt post) > (commonmark)) > > (define commonmark-reader > (make-reader (make-file-extension-matcher "md") > (lambda (file) > (call-with-input-file file > (lambda (port) > (values (read-metadata-headers port) > (commonmark->sxml port))))))) > > (site #:title "Built with Guile" > #:domain "example.com" > #:default-metadata > '((author . "Eva Luator") > (email . "e...@example.com")) > #:readers (list commonmark-reader) > #:builders (list (blog) > (atom-feed) > (atom-feeds-by-tag))) > > Now just save the above as haunt.scm and put your markdown blog posts in > the posts directory with a .md extension and run `haunt build`. Here is > an example blog post: > > title: Hello World! > date: 2016-07-24 10:00 > tags: guile, commonmark, scheme > --- > > A CommonMark Document > =============== > Here is some *scheme* `code` > ```scheme > (display "Hello, World!") > ``` > > 1. A list > 2. Another item in a list > > Read more about [CommonMark](http://commonmark.org/) > > > Please note the header on top portion of the post which allows you to > add metadata to your blog posts for haunt. > > Thanks, > Erik > > [0]: http://commonmark.org/
This is awesome! We should get this packaged for Guix :) Nice work!