2013年3月24日日曜日

「ゴシック保護」文字をただのスペースに偽装するテスト

下図はブロック文字U+2588により漢字がSimSunにフォント変化したコメントです。


ここで先頭に「ゴシック保護」文字U+30FBを追加します。U+2588と漢字の隣接を「a」(Arial)で遮ると、漢字の部分は先頭のU+30FBに従いゴシックに戻ります。


さて、下図はこのU+30FBを何か半角スペース的なものに置き換えたところです。 U+30FBと同じように漢字をゴシックに戻しています。


この半角スペース的に見えるものは、実はU+30FBと同じく「ゴシック保護」 の効果を持つU+FF9F(半角カタカナの半濁点)です。先日書いた合成用文字の挙動を利用して、○の位置を上にズラして描画されないようにしてみました。


ここで使ったU+0309はゴシックと合成することができました。



ただしこのまま先頭に置くと他の文字も上にズレてしまいます。そこでU+FF9Fの後ろへさらにU+0323という別の合成用文字を追加して位置を下げました。


この文字もゴシックと合成することができました。



本当はこれもU+0309の影響で上にズレているのですが、U+FF9Fの文字幅が狭いため字形の部分が描画されませんでした。
下図の下段は「a」 をゼロ幅文字(U+200C)に変えるなどして、もう少し実用的な形にしたところです。


と言っても、単にこれだけなら普通の全角スペース(U+3000)でも真似ができます。U+2588に直接隣接するとSimSun化してしまうため、間にU+200Cを追加しています。

問題は、いわゆるフォントの連れ回しに対しても「ゴシック保護」できるかどうかです。あいにくU+3000にそのような効果はありません。


U+FF9Fはこの状態を解除することができます。


U+3000とU+30FB・U+FF9Fの違いが何かという話は、長くなるので割愛します。由来はやはりWindowsコードページの定義の有無にあるんじゃないかと思います。

Unicode 字形 cp932 cp936 cp949 cp950 cp1250~cp1258
3000   8140 A1A1 A1A1 A140 -
30FB 8145 - - - -
FF9F DF - - - -

なお、この偽装U+FF9FはChromeでは豆腐になってしまいました。半角カタカナとの組み合わせがダメなようです。


ちなみにWindows 8上のIEは7と同じ表示でした。XPでは試してません。

0 件のコメント:

コメントを投稿