青空文庫リーダー(以下、本プログラム)を作り始めてからかなりの時間が経過しました。自分が使うアプリケーションであれば好き勝手に作れる、というのが長続きした理由の一つです。加えて、青空文庫を読む、という実用性(というか必要性)もあります。

 

日本語の縦書表示にはPangoを用いています。開発を始めた頃は、CJKの取り扱いが雑でgravityの効き具合が日本語の慣用に沿っていないとかいろいろありました。
その中の一つに、均等割付(justify)が日本語相手だと動かない、というのがありました。使い方が悪かったのか、どうやってもダメで本プログラムには未だ実装されていない機能の一つです。これができないと、例えば禁則処理の結果1行に収まる文字数が既定値より小さくなることがあり、均等割付を行わないと行末が揃わず見苦しくなってしまいます。(追記 このような場合、本プログラムでは行中にある句読点直後のスペースを調整して行末を揃えます)

 

開発環境が当初のPuppyLinux571JP(Ubuntu Precisey由来)からLinuxMint17系(Ubuntu Trusty派生)に代わり、ライブラリもアップデートされているので、久しぶりにpangoの挙動確認をしてみました。なお、表示にはpango-viewを使っています。

 

結果は上図(※)の通り。一見、日本語の均等割付が動作しているように見えます。


しかし、よく見るといろいろ不自然な点が。2行目の"許可しない局"で、"可"と"し"、"い"と"局"の字間が狭すぎるように思います。
ソースコードを読んだわけでないので確定的なことは言えませんが、想像するに"漢字"と"かな文字"を厳密に別グループとして扱っているのでこうなっているのでは、と。(※しかし、ballpen、は我ながら酷いですね。そんな筆記具ねえよ、とか言われそう)

 

試しに全部漢字で埋めてみると、次の通り、きちんと均等割付になりました。

 

動作が(仕様なのかもしれないが)適当すぎて使いどころが思いつかないですね。

どのみち、本プログラムではフリガナの処理がありますし、括弧類の送り量の調整も行わないとならないのでそのまま使うわけにはいきません。

 

英文ワードラップのほうは有用に思えますが、描画域(例えばcairo canvas)にどこまで出力したか、を管理しないと正しくページ送りできませんから、結局呼び出し側の負担は然程変わらないと思います。
Pango Layoutを実行した段階で描画サイズ(縦横のピクセル長)が判るので、それの配置場所を勘案してページ溢れしているかどうか判断する、ということになりそうです。問題は、溢れないようにするにはどの辺で区切れば良いか、それをどうやって調べるか、です。

 

Comment





   

Search

Calendar

S M T W T F S
1234567
891011121314
15161718192021
22232425262728
293031    
<< October 2017 >>

Archive

Mobile

qrcode

Selected Entry

Link

Profile

Search

Other

Powered

無料ブログ作成サービス JUGEM