Beispiel #1
0
        private static async Task <string> ExtractStringFromNameRecordAsync(FontReader reader,
                                                                            uint offset, ushort stringOffset, ushort length, ushort platformID,
                                                                            ushort encodingID)
        {
            await reader.SeekAsync(offset + stringOffset);

            var data = await reader.ReadBytesAsync(length);

            if (platformID == PlatformID.Windows)
            {
                return(Encoding.BigEndianUnicode.GetString(data));
            }
            if (platformID == PlatformID.Unicode)
            {
                return(Encoding.BigEndianUnicode.GetString(data));
            }
            if (platformID == PlatformID.Macintosh)
            {
                return(Encoding.ASCII.GetString(data));
            }
            return(Encoding.UTF8.GetString(data));
        }
Beispiel #2
0
        public static async Task <List <string> > GetFontFamilyAsync(FontReader reader)
        {
            var sfntVersion = await reader.ReadUInt32BEAsync();

            FontCheck.ValidateSfntVersion(sfntVersion);
            var tableCount = await reader.ReadUInt16BEAsync();

            await reader.SkipAsync(6);

            var offsetItems = new List <uint>();

            for (var i = 0; i < tableCount; i++)
            {
                var tagByte = await reader.ReadBytesAsync(4);

                var checksum = await reader.ReadUInt32BEAsync();

                var offset = await reader.ReadUInt32BEAsync();

                var length = await reader.ReadUInt32BEAsync();

                var tag = FontCheck.ConvertToTagName(tagByte);
                if (tag != Tables.NAME)
                {
                    continue;
                }
                offsetItems.Add(offset);
            }
            var items = new List <string>();

            foreach (var item in offsetItems)
            {
                items.AddRange(await GetTableNameAsync(reader, item));
            }

            return(items);
        }