Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(69)

Side by Side Diff: xfa/fxfa/parser/xfa_document_datamerger_imp.cpp

Issue 2031873003: Get rid of NULLs in xfa/ (Closed) Base URL: https://pdfium.googlesource.com/pdfium@nullptr_fpdfsdk
Patch Set: Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « xfa/fxfa/parser/xfa_document_datamerger_imp.h ('k') | xfa/fxfa/parser/xfa_document_imp.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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 }
OLDNEW
« no previous file with comments | « xfa/fxfa/parser/xfa_document_datamerger_imp.h ('k') | xfa/fxfa/parser/xfa_document_imp.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698