2013年6月23日日曜日

Chrome 28:三角(U+25E2~U+25E5)の縮みを補完するテスト(1)

ChromeでもU+2588などのブロック文字を「Lucida化」で全角幅の表示にできることはわかりました。しかし一緒に使われることの多い三角のブロック文字(U+25E2~U+25E5)は、同じやり方では全角幅になりません。IEでのSimSunより幅の狭い字形のままです。

自分が「Lucida化」と呼んでいるのはArialがLucida Sans Unicodeにフォント変化する現象のことですが、そもそもArialに三角のブロック文字はありません。おそらく始めからLucida Sans Unicodeで表示されており、その字形が全角幅ではないのです。試しに三角のブロック文字にダイアクリティカルマークを合成させると、U+2501やU+2587のようにLucida化を起こすことができます。そして三角自体の字形は変わりません。

他の方法で三角のブロック文字が縮む分を補完できないか下図のコメントで考えてみました。


四角はChromeでも全角幅のU+2587です。

これを下図のようにしてみました。三角の両側に半角スペースU+00A0を追加しています。黄色の枠が無ければIEでの表示は見た目変わりません。
同時に左右の並びを指示する制御文字をいくつか追加しています。これによりChromeでだけこのU+00A0が三角の内側へ移動するように調整しました。


先頭のU+202B(Right-to-Left Embedding)により、左のU+00A0とU+25E2の位置が反転します。U+202C(Pop Directional Format)でこの反転効果は解除され、次のU+202Bで右のU+25E3とU+00A0の位置が反転します。
ポイントは真ん中のU+2587をU+200E(Left-to-Right Mark)で挟んでいるところです。これをやらないと、U+2587も反転の効果に巻き込まれました。

IEでは何も起きません。これら書式制御文字の挙動の話で見たU+202Bとアルファベットの組み合わせと同じく、U+00A0がArialだからではないかと思いました。

さて三角が内側に縮むのを多少なりとも補完できましたが、1段目と2段目は当然のことながらコメント幅が違ってしまいます。上のように一行ずつ積んだコメントであればいいとして、改行を使って1コメントに収めると下図のように1段目と2段目にズレが生じます。


そこで、この場合は下図のように修正してみました。2段目にも両側にU+00A0を追加し、Chromeでは先頭のU+00A0が反転効果で右端に飛ぶようにしました。


Chromeの方はブロック文字の表示位置が左にズレてしまいますが、ueやshitaでなければこれもありかもしれません。

実は三角が縮む分を補完するのにU+00A0ではちょっと幅が広いのですが、それより幅の狭いスペースU+2005やU+2006では上と同じパターンが使えません。これはIE上でU+00A0がArialから変化しないのに対して、U+200XはCJKフォント変化(この場合SimSun化)の影響を受けるからです。同じパターンだとIE上でも反転が起きてしまいます。

このやり方は三角以外にも使えそうですけど、補完に使う文字はArialでないと難しそうでした。

<参考>AH Formatter/XSL Formatter Q&A

0 件のコメント:

コメントを投稿