MigMix/Miguフォントの文字幅不具合の修正

MigMix/Miguフォントの文字幅不具合の修正

Migu 1Mの不具合について
http://sourceforge.jp/forum/forum.php?thread_id=30310&forum_id=9259

この不具合の報告を受けて、調べた。
まずは以下のスクリプトを書いて、ttfファイルを通す。

#!/usr/bin/env fontforge -script

if ($argc <= 1)
  Print("usage: fontforge -script validate_width.pe FOOBAR.ttf")
  Quit(0)
endif

Open($1)
SelectWorthOutputting()
foreach
    u = GlyphInfo('Unicode')

    # U+0000-007F    Basic Latin           基本ラテン文字 (ASCII互換)
    # U+0080-00FF    Latin-1 Supplement    ラテン1補助
    # U+0100-017F    Latin Extended-A      ラテン文字拡張A
    # U+0180-024F    Latin Extended-B      ラテン文字拡張B
    # U+0250-02AF    IPA Extensions        IPA拡張 (国際音声記号)

    if (u <= 0u02af)
        w = GlyphInfo('Width')
        if (w != 500 && DrawsSomething(u))
            Print('Width is not 500: ', Utf8(u),' ', UCodePoint(u))
        endif

    # U+3200-32FF    Enclosed CJK Letters and Months 囲みCJK文字・月
    # U+3300-33FF    CJK Compatibility               CJK互換用文字
    # U+3400-4DBF    CJK Unified Ideographs Extension A      CJK統合漢字拡張A
    # U+4DC0-4DFF    Yijing Hexagram Symbols         易経記号(六十四卦)
    # U+4E00-9FFF    CJK Unified Ideographs          CJK統合漢字

    # U+F900-FAFF    CJK Compatibility Ideographs    CJK互換漢字

    elseif ((u >= 0u3200 && u <= 0u9fff) || (u >= 0uf900 && u <= 0ufaff))
        w = GlyphInfo('Width')
        if (w != 1000 && DrawsSomething(u))
           Print('Width is not 1000: ', Utf8(u),' ', UCodePoint(u))
        endif
    endif
endloop


確かに Migu-1M-regularだと

Width is not 500: ¢ 0u00A2
Width is not 500: £ 0u00A3
Width is not 500: § 0u00A7
Width is not 500: ¨ 0u00A8
Width is not 500: ¬ 0u00AC
Width is not 500: ° 0u00B0
Width is not 500: ± 0u00B1
Width is not 500: ´ 0u00B4
Width is not 500: ¶ 0u00B6
Width is not 500: Å 0u00C5
Width is not 500: × 0u00D7
Width is not 500: î 0u00EE
Width is not 500: ÷ 0u00F7
Width is not 1000: 亀 0u4E80

のようになる。記号類はわざと全角にしているものもあるけど、

Å 0u00C5
î 0u00EE
亀 0u4E80

の3つはこちらが意図しない問題だ。

MigMix-1M-regularも調べると文字幅がおかしい。

Width is not 500: Í 0u00CD
Width is not 500: ä 0u00E4
Width is not 500: &#510; 0u01FE
Width is not 1000: 乳 0u4E73

となっていて、この4つの文字幅が変だ。


ちなみに M+ OUTLINE FONTS TESTFLIGHT 042のほうは
まったく問題なかった。


じゃあどこで問題が起こったのか‥‥
MigMixでも問題が出ていることを考えると、
原因はしぼりこめる。
1) 元データ取得の段階で、うまくいってなかった。
2) FontForgeのバージョンによる不具合。
3) フォント名つけるところがおかしい。
4) MergeFonts()がおかしい。

途中でsfd吐くようにして、結果を観察しよう。
(未完)