Ejemplo n.º 1
0
        /// <summary> set cursor position
        /// This method can only set the cursor position
        /// of an VTDNav object identical to its internal copy
        /// </summary>
        /// <param name="vn">
        /// </param>
        /// <returns>
        ///
        /// </returns>
        public bool setCursorPosition(VTDNav vn)
        {
            if (vn1 != vn || ba == null || ba[0] == -2)
            {
                return(false);
            }
            for (int i = 0; i < vn.nestingLevel; i++)
            {
                vn.context[i] = ba[i];
            }
            if (vn.shallowDepth)
            {
                vn.l1index = ba[vn.nestingLevel];
                vn.l2index = ba[vn.nestingLevel + 1];
                vn.l3index = ba[vn.nestingLevel + 2];
                vn.l2lower = ba[vn.nestingLevel + 3];
                vn.l2upper = ba[vn.nestingLevel + 4];
                vn.l3lower = ba[vn.nestingLevel + 5];
                vn.l3upper = ba[vn.nestingLevel + 6];
                if (ba[vn.nestingLevel + 7] < 0)
                {
                    vn.atTerminal = true;
                }
                else
                {
                    vn.atTerminal = false;
                }

                vn.LN = ba[vn.nestingLevel + 7] & 0x7fffffff;
            }
            else
            {
                VTDNav_L5 vnl = (VTDNav_L5)vn;
                vnl.l1index = ba[vn.nestingLevel];
                vnl.l2index = ba[vn.nestingLevel + 1];
                vnl.l3index = ba[vn.nestingLevel + 2];
                vnl.l4index = ba[vn.nestingLevel + 3];
                vnl.l5index = ba[vn.nestingLevel + 4];
                vnl.l2lower = ba[vn.nestingLevel + 5];
                vnl.l2upper = ba[vn.nestingLevel + 6];
                vnl.l3lower = ba[vn.nestingLevel + 7];
                vnl.l3upper = ba[vn.nestingLevel + 8];
                vnl.l4lower = ba[vn.nestingLevel + 9];
                vnl.l4upper = ba[vn.nestingLevel + 10];
                vnl.l5lower = ba[vn.nestingLevel + 11];
                vnl.l5upper = ba[vn.nestingLevel + 12];
                if (ba[vn.nestingLevel + 13] < 0)
                {
                    vn.atTerminal = true;
                }
                else
                {
                    vn.atTerminal = false;
                }

                vn.LN = ba[vn.nestingLevel + 13] & 0x7fffffff;
            }
            return(true);
        }
Ejemplo n.º 2
0
 /// <summary> Record the cursor position
 /// This method is implemented to be lenient on loading in
 /// that it can load nodes from any VTDNav object
 /// if vn is null, return false
 ///
 /// </summary>
 /// <param name="vn">
 /// </param>
 /// <returns>
 ///
 /// </returns>
 public bool recordCursorPosition(VTDNav vn)
 {
     if (vn == null)
     {
         return(false);
     }
     if (vn == vn1)
     {
     }
     else
     {
         bind(vn);
     }
     for (int i = 0; i < vn.nestingLevel; i++)
     {
         ba[i] = vn1.context[i];
     }
     if (vn.shallowDepth)
     {
         ba[vn.nestingLevel]     = vn.l1index;
         ba[vn.nestingLevel + 1] = vn.l2index;
         ba[vn.nestingLevel + 2] = vn.l3index;
         ba[vn.nestingLevel + 3] = vn.l2lower;
         ba[vn.nestingLevel + 4] = vn.l2upper;
         ba[vn.nestingLevel + 5] = vn.l3lower;
         ba[vn.nestingLevel + 6] = vn.l3upper;
         //ba[vn.nestingLevel + 7]=(vn.atTerminal == true)?1:0;
         ba[vn.nestingLevel + 7] = (vn.atTerminal == true) ? (vn.LN | unchecked ((int)0x80000000)) : vn.LN;
     }
     else
     {
         VTDNav_L5 vnl = (VTDNav_L5)vn;
         ba[vn.nestingLevel]      = vnl.l1index;
         ba[vn.nestingLevel + 1]  = vnl.l2index;
         ba[vn.nestingLevel + 2]  = vnl.l3index;
         ba[vn.nestingLevel + 3]  = vnl.l4index;
         ba[vn.nestingLevel + 4]  = vnl.l5index;
         ba[vn.nestingLevel + 5]  = vnl.l2lower;
         ba[vn.nestingLevel + 6]  = vnl.l2upper;
         ba[vn.nestingLevel + 7]  = vnl.l3lower;
         ba[vn.nestingLevel + 8]  = vnl.l3upper;
         ba[vn.nestingLevel + 9]  = vnl.l4lower;
         ba[vn.nestingLevel + 10] = vnl.l4upper;
         ba[vn.nestingLevel + 11] = vnl.l5lower;
         ba[vn.nestingLevel + 12] = vnl.l5upper;
         //ba[vn.nestingLevel + 7]=(vn.atTerminal == true)?1:0;
         ba[vn.nestingLevel + 13] =
             (vn.atTerminal == true) ?
             (vn.LN | unchecked ((int)0x80000000)) : vn.LN;
     }
     return(true);
 }
Ejemplo n.º 3
0
        /// <summary>
        /// This function records the position of VN into an internal buffer
        /// </summary>

        public void record()
        {
            //add the context and
            int i;

            switch (vn.context[0])
            {
            case -1:
                unchecked
                {
                    fib.append((int)(0xff | 0x80000000));
                }
                size++;
                position++;
                count++;
                break;

            case 0:
                if (vn.atTerminal == false)
                {
                    fib.append(0);
                    count++;
                }
                else
                {
                    unchecked { fib.append((int)0x80000000); }
                    count += 2;
                }
                size++;
                position++;
                if (vn.atTerminal == true)
                {
                    fib.append(vn.LN);
                }
                break;

            case 1:
                if (vn.atTerminal == false)
                {
                    fib.append(1);
                    fib.append(vn.context[1]);
                    fib.append(vn.l1index);
                    size++;
                    position++;
                    count += 3;
                }
                else
                {
                    unchecked { fib.append((int)0x80000001); }
                    fib.append(vn.context[1]);
                    fib.append(vn.l1index);
                    fib.append(vn.LN);
                    size++;
                    position++;
                    count += 4;
                }
                break;

            case 2:
                if (vn.atTerminal == false)
                {
                    fib.append(2);
                    count += 7;
                }
                else
                {
                    unchecked { fib.append((int)0x80000002); }
                    count += 8;
                }
                fib.append(vn.context[1]);
                fib.append(vn.context[2]);
                fib.append(vn.l1index);
                fib.append(vn.l2lower);
                fib.append(vn.l2upper);
                fib.append(vn.l2index);
                size++;
                position++;

                if (vn.atTerminal == true)
                {
                    fib.append(vn.LN);
                }

                break;

            case 3:
                if (vn.atTerminal == false)
                {
                    fib.append(3);
                    count += 11;
                }
                else
                {
                    unchecked { fib.append((int)0x80000003); }
                    count += 12;
                }
                fib.append(vn.context[1]);
                fib.append(vn.context[2]);
                fib.append(vn.context[3]);
                fib.append(vn.l1index);
                fib.append(vn.l2lower);
                fib.append(vn.l2upper);
                fib.append(vn.l2index);
                fib.append(vn.l3lower);
                fib.append(vn.l3upper);
                fib.append(vn.l3index);
                size++;
                position++;

                if (vn.atTerminal == true)
                {
                    fib.append(vn.LN);
                }

                break;

            default:
                if (vn.shallowDepth)
                {
                    if (vn.atTerminal == false)
                    {
                        i = vn.context[0];
                        fib.append(i);
                        count += i + 8;
                    }
                    else
                    {
                        i = vn.context[0];
                        unchecked
                        {
                            fib.append((int)(i | 0x80000000));
                        }
                        count += i + 9;
                    }
                    for (int k = 1; k <= i; k++)
                    {
                        fib.append(vn.context[k]);
                    }
                    fib.append(vn.l1index);
                    fib.append(vn.l2lower);
                    fib.append(vn.l2upper);
                    fib.append(vn.l2index);
                    fib.append(vn.l3lower);
                    fib.append(vn.l3upper);
                    fib.append(vn.l3index);
                    size++;
                    position++;

                    if (vn.atTerminal)
                    {
                        fib.append(vn.LN);
                    }
                }
                else
                {
                    VTDNav_L5 vnl = (VTDNav_L5)vn;
                    switch (vn.context[0])
                    {
                    case 4:

                        if (vn.atTerminal == false)
                        {
                            fib.append(4);
                            count += 15;
                        }
                        else
                        {
                            unchecked
                            {
                                fib.append((int)0x80000004);
                            }
                            count += 16;
                        }
                        fib.append(vn.context[1]);
                        fib.append(vn.context[2]);
                        fib.append(vn.context[3]);
                        fib.append(vn.context[4]);
                        fib.append(vn.l1index);
                        fib.append(vn.l2lower);
                        fib.append(vn.l2upper);
                        fib.append(vn.l2index);
                        fib.append(vn.l3lower);
                        fib.append(vn.l3upper);
                        fib.append(vn.l3index);
                        fib.append(vnl.l4lower);
                        fib.append(vnl.l4upper);
                        fib.append(vnl.l4index);
                        size++;
                        position++;

                        if (vn.atTerminal == true)
                        {
                            fib.append(vn.LN);
                        }

                        break;

                    case 5:
                        if (vn.atTerminal == false)
                        {
                            fib.append(5);
                            count += 19;
                        }
                        else
                        {
                            unchecked
                            {
                                fib.append((int)0x80000005);
                            }
                            count += 20;
                        }
                        fib.append(vn.context[1]);
                        fib.append(vn.context[2]);
                        fib.append(vn.context[3]);
                        fib.append(vn.context[4]);
                        fib.append(vn.context[5]);
                        fib.append(vn.l1index);
                        fib.append(vn.l2lower);
                        fib.append(vn.l2upper);
                        fib.append(vn.l2index);
                        fib.append(vn.l3lower);
                        fib.append(vn.l3upper);
                        fib.append(vn.l3index);
                        fib.append(vnl.l4lower);
                        fib.append(vnl.l4upper);
                        fib.append(vnl.l4index);
                        fib.append(vnl.l5lower);
                        fib.append(vnl.l5upper);
                        fib.append(vnl.l5index);
                        size++;
                        position++;

                        if (vn.atTerminal == true)
                        {
                            fib.append(vn.LN);
                        }

                        break;

                    default:
                        if (vn.atTerminal == false)
                        {
                            i = vn.context[0];
                            fib.append(i);
                            count += i + 14;
                        }
                        else
                        {
                            i = vn.context[0];
                            fib.append((int)(i | 0x80000000));
                            count += i + 15;
                        }
                        for (int k = 1; k <= i; k++)
                        {
                            fib.append(vn.context[k]);
                        }
                        fib.append(vn.l1index);
                        fib.append(vn.l2lower);
                        fib.append(vn.l2upper);
                        fib.append(vn.l2index);
                        fib.append(vn.l3lower);
                        fib.append(vn.l3upper);
                        fib.append(vn.l3index);
                        fib.append(vnl.l4lower);
                        fib.append(vnl.l4upper);
                        fib.append(vnl.l4index);
                        fib.append(vnl.l5lower);
                        fib.append(vnl.l5upper);
                        fib.append(vnl.l5index);
                        size++;
                        position++;

                        if (vn.atTerminal)
                        {
                            fib.append(vn.LN);
                        }
                        break;
                    }
                }
                break;
            }
        }
Ejemplo n.º 4
0
        /// <summary>
        ///
        ///  This method set the cursor in VTDNav to the nodes as recorded
        ///  in NodeRecorder, and return the output of "getCurrentIndex()"
        ///  It is important to notice that you can only go forward, not
        ///  backward
        ///
        /// </summary>
        /// <returns> @return int</returns>
        public int iterate()
        {
            int j, i;

            if (count < fib.size_Renamed_Field)
            {
                i = fib.intAt(count);
                bool b = (i >= 0);
                if (b == false)
                {
                    i = i & 0x7fffffff;
                }
                switch (i)
                {
                case 0xff:
                    vn.context[0] = -1;
                    vn.atTerminal = false;
                    count++;
                    break;

                case 0:
                    vn.context[0] = 0;
                    if (b == false)
                    {
                        vn.atTerminal = true;
                        vn.LN         = fib.intAt(count + 1);
                        count        += 2;
                    }
                    else
                    {
                        vn.atTerminal = false;
                        count++;
                    }

                    break;

                case 1:
                    vn.context[0] = 1;
                    vn.context[1] = fib.intAt(count + 1);
                    vn.l1index    = fib.intAt(count + 2);
                    if (b == false)
                    {
                        vn.atTerminal = true;
                        vn.LN         = fib.intAt(count + 3);
                        count        += 4;
                    }
                    else
                    {
                        vn.atTerminal = false;
                        count        += 3;
                    }

                    break;

                case 2:
                    vn.context[0] = 2;
                    vn.context[1] = fib.intAt(count + 1);
                    vn.context[2] = fib.intAt(count + 2);
                    vn.l1index    = fib.intAt(count + 3);
                    vn.l2lower    = fib.intAt(count + 4);
                    vn.l2upper    = fib.intAt(count + 5);
                    vn.l2index    = fib.intAt(count + 6);
                    if (b == false)
                    {
                        vn.atTerminal = true;
                        vn.LN         = fib.intAt(count + 7);
                        count        += 8;
                    }
                    else
                    {
                        vn.atTerminal = false;
                        count        += 7;
                    }

                    break;

                case 3:
                    vn.context[0] = 3;
                    vn.context[1] = fib.intAt(count + 1);
                    vn.context[2] = fib.intAt(count + 2);
                    vn.context[3] = fib.intAt(count + 3);
                    vn.l1index    = fib.intAt(count + 4);
                    vn.l2lower    = fib.intAt(count + 5);
                    vn.l2upper    = fib.intAt(count + 6);
                    vn.l2index    = fib.intAt(count + 7);
                    vn.l3lower    = fib.intAt(count + 8);
                    vn.l3upper    = fib.intAt(count + 9);
                    vn.l3index    = fib.intAt(count + 10);
                    if (b == false)
                    {
                        vn.atTerminal = true;
                        vn.LN         = fib.intAt(count + 11);
                        count        += 12;
                    }
                    else
                    {
                        vn.atTerminal = false;
                        count        += 11;
                    }

                    break;

                default:
                    if (vn.shallowDepth)
                    {
                        // vn.context[0] = i;
                        for (j = 0; j < i; j++)
                        {
                            vn.context[j] = fib.intAt(count + j);
                        }
                        vn.l1index = fib.intAt(count + i);
                        vn.l2lower = fib.intAt(count + i + 1);
                        vn.l2upper = fib.intAt(count + i + 2);
                        vn.l2index = fib.intAt(count + i + 3);
                        vn.l3lower = fib.intAt(count + i + 4);
                        vn.l3upper = fib.intAt(count + i + 5);
                        vn.l3index = fib.intAt(count + i + 6);
                        if (b == false)
                        {
                            vn.atTerminal = true;
                            vn.LN         = fib.intAt(count + 11);
                            count        += i + 9;
                        }
                        else
                        {
                            vn.atTerminal = false;
                            count        += i + 8;
                        }
                        break;
                    }
                    else
                    {
                        VTDNav_L5 vnl = (VTDNav_L5)vn;
                        switch (i)
                        {
                        case 4:
                            vn.context[0] = 4;
                            vn.context[1] = fib.intAt(count + 1);
                            vn.context[2] = fib.intAt(count + 2);
                            vn.context[3] = fib.intAt(count + 3);
                            vn.context[4] = fib.intAt(count + 4);
                            vn.l1index    = fib.intAt(count + 5);
                            vn.l2lower    = fib.intAt(count + 6);
                            vn.l2upper    = fib.intAt(count + 7);
                            vn.l2index    = fib.intAt(count + 8);
                            vn.l3lower    = fib.intAt(count + 9);
                            vn.l3upper    = fib.intAt(count + 10);
                            vn.l3index    = fib.intAt(count + 11);
                            vnl.l4lower   = fib.intAt(count + 12);
                            vnl.l4upper   = fib.intAt(count + 13);
                            vnl.l4index   = fib.intAt(count + 14);
                            if (b == false)
                            {
                                vn.atTerminal = true;
                                vn.LN         = fib.intAt(count + 15);
                                count        += 16;
                            }
                            else
                            {
                                vn.atTerminal = false;
                                count        += 15;
                            }

                            break;

                        case 5:
                            vn.context[0] = 5;
                            vn.context[1] = fib.intAt(count + 1);
                            vn.context[2] = fib.intAt(count + 2);
                            vn.context[3] = fib.intAt(count + 3);
                            vn.context[4] = fib.intAt(count + 4);
                            vn.context[5] = fib.intAt(count + 5);
                            vn.l1index    = fib.intAt(count + 6);
                            vn.l2lower    = fib.intAt(count + 7);
                            vn.l2upper    = fib.intAt(count + 8);
                            vn.l2index    = fib.intAt(count + 9);
                            vn.l3lower    = fib.intAt(count + 10);
                            vn.l3upper    = fib.intAt(count + 11);
                            vn.l3index    = fib.intAt(count + 12);
                            vnl.l4lower   = fib.intAt(count + 13);
                            vnl.l4upper   = fib.intAt(count + 14);
                            vnl.l4index   = fib.intAt(count + 15);
                            vnl.l5lower   = fib.intAt(count + 16);
                            vnl.l5upper   = fib.intAt(count + 17);
                            vnl.l5index   = fib.intAt(count + 18);
                            if (b == false)
                            {
                                vn.atTerminal = true;
                                vn.LN         = fib.intAt(count + 19);
                                count        += 20;
                            }
                            else
                            {
                                vn.atTerminal = false;
                                count        += 19;
                            }

                            break;

                        default:
                            vn.context[0] = i;
                            for (j = 1; j < i; j++)
                            {
                                vn.context[j] = fib.intAt(count + j);
                            }
                            vn.l1index  = fib.intAt(count + i);
                            vn.l2lower  = fib.intAt(count + i + 1);
                            vn.l2upper  = fib.intAt(count + i + 2);
                            vn.l2index  = fib.intAt(count + i + 3);
                            vn.l3lower  = fib.intAt(count + i + 4);
                            vn.l3upper  = fib.intAt(count + i + 5);
                            vn.l3index  = fib.intAt(count + i + 6);
                            vnl.l4lower = fib.intAt(count + i + 7);
                            vnl.l4upper = fib.intAt(count + i + 8);
                            vnl.l4index = fib.intAt(count + i + 9);
                            vnl.l5lower = fib.intAt(count + i + 10);
                            vnl.l5upper = fib.intAt(count + i + 11);
                            vnl.l5index = fib.intAt(count + i + 12);
                            if (b == false)
                            {
                                vn.atTerminal = true;
                                vn.LN         = fib.intAt(count + i + 13);
                                count        += i + 15;
                            }
                            else
                            {
                                vn.atTerminal = false;
                                count        += i + 14;
                            }
                            break;
                        }
                    }
                    break;
                }
                position++;
                return(vn.getCurrentIndex());
            }
            return(-1);
        }
Ejemplo n.º 5
0
        private int handleLevel4()
        { //l2
            int       sp;
            VTDNav_L5 vnl = (VTDNav_L5)vn;

            if (prevLocation != -1)
            {
                sp = increment(prevLocation);
            }
            else
            {
                // fetch lclower and lcupper
                lcLower = vnl.l4Buffer.lower32At(vnl.l4index);
                if (lcLower != -1)
                {
                    lcUpper = vnl.l5Buffer.size_Renamed_Field - 1; //5
                    int size = vnl.l4Buffer.size_Renamed_Field;    //4
                    for (int i = vnl.l4index + 1; i < size; i++)
                    {                                              //4
                        int temp = vnl.l4Buffer.lower32At(i);      //4
                        if (temp != 0xffffffff)
                        {
                            lcUpper = temp - 1;
                            break;
                        }
                    }
                }
                sp = index + 1;
            } // check for l3lower and l3upper

            if (lcLower != -1)
            { // at least one child element
                int temp1 = vnl.l5Buffer.intAt(lcLower);
                int temp2 = vnl.l5Buffer.intAt(lcUpper);
                lcIndex = (lcIndex != -1) ? lcIndex : lcLower;
                while (sp < vn.vtdSize)
                {
                    int s = vnl.l5Buffer.intAt(lcIndex);
                    //int s = vn.l2Buffer.upper32At(lcIndex);
                    if (sp >= temp1 && sp < temp2)
                    {
                        if (sp == s)
                        {
                            lcIndex++;
                            sp = vnl.l5Buffer.intAt(lcIndex) - 1;
                            //boolean b = false;
                            while (vn.getTokenDepth(sp) == 4)
                            {
                                sp--;
                                //  b = true;
                            }
                            //if (b)
                            sp++;
                            //continue;
                        }
                        if (isText(sp) == true && vn.getTokenDepth(sp) == 4)
                        {
                            prevLocation = sp;
                            return(sp);
                        }
                        sp++;
                    }
                    else if (sp < temp1)
                    {
                        if (isText(sp) == true && vn.getTokenDepth(sp) == 4)
                        {
                            prevLocation = sp;
                            return(sp);
                        }
                        sp++;
                    }
                    else
                    {
                        //if (sp == temp2) { // last child element
                        //} else
                        if (isText(sp) == true && vn.getTokenDepth(sp) == 4)
                        {
                            prevLocation = sp;
                            return(sp);
                        }
                        else if ((vn.getTokenType(sp) == VTDNav.TOKEN_STARTING_TAG &&
                                  vn.getTokenDepth(sp) < 5) || vn.getTokenDepth(sp) < 4)
                        {
                            break;
                        }
                        sp++;
                    }
                }
                //prevLocation = vtdSize-1;
                return(-1);
            }
            else
            { // no child elements
                if (sp >= vn.vtdSize)
                {
                    return(-1);
                }
                int d    = vn.getTokenDepth(sp);
                int type = vn.getTokenType(sp);
                while (sp < vn.vtdSize &&
                       d >= 4 &&
                       !(d == 4 && type == VTDNav.TOKEN_STARTING_TAG))
                {
                    // the last condition indicates the start of the next sibling element
                    if (isText(sp) == true && vn.getTokenDepth(sp) == 4)
                    {
                        prevLocation = sp;
                        return(sp);
                    }
                    sp++;
                    d    = vn.getTokenDepth(sp);
                    type = vn.getTokenType(sp);
                }
                //prevLocation = vtdSize-1;
                return(-1);
            }
        }