2013年5月6日月曜日

Chrome 26/27:U+2001の全角化

まずChromeでU+2588などを全角化する話の補足です。
U+0323は、くっつけた文字が化けない限りどこにあるかは問題ではないようです。要はダイアクリティカルマークがコメント内にあること、全角化したい文字がLucida Sans Unicodeで表示されている文字(下図の例ではU+2586)に接していることが現象の発動条件らしい。


とりあえずこの現象をLucida化(仮)と呼んでおきます。
上の右図では、途中に半角のaを挿入すると両側のU+2586と一緒に別のフォント変化が発生しています。その結果U+2584・U+2588はLucida化しません。これが全角のaであればLucida化に影響しませんが、このaをU+2584とU+2586の間に挿入してしまうとU+2584がLucida化しなくなります。

次にIEでの話です。例えばダイヤのマークU+2666は下図のような挙動を取ります。「a」に接している場合はArial・「あ」に接している場合はゴシックで表示されていると思われます。


コメント自体が「ゴシック化」されていもその条件は変わらないようです(上の右図)。

空白文字U+2001もこれと同じ挙動を取ります。下図のコメント1段目と2段目の違いは、最後の「a」と「衣」の順番です。「衣」と接している2段目のU+2001はゴシックだと思われ、全角幅です。1段目はArialと思われ、それより少し短くなっています。


Chromeでは1段目も2段目もIEの1段目と同じ幅で、Arialだと思われます。これが冒頭のU+2584・U+2588と同様にLucida化→全角化することに気づきました。


1段目と2段目の最後のU+2501は、ChromeではLucida Sans Unicodeで表示されていると思われす。2段目でこれにU+0323をくっつけているのは、「Lucida化処理」です。Chromeの表示がIEと同じ幅になっています。U+2001の数を増やすと「Lucida化処理」の有無による差が広がってわかりやすくなります。


ちなみにWindows XPの場合、U+2001はArialにありませんがLucida Sans Unicodeにはありました。このため、Chromeでは「Lucida化処理」をしなくても2段目と同じ幅で表示されます。
関連フォントのU+2001の有無を下表に示します。

Windows XP  Windows 7 
Arial 無し 有り
MS Pゴシック 有り 有り
Lucida Sans Unicode 有り 有り
Microsoft Sans Serif 無し 有り

SimSun・Gulim・MingLiUはU+2001がありませんので、IEでフォント変化が起こるとWindows 7ではフォントリンクによりMicrosoft Sans Serifが表示されると考えられます。ゴシックやArialよりずっと幅が狭く、実用的とは言えません。一方、XPではそのような代替表示自体が起きません(SimSunでは表示するものが無いという意味の全角幅の空白になります)。

下図は以上の検証をいわゆる「big10行」(二重リサイズ)のコメントで試しているところです。
空白部分はU+2001・pinkで表示されているのはU+2588です。U+2001はU+2588によりSimSun化しないようゴシック保護の処理をしてあります。


3つ目の画像のLucida化は、U+2001だけではなくU+2588にも適用させています。これによりIEと表示の互換ができているように見えます。

下図は上のコメントをFullコマンドで投稿して二重リサイズが起きないようにしています。左右に黄色の枠が表示され、幅の違いがわかります。重ね合わせの都合で10行を16行に変更しています。


「Lucida化処理」をしていない2つ目では、U+2588を含んだpinkのコメントだけでなく色なしのコメントも幅が縮んでいます。U+2001がArialのままだからだと思います。

空白文字は見た目は幅でしか判別できませんので、Lucida Sans Unicodeだと言っているのは今まで見てきた情況証拠からの推測に過ぎません。なんにしろIEと表示の互換が図れればいいなということです。
なお同じ事ができるケースはそれほど多くないと考えられます。
Chrome上で元はArialで表示され、かつLucida Sans Unicodeに全角幅の字形があるという条件に当てはまる文字は、数が限られています。さらに冒頭でも触れたような別のフォント変化も確認しています。まあ、まだ他にも未知の挙動があるのかもしれませんが。

3 件のコメント:

OWATA TheEndOfWorld さんのコメント...

ご存知なら申し訳ありませんが、ブロマガ http://ch.nicovideo.jp/gottuttu/blomaga/ar40154 でごっつっつさんがU+2001全角化するのにU+202A+U+0655を使っています。
これらのコードページ情報はどうなっているのでしょうか?
不躾な質問ですが教えていただければありがたいです。

bardiel さんのコメント...

知りませんでしたがU+202AもU+0655もWindows 7ではArialにありますので、Lucida化とはまた別の現象みたいです。Chromeでのフォント変化は多様でおもしろいですね。
ちなみにどちらもWindowsコードページに定義は無いようですが、Chromeでは関係ないと思います。何か独自のロジックで文字ごとに区別をしているように見えるんですよねー。

OWATA TheEndOfWorld さんのコメント...

ありがとうございます。Lucidaとは違うとは予想外でした。

コメントを投稿