| 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_script_resolveprocessor.h" | 7 #include "xfa/fxfa/parser/xfa_script_resolveprocessor.h" |
| 8 | 8 |
| 9 #include "core/fxcrt/include/fx_ext.h" | 9 #include "core/fxcrt/include/fx_ext.h" |
| 10 #include "xfa/fxfa/parser/xfa_doclayout.h" | 10 #include "xfa/fxfa/parser/xfa_doclayout.h" |
| 11 #include "xfa/fxfa/parser/xfa_document.h" | 11 #include "xfa/fxfa/parser/xfa_document.h" |
| 12 #include "xfa/fxfa/parser/xfa_localemgr.h" | 12 #include "xfa/fxfa/parser/xfa_localemgr.h" |
| 13 #include "xfa/fxfa/parser/xfa_object.h" | 13 #include "xfa/fxfa/parser/xfa_object.h" |
| 14 #include "xfa/fxfa/parser/xfa_parser.h" | 14 #include "xfa/fxfa/parser/xfa_parser.h" |
| 15 #include "xfa/fxfa/parser/xfa_script.h" | 15 #include "xfa/fxfa/parser/xfa_script.h" |
| 16 #include "xfa/fxfa/parser/xfa_script_imp.h" | 16 #include "xfa/fxfa/parser/xfa_script_imp.h" |
| 17 #include "xfa/fxfa/parser/xfa_script_nodehelper.h" | 17 #include "xfa/fxfa/parser/xfa_script_nodehelper.h" |
| 18 #include "xfa/fxfa/parser/xfa_utils.h" | 18 #include "xfa/fxfa/parser/xfa_utils.h" |
| 19 | 19 |
| 20 CXFA_ResolveProcessor::CXFA_ResolveProcessor(void) | 20 CXFA_ResolveProcessor::CXFA_ResolveProcessor(void) |
| 21 : m_pNodeHelper(new CXFA_NodeHelper), m_iCurStart(0) {} | 21 : m_pNodeHelper(new CXFA_NodeHelper), m_iCurStart(0) {} |
| 22 | 22 |
| 23 CXFA_ResolveProcessor::~CXFA_ResolveProcessor(void) { | 23 CXFA_ResolveProcessor::~CXFA_ResolveProcessor(void) { |
| 24 delete m_pNodeHelper; | 24 delete m_pNodeHelper; |
| 25 } | 25 } |
| 26 | 26 |
| 27 int32_t CXFA_ResolveProcessor::XFA_ResolveNodes(CXFA_ResolveNodesData& rnd) { | 27 int32_t CXFA_ResolveProcessor::XFA_ResolveNodes(CXFA_ResolveNodesData& rnd) { |
| 28 if (rnd.m_CurNode == NULL) { | 28 if (!rnd.m_CurNode) |
| 29 return -1; | 29 return -1; |
| 30 } | 30 |
| 31 if (!rnd.m_CurNode->IsNode()) { | 31 if (!rnd.m_CurNode->IsNode()) { |
| 32 if (rnd.m_dwStyles & XFA_RESOLVENODE_Attributes) { | 32 if (rnd.m_dwStyles & XFA_RESOLVENODE_Attributes) { |
| 33 return XFA_ResolveNodes_ForAttributeRs(rnd.m_CurNode, rnd, | 33 return XFA_ResolveNodes_ForAttributeRs(rnd.m_CurNode, rnd, |
| 34 rnd.m_wsName.AsStringC()); | 34 rnd.m_wsName.AsStringC()); |
| 35 } | 35 } |
| 36 return 0; | 36 return 0; |
| 37 } | 37 } |
| 38 if (rnd.m_dwStyles & XFA_RESOLVENODE_AnyChild) { | 38 if (rnd.m_dwStyles & XFA_RESOLVENODE_AnyChild) { |
| 39 return XFA_ResolveNodes_AnyChild(rnd); | 39 return XFA_ResolveNodes_AnyChild(rnd); |
| 40 } | 40 } |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 77 int32_t nRet = XFA_ResolveNodes_Normal(rnd); | 77 int32_t nRet = XFA_ResolveNodes_Normal(rnd); |
| 78 if (nRet < 1 && rnd.m_uHashName == XFA_HASHCODE_Xfa) { | 78 if (nRet < 1 && rnd.m_uHashName == XFA_HASHCODE_Xfa) { |
| 79 rnd.m_Nodes.Add(rnd.m_pSC->GetDocument()->GetRoot()); | 79 rnd.m_Nodes.Add(rnd.m_pSC->GetDocument()->GetRoot()); |
| 80 } | 80 } |
| 81 return rnd.m_Nodes.GetSize(); | 81 return rnd.m_Nodes.GetSize(); |
| 82 } | 82 } |
| 83 int32_t CXFA_ResolveProcessor::XFA_ResolveNodes_AnyChild( | 83 int32_t CXFA_ResolveProcessor::XFA_ResolveNodes_AnyChild( |
| 84 CXFA_ResolveNodesData& rnd) { | 84 CXFA_ResolveNodesData& rnd) { |
| 85 CFX_WideString wsName = rnd.m_wsName; | 85 CFX_WideString wsName = rnd.m_wsName; |
| 86 CFX_WideString wsCondition = rnd.m_wsCondition; | 86 CFX_WideString wsCondition = rnd.m_wsCondition; |
| 87 CXFA_Node* findNode = NULL; | 87 CXFA_Node* findNode = nullptr; |
| 88 CXFA_NodeArray siblings; | 88 CXFA_NodeArray siblings; |
| 89 FX_BOOL bClassName = FALSE; | 89 FX_BOOL bClassName = FALSE; |
| 90 if (wsName.GetAt(0) == '#') { | 90 if (wsName.GetAt(0) == '#') { |
| 91 bClassName = TRUE; | 91 bClassName = TRUE; |
| 92 wsName = wsName.Right(wsName.GetLength() - 1); | 92 wsName = wsName.Right(wsName.GetLength() - 1); |
| 93 } | 93 } |
| 94 findNode = m_pNodeHelper->XFA_ResolveNodes_GetOneChild( | 94 findNode = m_pNodeHelper->XFA_ResolveNodes_GetOneChild( |
| 95 ToNode(rnd.m_CurNode), wsName.c_str(), bClassName); | 95 ToNode(rnd.m_CurNode), wsName.c_str(), bClassName); |
| 96 if (findNode == NULL) { | 96 if (!findNode) |
| 97 return 0; | 97 return 0; |
| 98 } | 98 |
| 99 if (wsCondition.IsEmpty()) { | 99 if (wsCondition.IsEmpty()) { |
| 100 rnd.m_Nodes.Add(findNode); | 100 rnd.m_Nodes.Add(findNode); |
| 101 return rnd.m_Nodes.GetSize(); | 101 return rnd.m_Nodes.GetSize(); |
| 102 } | 102 } |
| 103 m_pNodeHelper->XFA_CountSiblings(findNode, XFA_LOGIC_Transparent, | 103 m_pNodeHelper->XFA_CountSiblings(findNode, XFA_LOGIC_Transparent, |
| 104 (CXFA_NodeArray*)&rnd.m_Nodes, bClassName); | 104 (CXFA_NodeArray*)&rnd.m_Nodes, bClassName); |
| 105 XFA_ResolveNode_FilterCondition(rnd, wsCondition); | 105 XFA_ResolveNode_FilterCondition(rnd, wsCondition); |
| 106 return rnd.m_Nodes.GetSize(); | 106 return rnd.m_Nodes.GetSize(); |
| 107 } | 107 } |
| 108 int32_t CXFA_ResolveProcessor::XFA_ResolveNodes_Dollar( | 108 int32_t CXFA_ResolveProcessor::XFA_ResolveNodes_Dollar( |
| (...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 219 XFA_HashCode uNameHash = rnd.m_uHashName; | 219 XFA_HashCode uNameHash = rnd.m_uHashName; |
| 220 CFX_WideString& wsCondition = rnd.m_wsCondition; | 220 CFX_WideString& wsCondition = rnd.m_wsCondition; |
| 221 CXFA_ResolveNodesData rndFind; | 221 CXFA_ResolveNodesData rndFind; |
| 222 rndFind.m_wsName = rnd.m_wsName; | 222 rndFind.m_wsName = rnd.m_wsName; |
| 223 rndFind.m_wsCondition = rnd.m_wsCondition; | 223 rndFind.m_wsCondition = rnd.m_wsCondition; |
| 224 rndFind.m_pSC = rnd.m_pSC; | 224 rndFind.m_pSC = rnd.m_pSC; |
| 225 rndFind.m_nLevel = rnd.m_nLevel + 1; | 225 rndFind.m_nLevel = rnd.m_nLevel + 1; |
| 226 rndFind.m_uHashName = uNameHash; | 226 rndFind.m_uHashName = uNameHash; |
| 227 CXFA_NodeArray children; | 227 CXFA_NodeArray children; |
| 228 CXFA_NodeArray properties; | 228 CXFA_NodeArray properties; |
| 229 CXFA_Node* pVariablesNode = NULL; | 229 CXFA_Node* pVariablesNode = nullptr; |
| 230 CXFA_Node* pPageSetNode = NULL; | 230 CXFA_Node* pPageSetNode = nullptr; |
| 231 CXFA_Node* pChild = curNode->GetNodeItem(XFA_NODEITEM_FirstChild); | 231 CXFA_Node* pChild = curNode->GetNodeItem(XFA_NODEITEM_FirstChild); |
| 232 while (pChild) { | 232 while (pChild) { |
| 233 if (pChild->GetClassID() == XFA_ELEMENT_Variables) { | 233 if (pChild->GetClassID() == XFA_ELEMENT_Variables) { |
| 234 pVariablesNode = pChild; | 234 pVariablesNode = pChild; |
| 235 pChild = pChild->GetNodeItem(XFA_NODEITEM_NextSibling); | 235 pChild = pChild->GetNodeItem(XFA_NODEITEM_NextSibling); |
| 236 continue; | 236 continue; |
| 237 } else if (pChild->GetClassID() == XFA_ELEMENT_PageSet) { | 237 } else if (pChild->GetClassID() == XFA_ELEMENT_PageSet) { |
| 238 pPageSetNode = pChild; | 238 pPageSetNode = pChild; |
| 239 pChild = pChild->GetNodeItem(XFA_NODEITEM_NextSibling); | 239 pChild = pChild->GetNodeItem(XFA_NODEITEM_NextSibling); |
| 240 continue; | 240 continue; |
| (...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 345 nodes.Add(childProperty); | 345 nodes.Add(childProperty); |
| 346 } | 346 } |
| 347 } | 347 } |
| 348 if (nodes.GetSize() > nNum) { | 348 if (nodes.GetSize() > nNum) { |
| 349 XFA_ResolveNode_FilterCondition(rnd, wsCondition); | 349 XFA_ResolveNode_FilterCondition(rnd, wsCondition); |
| 350 if (nodes.GetSize() > 0) { | 350 if (nodes.GetSize() > 0) { |
| 351 return 1; | 351 return 1; |
| 352 } | 352 } |
| 353 return 0; | 353 return 0; |
| 354 } | 354 } |
| 355 CXFA_Node* pProp = NULL; | 355 CXFA_Node* pProp = nullptr; |
| 356 if (XFA_ELEMENT_Subform == curNode->GetClassID() && | 356 if (XFA_ELEMENT_Subform == curNode->GetClassID() && |
| 357 XFA_HASHCODE_Occur == uNameHash) { | 357 XFA_HASHCODE_Occur == uNameHash) { |
| 358 CXFA_Node* pInstanceManager = | 358 CXFA_Node* pInstanceManager = |
| 359 curNode->AsNode()->GetInstanceMgrOfSubform(); | 359 curNode->AsNode()->GetInstanceMgrOfSubform(); |
| 360 if (pInstanceManager) { | 360 if (pInstanceManager) { |
| 361 pProp = pInstanceManager->GetProperty(0, XFA_ELEMENT_Occur, TRUE); | 361 pProp = pInstanceManager->GetProperty(0, XFA_ELEMENT_Occur, TRUE); |
| 362 } | 362 } |
| 363 } else { | 363 } else { |
| 364 const XFA_ELEMENTINFO* pElement = | 364 const XFA_ELEMENTINFO* pElement = |
| 365 XFA_GetElementByName(wsName.AsStringC()); | 365 XFA_GetElementByName(wsName.AsStringC()); |
| (...skipping 276 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 642 break; | 642 break; |
| 643 } | 643 } |
| 644 } | 644 } |
| 645 if (bAll) { | 645 if (bAll) { |
| 646 if (rnd.m_dwStyles & XFA_RESOLVENODE_CreateNode) { | 646 if (rnd.m_dwStyles & XFA_RESOLVENODE_CreateNode) { |
| 647 if (rnd.m_dwStyles & XFA_RESOLVENODE_Bind) { | 647 if (rnd.m_dwStyles & XFA_RESOLVENODE_Bind) { |
| 648 m_pNodeHelper->m_pCreateParent = ToNode(rnd.m_CurNode); | 648 m_pNodeHelper->m_pCreateParent = ToNode(rnd.m_CurNode); |
| 649 m_pNodeHelper->m_iCreateCount = 1; | 649 m_pNodeHelper->m_iCreateCount = 1; |
| 650 findNodes.RemoveAll(); | 650 findNodes.RemoveAll(); |
| 651 m_pNodeHelper->m_iCurAllStart = -1; | 651 m_pNodeHelper->m_iCurAllStart = -1; |
| 652 m_pNodeHelper->m_pAllStartParent = NULL; | 652 m_pNodeHelper->m_pAllStartParent = nullptr; |
| 653 } else { | 653 } else { |
| 654 if (m_pNodeHelper->m_iCurAllStart == -1) { | 654 if (m_pNodeHelper->m_iCurAllStart == -1) { |
| 655 m_pNodeHelper->m_iCurAllStart = m_iCurStart; | 655 m_pNodeHelper->m_iCurAllStart = m_iCurStart; |
| 656 m_pNodeHelper->m_pAllStartParent = ToNode(rnd.m_CurNode); | 656 m_pNodeHelper->m_pAllStartParent = ToNode(rnd.m_CurNode); |
| 657 } | 657 } |
| 658 } | 658 } |
| 659 } else if (rnd.m_dwStyles & XFA_RESOLVENODE_BindNew) { | 659 } else if (rnd.m_dwStyles & XFA_RESOLVENODE_BindNew) { |
| 660 if (m_pNodeHelper->m_iCurAllStart == -1) { | 660 if (m_pNodeHelper->m_iCurAllStart == -1) { |
| 661 m_pNodeHelper->m_iCurAllStart = m_iCurStart; | 661 m_pNodeHelper->m_iCurAllStart = m_iCurStart; |
| 662 } | 662 } |
| (...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 815 if (m_pNodeHelper->XFA_CreateNode_ForCondition(wsNextCondition)) { | 815 if (m_pNodeHelper->XFA_CreateNode_ForCondition(wsNextCondition)) { |
| 816 if (m_pNodeHelper->m_eLastCreateType == XFA_ELEMENT_DataGroup) { | 816 if (m_pNodeHelper->m_eLastCreateType == XFA_ELEMENT_DataGroup) { |
| 817 iIndex = 0; | 817 iIndex = 0; |
| 818 } else { | 818 } else { |
| 819 iIndex = iCount - 1; | 819 iIndex = iCount - 1; |
| 820 } | 820 } |
| 821 } else { | 821 } else { |
| 822 iIndex = iCount - 1; | 822 iIndex = iCount - 1; |
| 823 } | 823 } |
| 824 } | 824 } |
| OLD | NEW |