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)); }
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); }