2013年5月19日日曜日

Chrome 27:U+2584・U+2588の全角化とゼロ幅文字

「Lucida化(仮)」の話の続きです。Chrome 27は、なぜかまだ安定版がリリースされていないためBetaです。

CMapのデータを見ていて、ゼロ幅文字のU+FEFFがArialには無くLucida Sans Unicodeにあることに気づきました。試したところ、これでもLucida化が起きました。下図はU+2588をChrome上で全角幅にしているところです。
 

ダイアクリティカルマークもゼロ幅ですから、まるで何もないのにU+2588が全角幅に変わっているように見えます。IE上でもコメント幅に影響はありません。

ところがこれができるのはWindows 7だけでした(Vistaはわかりませんが)。まず下図左のようにXP上のChromeではLucida化が起きません。また8上のChromeではLucida化が起きますが、IEでU+FEFFの部分がゼロ幅でなくなってしまいました。


XPではダイアクリティカルマークに例えばU+0320を使うとLucida化が起きましたが、この組み合わせはIEで合成が起きません。しかもXP・7・8で表示の結果が異なりました。


7上でも、もう少し見てみました。下図はU+2584とU+2588を全角幅に変えているところです。


上の図ではU+FEFFを使ってもU+2501を使っても結果が同じです。しかし下の図のように途中へArialを挟んだ場合、U+2501の方ではTimes New Romanと思われる字形へフォントが変化します。これを仮にTimes化と呼んでおきます。
U+FEFFの方ではこのTimes化(仮)が起きません。Lucida化が起きると言っても、どうもU+FEFFはU+2501やU+2587とはまた違うようです。

ところで、上のTimes化はゼロ幅文字U+200Cを使うと回避できます。


次にこのU+200Cについて、もうちょっと実用的なケースで見てみます。
下図は文字列の両側をU+2582~U+2588で挟んだコメントです。下段はLucida化によりU+2584とU+2588を全角幅に変化させています。


コメントの一箇所にダイアクリティカルマークをつけており、かつU+2584・U+2588がいずれもその他のブロック文字(Lucida)に隣接しているため、このようになるのだと思います。途中の文字列がごシックであればこの挙動に影響を与えないようです。
しかし途中の文字列がArialの場合、上で見たTimes化が起きます。


ちなみにXPだと化け方がちょっと違います。


図の通り文字列の右側ではTimes化が起きません。それによく見るとU+0020が豆腐になっています。元はシンボルフォントで、アルファベットだけTimesで代替してるんでしょうか。
また、8ではTimes化が起きません。文字の組み合わせによるのか、Times化自体が起きないのかはまだわかりません。


7とXPでも、文字列の両側にU+200Cを挟めばTimes化が起きません。


IE上ではU+0323がちょっと表示されてしまう以外に影響はないように見えます。


なお、この例でU+2581は使っていません。U+2581はLucida Sans Unicodeに無いからです。というか、それがLucidaじゃないかと思ったきっかけでしたが。

0 件のコメント:

コメントを投稿