| 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/src/foxitlib.h" | 7 #include "xfa/src/foxitlib.h" |
| 8 #include "xfa/src/fxfa/src/common/xfa_utils.h" | 8 #include "xfa/src/fxfa/src/common/xfa_utils.h" |
| 9 #include "xfa/src/fxfa/src/common/xfa_object.h" | 9 #include "xfa/src/fxfa/src/common/xfa_object.h" |
| 10 #include "xfa/src/fxfa/src/common/xfa_document.h" | 10 #include "xfa/src/fxfa/src/common/xfa_document.h" |
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 85 CXFA_ResolveNodesData& rnd) { | 85 CXFA_ResolveNodesData& rnd) { |
| 86 CFX_WideString wsName = rnd.m_wsName.Right(rnd.m_wsName.GetLength() - 1); | 86 CFX_WideString wsName = rnd.m_wsName.Right(rnd.m_wsName.GetLength() - 1); |
| 87 CFX_WideString wsCondition = rnd.m_wsCondition; | 87 CFX_WideString wsCondition = rnd.m_wsCondition; |
| 88 CXFA_Node* findNode = NULL; | 88 CXFA_Node* findNode = NULL; |
| 89 CXFA_NodeArray siblings; | 89 CXFA_NodeArray siblings; |
| 90 FX_BOOL bClassName = FALSE; | 90 FX_BOOL bClassName = FALSE; |
| 91 if (wsName.GetAt(0) == '#') { | 91 if (wsName.GetAt(0) == '#') { |
| 92 bClassName = TRUE; | 92 bClassName = TRUE; |
| 93 wsName = wsName.Right(wsName.GetLength() - 1); | 93 wsName = wsName.Right(wsName.GetLength() - 1); |
| 94 } | 94 } |
| 95 findNode = m_pNodeHelper->XFA_ResolveNodes_GetOneChild( | 95 findNode = m_pNodeHelper->XFA_ResolveNodes_GetOneChild(ToNode(rnd.m_CurNode), |
| 96 (CXFA_Node*)rnd.m_CurNode, wsName, bClassName); | 96 wsName, bClassName); |
| 97 if (findNode == NULL) { | 97 if (findNode == NULL) { |
| 98 return 0; | 98 return 0; |
| 99 } | 99 } |
| 100 if (wsCondition.IsEmpty()) { | 100 if (wsCondition.IsEmpty()) { |
| 101 rnd.m_Nodes.Add(findNode); | 101 rnd.m_Nodes.Add(findNode); |
| 102 return rnd.m_Nodes.GetSize(); | 102 return rnd.m_Nodes.GetSize(); |
| 103 } | 103 } |
| 104 m_pNodeHelper->XFA_CountSiblings(findNode, XFA_LOGIC_Transparent, | 104 m_pNodeHelper->XFA_CountSiblings(findNode, XFA_LOGIC_Transparent, |
| 105 (CXFA_NodeArray*)&rnd.m_Nodes, bClassName); | 105 (CXFA_NodeArray*)&rnd.m_Nodes, bClassName); |
| 106 XFA_ResolveNode_FilterCondition(rnd, wsCondition); | 106 XFA_ResolveNode_FilterCondition(rnd, wsCondition); |
| (...skipping 26 matching lines...) Expand all Loading... |
| 133 XFA_ResolveNode_FilterCondition(rnd, wsCondition); | 133 XFA_ResolveNode_FilterCondition(rnd, wsCondition); |
| 134 } | 134 } |
| 135 return rnd.m_Nodes.GetSize(); | 135 return rnd.m_Nodes.GetSize(); |
| 136 } | 136 } |
| 137 int32_t CXFA_ResolveProcessor::XFA_ResolveNodes_Excalmatory( | 137 int32_t CXFA_ResolveProcessor::XFA_ResolveNodes_Excalmatory( |
| 138 CXFA_ResolveNodesData& rnd) { | 138 CXFA_ResolveNodesData& rnd) { |
| 139 if (rnd.m_nLevel > 0) { | 139 if (rnd.m_nLevel > 0) { |
| 140 return 0; | 140 return 0; |
| 141 } | 141 } |
| 142 CXFA_Node* datasets = | 142 CXFA_Node* datasets = |
| 143 (CXFA_Node*)rnd.m_pSC->GetDocument()->GetXFAObject(XFA_HASHCODE_Datasets); | 143 ToNode(rnd.m_pSC->GetDocument()->GetXFAObject(XFA_HASHCODE_Datasets)); |
| 144 if (datasets == NULL) { | 144 if (!datasets) { |
| 145 return 0; | 145 return 0; |
| 146 } | 146 } |
| 147 CXFA_ResolveNodesData rndFind; | 147 CXFA_ResolveNodesData rndFind; |
| 148 rndFind.m_pSC = rnd.m_pSC; | 148 rndFind.m_pSC = rnd.m_pSC; |
| 149 rndFind.m_CurNode = datasets; | 149 rndFind.m_CurNode = datasets; |
| 150 rndFind.m_wsName = rnd.m_wsName.Right(rnd.m_wsName.GetLength() - 1); | 150 rndFind.m_wsName = rnd.m_wsName.Right(rnd.m_wsName.GetLength() - 1); |
| 151 rndFind.m_uHashName = | 151 rndFind.m_uHashName = |
| 152 FX_HashCode_String_GetW(rndFind.m_wsName, rndFind.m_wsName.GetLength()); | 152 FX_HashCode_String_GetW(rndFind.m_wsName, rndFind.m_wsName.GetLength()); |
| 153 rndFind.m_nLevel = rnd.m_nLevel + 1; | 153 rndFind.m_nLevel = rnd.m_nLevel + 1; |
| 154 rndFind.m_dwStyles = XFA_RESOLVENODE_Children; | 154 rndFind.m_dwStyles = XFA_RESOLVENODE_Children; |
| 155 rndFind.m_wsCondition = rnd.m_wsCondition; | 155 rndFind.m_wsCondition = rnd.m_wsCondition; |
| 156 XFA_ResolveNodes(rndFind); | 156 XFA_ResolveNodes(rndFind); |
| 157 if (rndFind.m_Nodes.GetSize() > 0) { | 157 if (rndFind.m_Nodes.GetSize() > 0) { |
| 158 rnd.m_Nodes.Append(rndFind.m_Nodes); | 158 rnd.m_Nodes.Append(rndFind.m_Nodes); |
| 159 rndFind.m_Nodes.RemoveAll(); | 159 rndFind.m_Nodes.RemoveAll(); |
| 160 } | 160 } |
| 161 return rnd.m_Nodes.GetSize(); | 161 return rnd.m_Nodes.GetSize(); |
| 162 } | 162 } |
| 163 int32_t CXFA_ResolveProcessor::XFA_ResolveNodes_NumberSign( | 163 int32_t CXFA_ResolveProcessor::XFA_ResolveNodes_NumberSign( |
| 164 CXFA_ResolveNodesData& rnd) { | 164 CXFA_ResolveNodesData& rnd) { |
| 165 CFX_WideString wsName = rnd.m_wsName.Right(rnd.m_wsName.GetLength() - 1); | 165 CFX_WideString wsName = rnd.m_wsName.Right(rnd.m_wsName.GetLength() - 1); |
| 166 CFX_WideString wsCondition = rnd.m_wsCondition; | 166 CFX_WideString wsCondition = rnd.m_wsCondition; |
| 167 CXFA_Node* curNode = (CXFA_Node*)rnd.m_CurNode; | 167 CXFA_Node* curNode = ToNode(rnd.m_CurNode); |
| 168 if (XFA_ResolveNodes_ForAttributeRs(curNode, rnd, wsName)) { | 168 if (XFA_ResolveNodes_ForAttributeRs(curNode, rnd, wsName)) { |
| 169 return 1; | 169 return 1; |
| 170 } | 170 } |
| 171 CXFA_ResolveNodesData rndFind; | 171 CXFA_ResolveNodesData rndFind; |
| 172 rndFind.m_pSC = rnd.m_pSC; | 172 rndFind.m_pSC = rnd.m_pSC; |
| 173 rndFind.m_nLevel = rnd.m_nLevel + 1; | 173 rndFind.m_nLevel = rnd.m_nLevel + 1; |
| 174 rndFind.m_dwStyles = rnd.m_dwStyles; | 174 rndFind.m_dwStyles = rnd.m_dwStyles; |
| 175 rndFind.m_dwStyles |= XFA_RESOLVENODE_TagName; | 175 rndFind.m_dwStyles |= XFA_RESOLVENODE_TagName; |
| 176 rndFind.m_dwStyles &= ~XFA_RESOLVENODE_Attributes; | 176 rndFind.m_dwStyles &= ~XFA_RESOLVENODE_Attributes; |
| 177 rndFind.m_wsName = wsName; | 177 rndFind.m_wsName = wsName; |
| (...skipping 27 matching lines...) Expand all Loading... |
| 205 return 0; | 205 return 0; |
| 206 } | 206 } |
| 207 int32_t CXFA_ResolveProcessor::XFA_ResolveNodes_Normal( | 207 int32_t CXFA_ResolveProcessor::XFA_ResolveNodes_Normal( |
| 208 CXFA_ResolveNodesData& rnd) { | 208 CXFA_ResolveNodesData& rnd) { |
| 209 if (rnd.m_nLevel > 32) { | 209 if (rnd.m_nLevel > 32) { |
| 210 return 0; | 210 return 0; |
| 211 } | 211 } |
| 212 if (!rnd.m_CurNode->IsNode()) { | 212 if (!rnd.m_CurNode->IsNode()) { |
| 213 return 0; | 213 return 0; |
| 214 } | 214 } |
| 215 CXFA_Node* curNode = (CXFA_Node*)rnd.m_CurNode; | 215 CXFA_Node* curNode = ToNode(rnd.m_CurNode); |
| 216 CXFA_ObjArray& nodes = rnd.m_Nodes; | 216 CXFA_ObjArray& nodes = rnd.m_Nodes; |
| 217 int32_t nNum = nodes.GetSize(); | 217 int32_t nNum = nodes.GetSize(); |
| 218 FX_DWORD dwStyles = rnd.m_dwStyles; | 218 FX_DWORD dwStyles = rnd.m_dwStyles; |
| 219 CFX_WideString& wsName = rnd.m_wsName; | 219 CFX_WideString& wsName = rnd.m_wsName; |
| 220 uint32_t uNameHash = rnd.m_uHashName; | 220 uint32_t uNameHash = rnd.m_uHashName; |
| 221 CFX_WideString& wsCondition = rnd.m_wsCondition; | 221 CFX_WideString& wsCondition = rnd.m_wsCondition; |
| 222 CXFA_ResolveNodesData rndFind; | 222 CXFA_ResolveNodesData rndFind; |
| 223 rndFind.m_wsName = rnd.m_wsName; | 223 rndFind.m_wsName = rnd.m_wsName; |
| 224 rndFind.m_wsCondition = rnd.m_wsCondition; | 224 rndFind.m_wsCondition = rnd.m_wsCondition; |
| 225 rndFind.m_pSC = rnd.m_pSC; | 225 rndFind.m_pSC = rnd.m_pSC; |
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 301 rndFind.m_wsCondition = wsSaveCondition; | 301 rndFind.m_wsCondition = wsSaveCondition; |
| 302 if (rndFind.m_Nodes.GetSize() > 0) { | 302 if (rndFind.m_Nodes.GetSize() > 0) { |
| 303 nodes.Append(rndFind.m_Nodes); | 303 nodes.Append(rndFind.m_Nodes); |
| 304 rndFind.m_Nodes.RemoveAll(); | 304 rndFind.m_Nodes.RemoveAll(); |
| 305 } | 305 } |
| 306 } | 306 } |
| 307 } | 307 } |
| 308 if (nodes.GetSize() > nNum) { | 308 if (nodes.GetSize() > nNum) { |
| 309 if (!(dwStyles & XFA_RESOLVENODE_ALL)) { | 309 if (!(dwStyles & XFA_RESOLVENODE_ALL)) { |
| 310 CXFA_NodeArray upArrayNodes; | 310 CXFA_NodeArray upArrayNodes; |
| 311 if (m_pNodeHelper->XFA_NodeIsTransparent((CXFA_Node*)curNode)) { | 311 if (m_pNodeHelper->XFA_NodeIsTransparent(ToNode(curNode))) { |
| 312 m_pNodeHelper->XFA_CountSiblings( | 312 m_pNodeHelper->XFA_CountSiblings( |
| 313 (CXFA_Node*)nodes[0], XFA_LOGIC_Transparent, &upArrayNodes, | 313 ToNode(nodes[0]), XFA_LOGIC_Transparent, &upArrayNodes, |
| 314 !!(dwStyles & XFA_RESOLVENODE_TagName)); | 314 !!(dwStyles & XFA_RESOLVENODE_TagName)); |
| 315 } | 315 } |
| 316 if (upArrayNodes.GetSize() > nodes.GetSize()) { | 316 if (upArrayNodes.GetSize() > nodes.GetSize()) { |
| 317 upArrayNodes[0] = (CXFA_Node*)nodes[0]; | 317 upArrayNodes[0] = ToNode(nodes[0]); |
| 318 nodes.RemoveAll(); | 318 nodes.RemoveAll(); |
| 319 nodes.Append((CXFA_ObjArray&)upArrayNodes); | 319 nodes.Append((CXFA_ObjArray&)upArrayNodes); |
| 320 upArrayNodes.RemoveAll(); | 320 upArrayNodes.RemoveAll(); |
| 321 } | 321 } |
| 322 } | 322 } |
| 323 XFA_ResolveNode_FilterCondition(rnd, wsCondition); | 323 XFA_ResolveNode_FilterCondition(rnd, wsCondition); |
| 324 if (nodes.GetSize() > 0) { | 324 if (nodes.GetSize() > 0) { |
| 325 return 1; | 325 return 1; |
| 326 } | 326 } |
| 327 return 0; | 327 return 0; |
| (...skipping 22 matching lines...) Expand all Loading... |
| 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 = NULL; |
| 357 if (XFA_ELEMENT_Subform == curNode->GetClassID() && | 357 if (XFA_ELEMENT_Subform == curNode->GetClassID() && |
| 358 XFA_HASHCODE_Occur == uNameHash) { | 358 XFA_HASHCODE_Occur == uNameHash) { |
| 359 CXFA_Node* pInstanceManager = | 359 CXFA_Node* pInstanceManager = |
| 360 ((CXFA_Node*)curNode)->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 XFA_LPCELEMENTINFO pElement = XFA_GetElementByName(wsName); | 365 XFA_LPCELEMENTINFO pElement = XFA_GetElementByName(wsName); |
| 366 if (pElement) { | 366 if (pElement) { |
| 367 pProp = ((CXFA_Node*)curNode) | 367 pProp = curNode->AsNode()->GetProperty( |
| 368 ->GetProperty(0, pElement->eName, | 368 0, pElement->eName, pElement->eName != XFA_ELEMENT_PageSet); |
| 369 pElement->eName != XFA_ELEMENT_PageSet); | |
| 370 } | 369 } |
| 371 } | 370 } |
| 372 if (pProp) { | 371 if (pProp) { |
| 373 nodes.Add(pProp); | 372 nodes.Add(pProp); |
| 374 return nodes.GetSize(); | 373 return nodes.GetSize(); |
| 375 } | 374 } |
| 376 } | 375 } |
| 377 CXFA_Node* parentNode = m_pNodeHelper->XFA_ResolveNodes_GetParent( | 376 CXFA_Node* parentNode = m_pNodeHelper->XFA_ResolveNodes_GetParent( |
| 378 (CXFA_Node*)curNode, XFA_LOGIC_NoTransparent); | 377 curNode->AsNode(), XFA_LOGIC_NoTransparent); |
| 379 uint32_t uCurClassHash = curNode->GetClassHashCode(); | 378 uint32_t uCurClassHash = curNode->GetClassHashCode(); |
| 380 if (parentNode == NULL) { | 379 if (!parentNode) { |
| 381 if (uCurClassHash == uNameHash) { | 380 if (uCurClassHash == uNameHash) { |
| 382 nodes.Add((CXFA_Node*)curNode); | 381 nodes.Add(curNode->AsNode()); |
| 383 XFA_ResolveNode_FilterCondition(rnd, wsCondition); | 382 XFA_ResolveNode_FilterCondition(rnd, wsCondition); |
| 384 if (nodes.GetSize() > 0) { | 383 if (nodes.GetSize() > 0) { |
| 385 return 1; | 384 return 1; |
| 386 } | 385 } |
| 387 } | 386 } |
| 388 return 0; | 387 return 0; |
| 389 } | 388 } |
| 390 if (dwStyles & XFA_RESOLVENODE_Siblings) { | 389 if (dwStyles & XFA_RESOLVENODE_Siblings) { |
| 391 CXFA_Node* child = parentNode->GetNodeItem(XFA_NODEITEM_FirstChild); | 390 CXFA_Node* child = parentNode->GetNodeItem(XFA_NODEITEM_FirstChild); |
| 392 FX_DWORD dwSubStyles = | 391 FX_DWORD dwSubStyles = |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 450 nodes.Append(rndFind.m_Nodes); | 449 nodes.Append(rndFind.m_Nodes); |
| 451 rndFind.m_Nodes.RemoveAll(); | 450 rndFind.m_Nodes.RemoveAll(); |
| 452 } | 451 } |
| 453 } | 452 } |
| 454 child = child->GetNodeItem(XFA_NODEITEM_NextSibling); | 453 child = child->GetNodeItem(XFA_NODEITEM_NextSibling); |
| 455 } | 454 } |
| 456 if (nodes.GetSize() > nNum) { | 455 if (nodes.GetSize() > nNum) { |
| 457 if (m_pNodeHelper->XFA_NodeIsTransparent(parentNode)) { | 456 if (m_pNodeHelper->XFA_NodeIsTransparent(parentNode)) { |
| 458 CXFA_NodeArray upArrayNodes; | 457 CXFA_NodeArray upArrayNodes; |
| 459 m_pNodeHelper->XFA_CountSiblings( | 458 m_pNodeHelper->XFA_CountSiblings( |
| 460 (CXFA_Node*)nodes[0], XFA_LOGIC_Transparent, &upArrayNodes, | 459 ToNode(nodes[0]), XFA_LOGIC_Transparent, &upArrayNodes, |
| 461 !!(dwStyles & XFA_RESOLVENODE_TagName)); | 460 !!(dwStyles & XFA_RESOLVENODE_TagName)); |
| 462 if (upArrayNodes.GetSize() > nodes.GetSize()) { | 461 if (upArrayNodes.GetSize() > nodes.GetSize()) { |
| 463 upArrayNodes[0] = (CXFA_Node*)nodes[0]; | 462 upArrayNodes[0] = ToNode(nodes[0]); |
| 464 nodes.RemoveAll(); | 463 nodes.RemoveAll(); |
| 465 nodes.Append((CXFA_ObjArray&)upArrayNodes); | 464 nodes.Append((CXFA_ObjArray&)upArrayNodes); |
| 466 upArrayNodes.RemoveAll(); | 465 upArrayNodes.RemoveAll(); |
| 467 } | 466 } |
| 468 } | 467 } |
| 469 XFA_ResolveNode_FilterCondition(rnd, wsCondition); | 468 XFA_ResolveNode_FilterCondition(rnd, wsCondition); |
| 470 if (nodes.GetSize() > 0) { | 469 if (nodes.GetSize() > 0) { |
| 471 return 1; | 470 return 1; |
| 472 } | 471 } |
| 473 return 0; | 472 return 0; |
| (...skipping 18 matching lines...) Expand all Loading... |
| 492 rndFind.m_Nodes.RemoveAll(); | 491 rndFind.m_Nodes.RemoveAll(); |
| 493 } | 492 } |
| 494 if (nodes.GetSize() > nNum) { | 493 if (nodes.GetSize() > nNum) { |
| 495 return 1; | 494 return 1; |
| 496 } | 495 } |
| 497 } | 496 } |
| 498 return 0; | 497 return 0; |
| 499 } | 498 } |
| 500 int32_t CXFA_ResolveProcessor::XFA_ResolveNodes_Asterisk( | 499 int32_t CXFA_ResolveProcessor::XFA_ResolveNodes_Asterisk( |
| 501 CXFA_ResolveNodesData& rnd) { | 500 CXFA_ResolveNodesData& rnd) { |
| 502 CXFA_Node* curNode = (CXFA_Node*)rnd.m_CurNode; | 501 CXFA_Node* curNode = ToNode(rnd.m_CurNode); |
| 503 CXFA_ObjArray& nodes = rnd.m_Nodes; | 502 CXFA_ObjArray& nodes = rnd.m_Nodes; |
| 504 CXFA_NodeArray array; | 503 CXFA_NodeArray array; |
| 505 curNode->GetNodeList(array, | 504 curNode->GetNodeList(array, |
| 506 XFA_NODEFILTER_Children | XFA_NODEFILTER_Properties); | 505 XFA_NODEFILTER_Children | XFA_NODEFILTER_Properties); |
| 507 nodes.Append((CXFA_ObjArray&)array); | 506 nodes.Append((CXFA_ObjArray&)array); |
| 508 return nodes.GetSize(); | 507 return nodes.GetSize(); |
| 509 } | 508 } |
| 510 int32_t CXFA_ResolveProcessor::XFA_ResolveNodes_PopStack( | 509 int32_t CXFA_ResolveProcessor::XFA_ResolveNodes_PopStack( |
| 511 CFX_Int32Array& stack) { | 510 CFX_Int32Array& stack) { |
| 512 int32_t nType = -1; | 511 int32_t nType = -1; |
| (...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 638 } else if (ch == '*') { | 637 } else if (ch == '*') { |
| 639 bAll = TRUE; | 638 bAll = TRUE; |
| 640 break; | 639 break; |
| 641 } else { | 640 } else { |
| 642 break; | 641 break; |
| 643 } | 642 } |
| 644 } | 643 } |
| 645 if (bAll) { | 644 if (bAll) { |
| 646 if (rnd.m_dwStyles & XFA_RESOLVENODE_CreateNode) { | 645 if (rnd.m_dwStyles & XFA_RESOLVENODE_CreateNode) { |
| 647 if (rnd.m_dwStyles & XFA_RESOLVENODE_Bind) { | 646 if (rnd.m_dwStyles & XFA_RESOLVENODE_Bind) { |
| 648 m_pNodeHelper->m_pCreateParent = (CXFA_Node*)rnd.m_CurNode; | 647 m_pNodeHelper->m_pCreateParent = ToNode(rnd.m_CurNode); |
| 649 m_pNodeHelper->m_iCreateCount = 1; | 648 m_pNodeHelper->m_iCreateCount = 1; |
| 650 findNodes.RemoveAll(); | 649 findNodes.RemoveAll(); |
| 651 m_pNodeHelper->m_iCurAllStart = -1; | 650 m_pNodeHelper->m_iCurAllStart = -1; |
| 652 m_pNodeHelper->m_pAllStartParent = NULL; | 651 m_pNodeHelper->m_pAllStartParent = NULL; |
| 653 } else { | 652 } else { |
| 654 if (m_pNodeHelper->m_iCurAllStart == -1) { | 653 if (m_pNodeHelper->m_iCurAllStart == -1) { |
| 655 m_pNodeHelper->m_iCurAllStart = m_iCurStart; | 654 m_pNodeHelper->m_iCurAllStart = m_iCurStart; |
| 656 m_pNodeHelper->m_pAllStartParent = (CXFA_Node*)rnd.m_CurNode; | 655 m_pNodeHelper->m_pAllStartParent = ToNode(rnd.m_CurNode); |
| 657 } | 656 } |
| 658 } | 657 } |
| 659 } else if (rnd.m_dwStyles & XFA_RESOLVENODE_BindNew) { | 658 } else if (rnd.m_dwStyles & XFA_RESOLVENODE_BindNew) { |
| 660 if (m_pNodeHelper->m_iCurAllStart == -1) { | 659 if (m_pNodeHelper->m_iCurAllStart == -1) { |
| 661 m_pNodeHelper->m_iCurAllStart = m_iCurStart; | 660 m_pNodeHelper->m_iCurAllStart = m_iCurStart; |
| 662 } | 661 } |
| 663 } | 662 } |
| 664 return; | 663 return; |
| 665 } | 664 } |
| 666 if (iFoundCount == 1 && !iLen) { | 665 if (iFoundCount == 1 && !iLen) { |
| 667 return; | 666 return; |
| 668 } | 667 } |
| 669 CFX_WideString wsIndex; | 668 CFX_WideString wsIndex; |
| 670 wsIndex = wsCondition.Mid(i, iLen - 1 - i); | 669 wsIndex = wsCondition.Mid(i, iLen - 1 - i); |
| 671 int32_t iIndex = wsIndex.GetInteger(); | 670 int32_t iIndex = wsIndex.GetInteger(); |
| 672 if (bRelative) { | 671 if (bRelative) { |
| 673 iIndex += iCurIndex; | 672 iIndex += iCurIndex; |
| 674 } | 673 } |
| 675 if (iFoundCount <= iIndex || iIndex < 0) { | 674 if (iFoundCount <= iIndex || iIndex < 0) { |
| 676 if (rnd.m_dwStyles & XFA_RESOLVENODE_CreateNode) { | 675 if (rnd.m_dwStyles & XFA_RESOLVENODE_CreateNode) { |
| 677 m_pNodeHelper->m_pCreateParent = (CXFA_Node*)rnd.m_CurNode; | 676 m_pNodeHelper->m_pCreateParent = ToNode(rnd.m_CurNode); |
| 678 m_pNodeHelper->m_iCreateCount = iIndex - iFoundCount + 1; | 677 m_pNodeHelper->m_iCreateCount = iIndex - iFoundCount + 1; |
| 679 } | 678 } |
| 680 findNodes.RemoveAll(); | 679 findNodes.RemoveAll(); |
| 681 } else { | 680 } else { |
| 682 CXFA_Node* ret = findNodes[iIndex]; | 681 CXFA_Node* ret = findNodes[iIndex]; |
| 683 findNodes.RemoveAll(); | 682 findNodes.RemoveAll(); |
| 684 findNodes.Add(ret); | 683 findNodes.Add(ret); |
| 685 } | 684 } |
| 686 } | 685 } |
| 687 void CXFA_ResolveProcessor::XFA_ResolveNode_DoPredicateFilter( | 686 void CXFA_ResolveProcessor::XFA_ResolveNode_DoPredicateFilter( |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 742 int32_t iLen = wsCondition.GetLength(); | 741 int32_t iLen = wsCondition.GetLength(); |
| 743 if (!iLen) { | 742 if (!iLen) { |
| 744 if (rnd.m_dwStyles & XFA_RESOLVENODE_ALL) { | 743 if (rnd.m_dwStyles & XFA_RESOLVENODE_ALL) { |
| 745 return; | 744 return; |
| 746 } | 745 } |
| 747 if (iFoundCount == 1) { | 746 if (iFoundCount == 1) { |
| 748 return; | 747 return; |
| 749 } | 748 } |
| 750 if (iFoundCount <= iCurrIndex) { | 749 if (iFoundCount <= iCurrIndex) { |
| 751 if (rnd.m_dwStyles & XFA_RESOLVENODE_CreateNode) { | 750 if (rnd.m_dwStyles & XFA_RESOLVENODE_CreateNode) { |
| 752 m_pNodeHelper->m_pCreateParent = (CXFA_Node*)rnd.m_CurNode; | 751 m_pNodeHelper->m_pCreateParent = ToNode(rnd.m_CurNode); |
| 753 m_pNodeHelper->m_iCreateCount = iCurrIndex - iFoundCount + 1; | 752 m_pNodeHelper->m_iCreateCount = iCurrIndex - iFoundCount + 1; |
| 754 } | 753 } |
| 755 findNodes.RemoveAll(); | 754 findNodes.RemoveAll(); |
| 756 return; | 755 return; |
| 757 } else { | 756 } else { |
| 758 CXFA_Node* ret = findNodes[iCurrIndex]; | 757 CXFA_Node* ret = findNodes[iCurrIndex]; |
| 759 findNodes.RemoveAll(); | 758 findNodes.RemoveAll(); |
| 760 findNodes.Add(ret); | 759 findNodes.Add(ret); |
| 761 return; | 760 return; |
| 762 } | 761 } |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 815 if (m_pNodeHelper->XFA_CreateNode_ForCondition(wsNextCondition)) { | 814 if (m_pNodeHelper->XFA_CreateNode_ForCondition(wsNextCondition)) { |
| 816 if (m_pNodeHelper->m_eLastCreateType == XFA_ELEMENT_DataGroup) { | 815 if (m_pNodeHelper->m_eLastCreateType == XFA_ELEMENT_DataGroup) { |
| 817 iIndex = 0; | 816 iIndex = 0; |
| 818 } else { | 817 } else { |
| 819 iIndex = iCount - 1; | 818 iIndex = iCount - 1; |
| 820 } | 819 } |
| 821 } else { | 820 } else { |
| 822 iIndex = iCount - 1; | 821 iIndex = iCount - 1; |
| 823 } | 822 } |
| 824 } | 823 } |
| OLD | NEW |