http://www.research.att.com/sw/tools/graphviz/
有向グラフ生成ツール。
dot形式のファイルから、下記のような有向グラフを生成する。
自分で構築したgraphvizで↑のdotファイルを実行すると、neatoコマンドではちゃんとグラフが生成されるがdotコマンドだと何故かsegvで落ちる。困る。何が悪いのかは不明。
…‥と思っていたが、GDのオプションを追加してutf-8ではなくeucでdotファイルを書いて読み込ませたら、segvは起きなくなった。GDかlibiconv?のバグ?
自分もまだまだgraphvizの扱いを調べ中なので、graphvizの良いサイト等知っていたり、情報公開してたら、すみませんが、教えてクダサイ。
日本語のグラフを出力する方法
graphviz内部的には、多分、8bit cleanな形式で文字列を扱っているような気がするので、以下の二点を突破すれば、日本語のグラフを出力可能。
フォントは、どうにかすれば指定可能(しかし、自分はちゃんとやり方を調べてない。ので、環境変数DOTFONTPATHで適当なディレクトリを指定し、その中に「ln -s hoge.ttc times.ttf」でtimes.ttfのシンボリックリンクを作って誤魔化した)。
node [fontname = "Helvetica"];
次の、日本語エンコーディング種別だが、コレは、次のどちらの方法でグラフを出力するかで変わってくる。
結論から先に言うと、「直接吐き出す場合は、dotファイルはutf-8で書く。psにする場合はps変換ツールのネイティブエンコーディングで」。
graphvizは、内部にGDを持っており、そのGDが、configure時にCFLAGSとして-DJISX0208オプションをつけていない場合は、utf-8文字列のみ受け付ける。 -DJISX0208オプションをつければ、utf-8は受け付けなくなり、代わりにeucを受け付けるようになる。
(尚、自分はフォント指定でイカサマをしているので、ps形式の方は試してない。可能なら、ps経由で画像出力をしたいが…‥)
自分のconfigure設定
CFLAGS="-Os -march=i686 -DJISX0208" \ ./configure \ --prefix=/usr/local \ --with-freetypeincludedir=/usr/include/freetype2 \ --with-freetypelibdir=/usr/lib \ --with-zincludedir=/usr/include \ --with-zlibdir=/usr/lib \ --with-pngincludedir=/usr/include \ --with-pnglibdir=/usr/lib \ --with-jpegincludedir=/usr/include \ --with-jpeglibdir=/usr/lib \ --with-dynagraph \ --without-x \ --with-libiconv-prefix=/usr
CFLAGSに-DJISX0208をつけて、GDにeuc文字列を渡せるようにしている。
(この場合、GDがjman:iconvを要求するので、libcのjman:iconvが使えない/怪しい場合は、GNU libiconv?を予め入れておき、指定する必要がある)