| 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() | 20 CXFA_ResolveProcessor::CXFA_ResolveProcessor() |
| 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() { | 23 CXFA_ResolveProcessor::~CXFA_ResolveProcessor() { |
| 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) { |
| (...skipping 38 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(); |
| (...skipping 112 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->GetElementType() == XFA_Element::Variables) { | 233 if (pChild->GetElementType() == 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->GetElementType() == XFA_Element::PageSet) { | 237 } else if (pChild->GetElementType() == 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 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 346 nodes.Add(childProperty); | 346 nodes.Add(childProperty); |
| 347 } | 347 } |
| 348 } | 348 } |
| 349 if (nodes.GetSize() > nNum) { | 349 if (nodes.GetSize() > nNum) { |
| 350 XFA_ResolveNode_FilterCondition(rnd, wsCondition); | 350 XFA_ResolveNode_FilterCondition(rnd, wsCondition); |
| 351 if (nodes.GetSize() > 0) { | 351 if (nodes.GetSize() > 0) { |
| 352 return 1; | 352 return 1; |
| 353 } | 353 } |
| 354 return 0; | 354 return 0; |
| 355 } | 355 } |
| 356 CXFA_Node* pProp = NULL; | 356 CXFA_Node* pProp = nullptr; |
| 357 if (XFA_Element::Subform == curNode->GetElementType() && | 357 if (XFA_Element::Subform == curNode->GetElementType() && |
| 358 XFA_HASHCODE_Occur == uNameHash) { | 358 XFA_HASHCODE_Occur == uNameHash) { |
| 359 CXFA_Node* pInstanceManager = | 359 CXFA_Node* pInstanceManager = |
| 360 curNode->AsNode()->GetInstanceMgrOfSubform(); | 360 curNode->AsNode()->GetInstanceMgrOfSubform(); |
| 361 if (pInstanceManager) { | 361 if (pInstanceManager) { |
| 362 pProp = pInstanceManager->GetProperty(0, XFA_Element::Occur, TRUE); | 362 pProp = pInstanceManager->GetProperty(0, XFA_Element::Occur, TRUE); |
| 363 } | 363 } |
| 364 } else { | 364 } else { |
| 365 const XFA_ELEMENTINFO* pElement = | 365 const XFA_ELEMENTINFO* pElement = |
| 366 XFA_GetElementByName(wsName.AsStringC()); | 366 XFA_GetElementByName(wsName.AsStringC()); |
| (...skipping 277 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 644 break; | 644 break; |
| 645 } | 645 } |
| 646 } | 646 } |
| 647 if (bAll) { | 647 if (bAll) { |
| 648 if (rnd.m_dwStyles & XFA_RESOLVENODE_CreateNode) { | 648 if (rnd.m_dwStyles & XFA_RESOLVENODE_CreateNode) { |
| 649 if (rnd.m_dwStyles & XFA_RESOLVENODE_Bind) { | 649 if (rnd.m_dwStyles & XFA_RESOLVENODE_Bind) { |
| 650 m_pNodeHelper->m_pCreateParent = ToNode(rnd.m_CurNode); | 650 m_pNodeHelper->m_pCreateParent = ToNode(rnd.m_CurNode); |
| 651 m_pNodeHelper->m_iCreateCount = 1; | 651 m_pNodeHelper->m_iCreateCount = 1; |
| 652 findNodes.RemoveAll(); | 652 findNodes.RemoveAll(); |
| 653 m_pNodeHelper->m_iCurAllStart = -1; | 653 m_pNodeHelper->m_iCurAllStart = -1; |
| 654 m_pNodeHelper->m_pAllStartParent = NULL; | 654 m_pNodeHelper->m_pAllStartParent = nullptr; |
| 655 } else { | 655 } else { |
| 656 if (m_pNodeHelper->m_iCurAllStart == -1) { | 656 if (m_pNodeHelper->m_iCurAllStart == -1) { |
| 657 m_pNodeHelper->m_iCurAllStart = m_iCurStart; | 657 m_pNodeHelper->m_iCurAllStart = m_iCurStart; |
| 658 m_pNodeHelper->m_pAllStartParent = ToNode(rnd.m_CurNode); | 658 m_pNodeHelper->m_pAllStartParent = ToNode(rnd.m_CurNode); |
| 659 } | 659 } |
| 660 } | 660 } |
| 661 } else if (rnd.m_dwStyles & XFA_RESOLVENODE_BindNew) { | 661 } else if (rnd.m_dwStyles & XFA_RESOLVENODE_BindNew) { |
| 662 if (m_pNodeHelper->m_iCurAllStart == -1) { | 662 if (m_pNodeHelper->m_iCurAllStart == -1) { |
| 663 m_pNodeHelper->m_iCurAllStart = m_iCurStart; | 663 m_pNodeHelper->m_iCurAllStart = m_iCurStart; |
| 664 } | 664 } |
| (...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 820 } else { | 820 } else { |
| 821 iIndex = iCount - 1; | 821 iIndex = iCount - 1; |
| 822 } | 822 } |
| 823 } else { | 823 } else { |
| 824 iIndex = iCount - 1; | 824 iIndex = iCount - 1; |
| 825 } | 825 } |
| 826 } | 826 } |
| 827 | 827 |
| 828 CXFA_ResolveNodesData::CXFA_ResolveNodesData(CXFA_ScriptContext* pSC) | 828 CXFA_ResolveNodesData::CXFA_ResolveNodesData(CXFA_ScriptContext* pSC) |
| 829 : m_pSC(pSC), | 829 : m_pSC(pSC), |
| 830 m_CurNode(NULL), | 830 m_CurNode(nullptr), |
| 831 m_wsName(), | 831 m_wsName(), |
| 832 m_uHashName(XFA_HASHCODE_None), | 832 m_uHashName(XFA_HASHCODE_None), |
| 833 m_wsCondition(), | 833 m_wsCondition(), |
| 834 m_nLevel(0), | 834 m_nLevel(0), |
| 835 m_Nodes(), | 835 m_Nodes(), |
| 836 m_dwStyles(XFA_RESOLVENODE_Children), | 836 m_dwStyles(XFA_RESOLVENODE_Children), |
| 837 m_pScriptAttribute(NULL), | 837 m_pScriptAttribute(nullptr), |
| 838 m_dwFlag(XFA_RESOVENODE_RSTYPE_Nodes) {} | 838 m_dwFlag(XFA_RESOVENODE_RSTYPE_Nodes) {} |
| 839 | 839 |
| 840 CXFA_ResolveNodesData::~CXFA_ResolveNodesData() { | 840 CXFA_ResolveNodesData::~CXFA_ResolveNodesData() { |
| 841 m_Nodes.RemoveAll(); | 841 m_Nodes.RemoveAll(); |
| 842 } | 842 } |
| OLD | NEW |