void ReadSubTableFormat0(BinaryReader reader, int remainingBytes) { ushort npairs = reader.ReadUInt16(); ushort searchRange = reader.ReadUInt16(); ushort entrySelector = reader.ReadUInt16(); ushort rangeShift = reader.ReadUInt16(); //---------------------------------------------- //check #if DEBUG if ((remainingBytes % 6) != 0) { throw new System.Exception(); } int calNpairs = remainingBytes / 6; #endif var ksubTable = new KerningSubTable(npairs); this.kernSubTables.Add(ksubTable); while (remainingBytes > 0) { ushort left = reader.ReadUInt16(); ushort right = reader.ReadUInt16(); short value = reader.ReadInt16(); ksubTable.AddKernPair( reader.ReadUInt16(), //left reader.ReadUInt16(), //right reader.ReadInt16()); //value remainingBytes -= 6; } }
public static KerningTable Load(TrueTypeDataBytes data, TrueTypeHeaderTable headerTable) { data.Seek(headerTable.Offset); var version = data.ReadUnsignedShort(); var numberOfSubtables = data.ReadUnsignedShort(); var subTables = new KerningSubTable[numberOfSubtables]; for (var i = 0; i < numberOfSubtables; i++) { var currentOffset = data.Position; var subtableVersion = data.ReadUnsignedShort(); var subtableLength = data.ReadUnsignedShort(); var coverage = data.ReadUnsignedShort(); var kernCoverage = (KernCoverage)coverage; var format = ((coverage & 255) >> 8); switch (format) { case 0: subTables[i] = ReadFormat0Table(subtableVersion, data, kernCoverage); break; case 2: subTables[i] = ReadFormat2Table(subtableVersion, data, kernCoverage, currentOffset); break; } } return(new KerningTable(subTables)); }
void ReadSubTableFormat0(BinaryReader reader, int remainingBytes) { ushort npairs = reader.ReadUInt16(); ushort searchRange = reader.ReadUInt16(); ushort entrySelector = reader.ReadUInt16(); ushort rangeShift = reader.ReadUInt16(); //---------------------------------------------- //check #if DEBUG if ((remainingBytes % 6) != 0) { throw new System.Exception(); } int calNpairs = remainingBytes / 6; #endif var ksubTable = new KerningSubTable(npairs); this.kernSubTables.Add(ksubTable); while (remainingBytes > 0) { ushort left = reader.ReadUInt16(); ushort right = reader.ReadUInt16(); short value = reader.ReadInt16(); ksubTable.AddKernPair( reader.ReadUInt16(), //left reader.ReadUInt16(),//right reader.ReadInt16());//value remainingBytes -= 6; } }
private TrueTypeFontTable ReadKerningTable(uint length, TrueTypeTableEntryList list, BigEndianReader reader) { KerningTable kern = new KerningTable(reader.Position); kern.TableVersion = reader.ReadUShortVersion(); ushort tcount = reader.ReadUInt16(); kern.TableCount = tcount; if (tcount > 0) { kern.SubTables = new List <KerningSubTable>(); for (int i = 0; i < tcount; i++) { KerningSubTable sub = new KerningSubTable(); sub.Version = reader.ReadUShortVersion(); sub.Length = reader.ReadUInt16(); sub.Coverage = (KerningCoverage)reader.ReadByte(); sub.Format = (KerningFormat)reader.ReadByte(); if (sub.Format == KerningFormat.Format0) { KerningFormat0 fdata = new KerningFormat0(); fdata.PairCount = reader.ReadUInt16(); fdata.SearchRange = reader.ReadUInt16(); fdata.EntrySelector = reader.ReadUInt16(); fdata.RangeShift = reader.ReadUInt16(); List <Kerning0Pair> pairs = new List <Kerning0Pair>(); for (int j = 0; j < fdata.PairCount; j++) { Kerning0Pair pair = new Kerning0Pair(); pair.LeftGlyphIndex = reader.ReadUInt16(); pair.RightGlyphIndex = reader.ReadUInt16(); pair.Value = reader.ReadInt16(); pairs.Add(pair); } fdata.KerningPairs = pairs; sub.KerningFormatData = fdata; } kern.SubTables.Add(sub); } } return(kern); }
void ReadSubTableFormat0(BinaryReader reader, int remainingBytes) { ushort npairs = reader.ReadUInt16(); ushort searchRange = reader.ReadUInt16(); ushort entrySelector = reader.ReadUInt16(); ushort rangeShift = reader.ReadUInt16(); //---------------------------------------------- var ksubTable = new KerningSubTable(npairs); this.kernSubTables.Add(ksubTable); while (npairs > 0) { ksubTable.AddKernPair( reader.ReadUInt16(), //left// reader.ReadUInt16(), //right reader.ReadInt16()); //value npairs--; } }
public static KerningTable Load(BinaryReader reader) { // Type | Field | Description // -------|----------|----------------------------------------- // uint16 | version | Table version number(0) // uint16 | nTables | Number of subtables in the kerning table. ushort version = reader.ReadUInt16(); ushort subtableCount = reader.ReadUInt16(); var tables = new List <KerningSubTable>(subtableCount); for (int i = 0; i < subtableCount; i++) { var t = KerningSubTable.Load(reader); // returns null for unknown/supported table format if (t != null) { tables.Add(t); } } return(new KerningTable(tables.ToArray())); }