#:g1: 3bmdの紹介

Posted 2014-04-20 10:00:00 GMT

(LISP Library 365参加エントリ)

 LISP Library 365 の110日目です。

3bmdとはなにか

 3bmdは、3b氏作のCommon Lispでmarkdown形式を処理するためのライブラリです。

パッケージ情報

パッケージ名3bmd
Quicklisp
CLiKihttp://cliki.net/3bmd
Quickdocshttp://quickdocs.org/3bmd

インストール方法

(ql:quickload :3bmd)

試してみる

 どんな関数があるかは、Quickdocsで確認できます。

 前回は、cl-markdownを紹介してみましたが、3bmdも大体同じようなAPIになっています。
parse-string-and-print-to-streamでmarkdownの文字列を変換してストリームに出力、3bmd:parse-and-print-to-streamでファイルを変換してストリームに出力します。

(3bmd:parse-string-and-print-to-stream 
 "## 挨拶
おはよう日本"
 *standard-output*)
;>>  
;>>  
;>>  <h2>挨拶</h2>
;>>  
;>>  <p>おはよう日本</p>
;>>  
;=>  NIL

(3bmd:parse-and-print-to-stream "3bmd-20131213-git/README.md"
                                *standard-output*)
;>> <p>Common Lisp <a href="http://daringfireball.net/projects/markdown/" >Markdown</a> -&gt; html converter, using <a href="https://github.com/nikodemus/esrap" >esrap</a> for parsing, and grammar based on <a href="https://github.com/jgm/peg-markdown" >peg-markdown</a>.</p>
;>> ....

 Lisp星人的に嬉しい機能としてcolorizeとの連携があります。

(ql:quickload :3bmd-ext-code-blocks)

として拡張機能をロードすれば、3bmd-code-blocks:*code-blocks* => Tとすることでcolorizeで処理が可能です。

(let ((3bmd-code-blocks:*code-blocks* t)
      (3bmd:*smart-quotes* t))
  (3bmd:parse-string-and-print-to-stream 
  "
```lisp
 (+ 3 3)
;=> 6
```
"
  *standard-output*))
;>>  
;>>  
;>>  <pre><code><span class="code"> <span class="paren1">(<span class="code"><a href="http://www.lispworks.com/reference/HyperSpec/Body/a_pl.htm" class="symbol">+</a> 3 3</span>)</span>
;>>  <span class="comment">;=&gt; 6</span></span></code></pre>
;>>  
;=>  NIL

 ちなみに、実際の利用では、CSSの指定をすることになるかと思います

(let ((3bmd-code-blocks:*code-blocks* t))
  (who:with-html-output (out out :prologue T :indent T)
    (:style #.colorize:*coloring-css*) 
    (3bmd:parse-and-print-to-stream 
     "/var/tmp/foo.md"
     *standard-output*)))

等々

関連

まとめ

 今回は、3bmdを紹介してみました。
colorizeと連携するのが簡単なようなので、S式で書いているこのブログもmarkdown形式に移行してみたいところです。
しかし、3bmdという名前ではmarkdownのライブラリであることに気付くのは難しいですね〈quicksearchでは見付けられますが…〉。

comments powered by Disqus