[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[ANN] guile-commonmark 0.1 (A markdown parser)
From: |
Erik Edrosa |
Subject: |
[ANN] guile-commonmark 0.1 (A markdown parser) |
Date: |
Sun, 24 Jul 2016 22:33:45 -0400 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.1.1 |
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 . "address@hidden"))
#: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/
guix.scm
Description: Text Data
- [ANN] guile-commonmark 0.1 (A markdown parser),
Erik Edrosa <=