| 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 379 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   390     if (!bUpLevel) { |   390     if (!bUpLevel) { | 
|   391       break; |   391       break; | 
|   392     } |   392     } | 
|   393   } |   393   } | 
|   394   return NULL; |   394   return NULL; | 
|   395 } |   395 } | 
|   396 static CXFA_Node* XFA_DataMerge_FindGlobalDataNode(CXFA_Document* pDocument, |   396 static CXFA_Node* XFA_DataMerge_FindGlobalDataNode(CXFA_Document* pDocument, | 
|   397                                                    CFX_WideStringC wsName, |   397                                                    CFX_WideStringC wsName, | 
|   398                                                    CXFA_Node* pDataScope, |   398                                                    CXFA_Node* pDataScope, | 
|   399                                                    XFA_ELEMENT eMatchNodeType) { |   399                                                    XFA_ELEMENT eMatchNodeType) { | 
|   400   uint32_t dwNameHash = |   400   if (wsName.IsEmpty()) | 
|   401       wsName.IsEmpty() ? 0 : FX_HashCode_String_GetW(wsName.c_str(), |   401     return nullptr; | 
|   402                                                      wsName.GetLength()); |   402  | 
|   403   if (dwNameHash != 0) { |   403   uint32_t dwNameHash = FX_HashCode_GetW(wsName, false); | 
|   404     CXFA_Node* pBounded = XFA_DataMerge_GetGlobalBinding(pDocument, dwNameHash); |   404   CXFA_Node* pBounded = XFA_DataMerge_GetGlobalBinding(pDocument, dwNameHash); | 
|   405     if (!pBounded) { |   405   if (!pBounded) { | 
|   406       pBounded = XFA_DataMerge_ScopeMatchGlobalBinding(pDataScope, dwNameHash, |   406     pBounded = XFA_DataMerge_ScopeMatchGlobalBinding(pDataScope, dwNameHash, | 
|   407                                                        eMatchNodeType); |   407                                                      eMatchNodeType); | 
|   408       if (pBounded) { |   408     if (pBounded) { | 
|   409         XFA_DataMerge_RegisterGlobalBinding(pDocument, dwNameHash, pBounded); |   409       XFA_DataMerge_RegisterGlobalBinding(pDocument, dwNameHash, pBounded); | 
|   410       } |  | 
|   411     } |   410     } | 
|   412     return pBounded; |  | 
|   413   } |   411   } | 
|   414   return NULL; |   412   return pBounded; | 
|   415 } |   413 } | 
 |   414  | 
|   416 static CXFA_Node* XFA_DataMerge_FindOnceDataNode(CXFA_Document* pDocument, |   415 static CXFA_Node* XFA_DataMerge_FindOnceDataNode(CXFA_Document* pDocument, | 
|   417                                                  CFX_WideStringC wsName, |   416                                                  CFX_WideStringC wsName, | 
|   418                                                  CXFA_Node* pDataScope, |   417                                                  CXFA_Node* pDataScope, | 
|   419                                                  XFA_ELEMENT eMatchNodeType) { |   418                                                  XFA_ELEMENT eMatchNodeType) { | 
|   420   uint32_t dwNameHash = |   419   if (wsName.IsEmpty()) | 
|   421       wsName.IsEmpty() ? 0 : FX_HashCode_String_GetW(wsName.c_str(), |   420     return nullptr; | 
|   422                                                      wsName.GetLength()); |   421  | 
|   423   if (dwNameHash != 0) { |   422   uint32_t dwNameHash = FX_HashCode_GetW(wsName, false); | 
|   424     for (CXFA_Node *pCurDataScope = pDataScope, *pLastDataScope = NULL; |   423   CXFA_Node* pLastDataScope = nullptr; | 
|   425          pCurDataScope && |   424   for (CXFA_Node* pCurDataScope = pDataScope; | 
|   426          pCurDataScope->GetPacketID() == XFA_XDPPACKET_Datasets; |   425        pCurDataScope && pCurDataScope->GetPacketID() == XFA_XDPPACKET_Datasets; | 
|   427          pLastDataScope = pCurDataScope, |   426        pCurDataScope = pCurDataScope->GetNodeItem(XFA_NODEITEM_Parent)) { | 
|   428                    pCurDataScope = |   427     for (CXFA_Node* pDataChild = pCurDataScope->GetFirstChildByName(dwNameHash); | 
|   429                        pCurDataScope->GetNodeItem(XFA_NODEITEM_Parent)) { |   428          pDataChild; | 
|   430       for (CXFA_Node* pDataChild = |   429          pDataChild = pDataChild->GetNextSameNameSibling(dwNameHash)) { | 
|   431                pCurDataScope->GetFirstChildByName(dwNameHash); |   430       if (pDataChild == pLastDataScope || pDataChild->HasBindItem() || | 
|   432            pDataChild; |   431           (eMatchNodeType != XFA_ELEMENT_DataModel && | 
|   433            pDataChild = pDataChild->GetNextSameNameSibling(dwNameHash)) { |   432            pDataChild->GetClassID() != eMatchNodeType)) { | 
|   434         if (pDataChild == pLastDataScope || |   433         continue; | 
|   435             (eMatchNodeType != XFA_ELEMENT_DataModel && |  | 
|   436              pDataChild->GetClassID() != eMatchNodeType) || |  | 
|   437             pDataChild->HasBindItem()) { |  | 
|   438           continue; |  | 
|   439         } |  | 
|   440         return pDataChild; |  | 
|   441       } |   434       } | 
 |   435       return pDataChild; | 
|   442     } |   436     } | 
 |   437     pLastDataScope = pCurDataScope; | 
|   443   } |   438   } | 
|   444   return NULL; |   439   return nullptr; | 
|   445 } |   440 } | 
 |   441  | 
|   446 static CXFA_Node* XFA_DataMerge_FindDataRefDataNode(CXFA_Document* pDocument, |   442 static CXFA_Node* XFA_DataMerge_FindDataRefDataNode(CXFA_Document* pDocument, | 
|   447                                                     CFX_WideStringC wsRef, |   443                                                     CFX_WideStringC wsRef, | 
|   448                                                     CXFA_Node* pDataScope, |   444                                                     CXFA_Node* pDataScope, | 
|   449                                                     XFA_ELEMENT eMatchNodeType, |   445                                                     XFA_ELEMENT eMatchNodeType, | 
|   450                                                     CXFA_Node* pTemplateNode, |   446                                                     CXFA_Node* pTemplateNode, | 
|   451                                                     FX_BOOL bForceBind, |   447                                                     FX_BOOL bForceBind, | 
|   452                                                     FX_BOOL bUpLevel = TRUE) { |   448                                                     FX_BOOL bUpLevel = TRUE) { | 
|   453   uint32_t dFlags = XFA_RESOLVENODE_Children | XFA_RESOLVENODE_BindNew; |   449   uint32_t dFlags = XFA_RESOLVENODE_Children | XFA_RESOLVENODE_BindNew; | 
|   454   if (bUpLevel || wsRef != FX_WSTRC(L"name")) { |   450   if (bUpLevel || wsRef != FX_WSTRC(L"name")) { | 
|   455     dFlags |= (XFA_RESOLVENODE_Parent | XFA_RESOLVENODE_Siblings); |   451     dFlags |= (XFA_RESOLVENODE_Parent | XFA_RESOLVENODE_Siblings); | 
| (...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   554   } |   550   } | 
|   555   return pNewNode; |   551   return pNewNode; | 
|   556 } |   552 } | 
|   557 static CXFA_Node* XFA_NodeMerge_CloneOrMergeInstanceManager( |   553 static CXFA_Node* XFA_NodeMerge_CloneOrMergeInstanceManager( | 
|   558     CXFA_Document* pDocument, |   554     CXFA_Document* pDocument, | 
|   559     CXFA_Node* pFormParent, |   555     CXFA_Node* pFormParent, | 
|   560     CXFA_Node* pTemplateNode, |   556     CXFA_Node* pTemplateNode, | 
|   561     CXFA_NodeArray& subforms) { |   557     CXFA_NodeArray& subforms) { | 
|   562   CFX_WideStringC wsSubformName = pTemplateNode->GetCData(XFA_ATTRIBUTE_Name); |   558   CFX_WideStringC wsSubformName = pTemplateNode->GetCData(XFA_ATTRIBUTE_Name); | 
|   563   CFX_WideString wsInstMgrNodeName = FX_WSTRC(L"_") + wsSubformName; |   559   CFX_WideString wsInstMgrNodeName = FX_WSTRC(L"_") + wsSubformName; | 
|   564   uint32_t dwInstNameHash = FX_HashCode_String_GetW( |   560   uint32_t dwInstNameHash = | 
|   565       wsInstMgrNodeName.c_str(), wsInstMgrNodeName.GetLength()); |   561       FX_HashCode_GetW(wsInstMgrNodeName.AsStringC(), false); | 
|   566   CXFA_Node* pExistingNode = XFA_DataMerge_FindFormDOMInstance( |   562   CXFA_Node* pExistingNode = XFA_DataMerge_FindFormDOMInstance( | 
|   567       pDocument, XFA_ELEMENT_InstanceManager, dwInstNameHash, pFormParent); |   563       pDocument, XFA_ELEMENT_InstanceManager, dwInstNameHash, pFormParent); | 
|   568   if (pExistingNode) { |   564   if (pExistingNode) { | 
|   569     uint32_t dwNameHash = pTemplateNode->GetNameHash(); |   565     uint32_t dwNameHash = pTemplateNode->GetNameHash(); | 
|   570     for (CXFA_Node* pNode = |   566     for (CXFA_Node* pNode = | 
|   571              pExistingNode->GetNodeItem(XFA_NODEITEM_NextSibling); |   567              pExistingNode->GetNodeItem(XFA_NODEITEM_NextSibling); | 
|   572          pNode;) { |   568          pNode;) { | 
|   573       XFA_ELEMENT eCurType = pNode->GetClassID(); |   569       XFA_ELEMENT eCurType = pNode->GetClassID(); | 
|   574       if (eCurType == XFA_ELEMENT_InstanceManager) { |   570       if (eCurType == XFA_ELEMENT_InstanceManager) { | 
|   575         break; |   571         break; | 
| (...skipping 847 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  1423     } |  1419     } | 
|  1424     pFormRoot->SetObject(XFA_ATTRIBUTE_BindingNode, NULL); |  1420     pFormRoot->SetObject(XFA_ATTRIBUTE_BindingNode, NULL); | 
|  1425   } |  1421   } | 
|  1426   XFA_DataMerge_ClearGlobalBinding(this); |  1422   XFA_DataMerge_ClearGlobalBinding(this); | 
|  1427   if (bDoDataMerge) { |  1423   if (bDoDataMerge) { | 
|  1428     DoDataMerge(); |  1424     DoDataMerge(); | 
|  1429   } |  1425   } | 
|  1430   CXFA_LayoutProcessor* pLayoutProcessor = GetLayoutProcessor(); |  1426   CXFA_LayoutProcessor* pLayoutProcessor = GetLayoutProcessor(); | 
|  1431   pLayoutProcessor->SetForceReLayout(TRUE); |  1427   pLayoutProcessor->SetForceReLayout(TRUE); | 
|  1432 } |  1428 } | 
| OLD | NEW |