| 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/fm2js/xfa_fm2jsapi.h" | 10 #include "xfa/fxfa/fm2js/xfa_fm2jsapi.h" |
| (...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 115 CFX_WideString wsName = rnd.m_wsName; | 115 CFX_WideString wsName = rnd.m_wsName; |
| 116 CFX_WideString wsCondition = rnd.m_wsCondition; | 116 CFX_WideString wsCondition = rnd.m_wsCondition; |
| 117 int32_t iNameLen = wsName.GetLength(); | 117 int32_t iNameLen = wsName.GetLength(); |
| 118 if (iNameLen == 1) { | 118 if (iNameLen == 1) { |
| 119 nodes.Add(rnd.m_CurNode); | 119 nodes.Add(rnd.m_CurNode); |
| 120 return 1; | 120 return 1; |
| 121 } | 121 } |
| 122 if (rnd.m_nLevel > 0) { | 122 if (rnd.m_nLevel > 0) { |
| 123 return -1; | 123 return -1; |
| 124 } | 124 } |
| 125 FX_DWORD dwNameHash = | 125 uint32_t dwNameHash = |
| 126 FX_HashCode_String_GetW((const FX_WCHAR*)wsName + 1, iNameLen - 1); | 126 FX_HashCode_String_GetW((const FX_WCHAR*)wsName + 1, iNameLen - 1); |
| 127 if (dwNameHash == XFA_HASHCODE_Xfa) { | 127 if (dwNameHash == XFA_HASHCODE_Xfa) { |
| 128 nodes.Add(rnd.m_pSC->GetDocument()->GetRoot()); | 128 nodes.Add(rnd.m_pSC->GetDocument()->GetRoot()); |
| 129 } else { | 129 } else { |
| 130 CXFA_Object* pObjNode = rnd.m_pSC->GetDocument()->GetXFAObject(dwNameHash); | 130 CXFA_Object* pObjNode = rnd.m_pSC->GetDocument()->GetXFAObject(dwNameHash); |
| 131 if (pObjNode) { | 131 if (pObjNode) { |
| 132 rnd.m_Nodes.Add(pObjNode); | 132 rnd.m_Nodes.Add(pObjNode); |
| 133 } | 133 } |
| 134 } | 134 } |
| 135 if (rnd.m_Nodes.GetSize() > 0) { | 135 if (rnd.m_Nodes.GetSize() > 0) { |
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 211 CXFA_ResolveNodesData& rnd) { | 211 CXFA_ResolveNodesData& rnd) { |
| 212 if (rnd.m_nLevel > 32) { | 212 if (rnd.m_nLevel > 32) { |
| 213 return 0; | 213 return 0; |
| 214 } | 214 } |
| 215 if (!rnd.m_CurNode->IsNode()) { | 215 if (!rnd.m_CurNode->IsNode()) { |
| 216 return 0; | 216 return 0; |
| 217 } | 217 } |
| 218 CXFA_Node* curNode = ToNode(rnd.m_CurNode); | 218 CXFA_Node* curNode = ToNode(rnd.m_CurNode); |
| 219 CXFA_ObjArray& nodes = rnd.m_Nodes; | 219 CXFA_ObjArray& nodes = rnd.m_Nodes; |
| 220 int32_t nNum = nodes.GetSize(); | 220 int32_t nNum = nodes.GetSize(); |
| 221 FX_DWORD dwStyles = rnd.m_dwStyles; | 221 uint32_t dwStyles = rnd.m_dwStyles; |
| 222 CFX_WideString& wsName = rnd.m_wsName; | 222 CFX_WideString& wsName = rnd.m_wsName; |
| 223 uint32_t uNameHash = rnd.m_uHashName; | 223 uint32_t uNameHash = rnd.m_uHashName; |
| 224 CFX_WideString& wsCondition = rnd.m_wsCondition; | 224 CFX_WideString& wsCondition = rnd.m_wsCondition; |
| 225 CXFA_ResolveNodesData rndFind; | 225 CXFA_ResolveNodesData rndFind; |
| 226 rndFind.m_wsName = rnd.m_wsName; | 226 rndFind.m_wsName = rnd.m_wsName; |
| 227 rndFind.m_wsCondition = rnd.m_wsCondition; | 227 rndFind.m_wsCondition = rnd.m_wsCondition; |
| 228 rndFind.m_pSC = rnd.m_pSC; | 228 rndFind.m_pSC = rnd.m_pSC; |
| 229 rndFind.m_nLevel = rnd.m_nLevel + 1; | 229 rndFind.m_nLevel = rnd.m_nLevel + 1; |
| 230 rndFind.m_uHashName = uNameHash; | 230 rndFind.m_uHashName = uNameHash; |
| 231 CXFA_NodeArray children; | 231 CXFA_NodeArray children; |
| (...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 384 nodes.Add(curNode->AsNode()); | 384 nodes.Add(curNode->AsNode()); |
| 385 XFA_ResolveNode_FilterCondition(rnd, wsCondition); | 385 XFA_ResolveNode_FilterCondition(rnd, wsCondition); |
| 386 if (nodes.GetSize() > 0) { | 386 if (nodes.GetSize() > 0) { |
| 387 return 1; | 387 return 1; |
| 388 } | 388 } |
| 389 } | 389 } |
| 390 return 0; | 390 return 0; |
| 391 } | 391 } |
| 392 if (dwStyles & XFA_RESOLVENODE_Siblings) { | 392 if (dwStyles & XFA_RESOLVENODE_Siblings) { |
| 393 CXFA_Node* child = parentNode->GetNodeItem(XFA_NODEITEM_FirstChild); | 393 CXFA_Node* child = parentNode->GetNodeItem(XFA_NODEITEM_FirstChild); |
| 394 FX_DWORD dwSubStyles = | 394 uint32_t dwSubStyles = |
| 395 XFA_RESOLVENODE_Children | XFA_RESOLVENODE_Properties; | 395 XFA_RESOLVENODE_Children | XFA_RESOLVENODE_Properties; |
| 396 if (dwStyles & XFA_RESOLVENODE_TagName) { | 396 if (dwStyles & XFA_RESOLVENODE_TagName) { |
| 397 dwSubStyles |= XFA_RESOLVENODE_TagName; | 397 dwSubStyles |= XFA_RESOLVENODE_TagName; |
| 398 } | 398 } |
| 399 if (dwStyles & XFA_RESOLVENODE_ALL) { | 399 if (dwStyles & XFA_RESOLVENODE_ALL) { |
| 400 dwSubStyles |= XFA_RESOLVENODE_ALL; | 400 dwSubStyles |= XFA_RESOLVENODE_ALL; |
| 401 } | 401 } |
| 402 rndFind.m_dwStyles = dwSubStyles; | 402 rndFind.m_dwStyles = dwSubStyles; |
| 403 while (child) { | 403 while (child) { |
| 404 if (child == curNode) { | 404 if (child == curNode) { |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 436 } | 436 } |
| 437 } else { | 437 } else { |
| 438 if (m_pNodeHelper->XFA_NodeIsTransparent(child)) { | 438 if (m_pNodeHelper->XFA_NodeIsTransparent(child)) { |
| 439 bInnerSearch = TRUE; | 439 bInnerSearch = TRUE; |
| 440 } | 440 } |
| 441 } | 441 } |
| 442 if (bInnerSearch) { | 442 if (bInnerSearch) { |
| 443 rndFind.m_CurNode = child; | 443 rndFind.m_CurNode = child; |
| 444 CFX_WideString wsOriginCondition = rndFind.m_wsCondition; | 444 CFX_WideString wsOriginCondition = rndFind.m_wsCondition; |
| 445 rndFind.m_wsCondition.Empty(); | 445 rndFind.m_wsCondition.Empty(); |
| 446 FX_DWORD dwOriginStyle = rndFind.m_dwStyles; | 446 uint32_t dwOriginStyle = rndFind.m_dwStyles; |
| 447 rndFind.m_dwStyles = dwOriginStyle | XFA_RESOLVENODE_ALL; | 447 rndFind.m_dwStyles = dwOriginStyle | XFA_RESOLVENODE_ALL; |
| 448 XFA_ResolveNodes_Normal(rndFind); | 448 XFA_ResolveNodes_Normal(rndFind); |
| 449 rndFind.m_dwStyles = dwOriginStyle; | 449 rndFind.m_dwStyles = dwOriginStyle; |
| 450 rndFind.m_wsCondition = wsOriginCondition; | 450 rndFind.m_wsCondition = wsOriginCondition; |
| 451 if (rndFind.m_Nodes.GetSize() > 0) { | 451 if (rndFind.m_Nodes.GetSize() > 0) { |
| 452 nodes.Append(rndFind.m_Nodes); | 452 nodes.Append(rndFind.m_Nodes); |
| 453 rndFind.m_Nodes.RemoveAll(); | 453 rndFind.m_Nodes.RemoveAll(); |
| 454 } | 454 } |
| 455 } | 455 } |
| 456 child = child->GetNodeItem(XFA_NODEITEM_NextSibling); | 456 child = child->GetNodeItem(XFA_NODEITEM_NextSibling); |
| (...skipping 12 matching lines...) Expand all Loading... |
| 469 } | 469 } |
| 470 } | 470 } |
| 471 XFA_ResolveNode_FilterCondition(rnd, wsCondition); | 471 XFA_ResolveNode_FilterCondition(rnd, wsCondition); |
| 472 if (nodes.GetSize() > 0) { | 472 if (nodes.GetSize() > 0) { |
| 473 return 1; | 473 return 1; |
| 474 } | 474 } |
| 475 return 0; | 475 return 0; |
| 476 } | 476 } |
| 477 } | 477 } |
| 478 if (dwStyles & XFA_RESOLVENODE_Parent) { | 478 if (dwStyles & XFA_RESOLVENODE_Parent) { |
| 479 FX_DWORD dwSubStyles = XFA_RESOLVENODE_Siblings | XFA_RESOLVENODE_Parent | | 479 uint32_t dwSubStyles = XFA_RESOLVENODE_Siblings | XFA_RESOLVENODE_Parent | |
| 480 XFA_RESOLVENODE_Properties; | 480 XFA_RESOLVENODE_Properties; |
| 481 if (dwStyles & XFA_RESOLVENODE_TagName) { | 481 if (dwStyles & XFA_RESOLVENODE_TagName) { |
| 482 dwSubStyles |= XFA_RESOLVENODE_TagName; | 482 dwSubStyles |= XFA_RESOLVENODE_TagName; |
| 483 } | 483 } |
| 484 if (dwStyles & XFA_RESOLVENODE_ALL) { | 484 if (dwStyles & XFA_RESOLVENODE_ALL) { |
| 485 dwSubStyles |= XFA_RESOLVENODE_ALL; | 485 dwSubStyles |= XFA_RESOLVENODE_ALL; |
| 486 } | 486 } |
| 487 rndFind.m_dwStyles = dwSubStyles; | 487 rndFind.m_dwStyles = dwSubStyles; |
| 488 rndFind.m_CurNode = parentNode; | 488 rndFind.m_CurNode = parentNode; |
| 489 CXFA_NodeArray& array = rnd.m_pSC->GetUpObjectArray(); | 489 CXFA_NodeArray& array = rnd.m_pSC->GetUpObjectArray(); |
| (...skipping 285 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 775 case '.': | 775 case '.': |
| 776 if (iLen > 1 && (wsCondition[1] == '[' || wsCondition[1] == '(')) { | 776 if (iLen > 1 && (wsCondition[1] == '[' || wsCondition[1] == '(')) { |
| 777 XFA_ResolveNode_DoPredicateFilter(iCurrIndex, wsCondition, iFoundCount, | 777 XFA_ResolveNode_DoPredicateFilter(iCurrIndex, wsCondition, iFoundCount, |
| 778 rnd); | 778 rnd); |
| 779 } | 779 } |
| 780 default: | 780 default: |
| 781 return; | 781 return; |
| 782 } | 782 } |
| 783 } | 783 } |
| 784 void CXFA_ResolveProcessor::XFA_ResolveNodes_SetStylesForChild( | 784 void CXFA_ResolveProcessor::XFA_ResolveNodes_SetStylesForChild( |
| 785 FX_DWORD dwParentStyles, | 785 uint32_t dwParentStyles, |
| 786 CXFA_ResolveNodesData& rnd) { | 786 CXFA_ResolveNodesData& rnd) { |
| 787 FX_DWORD dwSubStyles = XFA_RESOLVENODE_Children; | 787 uint32_t dwSubStyles = XFA_RESOLVENODE_Children; |
| 788 if (dwParentStyles & XFA_RESOLVENODE_TagName) { | 788 if (dwParentStyles & XFA_RESOLVENODE_TagName) { |
| 789 dwSubStyles |= XFA_RESOLVENODE_TagName; | 789 dwSubStyles |= XFA_RESOLVENODE_TagName; |
| 790 } | 790 } |
| 791 dwSubStyles &= ~XFA_RESOLVENODE_Parent; | 791 dwSubStyles &= ~XFA_RESOLVENODE_Parent; |
| 792 dwSubStyles &= ~XFA_RESOLVENODE_Siblings; | 792 dwSubStyles &= ~XFA_RESOLVENODE_Siblings; |
| 793 dwSubStyles &= ~XFA_RESOLVENODE_Properties; | 793 dwSubStyles &= ~XFA_RESOLVENODE_Properties; |
| 794 dwSubStyles |= XFA_RESOLVENODE_ALL; | 794 dwSubStyles |= XFA_RESOLVENODE_ALL; |
| 795 rnd.m_dwStyles = dwSubStyles; | 795 rnd.m_dwStyles = dwSubStyles; |
| 796 } | 796 } |
| 797 int32_t CXFA_ResolveProcessor::XFA_ResolveNode_SetResultCreateNode( | 797 int32_t CXFA_ResolveProcessor::XFA_ResolveNode_SetResultCreateNode( |
| (...skipping 19 matching lines...) Expand all Loading... |
| 817 if (m_pNodeHelper->XFA_CreateNode_ForCondition(wsNextCondition)) { | 817 if (m_pNodeHelper->XFA_CreateNode_ForCondition(wsNextCondition)) { |
| 818 if (m_pNodeHelper->m_eLastCreateType == XFA_ELEMENT_DataGroup) { | 818 if (m_pNodeHelper->m_eLastCreateType == XFA_ELEMENT_DataGroup) { |
| 819 iIndex = 0; | 819 iIndex = 0; |
| 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 } |
| OLD | NEW |