のねのBlog

パソコンの問題や、ソフトウェアの開発で起きた問題など書いていきます。よろしくお願いします^^。

packed delta その6

カウントは1バイトまたは2バイトで格納されます。
第1のバイトを読み取った後、第2のバイトの必要性を判定することができる。
カウントバイトは次のように処理されます。

最初のバイトが0の場合、2番目のカウントバイトは使用されません。<====これか
この値には特別な意味があります。
タプルバリエーションデータは、
すべてのグリフポイント(「ファントム」ポイントを含む)
またはすべてのCVTのデルタを提供します。<==意味は、よくわからない。

最初のバイトがゼロでなく、上位ビットがクリア(値は1〜127)であれば、
2番目のカウントバイトは使用されません。
ポイント数は最初のバイトの値に等しい。

第1バイトの上位ビットがセットされている場合、
第2バイトが使用される。
カウントは、上位バイトがマスクされたビッグエンディアンのuint16値として
2バイトを解釈することから読み取られます。


したがって、カウントが7ビットに収まる場合、それは1バイトに格納され、値0は特別な解釈を有する。カウントが7ビットに収まらない場合、カウントは最初の2バイトに格納され、最初のバイトの上位ビットはカウントの一部ではないフラグとして設定されます。カウントには15ビットが使用されます。

OpenType Font Variations Common Table Formats - Typography | Microsoft Docs