Pelican でplantUML(pandoc)

table contens

せっかくうまくいったmarkdown + pandoc だけど、markdown っぽく記述したい。
例えばこんな感じ。

ということで、pandoc 対応。

 ```uml
@startuml
  Alice -> Bob: Authentication Request
  Bob --> Alice: Authentication Response

  Alice -> Bob: Another authentication Request
  Alice <-- Bob: another authentication Response
@enduml
 ```

1 setup

plantuml は、前回の通り。

1.1 package

pandoc のバイナリは、直接もってくる。

$ curl https://github.com/jgm/pandoc/releases/download/2.0.1/pandoc-2.0.1-linux.tar.gz -o pandoc-2.0.1-linux.tar.gz
$ tar xvfz pandoc-2.0.1-linux.tar.gz

もってきたpandocのbinaryを /usr/local/bin にコピーしておく。

$ cp pandoc-2.0.1/bin/pandoc /usr/local/bin

1.2 pip install

plantuml 用のfilterに利用するので、 pandocfilters をinstallしておく。

$ pip install pandocfilters

1.3 filter script の準備

こんなscriptを準備した。

いろいろためしたけど、生成したpngファイルをどこに置くかが問題。
もういいやと、 --self-contained option で、埋め込みにしてしまった。

html source をみると、画像情報が埋め込まれている。

<p><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUg...">

plantumlだけでなく、普通のimagefileを以下のように記述しても、埋め込みになってしまうけどいいや。

![画像の名前](画像のpath)

1.4 pelicanconf.py の設定

前回の plantuml は、もういらない。その代わり pandoc_reader を利用する。
注意すべきは、これで markdown化のlogic が pandoc に依存することになること。
PANDOC_ARGS は好みによると思う。scss を書き直しかも。

PLUGINS = [..., 'pandoc_reader']
PANDOC_ARGS = [
'--mathjax',
'--standalone',
'--quiet',
'--toc',
'--toc-depth=2',
'--number-sections',
'--self-contained',
'--filter=/site/plantuml-filter.py',
]
PANDOC_EXTENSIONS = [
'+hard_line_breaks',
'-citations'
]

2 plantUMLの出力結果

こんな感じで展開される。