public static CmapTable Read(BinaryReaderFont reader) { long start = reader.Position; CmapTable value = new CmapTable { version = reader.ReadUInt16(), numTables = reader.ReadUInt16() }; ushort numTables = value.numTables; //value.encodingRecords = EncodingRecord.ReadArray(reader, numTables); value.encodingRecords = new EncodingRecord[numTables]; value.subtables = new CmapSubtable[numTables]; long position = reader.Position; for (int i = 0; i < numTables; i++) { reader.Position = position; EncodingRecord record = EncodingRecord.Read(reader); value.encodingRecords[i] = record; position = reader.Position; reader.Position = start + record.offset; //reader.Position = start + value.encodingRecords[i].offset; value.subtables[i] = CmapSubtable.Read(reader); } //Console.WriteLine("position: {0:X}", (reader.Position - start)); return(value); }
public static EncodingRecord[] ReadArray(BinaryReaderFont reader, int count) { EncodingRecord[] array = new EncodingRecord[count]; for (int i = 0; i < count; i++) { array[i] = Read(reader); } return(array); }
public static EncodingRecord Read(BinaryReaderFont reader) { EncodingRecord record = new EncodingRecord { platformID = (PlatformID)reader.ReadUInt16(), encodingID = reader.ReadUInt16(), offset = reader.ReadUInt32() }; return(record); }
protected int FindIndex(PlatformID platformID, ushort encodingID) { for (int i = 0; i < numTables; i++) { EncodingRecord record = encodingRecords[i]; if (record.platformID == platformID && record.encodingID == encodingID) { return(i); } } return(-1); }