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 507 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
518 pExistingNode = pSubformArray->GetAt(0); | 518 pExistingNode = pSubformArray->GetAt(0); |
519 pSubformArray->RemoveAt(0); | 519 pSubformArray->RemoveAt(0); |
520 } | 520 } |
521 if (pExistingNode) { | 521 if (pExistingNode) { |
522 if (pSubformArray) { | 522 if (pSubformArray) { |
523 pFormParent->InsertChild(pExistingNode); | 523 pFormParent->InsertChild(pExistingNode); |
524 } else if (pExistingNode->IsContainerNode()) { | 524 } else if (pExistingNode->IsContainerNode()) { |
525 pFormParent->RemoveChild(pExistingNode); | 525 pFormParent->RemoveChild(pExistingNode); |
526 pFormParent->InsertChild(pExistingNode); | 526 pFormParent->InsertChild(pExistingNode); |
527 } | 527 } |
528 pExistingNode->SetFlag(XFA_NODEFLAG_UnusedNode, FALSE); | 528 pExistingNode->ClearFlag(XFA_NODEFLAG_UnusedNode); |
529 pExistingNode->SetTemplateNode(pTemplateNode); | 529 pExistingNode->SetTemplateNode(pTemplateNode); |
530 if (bRecursive && pExistingNode->GetClassID() != XFA_ELEMENT_Items) { | 530 if (bRecursive && pExistingNode->GetClassID() != XFA_ELEMENT_Items) { |
531 for (CXFA_Node* pTemplateChild = | 531 for (CXFA_Node* pTemplateChild = |
532 pTemplateNode->GetNodeItem(XFA_NODEITEM_FirstChild); | 532 pTemplateNode->GetNodeItem(XFA_NODEITEM_FirstChild); |
533 pTemplateChild; pTemplateChild = pTemplateChild->GetNodeItem( | 533 pTemplateChild; pTemplateChild = pTemplateChild->GetNodeItem( |
534 XFA_NODEITEM_NextSibling)) { | 534 XFA_NODEITEM_NextSibling)) { |
535 if (XFA_NeedGenerateForm(pTemplateChild)) { | 535 if (XFA_NeedGenerateForm(pTemplateChild)) { |
536 XFA_NodeMerge_CloneOrMergeContainer(pDocument, pExistingNode, | 536 XFA_NodeMerge_CloneOrMergeContainer(pDocument, pExistingNode, |
537 pTemplateChild, bRecursive); | 537 pTemplateChild, bRecursive); |
538 } | 538 } |
539 } | 539 } |
540 } | 540 } |
541 pExistingNode->SetFlag(XFA_NODEFLAG_Initialized); | 541 pExistingNode->SetFlag(XFA_NODEFLAG_Initialized, true); |
542 return pExistingNode; | 542 return pExistingNode; |
543 } | 543 } |
544 CXFA_Node* pNewNode = pTemplateNode->CloneTemplateToForm(FALSE); | 544 CXFA_Node* pNewNode = pTemplateNode->CloneTemplateToForm(FALSE); |
545 pFormParent->InsertChild(pNewNode, NULL); | 545 pFormParent->InsertChild(pNewNode, NULL); |
546 if (bRecursive) { | 546 if (bRecursive) { |
547 for (CXFA_Node* pTemplateChild = | 547 for (CXFA_Node* pTemplateChild = |
548 pTemplateNode->GetNodeItem(XFA_NODEITEM_FirstChild); | 548 pTemplateNode->GetNodeItem(XFA_NODEITEM_FirstChild); |
549 pTemplateChild; pTemplateChild = pTemplateChild->GetNodeItem( | 549 pTemplateChild; pTemplateChild = pTemplateChild->GetNodeItem( |
550 XFA_NODEITEM_NextSibling)) { | 550 XFA_NODEITEM_NextSibling)) { |
551 if (XFA_NeedGenerateForm(pTemplateChild)) { | 551 if (XFA_NeedGenerateForm(pTemplateChild)) { |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
584 if (dwNameHash != pNode->GetNameHash()) { | 584 if (dwNameHash != pNode->GetNameHash()) { |
585 break; | 585 break; |
586 } | 586 } |
587 CXFA_Node* pNextNode = pNode->GetNodeItem(XFA_NODEITEM_NextSibling); | 587 CXFA_Node* pNextNode = pNode->GetNodeItem(XFA_NODEITEM_NextSibling); |
588 pFormParent->RemoveChild(pNode); | 588 pFormParent->RemoveChild(pNode); |
589 subforms.Add(pNode); | 589 subforms.Add(pNode); |
590 pNode = pNextNode; | 590 pNode = pNextNode; |
591 } | 591 } |
592 pFormParent->RemoveChild(pExistingNode); | 592 pFormParent->RemoveChild(pExistingNode); |
593 pFormParent->InsertChild(pExistingNode); | 593 pFormParent->InsertChild(pExistingNode); |
594 pExistingNode->SetFlag(XFA_NODEFLAG_UnusedNode, FALSE); | 594 pExistingNode->ClearFlag(XFA_NODEFLAG_UnusedNode); |
595 pExistingNode->SetTemplateNode(pTemplateNode); | 595 pExistingNode->SetTemplateNode(pTemplateNode); |
596 return pExistingNode; | 596 return pExistingNode; |
597 } | 597 } |
598 CXFA_Node* pNewNode = pDocument->GetParser()->GetFactory()->CreateNode( | 598 CXFA_Node* pNewNode = pDocument->GetParser()->GetFactory()->CreateNode( |
599 XFA_XDPPACKET_Form, XFA_ELEMENT_InstanceManager); | 599 XFA_XDPPACKET_Form, XFA_ELEMENT_InstanceManager); |
600 FXSYS_assert(pNewNode); | 600 FXSYS_assert(pNewNode); |
601 wsInstMgrNodeName = | 601 wsInstMgrNodeName = |
602 FX_WSTRC(L"_") + pTemplateNode->GetCData(XFA_ATTRIBUTE_Name); | 602 FX_WSTRC(L"_") + pTemplateNode->GetCData(XFA_ATTRIBUTE_Name); |
603 pNewNode->SetCData(XFA_ATTRIBUTE_Name, wsInstMgrNodeName); | 603 pNewNode->SetCData(XFA_ATTRIBUTE_Name, wsInstMgrNodeName); |
604 pFormParent->InsertChild(pNewNode, NULL); | 604 pFormParent->InsertChild(pNewNode, NULL); |
(...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
778 : NULL; | 778 : NULL; |
779 if (CXFA_Node* pOccurTemplateNode = | 779 if (CXFA_Node* pOccurTemplateNode = |
780 pTemplateNode->GetFirstChildByClass(XFA_ELEMENT_Occur)) { | 780 pTemplateNode->GetFirstChildByClass(XFA_ELEMENT_Occur)) { |
781 pOccurNode = pInstMgrNode | 781 pOccurNode = pInstMgrNode |
782 ? XFA_NodeMerge_CloneOrMergeContainer( | 782 ? XFA_NodeMerge_CloneOrMergeContainer( |
783 pDocument, pInstMgrNode, pOccurTemplateNode, FALSE) | 783 pDocument, pInstMgrNode, pOccurTemplateNode, FALSE) |
784 : pOccurTemplateNode; | 784 : pOccurTemplateNode; |
785 } else if (pInstMgrNode) { | 785 } else if (pInstMgrNode) { |
786 pOccurNode = pInstMgrNode->GetFirstChildByClass(XFA_ELEMENT_Occur); | 786 pOccurNode = pInstMgrNode->GetFirstChildByClass(XFA_ELEMENT_Occur); |
787 if (pOccurNode) { | 787 if (pOccurNode) { |
788 pOccurNode->SetFlag(XFA_NODEFLAG_UnusedNode, FALSE); | 788 pOccurNode->ClearFlag(XFA_NODEFLAG_UnusedNode); |
789 } | 789 } |
790 } | 790 } |
791 if (pInstMgrNode) { | 791 if (pInstMgrNode) { |
792 pInstMgrNode->SetFlag(XFA_NODEFLAG_Initialized); | 792 pInstMgrNode->SetFlag(XFA_NODEFLAG_Initialized, true); |
793 pSearchArray = &subformArray; | 793 pSearchArray = &subformArray; |
794 if (pFormParentNode->GetClassID() == XFA_ELEMENT_PageArea) { | 794 if (pFormParentNode->GetClassID() == XFA_ELEMENT_PageArea) { |
795 bOneInstance = TRUE; | 795 bOneInstance = TRUE; |
796 if (subformArray.GetSize() < 1) { | 796 if (subformArray.GetSize() < 1) { |
797 pSearchArray = NULL; | 797 pSearchArray = NULL; |
798 } | 798 } |
799 } else if ((pTemplateNode->GetNameHash() == 0) && | 799 } else if ((pTemplateNode->GetNameHash() == 0) && |
800 (subformArray.GetSize() < 1)) { | 800 (subformArray.GetSize() < 1)) { |
801 pSearchArray = NULL; | 801 pSearchArray = NULL; |
802 } | 802 } |
(...skipping 538 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1341 bEmptyForm = TRUE; | 1341 bEmptyForm = TRUE; |
1342 pFormRoot = CreateNode(XFA_XDPPACKET_Form, XFA_ELEMENT_Form); | 1342 pFormRoot = CreateNode(XFA_XDPPACKET_Form, XFA_ELEMENT_Form); |
1343 FXSYS_assert(pFormRoot); | 1343 FXSYS_assert(pFormRoot); |
1344 pFormRoot->SetCData(XFA_ATTRIBUTE_Name, FX_WSTRC(L"form")); | 1344 pFormRoot->SetCData(XFA_ATTRIBUTE_Name, FX_WSTRC(L"form")); |
1345 m_pRootNode->InsertChild(pFormRoot, NULL); | 1345 m_pRootNode->InsertChild(pFormRoot, NULL); |
1346 } else { | 1346 } else { |
1347 CXFA_NodeIteratorTemplate<CXFA_Node, CXFA_TraverseStrategy_XFANode> | 1347 CXFA_NodeIteratorTemplate<CXFA_Node, CXFA_TraverseStrategy_XFANode> |
1348 sIterator(pFormRoot); | 1348 sIterator(pFormRoot); |
1349 for (CXFA_Node* pNode = sIterator.MoveToNext(); pNode; | 1349 for (CXFA_Node* pNode = sIterator.MoveToNext(); pNode; |
1350 pNode = sIterator.MoveToNext()) { | 1350 pNode = sIterator.MoveToNext()) { |
1351 pNode->SetFlag(XFA_NODEFLAG_UnusedNode); | 1351 pNode->SetFlag(XFA_NODEFLAG_UnusedNode, true); |
1352 } | 1352 } |
1353 } | 1353 } |
1354 CXFA_Node* pSubformSetNode = XFA_NodeMerge_CloneOrMergeContainer( | 1354 CXFA_Node* pSubformSetNode = XFA_NodeMerge_CloneOrMergeContainer( |
1355 this, pFormRoot, pTemplateChosen, FALSE); | 1355 this, pFormRoot, pTemplateChosen, FALSE); |
1356 FXSYS_assert(pSubformSetNode); | 1356 FXSYS_assert(pSubformSetNode); |
1357 if (!pDataTopLevel) { | 1357 if (!pDataTopLevel) { |
1358 CFX_WideStringC wsFormName = pSubformSetNode->GetCData(XFA_ATTRIBUTE_Name); | 1358 CFX_WideStringC wsFormName = pSubformSetNode->GetCData(XFA_ATTRIBUTE_Name); |
1359 CFX_WideString wsDataTopLevelName = | 1359 CFX_WideString wsDataTopLevelName = |
1360 wsFormName.IsEmpty() ? FX_WSTRC(L"form") : wsFormName; | 1360 wsFormName.IsEmpty() ? FX_WSTRC(L"form") : wsFormName; |
1361 CFDE_XMLElement* pDataTopLevelXMLNode = | 1361 CFDE_XMLElement* pDataTopLevelXMLNode = |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1399 sIterator(pFormRoot); | 1399 sIterator(pFormRoot); |
1400 CXFA_Node* pNode = sIterator.MoveToNext(); | 1400 CXFA_Node* pNode = sIterator.MoveToNext(); |
1401 while (pNode) { | 1401 while (pNode) { |
1402 if (pNode->HasFlag(XFA_NODEFLAG_UnusedNode)) { | 1402 if (pNode->HasFlag(XFA_NODEFLAG_UnusedNode)) { |
1403 if (pNode->GetObjectType() == XFA_OBJECTTYPE_ContainerNode || | 1403 if (pNode->GetObjectType() == XFA_OBJECTTYPE_ContainerNode || |
1404 pNode->GetClassID() == XFA_ELEMENT_InstanceManager) { | 1404 pNode->GetClassID() == XFA_ELEMENT_InstanceManager) { |
1405 CXFA_Node* pNext = sIterator.SkipChildrenAndMoveToNext(); | 1405 CXFA_Node* pNext = sIterator.SkipChildrenAndMoveToNext(); |
1406 pNode->GetNodeItem(XFA_NODEITEM_Parent)->RemoveChild(pNode); | 1406 pNode->GetNodeItem(XFA_NODEITEM_Parent)->RemoveChild(pNode); |
1407 pNode = pNext; | 1407 pNode = pNext; |
1408 } else { | 1408 } else { |
1409 pNode->SetFlag(XFA_NODEFLAG_UnusedNode, FALSE); | 1409 pNode->ClearFlag(XFA_NODEFLAG_UnusedNode); |
1410 pNode->SetFlag(XFA_NODEFLAG_Initialized); | 1410 pNode->SetFlag(XFA_NODEFLAG_Initialized, true); |
1411 pNode = sIterator.MoveToNext(); | 1411 pNode = sIterator.MoveToNext(); |
1412 } | 1412 } |
1413 } else { | 1413 } else { |
1414 pNode->SetFlag(XFA_NODEFLAG_Initialized); | 1414 pNode->SetFlag(XFA_NODEFLAG_Initialized, true); |
1415 pNode = sIterator.MoveToNext(); | 1415 pNode = sIterator.MoveToNext(); |
1416 } | 1416 } |
1417 } | 1417 } |
1418 } | 1418 } |
1419 } | 1419 } |
1420 void CXFA_Document::DoDataRemerge(FX_BOOL bDoDataMerge) { | 1420 void CXFA_Document::DoDataRemerge(FX_BOOL bDoDataMerge) { |
1421 CXFA_Node* pFormRoot = ToNode(GetXFAObject(XFA_HASHCODE_Form)); | 1421 CXFA_Node* pFormRoot = ToNode(GetXFAObject(XFA_HASHCODE_Form)); |
1422 if (pFormRoot) { | 1422 if (pFormRoot) { |
1423 while (CXFA_Node* pNode = pFormRoot->GetNodeItem(XFA_NODEITEM_FirstChild)) { | 1423 while (CXFA_Node* pNode = pFormRoot->GetNodeItem(XFA_NODEITEM_FirstChild)) { |
1424 pFormRoot->RemoveChild(pNode); | 1424 pFormRoot->RemoveChild(pNode); |
1425 } | 1425 } |
1426 pFormRoot->SetObject(XFA_ATTRIBUTE_BindingNode, NULL); | 1426 pFormRoot->SetObject(XFA_ATTRIBUTE_BindingNode, NULL); |
1427 } | 1427 } |
1428 XFA_DataMerge_ClearGlobalBinding(this); | 1428 XFA_DataMerge_ClearGlobalBinding(this); |
1429 if (bDoDataMerge) { | 1429 if (bDoDataMerge) { |
1430 DoDataMerge(); | 1430 DoDataMerge(); |
1431 } | 1431 } |
1432 CXFA_LayoutProcessor* pLayoutProcessor = GetLayoutProcessor(); | 1432 CXFA_LayoutProcessor* pLayoutProcessor = GetLayoutProcessor(); |
1433 pLayoutProcessor->SetForceReLayout(TRUE); | 1433 pLayoutProcessor->SetForceReLayout(TRUE); |
1434 } | 1434 } |
OLD | NEW |