| OLD | NEW |
| 1 // Copyright 2014 PDFium Authors. All rights reserved. | 1 // Copyright 2014 PDFium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
| 6 | 6 |
| 7 #include "xfa/fxfa/parser/xfa_document_datamerger_imp.h" | 7 #include "xfa/fxfa/parser/xfa_document_datamerger_imp.h" |
| 8 | 8 |
| 9 #include "core/fxcrt/include/fx_ext.h" | 9 #include "core/fxcrt/include/fx_ext.h" |
| 10 #include "xfa/fde/xml/fde_xml_imp.h" | 10 #include "xfa/fde/xml/fde_xml_imp.h" |
| (...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 136 pXMLDataElement->SetString(L"href", wsHref); | 136 pXMLDataElement->SetString(L"href", wsHref); |
| 137 } | 137 } |
| 138 } break; | 138 } break; |
| 139 case XFA_ELEMENT_ChoiceList: | 139 case XFA_ELEMENT_ChoiceList: |
| 140 defValue.GetChildValueContent(wsValue); | 140 defValue.GetChildValueContent(wsValue); |
| 141 if (pWidgetData->GetChoiceListOpen() == XFA_ATTRIBUTEENUM_MultiSelect) { | 141 if (pWidgetData->GetChoiceListOpen() == XFA_ATTRIBUTEENUM_MultiSelect) { |
| 142 CFX_WideStringArray wsSelTextArray; | 142 CFX_WideStringArray wsSelTextArray; |
| 143 pWidgetData->GetSelectedItemsValue(wsSelTextArray); | 143 pWidgetData->GetSelectedItemsValue(wsSelTextArray); |
| 144 int32_t iSize = wsSelTextArray.GetSize(); | 144 int32_t iSize = wsSelTextArray.GetSize(); |
| 145 if (iSize >= 1) { | 145 if (iSize >= 1) { |
| 146 CXFA_Node* pValue = NULL; | 146 CXFA_Node* pValue = nullptr; |
| 147 for (int32_t i = 0; i < iSize; i++) { | 147 for (int32_t i = 0; i < iSize; i++) { |
| 148 pValue = pDataNode->CreateSamePacketNode(XFA_ELEMENT_DataValue); | 148 pValue = pDataNode->CreateSamePacketNode(XFA_ELEMENT_DataValue); |
| 149 pValue->SetCData(XFA_ATTRIBUTE_Name, L"value"); | 149 pValue->SetCData(XFA_ATTRIBUTE_Name, L"value"); |
| 150 pValue->CreateXMLMappingNode(); | 150 pValue->CreateXMLMappingNode(); |
| 151 pDataNode->InsertChild(pValue); | 151 pDataNode->InsertChild(pValue); |
| 152 pValue->SetCData(XFA_ATTRIBUTE_Value, wsSelTextArray[i]); | 152 pValue->SetCData(XFA_ATTRIBUTE_Value, wsSelTextArray[i]); |
| 153 } | 153 } |
| 154 } else { | 154 } else { |
| 155 CFDE_XMLNode* pXMLNode = pDataNode->GetXMLMappingNode(); | 155 CFDE_XMLNode* pXMLNode = pDataNode->GetXMLMappingNode(); |
| 156 ASSERT(pXMLNode->GetType() == FDE_XMLNODE_Element); | 156 ASSERT(pXMLNode->GetType() == FDE_XMLNODE_Element); |
| 157 static_cast<CFDE_XMLElement*>(pXMLNode)->SetString(L"xfa:dataNode", | 157 static_cast<CFDE_XMLElement*>(pXMLNode)->SetString(L"xfa:dataNode", |
| 158 L"dataGroup"); | 158 L"dataGroup"); |
| 159 } | 159 } |
| 160 } else if (!wsValue.IsEmpty()) { | 160 } else if (!wsValue.IsEmpty()) { |
| 161 pWidgetData->GetFormatDataValue(wsValue, wsFormatedValue); | 161 pWidgetData->GetFormatDataValue(wsValue, wsFormatedValue); |
| 162 pDataNode->SetAttributeValue(wsValue, wsFormatedValue); | 162 pDataNode->SetAttributeValue(wsValue, wsFormatedValue); |
| 163 } | 163 } |
| 164 break; | 164 break; |
| 165 case XFA_ELEMENT_CheckButton: | 165 case XFA_ELEMENT_CheckButton: |
| 166 defValue.GetChildValueContent(wsValue); | 166 defValue.GetChildValueContent(wsValue); |
| 167 if (wsValue.IsEmpty()) { | 167 if (wsValue.IsEmpty()) { |
| 168 break; | 168 break; |
| 169 } | 169 } |
| 170 pWidgetData->GetFormatDataValue(wsValue, wsFormatedValue); | 170 pWidgetData->GetFormatDataValue(wsValue, wsFormatedValue); |
| 171 pDataNode->SetAttributeValue(wsValue, wsFormatedValue); | 171 pDataNode->SetAttributeValue(wsValue, wsFormatedValue); |
| 172 break; | 172 break; |
| 173 case XFA_ELEMENT_ExclGroup: { | 173 case XFA_ELEMENT_ExclGroup: { |
| 174 CXFA_Node* pChecked = NULL; | 174 CXFA_Node* pChecked = nullptr; |
| 175 CXFA_Node* pChild = pFormNode->GetNodeItem(XFA_NODEITEM_FirstChild); | 175 CXFA_Node* pChild = pFormNode->GetNodeItem(XFA_NODEITEM_FirstChild); |
| 176 for (; pChild; pChild = pChild->GetNodeItem(XFA_NODEITEM_NextSibling)) { | 176 for (; pChild; pChild = pChild->GetNodeItem(XFA_NODEITEM_NextSibling)) { |
| 177 if (pChild->GetClassID() != XFA_ELEMENT_Field) { | 177 if (pChild->GetClassID() != XFA_ELEMENT_Field) { |
| 178 continue; | 178 continue; |
| 179 } | 179 } |
| 180 CXFA_Node* pValue = pChild->GetChild(0, XFA_ELEMENT_Value); | 180 CXFA_Node* pValue = pChild->GetChild(0, XFA_ELEMENT_Value); |
| 181 if (!pValue) { | 181 if (!pValue) { |
| 182 continue; | 182 continue; |
| 183 } | 183 } |
| 184 CXFA_Value valueChild(pValue); | 184 CXFA_Value valueChild(pValue); |
| (...skipping 25 matching lines...) Expand all Loading... |
| 210 for (; pChild; pChild = pChild->GetNodeItem(XFA_NODEITEM_NextSibling)) { | 210 for (; pChild; pChild = pChild->GetNodeItem(XFA_NODEITEM_NextSibling)) { |
| 211 if (pChild == pChecked) { | 211 if (pChild == pChecked) { |
| 212 continue; | 212 continue; |
| 213 } | 213 } |
| 214 if (pChild->GetClassID() != XFA_ELEMENT_Field) { | 214 if (pChild->GetClassID() != XFA_ELEMENT_Field) { |
| 215 continue; | 215 continue; |
| 216 } | 216 } |
| 217 CXFA_Node* pValue = pChild->GetProperty(0, XFA_ELEMENT_Value); | 217 CXFA_Node* pValue = pChild->GetProperty(0, XFA_ELEMENT_Value); |
| 218 CXFA_Node* pItems = pChild->GetChild(0, XFA_ELEMENT_Items); | 218 CXFA_Node* pItems = pChild->GetChild(0, XFA_ELEMENT_Items); |
| 219 CXFA_Node* pText = | 219 CXFA_Node* pText = |
| 220 pItems ? pItems->GetNodeItem(XFA_NODEITEM_FirstChild) : NULL; | 220 pItems ? pItems->GetNodeItem(XFA_NODEITEM_FirstChild) : nullptr; |
| 221 if (pText) { | 221 if (pText) { |
| 222 pText = pText->GetNodeItem(XFA_NODEITEM_NextSibling); | 222 pText = pText->GetNodeItem(XFA_NODEITEM_NextSibling); |
| 223 } | 223 } |
| 224 CFX_WideString wsContent; | 224 CFX_WideString wsContent; |
| 225 if (pText) { | 225 if (pText) { |
| 226 pText->TryContent(wsContent); | 226 pText->TryContent(wsContent); |
| 227 } | 227 } |
| 228 XFA_DataMerge_FormValueNode_SetChildContent(pValue, wsContent, | 228 XFA_DataMerge_FormValueNode_SetChildContent(pValue, wsContent, |
| 229 XFA_ELEMENT_Text); | 229 XFA_ELEMENT_Text); |
| 230 } | 230 } |
| (...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 334 case XFA_ELEMENT_TextEdit: | 334 case XFA_ELEMENT_TextEdit: |
| 335 default: | 335 default: |
| 336 XFA_DataMerge_FormValueNode_SetChildContent( | 336 XFA_DataMerge_FormValueNode_SetChildContent( |
| 337 defValue.GetNode(), wsNormailizeValue, XFA_ELEMENT_Text); | 337 defValue.GetNode(), wsNormailizeValue, XFA_ELEMENT_Text); |
| 338 break; | 338 break; |
| 339 } | 339 } |
| 340 } | 340 } |
| 341 } | 341 } |
| 342 static CXFA_Node* XFA_DataMerge_GetGlobalBinding(CXFA_Document* pDocument, | 342 static CXFA_Node* XFA_DataMerge_GetGlobalBinding(CXFA_Document* pDocument, |
| 343 uint32_t dwNameHash) { | 343 uint32_t dwNameHash) { |
| 344 CXFA_Node* pNode = NULL; | 344 CXFA_Node* pNode = nullptr; |
| 345 pDocument->m_rgGlobalBinding.Lookup(dwNameHash, pNode); | 345 pDocument->m_rgGlobalBinding.Lookup(dwNameHash, pNode); |
| 346 return pNode; | 346 return pNode; |
| 347 } | 347 } |
| 348 static void XFA_DataMerge_RegisterGlobalBinding(CXFA_Document* pDocument, | 348 static void XFA_DataMerge_RegisterGlobalBinding(CXFA_Document* pDocument, |
| 349 uint32_t dwNameHash, | 349 uint32_t dwNameHash, |
| 350 CXFA_Node* pDataNode) { | 350 CXFA_Node* pDataNode) { |
| 351 pDocument->m_rgGlobalBinding.SetAt(dwNameHash, pDataNode); | 351 pDocument->m_rgGlobalBinding.SetAt(dwNameHash, pDataNode); |
| 352 } | 352 } |
| 353 static void XFA_DataMerge_ClearGlobalBinding(CXFA_Document* pDocument) { | 353 static void XFA_DataMerge_ClearGlobalBinding(CXFA_Document* pDocument) { |
| 354 pDocument->m_rgGlobalBinding.RemoveAll(); | 354 pDocument->m_rgGlobalBinding.RemoveAll(); |
| 355 } | 355 } |
| 356 static CXFA_Node* XFA_DataMerge_ScopeMatchGlobalBinding( | 356 static CXFA_Node* XFA_DataMerge_ScopeMatchGlobalBinding( |
| 357 CXFA_Node* pDataScope, | 357 CXFA_Node* pDataScope, |
| 358 uint32_t dwNameHash, | 358 uint32_t dwNameHash, |
| 359 XFA_ELEMENT eMatchDataNodeType, | 359 XFA_ELEMENT eMatchDataNodeType, |
| 360 FX_BOOL bUpLevel = TRUE) { | 360 FX_BOOL bUpLevel = TRUE) { |
| 361 for (CXFA_Node *pCurDataScope = pDataScope, *pLastDataScope = NULL; | 361 for (CXFA_Node *pCurDataScope = pDataScope, *pLastDataScope = nullptr; |
| 362 pCurDataScope && pCurDataScope->GetPacketID() == XFA_XDPPACKET_Datasets; | 362 pCurDataScope && pCurDataScope->GetPacketID() == XFA_XDPPACKET_Datasets; |
| 363 pLastDataScope = pCurDataScope, | 363 pLastDataScope = pCurDataScope, |
| 364 pCurDataScope = | 364 pCurDataScope = |
| 365 pCurDataScope->GetNodeItem(XFA_NODEITEM_Parent)) { | 365 pCurDataScope->GetNodeItem(XFA_NODEITEM_Parent)) { |
| 366 for (CXFA_Node* pDataChild = pCurDataScope->GetFirstChildByName(dwNameHash); | 366 for (CXFA_Node* pDataChild = pCurDataScope->GetFirstChildByName(dwNameHash); |
| 367 pDataChild; | 367 pDataChild; |
| 368 pDataChild = pDataChild->GetNextSameNameSibling(dwNameHash)) { | 368 pDataChild = pDataChild->GetNextSameNameSibling(dwNameHash)) { |
| 369 if (pDataChild == pLastDataScope || | 369 if (pDataChild == pLastDataScope || |
| 370 (eMatchDataNodeType != XFA_ELEMENT_DataModel && | 370 (eMatchDataNodeType != XFA_ELEMENT_DataModel && |
| 371 pDataChild->GetClassID() != eMatchDataNodeType) || | 371 pDataChild->GetClassID() != eMatchDataNodeType) || |
| 372 pDataChild->HasBindItem()) { | 372 pDataChild->HasBindItem()) { |
| 373 continue; | 373 continue; |
| 374 } | 374 } |
| 375 return pDataChild; | 375 return pDataChild; |
| 376 } | 376 } |
| 377 for (CXFA_Node* pDataChild = | 377 for (CXFA_Node* pDataChild = |
| 378 pCurDataScope->GetFirstChildByClass(XFA_ELEMENT_DataGroup); | 378 pCurDataScope->GetFirstChildByClass(XFA_ELEMENT_DataGroup); |
| 379 pDataChild; pDataChild = pDataChild->GetNextSameClassSibling( | 379 pDataChild; pDataChild = pDataChild->GetNextSameClassSibling( |
| 380 XFA_ELEMENT_DataGroup)) { | 380 XFA_ELEMENT_DataGroup)) { |
| 381 CXFA_Node* pDataNode = XFA_DataMerge_ScopeMatchGlobalBinding( | 381 CXFA_Node* pDataNode = XFA_DataMerge_ScopeMatchGlobalBinding( |
| 382 pDataChild, dwNameHash, eMatchDataNodeType, FALSE); | 382 pDataChild, dwNameHash, eMatchDataNodeType, FALSE); |
| 383 if (pDataNode) { | 383 if (pDataNode) { |
| 384 return pDataNode; | 384 return pDataNode; |
| 385 } | 385 } |
| 386 } | 386 } |
| 387 if (!bUpLevel) { | 387 if (!bUpLevel) { |
| 388 break; | 388 break; |
| 389 } | 389 } |
| 390 } | 390 } |
| 391 return NULL; | 391 return nullptr; |
| 392 } | 392 } |
| 393 static CXFA_Node* XFA_DataMerge_FindGlobalDataNode(CXFA_Document* pDocument, | 393 static CXFA_Node* XFA_DataMerge_FindGlobalDataNode(CXFA_Document* pDocument, |
| 394 CFX_WideStringC wsName, | 394 CFX_WideStringC wsName, |
| 395 CXFA_Node* pDataScope, | 395 CXFA_Node* pDataScope, |
| 396 XFA_ELEMENT eMatchNodeType) { | 396 XFA_ELEMENT eMatchNodeType) { |
| 397 if (wsName.IsEmpty()) | 397 if (wsName.IsEmpty()) |
| 398 return nullptr; | 398 return nullptr; |
| 399 | 399 |
| 400 uint32_t dwNameHash = FX_HashCode_GetW(wsName, false); | 400 uint32_t dwNameHash = FX_HashCode_GetW(wsName, false); |
| 401 CXFA_Node* pBounded = XFA_DataMerge_GetGlobalBinding(pDocument, dwNameHash); | 401 CXFA_Node* pBounded = XFA_DataMerge_GetGlobalBinding(pDocument, dwNameHash); |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 449 } | 449 } |
| 450 XFA_RESOLVENODE_RS rs; | 450 XFA_RESOLVENODE_RS rs; |
| 451 pDocument->GetScriptContext()->ResolveObjects(pDataScope, wsRef, rs, dFlags, | 451 pDocument->GetScriptContext()->ResolveObjects(pDataScope, wsRef, rs, dFlags, |
| 452 pTemplateNode); | 452 pTemplateNode); |
| 453 if (rs.dwFlags == XFA_RESOLVENODE_RSTYPE_CreateNodeAll || | 453 if (rs.dwFlags == XFA_RESOLVENODE_RSTYPE_CreateNodeAll || |
| 454 rs.dwFlags == XFA_RESOLVENODE_RSTYPE_CreateNodeMidAll || | 454 rs.dwFlags == XFA_RESOLVENODE_RSTYPE_CreateNodeMidAll || |
| 455 rs.nodes.GetSize() > 1) { | 455 rs.nodes.GetSize() > 1) { |
| 456 return pDocument->GetNotBindNode(rs.nodes); | 456 return pDocument->GetNotBindNode(rs.nodes); |
| 457 } | 457 } |
| 458 if (rs.dwFlags == XFA_RESOLVENODE_RSTYPE_CreateNodeOne) { | 458 if (rs.dwFlags == XFA_RESOLVENODE_RSTYPE_CreateNodeOne) { |
| 459 CXFA_Object* pObject = (rs.nodes.GetSize() > 0) ? rs.nodes[0] : NULL; | 459 CXFA_Object* pObject = (rs.nodes.GetSize() > 0) ? rs.nodes[0] : nullptr; |
| 460 CXFA_Node* pNode = ToNode(pObject); | 460 CXFA_Node* pNode = ToNode(pObject); |
| 461 if (!bForceBind && pNode && pNode->HasBindItem()) { | 461 if (!bForceBind && pNode && pNode->HasBindItem()) { |
| 462 pNode = NULL; | 462 pNode = nullptr; |
| 463 } | 463 } |
| 464 return pNode; | 464 return pNode; |
| 465 } | 465 } |
| 466 return NULL; | 466 return nullptr; |
| 467 } | 467 } |
| 468 CXFA_Node* XFA_DataMerge_FindFormDOMInstance(CXFA_Document* pDocument, | 468 CXFA_Node* XFA_DataMerge_FindFormDOMInstance(CXFA_Document* pDocument, |
| 469 XFA_ELEMENT eClassID, | 469 XFA_ELEMENT eClassID, |
| 470 uint32_t dwNameHash, | 470 uint32_t dwNameHash, |
| 471 CXFA_Node* pFormParent) { | 471 CXFA_Node* pFormParent) { |
| 472 CXFA_Node* pFormChild = pFormParent->GetNodeItem(XFA_NODEITEM_FirstChild); | 472 CXFA_Node* pFormChild = pFormParent->GetNodeItem(XFA_NODEITEM_FirstChild); |
| 473 for (; pFormChild; | 473 for (; pFormChild; |
| 474 pFormChild = pFormChild->GetNodeItem(XFA_NODEITEM_NextSibling)) { | 474 pFormChild = pFormChild->GetNodeItem(XFA_NODEITEM_NextSibling)) { |
| 475 if (pFormChild->GetClassID() == eClassID && | 475 if (pFormChild->GetClassID() == eClassID && |
| 476 pFormChild->GetNameHash() == dwNameHash && | 476 pFormChild->GetNameHash() == dwNameHash && |
| 477 pFormChild->HasFlag(XFA_NODEFLAG_UnusedNode)) { | 477 pFormChild->HasFlag(XFA_NODEFLAG_UnusedNode)) { |
| 478 return pFormChild; | 478 return pFormChild; |
| 479 } | 479 } |
| 480 } | 480 } |
| 481 return NULL; | 481 return nullptr; |
| 482 } | 482 } |
| 483 static FX_BOOL XFA_NeedGenerateForm(CXFA_Node* pTemplateChild, | 483 static FX_BOOL XFA_NeedGenerateForm(CXFA_Node* pTemplateChild, |
| 484 FX_BOOL bUseInstanceManager = TRUE) { | 484 FX_BOOL bUseInstanceManager = TRUE) { |
| 485 XFA_ELEMENT eType = pTemplateChild->GetClassID(); | 485 XFA_ELEMENT eType = pTemplateChild->GetClassID(); |
| 486 if (eType == XFA_ELEMENT_Variables) { | 486 if (eType == XFA_ELEMENT_Variables) { |
| 487 return TRUE; | 487 return TRUE; |
| 488 } | 488 } |
| 489 if (pTemplateChild->GetObjectType() == XFA_OBJECTTYPE_ContainerNode) { | 489 if (pTemplateChild->GetObjectType() == XFA_OBJECTTYPE_ContainerNode) { |
| 490 return FALSE; | 490 return FALSE; |
| 491 } | 491 } |
| 492 if (eType == XFA_ELEMENT_Proto || | 492 if (eType == XFA_ELEMENT_Proto || |
| 493 (bUseInstanceManager && eType == XFA_ELEMENT_Occur)) { | 493 (bUseInstanceManager && eType == XFA_ELEMENT_Occur)) { |
| 494 return FALSE; | 494 return FALSE; |
| 495 } | 495 } |
| 496 return TRUE; | 496 return TRUE; |
| 497 } | 497 } |
| 498 CXFA_Node* XFA_NodeMerge_CloneOrMergeContainer(CXFA_Document* pDocument, | 498 CXFA_Node* XFA_NodeMerge_CloneOrMergeContainer(CXFA_Document* pDocument, |
| 499 CXFA_Node* pFormParent, | 499 CXFA_Node* pFormParent, |
| 500 CXFA_Node* pTemplateNode, | 500 CXFA_Node* pTemplateNode, |
| 501 FX_BOOL bRecursive, | 501 FX_BOOL bRecursive, |
| 502 CXFA_NodeArray* pSubformArray) { | 502 CXFA_NodeArray* pSubformArray) { |
| 503 CXFA_Node* pExistingNode = NULL; | 503 CXFA_Node* pExistingNode = nullptr; |
| 504 if (pSubformArray == NULL) { | 504 if (!pSubformArray) { |
| 505 pExistingNode = XFA_DataMerge_FindFormDOMInstance( | 505 pExistingNode = XFA_DataMerge_FindFormDOMInstance( |
| 506 pDocument, pTemplateNode->GetClassID(), pTemplateNode->GetNameHash(), | 506 pDocument, pTemplateNode->GetClassID(), pTemplateNode->GetNameHash(), |
| 507 pFormParent); | 507 pFormParent); |
| 508 } else if (pSubformArray->GetSize() > 0) { | 508 } else if (pSubformArray->GetSize() > 0) { |
| 509 pExistingNode = pSubformArray->GetAt(0); | 509 pExistingNode = pSubformArray->GetAt(0); |
| 510 pSubformArray->RemoveAt(0); | 510 pSubformArray->RemoveAt(0); |
| 511 } | 511 } |
| 512 if (pExistingNode) { | 512 if (pExistingNode) { |
| 513 if (pSubformArray) { | 513 if (pSubformArray) { |
| 514 pFormParent->InsertChild(pExistingNode); | 514 pFormParent->InsertChild(pExistingNode); |
| (...skipping 11 matching lines...) Expand all Loading... |
| 526 if (XFA_NeedGenerateForm(pTemplateChild)) { | 526 if (XFA_NeedGenerateForm(pTemplateChild)) { |
| 527 XFA_NodeMerge_CloneOrMergeContainer(pDocument, pExistingNode, | 527 XFA_NodeMerge_CloneOrMergeContainer(pDocument, pExistingNode, |
| 528 pTemplateChild, bRecursive); | 528 pTemplateChild, bRecursive); |
| 529 } | 529 } |
| 530 } | 530 } |
| 531 } | 531 } |
| 532 pExistingNode->SetFlag(XFA_NODEFLAG_Initialized, true); | 532 pExistingNode->SetFlag(XFA_NODEFLAG_Initialized, true); |
| 533 return pExistingNode; | 533 return pExistingNode; |
| 534 } | 534 } |
| 535 CXFA_Node* pNewNode = pTemplateNode->CloneTemplateToForm(FALSE); | 535 CXFA_Node* pNewNode = pTemplateNode->CloneTemplateToForm(FALSE); |
| 536 pFormParent->InsertChild(pNewNode, NULL); | 536 pFormParent->InsertChild(pNewNode, nullptr); |
| 537 if (bRecursive) { | 537 if (bRecursive) { |
| 538 for (CXFA_Node* pTemplateChild = | 538 for (CXFA_Node* pTemplateChild = |
| 539 pTemplateNode->GetNodeItem(XFA_NODEITEM_FirstChild); | 539 pTemplateNode->GetNodeItem(XFA_NODEITEM_FirstChild); |
| 540 pTemplateChild; pTemplateChild = pTemplateChild->GetNodeItem( | 540 pTemplateChild; pTemplateChild = pTemplateChild->GetNodeItem( |
| 541 XFA_NODEITEM_NextSibling)) { | 541 XFA_NODEITEM_NextSibling)) { |
| 542 if (XFA_NeedGenerateForm(pTemplateChild)) { | 542 if (XFA_NeedGenerateForm(pTemplateChild)) { |
| 543 CXFA_Node* pNewChild = pTemplateChild->CloneTemplateToForm(TRUE); | 543 CXFA_Node* pNewChild = pTemplateChild->CloneTemplateToForm(TRUE); |
| 544 pNewNode->InsertChild(pNewChild, NULL); | 544 pNewNode->InsertChild(pNewChild, nullptr); |
| 545 } | 545 } |
| 546 } | 546 } |
| 547 } | 547 } |
| 548 return pNewNode; | 548 return pNewNode; |
| 549 } | 549 } |
| 550 static CXFA_Node* XFA_NodeMerge_CloneOrMergeInstanceManager( | 550 static CXFA_Node* XFA_NodeMerge_CloneOrMergeInstanceManager( |
| 551 CXFA_Document* pDocument, | 551 CXFA_Document* pDocument, |
| 552 CXFA_Node* pFormParent, | 552 CXFA_Node* pFormParent, |
| 553 CXFA_Node* pTemplateNode, | 553 CXFA_Node* pTemplateNode, |
| 554 CXFA_NodeArray& subforms) { | 554 CXFA_NodeArray& subforms) { |
| (...skipping 30 matching lines...) Expand all Loading... |
| 585 pExistingNode->ClearFlag(XFA_NODEFLAG_UnusedNode); | 585 pExistingNode->ClearFlag(XFA_NODEFLAG_UnusedNode); |
| 586 pExistingNode->SetTemplateNode(pTemplateNode); | 586 pExistingNode->SetTemplateNode(pTemplateNode); |
| 587 return pExistingNode; | 587 return pExistingNode; |
| 588 } | 588 } |
| 589 CXFA_Node* pNewNode = pDocument->GetParser()->GetFactory()->CreateNode( | 589 CXFA_Node* pNewNode = pDocument->GetParser()->GetFactory()->CreateNode( |
| 590 XFA_XDPPACKET_Form, XFA_ELEMENT_InstanceManager); | 590 XFA_XDPPACKET_Form, XFA_ELEMENT_InstanceManager); |
| 591 ASSERT(pNewNode); | 591 ASSERT(pNewNode); |
| 592 wsInstMgrNodeName = | 592 wsInstMgrNodeName = |
| 593 FX_WSTRC(L"_") + pTemplateNode->GetCData(XFA_ATTRIBUTE_Name); | 593 FX_WSTRC(L"_") + pTemplateNode->GetCData(XFA_ATTRIBUTE_Name); |
| 594 pNewNode->SetCData(XFA_ATTRIBUTE_Name, wsInstMgrNodeName); | 594 pNewNode->SetCData(XFA_ATTRIBUTE_Name, wsInstMgrNodeName); |
| 595 pFormParent->InsertChild(pNewNode, NULL); | 595 pFormParent->InsertChild(pNewNode, nullptr); |
| 596 pNewNode->SetTemplateNode(pTemplateNode); | 596 pNewNode->SetTemplateNode(pTemplateNode); |
| 597 return pNewNode; | 597 return pNewNode; |
| 598 } | 598 } |
| 599 static CXFA_Node* XFA_DataMerge_FindMatchingDataNode( | 599 static CXFA_Node* XFA_DataMerge_FindMatchingDataNode( |
| 600 CXFA_Document* pDocument, | 600 CXFA_Document* pDocument, |
| 601 CXFA_Node* pTemplateNode, | 601 CXFA_Node* pTemplateNode, |
| 602 CXFA_Node* pDataScope, | 602 CXFA_Node* pDataScope, |
| 603 FX_BOOL& bAccessedDataDOM, | 603 FX_BOOL& bAccessedDataDOM, |
| 604 FX_BOOL bForceBind, | 604 FX_BOOL bForceBind, |
| 605 CXFA_NodeIteratorTemplate<CXFA_Node, | 605 CXFA_NodeIteratorTemplate<CXFA_Node, |
| 606 CXFA_TraverseStrategy_XFAContainerNode>* | 606 CXFA_TraverseStrategy_XFAContainerNode>* |
| 607 pIterator, | 607 pIterator, |
| 608 FX_BOOL& bSelfMatch, | 608 FX_BOOL& bSelfMatch, |
| 609 XFA_ATTRIBUTEENUM& eBindMatch, | 609 XFA_ATTRIBUTEENUM& eBindMatch, |
| 610 FX_BOOL bUpLevel = TRUE) { | 610 FX_BOOL bUpLevel = TRUE) { |
| 611 FX_BOOL bOwnIterator = FALSE; | 611 FX_BOOL bOwnIterator = FALSE; |
| 612 if (!pIterator) { | 612 if (!pIterator) { |
| 613 bOwnIterator = TRUE; | 613 bOwnIterator = TRUE; |
| 614 pIterator = new CXFA_NodeIteratorTemplate< | 614 pIterator = new CXFA_NodeIteratorTemplate< |
| 615 CXFA_Node, CXFA_TraverseStrategy_XFAContainerNode>(pTemplateNode); | 615 CXFA_Node, CXFA_TraverseStrategy_XFAContainerNode>(pTemplateNode); |
| 616 } | 616 } |
| 617 CXFA_Node* pResult = NULL; | 617 CXFA_Node* pResult = nullptr; |
| 618 for (CXFA_Node* pCurTemplateNode = pIterator->GetCurrent(); | 618 for (CXFA_Node* pCurTemplateNode = pIterator->GetCurrent(); |
| 619 pCurTemplateNode;) { | 619 pCurTemplateNode;) { |
| 620 XFA_ELEMENT eMatchNodeType; | 620 XFA_ELEMENT eMatchNodeType; |
| 621 switch (pCurTemplateNode->GetClassID()) { | 621 switch (pCurTemplateNode->GetClassID()) { |
| 622 case XFA_ELEMENT_Subform: | 622 case XFA_ELEMENT_Subform: |
| 623 eMatchNodeType = XFA_ELEMENT_DataGroup; | 623 eMatchNodeType = XFA_ELEMENT_DataGroup; |
| 624 break; | 624 break; |
| 625 case XFA_ELEMENT_Field: { | 625 case XFA_ELEMENT_Field: { |
| 626 eMatchNodeType = XFA_FieldIsMultiListBox(pCurTemplateNode) | 626 eMatchNodeType = XFA_FieldIsMultiListBox(pCurTemplateNode) |
| 627 ? XFA_ELEMENT_DataGroup | 627 ? XFA_ELEMENT_DataGroup |
| (...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 746 } | 746 } |
| 747 } | 747 } |
| 748 static CXFA_Node* XFA_DataMerge_CopyContainer_SubformSet( | 748 static CXFA_Node* XFA_DataMerge_CopyContainer_SubformSet( |
| 749 CXFA_Document* pDocument, | 749 CXFA_Document* pDocument, |
| 750 CXFA_Node* pTemplateNode, | 750 CXFA_Node* pTemplateNode, |
| 751 CXFA_Node* pFormParentNode, | 751 CXFA_Node* pFormParentNode, |
| 752 CXFA_Node* pDataScope, | 752 CXFA_Node* pDataScope, |
| 753 FX_BOOL bOneInstance, | 753 FX_BOOL bOneInstance, |
| 754 FX_BOOL bDataMerge) { | 754 FX_BOOL bDataMerge) { |
| 755 XFA_ELEMENT eElement = pTemplateNode->GetClassID(); | 755 XFA_ELEMENT eElement = pTemplateNode->GetClassID(); |
| 756 CXFA_Node* pOccurNode = NULL; | 756 CXFA_Node* pOccurNode = nullptr; |
| 757 CXFA_Node* pFirstInstance = NULL; | 757 CXFA_Node* pFirstInstance = nullptr; |
| 758 FX_BOOL bUseInstanceManager = | 758 FX_BOOL bUseInstanceManager = |
| 759 pFormParentNode->GetClassID() != XFA_ELEMENT_Area; | 759 pFormParentNode->GetClassID() != XFA_ELEMENT_Area; |
| 760 CXFA_Node* pInstMgrNode = NULL; | 760 CXFA_Node* pInstMgrNode = nullptr; |
| 761 CXFA_NodeArray subformArray; | 761 CXFA_NodeArray subformArray; |
| 762 CXFA_NodeArray* pSearchArray = NULL; | 762 CXFA_NodeArray* pSearchArray = nullptr; |
| 763 if (!bOneInstance && | 763 if (!bOneInstance && |
| 764 (eElement == XFA_ELEMENT_SubformSet || eElement == XFA_ELEMENT_Subform)) { | 764 (eElement == XFA_ELEMENT_SubformSet || eElement == XFA_ELEMENT_Subform)) { |
| 765 pInstMgrNode = | 765 pInstMgrNode = |
| 766 bUseInstanceManager | 766 bUseInstanceManager |
| 767 ? XFA_NodeMerge_CloneOrMergeInstanceManager( | 767 ? XFA_NodeMerge_CloneOrMergeInstanceManager( |
| 768 pDocument, pFormParentNode, pTemplateNode, subformArray) | 768 pDocument, pFormParentNode, pTemplateNode, subformArray) |
| 769 : NULL; | 769 : nullptr; |
| 770 if (CXFA_Node* pOccurTemplateNode = | 770 if (CXFA_Node* pOccurTemplateNode = |
| 771 pTemplateNode->GetFirstChildByClass(XFA_ELEMENT_Occur)) { | 771 pTemplateNode->GetFirstChildByClass(XFA_ELEMENT_Occur)) { |
| 772 pOccurNode = pInstMgrNode | 772 pOccurNode = pInstMgrNode |
| 773 ? XFA_NodeMerge_CloneOrMergeContainer( | 773 ? XFA_NodeMerge_CloneOrMergeContainer( |
| 774 pDocument, pInstMgrNode, pOccurTemplateNode, FALSE) | 774 pDocument, pInstMgrNode, pOccurTemplateNode, FALSE) |
| 775 : pOccurTemplateNode; | 775 : pOccurTemplateNode; |
| 776 } else if (pInstMgrNode) { | 776 } else if (pInstMgrNode) { |
| 777 pOccurNode = pInstMgrNode->GetFirstChildByClass(XFA_ELEMENT_Occur); | 777 pOccurNode = pInstMgrNode->GetFirstChildByClass(XFA_ELEMENT_Occur); |
| 778 if (pOccurNode) { | 778 if (pOccurNode) { |
| 779 pOccurNode->ClearFlag(XFA_NODEFLAG_UnusedNode); | 779 pOccurNode->ClearFlag(XFA_NODEFLAG_UnusedNode); |
| 780 } | 780 } |
| 781 } | 781 } |
| 782 if (pInstMgrNode) { | 782 if (pInstMgrNode) { |
| 783 pInstMgrNode->SetFlag(XFA_NODEFLAG_Initialized, true); | 783 pInstMgrNode->SetFlag(XFA_NODEFLAG_Initialized, true); |
| 784 pSearchArray = &subformArray; | 784 pSearchArray = &subformArray; |
| 785 if (pFormParentNode->GetClassID() == XFA_ELEMENT_PageArea) { | 785 if (pFormParentNode->GetClassID() == XFA_ELEMENT_PageArea) { |
| 786 bOneInstance = TRUE; | 786 bOneInstance = TRUE; |
| 787 if (subformArray.GetSize() < 1) { | 787 if (subformArray.GetSize() < 1) { |
| 788 pSearchArray = NULL; | 788 pSearchArray = nullptr; |
| 789 } | 789 } |
| 790 } else if ((pTemplateNode->GetNameHash() == 0) && | 790 } else if ((pTemplateNode->GetNameHash() == 0) && |
| 791 (subformArray.GetSize() < 1)) { | 791 (subformArray.GetSize() < 1)) { |
| 792 pSearchArray = NULL; | 792 pSearchArray = nullptr; |
| 793 } | 793 } |
| 794 } | 794 } |
| 795 } | 795 } |
| 796 int32_t iMax = 1, iInit = 1, iMin = 1; | 796 int32_t iMax = 1, iInit = 1, iMin = 1; |
| 797 if (!bOneInstance) { | 797 if (!bOneInstance) { |
| 798 XFA_GetOccurInfo(pOccurNode, iMin, iMax, iInit); | 798 XFA_GetOccurInfo(pOccurNode, iMin, iMax, iInit); |
| 799 } | 799 } |
| 800 XFA_ATTRIBUTEENUM eRelation = | 800 XFA_ATTRIBUTEENUM eRelation = |
| 801 eElement == XFA_ELEMENT_SubformSet | 801 eElement == XFA_ELEMENT_SubformSet |
| 802 ? pTemplateNode->GetEnum(XFA_ATTRIBUTE_Relation) | 802 ? pTemplateNode->GetEnum(XFA_ATTRIBUTE_Relation) |
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 883 XFA_NodeMerge_CloneOrMergeContainer(pDocument, pSubformSetNode, | 883 XFA_NodeMerge_CloneOrMergeContainer(pDocument, pSubformSetNode, |
| 884 pTemplateChild, TRUE); | 884 pTemplateChild, TRUE); |
| 885 } else if (pTemplateChild->GetObjectType() == | 885 } else if (pTemplateChild->GetObjectType() == |
| 886 XFA_OBJECTTYPE_ContainerNode) { | 886 XFA_OBJECTTYPE_ContainerNode) { |
| 887 bSelfMatch = FALSE; | 887 bSelfMatch = FALSE; |
| 888 eBindMatch = XFA_ATTRIBUTEENUM_None; | 888 eBindMatch = XFA_ATTRIBUTEENUM_None; |
| 889 CXFA_Node* pDataMatch; | 889 CXFA_Node* pDataMatch; |
| 890 if (eRelation != XFA_ATTRIBUTEENUM_Ordered && | 890 if (eRelation != XFA_ATTRIBUTEENUM_Ordered && |
| 891 (pDataMatch = XFA_DataMerge_FindMatchingDataNode( | 891 (pDataMatch = XFA_DataMerge_FindMatchingDataNode( |
| 892 pDocument, pTemplateChild, pDataScope, bAccessedDataDOM, | 892 pDocument, pTemplateChild, pDataScope, bAccessedDataDOM, |
| 893 FALSE, NULL, bSelfMatch, eBindMatch)) != nullptr) { | 893 FALSE, nullptr, bSelfMatch, eBindMatch)) != nullptr) { |
| 894 XFA_DataMerge_RecurseRecord sNewRecord = {pTemplateChild, | 894 XFA_DataMerge_RecurseRecord sNewRecord = {pTemplateChild, |
| 895 pDataMatch}; | 895 pDataMatch}; |
| 896 if (bSelfMatch) { | 896 if (bSelfMatch) { |
| 897 rgItemMatchList.InsertAt(0, sNewRecord); | 897 rgItemMatchList.InsertAt(0, sNewRecord); |
| 898 } else { | 898 } else { |
| 899 rgItemMatchList.Add(sNewRecord); | 899 rgItemMatchList.Add(sNewRecord); |
| 900 } | 900 } |
| 901 } else { | 901 } else { |
| 902 rgItemUnmatchList.Add(pTemplateChild); | 902 rgItemUnmatchList.Add(pTemplateChild); |
| 903 } | 903 } |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 958 if (iLimit < iMin) { | 958 if (iLimit < iMin) { |
| 959 iLimit = iInit; | 959 iLimit = iInit; |
| 960 } | 960 } |
| 961 } | 961 } |
| 962 for (; (iLimit < 0 || iCurRepeatIndex < iLimit); iCurRepeatIndex++) { | 962 for (; (iLimit < 0 || iCurRepeatIndex < iLimit); iCurRepeatIndex++) { |
| 963 if (pInstMgrNode) { | 963 if (pInstMgrNode) { |
| 964 if (pSearchArray && pSearchArray->GetSize() < 1) { | 964 if (pSearchArray && pSearchArray->GetSize() < 1) { |
| 965 if (pTemplateNode->GetNameHash() != 0) { | 965 if (pTemplateNode->GetNameHash() != 0) { |
| 966 break; | 966 break; |
| 967 } | 967 } |
| 968 pSearchArray = NULL; | 968 pSearchArray = nullptr; |
| 969 } | 969 } |
| 970 } else if (!XFA_DataMerge_FindFormDOMInstance( | 970 } else if (!XFA_DataMerge_FindFormDOMInstance( |
| 971 pDocument, pTemplateNode->GetClassID(), | 971 pDocument, pTemplateNode->GetClassID(), |
| 972 pTemplateNode->GetNameHash(), pFormParentNode)) { | 972 pTemplateNode->GetNameHash(), pFormParentNode)) { |
| 973 break; | 973 break; |
| 974 } | 974 } |
| 975 CXFA_Node* pSubformNode = XFA_NodeMerge_CloneOrMergeContainer( | 975 CXFA_Node* pSubformNode = XFA_NodeMerge_CloneOrMergeContainer( |
| 976 pDocument, pFormParentNode, pTemplateNode, FALSE, pSearchArray); | 976 pDocument, pFormParentNode, pTemplateNode, FALSE, pSearchArray); |
| 977 ASSERT(pSubformNode); | 977 ASSERT(pSubformNode); |
| 978 if (!pFirstInstance) { | 978 if (!pFirstInstance) { |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1036 pTemplateNode->GetNodeItem(XFA_NODEITEM_FirstChild); | 1036 pTemplateNode->GetNodeItem(XFA_NODEITEM_FirstChild); |
| 1037 pTemplateChildNode; pTemplateChildNode = pTemplateChildNode->GetNodeItem( | 1037 pTemplateChildNode; pTemplateChildNode = pTemplateChildNode->GetNodeItem( |
| 1038 XFA_NODEITEM_NextSibling)) { | 1038 XFA_NODEITEM_NextSibling)) { |
| 1039 if (XFA_NeedGenerateForm(pTemplateChildNode)) { | 1039 if (XFA_NeedGenerateForm(pTemplateChildNode)) { |
| 1040 XFA_NodeMerge_CloneOrMergeContainer(pDocument, pFieldNode, | 1040 XFA_NodeMerge_CloneOrMergeContainer(pDocument, pFieldNode, |
| 1041 pTemplateChildNode, TRUE); | 1041 pTemplateChildNode, TRUE); |
| 1042 } else if (pTemplateNode->GetClassID() == XFA_ELEMENT_ExclGroup && | 1042 } else if (pTemplateNode->GetClassID() == XFA_ELEMENT_ExclGroup && |
| 1043 pTemplateChildNode->IsContainerNode()) { | 1043 pTemplateChildNode->IsContainerNode()) { |
| 1044 if (pTemplateChildNode->GetClassID() == XFA_ELEMENT_Field) { | 1044 if (pTemplateChildNode->GetClassID() == XFA_ELEMENT_Field) { |
| 1045 XFA_DataMerge_CopyContainer_Field(pDocument, pTemplateChildNode, | 1045 XFA_DataMerge_CopyContainer_Field(pDocument, pTemplateChildNode, |
| 1046 pFieldNode, NULL, FALSE); | 1046 pFieldNode, nullptr, FALSE); |
| 1047 } | 1047 } |
| 1048 } | 1048 } |
| 1049 } | 1049 } |
| 1050 if (bDataMerge) { | 1050 if (bDataMerge) { |
| 1051 FX_BOOL bAccessedDataDOM = FALSE; | 1051 FX_BOOL bAccessedDataDOM = FALSE; |
| 1052 FX_BOOL bSelfMatch = FALSE; | 1052 FX_BOOL bSelfMatch = FALSE; |
| 1053 XFA_ATTRIBUTEENUM eBindMatch; | 1053 XFA_ATTRIBUTEENUM eBindMatch; |
| 1054 CXFA_Node* pDataNode = XFA_DataMerge_FindMatchingDataNode( | 1054 CXFA_Node* pDataNode = XFA_DataMerge_FindMatchingDataNode( |
| 1055 pDocument, pTemplateNode, pDataScope, bAccessedDataDOM, TRUE, NULL, | 1055 pDocument, pTemplateNode, pDataScope, bAccessedDataDOM, TRUE, nullptr, |
| 1056 bSelfMatch, eBindMatch, bUpLevel); | 1056 bSelfMatch, eBindMatch, bUpLevel); |
| 1057 if (pDataNode) { | 1057 if (pDataNode) { |
| 1058 XFA_DataMerge_CreateDataBinding(pFieldNode, pDataNode); | 1058 XFA_DataMerge_CreateDataBinding(pFieldNode, pDataNode); |
| 1059 } | 1059 } |
| 1060 } else { | 1060 } else { |
| 1061 XFA_DataMerge_FormValueNode_MatchNoneCreateChild(pFieldNode); | 1061 XFA_DataMerge_FormValueNode_MatchNoneCreateChild(pFieldNode); |
| 1062 } | 1062 } |
| 1063 return pFieldNode; | 1063 return pFieldNode; |
| 1064 } | 1064 } |
| 1065 CXFA_Node* CXFA_Document::DataMerge_CopyContainer(CXFA_Node* pTemplateNode, | 1065 CXFA_Node* CXFA_Document::DataMerge_CopyContainer(CXFA_Node* pTemplateNode, |
| (...skipping 16 matching lines...) Expand all Loading... |
| 1082 return XFA_DataMerge_CopyContainer_Field( | 1082 return XFA_DataMerge_CopyContainer_Field( |
| 1083 this, pTemplateNode, pFormNode, pDataScope, bDataMerge, bUpLevel); | 1083 this, pTemplateNode, pFormNode, pDataScope, bDataMerge, bUpLevel); |
| 1084 case XFA_ELEMENT_PageSet: | 1084 case XFA_ELEMENT_PageSet: |
| 1085 break; | 1085 break; |
| 1086 case XFA_ELEMENT_Variables: | 1086 case XFA_ELEMENT_Variables: |
| 1087 break; | 1087 break; |
| 1088 default: | 1088 default: |
| 1089 ASSERT(FALSE); | 1089 ASSERT(FALSE); |
| 1090 break; | 1090 break; |
| 1091 } | 1091 } |
| 1092 return NULL; | 1092 return nullptr; |
| 1093 } | 1093 } |
| 1094 | 1094 |
| 1095 static void XFA_DataMerge_UpdateBindingRelations(CXFA_Document* pDocument, | 1095 static void XFA_DataMerge_UpdateBindingRelations(CXFA_Document* pDocument, |
| 1096 CXFA_Node* pFormNode, | 1096 CXFA_Node* pFormNode, |
| 1097 CXFA_Node* pDataScope, | 1097 CXFA_Node* pDataScope, |
| 1098 FX_BOOL bDataRef, | 1098 FX_BOOL bDataRef, |
| 1099 FX_BOOL bParentDataRef) { | 1099 FX_BOOL bParentDataRef) { |
| 1100 FX_BOOL bMatchRef = TRUE; | 1100 FX_BOOL bMatchRef = TRUE; |
| 1101 XFA_ELEMENT eClassID = pFormNode->GetClassID(); | 1101 XFA_ELEMENT eClassID = pFormNode->GetClassID(); |
| 1102 CXFA_Node* pDataNode = pFormNode->GetBindData(); | 1102 CXFA_Node* pDataNode = pFormNode->GetBindData(); |
| 1103 if (eClassID == XFA_ELEMENT_Subform || eClassID == XFA_ELEMENT_ExclGroup || | 1103 if (eClassID == XFA_ELEMENT_Subform || eClassID == XFA_ELEMENT_ExclGroup || |
| 1104 eClassID == XFA_ELEMENT_Field) { | 1104 eClassID == XFA_ELEMENT_Field) { |
| 1105 CXFA_Node* pTemplateNode = pFormNode->GetTemplateNode(); | 1105 CXFA_Node* pTemplateNode = pFormNode->GetTemplateNode(); |
| 1106 CXFA_Node* pTemplateNodeBind = | 1106 CXFA_Node* pTemplateNodeBind = |
| 1107 pTemplateNode ? pTemplateNode->GetFirstChildByClass(XFA_ELEMENT_Bind) | 1107 pTemplateNode ? pTemplateNode->GetFirstChildByClass(XFA_ELEMENT_Bind) |
| 1108 : NULL; | 1108 : nullptr; |
| 1109 XFA_ATTRIBUTEENUM eMatch = | 1109 XFA_ATTRIBUTEENUM eMatch = |
| 1110 pTemplateNodeBind ? pTemplateNodeBind->GetEnum(XFA_ATTRIBUTE_Match) | 1110 pTemplateNodeBind ? pTemplateNodeBind->GetEnum(XFA_ATTRIBUTE_Match) |
| 1111 : XFA_ATTRIBUTEENUM_Once; | 1111 : XFA_ATTRIBUTEENUM_Once; |
| 1112 switch (eMatch) { | 1112 switch (eMatch) { |
| 1113 case XFA_ATTRIBUTEENUM_None: | 1113 case XFA_ATTRIBUTEENUM_None: |
| 1114 if (!bDataRef || bParentDataRef) { | 1114 if (!bDataRef || bParentDataRef) { |
| 1115 XFA_DataMerge_FormValueNode_MatchNoneCreateChild(pFormNode); | 1115 XFA_DataMerge_FormValueNode_MatchNoneCreateChild(pFormNode); |
| 1116 } | 1116 } |
| 1117 break; | 1117 break; |
| 1118 case XFA_ATTRIBUTEENUM_Once: | 1118 case XFA_ATTRIBUTEENUM_Once: |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1179 bMatchRef = bDataRef; | 1179 bMatchRef = bDataRef; |
| 1180 bParentDataRef = TRUE; | 1180 bParentDataRef = TRUE; |
| 1181 if (!pDataNode && bDataRef) { | 1181 if (!pDataNode && bDataRef) { |
| 1182 CFX_WideStringC wsRef = | 1182 CFX_WideStringC wsRef = |
| 1183 pTemplateNodeBind->GetCData(XFA_ATTRIBUTE_Ref); | 1183 pTemplateNodeBind->GetCData(XFA_ATTRIBUTE_Ref); |
| 1184 uint32_t dFlags = | 1184 uint32_t dFlags = |
| 1185 XFA_RESOLVENODE_Children | XFA_RESOLVENODE_CreateNode; | 1185 XFA_RESOLVENODE_Children | XFA_RESOLVENODE_CreateNode; |
| 1186 XFA_RESOLVENODE_RS rs; | 1186 XFA_RESOLVENODE_RS rs; |
| 1187 pDocument->GetScriptContext()->ResolveObjects(pDataScope, wsRef, rs, | 1187 pDocument->GetScriptContext()->ResolveObjects(pDataScope, wsRef, rs, |
| 1188 dFlags, pTemplateNode); | 1188 dFlags, pTemplateNode); |
| 1189 CXFA_Object* pObject = (rs.nodes.GetSize() > 0) ? rs.nodes[0] : NULL; | 1189 CXFA_Object* pObject = |
| 1190 (rs.nodes.GetSize() > 0) ? rs.nodes[0] : nullptr; |
| 1190 pDataNode = ToNode(pObject); | 1191 pDataNode = ToNode(pObject); |
| 1191 if (pDataNode) { | 1192 if (pDataNode) { |
| 1192 XFA_DataMerge_CreateDataBinding( | 1193 XFA_DataMerge_CreateDataBinding( |
| 1193 pFormNode, pDataNode, | 1194 pFormNode, pDataNode, |
| 1194 rs.dwFlags == XFA_RESOVENODE_RSTYPE_ExistNodes); | 1195 rs.dwFlags == XFA_RESOVENODE_RSTYPE_ExistNodes); |
| 1195 } else { | 1196 } else { |
| 1196 XFA_DataMerge_FormValueNode_MatchNoneCreateChild(pFormNode); | 1197 XFA_DataMerge_FormValueNode_MatchNoneCreateChild(pFormNode); |
| 1197 } | 1198 } |
| 1198 } | 1199 } |
| 1199 } break; | 1200 } break; |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1259 if (!pDatasetsRoot) { | 1260 if (!pDatasetsRoot) { |
| 1260 CFDE_XMLElement* pDatasetsXMLNode = new CFDE_XMLElement(L"xfa:datasets"); | 1261 CFDE_XMLElement* pDatasetsXMLNode = new CFDE_XMLElement(L"xfa:datasets"); |
| 1261 pDatasetsXMLNode->SetString(L"xmlns:xfa", | 1262 pDatasetsXMLNode->SetString(L"xmlns:xfa", |
| 1262 L"http://www.xfa.org/schema/xfa-data/1.0/"); | 1263 L"http://www.xfa.org/schema/xfa-data/1.0/"); |
| 1263 pDatasetsRoot = CreateNode(XFA_XDPPACKET_Datasets, XFA_ELEMENT_DataModel); | 1264 pDatasetsRoot = CreateNode(XFA_XDPPACKET_Datasets, XFA_ELEMENT_DataModel); |
| 1264 pDatasetsRoot->SetCData(XFA_ATTRIBUTE_Name, L"datasets"); | 1265 pDatasetsRoot->SetCData(XFA_ATTRIBUTE_Name, L"datasets"); |
| 1265 m_pRootNode->GetXMLMappingNode()->InsertChildNode(pDatasetsXMLNode); | 1266 m_pRootNode->GetXMLMappingNode()->InsertChildNode(pDatasetsXMLNode); |
| 1266 m_pRootNode->InsertChild(pDatasetsRoot); | 1267 m_pRootNode->InsertChild(pDatasetsRoot); |
| 1267 pDatasetsRoot->SetXMLMappingNode(pDatasetsXMLNode); | 1268 pDatasetsRoot->SetXMLMappingNode(pDatasetsXMLNode); |
| 1268 } | 1269 } |
| 1269 CXFA_Node *pDataRoot = NULL, *pDDRoot = NULL; | 1270 CXFA_Node *pDataRoot = nullptr, *pDDRoot = nullptr; |
| 1270 CFX_WideString wsDatasetsURI; | 1271 CFX_WideString wsDatasetsURI; |
| 1271 pDatasetsRoot->TryNamespace(wsDatasetsURI); | 1272 pDatasetsRoot->TryNamespace(wsDatasetsURI); |
| 1272 for (CXFA_Node* pChildNode = | 1273 for (CXFA_Node* pChildNode = |
| 1273 pDatasetsRoot->GetNodeItem(XFA_NODEITEM_FirstChild); | 1274 pDatasetsRoot->GetNodeItem(XFA_NODEITEM_FirstChild); |
| 1274 pChildNode; | 1275 pChildNode; |
| 1275 pChildNode = pChildNode->GetNodeItem(XFA_NODEITEM_NextSibling)) { | 1276 pChildNode = pChildNode->GetNodeItem(XFA_NODEITEM_NextSibling)) { |
| 1276 if (pChildNode->GetClassID() != XFA_ELEMENT_DataGroup) { | 1277 if (pChildNode->GetClassID() != XFA_ELEMENT_DataGroup) { |
| 1277 continue; | 1278 continue; |
| 1278 } | 1279 } |
| 1279 CFX_WideString wsNamespaceURI; | 1280 CFX_WideString wsNamespaceURI; |
| (...skipping 26 matching lines...) Expand all Loading... |
| 1306 } | 1307 } |
| 1307 CXFA_Node* pDataTopLevel = | 1308 CXFA_Node* pDataTopLevel = |
| 1308 pDataRoot->GetFirstChildByClass(XFA_ELEMENT_DataGroup); | 1309 pDataRoot->GetFirstChildByClass(XFA_ELEMENT_DataGroup); |
| 1309 uint32_t dwNameHash = pDataTopLevel ? pDataTopLevel->GetNameHash() : 0; | 1310 uint32_t dwNameHash = pDataTopLevel ? pDataTopLevel->GetNameHash() : 0; |
| 1310 CXFA_Node* pTemplateRoot = | 1311 CXFA_Node* pTemplateRoot = |
| 1311 m_pRootNode->GetFirstChildByClass(XFA_ELEMENT_Template); | 1312 m_pRootNode->GetFirstChildByClass(XFA_ELEMENT_Template); |
| 1312 if (!pTemplateRoot) { | 1313 if (!pTemplateRoot) { |
| 1313 return; | 1314 return; |
| 1314 } | 1315 } |
| 1315 CXFA_Node* pTemplateChosen = | 1316 CXFA_Node* pTemplateChosen = |
| 1316 dwNameHash != 0 ? pTemplateRoot->GetFirstChildByName(dwNameHash) : NULL; | 1317 dwNameHash != 0 ? pTemplateRoot->GetFirstChildByName(dwNameHash) |
| 1318 : nullptr; |
| 1317 if (!pTemplateChosen || | 1319 if (!pTemplateChosen || |
| 1318 pTemplateChosen->GetClassID() != XFA_ELEMENT_Subform) { | 1320 pTemplateChosen->GetClassID() != XFA_ELEMENT_Subform) { |
| 1319 pTemplateChosen = pTemplateRoot->GetFirstChildByClass(XFA_ELEMENT_Subform); | 1321 pTemplateChosen = pTemplateRoot->GetFirstChildByClass(XFA_ELEMENT_Subform); |
| 1320 } | 1322 } |
| 1321 if (!pTemplateChosen) { | 1323 if (!pTemplateChosen) { |
| 1322 return; | 1324 return; |
| 1323 } | 1325 } |
| 1324 CXFA_Node* pFormRoot = m_pRootNode->GetFirstChildByClass(XFA_ELEMENT_Form); | 1326 CXFA_Node* pFormRoot = m_pRootNode->GetFirstChildByClass(XFA_ELEMENT_Form); |
| 1325 FX_BOOL bEmptyForm = FALSE; | 1327 FX_BOOL bEmptyForm = FALSE; |
| 1326 if (!pFormRoot) { | 1328 if (!pFormRoot) { |
| 1327 bEmptyForm = TRUE; | 1329 bEmptyForm = TRUE; |
| 1328 pFormRoot = CreateNode(XFA_XDPPACKET_Form, XFA_ELEMENT_Form); | 1330 pFormRoot = CreateNode(XFA_XDPPACKET_Form, XFA_ELEMENT_Form); |
| 1329 ASSERT(pFormRoot); | 1331 ASSERT(pFormRoot); |
| 1330 pFormRoot->SetCData(XFA_ATTRIBUTE_Name, L"form"); | 1332 pFormRoot->SetCData(XFA_ATTRIBUTE_Name, L"form"); |
| 1331 m_pRootNode->InsertChild(pFormRoot, NULL); | 1333 m_pRootNode->InsertChild(pFormRoot, nullptr); |
| 1332 } else { | 1334 } else { |
| 1333 CXFA_NodeIteratorTemplate<CXFA_Node, CXFA_TraverseStrategy_XFANode> | 1335 CXFA_NodeIteratorTemplate<CXFA_Node, CXFA_TraverseStrategy_XFANode> |
| 1334 sIterator(pFormRoot); | 1336 sIterator(pFormRoot); |
| 1335 for (CXFA_Node* pNode = sIterator.MoveToNext(); pNode; | 1337 for (CXFA_Node* pNode = sIterator.MoveToNext(); pNode; |
| 1336 pNode = sIterator.MoveToNext()) { | 1338 pNode = sIterator.MoveToNext()) { |
| 1337 pNode->SetFlag(XFA_NODEFLAG_UnusedNode, true); | 1339 pNode->SetFlag(XFA_NODEFLAG_UnusedNode, true); |
| 1338 } | 1340 } |
| 1339 } | 1341 } |
| 1340 CXFA_Node* pSubformSetNode = XFA_NodeMerge_CloneOrMergeContainer( | 1342 CXFA_Node* pSubformSetNode = XFA_NodeMerge_CloneOrMergeContainer( |
| 1341 this, pFormRoot, pTemplateChosen, FALSE); | 1343 this, pFormRoot, pTemplateChosen, FALSE); |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1402 } | 1404 } |
| 1403 } | 1405 } |
| 1404 } | 1406 } |
| 1405 } | 1407 } |
| 1406 void CXFA_Document::DoDataRemerge(FX_BOOL bDoDataMerge) { | 1408 void CXFA_Document::DoDataRemerge(FX_BOOL bDoDataMerge) { |
| 1407 CXFA_Node* pFormRoot = ToNode(GetXFAObject(XFA_HASHCODE_Form)); | 1409 CXFA_Node* pFormRoot = ToNode(GetXFAObject(XFA_HASHCODE_Form)); |
| 1408 if (pFormRoot) { | 1410 if (pFormRoot) { |
| 1409 while (CXFA_Node* pNode = pFormRoot->GetNodeItem(XFA_NODEITEM_FirstChild)) { | 1411 while (CXFA_Node* pNode = pFormRoot->GetNodeItem(XFA_NODEITEM_FirstChild)) { |
| 1410 pFormRoot->RemoveChild(pNode); | 1412 pFormRoot->RemoveChild(pNode); |
| 1411 } | 1413 } |
| 1412 pFormRoot->SetObject(XFA_ATTRIBUTE_BindingNode, NULL); | 1414 pFormRoot->SetObject(XFA_ATTRIBUTE_BindingNode, nullptr); |
| 1413 } | 1415 } |
| 1414 XFA_DataMerge_ClearGlobalBinding(this); | 1416 XFA_DataMerge_ClearGlobalBinding(this); |
| 1415 if (bDoDataMerge) { | 1417 if (bDoDataMerge) { |
| 1416 DoDataMerge(); | 1418 DoDataMerge(); |
| 1417 } | 1419 } |
| 1418 CXFA_LayoutProcessor* pLayoutProcessor = GetLayoutProcessor(); | 1420 CXFA_LayoutProcessor* pLayoutProcessor = GetLayoutProcessor(); |
| 1419 pLayoutProcessor->SetForceReLayout(TRUE); | 1421 pLayoutProcessor->SetForceReLayout(TRUE); |
| 1420 } | 1422 } |
| OLD | NEW |