半角罫線素片のフォントが異なる件No.32545
koga2020 さん 13/08/19 11:06
 
秀丸Ver8.32 Beta7 Windows7 SP1 32bit環境です。

少し特殊ですが、UTF-8文字コード(16進数)で
E2 94 86 や E2 94 95 といった、半角の罫線文字があります。
隣り合わせる E2 94 94 は全角であったりと、若干特殊です。
また、この表示自体は正常に行われます。

問題は以下のケースです。
IPAゴシックという改変が許可されたフォントに罫線素片を追加して試している最中
に気づきました。
ファイルタイプ別のフォントをIPAゴシック(改)にしました。
UTF-8文字コード(16進数)でE2 94 84 が秀丸で表示される際、
1文字目のみE2 94 84ですぐ改行であれば正常にIPAゴシック(改)で表示されるのです
が、
1文字目E2 94 84 2文字目【年】のように文字が続くと、MSゴシックのフォントが表
示されてしまいます。
その場で文字編集で2文字目をいじると、リアルタイムにE2 94 84の表示フォントが
切り替わります。

まとめると、E2 94 84はフォント設定が IPAゴシック(改) のとき
1.IPAゴシック(改)で表示されるケース
  1文字目 E2 94 84
  2文字目 改行コード

2.MSゴシックで表示されるケース
  1文字目 E2 94 84
  2文字目 年   (その他、月日とか、何か文字が続く場合)

以上になります。

また、2の状態のMSゴシックフォントをマウスで
1文字のみ選択状態にすると IPAゴシック(改)フォントにリアルタイムで切り替わ
るというか、表示されます。
それが2文字目の年を含む長さに伸ばすと、MSゴシックに表示フォントが戻ります。
そのままマウスの左ボタンを離さずに選択状態を1文字のみに戻すと、リアルタイム
にIPAゴシック(改)になります。

また、秀丸Ver 8.03では上記の問題は一切生じません。

VisualStudio2008でも罫線素片だけは勝手にMSゴシックになるので、その辺の問題も
関係するのかな?と思います。

[ ]
RE:32545 半角罫線素片のフォントが異なるNo.32546
秀丸担当 さん 13/08/19 13:17
 

バグ情報ありがとうございます。
(改)ということで、同じ条件ではないかもしれないですが、IPAexゴシックが入
っていたのでそれで確認することができました。
元々のIPAexゴシックの状態としては、フォントのグリフが無くて「・」となる
ようで、組み合わせによって自動的にグリフが存在するフォントに代替されたり
するようです。

ワードパッドでも同じことが起きて、メモ帳とMS-IMEでもIMEパッドからの入力
中(未確定)でも同じことが起きました。

プログラミング的なことですが、最も基本的なテキスト描画をするWindowsのAPI
としてTextOutやDrawTextなどがありますが、なぜかuser32系のAPIとgdi32系の
APIで、自動的なフォント代替(フォントリンク)の具合が違うようです。
XP,Vista,7とそれぞれ具合が違っているようで、特に明文化もされていなくて、
なぜ違うのかはすみませんがわかりません。
フォントを作ってから以下のように描画するだけで違うようです。

HFONT hfont = CreateFontW( 20, ..... , L"IPAexゴシック" );
SelectObject( hdc,hfont );
static WCHAR awch[100] = {0x2504,0x5e74,0};
TextOutW(hdc,0,0,(WCHAR*)awch,1);
TextOutW(hdc,0,20,(WCHAR*)awch,2);

秀丸エディタの以前のバージョンと違うのは、以前は一文字づつUnicode独自文
字の描画をしていたところをまとめて描画して効率化した部分があるためだと思
います。


秀丸エディタの場合は設定で描画方法を変えることができます。
[その他]→[動作環境]で上級者向け設定をONにして、
[その他]→[動作環境]→[表示/操作]→[文字の描画]で「3Dグラフィックアクセ
ラレーターによる文字の描画」をONにした場合はそれなりに高度な描画方法にな
って、組み合わせによって違うことはなく統一されました。
(ただしこの場合必ず代替されてしまうようです)

レジストリエディタで
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontLink
\SystemLink
をいじってフォントリンクの具合を調整するとなんとかできるようです。
フォント名でREG_MULTI_SZの値を作って、データは「ipahoge.ttf」など、自分
自身のフォントファイル名を書いておくと、罫線の代替は自分にされることにな
り結果的に代替されないようです。

[ ]