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; } }
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; }