フォントファイル

BDF にフォントファイルをドロップしても、そのフォントで何かを描くわけではありません。変換器はフォントのプレビューアです。.ttf・.otf・.ttc・.woff・.woff2 を、どの文字とグリフがあり、OpenType のフィーチャーが実際に何をするかを見せるページにします。BDF は Canvas 2D の上で動きます。fillText はブラウザの既定のフィーチャー(liga、kern など)しか適用せず、文書側から他のフィーチャーを指定する手段がありません。だからフィーチャーの働きは、文をシェーピングして見せるのではなく、グリフを 1 つずつ並べて描きます。

試してみる

ファイルをビューアにドロップするか、サンプルを試してください。OpenType フォント(STIX Two Text)。

フォントファイル(.ttf、.otf、.ttc、.woff、.woff2)

converter/font は TrueType、OpenType、そのコレクション(.ttc・.otc)、WOFF・WOFF2 を読みます。フォントごとにスクロールの View を 4 つ作ります。概要・文字・グリフ・フィーチャー(フィーチャーは GSUB も GPOS も無ければ作りません)で、コレクションはフォントの数だけ 4 つの組を作り、id に -1、-2 … を付けてそのフォントの名前を題にします。-param font= でコレクションのどのフォントを見せるか選べます。指定しなければ全部、または合計 262,144 グリフまでの先頭のフォントです(CJK フォントを 10 本、65,535 グリフずつ束ねたコレクションもあります)。

フィーチャーの読み取りは BDF 自前の GSUB・GPOS リーダー(internal/otlayout)で、ルックアップごとに fontTools と照合してあります。

グリフはフォント自身を 2 つの形で埋め込んで描きます。1 つはレイアウトテーブルを除いて cmap を差し替え、各グリフを私用領域の 1 文字に割り当てたものです。シェーパーは単独の文字でも置換しうるので、グリフ N をグリフ N のまま描くにはこの方法しかありません(カラーグリフも含めて)。もう 1 つはレイアウトテーブルを残し、見本文が届くグリフだけに削ったものです。見本文はこちらで描くので、ブラウザが実際にシェーピングします(アラビア文字の連結、インド系文字の結合、既定のカーニングと合字)。可変フォントは既定のインスタンスで描きます。OS/2 の fsType が埋め込みを禁じるフォントはアウトラインで描きますが、-ignore-fstype(権利がある場合のみ)を指定すれば埋め込みます。ブラウザ版は Brotli を持たないため、WOFF2 は読めません。

オプション 値 既定
-param font= コレクションのうち見せるフォント、1 始まりでコンマ区切り、または all all、または合計 262,144 グリフを超えるコレクションの先頭のフォント
-param text= サイズ別の見本文を、フォントのスクリプトのパングラムの代わりに指定 —
-param examples= フィーチャーごとに見せる置換とペアの数、または all 200
-ignore-fstype OS/2 の fsType が埋め込みや部分集合化を禁じるフォントも埋め込む オフ

内部の実装は design.md §3.28 を参照してください。