public static CoverageTable CreateFrom(BinaryReader reader, long beginAt) { reader.BaseStream.Seek(beginAt, SeekOrigin.Begin); //--------------------------------------------------- var coverageTable = new CoverageTable(); //1. format switch (coverageTable._format = reader.ReadUInt16()) { default: throw new NotSupportedException(); case 1: { //CoverageFormat1 table: Individual glyph indices ushort glyphCount = reader.ReadUInt16(); //GlyphID GlyphArray[GlyphCount] Array of GlyphIDs-in numerical order *** ushort[] orderedGlyphIdList = new ushort[glyphCount]; for (int i = 0; i < glyphCount; ++i) { orderedGlyphIdList[i] = reader.ReadUInt16(); } coverageTable.orderedGlyphIdList = orderedGlyphIdList; } break; case 2: { //CoverageFormat2 table: Range of glyphs ushort rangeCount = reader.ReadUInt16(); RangeRecord[] ranges = new RangeRecord[rangeCount]; for (int i = 0; i < rangeCount; ++i) { ranges[i] = new RangeRecord( reader.ReadUInt16(), reader.ReadUInt16(), reader.ReadUInt16()); } coverageTable.ranges = ranges; } break; } return coverageTable; }
public static CoverageTable[] CreateMultipleCoverageTables(long initPos, short[] offsets, BinaryReader reader) { int j = offsets.Length; CoverageTable[] results = new CoverageTable[j]; for (int i = 0; i < j; ++i) { results[i] = CoverageTable.CreateFrom(reader, initPos + offsets[i]); } return results; }