Viz.jsのバグ(?)とその対処法
Livedoorブログからの移動
Viz.jsは, javascript単独でdot言語を解析するライブラリ. svgにして, htmlに直接書きだせば, browser上で, グラフを可視化できる.
便利なのだが, どうにもバグがあるっぽい. 同じdot言語テキストをparseしているのに, なんか挙動が違う時がある. 具体的には, HTMLのtableをlabelに使った時に発生した.
digraph { subgraph cluster0 { node0 [ shape=none; label=<<table> <tr><td>x</td><td>y</td><td>z</td></tr> </table>> } }上のような有向グラフをparseすると, まれに, 「Syntax Error ... 」という感じのエラーメッセージが表示され, node0が表として表示されなくなる.
再現性は全くなく, 同じ引数を与えても起きたり起きなかったり. ただし, 一度起こると連続して何回か起こる気もする.
※ ただし, 具体的な発生条件はわからないので, 上のdot scriptで本当にエラーが発生するかはわからない. 大体こんな感じってことで.
根本的解決は難しそうなので, 諦めて成功するまでloopすることで対処した. しかし, Viz.jsのViz関数は, エラー発生時に例外を投げたり, callback関数を登録できたりするわけではない.
内部コードを読むと, console.logにエラーメッセージを出力して, エラー処理が終わっている.
なので, parseが失敗したことをしらべるためには, 以下のようにする必要がある.
var log = console.log var isSuccess = true console.log = function(message) { isSuccess = false; } var svg = Viz(dotScript, "svg", "dot") console.log = log if (isSuccess) { // parse成功時の処理 } else { // parse失敗時の処理 }これと, setInterval関数によるループを組み合わせたらparse失敗で変なグラフが表示されることはなくなった.
dotコマンドで起きたことはないので, なんかViz.jsに特有の問題なんだろうな.