ligatures font の解析の仕方は Read ligature from a font #384 が参考になります。 他にも Ligatures #194 が参考になるのですが、getLigatures() は low level 実装のため、 応用的な解析には使いにくい問題があります。addLigature() は参考になります。
更新するにあたっては、そもそも ligatures font の仕組みからわかっていなかったので、コードを動かしながら仕組みを調査しました。 home という ligatures を定義するとき、その一文字ずつ (h, o, m, e) に Glyph 定義をしているようです。 その後それら Glyph へのインデックスを配列として ligatures を定義します。 Material Icons などでは ASCII 文字列を使って ligatures を定義していますが、ASCII 文字列の Glyph の Path は空で良いようです。 ただ svg2ttf は空だとバグるので、その修正で多少時間が掛かりました。
つまり ligatures font を新規作成しようとする時の作成フローは以下になりそうです。
- ligature 文字列の中でまだ登録されていない Glyph を空の Glyph として登録する
- 利用する Glyph をリストアップして登録する
- Glyph に適用する ligature 文字列をリストアップする
- ligature 文字列のインデックスを利用して ligature を登録する
--ligature <str> (ligature を利用したサブセット化)
--ligature-file <path> (ligature を利用したサブセット化)
--name <str> (glyph-name を利用したサブセット化)
--name-file <path> (glyph-name を利用したサブセット化)
フォント最適化でよく使いそうな機能はだいたい実装したつもりです。
まだ多少実装したいことはありますが、フォント最適化ツールとしてはだいたい完成かな?
0 件のコメント:
コメントを投稿