protected void CheckGlyphComposite(int glyph)
{
var start = LocaTable[glyph];
if (start == LocaTable[glyph + 1]) // no contour
{
return;
}
Rf.Seek(TableGlyphOffset + start);
int numContours = Rf.ReadShort();
if (numContours >= 0)
{
return;
}
Rf.SkipBytes(8);
for (; ;)
{
var flags = Rf.ReadUnsignedShort();
var cGlyph = Rf.ReadUnsignedShort();
if (!GlyphsUsed.ContainsKey(cGlyph))
{
GlyphsUsed[cGlyph] = null;
GlyphsInList.Add(cGlyph);
}
if ((flags & MoreComponents) == 0)
{
return;
}
int skip;
if ((flags & Arg1And2AreWords) != 0)
{
skip = 4;
}
else
{
skip = 2;
}
if ((flags & WeHaveAScale) != 0)
{
skip += 2;
}
else if ((flags & WeHaveAnXAndYScale) != 0)
{
skip += 4;
}
if ((flags & WeHaveATwoByTwo) != 0)
{
skip += 8;
}
Rf.SkipBytes(skip);
}
}