Merge XFA to PDFium master at 4dc95e7 on 10/28/2014
[pdfium.git] / xfa / include / fxjse / fxjse.h
1 // Copyright 2014 PDFium Authors. All rights reserved.\r
2 // Use of this source code is governed by a BSD-style license that can be\r
3 // found in the LICENSE file.\r
4 \r
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com\r
6 \r
7 #ifndef _FXJSE_H_\r
8 #define _FXJSE_H_\r
9 #ifdef __cplusplus\r
10 #define FXJSE_DEFINEINHERITHANDLE(name, subtypename) typedef struct _##subtypename : public _##name {} * subtypename;\r
11 #else\r
12 #define FXJSE_DEFINEINHERITHANDLE(name, subtypename) typedef name subtypename;\r
13 #endif\r
14 FX_DEFINEHANDLE(FXJSE_HRUNTIME);\r
15 FX_DEFINEHANDLE(FXJSE_HCONTEXT);\r
16 FX_DEFINEHANDLE(FXJSE_HCLASS);\r
17 FX_DEFINEHANDLE(FXJSE_HVALUE);\r
18 FXJSE_DEFINEINHERITHANDLE(FXJSE_HVALUE, FXJSE_HOBJECT);\r
19 typedef double FXJSE_DOUBLE;\r
20 void FXJSE_Initialize();\r
21 void FXJSE_Finalize();\r
22 FXJSE_HRUNTIME  FXJSE_Runtime_Create();\r
23 void                    FXJSE_Runtime_Release(FXJSE_HRUNTIME hRuntime);\r
24 typedef struct _FXJSE_CLASS FXJSE_CLASS;\r
25 FXJSE_HCONTEXT  FXJSE_Context_Create    (FXJSE_HRUNTIME hRuntime, const FXJSE_CLASS* lpGlobalClass = NULL, FX_LPVOID lpGlobalObject = NULL);\r
26 void                    FXJSE_Context_Release   (FXJSE_HCONTEXT hContext);\r
27 FXJSE_HVALUE    FXJSE_Context_GetGlobalObject(FXJSE_HCONTEXT hContext);\r
28 FXJSE_HRUNTIME  FXJSE_Context_GetRuntime(FXJSE_HCONTEXT hContext);\r
29 enum FXJSE_CompatibleModeFlags {\r
30     FXJSE_COMPATIBLEMODEFLAG_CONSTRUCTOREXTRAMETHODS = (1 << 0),\r
31     FXJSE_COMPATIBLEMODEFLAGCOUNT = 1,\r
32 };\r
33 void                    FXJSE_Context_EnableCompatibleMode(FXJSE_HCONTEXT hContext, FX_DWORD dwCompatibleFlags);\r
34 class CFXJSE_Arguments\r
35 {\r
36 public:\r
37     FXJSE_HRUNTIME      GetRuntime() const;\r
38     FX_INT32            GetLength() const;\r
39     FXJSE_HVALUE        GetValue(FX_INT32 index) const;\r
40     FX_BOOL                     GetBoolean(FX_INT32 index) const;\r
41     FX_INT32            GetInt32(FX_INT32 index) const;\r
42     FX_FLOAT            GetFloat(FX_INT32 index) const;\r
43     CFX_ByteString      GetUTF8String(FX_INT32 index) const;\r
44     FX_LPVOID           GetObject(FX_INT32 index, FXJSE_HCLASS hClass = NULL) const;\r
45     FXJSE_HVALUE        GetReturnValue();\r
46 };\r
47 typedef void    (*FXJSE_FuncCallback)   (FXJSE_HOBJECT hThis,   FX_BSTR szFuncName, CFXJSE_Arguments &args);\r
48 typedef void    (*FXJSE_PropAccessor)   (FXJSE_HOBJECT hObject, FX_BSTR szPropName, FXJSE_HVALUE hValue);\r
49 typedef FX_INT32(*FXJSE_PropTypeGetter) (FXJSE_HOBJECT hObject, FX_BSTR szPropName, FX_BOOL bQueryIn);\r
50 typedef FX_BOOL (*FXJSE_PropDeleter)    (FXJSE_HOBJECT hObject, FX_BSTR szPropName);\r
51 typedef struct _FXJSE_FUNCTION {\r
52     FX_LPCSTR                           name;\r
53     FXJSE_FuncCallback          callbackProc;\r
54 } FXJSE_FUNCTION;\r
55 #define FXJSE_DEF_FUNCTION(functionName, functionCallback) {functionName, functionCallback}\r
56 void    FXJSE_DefineFunctions(FXJSE_HCONTEXT hContext, const FXJSE_FUNCTION* lpFunctions, int nNum);\r
57 typedef struct _FXJSE_PROPERTY {\r
58     FX_LPCSTR                           name;\r
59     FXJSE_PropAccessor          getProc;\r
60     FXJSE_PropAccessor          setProc;\r
61 } FXJSE_PROPERTY;\r
62 enum FXJSE_ClassPropTypes {\r
63     FXJSE_ClassPropType_None,\r
64     FXJSE_ClassPropType_Property,\r
65     FXJSE_ClassPropType_Method\r
66 };\r
67 typedef struct _FXJSE_CLASS {\r
68     FX_LPCSTR                           name;\r
69     FXJSE_FuncCallback          constructor;\r
70     FXJSE_PROPERTY*                     properties;\r
71     FXJSE_FUNCTION*                     methods;\r
72     FX_INT32                            propNum;\r
73     FX_INT32                            methNum;\r
74     FXJSE_PropTypeGetter        dynPropTypeGetter;\r
75     FXJSE_PropAccessor          dynPropGetter;\r
76     FXJSE_PropAccessor          dynPropSetter;\r
77     FXJSE_PropDeleter           dynPropDeleter;\r
78     FXJSE_FuncCallback          dynMethodCall;\r
79 } FXJSE_CLASS;\r
80 FXJSE_HCLASS    FXJSE_DefineClass(FXJSE_HCONTEXT hContext, const FXJSE_CLASS* lpClass);\r
81 FXJSE_HCLASS    FXJSE_GetClass(FXJSE_HCONTEXT hContext, FX_BSTR szName);\r
82 FXJSE_HVALUE    FXJSE_Value_Create(FXJSE_HRUNTIME hRuntime);\r
83 void                    FXJSE_Value_Release(FXJSE_HVALUE hValue);\r
84 FXJSE_HRUNTIME  FXJSE_Value_GetRuntime(FXJSE_HVALUE hValue);\r
85 FX_BOOL                 FXJSE_Value_IsUndefined         (FXJSE_HVALUE hValue);\r
86 FX_BOOL                 FXJSE_Value_IsNull                      (FXJSE_HVALUE hValue);\r
87 FX_BOOL                 FXJSE_Value_IsBoolean           (FXJSE_HVALUE hValue);\r
88 FX_BOOL                 FXJSE_Value_IsUTF8String        (FXJSE_HVALUE hValue);\r
89 FX_BOOL                 FXJSE_Value_IsNumber            (FXJSE_HVALUE hValue);\r
90 FX_BOOL                 FXJSE_Value_IsInteger           (FXJSE_HVALUE hValue);\r
91 FX_BOOL                 FXJSE_Value_IsObject            (FXJSE_HVALUE hValue);\r
92 FX_BOOL                 FXJSE_Value_IsArray                     (FXJSE_HVALUE hValue);\r
93 FX_BOOL                 FXJSE_Value_IsFunction          (FXJSE_HVALUE hValue);\r
94 FX_BOOL                 FXJSE_Value_IsDate                      (FXJSE_HVALUE hValue);\r
95 FX_BOOL                 FXJSE_Value_ToBoolean           (FXJSE_HVALUE hValue);\r
96 FX_FLOAT                FXJSE_Value_ToFloat                     (FXJSE_HVALUE hValue);\r
97 FXJSE_DOUBLE    FXJSE_Value_ToDouble            (FXJSE_HVALUE hValue);\r
98 FX_INT32                FXJSE_Value_ToInteger           (FXJSE_HVALUE hValue);\r
99 void                    FXJSE_Value_ToUTF8String        (FXJSE_HVALUE hValue, CFX_ByteString& szStrOutput);\r
100 FX_LPVOID               FXJSE_Value_ToObject            (FXJSE_HVALUE hValue, FXJSE_HCLASS hClass);\r
101 void                    FXJSE_Value_SetUndefined        (FXJSE_HVALUE hValue);\r
102 void                    FXJSE_Value_SetNull                     (FXJSE_HVALUE hValue);\r
103 void                    FXJSE_Value_SetBoolean          (FXJSE_HVALUE hValue, FX_BOOL      bBoolean);\r
104 void                    FXJSE_Value_SetUTF8String       (FXJSE_HVALUE hValue, FX_BSTR      szString);\r
105 void                    FXJSE_Value_SetInteger          (FXJSE_HVALUE hValue, FX_INT32     nInteger);\r
106 void                    FXJSE_Value_SetFloat            (FXJSE_HVALUE hValue, FX_FLOAT     fFloat);\r
107 void                    FXJSE_Value_SetDouble           (FXJSE_HVALUE hValue, FXJSE_DOUBLE dDouble);\r
108 void                    FXJSE_Value_SetObject           (FXJSE_HVALUE hValue, FX_LPVOID lpObject, FXJSE_HCLASS hClass);\r
109 void                    FXJSE_Value_SetArray            (FXJSE_HVALUE hValue, FX_UINT32 uValueCount, FXJSE_HVALUE* rgValues);\r
110 void                    FXJSE_Value_SetDate                     (FXJSE_HVALUE hValue, FXJSE_DOUBLE dDouble);\r
111 void                    FXJSE_Value_Set                         (FXJSE_HVALUE hValue, FXJSE_HVALUE hOriginalValue);\r
112 FX_BOOL                 FXJSE_Value_GetObjectProp               (FXJSE_HVALUE hValue, FX_BSTR   szPropName,     FXJSE_HVALUE hPropValue);\r
113 FX_BOOL                 FXJSE_Value_SetObjectProp               (FXJSE_HVALUE hValue, FX_BSTR   szPropName,     FXJSE_HVALUE hPropValue);\r
114 FX_BOOL                 FXJSE_Value_GetObjectPropByIdx  (FXJSE_HVALUE hValue, FX_UINT32 uPropIdx,       FXJSE_HVALUE hPropValue);\r
115 FX_BOOL                 FXJSE_Value_SetObjectPropByIdx  (FXJSE_HVALUE hValue, FX_UINT32 uPropIdx,       FXJSE_HVALUE hPropValue);\r
116 FX_BOOL                 FXJSE_Value_DeleteObjectProp    (FXJSE_HVALUE hValue, FX_BSTR   szPropName);\r
117 FX_BOOL                 FXJSE_Value_ObjectHasOwnProp    (FXJSE_HVALUE hValue, FX_BSTR   szPropName, FX_BOOL     bUseTypeGetter);\r
118 FX_BOOL                 FXJSE_Value_SetObjectOwnProp    (FXJSE_HVALUE hValue, FX_BSTR   szPropName, FXJSE_HVALUE hPropValue);\r
119 FX_BOOL                 FXJSE_Value_CallFunction                (FXJSE_HVALUE hFunction, FXJSE_HVALUE hThis, FXJSE_HVALUE hRetValue, FX_UINT32 nArgCount, FXJSE_HVALUE* lpArgs);\r
120 FX_BOOL                 FXJSE_Value_SetFunctionBind     (FXJSE_HVALUE hValue, FXJSE_HVALUE hOldFunction, FXJSE_HVALUE hNewThis);\r
121 FX_BOOL                 FXJSE_ExecuteScript(FXJSE_HCONTEXT hContext, FX_LPCSTR szScript, FXJSE_HVALUE hRetValue, FXJSE_HVALUE hNewThisObject = NULL);\r
122 void                    FXJSE_ThrowMessage(FX_BSTR utf8Name, FX_BSTR utf8Message);\r
123 FX_BOOL                 FXJSE_ReturnValue_GetMessage(FXJSE_HVALUE hRetValue, CFX_ByteString& utf8Name, CFX_ByteString& utf8Message);\r
124 FX_BOOL                 FXJSE_ReturnValue_GetLineInfo(FXJSE_HVALUE hRetValue, FX_INT32& nLine, FX_INT32& nCol);\r
125 #endif\r