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 | Permalink | Comments/Trackbacks ()

Oct 28, 2009

Gtk2-Perl を通して GTK+2 を勉強中

こないだ買って来た入門GTK+ は予想以上に良い本でした。入門書をちょっと齧った程度の C知識しかないぽちにも、分かりやすいソースコードで例示して GTK+ の使い方を教えてくれます。今のところ、この本を読みながら、解説されているいろんな機能を Gtk2-Perl - Table of Contents で首っ引きにして、Gtk2-Perl を通して Perl で書き直して動かしてみたりしていますが、Gtk2-Perl - Table of Contents に書いてある情報だけでは Perl でどんな風に書いて良いのか分からないものもあって、前途多難な状態です。誰かが Gtk2-Perl で書いたコードとかを参考にした方が良いのかなあ?

Posted at 21:38 in perl | Permalink | Comments/Trackbacks ()

Oct 25, 2009

入門Git を買いに行ったのに入門GTK+ を買って帰る

入門Git表紙画像

入門Git

五十歩百歩さんのお薦めでバージョン管理システムGit を使い始めたぽちですけども、今一つ使いこなせていません。最近、Git のメンテナの濱野純さんが書かれた、入門Git という本が出てるのを知り、最寄りの大きめの本屋さんに自転車でキコキコ走ってみました。つらつらとコンピュータ関連書籍のコーナーを眺めても見当たらなかったので、書店員の方に入門Git の事を説明して尋ねてみると、入荷の予定が無いというお話。なるだけ本は地元にある本屋さんの店頭にあるものを買う事を心掛けているぽちも、無いものは仕方ありません。まあ、せっかく本屋さんまで来たんだからと、未練がましくコンピュータ関連書籍コーナーをうろうろしていると、入門GTK+ という本を発見。奥付を見るとこれも最近出たばかりの本のようです。

入門GTK+表紙画像

入門GTK+

ぽちたて次期バージョンの為に GUIツールキットGTK+2 を勉強しようと思っていた矢先の事だったので、入門Git が買えなくてちょっと悔しかった事もあり、うっかり勢いで買ってしまいました。

ぽち、しばらくは入門GTK+ を読んでると思います。読了したら感想をここに書こうかなあ。

Posted at 17:19 in 日記 | Permalink | Comments/Trackbacks ()

Oct 24, 2009

最近読んだ本:乙嫁語り 1巻

乙嫁語り 1巻表紙画像

乙嫁語り 1巻

ぽちが大好きなエマの森薫さんの新作という事で迷わず読んだ一冊ですが、さすが期待通りの面白さでした。

二十歳の花嫁アミルさんの恰好良さ健気さもさる事ながら、十二歳の花婿カルルク君の存在で前作のエマよりも男の子成分を増量してくれているのも個人的に嬉しいです。後半ではカルルクの一族とアミルの一族との不穏な悶着も起こり次巻がとっても気になります。悶着を持ち込んだアミルの兄、アゼルも無口で一徹な感じの超美形ですけども、なんとなくこういうタイプは色々と厄介事を押し付けられたり貧乏籤を引かされる羽目になって、その性格故に早死にしそうな予感が…。

描き込みもとても美麗なので、いやもう、色んな方に読んで欲しい漫画です。

Posted at 17:00 in | Permalink | Comments/Trackbacks ()

Oct 23, 2009

ぽちたて右往左往中

色々あって怒涛のように忙しかった十月も終わりを迎えつつある今日この頃、ブログも日記というより月記という感じの頻度に成り果ててしまいました。

ぽちたて 0.0.3 をリリース後、Perl だけを使ってなんとか縦書きグリフを表示しようと色々試行錯誤してみましたが、ぽちの頭が悪いせいでどうにも上手く行きません。半ばヤケになっていっそ縦書き専用の明朝体TrueTypeフォントを作って同梱しようかとまで考えましたけども、さすがに開発としての方向性が間違ってる気がして断念(笑)。なぜ Perl だけで実装する事に拘っているのかというと、Perl環境がある OS の間でクロスプラットフォームな縦書きビューワーにしたかったからなのです。けど、その意図はぽちの技術力の無さのお蔭で完全に暗礁に乗り上げてしまいました。

そこで、とりあえず実用的な縦書きビューワーを作る為に、縦書き表示の実装があるという Pango というライブラリを使う事にしました。このライブラリは GTK+2 で使うものなので、GUIツールキットも Perl のみで動いた Perl/Tk から、GTK+2 に変更し、Gtk2 という Perlモジュールを通してライブラリを操作する予定です。Pango にしろ GTK+2 にしろ C のライブラリで、これに依存してては Windows での導入の敷居が格段に高くなり、事実上、Linux/UNIX専用になってしまいますけれども、この際、Perl から操作可能なら贅沢は言えません。ぽちたては今後この方向で(ほぼ)Linux/UNIX向けツールという事で開発していこうと思います。

だってほら、Windows にはもう沢山素敵な縦書きビューワーがあるじゃないですか…(言い訳)。