« [WinRT/Metro] Windows ストア アプリの「セッション」と、データと、保存タイミング | トップページ | VS2012 Update2 の落とし穴 ~ BCL.Async と PCL [⇒解決] »

2013年2月13日 (水)

[WinRT/Metro] 勝手に「ファミリー」が「ファ㍉ー」に変えられちゃうよぉ! (@@;

Windows ストア アプリを作ってると、 フォントのチグハグさに辟易するわけですよ。 Segoe UI のスマートな英数字に、 太い Meiryo UI の日本語が混じるとね。 (--;

で、 全部 Meiryo とか、 (Windows Phone SDK を入れてる人向けに) Yu Gothic とかを指定して、 英数字と日本語がバランス良く表示されるようにするわけですな。

ところが…、 昨日気が付きました。
コレ↓ (@@;

20130212_

喰わせてるデータは「ファミリー」なのに、 表示は「ファ㍉ー」に化けてる! orz

なんじゃそりゃ~!? ってことで調べてみたら。
犯人は、 StandardStyles.xaml のスタイルに定義されている…

Typography.DiscretionaryLigatures = "True"

…でした (実際は、 スタイル セッターの構文)。

これは MSDN を見ると、 「随意合字」というものらしい。 どういう文字列が「合体」しちゃうかは、 次の画像で分かるように、 フォントによって違います。 デフォルトで使われてる Meiryo UI では「合体」しません。 Meiryo と Yu Gothic は「合体」しちゃいますが、 その範囲は違います。 これはもう、 予想不能。

20130213_discretionaryligatures

さて、 フォント ファイルから「合体」しちゃう文字列を列挙するには、 どうしたらいいのかしらん?

ともあれ、 StandardStyles.xaml に定義されている Typography.DiscretionaryLigatures を False に変更しておくのが吉でありましょう。
※ ファイル内に 3箇所あります。 検索して全部潰しましょう。(ついでに、「マウス」→「Mouse」も)

※ [2013/7/4 追記] Win8.1 では StandardStyles.xaml が居なくなっちゃいました。 地道に、 TextBlock に適用するスタイルを再定義するほかないようです。 (generic.xaml に引っ越したんだけど、 このファイルをいじっちゃうと違う PC でビルドしたら違う結果になってしまう)

[2013/2/21追記]
この「随意合字」、欧文フォントでは有効に働きます。
20130221_discretionaryligatures03

画像の上段が「合体」している状況。 "ffi"、"fi"、"fl"、"ff"がくっついています。読みやすくなる方向に働いていますね。だから、 Windows ストア アプリのテンプレートでは ON にしてあるのでしょう。 よもや日本語でこんな恥ずかしいことになるとは思いもよらずに…。

|

« [WinRT/Metro] Windows ストア アプリの「セッション」と、データと、保存タイミング | トップページ | VS2012 Update2 の落とし穴 ~ BCL.Async と PCL [⇒解決] »

プログラミング」カテゴリの記事

* プログラミング ( Metro スタイル )」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/209349/56759815

この記事へのトラックバック一覧です: [WinRT/Metro] 勝手に「ファミリー」が「ファ㍉ー」に変えられちゃうよぉ! (@@;:

« [WinRT/Metro] Windows ストア アプリの「セッション」と、データと、保存タイミング | トップページ | VS2012 Update2 の落とし穴 ~ BCL.Async と PCL [⇒解決] »