public void ReadTableHeaders() { var writer = new BigEndianBinaryWriter(); writer.WriteTrueTypeFileHeader(2, 0, 0, 0); writer.WriteTableHeader("name", 0, 10, 0); writer.WriteTableHeader("cmap", 0, 1, 0); var reader = new FontReader(writer.GetStream()); Assert.Equal(2, reader.Headers.Count); }
public void LoadFontDescription_CultureNamePriority_Exactmatch() { var usCulture = new CultureInfo(0x0409); var c1 = new CultureInfo(1034); // spanish - international var c2 = new CultureInfo(3082); // spanish - traditional var writer = new BigEndianBinaryWriter(); writer.WriteTrueTypeFileHeader(1, 0, 0, 0); writer.WriteTableHeader("name", 0, 28, 999); writer.WriteNameTable( (WellKnownIds.NameIds.FullFontName, "name_c1", c1), (WellKnownIds.NameIds.FontSubfamilyName, "sub_c1", c1), (WellKnownIds.NameIds.FontFamilyName, "fam_c1", c1), (WellKnownIds.NameIds.FullFontName, "name_c2", c2), (WellKnownIds.NameIds.FontSubfamilyName, "sub_c2", c2), (WellKnownIds.NameIds.FontFamilyName, "fam_c2", c2), (WellKnownIds.NameIds.FullFontName, "name_us", usCulture), (WellKnownIds.NameIds.FontSubfamilyName, "sub_us", usCulture), (WellKnownIds.NameIds.FontFamilyName, "fam_us", usCulture)); var description = FontDescription.LoadDescription(writer.GetStream()); // unknown culture shoudl prioritise US, but missing so will return first Assert.Equal("name_c2", description.FontName(c2)); Assert.Equal("sub_c2", description.FontSubFamilyName(c2)); Assert.Equal("fam_c2", description.FontFamily(c2)); }
public void LoadFontDescription_GetNameById() { var c1 = new CultureInfo(1034); // spanish - international var c2 = new CultureInfo(3082); // spanish - traditional var writer = new BigEndianBinaryWriter(); writer.WriteTrueTypeFileHeader(1, 0, 0, 0); writer.WriteTableHeader("name", 0, 28, 999); writer.WriteNameTable( (KnownNameIds.FullFontName, "name_c1", c1), (KnownNameIds.FontSubfamilyName, "sub_c1", c1), (KnownNameIds.FontFamilyName, "fam_c1", c1), (KnownNameIds.FullFontName, "name_c2", c2), (KnownNameIds.FontSubfamilyName, "sub_c2", c2), (KnownNameIds.FontFamilyName, "fam_c2", c2)); var description = FontDescription.LoadDescription(writer.GetStream()); Assert.Equal("name_c1", description.GetNameById(c1, KnownNameIds.FullFontName)); Assert.Equal("sub_c1", description.GetNameById(c1, KnownNameIds.FontSubfamilyName)); Assert.Equal("fam_c1", description.GetNameById(c1, KnownNameIds.FontFamilyName)); Assert.Equal("name_c2", description.GetNameById(c2, KnownNameIds.FullFontName)); Assert.Equal("sub_c2", description.GetNameById(c2, KnownNameIds.FontSubfamilyName)); Assert.Equal("fam_c2", description.GetNameById(c2, KnownNameIds.FontFamilyName)); }
public void LoadFontDescription() { var writer = new BigEndianBinaryWriter(); writer.WriteTrueTypeFileHeader(1, 0, 0, 0); writer.WriteTableHeader("name", 0, 28, 999); writer.WriteNameTable( new Dictionary <WellKnownIds.NameIds, string> { { WellKnownIds.NameIds.FullFontName, "name" }, { WellKnownIds.NameIds.FontSubfamilyName, "sub" }, { WellKnownIds.NameIds.FontFamilyName, "fam" } }); var description = FontDescription.LoadDescription(writer.GetStream()); Assert.Equal("name", description.FontNameInvariantCulture); Assert.Equal("sub", description.FontSubFamilyNameInvariantCulture); Assert.Equal("fam", description.FontFamilyInvariantCulture); }
private static void WriteFileHeader(this BigEndianBinaryWriter writer, uint version, params TableHeader[] headers) { // file header // Type Name | name | Description // ----------|---------------|------------------------------ // uint32 | sfntVersion | 0x00010000 or 0x4F54544F('OTTO') — see below. // uint16 | numTables | Number of tables. // uint16 | searchRange | (Maximum power of 2 <= numTables) x 16. // uint16 | entrySelector | Log2(maximum power of 2 <= numTables). // uint16 | rangeShift | NumTables x 16 - searchRange. writer.WriteUInt32(version); writer.WriteUInt16((ushort)headers.Length); writer.WriteUInt16(0); writer.WriteUInt16(0); writer.WriteUInt16(0); int offset = 12; offset += headers.Length * 16; foreach (TableHeader h in headers) { writer.WriteTableHeader(h.Tag, h.CheckSum, (uint)offset, h.Length); offset += (int)h.Length; } }