1ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann// Copyright 2014 PDFium Authors. All rights reserved. 2ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann// Use of this source code is governed by a BSD-style license that can be 3ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann// found in the LICENSE file. 4ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 5ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 6ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 7ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#ifndef _FXFA_SCRIPT_H 8ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define _FXFA_SCRIPT_H 9ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define XFA_RESOLVENODE_Children 0x0001 10ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define XFA_RESOLVENODE_Attributes 0x0004 11ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define XFA_RESOLVENODE_Properties 0x0008 12ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define XFA_RESOLVENODE_Siblings 0x0020 13ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define XFA_RESOLVENODE_Parent 0x0040 14ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define XFA_RESOLVENODE_AnyChild 0x0080 15ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define XFA_RESOLVENODE_ALL 0x0100 16ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define XFA_RESOLVENODE_CreateNode 0x0400 17ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define XFA_RESOLVENODE_Bind 0x0800 18ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define XFA_RESOLVENODE_BindNew 0x1000 19ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannenum XFA_SCRIPTLANGTYPE { 20ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann XFA_SCRIPTLANGTYPE_Formcalc = XFA_SCRIPTTYPE_Formcalc, 21ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann XFA_SCRIPTLANGTYPE_Javascript = XFA_SCRIPTTYPE_Javascript, 22ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann XFA_SCRIPTLANGTYPE_Unkown = XFA_SCRIPTTYPE_Unkown, 23ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}; 24ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannenum XFA_RESOVENODE_RSTYPE { 25ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann XFA_RESOVENODE_RSTYPE_Nodes, 26ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann XFA_RESOVENODE_RSTYPE_Attribute, 27ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann XFA_RESOLVENODE_RSTYPE_CreateNodeOne, 28ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann XFA_RESOLVENODE_RSTYPE_CreateNodeAll, 29ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann XFA_RESOLVENODE_RSTYPE_CreateNodeMidAll, 30ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann XFA_RESOVENODE_RSTYPE_ExistNodes, 31ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}; 32ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass CXFA_HVALUEArray : public CFX_ArrayTemplate<FXJSE_HVALUE> { 33ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann public: 34ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CXFA_HVALUEArray(FXJSE_HRUNTIME hRunTime) : m_hRunTime(hRunTime){}; 35ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann ~CXFA_HVALUEArray() { 36ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann for (int32_t i = 0; i < GetSize(); i++) { 37ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FXJSE_Value_Release(GetAt(i)); 38ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 39ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 40ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann void GetAttributeObject(CXFA_ObjArray& objArray) { 41ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann for (int32_t i = 0; i < GetSize(); i++) { 42ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CXFA_Object* pObject = (CXFA_Object*)FXJSE_Value_ToObject(GetAt(i), NULL); 43ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann objArray.Add(pObject); 44ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 45ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 46ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FXJSE_HRUNTIME m_hRunTime; 47ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}; 48ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmanntypedef struct _XFA_RESOLVENODE_RS { 49ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann _XFA_RESOLVENODE_RS() 50ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann : dwFlags(XFA_RESOVENODE_RSTYPE_Nodes), pScriptAttribute(NULL) {} 51ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann ~_XFA_RESOLVENODE_RS() { nodes.RemoveAll(); } 52ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int32_t GetAttributeResult(CXFA_HVALUEArray& hValueArray) const { 53ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (pScriptAttribute && pScriptAttribute->eValueType == XFA_SCRIPT_Object) { 54ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FXJSE_HRUNTIME hRunTime = hValueArray.m_hRunTime; 55ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann for (int32_t i = 0; i < nodes.GetSize(); i++) { 56ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FXJSE_HVALUE hValue = FXJSE_Value_Create(hRunTime); 57ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann (nodes[i]->*(pScriptAttribute->lpfnCallback))( 58ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann hValue, FALSE, (XFA_ATTRIBUTE)pScriptAttribute->eAttribute); 59ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann hValueArray.Add(hValue); 60ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 61ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 62ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return hValueArray.GetSize(); 63ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 64ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CXFA_ObjArray nodes; 65ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann XFA_RESOVENODE_RSTYPE dwFlags; 66ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann XFA_LPCSCRIPTATTRIBUTEINFO pScriptAttribute; 67ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} XFA_RESOLVENODE_RS, *XFA_LPRESOLVENODE_RS; 68ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmanntypedef struct _XFA_JSBUILTININFO { 69ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann uint32_t uUnicodeHash; 70ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann const FX_CHAR* pName; 71ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} XFA_JSBUILTININFO, *XFA_LPJSBUILTININFO; 72ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmanntypedef XFA_JSBUILTININFO const* XFA_LPCJSBUILTININFO; 73ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannXFA_LPCJSBUILTININFO XFA_GetJSBuiltinByHash(uint32_t uHashCode); 74ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass IXFA_ScriptContext { 75ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann public: 76ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann virtual ~IXFA_ScriptContext() {} 77ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann virtual void Release() = 0; 78ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann virtual void Initialize(FXJSE_HRUNTIME hRuntime) = 0; 79ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 80ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann virtual void SetEventParam(CXFA_EventParam* pEventParam) = 0; 81ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann virtual CXFA_EventParam* GetEventParam() = 0; 82ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann virtual FX_BOOL RunScript(XFA_SCRIPTLANGTYPE eScriptType, 83ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann const CFX_WideStringC& wsScript, 84ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FXJSE_HVALUE hRetValue, 85ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CXFA_Object* pThisObject = NULL) = 0; 86ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann virtual int32_t ResolveObjects(CXFA_Object* refNode, 87ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann const CFX_WideStringC& wsExpression, 88ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann XFA_RESOLVENODE_RS& resolveNodeRS, 89ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_DWORD dwStyles = XFA_RESOLVENODE_Children, 90ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CXFA_Node* bindNode = NULL) = 0; 91ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann virtual FXJSE_HVALUE GetJSValueFromMap(CXFA_Object* pObject) = 0; 92ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann virtual void CacheList(CXFA_NodeList* pList) = 0; 93ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann virtual CXFA_Object* GetThisObject() const = 0; 94ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann virtual FXJSE_HRUNTIME GetRuntime() const = 0; 95ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann virtual int32_t GetIndexByName(CXFA_Node* refNode) = 0; 96ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann virtual int32_t GetIndexByClassName(CXFA_Node* refNode) = 0; 97ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann virtual void GetSomExpression(CXFA_Node* refNode, 98ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_WideString& wsExpression) = 0; 99ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 100ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann virtual void SetNodesOfRunScript(CXFA_NodeArray* pArray) = 0; 101ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann virtual void AddNodesOfRunScript(const CXFA_NodeArray& nodes) = 0; 102ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann virtual void AddNodesOfRunScript(CXFA_Node* pNode) = 0; 103ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann virtual FXJSE_HCLASS GetJseNormalClass() = 0; 104ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann virtual XFA_SCRIPTLANGTYPE GetType() = 0; 105ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann virtual void AddJSBuiltinObject(XFA_LPCJSBUILTININFO pBuitinObject) = 0; 106ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann virtual void SetRunAtType(XFA_ATTRIBUTEENUM eRunAt) = 0; 107ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann virtual FX_BOOL IsRunAtClient() = 0; 108ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}; 109ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannIXFA_ScriptContext* XFA_ScriptContext_Create(CXFA_Document* pDocument); 110ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#endif 111