| 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 18 matching lines...) Expand all  Loading... | 
|   29     m_pNodeHelper = NULL; |   29     m_pNodeHelper = NULL; | 
|   30   } |   30   } | 
|   31 } |   31 } | 
|   32 int32_t CXFA_ResolveProcessor::XFA_ResolveNodes(CXFA_ResolveNodesData& rnd) { |   32 int32_t CXFA_ResolveProcessor::XFA_ResolveNodes(CXFA_ResolveNodesData& rnd) { | 
|   33   if (rnd.m_CurNode == NULL) { |   33   if (rnd.m_CurNode == NULL) { | 
|   34     return -1; |   34     return -1; | 
|   35   } |   35   } | 
|   36   if (!rnd.m_CurNode->IsNode()) { |   36   if (!rnd.m_CurNode->IsNode()) { | 
|   37     if (rnd.m_dwStyles & XFA_RESOLVENODE_Attributes) { |   37     if (rnd.m_dwStyles & XFA_RESOLVENODE_Attributes) { | 
|   38       return XFA_ResolveNodes_ForAttributeRs(rnd.m_CurNode, rnd, |   38       return XFA_ResolveNodes_ForAttributeRs(rnd.m_CurNode, rnd, | 
|   39                                              rnd.m_wsName.AsWideStringC()); |   39                                              rnd.m_wsName.AsStringC()); | 
|   40     } |   40     } | 
|   41     return 0; |   41     return 0; | 
|   42   } |   42   } | 
|   43   if (rnd.m_dwStyles & XFA_RESOLVENODE_AnyChild) { |   43   if (rnd.m_dwStyles & XFA_RESOLVENODE_AnyChild) { | 
|   44     return XFA_ResolveNodes_AnyChild(rnd); |   44     return XFA_ResolveNodes_AnyChild(rnd); | 
|   45   } |   45   } | 
|   46   FX_WCHAR wch = rnd.m_wsName.GetAt(0); |   46   FX_WCHAR wch = rnd.m_wsName.GetAt(0); | 
|   47   switch (wch) { |   47   switch (wch) { | 
|   48     case '$': |   48     case '$': | 
|   49       return XFA_ResolveNodes_Dollar(rnd); |   49       return XFA_ResolveNodes_Dollar(rnd); | 
| (...skipping 14 matching lines...) Expand all  Loading... | 
|   64     return 1; |   64     return 1; | 
|   65   } else if (rnd.m_CurNode->GetClassID() == XFA_ELEMENT_Xfa) { |   65   } else if (rnd.m_CurNode->GetClassID() == XFA_ELEMENT_Xfa) { | 
|   66     CXFA_Object* pObjNode = |   66     CXFA_Object* pObjNode = | 
|   67         rnd.m_pSC->GetDocument()->GetXFAObject(rnd.m_uHashName); |   67         rnd.m_pSC->GetDocument()->GetXFAObject(rnd.m_uHashName); | 
|   68     if (pObjNode) { |   68     if (pObjNode) { | 
|   69       rnd.m_Nodes.Add(pObjNode); |   69       rnd.m_Nodes.Add(pObjNode); | 
|   70     } else if (rnd.m_uHashName == XFA_HASHCODE_Xfa) { |   70     } else if (rnd.m_uHashName == XFA_HASHCODE_Xfa) { | 
|   71       rnd.m_Nodes.Add(rnd.m_CurNode); |   71       rnd.m_Nodes.Add(rnd.m_CurNode); | 
|   72     } else if ((rnd.m_dwStyles & XFA_RESOLVENODE_Attributes) && |   72     } else if ((rnd.m_dwStyles & XFA_RESOLVENODE_Attributes) && | 
|   73                XFA_ResolveNodes_ForAttributeRs(rnd.m_CurNode, rnd, |   73                XFA_ResolveNodes_ForAttributeRs(rnd.m_CurNode, rnd, | 
|   74                                                rnd.m_wsName.AsWideStringC())) { |   74                                                rnd.m_wsName.AsStringC())) { | 
|   75       return 1; |   75       return 1; | 
|   76     } |   76     } | 
|   77     if (rnd.m_Nodes.GetSize() > 0) { |   77     if (rnd.m_Nodes.GetSize() > 0) { | 
|   78       XFA_ResolveNode_FilterCondition(rnd, rnd.m_wsCondition); |   78       XFA_ResolveNode_FilterCondition(rnd, rnd.m_wsCondition); | 
|   79     } |   79     } | 
|   80     return rnd.m_Nodes.GetSize(); |   80     return rnd.m_Nodes.GetSize(); | 
|   81   } |   81   } | 
|   82   int32_t nRet = XFA_ResolveNodes_Normal(rnd); |   82   int32_t nRet = XFA_ResolveNodes_Normal(rnd); | 
|   83   if (nRet < 1 && rnd.m_uHashName == XFA_HASHCODE_Xfa) { |   83   if (nRet < 1 && rnd.m_uHashName == XFA_HASHCODE_Xfa) { | 
|   84     rnd.m_Nodes.Add(rnd.m_pSC->GetDocument()->GetRoot()); |   84     rnd.m_Nodes.Add(rnd.m_pSC->GetDocument()->GetRoot()); | 
| (...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  162     rnd.m_Nodes.Append(rndFind.m_Nodes); |  162     rnd.m_Nodes.Append(rndFind.m_Nodes); | 
|  163     rndFind.m_Nodes.RemoveAll(); |  163     rndFind.m_Nodes.RemoveAll(); | 
|  164   } |  164   } | 
|  165   return rnd.m_Nodes.GetSize(); |  165   return rnd.m_Nodes.GetSize(); | 
|  166 } |  166 } | 
|  167 int32_t CXFA_ResolveProcessor::XFA_ResolveNodes_NumberSign( |  167 int32_t CXFA_ResolveProcessor::XFA_ResolveNodes_NumberSign( | 
|  168     CXFA_ResolveNodesData& rnd) { |  168     CXFA_ResolveNodesData& rnd) { | 
|  169   CFX_WideString wsName = rnd.m_wsName.Right(rnd.m_wsName.GetLength() - 1); |  169   CFX_WideString wsName = rnd.m_wsName.Right(rnd.m_wsName.GetLength() - 1); | 
|  170   CFX_WideString wsCondition = rnd.m_wsCondition; |  170   CFX_WideString wsCondition = rnd.m_wsCondition; | 
|  171   CXFA_Node* curNode = ToNode(rnd.m_CurNode); |  171   CXFA_Node* curNode = ToNode(rnd.m_CurNode); | 
|  172   if (XFA_ResolveNodes_ForAttributeRs(curNode, rnd, wsName.AsWideStringC())) { |  172   if (XFA_ResolveNodes_ForAttributeRs(curNode, rnd, wsName.AsStringC())) { | 
|  173     return 1; |  173     return 1; | 
|  174   } |  174   } | 
|  175   CXFA_ResolveNodesData rndFind; |  175   CXFA_ResolveNodesData rndFind; | 
|  176   rndFind.m_pSC = rnd.m_pSC; |  176   rndFind.m_pSC = rnd.m_pSC; | 
|  177   rndFind.m_nLevel = rnd.m_nLevel + 1; |  177   rndFind.m_nLevel = rnd.m_nLevel + 1; | 
|  178   rndFind.m_dwStyles = rnd.m_dwStyles; |  178   rndFind.m_dwStyles = rnd.m_dwStyles; | 
|  179   rndFind.m_dwStyles |= XFA_RESOLVENODE_TagName; |  179   rndFind.m_dwStyles |= XFA_RESOLVENODE_TagName; | 
|  180   rndFind.m_dwStyles &= ~XFA_RESOLVENODE_Attributes; |  180   rndFind.m_dwStyles &= ~XFA_RESOLVENODE_Attributes; | 
|  181   rndFind.m_wsName = wsName; |  181   rndFind.m_wsName = wsName; | 
|  182   rndFind.m_uHashName = |  182   rndFind.m_uHashName = | 
| (...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  325         } |  325         } | 
|  326       } |  326       } | 
|  327       XFA_ResolveNode_FilterCondition(rnd, wsCondition); |  327       XFA_ResolveNode_FilterCondition(rnd, wsCondition); | 
|  328       if (nodes.GetSize() > 0) { |  328       if (nodes.GetSize() > 0) { | 
|  329         return 1; |  329         return 1; | 
|  330       } |  330       } | 
|  331       return 0; |  331       return 0; | 
|  332     } |  332     } | 
|  333   } |  333   } | 
|  334   if (dwStyles & XFA_RESOLVENODE_Attributes) { |  334   if (dwStyles & XFA_RESOLVENODE_Attributes) { | 
|  335     if (XFA_ResolveNodes_ForAttributeRs(curNode, rnd, wsName.AsWideStringC())) { |  335     if (XFA_ResolveNodes_ForAttributeRs(curNode, rnd, wsName.AsStringC())) { | 
|  336       return 1; |  336       return 1; | 
|  337     } |  337     } | 
|  338   } |  338   } | 
|  339   if (dwStyles & XFA_RESOLVENODE_Properties) { |  339   if (dwStyles & XFA_RESOLVENODE_Properties) { | 
|  340     for (int32_t i = 0; i < properties.GetSize(); i++) { |  340     for (int32_t i = 0; i < properties.GetSize(); i++) { | 
|  341       CXFA_Node* childProperty = properties[i]; |  341       CXFA_Node* childProperty = properties[i]; | 
|  342       if (childProperty->IsUnnamed()) { |  342       if (childProperty->IsUnnamed()) { | 
|  343         uint32_t uPropHash = childProperty->GetClassHashCode(); |  343         uint32_t uPropHash = childProperty->GetClassHashCode(); | 
|  344         if (uPropHash == uNameHash) { |  344         if (uPropHash == uNameHash) { | 
|  345           nodes.Add(childProperty); |  345           nodes.Add(childProperty); | 
| (...skipping 14 matching lines...) Expand all  Loading... | 
|  360     CXFA_Node* pProp = NULL; |  360     CXFA_Node* pProp = NULL; | 
|  361     if (XFA_ELEMENT_Subform == curNode->GetClassID() && |  361     if (XFA_ELEMENT_Subform == curNode->GetClassID() && | 
|  362         XFA_HASHCODE_Occur == uNameHash) { |  362         XFA_HASHCODE_Occur == uNameHash) { | 
|  363       CXFA_Node* pInstanceManager = |  363       CXFA_Node* pInstanceManager = | 
|  364           curNode->AsNode()->GetInstanceMgrOfSubform(); |  364           curNode->AsNode()->GetInstanceMgrOfSubform(); | 
|  365       if (pInstanceManager) { |  365       if (pInstanceManager) { | 
|  366         pProp = pInstanceManager->GetProperty(0, XFA_ELEMENT_Occur, TRUE); |  366         pProp = pInstanceManager->GetProperty(0, XFA_ELEMENT_Occur, TRUE); | 
|  367       } |  367       } | 
|  368     } else { |  368     } else { | 
|  369       const XFA_ELEMENTINFO* pElement = |  369       const XFA_ELEMENTINFO* pElement = | 
|  370           XFA_GetElementByName(wsName.AsWideStringC()); |  370           XFA_GetElementByName(wsName.AsStringC()); | 
|  371       if (pElement) { |  371       if (pElement) { | 
|  372         pProp = curNode->AsNode()->GetProperty( |  372         pProp = curNode->AsNode()->GetProperty( | 
|  373             0, pElement->eName, pElement->eName != XFA_ELEMENT_PageSet); |  373             0, pElement->eName, pElement->eName != XFA_ELEMENT_PageSet); | 
|  374       } |  374       } | 
|  375     } |  375     } | 
|  376     if (pProp) { |  376     if (pProp) { | 
|  377       nodes.Add(pProp); |  377       nodes.Add(pProp); | 
|  378       return nodes.GetSize(); |  378       return nodes.GetSize(); | 
|  379     } |  379     } | 
|  380   } |  380   } | 
| (...skipping 325 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  706   } else { |  706   } else { | 
|  707     return; |  707     return; | 
|  708   } |  708   } | 
|  709  |  709  | 
|  710   CXFA_ScriptContext* pContext = rnd.m_pSC; |  710   CXFA_ScriptContext* pContext = rnd.m_pSC; | 
|  711   wsExpression = wsCondition.Mid(2, wsCondition.GetLength() - 3); |  711   wsExpression = wsCondition.Mid(2, wsCondition.GetLength() - 3); | 
|  712   for (int32_t i = iFoundCount - 1; i >= 0; i--) { |  712   for (int32_t i = iFoundCount - 1; i >= 0; i--) { | 
|  713     CXFA_Object* node = findNodes[i]; |  713     CXFA_Object* node = findNodes[i]; | 
|  714     FX_BOOL bRet = FALSE; |  714     FX_BOOL bRet = FALSE; | 
|  715     FXJSE_HVALUE pRetValue = FXJSE_Value_Create(rnd.m_pSC->GetRuntime()); |  715     FXJSE_HVALUE pRetValue = FXJSE_Value_Create(rnd.m_pSC->GetRuntime()); | 
|  716     bRet = pContext->RunScript(eLangType, wsExpression.AsWideStringC(), |  716     bRet = pContext->RunScript(eLangType, wsExpression.AsStringC(), pRetValue, | 
|  717                                pRetValue, node); |  717                                node); | 
|  718     if (!bRet || !FXJSE_Value_ToBoolean(pRetValue)) { |  718     if (!bRet || !FXJSE_Value_ToBoolean(pRetValue)) { | 
|  719       findNodes.RemoveAt(i); |  719       findNodes.RemoveAt(i); | 
|  720     } |  720     } | 
|  721     FXJSE_Value_Release(pRetValue); |  721     FXJSE_Value_Release(pRetValue); | 
|  722   } |  722   } | 
|  723 } |  723 } | 
|  724  |  724  | 
|  725 void CXFA_ResolveProcessor::XFA_ResolveNode_FilterCondition( |  725 void CXFA_ResolveProcessor::XFA_ResolveNode_FilterCondition( | 
|  726     CXFA_ResolveNodesData& rnd, |  726     CXFA_ResolveNodesData& rnd, | 
|  727     CFX_WideString wsCondition) { |  727     CFX_WideString wsCondition) { | 
| (...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  820   if (m_pNodeHelper->XFA_CreateNode_ForCondition(wsNextCondition)) { |  820   if (m_pNodeHelper->XFA_CreateNode_ForCondition(wsNextCondition)) { | 
|  821     if (m_pNodeHelper->m_eLastCreateType == XFA_ELEMENT_DataGroup) { |  821     if (m_pNodeHelper->m_eLastCreateType == XFA_ELEMENT_DataGroup) { | 
|  822       iIndex = 0; |  822       iIndex = 0; | 
|  823     } else { |  823     } else { | 
|  824       iIndex = iCount - 1; |  824       iIndex = iCount - 1; | 
|  825     } |  825     } | 
|  826   } else { |  826   } else { | 
|  827     iIndex = iCount - 1; |  827     iIndex = iCount - 1; | 
|  828   } |  828   } | 
|  829 } |  829 } | 
| OLD | NEW |