これは古い質問ですが、上記の回答が間違った結果をもたらす可能性があるため、このトピックにさらに情報を追加する必要があると感じています.
グリフ内のポイントの数は、最後のendPtsOfContours
+ 1 に等しくなります。通常、これは flags の数に等しくなりますn
が、必ずしもそうとは限りません。フラグ (繰り返しフラグ)のビット 3 は、同じフラグが数回繰り返されることを示します。このフラグが設定されている場合、フラグの数はポイントの数よりも少なくなる可能性があります。
真実は、フラグを読み取る前に、読み取る必要があるバイト数を知ることができないということです。ポイント数に達するまでフラグを読み続ける必要があります。以下は、フラグの読み取りを実装する方法を示す小さな Javascript スニペットです。
var pointCount; // This has to the set to the last endPtsOfContours + 1
var flags = []; // our internal array of flags
while (flags.length < pointCount) {
var flag = fontReader.readByte(); // flag is a single byte
flags.push(flag); // add flag
if (flag & 8) { // if bit 3 is set
var repeats = fontReader.readByte(); // next byte indicates repeats of the flag
for (; repeats > 0; repeats--) {
flags.push(flag); // add same flag again
}
}
}
Repeatフラグが実際のフォントで使用されているかどうか、またはどのくらいの頻度で使用されているかはわかりません (おそらく、上記のコメントで言及されている Bradley Hand ITC Regular と Rage Italic の 2 つのフォントで使用されています)。フラグの数、そのビットを考慮に入れる必要があります。