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/include/fx_ext.h" | 7 #include "core/fxcrt/include/fx_ext.h" |
8 #include "xfa/fxfa/app/xfa_ffnotify.h" | 8 #include "xfa/fxfa/app/xfa_ffnotify.h" |
9 #include "xfa/fxfa/fm2js/xfa_fm2jsapi.h" | 9 #include "xfa/fxfa/fm2js/xfa_fm2jsapi.h" |
10 #include "xfa/fxfa/parser/xfa_basic_imp.h" | 10 #include "xfa/fxfa/parser/xfa_basic_imp.h" |
(...skipping 294 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
305 CXFA_Node* pDestNodeParent, | 305 CXFA_Node* pDestNodeParent, |
306 CXFA_Node* pProtoNode) { | 306 CXFA_Node* pProtoNode) { |
307 CXFA_Node* pExistingNode = NULL; | 307 CXFA_Node* pExistingNode = NULL; |
308 for (CXFA_Node* pFormChild = | 308 for (CXFA_Node* pFormChild = |
309 pDestNodeParent->GetNodeItem(XFA_NODEITEM_FirstChild); | 309 pDestNodeParent->GetNodeItem(XFA_NODEITEM_FirstChild); |
310 pFormChild; | 310 pFormChild; |
311 pFormChild = pFormChild->GetNodeItem(XFA_NODEITEM_NextSibling)) { | 311 pFormChild = pFormChild->GetNodeItem(XFA_NODEITEM_NextSibling)) { |
312 if (pFormChild->GetClassID() == pProtoNode->GetClassID() && | 312 if (pFormChild->GetClassID() == pProtoNode->GetClassID() && |
313 pFormChild->GetNameHash() == pProtoNode->GetNameHash() && | 313 pFormChild->GetNameHash() == pProtoNode->GetNameHash() && |
314 pFormChild->HasFlag(XFA_NODEFLAG_UnusedNode)) { | 314 pFormChild->HasFlag(XFA_NODEFLAG_UnusedNode)) { |
315 pFormChild->SetFlag(XFA_NODEFLAG_UnusedNode, FALSE); | 315 pFormChild->ClearFlag(XFA_NODEFLAG_UnusedNode); |
316 pExistingNode = pFormChild; | 316 pExistingNode = pFormChild; |
317 break; | 317 break; |
318 } | 318 } |
319 } | 319 } |
320 if (pExistingNode) { | 320 if (pExistingNode) { |
321 pExistingNode->SetTemplateNode(pProtoNode); | 321 pExistingNode->SetTemplateNode(pProtoNode); |
322 for (CXFA_Node* pTemplateChild = | 322 for (CXFA_Node* pTemplateChild = |
323 pProtoNode->GetNodeItem(XFA_NODEITEM_FirstChild); | 323 pProtoNode->GetNodeItem(XFA_NODEITEM_FirstChild); |
324 pTemplateChild; pTemplateChild = pTemplateChild->GetNodeItem( | 324 pTemplateChild; pTemplateChild = pTemplateChild->GetNodeItem( |
325 XFA_NODEITEM_NextSibling)) { | 325 XFA_NODEITEM_NextSibling)) { |
326 XFA_ProtoMerge_MergeNodeRecurse(pDocument, pExistingNode, pTemplateChild); | 326 XFA_ProtoMerge_MergeNodeRecurse(pDocument, pExistingNode, pTemplateChild); |
327 } | 327 } |
328 return; | 328 return; |
329 } | 329 } |
330 CXFA_Node* pNewNode = pProtoNode->Clone(TRUE); | 330 CXFA_Node* pNewNode = pProtoNode->Clone(TRUE); |
331 pNewNode->SetTemplateNode(pProtoNode); | 331 pNewNode->SetTemplateNode(pProtoNode); |
332 pDestNodeParent->InsertChild(pNewNode, NULL); | 332 pDestNodeParent->InsertChild(pNewNode, NULL); |
333 } | 333 } |
334 static void XFA_ProtoMerge_MergeNode(CXFA_Document* pDocument, | 334 static void XFA_ProtoMerge_MergeNode(CXFA_Document* pDocument, |
335 CXFA_Node* pDestNode, | 335 CXFA_Node* pDestNode, |
336 CXFA_Node* pProtoNode) { | 336 CXFA_Node* pProtoNode) { |
337 { | 337 { |
338 CXFA_NodeIterator sIterator(pDestNode); | 338 CXFA_NodeIterator sIterator(pDestNode); |
339 for (CXFA_Node* pNode = sIterator.GetCurrent(); pNode; | 339 for (CXFA_Node* pNode = sIterator.GetCurrent(); pNode; |
340 pNode = sIterator.MoveToNext()) { | 340 pNode = sIterator.MoveToNext()) { |
341 pNode->SetFlag(XFA_NODEFLAG_UnusedNode); | 341 pNode->SetFlag(XFA_NODEFLAG_UnusedNode, true); |
342 } | 342 } |
343 } | 343 } |
344 pDestNode->SetTemplateNode(pProtoNode); | 344 pDestNode->SetTemplateNode(pProtoNode); |
345 for (CXFA_Node* pTemplateChild = | 345 for (CXFA_Node* pTemplateChild = |
346 pProtoNode->GetNodeItem(XFA_NODEITEM_FirstChild); | 346 pProtoNode->GetNodeItem(XFA_NODEITEM_FirstChild); |
347 pTemplateChild; | 347 pTemplateChild; |
348 pTemplateChild = pTemplateChild->GetNodeItem(XFA_NODEITEM_NextSibling)) { | 348 pTemplateChild = pTemplateChild->GetNodeItem(XFA_NODEITEM_NextSibling)) { |
349 XFA_ProtoMerge_MergeNodeRecurse(pDocument, pDestNode, pTemplateChild); | 349 XFA_ProtoMerge_MergeNodeRecurse(pDocument, pDestNode, pTemplateChild); |
350 } | 350 } |
351 { | 351 { |
352 CXFA_NodeIterator sIterator(pDestNode); | 352 CXFA_NodeIterator sIterator(pDestNode); |
353 for (CXFA_Node* pNode = sIterator.GetCurrent(); pNode; | 353 for (CXFA_Node* pNode = sIterator.GetCurrent(); pNode; |
354 pNode = sIterator.MoveToNext()) { | 354 pNode = sIterator.MoveToNext()) { |
355 pNode->SetFlag(XFA_NODEFLAG_UnusedNode, FALSE); | 355 pNode->ClearFlag(XFA_NODEFLAG_UnusedNode); |
356 } | 356 } |
357 } | 357 } |
358 } | 358 } |
359 void CXFA_Document::DoProtoMerge() { | 359 void CXFA_Document::DoProtoMerge() { |
360 CXFA_Node* pTemplateRoot = ToNode(GetXFAObject(XFA_HASHCODE_Template)); | 360 CXFA_Node* pTemplateRoot = ToNode(GetXFAObject(XFA_HASHCODE_Template)); |
361 if (!pTemplateRoot) { | 361 if (!pTemplateRoot) { |
362 return; | 362 return; |
363 } | 363 } |
364 CFX_MapPtrTemplate<uint32_t, CXFA_Node*> mIDMap; | 364 CFX_MapPtrTemplate<uint32_t, CXFA_Node*> mIDMap; |
365 CXFA_NodeSet sUseNodes; | 365 CXFA_NodeSet sUseNodes; |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
432 pProtoNode)) { | 432 pProtoNode)) { |
433 continue; | 433 continue; |
434 } | 434 } |
435 } | 435 } |
436 if (!pProtoNode) { | 436 if (!pProtoNode) { |
437 continue; | 437 continue; |
438 } | 438 } |
439 XFA_ProtoMerge_MergeNode(this, pUseHrefNode, pProtoNode); | 439 XFA_ProtoMerge_MergeNode(this, pUseHrefNode, pProtoNode); |
440 } | 440 } |
441 } | 441 } |
OLD | NEW |