2012年4月19日木曜日

あらためてMingLiUについて(3)

ニコニコプレーヤーの画面がでかくなるという話で、具体的なサイズが公表されていました。

【事前告知】新バージョンZeroに伴う変更 - ニコニコインフォ

当然コメントの表示にも影響あるでしょうが、実物が来ないことにはわかりようがないですね。
リリースされたら、またいろいろ調べてみるのが楽しみです。

さて前回の続きです。XPではMingLiU(PMingLiU)にならないMingLiU化をどう扱うか?
実際そこまで考えるのかという話ですが、まあフォント変化の挙動を見る実験です。

ArialやMS Pゴシックで表示されたままでは、MingLiUと見た目が違うだけでなくコメントの幅まで変わってしまいます。代わりにSimSunにすれば見た目も似せた上で幅も同じにできるでしょう(下図)。
図ではMingLiU化文字にU+02CD、SimSun化文字にU+2506をそれぞれ使っています。


XPの場合、先頭のフォント変化文字とは別のフォント変化をコメントの途中から発生させることができます。例えば先頭がSimSun化でも、途中にGulim化文字を置けばそこからGulimに変わります。一方Vista以降では途中にGulim化文字を置いても変わりません。この違いを利用します。

ただし(2)で書いたように、XP上のMingLiU化文字は(たぶん)CP950に定義がある文字に隣接しなければ豆腐になります。下図はU+2506を2文字目に入れてみたところです。U+2506はCP936にしか定義がありません。


これではU+02CDの幅が縮んでしまい意味がありません。そこでさらに2文字目へCP950に定義がある漢字を入れてみます。


XPでは、これに隣接することでU+02CDがMingLiUの字形で表示されます。またその効果で漢字はゴシックで表示されますが、7のMingLiUと幅は同じです。
そしてXPの特性により、3文字目のU+2506以降はSimSunに変わります。U+2506はCP950に定義が無いため、U+02CDの効果が及ばないのだろうと思います。これで7とXPの幅全体が同じになりました。

2文字目が漢字である必要はありません。CP950に定義があり、かつMingLiUと同じ幅で表示されればいいわけです。下図はCP950に定義があるU+FE52にしてみたところです。


後はフォント変化に利用したこれらの文字を隠してごまかしたいところ。3文字もあるとなかなか厳しいです。


例の方法で画面の外に出してしまえば、まだ実用性があるかなと思います。


ところで本題からそれますが・・・
上の例はWindows 8だとまた別の問題が発生します。 U+2506が縮んでしまうのです。後ろに漢字やひらがなが来ると字形が変わるようです。


旧ブログで、これはSegoe UI Symbolではないかという話を延々と書きました。 PMingLiUのフォントリンクは7も8CPも同じで、なぜこんな現象が起きるのか今のところ謎です。
文字によって起きたり起きなかったりで、下図はU+2506をU+3016に替えて比較したところです。U+3016はU+2506と同じくCP936にだけ定義があるSimSun化文字です。


8はまだベータ版の段階ですから、あまり考えてもしょうがないのかもしれません。ただSegoe UIは8のUIフォントとしてフィーチャーされているので、とても気になっています。

2013/4/13ご質問用の画像追加:



6 件のコメント:

匿名 さんのコメント...

1年以上前の記事ですがMingLiu化について質問です。
http://p.twpl.jp/show/orig/8MUAx Win7 Chrome NPAPI 原宿
U+02CDってこんなおかしな挙動なんでしょうか?
行頭でしか使えない(ただのゴシック文字にも負ける)かと
思ったらU+2661をMingLiu化文字にしてしまう。
MingLiu化の基本も判らないのでご教示頂けると幸いです。

bardiel さんのコメント...

コメントありがとうございます。上にサンプルの画像を追加しました。
MingLiU化はゴシックに負けるというか、ひらがなやカタカナに負けます。右の画像は先頭を「あ」から漢字の「愛」に差し替えたところです。「あ」と「愛」の違いはコードページ950(繁体字中国語)での定義の有無にあります。「あ」は950に定義がなく、それがこの挙動の差の由来なのではないかと思っています。
あまり細かいことはフォント変化の仕組み自体の話になってしまいますが、要は「あ」は02CDの前にあればMingLiU化解除文字(ゴシック保護文字)のように振る舞うようだということです。

匿名 さんのコメント...

ご回答ありがとうございます。
繁体字フォントがある文字が行頭だとMingLiu化するのですね。

bardiel さんのコメント...

繁体字フォントにグリフがあっても、言わば「MingLiU化属性」があるかないかということですね。
属性のある「愛」がU+02CDに従うのに対して属性のない「あ」は従わず、先頭にあることでゴシック保護文字のように振る舞うということじゃないかと思います(上にもう一つ画像を追加しました)。

匿名 さんのコメント...

ごめんなさい。変な事言っていました。
MingLiu化属性ですか…

bardiel さんのコメント...

属性という言葉が適切かはアレなんですが^^;
その辺そのうち整理できればなあと思ってます。

コメントを投稿