| 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" |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 50 return XFA_ResolveNodes_Asterisk(rnd); | 50 return XFA_ResolveNodes_Asterisk(rnd); |
| 51 // TODO(dsinclair): We could probably remove this. | 51 // TODO(dsinclair): We could probably remove this. |
| 52 case '.': | 52 case '.': |
| 53 return XFA_ResolveNodes_AnyChild(rnd); | 53 return XFA_ResolveNodes_AnyChild(rnd); |
| 54 default: | 54 default: |
| 55 break; | 55 break; |
| 56 } | 56 } |
| 57 if (rnd.m_uHashName == XFA_HASHCODE_This && rnd.m_nLevel == 0) { | 57 if (rnd.m_uHashName == XFA_HASHCODE_This && rnd.m_nLevel == 0) { |
| 58 rnd.m_Nodes.Add(rnd.m_pSC->GetThisObject()); | 58 rnd.m_Nodes.Add(rnd.m_pSC->GetThisObject()); |
| 59 return 1; | 59 return 1; |
| 60 } else if (rnd.m_CurNode->GetClassID() == XFA_ELEMENT_Xfa) { | 60 } else if (rnd.m_CurNode->GetClassID() == XFA_Element::Xfa) { |
| 61 CXFA_Object* pObjNode = | 61 CXFA_Object* pObjNode = |
| 62 rnd.m_pSC->GetDocument()->GetXFAObject(rnd.m_uHashName); | 62 rnd.m_pSC->GetDocument()->GetXFAObject(rnd.m_uHashName); |
| 63 if (pObjNode) { | 63 if (pObjNode) { |
| 64 rnd.m_Nodes.Add(pObjNode); | 64 rnd.m_Nodes.Add(pObjNode); |
| 65 } else if (rnd.m_uHashName == XFA_HASHCODE_Xfa) { | 65 } else if (rnd.m_uHashName == XFA_HASHCODE_Xfa) { |
| 66 rnd.m_Nodes.Add(rnd.m_CurNode); | 66 rnd.m_Nodes.Add(rnd.m_CurNode); |
| 67 } else if ((rnd.m_dwStyles & XFA_RESOLVENODE_Attributes) && | 67 } else if ((rnd.m_dwStyles & XFA_RESOLVENODE_Attributes) && |
| 68 XFA_ResolveNodes_ForAttributeRs(rnd.m_CurNode, rnd, | 68 XFA_ResolveNodes_ForAttributeRs(rnd.m_CurNode, rnd, |
| 69 rnd.m_wsName.AsStringC())) { | 69 rnd.m_wsName.AsStringC())) { |
| 70 return 1; | 70 return 1; |
| (...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 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 = NULL; |
| 230 CXFA_Node* pPageSetNode = NULL; | 230 CXFA_Node* pPageSetNode = NULL; |
| 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; |
| 241 } else { | 241 } else { |
| 242 const XFA_PROPERTY* pPropert = XFA_GetPropertyOfElement( | 242 const XFA_PROPERTY* pPropert = XFA_GetPropertyOfElement( |
| 243 curNode->GetClassID(), pChild->GetClassID(), XFA_XDPPACKET_UNKNOWN); | 243 curNode->GetClassID(), pChild->GetClassID(), XFA_XDPPACKET_UNKNOWN); |
| 244 if (pPropert) { | 244 if (pPropert) { |
| 245 properties.Add(pChild); | 245 properties.Add(pChild); |
| 246 } else { | 246 } else { |
| 247 children.Add(pChild); | 247 children.Add(pChild); |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 281 for (int32_t i = 0; i < children.GetSize(); i++) { | 281 for (int32_t i = 0; i < children.GetSize(); i++) { |
| 282 CXFA_Node* child = children[i]; | 282 CXFA_Node* child = children[i]; |
| 283 if (dwStyles & XFA_RESOLVENODE_TagName) { | 283 if (dwStyles & XFA_RESOLVENODE_TagName) { |
| 284 if (child->GetClassHashCode() == uNameHash) { | 284 if (child->GetClassHashCode() == uNameHash) { |
| 285 nodes.Add(child); | 285 nodes.Add(child); |
| 286 } | 286 } |
| 287 } else if (child->GetNameHash() == uNameHash) { | 287 } else if (child->GetNameHash() == uNameHash) { |
| 288 nodes.Add(child); | 288 nodes.Add(child); |
| 289 } | 289 } |
| 290 if (m_pNodeHelper->XFA_NodeIsTransparent(child) && | 290 if (m_pNodeHelper->XFA_NodeIsTransparent(child) && |
| 291 child->GetClassID() != XFA_ELEMENT_PageSet) { | 291 child->GetClassID() != XFA_Element::PageSet) { |
| 292 if (!bSetFlag) { | 292 if (!bSetFlag) { |
| 293 XFA_ResolveNodes_SetStylesForChild(dwStyles, rndFind); | 293 XFA_ResolveNodes_SetStylesForChild(dwStyles, rndFind); |
| 294 bSetFlag = TRUE; | 294 bSetFlag = TRUE; |
| 295 } | 295 } |
| 296 rndFind.m_CurNode = child; | 296 rndFind.m_CurNode = child; |
| 297 CFX_WideString wsSaveCondition = rndFind.m_wsCondition; | 297 CFX_WideString wsSaveCondition = rndFind.m_wsCondition; |
| 298 rndFind.m_wsCondition.clear(); | 298 rndFind.m_wsCondition.clear(); |
| 299 XFA_ResolveNodes_Normal(rndFind); | 299 XFA_ResolveNodes_Normal(rndFind); |
| 300 rndFind.m_wsCondition = wsSaveCondition; | 300 rndFind.m_wsCondition = wsSaveCondition; |
| 301 if (rndFind.m_Nodes.GetSize() > 0) { | 301 if (rndFind.m_Nodes.GetSize() > 0) { |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 333 } | 333 } |
| 334 if (dwStyles & XFA_RESOLVENODE_Properties) { | 334 if (dwStyles & XFA_RESOLVENODE_Properties) { |
| 335 for (int32_t i = 0; i < properties.GetSize(); i++) { | 335 for (int32_t i = 0; i < properties.GetSize(); i++) { |
| 336 CXFA_Node* childProperty = properties[i]; | 336 CXFA_Node* childProperty = properties[i]; |
| 337 if (childProperty->IsUnnamed()) { | 337 if (childProperty->IsUnnamed()) { |
| 338 uint32_t uPropHash = childProperty->GetClassHashCode(); | 338 uint32_t uPropHash = childProperty->GetClassHashCode(); |
| 339 if (uPropHash == uNameHash) { | 339 if (uPropHash == uNameHash) { |
| 340 nodes.Add(childProperty); | 340 nodes.Add(childProperty); |
| 341 } | 341 } |
| 342 } else if (childProperty->GetNameHash() == uNameHash && | 342 } else if (childProperty->GetNameHash() == uNameHash && |
| 343 childProperty->GetClassID() != XFA_ELEMENT_Extras && | 343 childProperty->GetClassID() != XFA_Element::Extras && |
| 344 childProperty->GetClassID() != XFA_ELEMENT_Items) { | 344 childProperty->GetClassID() != XFA_Element::Items) { |
| 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 = NULL; |
| 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()); |
| 366 if (pElement) { | 366 if (pElement) { |
| 367 pProp = curNode->AsNode()->GetProperty( | 367 pProp = curNode->AsNode()->GetProperty( |
| 368 0, pElement->eName, pElement->eName != XFA_ELEMENT_PageSet); | 368 0, pElement->eName, pElement->eName != XFA_Element::PageSet); |
| 369 } | 369 } |
| 370 } | 370 } |
| 371 if (pProp) { | 371 if (pProp) { |
| 372 nodes.Add(pProp); | 372 nodes.Add(pProp); |
| 373 return nodes.GetSize(); | 373 return nodes.GetSize(); |
| 374 } | 374 } |
| 375 } | 375 } |
| 376 CXFA_Node* parentNode = m_pNodeHelper->XFA_ResolveNodes_GetParent( | 376 CXFA_Node* parentNode = m_pNodeHelper->XFA_ResolveNodes_GetParent( |
| 377 curNode->AsNode(), XFA_LOGIC_NoTransparent); | 377 curNode->AsNode(), XFA_LOGIC_NoTransparent); |
| 378 uint32_t uCurClassHash = curNode->GetClassHashCode(); | 378 uint32_t uCurClassHash = curNode->GetClassHashCode(); |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 420 if (child->GetClassHashCode() == uNameHash) { | 420 if (child->GetClassHashCode() == uNameHash) { |
| 421 nodes.Add(child); | 421 nodes.Add(child); |
| 422 } | 422 } |
| 423 } else if (child->GetNameHash() == uNameHash) { | 423 } else if (child->GetNameHash() == uNameHash) { |
| 424 nodes.Add(child); | 424 nodes.Add(child); |
| 425 } | 425 } |
| 426 const XFA_PROPERTY* pPropert = XFA_GetPropertyOfElement( | 426 const XFA_PROPERTY* pPropert = XFA_GetPropertyOfElement( |
| 427 parentNode->GetClassID(), child->GetClassID(), XFA_XDPPACKET_UNKNOWN); | 427 parentNode->GetClassID(), child->GetClassID(), XFA_XDPPACKET_UNKNOWN); |
| 428 FX_BOOL bInnerSearch = FALSE; | 428 FX_BOOL bInnerSearch = FALSE; |
| 429 if (pPropert) { | 429 if (pPropert) { |
| 430 if ((child->GetClassID() == XFA_ELEMENT_Variables || | 430 if ((child->GetClassID() == XFA_Element::Variables || |
| 431 child->GetClassID() == XFA_ELEMENT_PageSet)) { | 431 child->GetClassID() == XFA_Element::PageSet)) { |
| 432 bInnerSearch = TRUE; | 432 bInnerSearch = TRUE; |
| 433 } | 433 } |
| 434 } else { | 434 } else { |
| 435 if (m_pNodeHelper->XFA_NodeIsTransparent(child)) { | 435 if (m_pNodeHelper->XFA_NodeIsTransparent(child)) { |
| 436 bInnerSearch = TRUE; | 436 bInnerSearch = TRUE; |
| 437 } | 437 } |
| 438 } | 438 } |
| 439 if (bInnerSearch) { | 439 if (bInnerSearch) { |
| 440 rndFind.m_CurNode = child; | 440 rndFind.m_CurNode = child; |
| 441 CFX_WideString wsOriginCondition = rndFind.m_wsCondition; | 441 CFX_WideString wsOriginCondition = rndFind.m_wsCondition; |
| (...skipping 279 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 721 CXFA_ResolveNodesData& rnd, | 721 CXFA_ResolveNodesData& rnd, |
| 722 CFX_WideString wsCondition) { | 722 CFX_WideString wsCondition) { |
| 723 CXFA_NodeArray& findNodes = (CXFA_NodeArray&)rnd.m_Nodes; | 723 CXFA_NodeArray& findNodes = (CXFA_NodeArray&)rnd.m_Nodes; |
| 724 int32_t iCurrIndex = 0; | 724 int32_t iCurrIndex = 0; |
| 725 const CXFA_NodeArray& array = rnd.m_pSC->GetUpObjectArray(); | 725 const CXFA_NodeArray& array = rnd.m_pSC->GetUpObjectArray(); |
| 726 int32_t iSize = array.GetSize(); | 726 int32_t iSize = array.GetSize(); |
| 727 if (iSize) { | 727 if (iSize) { |
| 728 CXFA_Node* curNode = array[iSize - 1]; | 728 CXFA_Node* curNode = array[iSize - 1]; |
| 729 FX_BOOL bIsProperty = m_pNodeHelper->XFA_NodeIsProperty(curNode); | 729 FX_BOOL bIsProperty = m_pNodeHelper->XFA_NodeIsProperty(curNode); |
| 730 if (curNode->IsUnnamed() || | 730 if (curNode->IsUnnamed() || |
| 731 (bIsProperty && curNode->GetClassID() != XFA_ELEMENT_PageSet)) { | 731 (bIsProperty && curNode->GetClassID() != XFA_Element::PageSet)) { |
| 732 iCurrIndex = m_pNodeHelper->XFA_GetIndex(curNode, XFA_LOGIC_Transparent, | 732 iCurrIndex = m_pNodeHelper->XFA_GetIndex(curNode, XFA_LOGIC_Transparent, |
| 733 bIsProperty, TRUE); | 733 bIsProperty, TRUE); |
| 734 } else { | 734 } else { |
| 735 iCurrIndex = m_pNodeHelper->XFA_GetIndex(curNode, XFA_LOGIC_Transparent, | 735 iCurrIndex = m_pNodeHelper->XFA_GetIndex(curNode, XFA_LOGIC_Transparent, |
| 736 bIsProperty, FALSE); | 736 bIsProperty, FALSE); |
| 737 } | 737 } |
| 738 } | 738 } |
| 739 int32_t iFoundCount = findNodes.GetSize(); | 739 int32_t iFoundCount = findNodes.GetSize(); |
| 740 wsCondition.TrimLeft(); | 740 wsCondition.TrimLeft(); |
| 741 wsCondition.TrimRight(); | 741 wsCondition.TrimRight(); |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 806 resolveNodeRS.dwFlags = XFA_RESOLVENODE_RSTYPE_CreateNodeMidAll; | 806 resolveNodeRS.dwFlags = XFA_RESOLVENODE_RSTYPE_CreateNodeMidAll; |
| 807 } | 807 } |
| 808 } | 808 } |
| 809 return resolveNodeRS.nodes.GetSize(); | 809 return resolveNodeRS.nodes.GetSize(); |
| 810 } | 810 } |
| 811 void CXFA_ResolveProcessor::XFA_ResolveNode_SetIndexDataBind( | 811 void CXFA_ResolveProcessor::XFA_ResolveNode_SetIndexDataBind( |
| 812 CFX_WideString& wsNextCondition, | 812 CFX_WideString& wsNextCondition, |
| 813 int32_t& iIndex, | 813 int32_t& iIndex, |
| 814 int32_t iCount) { | 814 int32_t iCount) { |
| 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 } |
| 825 | 825 |
| 826 CXFA_ResolveNodesData::CXFA_ResolveNodesData(CXFA_ScriptContext* pSC) | 826 CXFA_ResolveNodesData::CXFA_ResolveNodesData(CXFA_ScriptContext* pSC) |
| 827 : m_pSC(pSC), | 827 : m_pSC(pSC), |
| 828 m_CurNode(NULL), | 828 m_CurNode(NULL), |
| 829 m_wsName(), | 829 m_wsName(), |
| 830 m_uHashName(XFA_HASHCODE_None), | 830 m_uHashName(XFA_HASHCODE_None), |
| 831 m_wsCondition(), | 831 m_wsCondition(), |
| 832 m_nLevel(0), | 832 m_nLevel(0), |
| 833 m_Nodes(), | 833 m_Nodes(), |
| 834 m_dwStyles(XFA_RESOLVENODE_Children), | 834 m_dwStyles(XFA_RESOLVENODE_Children), |
| 835 m_pScriptAttribute(NULL), | 835 m_pScriptAttribute(NULL), |
| 836 m_dwFlag(XFA_RESOVENODE_RSTYPE_Nodes) {} | 836 m_dwFlag(XFA_RESOVENODE_RSTYPE_Nodes) {} |
| 837 | 837 |
| 838 CXFA_ResolveNodesData::~CXFA_ResolveNodesData() { | 838 CXFA_ResolveNodesData::~CXFA_ResolveNodesData() { |
| 839 m_Nodes.RemoveAll(); | 839 m_Nodes.RemoveAll(); |
| 840 } | 840 } |
| OLD | NEW |