Graphviz

Graphvizとは

AT&T研の開発している、接続関係を書いたソースからグラフ理論でいうところのグラフをプロットするツール。

文法はGraphviz文法を参考のこと。

digraph test{
Napster->Gnutella;
Napster->WinMX;
Gnutella ->freenet ;
WinMX ->Winny; 
freenet ->Winny;
}

みたいなソースファイル(test.dot)を作って、

dot -Tgif test.dot -o test.gif

とやると、てきとーにノードを配置して、

http://kitchon.ddo.jp/~ashiya/pic/rwiki/test.gif

のような絵を書いてくれる。 dotは接続関係だけ指定すれば線を引いてくれる。 neatoは位置をこちらで指定する。2部グラフとかはこれで書いた方がいいかも。

neato -s -n -Tgif test.dot -o test.gif

みたいに実行する。詳しくはdotユーザーズガイド等を参照。

日本語psを吐かせる方法。

dotneato/common/psgen.c

dotneato/common/ps.h

のそれぞれのうち、

coord-font-family /GothicBBB-Medium-EUC-H def /default-font-family /GothicBBB-Medium-EUC-H def 14.00 /GothicBBB-Medium-EUC-H set_font

と、Times-Romanなところを全部GothicBBB-Medium-EUC-Hとする。 それから()の中身(ノードの名前)を全部全角にする必要がある(半角、全角の概念がないから、半角の幅を規定しようとすると ソースをいじるのが結構大変)。変換には下のようなperlスクリプトでやってみた。うわ、下手なソースは恥ずかしいわ。

#!/usr/bin/perl

require './jcode.pl';

while(<>)
{
$line=$_;
if($line=~/.*moveto.*/){
$line0=$&;
if($line0=~ /\(.*\)/){      # moveto のあとに()があるところを抽出
$tmp=$&; $head!!! $`; $tail!!! $';
jcode::tr(\$tmp,'a-zA-Z0-9_!!!  ><?,.:;','a-zA-Z0-9_= ><?、.:;');
$tmp =~ s/\\\(/(/g;
$tmp =~ s/\\\)/)/g;
$tmp =~ s/\////g;

print $head.$tmp.$tail."\n";
}
else{
print $line0."\n";
}
}
else{
print $line;
}
}

Doxygen

(このセクション末座記入) http://www.doxygen.org/

C/C++/Javaのドキュメント生成ツール。メソッドの参照元/参照先が一覧できるので、他人の書いた謎のソースコードを解析するのに超便利。クラスのコラボレーション関係や、ヘッダの依存関係のグラフ生成にGraphviz使ってます。 といいますかDoxygen以外で使うなんて想像もしてませんでした。

地味に書き込んでますな。C人間なのでDoxygenはあまりつかってなかです。 globalってのをちょっと使いましたが、これも悪くないです。 graphvizはグラフ理論の勉強したときに使いました。そのままですね。(あし)