2012年8月29日水曜日

Chrome 21:縮む文字・縮まない文字

ブロック文字の話のつづきです。以下はすべてWindows 7で見ています。

もう一度繰り返すと、U+2581~U+2588をChrome(pepflashplayer有効)で見たところ、ArialにグリフのあるU+2584とU+2588はArialの縦長の字形で表示されました。U+2582・2583・2585~2587は全角、U+2581だけなぜかArial Unicode MSの縦長の字形で表示されました。


この範囲がChromeではArialで表示されることになっているとして、Arialに無い文字は全角の何か→Arial Unicode MSの順でフォールバックしたんじゃないかということです。

「全角の何か」はMingLiUを始めとする中国語フォントやメイリオなどにはあるのですが、Arial Unicode MSに優先してCJKフォントが出てくるのは唐突な気がしました。あらためて調べてみると、欧文系のフォントでもSegoe UI SymbolとLucida Sans Unicodeにはありました。しかしSegoe UI SymbolはXPに入ってません。ということは、これはLucida Sans Unicodeではないだろうか。これならXPにも入っています。

下図はU+2587をまたBabelMapで出力してみたものです。空白部分が黄枠とは一致してないですが、これは他のケースで見ても必ずしも関係なさそうなのでとりあえず気にしません。


CMapを見てみると、Lucida Sans UnicodeにはなぜかU+2581が欠けています。U+2581だけArial Unicode MSだったのはこのせいじゃないかと思いました。下図はArial・Lucida Sans Unicode・Arial Unicode MSのCMapを比較しています。


まぁ断定はできませんけど。ただ、こうしてフォント名が推測できるとCMapから縮まなそうな文字を探しやすくなります。例えば下図は罫線記号U+2500~U+2503を試しています。


なぜこの4つを拾ったのかと言うと、Arialには2501と2503は無かったからです。


この2501・2503もChromeではLucida Sans Unicodeなのかもしれません。文字幅はIEと一致するようです。


IEの方はLucida Sans Unicodeというわけではありません。たぶんMS Pゴシックです。


と言うのは、これらの文字はコードページの話で言うと1250~1258に定義がなくCJKコードページにある文字だからです。IEではCJKフォントのいずれかで表示されると予想されます。CP932(日本語)に定義があるのでゴシックかなと。


本題とそれますが、上の図の定義を見ると2501と2503はCP950(繁体字中国語) にだけありません。つまりMingLiU化解除文字だろうと考えられます。
下図はそれを試しているところです。欧文系のフォントならこんな現象は起きないでしょう。


最後に上のブロック文字や罫線記号とは違うケースも見てみます。下図はU+25ACという文字の挙動です。


IEでは単独の状態がGulimとよく似ています。ゴシックだともっと細くて短い字形です。SimSun・PMingLiUはこの文字が無いので代替表示です。フォントリンクでMS P明朝だろうと思われます。
Chromeでもこの単独のが表示されています。フォント変化は起こらないので全部同じです。単独のフォントは何かと思ったらArial自体にありました。


もっとも、字形が全角幅に見えても複数並べるとGulimより少し短いようです。本当にArialだとすれば描画上の問題かなと思いますが、その辺の仕組みはわかりません。

ただ少なくとも挙動は既知のArialのものです。下図はIEとChromeの表示を同じにしてみる例です。
漢字やひらがなに接すると、U+25ACは上で見た通りゴシックになって縮んでしまいます。前にも書いたゼロ幅文字をはさむやり方で、これを回避できました。


このケースではU+200CでArialがゴシックに変わるのを防いでいます。字形的にけっこう使えそうです。

0 件のコメント:

コメントを投稿