public static EncodingRecord Read(BinaryReader reader) { var instance = new EncodingRecord { PlatformID = reader.ReadUInt16BigEndian(), EncodingID = reader.ReadUInt16BigEndian(), Offset = reader.ReadUInt32BigEndian() }; return(instance); }
public static CharacterMapTable Read(BinaryReader reader) { var tableOffset = reader.BaseStream.Position; var instance = new CharacterMapTable { Version = reader.ReadUInt16BigEndian(), NumTables = reader.ReadUInt16BigEndian(), EncodingRecords = new List <EncodingRecord>() }; for (int i = 0; i < instance.NumTables; i++) { instance.EncodingRecords.Add(EncodingRecord.Read(reader)); } instance.EncodingFormats = new Dictionary <EncodingRecord, int>(); instance.Encodings = new Dictionary <EncodingRecord, FormatSubTableBase>(); for (int i = 0; i < instance.EncodingRecords.Count; i++) { var encodingRecord = instance.EncodingRecords[i]; reader.BaseStream.Seek(tableOffset + encodingRecord.Offset, SeekOrigin.Begin); var format = reader.ReadUInt16BigEndian(); instance.EncodingFormats[encodingRecord] = format; if (format == 4) { instance.Encodings[encodingRecord] = Format4SubTable.Read(format, reader); } else { //throw new FontReaderException($"Unsupported cmap Format Table format {format}"); } } return(instance); }