Itou Hiro
itouh****@users*****
2011年 7月 15日 (金) 23:00:15 JST
itouhiroです。 Itou Hiro は書きました: > TESTFLIGHT 041 の M+ 1M,2M について確認しました。 > 投稿のとおり、「全角文字」の文字幅がおかしくなっていました。 > ... > 原因は未確認です。 原因を調査しました。 TrueTypeフォントの「OS/2」テーブルの xAvgCharWidth の値が変化していたのが原因のようです。 --------------- xAvgCharWidth (平均の文字幅) が違う。 TESTFLIGHT040 .. 0x01fa (10進数で 506) TESTFLIGHT041 .. 0x035a (10進数で 858) --------------- TESTFLIGHT041のxAvgCharWidthを TESTFLIGHT040と(バイナリエディタで)同じ値にしたところ、 「全角文字」の文字幅が正しく表示されるようになることを 確認しました。 ・xAvgCharWidthが変化した原因 ・xAvgCharWidthを以前と同じに戻す方法 の2点についてはまだ未調査です。 以上です。 -- itouhiro 以下は調査メモ。 --------------- OS/2テーブルを比べてみた。 TtModify 1.5でTESTFLIGHT040と041のmplus-1m-regular.ttfから OS/2テーブルをExportする。 hexdump -C ttf > hex.txt でバイナリをテキストにして比較。 異なる点 1. OS/2テーブルのバージョンが違う。 TESTFLIGHT040 .. 0x0001 (TrueType rev 1.66) TESTFLIGHT041 .. 0x0004 (OpenType rev 1.6) この2つのOS/2テーブルを比べてみた。 TrueType rev 1.66のOS/2テーブル仕様 http://www.microsoft.com/typography/SpecificationsOverview.mspx のThe TrueType 1.66 specification の chapter 2 (word .docフォーマット) OpenType rev 1.6のOS/2テーブル仕様 http://www.microsoft.com/typography/otspec/os2.htm バイト頭から「ULONG ulCodePageRange2」までは OpenType1.6とTrueType1.66が共通に持つ要素。 OpenType1.6はそれに加えて、 SHORT sxHeight SHORT sCapHeight USHORT usDefaultChar USHORT usBreakChar USHORT usMaxContext の5要素が追加されてる。 TESTFLIGHT041の「OS/2テーブルのバージョン」だけを 040相当に変更(+末尾5要素削除)しても、 フォント表示は正常にならなかった。 2. xAvgCharWidth (平均の文字幅) が違う。 TESTFLIGHT040 .. 0x01fa (10進数で 506) TESTFLIGHT041 .. 0x035a (10進数で 858) TESTFLIGHT041の「xAvgCharWidth」だけを 040相当にすると、フォント表示は正常になった。 3. 「USHORT fsSelection」は異なる TESTFLIGHT040 .. 0x0040 (0b 0100 0000) TESTFLIGHT041 .. 0x00c0 (0b 1100 0000) TESTFLIGHT040 041 -----------------+----+----- USE_TYPO_METRICS on on WWS off on -----------------+----+----- これを変更してのチェックは未実行。 4. OpenType1.6のほうのOS/2テーブルには5要素追加 これを変更してのチェックは未実行。 ---------------