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

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

Issue 2083453003: Split the XFA_OBJECTTYPE enum into two parts. (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@master
Patch Set: Fix == nullptr 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
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 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
57 static FX_BOOL XFA_DataMerge_FormValueNode_SetChildContent( 57 static FX_BOOL XFA_DataMerge_FormValueNode_SetChildContent(
58 CXFA_Node* pValueNode, 58 CXFA_Node* pValueNode,
59 const CFX_WideString& wsContent, 59 const CFX_WideString& wsContent,
60 XFA_ELEMENT iType = XFA_ELEMENT_UNKNOWN) { 60 XFA_ELEMENT iType = XFA_ELEMENT_UNKNOWN) {
61 if (!pValueNode) { 61 if (!pValueNode) {
62 return FALSE; 62 return FALSE;
63 } 63 }
64 ASSERT(pValueNode->GetPacketID() == XFA_XDPPACKET_Form); 64 ASSERT(pValueNode->GetPacketID() == XFA_XDPPACKET_Form);
65 CXFA_Node* pChildNode = 65 CXFA_Node* pChildNode =
66 XFA_DataMerge_FormValueNode_CreateChild(pValueNode, iType); 66 XFA_DataMerge_FormValueNode_CreateChild(pValueNode, iType);
67 if (!pChildNode) { 67 if (!pChildNode)
68 return FALSE; 68 return FALSE;
69 } 69
70 XFA_OBJECTTYPE objectType = pChildNode->GetObjectType(); 70 switch (pChildNode->GetObjectType()) {
71 switch (objectType) { 71 case XFA_ObjectType::ContentNode: {
72 case XFA_OBJECTTYPE_ContentNode: {
73 CXFA_Node* pContentRawDataNode = 72 CXFA_Node* pContentRawDataNode =
74 pChildNode->GetNodeItem(XFA_NODEITEM_FirstChild); 73 pChildNode->GetNodeItem(XFA_NODEITEM_FirstChild);
75 if (!pContentRawDataNode) { 74 if (!pContentRawDataNode) {
76 XFA_ELEMENT element = XFA_ELEMENT_Sharptext; 75 XFA_ELEMENT element = XFA_ELEMENT_Sharptext;
77 if (pChildNode->GetClassID() == XFA_ELEMENT_ExData) { 76 if (pChildNode->GetClassID() == XFA_ELEMENT_ExData) {
78 CFX_WideString wsContentType; 77 CFX_WideString wsContentType;
79 pChildNode->GetAttribute(XFA_ATTRIBUTE_ContentType, wsContentType, 78 pChildNode->GetAttribute(XFA_ATTRIBUTE_ContentType, wsContentType,
80 FALSE); 79 FALSE);
81 if (wsContentType == FX_WSTRC(L"text/html")) { 80 if (wsContentType == FX_WSTRC(L"text/html")) {
82 element = XFA_ELEMENT_SharpxHTML; 81 element = XFA_ELEMENT_SharpxHTML;
83 } else if (wsContentType == FX_WSTRC(L"text/xml")) { 82 } else if (wsContentType == FX_WSTRC(L"text/xml")) {
84 element = XFA_ELEMENT_Sharpxml; 83 element = XFA_ELEMENT_Sharpxml;
85 } 84 }
86 } 85 }
87 pContentRawDataNode = pChildNode->CreateSamePacketNode(element); 86 pContentRawDataNode = pChildNode->CreateSamePacketNode(element);
88 pChildNode->InsertChild(pContentRawDataNode); 87 pChildNode->InsertChild(pContentRawDataNode);
89 } 88 }
90 pContentRawDataNode->SetCData(XFA_ATTRIBUTE_Value, wsContent); 89 pContentRawDataNode->SetCData(XFA_ATTRIBUTE_Value, wsContent);
91 } break; 90 } break;
92 case XFA_OBJECTTYPE_NodeC: 91 case XFA_ObjectType::NodeC:
93 case XFA_OBJECTTYPE_TextNode: 92 case XFA_ObjectType::TextNode:
94 case XFA_OBJECTTYPE_NodeV: { 93 case XFA_ObjectType::NodeV: {
95 pChildNode->SetCData(XFA_ATTRIBUTE_Value, wsContent); 94 pChildNode->SetCData(XFA_ATTRIBUTE_Value, wsContent);
96 } break; 95 } break;
97 default: 96 default:
98 ASSERT(FALSE); 97 ASSERT(FALSE);
99 break; 98 break;
100 } 99 }
101 return TRUE; 100 return TRUE;
102 } 101 }
103 static void XFA_DataMerge_CreateDataBinding(CXFA_Node* pFormNode, 102 static void XFA_DataMerge_CreateDataBinding(CXFA_Node* pFormNode,
104 CXFA_Node* pDataNode, 103 CXFA_Node* pDataNode,
(...skipping 361 matching lines...) Expand 10 before | Expand all | Expand 10 after
466 return NULL; 465 return NULL;
467 } 466 }
468 CXFA_Node* XFA_DataMerge_FindFormDOMInstance(CXFA_Document* pDocument, 467 CXFA_Node* XFA_DataMerge_FindFormDOMInstance(CXFA_Document* pDocument,
469 XFA_ELEMENT eClassID, 468 XFA_ELEMENT eClassID,
470 uint32_t dwNameHash, 469 uint32_t dwNameHash,
471 CXFA_Node* pFormParent) { 470 CXFA_Node* pFormParent) {
472 CXFA_Node* pFormChild = pFormParent->GetNodeItem(XFA_NODEITEM_FirstChild); 471 CXFA_Node* pFormChild = pFormParent->GetNodeItem(XFA_NODEITEM_FirstChild);
473 for (; pFormChild; 472 for (; pFormChild;
474 pFormChild = pFormChild->GetNodeItem(XFA_NODEITEM_NextSibling)) { 473 pFormChild = pFormChild->GetNodeItem(XFA_NODEITEM_NextSibling)) {
475 if (pFormChild->GetClassID() == eClassID && 474 if (pFormChild->GetClassID() == eClassID &&
476 pFormChild->GetNameHash() == dwNameHash && 475 pFormChild->GetNameHash() == dwNameHash && pFormChild->IsUnusedNode()) {
477 pFormChild->HasFlag(XFA_NODEFLAG_UnusedNode)) {
478 return pFormChild; 476 return pFormChild;
479 } 477 }
480 } 478 }
481 return NULL; 479 return NULL;
482 } 480 }
483 static FX_BOOL XFA_NeedGenerateForm(CXFA_Node* pTemplateChild, 481 static FX_BOOL XFA_NeedGenerateForm(CXFA_Node* pTemplateChild,
484 FX_BOOL bUseInstanceManager = TRUE) { 482 FX_BOOL bUseInstanceManager = TRUE) {
485 XFA_ELEMENT eType = pTemplateChild->GetClassID(); 483 XFA_ELEMENT eType = pTemplateChild->GetClassID();
486 if (eType == XFA_ELEMENT_Variables) { 484 if (eType == XFA_ELEMENT_Variables) {
487 return TRUE; 485 return TRUE;
488 } 486 }
489 if (pTemplateChild->GetObjectType() == XFA_OBJECTTYPE_ContainerNode) { 487 if (pTemplateChild->IsContainerNode()) {
490 return FALSE; 488 return FALSE;
491 } 489 }
492 if (eType == XFA_ELEMENT_Proto || 490 if (eType == XFA_ELEMENT_Proto ||
493 (bUseInstanceManager && eType == XFA_ELEMENT_Occur)) { 491 (bUseInstanceManager && eType == XFA_ELEMENT_Occur)) {
494 return FALSE; 492 return FALSE;
495 } 493 }
496 return TRUE; 494 return TRUE;
497 } 495 }
498 CXFA_Node* XFA_NodeMerge_CloneOrMergeContainer(CXFA_Document* pDocument, 496 CXFA_Node* XFA_NodeMerge_CloneOrMergeContainer(CXFA_Document* pDocument,
499 CXFA_Node* pFormParent, 497 CXFA_Node* pFormParent,
500 CXFA_Node* pTemplateNode, 498 CXFA_Node* pTemplateNode,
501 FX_BOOL bRecursive, 499 FX_BOOL bRecursive,
502 CXFA_NodeArray* pSubformArray) { 500 CXFA_NodeArray* pSubformArray) {
503 CXFA_Node* pExistingNode = NULL; 501 CXFA_Node* pExistingNode = NULL;
504 if (pSubformArray == NULL) { 502 if (pSubformArray == NULL) {
505 pExistingNode = XFA_DataMerge_FindFormDOMInstance( 503 pExistingNode = XFA_DataMerge_FindFormDOMInstance(
506 pDocument, pTemplateNode->GetClassID(), pTemplateNode->GetNameHash(), 504 pDocument, pTemplateNode->GetClassID(), pTemplateNode->GetNameHash(),
507 pFormParent); 505 pFormParent);
508 } else if (pSubformArray->GetSize() > 0) { 506 } else if (pSubformArray->GetSize() > 0) {
509 pExistingNode = pSubformArray->GetAt(0); 507 pExistingNode = pSubformArray->GetAt(0);
510 pSubformArray->RemoveAt(0); 508 pSubformArray->RemoveAt(0);
511 } 509 }
512 if (pExistingNode) { 510 if (pExistingNode) {
513 if (pSubformArray) { 511 if (pSubformArray) {
514 pFormParent->InsertChild(pExistingNode); 512 pFormParent->InsertChild(pExistingNode);
515 } else if (pExistingNode->IsContainerNode()) { 513 } else if (pExistingNode->IsContainerNode()) {
516 pFormParent->RemoveChild(pExistingNode); 514 pFormParent->RemoveChild(pExistingNode);
517 pFormParent->InsertChild(pExistingNode); 515 pFormParent->InsertChild(pExistingNode);
518 } 516 }
519 pExistingNode->ClearFlag(XFA_NODEFLAG_UnusedNode); 517 pExistingNode->ClearFlag(XFA_NodeFlag_UnusedNode);
520 pExistingNode->SetTemplateNode(pTemplateNode); 518 pExistingNode->SetTemplateNode(pTemplateNode);
521 if (bRecursive && pExistingNode->GetClassID() != XFA_ELEMENT_Items) { 519 if (bRecursive && pExistingNode->GetClassID() != XFA_ELEMENT_Items) {
522 for (CXFA_Node* pTemplateChild = 520 for (CXFA_Node* pTemplateChild =
523 pTemplateNode->GetNodeItem(XFA_NODEITEM_FirstChild); 521 pTemplateNode->GetNodeItem(XFA_NODEITEM_FirstChild);
524 pTemplateChild; pTemplateChild = pTemplateChild->GetNodeItem( 522 pTemplateChild; pTemplateChild = pTemplateChild->GetNodeItem(
525 XFA_NODEITEM_NextSibling)) { 523 XFA_NODEITEM_NextSibling)) {
526 if (XFA_NeedGenerateForm(pTemplateChild)) { 524 if (XFA_NeedGenerateForm(pTemplateChild)) {
527 XFA_NodeMerge_CloneOrMergeContainer(pDocument, pExistingNode, 525 XFA_NodeMerge_CloneOrMergeContainer(pDocument, pExistingNode,
528 pTemplateChild, bRecursive); 526 pTemplateChild, bRecursive);
529 } 527 }
530 } 528 }
531 } 529 }
532 pExistingNode->SetFlag(XFA_NODEFLAG_Initialized, true); 530 pExistingNode->SetFlag(XFA_NodeFlag_Initialized, true);
533 return pExistingNode; 531 return pExistingNode;
534 } 532 }
535 CXFA_Node* pNewNode = pTemplateNode->CloneTemplateToForm(FALSE); 533 CXFA_Node* pNewNode = pTemplateNode->CloneTemplateToForm(FALSE);
536 pFormParent->InsertChild(pNewNode, NULL); 534 pFormParent->InsertChild(pNewNode, NULL);
537 if (bRecursive) { 535 if (bRecursive) {
538 for (CXFA_Node* pTemplateChild = 536 for (CXFA_Node* pTemplateChild =
539 pTemplateNode->GetNodeItem(XFA_NODEITEM_FirstChild); 537 pTemplateNode->GetNodeItem(XFA_NODEITEM_FirstChild);
540 pTemplateChild; pTemplateChild = pTemplateChild->GetNodeItem( 538 pTemplateChild; pTemplateChild = pTemplateChild->GetNodeItem(
541 XFA_NODEITEM_NextSibling)) { 539 XFA_NODEITEM_NextSibling)) {
542 if (XFA_NeedGenerateForm(pTemplateChild)) { 540 if (XFA_NeedGenerateForm(pTemplateChild)) {
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
575 if (dwNameHash != pNode->GetNameHash()) { 573 if (dwNameHash != pNode->GetNameHash()) {
576 break; 574 break;
577 } 575 }
578 CXFA_Node* pNextNode = pNode->GetNodeItem(XFA_NODEITEM_NextSibling); 576 CXFA_Node* pNextNode = pNode->GetNodeItem(XFA_NODEITEM_NextSibling);
579 pFormParent->RemoveChild(pNode); 577 pFormParent->RemoveChild(pNode);
580 subforms.Add(pNode); 578 subforms.Add(pNode);
581 pNode = pNextNode; 579 pNode = pNextNode;
582 } 580 }
583 pFormParent->RemoveChild(pExistingNode); 581 pFormParent->RemoveChild(pExistingNode);
584 pFormParent->InsertChild(pExistingNode); 582 pFormParent->InsertChild(pExistingNode);
585 pExistingNode->ClearFlag(XFA_NODEFLAG_UnusedNode); 583 pExistingNode->ClearFlag(XFA_NodeFlag_UnusedNode);
586 pExistingNode->SetTemplateNode(pTemplateNode); 584 pExistingNode->SetTemplateNode(pTemplateNode);
587 return pExistingNode; 585 return pExistingNode;
588 } 586 }
589 CXFA_Node* pNewNode = pDocument->GetParser()->GetFactory()->CreateNode( 587 CXFA_Node* pNewNode = pDocument->GetParser()->GetFactory()->CreateNode(
590 XFA_XDPPACKET_Form, XFA_ELEMENT_InstanceManager); 588 XFA_XDPPACKET_Form, XFA_ELEMENT_InstanceManager);
591 ASSERT(pNewNode); 589 ASSERT(pNewNode);
592 wsInstMgrNodeName = 590 wsInstMgrNodeName =
593 FX_WSTRC(L"_") + pTemplateNode->GetCData(XFA_ATTRIBUTE_Name); 591 FX_WSTRC(L"_") + pTemplateNode->GetCData(XFA_ATTRIBUTE_Name);
594 pNewNode->SetCData(XFA_ATTRIBUTE_Name, wsInstMgrNodeName); 592 pNewNode->SetCData(XFA_ATTRIBUTE_Name, wsInstMgrNodeName);
595 pFormParent->InsertChild(pNewNode, NULL); 593 pFormParent->InsertChild(pNewNode, NULL);
(...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after
769 : NULL; 767 : NULL;
770 if (CXFA_Node* pOccurTemplateNode = 768 if (CXFA_Node* pOccurTemplateNode =
771 pTemplateNode->GetFirstChildByClass(XFA_ELEMENT_Occur)) { 769 pTemplateNode->GetFirstChildByClass(XFA_ELEMENT_Occur)) {
772 pOccurNode = pInstMgrNode 770 pOccurNode = pInstMgrNode
773 ? XFA_NodeMerge_CloneOrMergeContainer( 771 ? XFA_NodeMerge_CloneOrMergeContainer(
774 pDocument, pInstMgrNode, pOccurTemplateNode, FALSE) 772 pDocument, pInstMgrNode, pOccurTemplateNode, FALSE)
775 : pOccurTemplateNode; 773 : pOccurTemplateNode;
776 } else if (pInstMgrNode) { 774 } else if (pInstMgrNode) {
777 pOccurNode = pInstMgrNode->GetFirstChildByClass(XFA_ELEMENT_Occur); 775 pOccurNode = pInstMgrNode->GetFirstChildByClass(XFA_ELEMENT_Occur);
778 if (pOccurNode) { 776 if (pOccurNode) {
779 pOccurNode->ClearFlag(XFA_NODEFLAG_UnusedNode); 777 pOccurNode->ClearFlag(XFA_NodeFlag_UnusedNode);
780 } 778 }
781 } 779 }
782 if (pInstMgrNode) { 780 if (pInstMgrNode) {
783 pInstMgrNode->SetFlag(XFA_NODEFLAG_Initialized, true); 781 pInstMgrNode->SetFlag(XFA_NodeFlag_Initialized, true);
784 pSearchArray = &subformArray; 782 pSearchArray = &subformArray;
785 if (pFormParentNode->GetClassID() == XFA_ELEMENT_PageArea) { 783 if (pFormParentNode->GetClassID() == XFA_ELEMENT_PageArea) {
786 bOneInstance = TRUE; 784 bOneInstance = TRUE;
787 if (subformArray.GetSize() < 1) { 785 if (subformArray.GetSize() < 1) {
788 pSearchArray = NULL; 786 pSearchArray = NULL;
789 } 787 }
790 } else if ((pTemplateNode->GetNameHash() == 0) && 788 } else if ((pTemplateNode->GetNameHash() == 0) &&
791 (subformArray.GetSize() < 1)) { 789 (subformArray.GetSize() < 1)) {
792 pSearchArray = NULL; 790 pSearchArray = NULL;
793 } 791 }
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
837 CXFA_Node* pSubform = nodeArray[iIndex]; 835 CXFA_Node* pSubform = nodeArray[iIndex];
838 CXFA_Node* pDataNode = 836 CXFA_Node* pDataNode =
839 reinterpret_cast<CXFA_Node*>(subformMapArray.GetValueAt(pSubform)); 837 reinterpret_cast<CXFA_Node*>(subformMapArray.GetValueAt(pSubform));
840 for (CXFA_Node* pTemplateChild = 838 for (CXFA_Node* pTemplateChild =
841 pTemplateNode->GetNodeItem(XFA_NODEITEM_FirstChild); 839 pTemplateNode->GetNodeItem(XFA_NODEITEM_FirstChild);
842 pTemplateChild; pTemplateChild = pTemplateChild->GetNodeItem( 840 pTemplateChild; pTemplateChild = pTemplateChild->GetNodeItem(
843 XFA_NODEITEM_NextSibling)) { 841 XFA_NODEITEM_NextSibling)) {
844 if (XFA_NeedGenerateForm(pTemplateChild, bUseInstanceManager)) { 842 if (XFA_NeedGenerateForm(pTemplateChild, bUseInstanceManager)) {
845 XFA_NodeMerge_CloneOrMergeContainer(pDocument, pSubform, 843 XFA_NodeMerge_CloneOrMergeContainer(pDocument, pSubform,
846 pTemplateChild, TRUE); 844 pTemplateChild, TRUE);
847 } else if (pTemplateChild->GetObjectType() == 845 } else if (pTemplateChild->IsContainerNode()) {
848 XFA_OBJECTTYPE_ContainerNode) {
849 pDocument->DataMerge_CopyContainer(pTemplateChild, pSubform, 846 pDocument->DataMerge_CopyContainer(pTemplateChild, pSubform,
850 pDataNode, FALSE, TRUE, FALSE); 847 pDataNode, FALSE, TRUE, FALSE);
851 } 848 }
852 } 849 }
853 } 850 }
854 subformMapArray.RemoveAll(); 851 subformMapArray.RemoveAll();
855 } 852 }
856 for (; iMax < 0 || iCurRepeatIndex < iMax; iCurRepeatIndex++) { 853 for (; iMax < 0 || iCurRepeatIndex < iMax; iCurRepeatIndex++) {
857 FX_BOOL bSelfMatch = FALSE; 854 FX_BOOL bSelfMatch = FALSE;
858 XFA_ATTRIBUTEENUM eBindMatch = XFA_ATTRIBUTEENUM_None; 855 XFA_ATTRIBUTEENUM eBindMatch = XFA_ATTRIBUTEENUM_None;
(...skipping 16 matching lines...) Expand all
875 } 872 }
876 CFX_ArrayTemplate<XFA_DataMerge_RecurseRecord> rgItemMatchList; 873 CFX_ArrayTemplate<XFA_DataMerge_RecurseRecord> rgItemMatchList;
877 CFX_ArrayTemplate<CXFA_Node*> rgItemUnmatchList; 874 CFX_ArrayTemplate<CXFA_Node*> rgItemUnmatchList;
878 for (CXFA_Node* pTemplateChild = 875 for (CXFA_Node* pTemplateChild =
879 pTemplateNode->GetNodeItem(XFA_NODEITEM_FirstChild); 876 pTemplateNode->GetNodeItem(XFA_NODEITEM_FirstChild);
880 pTemplateChild; pTemplateChild = pTemplateChild->GetNodeItem( 877 pTemplateChild; pTemplateChild = pTemplateChild->GetNodeItem(
881 XFA_NODEITEM_NextSibling)) { 878 XFA_NODEITEM_NextSibling)) {
882 if (XFA_NeedGenerateForm(pTemplateChild, bUseInstanceManager)) { 879 if (XFA_NeedGenerateForm(pTemplateChild, bUseInstanceManager)) {
883 XFA_NodeMerge_CloneOrMergeContainer(pDocument, pSubformSetNode, 880 XFA_NodeMerge_CloneOrMergeContainer(pDocument, pSubformSetNode,
884 pTemplateChild, TRUE); 881 pTemplateChild, TRUE);
885 } else if (pTemplateChild->GetObjectType() == 882 } else if (pTemplateChild->IsContainerNode()) {
886 XFA_OBJECTTYPE_ContainerNode) {
887 bSelfMatch = FALSE; 883 bSelfMatch = FALSE;
888 eBindMatch = XFA_ATTRIBUTEENUM_None; 884 eBindMatch = XFA_ATTRIBUTEENUM_None;
889 CXFA_Node* pDataMatch; 885 CXFA_Node* pDataMatch;
890 if (eRelation != XFA_ATTRIBUTEENUM_Ordered && 886 if (eRelation != XFA_ATTRIBUTEENUM_Ordered &&
891 (pDataMatch = XFA_DataMerge_FindMatchingDataNode( 887 (pDataMatch = XFA_DataMerge_FindMatchingDataNode(
892 pDocument, pTemplateChild, pDataScope, bAccessedDataDOM, 888 pDocument, pTemplateChild, pDataScope, bAccessedDataDOM,
893 FALSE, NULL, bSelfMatch, eBindMatch)) != nullptr) { 889 FALSE, NULL, bSelfMatch, eBindMatch)) != nullptr) {
894 XFA_DataMerge_RecurseRecord sNewRecord = {pTemplateChild, 890 XFA_DataMerge_RecurseRecord sNewRecord = {pTemplateChild,
895 pDataMatch}; 891 pDataMatch};
896 if (bSelfMatch) { 892 if (bSelfMatch) {
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
936 if (!pFirstInstance) { 932 if (!pFirstInstance) {
937 pFirstInstance = pSubformSetNode; 933 pFirstInstance = pSubformSetNode;
938 } 934 }
939 for (CXFA_Node* pTemplateChild = 935 for (CXFA_Node* pTemplateChild =
940 pTemplateNode->GetNodeItem(XFA_NODEITEM_FirstChild); 936 pTemplateNode->GetNodeItem(XFA_NODEITEM_FirstChild);
941 pTemplateChild; pTemplateChild = pTemplateChild->GetNodeItem( 937 pTemplateChild; pTemplateChild = pTemplateChild->GetNodeItem(
942 XFA_NODEITEM_NextSibling)) { 938 XFA_NODEITEM_NextSibling)) {
943 if (XFA_NeedGenerateForm(pTemplateChild, bUseInstanceManager)) { 939 if (XFA_NeedGenerateForm(pTemplateChild, bUseInstanceManager)) {
944 XFA_NodeMerge_CloneOrMergeContainer(pDocument, pSubformSetNode, 940 XFA_NodeMerge_CloneOrMergeContainer(pDocument, pSubformSetNode,
945 pTemplateChild, TRUE); 941 pTemplateChild, TRUE);
946 } else if (pTemplateChild->GetObjectType() == 942 } else if (pTemplateChild->IsContainerNode()) {
947 XFA_OBJECTTYPE_ContainerNode) {
948 pDocument->DataMerge_CopyContainer(pTemplateChild, pSubformSetNode, 943 pDocument->DataMerge_CopyContainer(pTemplateChild, pSubformSetNode,
949 pDataScope); 944 pDataScope);
950 } 945 }
951 } 946 }
952 } 947 }
953 } 948 }
954 if (iCurRepeatIndex == 0 && bAccessedDataDOM == FALSE) { 949 if (iCurRepeatIndex == 0 && bAccessedDataDOM == FALSE) {
955 int32_t iLimit = iMax; 950 int32_t iLimit = iMax;
956 if (pInstMgrNode && pTemplateNode->GetNameHash() == 0) { 951 if (pInstMgrNode && pTemplateNode->GetNameHash() == 0) {
957 iLimit = subformArray.GetSize(); 952 iLimit = subformArray.GetSize();
(...skipping 20 matching lines...) Expand all
978 if (!pFirstInstance) { 973 if (!pFirstInstance) {
979 pFirstInstance = pSubformNode; 974 pFirstInstance = pSubformNode;
980 } 975 }
981 for (CXFA_Node* pTemplateChild = 976 for (CXFA_Node* pTemplateChild =
982 pTemplateNode->GetNodeItem(XFA_NODEITEM_FirstChild); 977 pTemplateNode->GetNodeItem(XFA_NODEITEM_FirstChild);
983 pTemplateChild; pTemplateChild = pTemplateChild->GetNodeItem( 978 pTemplateChild; pTemplateChild = pTemplateChild->GetNodeItem(
984 XFA_NODEITEM_NextSibling)) { 979 XFA_NODEITEM_NextSibling)) {
985 if (XFA_NeedGenerateForm(pTemplateChild, bUseInstanceManager)) { 980 if (XFA_NeedGenerateForm(pTemplateChild, bUseInstanceManager)) {
986 XFA_NodeMerge_CloneOrMergeContainer(pDocument, pSubformNode, 981 XFA_NodeMerge_CloneOrMergeContainer(pDocument, pSubformNode,
987 pTemplateChild, TRUE); 982 pTemplateChild, TRUE);
988 } else if (pTemplateChild->GetObjectType() == 983 } else if (pTemplateChild->IsContainerNode()) {
989 XFA_OBJECTTYPE_ContainerNode) {
990 pDocument->DataMerge_CopyContainer(pTemplateChild, pSubformNode, 984 pDocument->DataMerge_CopyContainer(pTemplateChild, pSubformNode,
991 pDataScope); 985 pDataScope);
992 } 986 }
993 } 987 }
994 } 988 }
995 } 989 }
996 } 990 }
997 int32_t iMinimalLimit = iCurRepeatIndex == 0 ? iInit : iMin; 991 int32_t iMinimalLimit = iCurRepeatIndex == 0 ? iInit : iMin;
998 for (; iCurRepeatIndex < iMinimalLimit; iCurRepeatIndex++) { 992 for (; iCurRepeatIndex < iMinimalLimit; iCurRepeatIndex++) {
999 CXFA_Node* pSubformSetNode = XFA_NodeMerge_CloneOrMergeContainer( 993 CXFA_Node* pSubformSetNode = XFA_NodeMerge_CloneOrMergeContainer(
1000 pDocument, pFormParentNode, pTemplateNode, FALSE, pSearchArray); 994 pDocument, pFormParentNode, pTemplateNode, FALSE, pSearchArray);
1001 ASSERT(pSubformSetNode); 995 ASSERT(pSubformSetNode);
1002 if (!pFirstInstance) { 996 if (!pFirstInstance) {
1003 pFirstInstance = pSubformSetNode; 997 pFirstInstance = pSubformSetNode;
1004 } 998 }
1005 FX_BOOL bFound = FALSE; 999 FX_BOOL bFound = FALSE;
1006 for (CXFA_Node* pTemplateChild = 1000 for (CXFA_Node* pTemplateChild =
1007 pTemplateNode->GetNodeItem(XFA_NODEITEM_FirstChild); 1001 pTemplateNode->GetNodeItem(XFA_NODEITEM_FirstChild);
1008 pTemplateChild; pTemplateChild = pTemplateChild->GetNodeItem( 1002 pTemplateChild; pTemplateChild = pTemplateChild->GetNodeItem(
1009 XFA_NODEITEM_NextSibling)) { 1003 XFA_NODEITEM_NextSibling)) {
1010 if (XFA_NeedGenerateForm(pTemplateChild, bUseInstanceManager)) { 1004 if (XFA_NeedGenerateForm(pTemplateChild, bUseInstanceManager)) {
1011 XFA_NodeMerge_CloneOrMergeContainer(pDocument, pSubformSetNode, 1005 XFA_NodeMerge_CloneOrMergeContainer(pDocument, pSubformSetNode,
1012 pTemplateChild, TRUE); 1006 pTemplateChild, TRUE);
1013 } else if (pTemplateChild->GetObjectType() == 1007 } else if (pTemplateChild->IsContainerNode()) {
1014 XFA_OBJECTTYPE_ContainerNode) {
1015 if (bFound && eRelation == XFA_ATTRIBUTEENUM_Choice) { 1008 if (bFound && eRelation == XFA_ATTRIBUTEENUM_Choice) {
1016 continue; 1009 continue;
1017 } 1010 }
1018 pDocument->DataMerge_CopyContainer(pTemplateChild, pSubformSetNode, 1011 pDocument->DataMerge_CopyContainer(pTemplateChild, pSubformSetNode,
1019 pDataScope, FALSE, bDataMerge); 1012 pDataScope, FALSE, bDataMerge);
1020 bFound = TRUE; 1013 bFound = TRUE;
1021 } 1014 }
1022 } 1015 }
1023 } 1016 }
1024 return pFirstInstance; 1017 return pFirstInstance;
(...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after
1202 } 1195 }
1203 } 1196 }
1204 if (bMatchRef && 1197 if (bMatchRef &&
1205 (eClassID == XFA_ELEMENT_Subform || eClassID == XFA_ELEMENT_SubformSet || 1198 (eClassID == XFA_ELEMENT_Subform || eClassID == XFA_ELEMENT_SubformSet ||
1206 eClassID == XFA_ELEMENT_Area || eClassID == XFA_ELEMENT_PageArea || 1199 eClassID == XFA_ELEMENT_Area || eClassID == XFA_ELEMENT_PageArea ||
1207 eClassID == XFA_ELEMENT_PageSet)) { 1200 eClassID == XFA_ELEMENT_PageSet)) {
1208 for (CXFA_Node* pFormChild = 1201 for (CXFA_Node* pFormChild =
1209 pFormNode->GetNodeItem(XFA_NODEITEM_FirstChild); 1202 pFormNode->GetNodeItem(XFA_NODEITEM_FirstChild);
1210 pFormChild; 1203 pFormChild;
1211 pFormChild = pFormChild->GetNodeItem(XFA_NODEITEM_NextSibling)) { 1204 pFormChild = pFormChild->GetNodeItem(XFA_NODEITEM_NextSibling)) {
1212 if (pFormChild->GetObjectType() != XFA_OBJECTTYPE_ContainerNode) { 1205 if (!pFormChild->IsContainerNode())
1213 continue; 1206 continue;
1214 } 1207 if (pFormChild->IsUnusedNode())
1215 if (pFormChild->HasFlag(XFA_NODEFLAG_UnusedNode)) {
1216 continue; 1208 continue;
1217 } 1209
1218 XFA_DataMerge_UpdateBindingRelations(pDocument, pFormChild, 1210 XFA_DataMerge_UpdateBindingRelations(pDocument, pFormChild,
1219 pDataNode ? pDataNode : pDataScope, 1211 pDataNode ? pDataNode : pDataScope,
1220 bDataRef, bParentDataRef); 1212 bDataRef, bParentDataRef);
1221 } 1213 }
1222 } 1214 }
1223 } 1215 }
1224 CXFA_Node* XFA_DataMerge_FindDataScope(CXFA_Node* pParentFormNode) { 1216 CXFA_Node* XFA_DataMerge_FindDataScope(CXFA_Node* pParentFormNode) {
1225 for (CXFA_Node* pRootBoundNode = pParentFormNode; 1217 for (CXFA_Node* pRootBoundNode = pParentFormNode;
1226 pRootBoundNode && 1218 pRootBoundNode && pRootBoundNode->IsContainerNode();
1227 pRootBoundNode->GetObjectType() == XFA_OBJECTTYPE_ContainerNode;
1228 pRootBoundNode = pRootBoundNode->GetNodeItem(XFA_NODEITEM_Parent)) { 1219 pRootBoundNode = pRootBoundNode->GetNodeItem(XFA_NODEITEM_Parent)) {
1229 CXFA_Node* pDataScope = pRootBoundNode->GetBindData(); 1220 CXFA_Node* pDataScope = pRootBoundNode->GetBindData();
1230 if (pDataScope) { 1221 if (pDataScope) {
1231 return pDataScope; 1222 return pDataScope;
1232 } 1223 }
1233 } 1224 }
1234 return ToNode( 1225 return ToNode(
1235 pParentFormNode->GetDocument()->GetXFAObject(XFA_HASHCODE_Data)); 1226 pParentFormNode->GetDocument()->GetXFAObject(XFA_HASHCODE_Data));
1236 } 1227 }
1237 void CXFA_Document::DataMerge_UpdateBindingRelations( 1228 void CXFA_Document::DataMerge_UpdateBindingRelations(
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
1327 bEmptyForm = TRUE; 1318 bEmptyForm = TRUE;
1328 pFormRoot = CreateNode(XFA_XDPPACKET_Form, XFA_ELEMENT_Form); 1319 pFormRoot = CreateNode(XFA_XDPPACKET_Form, XFA_ELEMENT_Form);
1329 ASSERT(pFormRoot); 1320 ASSERT(pFormRoot);
1330 pFormRoot->SetCData(XFA_ATTRIBUTE_Name, L"form"); 1321 pFormRoot->SetCData(XFA_ATTRIBUTE_Name, L"form");
1331 m_pRootNode->InsertChild(pFormRoot, NULL); 1322 m_pRootNode->InsertChild(pFormRoot, NULL);
1332 } else { 1323 } else {
1333 CXFA_NodeIteratorTemplate<CXFA_Node, CXFA_TraverseStrategy_XFANode> 1324 CXFA_NodeIteratorTemplate<CXFA_Node, CXFA_TraverseStrategy_XFANode>
1334 sIterator(pFormRoot); 1325 sIterator(pFormRoot);
1335 for (CXFA_Node* pNode = sIterator.MoveToNext(); pNode; 1326 for (CXFA_Node* pNode = sIterator.MoveToNext(); pNode;
1336 pNode = sIterator.MoveToNext()) { 1327 pNode = sIterator.MoveToNext()) {
1337 pNode->SetFlag(XFA_NODEFLAG_UnusedNode, true); 1328 pNode->SetFlag(XFA_NodeFlag_UnusedNode, true);
1338 } 1329 }
1339 } 1330 }
1340 CXFA_Node* pSubformSetNode = XFA_NodeMerge_CloneOrMergeContainer( 1331 CXFA_Node* pSubformSetNode = XFA_NodeMerge_CloneOrMergeContainer(
1341 this, pFormRoot, pTemplateChosen, FALSE); 1332 this, pFormRoot, pTemplateChosen, FALSE);
1342 ASSERT(pSubformSetNode); 1333 ASSERT(pSubformSetNode);
1343 if (!pDataTopLevel) { 1334 if (!pDataTopLevel) {
1344 CFX_WideStringC wsFormName = pSubformSetNode->GetCData(XFA_ATTRIBUTE_Name); 1335 CFX_WideStringC wsFormName = pSubformSetNode->GetCData(XFA_ATTRIBUTE_Name);
1345 CFX_WideString wsDataTopLevelName(wsFormName.IsEmpty() ? L"form" 1336 CFX_WideString wsDataTopLevelName(wsFormName.IsEmpty() ? L"form"
1346 : wsFormName); 1337 : wsFormName);
1347 CFDE_XMLElement* pDataTopLevelXMLNode = 1338 CFDE_XMLElement* pDataTopLevelXMLNode =
1348 new CFDE_XMLElement(wsDataTopLevelName); 1339 new CFDE_XMLElement(wsDataTopLevelName);
1349 1340
1350 pDataTopLevel = CreateNode(XFA_XDPPACKET_Datasets, XFA_ELEMENT_DataGroup); 1341 pDataTopLevel = CreateNode(XFA_XDPPACKET_Datasets, XFA_ELEMENT_DataGroup);
1351 pDataTopLevel->SetCData(XFA_ATTRIBUTE_Name, wsDataTopLevelName); 1342 pDataTopLevel->SetCData(XFA_ATTRIBUTE_Name, wsDataTopLevelName);
1352 pDataTopLevel->SetXMLMappingNode(pDataTopLevelXMLNode); 1343 pDataTopLevel->SetXMLMappingNode(pDataTopLevelXMLNode);
1353 CXFA_Node* pBeforeNode = pDataRoot->GetNodeItem(XFA_NODEITEM_FirstChild); 1344 CXFA_Node* pBeforeNode = pDataRoot->GetNodeItem(XFA_NODEITEM_FirstChild);
1354 pDataRoot->InsertChild(pDataTopLevel, pBeforeNode); 1345 pDataRoot->InsertChild(pDataTopLevel, pBeforeNode);
1355 } 1346 }
1356 ASSERT(pDataTopLevel); 1347 ASSERT(pDataTopLevel);
1357 XFA_DataMerge_CreateDataBinding(pSubformSetNode, pDataTopLevel); 1348 XFA_DataMerge_CreateDataBinding(pSubformSetNode, pDataTopLevel);
1358 for (CXFA_Node* pTemplateChild = 1349 for (CXFA_Node* pTemplateChild =
1359 pTemplateChosen->GetNodeItem(XFA_NODEITEM_FirstChild); 1350 pTemplateChosen->GetNodeItem(XFA_NODEITEM_FirstChild);
1360 pTemplateChild; 1351 pTemplateChild;
1361 pTemplateChild = pTemplateChild->GetNodeItem(XFA_NODEITEM_NextSibling)) { 1352 pTemplateChild = pTemplateChild->GetNodeItem(XFA_NODEITEM_NextSibling)) {
1362 if (XFA_NeedGenerateForm(pTemplateChild)) { 1353 if (XFA_NeedGenerateForm(pTemplateChild)) {
1363 XFA_NodeMerge_CloneOrMergeContainer(this, pSubformSetNode, pTemplateChild, 1354 XFA_NodeMerge_CloneOrMergeContainer(this, pSubformSetNode, pTemplateChild,
1364 TRUE); 1355 TRUE);
1365 } else if (pTemplateChild->GetObjectType() == 1356 } else if (pTemplateChild->IsContainerNode()) {
1366 XFA_OBJECTTYPE_ContainerNode) {
1367 DataMerge_CopyContainer(pTemplateChild, pSubformSetNode, pDataTopLevel); 1357 DataMerge_CopyContainer(pTemplateChild, pSubformSetNode, pDataTopLevel);
1368 } 1358 }
1369 } 1359 }
1370 if (pDDRoot) { 1360 if (pDDRoot) {
1371 XFA_DataDescription_UpdateDataRelation(pDataRoot, pDDRoot); 1361 XFA_DataDescription_UpdateDataRelation(pDataRoot, pDDRoot);
1372 } 1362 }
1373 DataMerge_UpdateBindingRelations(pSubformSetNode); 1363 DataMerge_UpdateBindingRelations(pSubformSetNode);
1374 CXFA_Node* pPageSetNode = 1364 CXFA_Node* pPageSetNode =
1375 pSubformSetNode->GetFirstChildByClass(XFA_ELEMENT_PageSet); 1365 pSubformSetNode->GetFirstChildByClass(XFA_ELEMENT_PageSet);
1376 while (pPageSetNode) { 1366 while (pPageSetNode) {
1377 m_pPendingPageSet.Add(pPageSetNode); 1367 m_pPendingPageSet.Add(pPageSetNode);
1378 CXFA_Node* pNextPageSetNode = 1368 CXFA_Node* pNextPageSetNode =
1379 pPageSetNode->GetNextSameClassSibling(XFA_ELEMENT_PageSet); 1369 pPageSetNode->GetNextSameClassSibling(XFA_ELEMENT_PageSet);
1380 pSubformSetNode->RemoveChild(pPageSetNode); 1370 pSubformSetNode->RemoveChild(pPageSetNode);
1381 pPageSetNode = pNextPageSetNode; 1371 pPageSetNode = pNextPageSetNode;
1382 } 1372 }
1383 if (!bEmptyForm) { 1373 if (!bEmptyForm) {
1384 CXFA_NodeIteratorTemplate<CXFA_Node, CXFA_TraverseStrategy_XFANode> 1374 CXFA_NodeIteratorTemplate<CXFA_Node, CXFA_TraverseStrategy_XFANode>
1385 sIterator(pFormRoot); 1375 sIterator(pFormRoot);
1386 CXFA_Node* pNode = sIterator.MoveToNext(); 1376 CXFA_Node* pNode = sIterator.MoveToNext();
1387 while (pNode) { 1377 while (pNode) {
1388 if (pNode->HasFlag(XFA_NODEFLAG_UnusedNode)) { 1378 if (pNode->IsUnusedNode()) {
1389 if (pNode->GetObjectType() == XFA_OBJECTTYPE_ContainerNode || 1379 if (pNode->IsContainerNode() ||
1390 pNode->GetClassID() == XFA_ELEMENT_InstanceManager) { 1380 pNode->GetClassID() == XFA_ELEMENT_InstanceManager) {
1391 CXFA_Node* pNext = sIterator.SkipChildrenAndMoveToNext(); 1381 CXFA_Node* pNext = sIterator.SkipChildrenAndMoveToNext();
1392 pNode->GetNodeItem(XFA_NODEITEM_Parent)->RemoveChild(pNode); 1382 pNode->GetNodeItem(XFA_NODEITEM_Parent)->RemoveChild(pNode);
1393 pNode = pNext; 1383 pNode = pNext;
1394 } else { 1384 } else {
1395 pNode->ClearFlag(XFA_NODEFLAG_UnusedNode); 1385 pNode->ClearFlag(XFA_NodeFlag_UnusedNode);
1396 pNode->SetFlag(XFA_NODEFLAG_Initialized, true); 1386 pNode->SetFlag(XFA_NodeFlag_Initialized, true);
1397 pNode = sIterator.MoveToNext(); 1387 pNode = sIterator.MoveToNext();
1398 } 1388 }
1399 } else { 1389 } else {
1400 pNode->SetFlag(XFA_NODEFLAG_Initialized, true); 1390 pNode->SetFlag(XFA_NodeFlag_Initialized, true);
1401 pNode = sIterator.MoveToNext(); 1391 pNode = sIterator.MoveToNext();
1402 } 1392 }
1403 } 1393 }
1404 } 1394 }
1405 } 1395 }
1406 void CXFA_Document::DoDataRemerge(FX_BOOL bDoDataMerge) { 1396 void CXFA_Document::DoDataRemerge(FX_BOOL bDoDataMerge) {
1407 CXFA_Node* pFormRoot = ToNode(GetXFAObject(XFA_HASHCODE_Form)); 1397 CXFA_Node* pFormRoot = ToNode(GetXFAObject(XFA_HASHCODE_Form));
1408 if (pFormRoot) { 1398 if (pFormRoot) {
1409 while (CXFA_Node* pNode = pFormRoot->GetNodeItem(XFA_NODEITEM_FirstChild)) { 1399 while (CXFA_Node* pNode = pFormRoot->GetNodeItem(XFA_NODEITEM_FirstChild)) {
1410 pFormRoot->RemoveChild(pNode); 1400 pFormRoot->RemoveChild(pNode);
1411 } 1401 }
1412 pFormRoot->SetObject(XFA_ATTRIBUTE_BindingNode, NULL); 1402 pFormRoot->SetObject(XFA_ATTRIBUTE_BindingNode, NULL);
1413 } 1403 }
1414 XFA_DataMerge_ClearGlobalBinding(this); 1404 XFA_DataMerge_ClearGlobalBinding(this);
1415 if (bDoDataMerge) { 1405 if (bDoDataMerge) {
1416 DoDataMerge(); 1406 DoDataMerge();
1417 } 1407 }
1418 CXFA_LayoutProcessor* pLayoutProcessor = GetLayoutProcessor(); 1408 CXFA_LayoutProcessor* pLayoutProcessor = GetLayoutProcessor();
1419 pLayoutProcessor->SetForceReLayout(TRUE); 1409 pLayoutProcessor->SetForceReLayout(TRUE);
1420 } 1410 }
OLDNEW
« no previous file with comments | « xfa/fxfa/parser/xfa_document_datadescription_imp.cpp ('k') | xfa/fxfa/parser/xfa_document_imp.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698