Oct 29, 2009

Gtk2::Pango で縦書きしてみると

この二つのブログで Pangocairo を使って C で書かれた縦書き表示のソースコードが紹介されていました。そこでそれを参考にして、ぽちも Gtk2-PerlCairo-Perl を通して Perl で書いてみました。

#!/usr/bin/perl

use strict;
use warnings;
use utf8;
use Gtk2;
use Cairo;
use Math::Trig qw/:pi/;

my $width = 80;
my $height = 280;
my $format = 'argb32';

my $file = 'verticaltext.png';
my $markup = <<"EOS";
<span font_family='IPA明朝' size='13000'>――《犬山ぽち丸》と、Pooch 123</span>
<span font_family='IPA明朝' size='13000'>『ぷ〜ち』は今日も元気でぇーす。</span>
<span font_family='IPA明朝' size='13000'>「Pangoの縦書きは、こんな感じ」</span>
<span font_family='IPA明朝' size='13000'>(本当に)――大丈夫かな……?</span>
EOS

my $surface = Cairo::ImageSurface->create($format, $width, $height);
my $cr = Cairo::Context->create($surface);
$cr->translate($width, 0);
$cr->rotate(pip2);

my $layout = Gtk2::Pango::Cairo::create_layout($cr);
my $context = $layout->get_context;
$context->set_base_gravity('east');

$layout->set_markup($markup);
Gtk2::Pango::Cairo::show_layout($cr, $layout);

$surface->write_to_png($file);

そしてその表示結果がこちら。

Pango の縦書き表示

スカラー変数 $markup の中にある原文と表示結果を比べていただけると分かるように、句読点の位置が真ん中に来ていたり、同じ記号でも場合によって縦になったり横になったりしていて(最初から横倒しにならない記号もありますけども)、結局、参考にしたブログで、Pango の日本語縦書き実装はそのまま実用にするにはまだまだ問題がある、という主旨の事が書かれていたのを再確認してしまいました。とは言うものの、 Perl での書き方の勉強にはなったかもしれません。Pango に代わる簡単な縦書き表示の手段もぽちには見つからないので、ぽちたて次期バージョンはこれを使うしかないのかなあ? debian lenny の公式パッケージにある少し前のバージョンの Pango でしか試していないので、安定版最新の Pango や 開発版の Pango ではどうなっているのかちょっと興味があります。

Posted at 12:50 in perl | Comments/Trackbacks ()
Comments/Trackbacks
TrackBack ping me at
http://pochi.usamimi.info/blog/perl/Gtk2-Pango_tategaki.
Post a comment

writeback message: