Esempio n. 1
0
        public static EncodingRecord Read(BinaryReader reader)
        {
            var instance = new EncodingRecord
            {
                PlatformID = reader.ReadUInt16BigEndian(),
                EncodingID = reader.ReadUInt16BigEndian(),
                Offset     = reader.ReadUInt32BigEndian()
            };

            return(instance);
        }
Esempio n. 2
0
        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);
        }