public CFFFontSubset(RandomAccessFileOrArray rf,Dictionary<int,int[]> GlyphsUsed)
: base(rf)
{
// Use CFFFont c'tor in order to parse the font file.
this.GlyphsUsed = GlyphsUsed;
//Put the glyphs into a list
glyphsInList = new List<int>(GlyphsUsed.Keys);
for (int i=0;i<fonts.Length;++i)
{
// Read the number of glyphs in the font
Seek(fonts[i].charstringsOffset);
fonts[i].nglyphs = GetCard16();
// Jump to the count field of the String Index
Seek(stringIndexOffset);
fonts[i].nstrings = GetCard16()+standardStrings.Length;
// For each font save the offset array of the charstring
fonts[i].charstringsOffsets = GetIndex(fonts[i].charstringsOffset);
// Proces the FDSelect if exist
if (fonts[i].fdselectOffset>=0)
{
// Proces the FDSelect
ReadFDSelect(i);
// Build the FDArrayUsed hashmap
BuildFDArrayUsed(i);
}
if (fonts[i].isCID)
// Build the FD Array used Hash Map
ReadFDArray(i);
// compute the charset length
fonts[i].CharsetLength = CountCharset(fonts[i].charsetOffset,fonts[i].nglyphs);
}
}