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 |