Text::UnicodeTable::Simpleというのを書いてます

まだいい加減なレベルの段階なんですが、とりあえず紹介.

書いた動機

Text::ASCIITableや Text::SimpleTableでは, FullWidthな文字が
扱えなかったためです。


Text::ASCIITableを 2文字幅の文字に対応させる - Life is very short


Text::ASCIITableでなかば無理やり解決する方法を書きましたけど、
専用のものがあってもいいのではないかと思ったというのもあります。

サンプルコード

Table::ASCIITableとインタフェースを合わせています。
new, setCols, addRow, addRowLineメソッドしか実装していません。
Simpleなんでこれぐらいでいいかなと思ってます。

#!perl
use strict;
use warnings;

use Text::UnicodeTable::Simple;

use utf8;
binmode STDOUT, ":utf8";

my $t = Text::UnicodeTable::Simple->new;

# table header
$t->setCols('キャラクタ', '声優', 'パート', '楽器');

$t->addRow('平沢唯', '豊崎愛生',
           "リードギター\nボーカル\nコーラス", 'ギブソン レスポール');
$t->addRowLine;

$t->addRow('秋山澪', '日笠陽子',
           "ベース\nボーカル\nコーラス", 'フェンダー ジャズベース');
$t->addRowLine;

$t->addRow('田井中律', '佐藤聡美',
           "ドラムス\nコーラス", 'ヤマハ・ヒップギグ');
$t->addRowLine;

$t->addRow('琴吹紬', '寿美菜子',
           "キーボード\nサブボーカル\nコーラス", 'コルグ・TRITON Extreme');
$t->addRowLine;

$t->addRow('中野梓', '竹達彩奈',
           "リズムギター\nコーラス", 'フェンダージャパン ムスタング');

print $t->draw;

アラインメントは looks_like_numberが真を返せば右寄せ、それ以外は左寄せです。
一応複数行にも対応したつもりです。

実行結果

フォント VL-Gothic 10, gnome-terminal(環境変数 VTK_CJK_WIDTH=1で起動)


同じ環境で、 同じ事を Text::ASCIITableでやると以下のようになりました。

ずれます。

検討課題

  • アラインメント(looks_like_numberでは数値と判定されるものがかなり限定される, 自由に設定できる等)
  • 自動折り返し(ユーザにすべてまかせるべきか、自動で行うべきか)
  • Text::ASCIITable等の既存の類似モジュールにどの程度似せるか.
  • テストをもっと書く
  • ドキュメントを書く
  • 例を書く


これを機に CPAN Authorにというのも少し考えてますが、
まだクオリティが低いのでそれはある程度ちゃんとしたら考えることにします。