PukiWiki用のblockdiagプラグイン

便利なblockdiag。
各システムに埋め込むためのプラグインがあるようですが
PukiWiki用がなかったので作ってみましたー。

既にあれば無視してください。。

以下、簡単な使い方を。

要件

  • PukiWiki 1.4.6以降
  • blockdiagインストール済
  • nwdiagインストール済
  • seqdiagインストール済
  • actdiagインストール済

ダウンロード

https://github.com/hekyou/diag-pukiwiki-extension

  • diag.inc.php [本体]
  • README.rst [メモ]

*1

インストール方法

1. PukiWikiのplugin配下にdiag.inc.phpを置く
cp diag.inc.php ${PUKIWIKI_ROOT}/plugin/
2. pukiwiki.ini.php内の複数行プラグイン引数設定を有効に

PukiWiki 1.4.6以降のみ可能なようです。

define('PKWKEXP_DISABLE_MULTILINE_PLUGIN_HACK', 0); // 1 = Disabled
3. 初期設定変更

diag.inc.php内のdefineを変更することで可能です。

  • 画像一時生成場所

表示時、一時的に使用。
画像ファイルを保存しないようにするために
毎回表示時に画像を生成する方式を採用しました。
そのため表示の際に多少ラグがあるかも…

defined('PLUGIN_DIAG_IMAGE_DIR') or define('PLUGIN_DIAG_IMAGE_DIR', '/tmp/');
  • blockdiag等のパス
defined('PLUGIN_DIAG_BLOCKDIAG_PATH') or define('PLUGIN_DIAG_BLOCKDIAG_PATH', '/usr/local/bin/blockdiag');
defined('PLUGIN_DIAG_NWDIAG_PATH')    or define('PLUGIN_DIAG_NWDIAG_PATH', '/usr/local/bin/nwdiag');
defined('PLUGIN_DIAG_SEQDIAG_PATH')   or define('PLUGIN_DIAG_SEQDIAG_PATH', '/usr/local/bin/seqdiag');
defined('PLUGIN_DIAG_ACTDIAG_PATH')   or define('PLUGIN_DIAG_ACTDIAG_PATH', '/usr/local/bin/actdiag');
  • フォントの変更
define('PLUGIN_DIAG_FONT_PATH', '--font=/Library/Fonts/Osaka.ttf');

といった形式でフォントのパスを指定することで
任意のフォントが使用可能です。

使い方

埋め込みたいところに下記フォーマットで記述

#diag([type]){{
[diagram]
}}

[type]に入れるのは

block : blockdiag使用時
nw : nwdiag使用時
seq : seqdiag使用時
act : actdiag使用時

[diagram]には通常使用するdiagram文をそのまま使用

使用例

blockdiag
#diag(block){{
diagram {
   A -> B -> C -> D;
   A -> E -> F -> G;
}
}}
nwdiag
#diag(nw){{
diagram {
  network dmz {
      address = "210.x.x.x/24"

      web01 [address = "210.x.x.1"];
      web02 [address = "210.x.x.2"];
  }
  network internal {
      address = "172.x.x.x/24";

      web01 [address = "172.x.x.1"];
      web02 [address = "172.x.x.2"];
      db01;
      db02;
  }
}
}}
seqdiag
#diag(seq){{
diagram {
  browser  -> webserver [label = "GET /index.html"];
  browser <-- webserver;
  browser  -> webserver [label = "POST /blog/comment"];
              webserver  -> database [label = "INSERT comment"];
              webserver <-- database;
  browser <-- webserver;
}
}}
actdiag
#diag(act){{
diagram {
  write -> convert -> image

  lane user {
     label = "User"
     write [label = "Writing reST"];
     image [label = "Get diagram IMAGE"];
  }
  lane actdiag {
     convert [label = "Convert reST to Image"];
  }
}
}}

blockdiag等をそのままコマンドにしたかったのですが
プラグインファイルを1つにしたかったため
diagコマンドとなりました。。

要望があれば諸々検討させていただきます!

*1:mediawikiプラグインとフォーマット等を合わせました。問題があればご指摘頂けると助かります。。