[M+ OUTLINE FONTS 613] Re: win7(x64) 全角文字の横幅に不具合?

Back to archive index

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要素追加

これを変更してのチェックは未実行。
---------------




mplus-fonts-dev メーリングリストの案内
Back to archive index