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はグラフ理論の勉強したときに使いました。そのままですね。(あし)