| 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 "core/fxcrt/fx_ext.h" | 7 #include "core/fxcrt/fx_ext.h" |
| 8 #include "xfa/fxfa/app/xfa_ffnotify.h" | 8 #include "xfa/fxfa/app/xfa_ffnotify.h" |
| 9 #include "xfa/fxfa/parser/cscript_datawindow.h" | 9 #include "xfa/fxfa/parser/cscript_datawindow.h" |
| 10 #include "xfa/fxfa/parser/cscript_eventpseudomodel.h" | 10 #include "xfa/fxfa/parser/cscript_eventpseudomodel.h" |
| (...skipping 333 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 344 } | 344 } |
| 345 } | 345 } |
| 346 return nullptr; | 346 return nullptr; |
| 347 } | 347 } |
| 348 | 348 |
| 349 void CXFA_Document::DoProtoMerge() { | 349 void CXFA_Document::DoProtoMerge() { |
| 350 CXFA_Node* pTemplateRoot = ToNode(GetXFAObject(XFA_HASHCODE_Template)); | 350 CXFA_Node* pTemplateRoot = ToNode(GetXFAObject(XFA_HASHCODE_Template)); |
| 351 if (!pTemplateRoot) | 351 if (!pTemplateRoot) |
| 352 return; | 352 return; |
| 353 | 353 |
| 354 CFX_MapPtrTemplate<uint32_t, CXFA_Node*> mIDMap; | 354 std::map<uint32_t, CXFA_Node*> mIDMap; |
| 355 CXFA_NodeSet sUseNodes; | 355 CXFA_NodeSet sUseNodes; |
| 356 CXFA_NodeIterator sIterator(pTemplateRoot); | 356 CXFA_NodeIterator sIterator(pTemplateRoot); |
| 357 for (CXFA_Node* pNode = sIterator.GetCurrent(); pNode; | 357 for (CXFA_Node* pNode = sIterator.GetCurrent(); pNode; |
| 358 pNode = sIterator.MoveToNext()) { | 358 pNode = sIterator.MoveToNext()) { |
| 359 CFX_WideStringC wsIDVal; | 359 CFX_WideStringC wsIDVal; |
| 360 if (pNode->TryCData(XFA_ATTRIBUTE_Id, wsIDVal) && !wsIDVal.IsEmpty()) { | 360 if (pNode->TryCData(XFA_ATTRIBUTE_Id, wsIDVal) && !wsIDVal.IsEmpty()) { |
| 361 mIDMap[FX_HashCode_GetW(wsIDVal, false)] = pNode; | 361 mIDMap[FX_HashCode_GetW(wsIDVal, false)] = pNode; |
| 362 } | 362 } |
| 363 CFX_WideStringC wsUseVal; | 363 CFX_WideStringC wsUseVal; |
| 364 if (pNode->TryCData(XFA_ATTRIBUTE_Use, wsUseVal) && !wsUseVal.IsEmpty()) { | 364 if (pNode->TryCData(XFA_ATTRIBUTE_Use, wsUseVal) && !wsUseVal.IsEmpty()) { |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 403 continue; | 403 continue; |
| 404 | 404 |
| 405 CXFA_Node* pProtoNode = nullptr; | 405 CXFA_Node* pProtoNode = nullptr; |
| 406 if (!wsSOM.IsEmpty()) { | 406 if (!wsSOM.IsEmpty()) { |
| 407 uint32_t dwFlag = XFA_RESOLVENODE_Children | XFA_RESOLVENODE_Attributes | | 407 uint32_t dwFlag = XFA_RESOLVENODE_Children | XFA_RESOLVENODE_Attributes | |
| 408 XFA_RESOLVENODE_Properties | XFA_RESOLVENODE_Parent | | 408 XFA_RESOLVENODE_Properties | XFA_RESOLVENODE_Parent | |
| 409 XFA_RESOLVENODE_Siblings; | 409 XFA_RESOLVENODE_Siblings; |
| 410 XFA_RESOLVENODE_RS resoveNodeRS; | 410 XFA_RESOLVENODE_RS resoveNodeRS; |
| 411 int32_t iRet = m_pScriptContext->ResolveObjects(pUseHrefNode, wsSOM, | 411 int32_t iRet = m_pScriptContext->ResolveObjects(pUseHrefNode, wsSOM, |
| 412 resoveNodeRS, dwFlag); | 412 resoveNodeRS, dwFlag); |
| 413 if (iRet > 0 && resoveNodeRS.nodes[0]->IsNode()) { | 413 if (iRet > 0 && resoveNodeRS.nodes[0]->IsNode()) |
| 414 pProtoNode = resoveNodeRS.nodes[0]->AsNode(); | 414 pProtoNode = resoveNodeRS.nodes[0]->AsNode(); |
| 415 } | |
| 416 } else if (!wsID.IsEmpty()) { | 415 } else if (!wsID.IsEmpty()) { |
| 417 if (!mIDMap.Lookup(FX_HashCode_GetW(wsID, false), pProtoNode)) { | 416 auto it = mIDMap.find(FX_HashCode_GetW(wsID, false)); |
| 417 if (it == mIDMap.end()) |
| 418 continue; | 418 continue; |
| 419 } | 419 pProtoNode = it->second; |
| 420 } | 420 } |
| 421 if (!pProtoNode) | 421 if (!pProtoNode) |
| 422 continue; | 422 continue; |
| 423 | 423 |
| 424 MergeNode(this, pUseHrefNode, pProtoNode); | 424 MergeNode(this, pUseHrefNode, pProtoNode); |
| 425 } | 425 } |
| 426 } | 426 } |
| OLD | NEW |