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