internal void    Closure(ContentNode.Type type)
        {
            ContentNode n;

            if (stack.Count > 0)
            {
                InternalNode n1;
                n = (ContentNode)stack.Pop();
                if (isPartial &&
                    n.NodeType != ContentNode.Type.Terminal &&
                    n.NodeType != ContentNode.Type.Any)
                {
                    // need to reach in and wrap _pRight hand side of element.
                    // and n remains the same.
                    InternalNode inNode = (InternalNode)n;
                    n1            = new InternalNode(inNode.RightNode, null, type);
                    n1.ParentNode = n;
                    if (inNode.RightNode != null)
                    {
                        inNode.RightNode.ParentNode = n1;
                    }
                    inNode.RightNode = n1;
                }
                else
                {
                    // wrap terminal or any node
                    n1           = new InternalNode(n, null, type);
                    n.ParentNode = n1;
                    n            = n1;
                }
                stack.Push(n);
            }
            else
            {
                // wrap whole content
                n = new InternalNode(contentNode, null, type);
                contentNode.ParentNode = n;
                contentNode            = n;
            }
        }
Example #2
0
        protected ContentNode right;   // right node
                                       // if node type is QMark, Closure, or Type.Plus, right node is NULL

        internal InternalNode(ContentNode l, ContentNode r, ContentNode.Type t)
        {
            left        = l;
            right       = r;
            contentType = t;
        }