Lazy Diary @ Hatena Blog

PowerShell / Java / miscellaneous things about software development, Tips & Gochas. CC BY-SA 4.0/Apache License 2.0

Noto Sans CJKフォント 言語ごとの実装内容の違い

Noto Sans CJKフォントは、複数の言語に対応したフォントが一つのTTCファイルとして提供されている。 github.com これは内部的には複数のTTFファイルでできていて、言語ごとに別れている。

各言語のフォントファイルは以下から取得できる。 github.com unitettcを使い、 unitettc64.exe .\NotoSansCJK-Medium.ttc のようにしてフォントを分割することもできる。 yozvox.web.fc2.com

さて、各ファイルの内容をFontForgeで見たところ(CIDで単一化を指定にしてUnicode BMP面を表示、Compact (hide unused glyphs)を有効化している)。言語ごとに使えるグリフが異なることがわかる。

さて、なんでこんなことになっているのか?ひとつのTTFファイルに全言語ぶんのグリフを含めてしまったら良いのでは?と思うのだが、どうやらTTFファイルの仕様上、一つのファイルに65,535個以上のグリフを含められないということらしい。

togetter.com

2021年9月にOpenType規格の最新版である1.9が公開された。OpenTypeフォントに含まれるグリフ数はmaxpテーブルで定義されている。OpenType 1.9でもnumGlyphs(フォント中のグリフ数)はunit16型なので、65,535個以上のグリフが含められない状況は変わっていないようだ。

learn.microsoft.com