« Fontconfigを使って日本語斜体を別フォントに置き換える方法 | トップページ | 『優しい悪意』 (Affably Evil) の紹介 »

2015年12月29日 (火)

Pangoって何のソフト?

Pangoって何のソフト?

はじめに

Pangoっていったいなんなんでしょう? 作っている人がどう思っているかはともかく、現状どうなっているか調べたものを、(五月雨式ですが)書いておきます。まあ、組版をしてくれるんじゃねーの? ということで日本語組版処理の要件(日本語版)を参考に調べました。

Pangoのマークアップだけで〜の続編みたいなものです。Battle for Wesnoth (以下Wesnoth)のgettext機構だけを使って(要するに食わせる文字列だけが変更できる)、きれいに日本語を出そうというのが動機です。

Wesnothは両端揃えしない設定だったので、Imagemagickを使って両端揃えした時の結果も追加しました。

調査環境

調査するのに使ったソフトは以下の通りです。

  • Battle for Wesnoth 1.12.4 (Debian GNU/Linux AMD64 1:1.12.4-1+b1)
  • Imagemagick 6.8.9-9 Q16 x86_64 2015-09-19 (Debianでのバージョンは8:6.8.9.9-6) imagemagickcore-6.q16-2-extraを入れています。

共通のライブラリやフォントは次の通り。

  • libpango-1.0-0 (Debianでのバージョンは1.38.1-1)
  • libpangocairo-1.0-0 (Debianでのバージョンは1.38.1-1)
  • 欧文フォント DejaVuSans (fontforgeによればバージョン2.35, ウエイトBook, Em Size 2048)
  • 日本語フォント DroidSansJapanese (fontforgeによればバージョン1.20, ウエイトBook, Em Size 256) 固定ピッチ

DroidSansJapaneseに空白類のグリフはなく、DejaVuSansはU+0020 SPACEの幅が651、U+2002 EN SPACEが1024, U+2004 EM SPACEが2048, U+2005 FOUR-PER-EM SPACEが512, U+2006 SIX-PER-EM SPACEが342になっています。SPACEがEN SPACEと違うのがいいのか分かりませんが、その他は問題ないようです。

Wesnothは英文の表示も両端揃えしない設定でPangoを使っています。Pangoは両端揃え可能です。このことが確認できたので、記事を修正して比較対象としてImagemagickでの確認結果も載せるようにしました。両端揃え以外のスペーシング調整についてはほとんど同内容です。

禁則処理と両端揃え

どこかでPangoは禁則処理ソフトみたいなことが書いてあったので、調べてみました。

Wesnothでの描画結果

禁則処理はやるようです。そして両端揃えのためのスペーシングは調整されません。U+003F QUESTION MARKの追い出しはやりましたが、U+0029 RIGHT PARENTHESIS (普通の括弧閉じ)はしませんでした。3点リーダー✕2の分離禁止はされました。

Imagemagickでの描画結果

Imagemagickで両端揃えを指定して似たように描画してみました。横幅を1ドット変えて閉じ括弧が行頭に来ない確認をしました。

次のは開き括弧が行末に来ない確認です。これも横幅を1ドット変えて確認しました。上の2つとは■の数が異なります。

スペーシングの調整はされていて、両端揃えされています。試しにPango markupでtt (Monospace font)を指定てもみましたが、それでもjustify=trueだとスペーシング調整がされます。

括弧は全角なんですが、なぜかWesnothと幅が異なります。プロポーショナルが使われているようですね。Justifyの設定は影響ありませんでした。めんどうなので同じにするのは諦めました。

コマンドは次のようにしました。pangoのdefineはImagemagick:Formatsを参考にしています。

convert -size 515 -background black -define pango:justify=true -define pango:language=ja_JP -define pango:wrap=word-char -font 'DejaVu Sans' -font 'Droid Sans Japanese' pango:"<span foreground='white'>■■■■■■■■■■■■■■■Pangoの日本語禁則処理のテスト(テスト)。\n□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□</span>" a.png

禁則処理と両端揃えのまとめ

Pangoは禁則処理と両端揃えを設定すればやる。Wesnothは両端揃えをさせていない。

U+0029 RIGHT PARENTHESISの禁則処理はされない。長音記号とか拗音もされません。

文字カテゴリ間のスペーシング調整

日本語組版では一般的な、文字カテゴリ間でのスペーシング調整の話です。ここからは本題のWesnothでだけ確認しています。多分この件ではImagemagickを使っても変わらないと思います。

禁則処理の確認を見ると分かる通り、Pangoは欧文・和文文字間のスペーシングの調整をしていません。役物間の調整とかも見てみましたがされませんでしたので、全体的にされていないと思います。両端揃えの調整以外はフォントを並べているだけのようです。

というわけで、ここからは話は変わっていろいろな空白文字を入れるとPangoはどう反応するかという確認になります。Pangoには日本語の文章を食わせるのではなく、表示データを食わせるのだと割りきりました。それでスペース調整をします(個人的には組版は表示機構の仕事であって、日本語の文章をそのまま与えるべきだと思っています。文字カテゴリの組み合わせにしたがって適切なスペースを人間が入れるべきだと思います? ってプロは入れてるのか)。

手動スペース文字挿入なし

手動スペース文字挿入なしの、普通の文章を食わせます。

「Pangoの日本語Layout」の確認

結果は次の通り。

これが普通の出力です。カギ括弧前後の二分空きは入りますが、カギ括弧のフォントがそうなってるからです。欧文文字と日本語文字との間の四分空きは入りません。

FOUR-PER-EM SPACE挿入

日本語と欧文文字間に1/4 EMスペースを入れます。括弧との間には四分空きは入れません。

「Pango の日本語 Layout」の確認

二分空きに見えるんですが。なぜだろう? 気のせい? 私には許容範囲外に見えます。これならスペースがない方がまし。間が抜けて感じます。

ちなみに普通のSPACEを入れても同様に見えます。DejaVuSansのSPACEとFOUR-PER-EM SPACEフォントの幅はほとんど同じだから当たり前かな。

SIX-PER-EM SPACE挿入

日本語と欧文文字間に1/6 EMスペースを入れます。括弧との間には四分空きは入れません。

「Pango の日本語 Layout」の確認

四分空きくらいに見えます。見た目がよければそれでよしとしよう。

括弧・句読点類のスペーシング手動調整

半角文字を使って完全にスペーシング調整を手動でやることを考えます。普通のカギ括弧とかはフォントに二分空き分のスペースが入っているので、入れるべきでない時にも入ってしまいますので(プロポーショナルフォントならもちろんこんな苦労はしなくてよいでしょう)。

次のデータはカギ括弧が半角で、前後にSPACEが入っています。

「Pango の日本語 Layout」 の確認

すごい結果です。多分、SPACEにDroidSansJapaneseが選ばれてフォールバックもしなかった・できなかったんだと思います(Imagemagickでも同様でした)。どういう仕組みなんだろう?

まあ、半角記号はあまりないのでもともと意味はなさそうですが。

文字カテゴリ間のスペーシング調整の結論

欧文・和文間の四分空きはフォントに依存するようだが手動でできる。役物の半角を使ったスペーシング調整はできない(UNICODEにマイナススペースがほしい…)。

あと、行の幅は分からないので、手動では両端揃えもできません。

« Fontconfigを使って日本語斜体を別フォントに置き換える方法 | トップページ | 『優しい悪意』 (Affably Evil) の紹介 »

パソコン・インターネット」カテゴリの記事

コメント

コメントを書く

コメントは記事投稿者が公開するまで表示されません。

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.f.cocolog-nifty.com/t/trackback/2064309/63212836

この記事へのトラックバック一覧です: Pangoって何のソフト?:

« Fontconfigを使って日本語斜体を別フォントに置き換える方法 | トップページ | 『優しい悪意』 (Affably Evil) の紹介 »