サマリ | グラフ構造を表示するプラグイン |
---|---|
リビジョン | 1.8 |
対応バージョン | 1.4.7 |
投稿者 | matsuda |
投稿日 | 2004-10-22 (金) 16:05:40 |
リビジョン | ファイル | 変更点 |
1.8 | graphviz.inc.php.11 | ・委譲によりdotスクリプトが壊れるバグを修正。 |
1.7 | graphviz.inc.php.10 | ・位置揃え(align)の指定機能を追加。 ・キャッシュの無効化機能を追加。 ・フォント名の指定を独立したマクロ(@fontname@)に変更。 |
1.6 | graphviz.inc.php.9 | バグ修正(主に委譲機能)。 |
1.5 | graphviz.inc.php.8 | バグ修正。 |
1.4 | graphviz.inc.php.7 | マクロ機能。委譲をPOSTメソッドで再実装。 |
1.3 | graphviz.inc.php.6 | 画像生成の委譲機能のバグを修正しました。 |
1.2 | graphviz.inc.php.5 | 画像生成の委譲機能を追加しました。 |
1.1 | graphviz.inc.php.2 | CACHE_DIRを見せないようにした(1.4.4対応) |
1.0 | graphviz.inc.php | 初稿 |
graphvizを使って、グラフ構造のイメージを表示します。
#graphviz(digraph {a -> b -> c;})
#graphviz([prog,] [size,] [transparency,] [align,] dotスクリプト) &graphviz(同様);
どのプログラムで画像を生成するかを指定します。dot, neato, twopi, circo, fdpのいずれかを指定できます。省略時にはdotが使われます。
グラフのサイズを指定します。tiny, small, normal, largeのいずれかを指定できます。省略時にはsmallが使われます。
背景色を透明にするかの指定です。transp, notranspのいずれかを指定できます。transpを指定すると背景色が透明になります。notranspを指定すると背景色は不透明になります。省略時にはtranspが指定されます。
画像の表示位置を指定します。left, center, rightのいずれかを指定できます。
(省略時には位置は指定されません)
グラフの定義を記述します。「,」もそのまま記述できます。
#graphviz(define,ラベル名,dotスクリプト)
描画されるスクリプトにマクロのラベル名が含まれると、定義されたdotスクリプトに置き換えられます。
dotスクリプトには「,」もそのまま記述できます。
dotスクリプトは別のマクロのラベル名を含むことができます。最大で10レベルまで展開されます。
マクロ機能はインライン形式では利用できません。
#graphviz(showmacro)
定義されているマクロの内容を表示します。
#graphviz(include,ページへの参照[, ...])
別のページに書いてあるマクロをまとめて取り込みます。マクロは整形済みテキストで行単位に記述します。
label = dotscript
ページは複数指定可能です。
よく使う設定や共通のサブグラフなどをマクロとして定義することができます。
#graphviz(define, @UML:IsParentOf@, node [ shape = box ]; edge [ arrowhead = none, arrowtail = onormal ]; )
dotスクリプトにマクロのラベルを含めれると、定義された文字列に置き換えられます。
#graphviz(digraph { @UML:IsParentOf@ A -> B })
よく使う定義をまとめて記述しておくことができます。
たとえば:plugin/graphviz/UMLというページに以下のように整形済みテキストの形でマクロ定義を記述します。
@UML:IsParentOf@ = node [ shape = box ]; edge [ arrowhead = none, arrowtail = onormal ]; @UML:IsChildOf@ = node [ shape = box ]; edge [ arrowhead = onormal, arrowtail = none ];
次のようにしてマクロをインクルードします。
#graphviz(include, :plugin/graphviz/UML)
?cmd=graphviz
graphvizプラグインは、Webブラウザからページがリクエストされた時点でグラフ画像を生成します。生成した画像はキャッシュに保存します。
ソフトウェアの更新などでキャッシュに保存された生成済の画像を削除したい場合には、コマンド形式でプラグインを実行します。
表示されたページで管理者パスワードを入力すると、キャッシュ内のgraphvizにより生成されたファイルが削除されます。
dev:PukiWiki/1.4/ちょっと便利に/複数行のプラグイン引数を可能にのパッチを当てると、以下のように複数行の記述が出来るので、大きなグラフ構造の記述が便利になります。
#graphviz{{{ digraph { a -> b; b -> c; c -> a; } }}}
別サーバに画像生成を依頼することができます。
graphvizが利用できない環境や、画像生成の負荷を別マシンに分散させたい場合に利用します。
まず、画像生成を受け持つPukiWikiサーバでは次のように、委譲の受け付けを許可します。
define('PLUGIN_GRAPHVIZ_ACCEPT_TRANSFER2', TRUE);
委譲を行いたいPukiWikiサーバでは次のように、委譲先PukiWikiサーバを指定します。
define('PLUGIN_GRAPHVIZ_TRANSFER_URL', 'http://somewhere.else/pukiwiki.php');
- 2005-02-24 (木) 11:58:04
委譲のプロトコルを変えました(Rev 1.4)。以前のプロトコルはPLUGIN_GRAPHVIZ_ACCEPT_TRANSFERで許可することができます。
dotスクリプトのUTF8化とフォントネームの指定により日本語も通るようです。
確認時点でのgraphvizのパッケージバージョンは2.2-2です。
graphviz.inc.phpの設定を行います。 プログラムの起動時にLANG環境変数を日本語ロケールに指定します:
define('PLUGIN_GRAPHVIZ_DOT' 'LANG=ja_JP.EUC-JP /usr/bin/dot'); #他のgraphvizのプログラムも同様。convertは変更の必要なし。
define('PLUGIN_GRAPHVIZ_MACRO_FONTNAME','"san serif"');
- 2005-02-24 (木) 11:58:04
標準でUTF8化するようにしました(Rev1.4)。文字コードはPLUGIN_GRAPHVIZ_CHARSETで指定できます。- 2005-02-24 (木) 11:58:04
PLUGIN_GRAPHVIZ_OPT_*はマクロの導入に伴い廃止しました(Rev1.4)。- 2006-01-23 (月) 12:19:53
PLUGIN_GRAPHVIZ_MACRO_FONTNAMEによる指定に改めました(Rev1.7)。
PukiWikiでの動作は未確認ですが、以下の設定で行けそうです。
DOTFONTPATH環境変数を設定します。コマンドプロンプトでこんな表示になるように:
>echo %DOTFONTPATH% C:\WINNT\Fonts
graphviz.inc.phpの設定を行います。graphvizプログラムのパスにはexeファイルの絶対パスをショート形式(空白文字を含めない)で指定します:
define('PLUGIN_GRAPHVIZ_DOT' 'c:\Somewhere\dot.exe'); # 他のgraphvizプログラムも同様
define('PLUGIN_GRAPHVIZ_SIMPLE_EXEC', TRUE);
define('PLUGIN_GRAPHVIZ_MACRO_FONTNAME', '"MSGOTHIC.TTC"');
- 2006-01-23 (月) 12:19:53
PLUGIN_GRAPHVIZ_MACRO_FONTNAMEによる指定に改めました。(Rev1.7)
graphvizは本家サイトで紹介されているhttp://www.pixelglow.com/graphviz/ から入手しApplicationsにインストールします。以下の設定はconvertをFinkから入れた場合です。
graphviz.inc.phpの設定を行います:
define('PLUGIN_GRAPHVIZ_DOT' '/Applications/Graphviz.app/Contents/MacOS/dot'); # 他のgraphvizプログラムも同様
define('PLUGIN_GRAPHVIZ_TRANSP_CMD', '/sw/bin/convert -transparent white png:- png:-');
define('PLUGIN_GRAPHVIZ_MACRO_FONTNAME', '"HiraMaruPro-W4"');
- 2006-01-23 (月) 12:19:53
PLUGIN_GRAPHVIZ_MACRO_FONTNAMEによる指定に改めました。(Rev1.7)
ご存知でしたら是非教えてください。
Order allow,deny Deny from allによって画像が表示されないような気がするのですが勘違いでしょうか? -- よっちい 2004-10-28 (木) 16:49:23
if (file_exists($image_path)) { touch($image_path); } else { graphviz_expire_cache(); $command = "(" . $cmds[$prog] . " " . $opts[$option]; $command .= " -o$image_path"; $command .= ") <<EOF\n" . join("\n", $args) . "\nEOF\n"; system($command, $retval); if ($retval != 0) { return "error"; } }
digraph G { メイン [shape=box,fontname="MSMINCHO.TTC"]; }わたしはWindows環境です。dotコマンドに日本語フォントのありかを教えるために環境変数 DOTFONTPATHを作って、フォントファイルを格納したディレクトリのパスを記述します。つまり
>echo %DOTFONTPAHT% C:\WINNT\FONTSとかいう具合になるようにする。このようにしたうえでdotコマンドを実行。するとこんなPNG画像ができました。 上記MLの記述によれば、最近に非ASCII対応をしたというわけではなくて、dotコマンドの昔のバージョンからなにも設計を変えてはいないらしい。昔から大丈夫だったのかもしれません。 fontname属性のなかに MSMINCHO.TTCというようにファイル名を指定しています。こうやったら動いた。ここでMSPゴシックとかのいわゆるfont- familyを指定したら「FONTファイルが見つかりません」とエラーがでたので、それならファイル名を書けばよかろう、とおもってやってみたら案の定でした。ドキュメントGraphviz Attributesの fontname属性の説明を読むと、どうもfontname属性の使い方は環境依存・実装依存であって、とくにfontconfig libraryに関連すると書いています。Fontconfig libraryをうまく使えばfontname属性にフォント・ファミリー名を指定することができるのかもしれませんがわたしはFontconfigをよく存じません。たぶんUNIXのはなしであってWindows環境では関係ないんだろうなあ。-- matsuhashi 2005-03-07 (月) 17:45:59