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: Ǿ 0u01FE Width is not 1000: 乳 0u4E73
となっていて、この4つの文字幅が変だ。
ちなみに M+ OUTLINE FONTS TESTFLIGHT 042のほうは
まったく問題なかった。
じゃあどこで問題が起こったのか‥‥
MigMixでも問題が出ていることを考えると、
原因はしぼりこめる。
1) 元データ取得の段階で、うまくいってなかった。
2) FontForgeのバージョンによる不具合。
3) フォント名つけるところがおかしい。
4) MergeFonts()がおかしい。
途中でsfd吐くようにして、結果を観察しよう。
(未完)