ditaaを使ってみる

このエントリーをはてなブックマークに追加

以下のようなテキストから,PNG形式の画像を作成してくれる ditaaを使ってみた. ditaa自体はJavaで書かれている.

+--------+   +-------+    +-------+
|        | --+ ditaa +--> |       |
|  Text  |   +-------+    |diagram|
|Document|   |!magic!|    |       |
|     {d}|   |       |    |       |
+---+----+   +-------+    +-------+
    :                         ^
    |       Lots of work      |
    +-------------------------+

インストール

ditaa.jarファイルは, Emacs上のツールであるOrg-Modeに含まれていたので,後はJavaがインストールされていれば,以下のようにして利用できる.

  $ java -jar ditaa.jar 入力ファイル名

日本語の利用

ところが,日本語を利用するとうまく動作しなかった.これは,日本語の文字も英文字と同一幅として処理しているためだ.
つまり,以下のように書くと,四角形の幅を両端を含めて6文字と考えているが,「あ」が含まれている行は5文字のため,うまくフォーマットされない.

+----+
| あ |
+----+

したがって,以下のように日本語の文字の後に空白を加えてやれば良い.

+----+
| あ  |
+----+

プログラム

上記の処理を自動的に行うPerlスクリプトを書いた.ついでに,デフォールトのスケールを2としている.

#!/usr/bin/perl
use strict;
use encoding 'utf8', STDIN=>'utf8', STDOUT=>'utf8';
use open 'utf8';

my $jar = "/usr/local/src/org-6.26d/contrib/scripts/ditaa.jar";
my $tmp = "/tmp/ditaa$$";
my $opts = "-s 2";

my $in;
if (-e @ARGV[-1]) {
    $in = pop(@ARGV);
} else {
    system("java -jar '$jar' -h");
    exit 0;
}
$opts = join(" ", @ARGV, $opts);
my $png = $in;
$png =~ s/(\.\w+)$/.png/;

open(OUT, ">", $tmp) || die "$0: $tmp $!";
open(IN, "<", $in) || die "$0: $in $!";
while (<IN>) {
    s/(\p{Hiragana}|\p{Katakana}|\p{Han}|[\x{30FB}-\x{30FF}\x{3000}-\x{303F}\x{FF00}-\x{FF60}])/\1 /g;
    print OUT $_;
}
close(IN);
close(OUT);
system("java -jar '$jar' $tmp $png $opts");
unlink $tmp;
exit 0;
  • 2010-01-24:全角英数字および全角記号を含むように正規表現を修正した.厳密には,利用しているエディタで全角幅になる全文字に対して処理を行う必要がある.

利用例

以下は入力ファイルの例(UTF-8)

カラーコード
/-------------+-------------\
|cRED 赤色    |cBLU 青色    |
+-------------+-------------+
|cGRE 緑色    |cPNK 桃色    |
+-------------+-------------+
|cBLK 黒色    |cYEL 黄色    |
\-------------+-------------/

以下は出力結果の例


利用環境は以下の通り