Example #1
0
        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);
        }
Example #2
0
        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);
        }
Example #3
0
        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();
        }