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から逃げたのではない、という点をご理解いただければ幸いである。