private static uint[] LoadIndexToLocation(FontSource p, uint tableOffset, ushort glyphCount, short indexToLocFormat) { p.Offset = tableOffset; var isLong = indexToLocFormat == 1; var n = glyphCount + 1; var localOffsets = new uint[n]; if (isLong) { for (var i = 0; i < n; i++) { localOffsets[i] = p.ReadUInt(); } } else { for (var i = 0; i < n; i++) { localOffsets[i] = (uint)p.ReadUShort() * 2; } } return(localOffsets); }
private static Dictionary <uint, uint> LoadSegmentedCoverage(FontSource p) { var dic = new Dictionary <uint, uint>(); // Skip format p.ReadUShort(); // Skip reserved p.ReadUShort(); var length = p.ReadUInt(); var language = p.ReadUInt(); var numGroups = p.ReadUInt(); for (var i = 0; i < numGroups; i++) { var startCharCode = p.ReadUInt(); var endCharCode = p.ReadUInt(); var startGlyphId = p.ReadUInt(); for (var c = startCharCode; c <= endCharCode; c++) { dic[c] = startGlyphId; startGlyphId++; } } return(dic); }
private static void LoadFontHeader(FontSource p, uint tableOffset, out short indexToLocFormat, out ushort unitsPerEm) { p.Offset = tableOffset; p.ReadUShort(); p.ReadUShort(); p.ReadFixed(); p.ReadUInt(); p.ReadUInt(); p.ReadUShort(); unitsPerEm = p.ReadUShort(); p.Offset += 8 * 2; p.ReadShort(); p.ReadShort(); p.ReadShort(); p.ReadShort(); p.ReadUShort(); p.ReadUShort(); p.ReadShort(); indexToLocFormat = p.ReadShort(); p.ReadShort(); }