1ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann// Copyright 2014 PDFium Authors. All rights reserved. 2ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann// Use of this source code is governed by a BSD-style license that can be 3ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann// found in the LICENSE file. 4ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 5ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 6ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 7ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include "xfa/src/foxitlib.h" 8ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include "xfa/src/fxfa/src/common/xfa_utils.h" 9ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include "xfa/src/fxfa/src/common/xfa_object.h" 10ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include "xfa/src/fxfa/src/common/xfa_document.h" 11ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include "xfa/src/fxfa/src/common/xfa_parser.h" 12ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include "xfa/src/fxfa/src/common/xfa_script.h" 13ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include "xfa/src/fxfa/src/common/xfa_docdata.h" 14ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include "xfa/src/fxfa/src/common/xfa_doclayout.h" 15ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include "xfa/src/fxfa/src/common/xfa_localemgr.h" 16ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include "xfa/src/fxfa/src/common/xfa_fm2jsapi.h" 17ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include "xfa_script_nodehelper.h" 18ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include "xfa_script_imp.h" 19ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCXFA_NodeHelper::CXFA_NodeHelper(void) 20ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann : m_eLastCreateType(XFA_ELEMENT_DataValue), 21ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pCreateParent(NULL), 22ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_iCreateCount(0), 23ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_iCreateFlag(XFA_RESOLVENODE_RSTYPE_CreateNodeOne), 24ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_iCurAllStart(-1), 25ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pAllStartParent(NULL) {} 26ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCXFA_NodeHelper::~CXFA_NodeHelper(void) {} 27ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCXFA_Node* CXFA_NodeHelper::XFA_ResolveNodes_GetOneChild( 28ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CXFA_Node* parent, 29ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann const FX_WCHAR* pwsName, 30ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL bIsClassName) { 31ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (parent == NULL) { 32ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return NULL; 33ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 34ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CXFA_NodeArray siblings; 35ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann uint32_t uNameHash = FX_HashCode_String_GetW(pwsName, FXSYS_wcslen(pwsName)); 36ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann XFA_NodeAcc_TraverseAnySiblings(parent, uNameHash, &siblings, bIsClassName); 37ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (siblings.GetSize() == 0) { 38ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return NULL; 39ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 40ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return siblings[0]; 41ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 42ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannint32_t CXFA_NodeHelper::XFA_CountSiblings(CXFA_Node* pNode, 43ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann XFA_LOGIC_TYPE eLogicType, 44ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CXFA_NodeArray* pSiblings, 45ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL bIsClassName) { 46ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CXFA_Node* parent = 47ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann XFA_ResolveNodes_GetParent(pNode, XFA_LOGIC_NoTransparent); 48ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (parent == NULL) { 49ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return 0; 50ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 51ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann XFA_LPCPROPERTY pPropert = XFA_GetPropertyOfElement( 52ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann parent->GetClassID(), pNode->GetClassID(), XFA_XDPPACKET_UNKNOWN); 53ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pPropert && eLogicType == XFA_LOGIC_Transparent) { 54ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann parent = XFA_ResolveNodes_GetParent(pNode, XFA_LOGIC_Transparent); 55ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (parent == NULL) { 56ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return 0; 57ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 58ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 59ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (bIsClassName) { 60ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return XFA_NodeAcc_TraverseSiblings(parent, pNode->GetClassHashCode(), 61ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pSiblings, eLogicType, bIsClassName); 62ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else { 63ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return XFA_NodeAcc_TraverseSiblings(parent, pNode->GetNameHash(), pSiblings, 64ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann eLogicType, bIsClassName); 65ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 66ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 67ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannint32_t CXFA_NodeHelper::XFA_NodeAcc_TraverseAnySiblings( 68ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CXFA_Node* parent, 69ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_DWORD dNameHash, 70ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CXFA_NodeArray* pSiblings, 71ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL bIsClassName) { 72ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (parent == NULL || pSiblings == NULL) { 73ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return 0; 74ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 75ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int32_t nCount = 0; 76ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int32_t i = 0; 77ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CXFA_NodeArray properties; 78ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann parent->GetNodeList(properties, XFA_NODEFILTER_Properties); 79ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int32_t nProperties = properties.GetSize(); 80ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann for (i = 0; i < nProperties; ++i) { 81ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CXFA_Node* child = properties[i]; 82ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (bIsClassName) { 83ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (child->GetClassHashCode() == dNameHash) { 84ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pSiblings->Add(child); 85ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann nCount++; 86ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 87ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else { 88ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (child->GetNameHash() == dNameHash) { 89ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pSiblings->Add(child); 90ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann nCount++; 91ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 92ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 93ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (nCount > 0) { 94ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return nCount; 95ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 96ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann nCount += XFA_NodeAcc_TraverseAnySiblings(child, dNameHash, pSiblings, 97ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann bIsClassName); 98ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 99ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CXFA_NodeArray children; 100ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann parent->GetNodeList(children, XFA_NODEFILTER_Children); 101ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int32_t nChildren = children.GetSize(); 102ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann for (i = 0; i < nChildren; i++) { 103ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CXFA_Node* child = children[i]; 104ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (bIsClassName) { 105ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (child->GetClassHashCode() == dNameHash) { 106ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (pSiblings) { 107ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pSiblings->Add(child); 108ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 109ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann nCount++; 110ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 111ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else { 112ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (child->GetNameHash() == dNameHash) { 113ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (pSiblings) { 114ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pSiblings->Add(child); 115ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 116ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann nCount++; 117ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 118ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 119ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (nCount > 0) { 120ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return nCount; 121ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 122ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann nCount += XFA_NodeAcc_TraverseAnySiblings(child, dNameHash, pSiblings, 123ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann bIsClassName); 124ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 125ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return nCount; 126ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 127ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannint32_t CXFA_NodeHelper::XFA_NodeAcc_TraverseSiblings(CXFA_Node* parent, 128ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_DWORD dNameHash, 129ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CXFA_NodeArray* pSiblings, 130ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann XFA_LOGIC_TYPE eLogicType, 131ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL bIsClassName, 132ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL bIsFindProperty) { 133ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (parent == NULL || pSiblings == NULL) { 134ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return 0; 135ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 136ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int32_t nCount = 0; 137ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int32_t i = 0; 138ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (bIsFindProperty) { 139ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CXFA_NodeArray properties; 140ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann parent->GetNodeList(properties, XFA_NODEFILTER_Properties); 141ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int32_t nProperties = properties.GetSize(); 142ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann for (i = 0; i < nProperties; ++i) { 143ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CXFA_Node* child = properties[i]; 144ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (bIsClassName) { 145ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (child->GetClassHashCode() == dNameHash) { 146ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pSiblings->Add(child); 147ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann nCount++; 148ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 149ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else { 150ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (child->GetNameHash() == dNameHash) { 151ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (child->GetClassID() != XFA_ELEMENT_PageSet && 152ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann child->GetClassID() != XFA_ELEMENT_Extras && 153ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann child->GetClassID() != XFA_ELEMENT_Items) { 154ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pSiblings->Add(child); 155ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann nCount++; 156ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 157ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 158ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 159ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (child->IsUnnamed() && child->GetClassID() == XFA_ELEMENT_PageSet) { 160ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann nCount += XFA_NodeAcc_TraverseSiblings(child, dNameHash, pSiblings, 161ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann eLogicType, bIsClassName, FALSE); 162ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 163ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 164ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (nCount > 0) { 165ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return nCount; 166ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 167ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 168ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CXFA_NodeArray children; 169ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann parent->GetNodeList(children, XFA_NODEFILTER_Children); 170ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int32_t nChildren = children.GetSize(); 171ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann for (i = 0; i < nChildren; i++) { 172ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CXFA_Node* child = children[i]; 173ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (child->GetClassID() == XFA_ELEMENT_Variables) { 174ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann continue; 175ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 176ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (bIsClassName) { 177ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (child->GetClassHashCode() == dNameHash) { 178ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (pSiblings) { 179ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pSiblings->Add(child); 180ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 181ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann nCount++; 182ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 183ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else { 184ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (child->GetNameHash() == dNameHash) { 185ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (pSiblings) { 186ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pSiblings->Add(child); 187ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 188ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann nCount++; 189ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 190ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 191ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (eLogicType == XFA_LOGIC_NoTransparent) { 192ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann continue; 193ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 194ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (XFA_NodeIsTransparent(child) && 195ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann child->GetClassID() != XFA_ELEMENT_PageSet) { 196ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann nCount += XFA_NodeAcc_TraverseSiblings(child, dNameHash, pSiblings, 197ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann eLogicType, bIsClassName, FALSE); 198ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 199ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 200ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return nCount; 201ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 202ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCXFA_Node* CXFA_NodeHelper::XFA_ResolveNodes_GetParent( 203ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CXFA_Node* pNode, 204ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann XFA_LOGIC_TYPE eLogicType) { 205ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pNode) { 206ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return NULL; 207ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 208ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (eLogicType == XFA_LOGIC_NoTransparent) { 209ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return pNode->GetNodeItem(XFA_NODEITEM_Parent); 210ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 211ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CXFA_Node* parent; 212ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CXFA_Node* node = pNode; 213ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann while (TRUE) { 214ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann parent = XFA_ResolveNodes_GetParent(node); 215ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (parent == NULL) { 216ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann break; 217ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 218ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann XFA_ELEMENT parentElement = parent->GetClassID(); 219ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if ((!parent->IsUnnamed() && parentElement != XFA_ELEMENT_SubformSet) || 220ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann parentElement == XFA_ELEMENT_Variables) { 221ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann break; 222ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 223ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann node = parent; 224ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 225ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return parent; 226ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 227ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannint32_t CXFA_NodeHelper::XFA_GetIndex(CXFA_Node* pNode, 228ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann XFA_LOGIC_TYPE eLogicType, 229ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL bIsProperty, 230ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL bIsClassIndex) { 231ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CXFA_Node* parent = 232ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann XFA_ResolveNodes_GetParent(pNode, XFA_LOGIC_NoTransparent); 233ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (parent == NULL) { 234ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return 0; 235ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 236ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!bIsProperty && eLogicType == XFA_LOGIC_Transparent) { 237ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann parent = XFA_ResolveNodes_GetParent(pNode, XFA_LOGIC_Transparent); 238ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (parent == NULL) { 239ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return 0; 240ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 241ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 242ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_DWORD dwHashName = pNode->GetNameHash(); 243ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (bIsClassIndex) { 244ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann dwHashName = pNode->GetClassHashCode(); 245ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 246ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CXFA_NodeArray siblings; 247ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int32_t iSize = XFA_NodeAcc_TraverseSiblings(parent, dwHashName, &siblings, 248ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann eLogicType, bIsClassIndex); 249ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann for (int32_t i = 0; i < iSize; ++i) { 250ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CXFA_Node* child = siblings[i]; 251ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (child == pNode) { 252ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return i; 253ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 254ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 255ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return 0; 256ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 257ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CXFA_NodeHelper::XFA_GetNameExpression(CXFA_Node* refNode, 258ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_WideString& wsName, 259ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL bIsAllPath, 260ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann XFA_LOGIC_TYPE eLogicType) { 261ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann wsName.Empty(); 262ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (bIsAllPath) { 263ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann XFA_GetNameExpression(refNode, wsName, FALSE, eLogicType); 264ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_WideString wsParent; 265ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CXFA_Node* parent = 266ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann XFA_ResolveNodes_GetParent(refNode, XFA_LOGIC_NoTransparent); 267ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann while (parent != NULL) { 268ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann XFA_GetNameExpression(parent, wsParent, FALSE, eLogicType); 269ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann wsParent += L"."; 270ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann wsParent += wsName; 271ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann wsName = wsParent; 272ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann parent = XFA_ResolveNodes_GetParent(parent, XFA_LOGIC_NoTransparent); 273ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 274ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return; 275ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else { 276ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_WideStringC wsTagName; 277ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_WideString ws; 278ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL bIsProperty = XFA_NodeIsProperty(refNode); 279ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (refNode->IsUnnamed() || 280ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann (bIsProperty && refNode->GetClassID() != XFA_ELEMENT_PageSet)) { 281ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann refNode->GetClassName(wsTagName); 282ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann ws = wsTagName; 283ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann wsName.Format(L"#%s[%d]", (const FX_WCHAR*)ws, 284ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann XFA_GetIndex(refNode, eLogicType, bIsProperty, TRUE)); 285ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return; 286ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 287ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann ws = refNode->GetCData(XFA_ATTRIBUTE_Name); 288ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann ws.Replace(L".", L"\\."); 289ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann wsName.Format(L"%s[%d]", (const FX_WCHAR*)ws, 290ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann XFA_GetIndex(refNode, eLogicType, bIsProperty, FALSE)); 291ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 292ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 293ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL CXFA_NodeHelper::XFA_NodeIsTransparent(CXFA_Node* refNode) { 294ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (refNode == NULL) { 295ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return FALSE; 296ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 297ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann XFA_ELEMENT eRefNode = refNode->GetClassID(); 298ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if ((refNode->IsUnnamed() && refNode->IsContainerNode()) || 299ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann eRefNode == XFA_ELEMENT_SubformSet || eRefNode == XFA_ELEMENT_Area || 300ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann eRefNode == XFA_ELEMENT_Proto) { 301ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return TRUE; 302ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 303ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return FALSE; 304ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 305ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL CXFA_NodeHelper::XFA_CreateNode_ForCondition( 306ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_WideString& wsCondition) { 307ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int32_t iLen = wsCondition.GetLength(); 308ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_WideString wsIndex = FX_WSTRC(L"0"); 309ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann ; 310ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL bAll = FALSE; 311ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (iLen == 0) { 312ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_iCreateFlag = XFA_RESOLVENODE_RSTYPE_CreateNodeOne; 313ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return FALSE; 314ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 315ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (wsCondition.GetAt(0) == '[') { 316ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int32_t i = 1; 317ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann for (; i < iLen; ++i) { 318ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_WCHAR ch = wsCondition[i]; 319ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (ch == ' ') { 320ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann continue; 321ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 322ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (ch == '+' || ch == '-') { 323ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann break; 324ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else if (ch == '*') { 325ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann bAll = TRUE; 326ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann break; 327ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else { 328ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann break; 329ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 330ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 331ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (bAll) { 332ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann wsIndex = FX_WSTRC(L"1"); 333ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_iCreateFlag = XFA_RESOLVENODE_RSTYPE_CreateNodeAll; 334ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else { 335ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_iCreateFlag = XFA_RESOLVENODE_RSTYPE_CreateNodeOne; 336ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann wsIndex = wsCondition.Mid(i, iLen - 1 - i); 337ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 338ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int32_t iIndex = wsIndex.GetInteger(); 339ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_iCreateCount = iIndex; 340ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return TRUE; 341ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 342ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return FALSE; 343ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 344ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL CXFA_NodeHelper::XFA_ResolveNodes_CreateNode( 345ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_WideString wsName, 346ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_WideString wsCondition, 347ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL bLastNode, 348ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CXFA_ScriptContext* pScriptContext) { 349ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_pCreateParent == NULL) { 350ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return FALSE; 351ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 352ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL bIsClassName = FALSE; 353ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL bResult = FALSE; 354ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (wsName.GetAt(0) == '!') { 355ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann wsName = wsName.Right(wsName.GetLength() - 1); 356ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pCreateParent = (CXFA_Node*)pScriptContext->GetDocument()->GetXFANode( 357ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann XFA_HASHCODE_Datasets); 358ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 359ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (wsName.GetAt(0) == '#') { 360ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann bIsClassName = TRUE; 361ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann wsName = wsName.Right(wsName.GetLength() - 1); 362ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 363ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_iCreateCount == 0) { 364ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann XFA_CreateNode_ForCondition(wsCondition); 365ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 366ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (bIsClassName) { 367ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann XFA_LPCELEMENTINFO lpElement = XFA_GetElementByName(wsName); 368ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (lpElement == NULL) { 369ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return FALSE; 370ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 371ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann for (int32_t iIndex = 0; iIndex < m_iCreateCount; iIndex++) { 372ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CXFA_Node* pNewNode = 373ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pCreateParent->CreateSamePacketNode(lpElement->eName); 374ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (pNewNode) { 375ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pCreateParent->InsertChild(pNewNode); 376ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (iIndex == m_iCreateCount - 1) { 377ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pCreateParent = pNewNode; 378ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 379ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann bResult = TRUE; 380ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 381ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 382ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else { 383ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann XFA_ELEMENT eClassType = XFA_ELEMENT_DataGroup; 384ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (bLastNode) { 385ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann eClassType = m_eLastCreateType; 386ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 387ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann for (int32_t iIndex = 0; iIndex < m_iCreateCount; iIndex++) { 388ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CXFA_Node* pNewNode = m_pCreateParent->CreateSamePacketNode(eClassType); 389ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (pNewNode) { 390ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pNewNode->SetAttribute(XFA_ATTRIBUTE_Name, wsName); 391ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pNewNode->CreateXMLMappingNode(); 392ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pCreateParent->InsertChild(pNewNode); 393ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (iIndex == m_iCreateCount - 1) { 394ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pCreateParent = pNewNode; 395ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 396ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann bResult = TRUE; 397ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 398ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 399ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 400ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!bResult) { 401ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pCreateParent = NULL; 402ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 403ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return bResult; 404ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 405ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CXFA_NodeHelper::XFA_SetCreateNodeType(CXFA_Node* refNode) { 406ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (refNode == NULL) { 407ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return; 408ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 409ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (refNode->GetClassID() == XFA_ELEMENT_Subform) { 410ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_eLastCreateType = XFA_ELEMENT_DataGroup; 411ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else if (refNode->GetClassID() == XFA_ELEMENT_Field) { 412ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_eLastCreateType = XFA_FieldIsMultiListBox(refNode) 413ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann ? XFA_ELEMENT_DataGroup 414ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann : XFA_ELEMENT_DataValue; 415ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else if (refNode->GetClassID() == XFA_ELEMENT_ExclGroup) { 416ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_eLastCreateType = XFA_ELEMENT_DataValue; 417ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 418ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 419ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL CXFA_NodeHelper::XFA_NodeIsProperty(CXFA_Node* refNode) { 420ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL bRes = FALSE; 421ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CXFA_Node* parent = 422ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann XFA_ResolveNodes_GetParent(refNode, XFA_LOGIC_NoTransparent); 423ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (parent != NULL && refNode != NULL) { 424ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann XFA_LPCPROPERTY pPropert = XFA_GetPropertyOfElement( 425ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann parent->GetClassID(), refNode->GetClassID(), XFA_XDPPACKET_UNKNOWN); 426ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (pPropert) { 427ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann bRes = TRUE; 428ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 429ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 430ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return bRes; 431ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 432