public NameTable Parse(TrueTypeHeaderTable header, TrueTypeDataBytes data, TableRegister.Builder register) { data.Seek(header.Offset); // ReSharper disable once UnusedVariable var format = data.ReadUnsignedShort(); var count = data.ReadUnsignedShort(); var stringOffset = data.ReadUnsignedShort(); var names = new NameRecordBuilder[count]; for (var i = 0; i < count; i++) { names[i] = NameRecordBuilder.Read(data); } var strings = new TrueTypeNameRecord[count]; var offset = header.Offset + stringOffset; for (var i = 0; i < count; i++) { strings[i] = GetTrueTypeNameRecord(names[i], data, offset); } return(new NameTable(header, GetName(4, strings), GetName(1, strings), GetName(2, strings), strings)); }
public NameTable Parse(TrueTypeHeaderTable header, TrueTypeDataBytes data, TableRegister.Builder register) { data.Seek(header.Offset); // ReSharper disable once UnusedVariable var format = data.ReadUnsignedShort(); var count = data.ReadUnsignedShort(); var stringOffset = data.ReadUnsignedShort(); var names = new NameRecordBuilder[count]; for (var i = 0; i < count; i++) { names[i] = NameRecordBuilder.Read(data); } var strings = new TrueTypeNameRecord[count]; for (var i = 0; i < count; i++) { var nameRecord = names[i]; var encoding = OtherEncodings.Iso88591; switch (nameRecord.PlatformId) { case TrueTypePlatformIdentifier.Windows: { var platformEncoding = (TrueTypeWindowsEncodingIdentifier)nameRecord.PlatformEncodingId; if (platformEncoding == TrueTypeWindowsEncodingIdentifier.Symbol || platformEncoding == TrueTypeWindowsEncodingIdentifier.UnicodeBmp) { encoding = Encoding.BigEndianUnicode; } break; } case TrueTypePlatformIdentifier.Unicode: { encoding = Encoding.BigEndianUnicode; break; } case TrueTypePlatformIdentifier.Iso: { switch (nameRecord.PlatformEncodingId) { case 0: encoding = Encoding.GetEncoding("US-ASCII"); break; case 1: encoding = Encoding.GetEncoding("ISO-10646-UCS-2"); break; } break; } } var position = header.Offset + stringOffset + nameRecord.Offset; data.Seek(position); var str = data.ReadString(nameRecord.Length, encoding); strings[i] = nameRecord.ToNameRecord(str); } return(new NameTable(header, GetName(4, strings), GetName(1, strings), GetName(2, strings), strings)); }