らんだむな記憶

blogというものを体験してみようか!的なー

TrueTypeインストラクション(1)

Outline Glyph Viewデバッグビューで追える。
ttxTrueTypeフォント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が分かりやすそう。