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 676 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
687 } | 687 } |
688 } | 688 } |
689 void CXFA_ResolveProcessor::XFA_ResolveNode_DoPredicateFilter( | 689 void CXFA_ResolveProcessor::XFA_ResolveNode_DoPredicateFilter( |
690 int32_t iCurIndex, | 690 int32_t iCurIndex, |
691 CFX_WideString wsCondition, | 691 CFX_WideString wsCondition, |
692 int32_t iFoundCount, | 692 int32_t iFoundCount, |
693 CXFA_ResolveNodesData& rnd) { | 693 CXFA_ResolveNodesData& rnd) { |
694 CXFA_NodeArray& findNodes = (CXFA_NodeArray&)rnd.m_Nodes; | 694 CXFA_NodeArray& findNodes = (CXFA_NodeArray&)rnd.m_Nodes; |
695 FXSYS_assert(iFoundCount == findNodes.GetSize()); | 695 FXSYS_assert(iFoundCount == findNodes.GetSize()); |
696 CFX_WideString wsExpression; | 696 CFX_WideString wsExpression; |
697 IXFA_ScriptContext* pContext = NULL; | |
698 XFA_SCRIPTLANGTYPE eLangType = XFA_SCRIPTLANGTYPE_Unkown; | 697 XFA_SCRIPTLANGTYPE eLangType = XFA_SCRIPTLANGTYPE_Unkown; |
699 if (wsCondition.Left(2) == FX_WSTRC(L".[") && | 698 if (wsCondition.Left(2) == FX_WSTRC(L".[") && |
700 wsCondition.Right(1) == FX_WSTRC(L"]")) { | 699 wsCondition.Right(1) == FX_WSTRC(L"]")) { |
701 eLangType = XFA_SCRIPTLANGTYPE_Formcalc; | 700 eLangType = XFA_SCRIPTLANGTYPE_Formcalc; |
702 } else if (wsCondition.Left(2) == FX_WSTRC(L".(") && | 701 } else if (wsCondition.Left(2) == FX_WSTRC(L".(") && |
703 wsCondition.Right(1) == FX_WSTRC(L")")) { | 702 wsCondition.Right(1) == FX_WSTRC(L")")) { |
704 eLangType = XFA_SCRIPTLANGTYPE_Javascript; | 703 eLangType = XFA_SCRIPTLANGTYPE_Javascript; |
705 } else { | 704 } else { |
706 return; | 705 return; |
707 } | 706 } |
708 pContext = rnd.m_pSC; | 707 |
| 708 CXFA_ScriptContext* pContext = rnd.m_pSC; |
709 wsExpression = wsCondition.Mid(2, wsCondition.GetLength() - 3); | 709 wsExpression = wsCondition.Mid(2, wsCondition.GetLength() - 3); |
710 for (int32_t i = iFoundCount - 1; i >= 0; i--) { | 710 for (int32_t i = iFoundCount - 1; i >= 0; i--) { |
711 CXFA_Object* node = findNodes[i]; | 711 CXFA_Object* node = findNodes[i]; |
712 FX_BOOL bRet = FALSE; | 712 FX_BOOL bRet = FALSE; |
713 FXJSE_HVALUE pRetValue = FXJSE_Value_Create(rnd.m_pSC->GetRuntime()); | 713 FXJSE_HVALUE pRetValue = FXJSE_Value_Create(rnd.m_pSC->GetRuntime()); |
714 bRet = pContext->RunScript(eLangType, wsExpression, pRetValue, node); | 714 bRet = pContext->RunScript(eLangType, wsExpression, pRetValue, node); |
715 if (!bRet || !FXJSE_Value_ToBoolean(pRetValue)) { | 715 if (!bRet || !FXJSE_Value_ToBoolean(pRetValue)) { |
716 findNodes.RemoveAt(i); | 716 findNodes.RemoveAt(i); |
717 } | 717 } |
718 FXJSE_Value_Release(pRetValue); | 718 FXJSE_Value_Release(pRetValue); |
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after 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 |