2013年12月30日月曜日

Windows 7:CJKフォント変化とフォントリンク

代替表示でのフォントリンクの働きについて、気づいていなかった部分があるようなので。
あらためて「CJKフォント変化」が何を指しているのか書いておくと、

  1. ニコニコのコメント表示において、ArialがサポートするWindowsコードページ1250~1258に定義がある文字はArialで表示される(と思われる)。
  2. 1.を除いた文字のうち、CJKコードページ932(日本語)・936(簡体字中国語)・949(韓国語)・950(繁体字中国語)のいずれかに定義がある文字は、CJKフォント=MS Pゴシック・SimSun・Gulim・PMingLiUで表示される。932に定義がある文字はデフォルトがMS Pゴシック(と思われる)。

2.のグループの文字で、デフォルトのフォントから他のCJKフォントに変化する現象、およびその変化を無効にする現象を個人的に「CJKフォント変化」と呼んでいます。
ここでは2.のグループを、フォント変化的な意味で仮に「CJK文字」と呼んでおきます。

ついでに言うと、このCJK文字における「フォント変化文字」という表現はあまり正しくないように思います。
例えば下図のコメントにおいて、下段先頭の「あ」が無ければ末尾の「あ」は上段のようにU+2588によってSimSun化されます。つまり下段先頭の「あ」は「ゴシック化(ゴシック保護)文字」であると言えます。
 

U+2588のような「SimSun化文字」に限らず、CJK文字はいずれも上の「あ」のようにフォント状態の決定に関わることがあると考えられます。すべて「フォント変化文字」と言えてしまうのであって、実のところはそれぞれの文字のフォント変化に与える影響の強弱なんだろうと思います。

さて、このCJKフォント変化においてWindows XPと7(おそらくVistaも)とでは特徴的な違いがありました。XPでは同一コメント内でMS Pゴシック以外のCJKフォントが複数混在できるのに対して、7ではできません。
 

※間に制御文字U+0009(タブ)またはU+000A(改行)が入ると、7でも混在できるという例外があります。

この違いはフォントリンクによるものだろうと考えていました。XPではSimSunやGulimのフォントリンクは登録されていませんが、7ではされています。
下図はU+249C(丸かっこ付き小文字a)を例にしています。この文字は1段目の通りGulim化文字です。そしてSimSunにこの文字はありません。コメントがSimSun化された場合、フォントリンクによる代替表示が起こると考えられます。
 

SimSunのフォントリンク先でU+249Cを持っているのはMS P明朝とBatangです。
 

フォントリンクが参照された場合、リストの上から順に該当する文字があるか検索されるそうです。またフォントリンクから他のフォントリンクを参照することは無いとされています。
上の図2・3段目のU+249Cは、リストでBatangより上にあるMS P明朝らしき字形で表示されています。そして3段目の「あ」は先頭のU+2588によりSimSun化されています。

SimSunのフォントリンクからMS P明朝を削除してOSを再起動すると、下図のような表示になります。
 

2・3段目のU+249CがBatangらしき字形に変わりました。
さらにフォントリンクからBatangを削除してみます。
 

2・3段目のU+249Cが1段目と同じGulimの字形になりました。
U+249CがCJK文字ではなければ、ここは全角幅の空白(表示するものが無い)になります。CJK文字の場合は、このようにそのフォントリンク自体を参照しなくなるようです。
3段目の「あ」は、GulimのU+249CによってGulim化された表示に変わりました。これは「CJKフォントが複数混在できる」XPの表示と同じです。

以上がXPと7とで表示に違いを生み出す、「CJKフォント変化」とフォントリンクの関係だと思っていました。ところがこれだけでは説明できない挙動があることに気づきました。

下図はU+249CをU+2661に変えたところです。U+2661はU+249Cと同様にGulim化文字で、SimSunにはありません。
 

SimSunのフォントリンク先でU+2661を持っているのはMICROSS(Microsoft Sans Serif)・MS P明朝・Batangです。
 

2・3段目のU+2661は、リストの最初にあるMicrosoft Sans Serifで代替表示されているようです。
ハートマークではなくこんな字形なのは、以前にも書きましたが誤ってU+2661に割り当てられているためではないかと思われます。これは本来U+2261(合同記号)の字形です。

SimSunのフォントリンクからMicrosoft Sans Serifを削除すると下図のような表示に変わります。
 

2段目のU+2661は予想通りMS P明朝の字形です。しかし3段目が変わっていません。3段目のU+2661はSimSunのフォントリンクを参照していないことになります。
「あ」の有無で変わるこの挙動は、Windows 8の「Segoe化」のケースで見ました。7で既に起きていたことを今回初めて知りました。理由はわかりません。

フォントリンクからMS P明朝も削除してみます。
 

2段目のU+2661はGulimに似ていますがBatangに変わったのだと思います。3段目は変わりません。
Batangも削除すると3段目にも変化が見られました。
 

これはなぜかU+249Cと同じ結果です。
ここで思いついて、今度はBatangのみを削除した状態にしてみました。
 

これだけで2段目も3段目もU+2661はGulimに変わりました。ちなみにU+249Cでやっても同じでした。
どうもフォントリンクは、単に上から順に探す以外の意味があるようです。

Windows 8でも試しました。8の場合、3段目の「あ」をつけたパターンではU+2661がSegoe UI Symbolになっています。
 

Batangを削除後は7と同じ結果です。
フォントリンクとは別の代替表示のプロセスが、ここにBatangがあるかどうか見ているんでしょうか。

0 件のコメント:

コメントを投稿