IPAmj明朝の住基グリフ汚染

  • 半年くらい前にツイートした件なのだけれど、より詳しい情報も含めてまとめておく。発端は@tree3yamaさんの、この発言。

  • えっ?と思ってjp90タグのターゲットとなる160字(Adobe-Japan1フォントではjp90グリフとjp04グリフが異なる字)について調べてみたところ、下図のようにjp90グリフだったりjp04グリフだったりバラバラの結果だった*1。「mj」欄がIPAmj明朝002.01、「Koz」欄は比較用の小塚明朝Pr6N。ピンク地がjp90グリフ、白地はjp04グリフ。


  • IPAmj明朝の実装方針についての資料を探したところ、第3回文字情報基盤推進委員会配布資料(http://ossipedia.ipa.go.jp/doc/476/)の資料4「文字情報検討状況について」における「4. IPAmj明朝での符号化実装の優先順位について」に、次のような記述があった。

1) 常用漢字表に掲載されている字体
2) 人名用漢字別表(戸籍法施行規則別表第二 漢字の表)に掲載されている字体
3) JIS X 0213 に掲載されている例示字体
4) 住基ネット統一文字の字体
5) UCS のJ 欄(日本提案の字体)に掲載されている例示字体
6) 康煕字典

  • この優先順位に従うなら、図に掲げた160字についてはIPAmj明朝もすべてjp04グリフ(白地)となるはず。ピンク地のグリフはバグということになる。
  • では、jp90グリフ(ピンク地)となっている字には、どのような共通点があるのか。下図は、常用漢字人名用漢字を除いたもの。IPAmj明朝はすべてjp90グリフとなっている。



  • 下図は、人名用漢字。IPAmj明朝はほぼjp04グリフ(人名用漢字表グリフ)となっているが、違いが筆押さえの有無など比較的微細な例に関しては、jp90グリフとなっている。


  • というわけで、まず、優先順位4(住基ネット統一文字のグリフ)または5(UCSのJ欄のグリフ)が、3(JIS X 0213のグリフ)より優先されてしまっていることがわかる。そこで、住基とJ欄のどちらが優先されているのかを確認するために、JIS X 0213補助漢字(UCSのJ欄)で例示字体の異なる文字について、IPAmj明朝の実装を確認してみた(下図、黄色地はマッピングなし)。


  • これらの文字については、「鬭」のマッピングが逆になっている以外は、優先順位の誤りは見られなかった。ということは、優先順位3(JIS X 0213のグリフ)と5(UCSのJ欄のグリフ)の関係には問題がなく、優先順位4(住基ネット統一文字のグリフ)が3より優先されているようだ。
  • 住基ネット統一文字のマッピングは基本的にJIS X 0213:2000ベースだが、1-94-31に対応するJ+FA6Bは「括弧付き符号位置」である*2ため、U+9B2D(J+9B2D)は補助漢字グリフとなっている。上図の31字のうち「鬭」のマッピングだけが逆になっているという事実は、住基ネット統一文字の影響を示しているものと考えてよいだろう。


  • 次に、人名用漢字がjp90グリフとなっているものについて、その共通点を調べるために、文字情報基盤の「文字情報一覧表」を見てみると、これらはいずれも「MJ文字図形名は異なるが、Ver.000.01では字形が同じだった字」の一方をVer.001.01で修正したケースだった(下図)。


  • これらのケースでは、いずれも字形の変更にともなってUCS実装(マッピングの有無)欄と漢字施策欄の情報が(変える必要はなかったのに)間違った方向に変更されている(図ではピンク地で示した)。下図は「斧」の例。


  • 常用漢字でも字形については同様の変更がなされている例があるが、漢字施策欄とUCS実装欄に誤りはない。下図は「釜」の例。


  • まとめると、IPAmj明朝のデフォルトグリフは、住基ネット統一文字のグリフに汚染されている。また、人名用漢字では、同じ字形が複数登録されていたうちの一方を修正したケースで、マッピングが逆転している。これらのバグはIPAmj明朝の最初のバージョンの000.01には存在しなかったものであり、バージョンアップによって汚染が進んでいるように見える。

*1:IPAmj明朝がjp90をサポートしているわけではない。

*2:JIS X 0213の正誤表(2001年)で、1-94-31はU+9B2Dと対応付けられた。