ブラウザから Graphviz が使えると便利かと
そもそも,まだ使ったことないのですが,とりあえず Graphviz を利用するための CGI プログラムを作成してみました.Vista では動かないという話を聞いたのが理由です.確認していませんけど….
以下,メモ代わりです.
#! /usr/bin/perl use strict; use warnings; use CGI; use IO::File; ## Gets a DOT script. my $dot = GetDot(); if ($dot) { if (ExecuteGraphviz($dot)) { exit; } } ShowHtmlPage(); ## Parses an html request and gets a DOT script. sub GetDot { my $cgi = CGI->new; my $dot = $cgi->param("dot"); if ($dot) { ## A DOT script from a textarea form. return $dot; } ## A DOT script file. my $dotfile = $cgi->param("dotfile"); if ($dotfile) { $dot = join('', <$dotfile>); close($dotfile); } return $dot; } ## Creates a graph from a DOT script. sub ExecuteGraphviz { my $dot = $_[0]; print "Content-Type: image/png\n\n"; open(DOT, "| dot -Tpng"); print(DOT $dot); close(DOT); if ($?) { ## Returns undef if failed. return; } return "ok"; } ## Shows an html page. sub ShowHtmlPage { print << "END_OF_RESPONSE"; Content-Type: text/html <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>Graphviz version 2.16</title> </head> <body> <h2>Graphviz version 2.16</h2> <p> DOT 言語によりグラフ(PNG)を生成します. </p> <hr> <p> 下記のフォームに DOT 言語を直接入力してください. </p> <form method="post" action="/cgi-bin/graphviz.cgi"> <textarea name="dot" cols="40" rows="10">digraph sample { alpha -> beta; alpha -> gamma; node [fontname="Sazanami Gothic"]; beta -> デルタ; } </textarea><br> <input type="submit" value="submit" /> </form> <hr> <p> DOT 言語で記述されたファイルをアップロードしてください. </p> <form method="post" action="/cgi-bin/graphviz.cgi" enctype="multipart/form-data"> <input type="file" name="dotfile" /> <input type="submit" value="submit" /> </form> <hr> </body> </html> END_OF_RESPONSE }
追記(2009-06-04):ファイルとして保存するのに不便だということで,修正したものを以下の場所においておきました.