public CollectionHeader ReadCollectionHeader()
        {
            var header = new CollectionHeader
            {
                TTCTag       = ReadTag(),
                MajorVersion = ReadUInt16(),
                MinorVersion = ReadUInt16(),
                NumFonts     = ReadUInt32(),
            };

            header.OffsetTable = new uint[header.NumFonts];
            for (uint i = 0; i < header.NumFonts; i++)
            {
                header.OffsetTable[i] = ReadOffset32();
            }

            if (header.MajorVersion == 2)
            {
                header.DSIGTag    = ReadUInt32();
                header.DSIGLength = ReadUInt32();
                header.DSIGOffset = ReadUInt32();
            }

            return(header);
        }
        public OpenTypeFont[] ReadFonts(CollectionHeader header, bool lazyLoad = true)
        {
            var fonts = new OpenTypeFont[header.NumFonts];

            for (uint i = 0; i < header.NumFonts; i++)
            {
                BaseStream.Position = header.OffsetTable[i];
                fonts[i]            = new OpenTypeFont(this, lazyLoad);
            }
            return(fonts);
        }
        public OffsetTable[] ReadOffsetTables(CollectionHeader header)
        {
            var tables = new OffsetTable[header.NumFonts];

            for (uint i = 0; i < header.NumFonts; i++)
            {
                BaseStream.Position = header.OffsetTable[i];
                tables[i]           = ReadOffsetTable();
            }
            return(tables);
        }
 public OpenTypeCollection(CollectionHeader header, OpenTypeCollectionReader reader, bool lazyLoad = true)
 {
     this.header = header;
     lazy        = lazyLoad;
     if (lazyLoad)
     {
         Reader = reader;
     }
     else
     {
         LoadAll(reader);
     }
 }