mkdocsのマクロプラグインを使う
mkdocs のマクロプラグインを使用することで、Python の関数を呼び出して
その結果を表示できるようにできます。
というのを前からあるのは知ってましたが、mkdocs をバージョンアップするついでに
使い方を色々調べてみました。
1 |
|
まずはプラグインを pip でインストールします。
1 2 3 4 5 6 7 8 9 10 |
|
そしてpluginsに macroを追加します。
これで準備は完了。
次に呼び出し用のpythonを作ります。
mkdocsのプロジェクト直下に main.py を準備して、そこに
1 2 |
|
define_env 関数を作ります。
マクロプラグインが呼び出すための関数で、
マクロに必要な値がこの関数の引数として渡されます。
マクロを作る¶
マクロとは、
1 |
|
こんな感じで {{ }} で main.py の define_env に書かれた関数を呼び出して
そのreturnを表示できるようになります。
1 2 3 |
|
例えばこんな感じの定義を作り、@env.macro のデコレーターをつけます。
1 2 3 4 |
|
あるいは、デコレーターを使わない場合は、env.macroの第1引数で関数を渡し
第2引数で呼び出し用の {{return hogehoge}}に指定する文字列を指定しておきます。
出来上がったマクロは、
1 |
|
mkdocsにこのように書くと
ここに文字を書く
このように文字サイズを変えることができます。
フォントサイズや色はmarkdownだと難しいので、こうやってマクロをかけるのは
とても便利です。
フィルターを作る¶
フィルターとは、 Jinja2 の機能で
1 |
|
こんなかんじで {{}} の1つ目の変数を2つ目の定義されたフィルターで変換して
結果を表示させることのできる機能です。
1 2 3 |
|
フィルターの作り方はかんたんで、
デコレーターで @env.filterをつけた関数を作り、入力の値を引数として
その結果を return します。
1 |
|
上のTwitterフィルターは、値でTwitterのURLを渡すと
Twitterを埋め込みにしてくれます。
引数を必要としない修飾はフィルターを使うと良さそうです。
ついでにマクロ前提だと {{これ}} のカギカッコを表示するのも
面倒だったので、そういうマクロを書いてみました。
今は単純にタグを作るためのマクロがメインですが
return で文字列を返せば何でもできるので、mkdocsのかゆいところをPythonで書いたり
他のAPIを叩いて結果をmkdocsに表示するみたいな使い方ができそうです。