unofficial mirror of guile-user@gnu.org 
 help / color / mirror / Atom feed
From: Christopher Allan Webber <cwebber@dustycloud.org>
To: Erik Edrosa <erik.edrosa@gmail.com>
Cc: "guile-user@gnu.org" <guile-user@gnu.org>
Subject: Re: [ANN] guile-commonmark 0.1 (A markdown parser)
Date: Thu, 04 Aug 2016 11:59:49 -0500	[thread overview]
Message-ID: <87bn1879mi.fsf@dustycloud.org> (raw)
In-Reply-To: <a258ab00-468f-6857-9a86-c26389e82406@gmail.com>

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 &quot;Hello, World!&quot;)
>       </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  . "eva@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!



      parent reply	other threads:[~2016-08-04 16:59 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-07-25  2:33 [ANN] guile-commonmark 0.1 (A markdown parser) Erik Edrosa
2016-07-25 13:44 ` Thompson, David
2016-07-26  0:58   ` Erik Edrosa
2016-08-04 16:59 ` Christopher Allan Webber [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/guile/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87bn1879mi.fsf@dustycloud.org \
    --to=cwebber@dustycloud.org \
    --cc=erik.edrosa@gmail.com \
    --cc=guile-user@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).