このBlogは移転しました。今後は aish.dev を御覧ください。

Pandocでblockdiagを使う

最近、ドキュメント生成ツールとして Pandoc をちょっと試している。Markdownで手軽に書けて、reStructuredTextよりも好みだ。

Pandocというのは「ドキュメント生成ツール」ではなく、正確に言えば「ドキュメント変換ツール」だ。MarkdownからHTMLやPDFへの変換だけでなく、MarkdownからreStructuredTextへの変換や、HTMLからテキストファイルへの変換などもできるようになっている。

そしてその変換のフォーマットとして、Pandocの抽象構文木をそのままJSON形式などでの入出力がサポートされており、この機能を使えばpandoc本体に手を加えずともいろいろな機能を追加できるようになる。ということで、blockdiag を Markdownテキストに記述し、図を生成するフィルターを作成してみた。

このようなMarkdownから、

Example
------------
Following image was generated by blockdiag. 

````blockdiag
{
  世界の -> こ;
  世界の -> み;
  世界の -> か;
}
````

こんな画像が表示される

ソースはこちら - https://github.com/atsuoishimoto/pandoc-blockdiag-sample

本来はHaskellで書けば、Pandocモジュールを直接使ってもう少しシンプルにかけるが、ここではあえてPythonで書いている。決してHaskellから逃げたのではない、という点をご理解いただければ幸いである。