iTextSharp.text.pdf.TrueTypeFont.ReadFormat4 C# (CSharp) Метод

ReadFormat4() приватный Метод

private ReadFormat4 ( ) : int[]>.Dictionary
Результат int[]>.Dictionary
        internal Dictionary<int, int[]> ReadFormat4()
        {
            Dictionary<int,int[]> h = new Dictionary<int,int[]>();
            int table_lenght = rf.ReadUnsignedShort();
            rf.SkipBytes(2);
            int segCount = rf.ReadUnsignedShort() / 2;
            rf.SkipBytes(6);
            int[] endCount = new int[segCount];
            for (int k = 0; k < segCount; ++k) {
                endCount[k] = rf.ReadUnsignedShort();
            }
            rf.SkipBytes(2);
            int[] startCount = new int[segCount];
            for (int k = 0; k < segCount; ++k) {
                startCount[k] = rf.ReadUnsignedShort();
            }
            int[] idDelta = new int[segCount];
            for (int k = 0; k < segCount; ++k) {
                idDelta[k] = rf.ReadUnsignedShort();
            }
            int[] idRO = new int[segCount];
            for (int k = 0; k < segCount; ++k) {
                idRO[k] = rf.ReadUnsignedShort();
            }
            int[] glyphId = new int[table_lenght / 2 - 8 - segCount * 4];
            for (int k = 0; k < glyphId.Length; ++k) {
                glyphId[k] = rf.ReadUnsignedShort();
            }
            for (int k = 0; k < segCount; ++k) {
                int glyph;
                for (int j = startCount[k]; j <= endCount[k] && j != 0xFFFF; ++j) {
                    if (idRO[k] == 0) {
                        glyph = (j + idDelta[k]) & 0xFFFF;
                    }
                    else {
                        int idx = k + idRO[k] / 2 - segCount + j - startCount[k];
                        if (idx >= glyphId.Length)
                            continue;
                        glyph = (glyphId[idx] + idDelta[k]) & 0xFFFF;
                    }
                    int[] r = new int[2];
                    r[0] = glyph;
                    r[1] = GetGlyphWidth(r[0]);
                    h[fontSpecific ? ((j & 0xff00) == 0xf000 ? j & 0xff : j) : j] = r;
                }
            }
            return h;
        }