









[blog]
[ML]
[todo]
[CVS]
[bug]
[apache log]
[swiki log]
[statistics]
[map]
[man]
[info]
[アンテナ]
GraphVizで日本語を使いたい

とりあえずソースを読んでみる。
- 実は出力形式は、かなりあるみたい。ソースでみる限り(全部は使えないと思う)
- GIF, PNG, JPEG, GD, GD2, ISMAP, IMAP, VRML, SVG, POSTSCRIPT, HPGL, PCL
- MIF, METAPOST, FIG, VTX, PLAIN
- 反感を買うかもしれないが、RTFで出せるといいね。
- さすれば Doxygenと組み合わせて、本業の「仕様書の更新」という不毛な作業から脱出できそうだ
- フォント名指定は、フォントファミリを指定するようだ
- ハードコーディングされたフォントリスト変換関数のようなものがあります。
- この関数でfontlistが取れない場合は、指定したフォント名.ttfを使うようです。
- 適当にいじったら、簡単な日本語は表示できました。

GD経由で日本語を表示させるには(未完全版 当然ソースの変更が必要です)
- GDPATH等の環境変数にtruetypeパスを設定する。
- フォント指定は、xxxx.ttfならxxxxを指定する。
- フォント名にハイフンが入っちゃいけないようだ。
- なので、wadalab-gothic.ttfなら ln -s で gothic.ttfとし、gothicを指定すべし。

日本語を使うためにしなければならぬこと(Todoだね)
- 日本語のパースが通るようにしなければならない。入力ファイルは、当然ASCIIのみ対応となっている。
- yacc、lexファイルがあるので、なんとかなりそうかも?
- flexは、8bitクリーンなので、EUCであれば、日本語のパースは問題ない。
- 日本語の場合、フォントサイズがノードに対して妙に小さくなる。
- GraphViz-jaのサイトを多少参考にすればいけるか?
- dotneato/commonの下のgdgen.cで生成している。
- get_textsize()で文字を作っている。
- 上位関数側で、get_textsize()の返り値から、フォントサイズを得て、大きすぎる場合、調整している気配がある。
-
TTFに適したgdの呼び出しをしてなさげ。 そんなことはなかった。
- とりあえずは、GD経由での画像出力のみ、日本語が通せればよいと思う。
< 元データ >
digraph G {
node[fontname="mincho"];
1 [label="0123日本人は米を食うべし", fontsize=100];
1 -> 14;
}
< png出力結果 >


結論だ
- GraphVizでは、8bitクリーンで処理が行なわれているためEUCなら日本語が問題なく使える(そもそも)
- しかし、フォントサイズルーチンに文字コード依存性が強く含まれているため、非常に小さいフォントとなってしまう。
- でパッチを当てれば(というか誰も日本語化パッチを書いていないので)いいわけであるが、ソースが巨大なので、読むのが面倒だ。
- しかし、Grappaであれば、日本語というか Unicodeが通るので、こちらを使って日本語を処理したほうがよいであろう。

もとい本当の結論である
- とりあえず、fontsizeの問題を回避する(しごくいい加減に)patchを作った。

関連サイト

Links to this Page