(続) Re: GDI+ で全角ハイフンが欠落する
昨日の記事の補足。
KB944975 や MSDN forum で問題にしている 「全角ハイフン」 というのは、 それぞれの中にも書いてあるんですが、 U+2010 "Hyphen" のことです。
※ WinXP から、 IME の候補の説明に 「[全]ハイフン」 と出てくるようになってるので、 Unicode のことを知らない人が 「全角ハイフン」 と呼ぶのを、 もはや止められない。 (--;
で、 U+2010 "Hyphen" は、 MS のドキュメントを見ると、 U+002D "Hyphen - minus" と同じだとなっています。
U+002D "Hyphen - minus" は常に表示されるものであって、 さらにしつこく、 U+00AD "Soft hyphen" と混同するな、 とまで書かれています。
その U+00AD "Soft hyphen" は、 どう表示するかは実装しだいだけど、 HTML 4.x では、 通常は表示されず、 line break が起きたときだけ表示されるよ、 と書かれています。
さて。 GDI+ の実装は…
・ U+2010 "Hyphen" が入った文字列を渡して描画させると、 だいたいは、 U+002D "Hyphen - minus" と同じような表示になる。 ( 上のドキュメントの通り。 )
・ しかし、 渡す文字列によって ( たとえば 「ア」 が混ざっている、など ) は、 U+2010 "Hyphen" が U+00AD "soft hyphen" であるかのような挙動を示すことがある。 ( 上のドキュメントで、 混同するなと言われていることを、 やっているように見える )
…となっているように見えます。
自分のとこの定義と違う実装ではイカンだろう、 と私は思うわけですが、 でもまぁ、 これが仕様なんだそうで。
仕様ならしょうがない、 ってとこなんですが…
どういう文字列を渡したときに "soft hyphen" と同じような挙動に切り替わるのか、 そのへんの仕様は厳密に公表してもらいたいものです。
※ 「全角文字が混ざるときだけ」 って言うならそれでもいいんですが、 そのときは、 「全角文字」 の定義をきちんと言ってもらわないと… f(^^;
※ しかも。 U+FF71 「ア」 とかでも問題の現象が出ますから、 「全角文字が混ざるときだけ」 ってことでもないでしょうし。 f(^^;
( 2007/11/25 追記 ) Soft Hyphen の例。
前述したように、 HTML 4.x には Soft Hyphen の挙動が定義されています。
UTF-8 などの Unicode で HTML ドキュメントを書く場合は、 直接 U+00AD の文字を埋め込んでもいいのですが、 実体参照 ­ あるいは ­ として書くこともできます。
上のテキストエリアの文字列中に埋め込んでみました。
"ab" の 'a' と 'b' の間、 "あい" の 'あ' と 'い' の間、 それと、 Hyphen の 'y' と 'p' の間に Soft Hyphen (U+00AD) が入っています。
手元の環境では、 IE7 は正しく表示してくれます。 適当に文字を挿入して、 Soft Hyphen (U+00AD) の位置で改行されるようにしてみてください。
なお、 FireFoxe 2.0 は、 対応していないようです。
※ 右は、 IE7 で表示させたもののキャプチャ。
| 固定リンク
「プログラミング」カテゴリの記事
- 【.NET / Win8.1 ストアアプリ】 HttpClient で TLS 1.1 / 1.2 に対応するには(2018.06.17)
- 【VS2017 15.7pv2】 XAML のランタイム ツールに 「ヒートマップ」 が増えた(2018.03.28)
- 【.NET Core】 プロジェクトを作ると 「project.assets.json が見つかりません」 エラー(2018.02.10)
- 【#UWP】 ビットマップの表示色を変える (Win2D.uwp 経由で Direct2D を使う)(2017.08.23)
- 【#UWP】 CompactOverlay モード: Picture in Picture というか、「最前面に表示」するウィンドウを作る(2017.08.16)
この記事へのコメントは終了しました。
コメント
>U+2010 "Hyphen" は、 MS のドキュメントを見ると、
>自分のとこの定義と違う実装ではイカンだろう、 と私は思うわけですが、 でもまぁ、 これが仕様なんだそうで。
MSのドキュメントをMSの中の人が全然見てないのはいつものことなのでw
投稿: 道化師 | 2007年11月26日 (月) 21時23分