Outline Glyph Viewのデバッグビューで追える。
ttx
でTrueTypeフォントのglyf
テーブルをdumpして比較すると良いか。
<assembly> PUSHB[ ] /* 1 values pushed */ 1 CALL[ ] /* CallFunction */ </assembly>
といった部分はfontforgeのデバッガでは
PUSHB_1 1 CALL <return>
として表示される。低レベルで確認するならHexFiendのバイナリテンプレートなり何なりで該当箇所のバイナリも一緒に見るともっと分かりそうだがすぐには気力が・・・。
PUSHBで1つの値1
をスタックに積んで、CALL関数を呼び出しているという内容である。
function identifier number については規格より、maxp.maxFunctionDefs
により上限が決まる。
関数についてはFDEFによるとfpgm
テーブルかcvt
テーブルのみに現れるとのこと(cvtは本当か?数値の配列ではないのか?オペランドもオペレータも数値だということでそりゃぁFDEFの中身も全部数値の配列ではあるが・・・)。
<fpgm> <assembly> PUSHB[ ] /* 1 value pushed */ 0 FDEF[ ] /* FunctionDefinition */ ... ENDF[ ] /* EndFunctionDefinition */ PUSHB[ ] /* 1 value pushed */ 1 FDEF[ ] /* FunctionDefinition */ ... ENDF[ ] /* EndFunctionDefinition */ </assembly> </fpgm>
みたいな感じでfunction identifier numberがPUSHBされてFDEFが記載されているようだ。上記の例ではfunction identifier number=1の関数が呼ばれる。
cvtテーブルについてはMicrosoftの文書は分かり難かったのでAppleのを引っ張ってくるとControl Value Tableであるが、an array of FWords
であろう。
cvtテーブルを使いながらのインストラクションの付与はA sample control value programが分かりやすそうに見える。
fpgmはもっぱらグローバルスコープの関数定義のテーブルということのようで
A sample font programが分かりやすそう。