Merge to XFA: Kill FX_DEFINEHANDLE
[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 \r
10 typedef struct FXJSE_HRUNTIME_ {\r
11     FX_LPVOID pData;\r
12 }* FXJSE_HRUNTIME;\r
13 typedef struct FXJSE_HCONTEXT_ {\r
14     FX_LPVOID pData;\r
15 }* FXJSE_HCONTEXT;\r
16 typedef struct FXJSE_HCLASS_ {\r
17     FX_LPVOID pData;\r
18 }* FXJSE_HCLASS;\r
19 typedef struct FXJSE_HVALUE_ {\r
20     FX_LPVOID pData;\r
21 }* FXJSE_HVALUE;\r
22 typedef struct FXJSE_HOBJECT_ : public FXJSE_HVALUE_ {\r
23 }* FXJSE_HOBJECT;\r
24 \r
25 typedef double FXJSE_DOUBLE;\r
26 void FXJSE_Initialize();\r
27 void FXJSE_Finalize();\r
28 FXJSE_HRUNTIME  FXJSE_Runtime_Create();\r
29 void                    FXJSE_Runtime_Release(FXJSE_HRUNTIME hRuntime);\r
30 typedef struct _FXJSE_CLASS FXJSE_CLASS;\r
31 FXJSE_HCONTEXT  FXJSE_Context_Create    (FXJSE_HRUNTIME hRuntime, const FXJSE_CLASS* lpGlobalClass = NULL, FX_LPVOID lpGlobalObject = NULL);\r
32 void                    FXJSE_Context_Release   (FXJSE_HCONTEXT hContext);\r
33 FXJSE_HVALUE    FXJSE_Context_GetGlobalObject(FXJSE_HCONTEXT hContext);\r
34 FXJSE_HRUNTIME  FXJSE_Context_GetRuntime(FXJSE_HCONTEXT hContext);\r
35 enum FXJSE_CompatibleModeFlags {\r
36     FXJSE_COMPATIBLEMODEFLAG_CONSTRUCTOREXTRAMETHODS = (1 << 0),\r
37     FXJSE_COMPATIBLEMODEFLAGCOUNT = 1,\r
38 };\r
39 void                    FXJSE_Context_EnableCompatibleMode(FXJSE_HCONTEXT hContext, FX_DWORD dwCompatibleFlags);\r
40 class CFXJSE_Arguments\r
41 {\r
42 public:\r
43     FXJSE_HRUNTIME      GetRuntime() const;\r
44     FX_INT32            GetLength() const;\r
45     FXJSE_HVALUE        GetValue(FX_INT32 index) const;\r
46     FX_BOOL                     GetBoolean(FX_INT32 index) const;\r
47     FX_INT32            GetInt32(FX_INT32 index) const;\r
48     FX_FLOAT            GetFloat(FX_INT32 index) const;\r
49     CFX_ByteString      GetUTF8String(FX_INT32 index) const;\r
50     FX_LPVOID           GetObject(FX_INT32 index, FXJSE_HCLASS hClass = NULL) const;\r
51     FXJSE_HVALUE        GetReturnValue();\r
52 };\r
53 typedef void    (*FXJSE_FuncCallback)   (FXJSE_HOBJECT hThis,   FX_BSTR szFuncName, CFXJSE_Arguments &args);\r
54 typedef void    (*FXJSE_PropAccessor)   (FXJSE_HOBJECT hObject, FX_BSTR szPropName, FXJSE_HVALUE hValue);\r
55 typedef FX_INT32(*FXJSE_PropTypeGetter) (FXJSE_HOBJECT hObject, FX_BSTR szPropName, FX_BOOL bQueryIn);\r
56 typedef FX_BOOL (*FXJSE_PropDeleter)    (FXJSE_HOBJECT hObject, FX_BSTR szPropName);\r
57 typedef struct _FXJSE_FUNCTION {\r
58     FX_LPCSTR                           name;\r
59     FXJSE_FuncCallback          callbackProc;\r
60 } FXJSE_FUNCTION;\r
61 #define FXJSE_DEF_FUNCTION(functionName, functionCallback) {functionName, functionCallback}\r
62 void    FXJSE_DefineFunctions(FXJSE_HCONTEXT hContext, const FXJSE_FUNCTION* lpFunctions, int nNum);\r
63 typedef struct _FXJSE_PROPERTY {\r
64     FX_LPCSTR                           name;\r
65     FXJSE_PropAccessor          getProc;\r
66     FXJSE_PropAccessor          setProc;\r
67 } FXJSE_PROPERTY;\r
68 enum FXJSE_ClassPropTypes {\r
69     FXJSE_ClassPropType_None,\r
70     FXJSE_ClassPropType_Property,\r
71     FXJSE_ClassPropType_Method\r
72 };\r
73 typedef struct _FXJSE_CLASS {\r
74     FX_LPCSTR                           name;\r
75     FXJSE_FuncCallback          constructor;\r
76     FXJSE_PROPERTY*                     properties;\r
77     FXJSE_FUNCTION*                     methods;\r
78     FX_INT32                            propNum;\r
79     FX_INT32                            methNum;\r
80     FXJSE_PropTypeGetter        dynPropTypeGetter;\r
81     FXJSE_PropAccessor          dynPropGetter;\r
82     FXJSE_PropAccessor          dynPropSetter;\r
83     FXJSE_PropDeleter           dynPropDeleter;\r
84     FXJSE_FuncCallback          dynMethodCall;\r
85 } FXJSE_CLASS;\r
86 FXJSE_HCLASS    FXJSE_DefineClass(FXJSE_HCONTEXT hContext, const FXJSE_CLASS* lpClass);\r
87 FXJSE_HCLASS    FXJSE_GetClass(FXJSE_HCONTEXT hContext, FX_BSTR szName);\r
88 FXJSE_HVALUE    FXJSE_Value_Create(FXJSE_HRUNTIME hRuntime);\r
89 void                    FXJSE_Value_Release(FXJSE_HVALUE hValue);\r
90 FXJSE_HRUNTIME  FXJSE_Value_GetRuntime(FXJSE_HVALUE hValue);\r
91 FX_BOOL                 FXJSE_Value_IsUndefined         (FXJSE_HVALUE hValue);\r
92 FX_BOOL                 FXJSE_Value_IsNull                      (FXJSE_HVALUE hValue);\r
93 FX_BOOL                 FXJSE_Value_IsBoolean           (FXJSE_HVALUE hValue);\r
94 FX_BOOL                 FXJSE_Value_IsUTF8String        (FXJSE_HVALUE hValue);\r
95 FX_BOOL                 FXJSE_Value_IsNumber            (FXJSE_HVALUE hValue);\r
96 FX_BOOL                 FXJSE_Value_IsInteger           (FXJSE_HVALUE hValue);\r
97 FX_BOOL                 FXJSE_Value_IsObject            (FXJSE_HVALUE hValue);\r
98 FX_BOOL                 FXJSE_Value_IsArray                     (FXJSE_HVALUE hValue);\r
99 FX_BOOL                 FXJSE_Value_IsFunction          (FXJSE_HVALUE hValue);\r
100 FX_BOOL                 FXJSE_Value_IsDate                      (FXJSE_HVALUE hValue);\r
101 FX_BOOL                 FXJSE_Value_ToBoolean           (FXJSE_HVALUE hValue);\r
102 FX_FLOAT                FXJSE_Value_ToFloat                     (FXJSE_HVALUE hValue);\r
103 FXJSE_DOUBLE    FXJSE_Value_ToDouble            (FXJSE_HVALUE hValue);\r
104 FX_INT32                FXJSE_Value_ToInteger           (FXJSE_HVALUE hValue);\r
105 void                    FXJSE_Value_ToUTF8String        (FXJSE_HVALUE hValue, CFX_ByteString& szStrOutput);\r
106 FX_LPVOID               FXJSE_Value_ToObject            (FXJSE_HVALUE hValue, FXJSE_HCLASS hClass);\r
107 void                    FXJSE_Value_SetUndefined        (FXJSE_HVALUE hValue);\r
108 void                    FXJSE_Value_SetNull                     (FXJSE_HVALUE hValue);\r
109 void                    FXJSE_Value_SetBoolean          (FXJSE_HVALUE hValue, FX_BOOL      bBoolean);\r
110 void                    FXJSE_Value_SetUTF8String       (FXJSE_HVALUE hValue, FX_BSTR      szString);\r
111 void                    FXJSE_Value_SetInteger          (FXJSE_HVALUE hValue, FX_INT32     nInteger);\r
112 void                    FXJSE_Value_SetFloat            (FXJSE_HVALUE hValue, FX_FLOAT     fFloat);\r
113 void                    FXJSE_Value_SetDouble           (FXJSE_HVALUE hValue, FXJSE_DOUBLE dDouble);\r
114 void                    FXJSE_Value_SetObject           (FXJSE_HVALUE hValue, FX_LPVOID lpObject, FXJSE_HCLASS hClass);\r
115 void                    FXJSE_Value_SetArray            (FXJSE_HVALUE hValue, FX_UINT32 uValueCount, FXJSE_HVALUE* rgValues);\r
116 void                    FXJSE_Value_SetDate                     (FXJSE_HVALUE hValue, FXJSE_DOUBLE dDouble);\r
117 void                    FXJSE_Value_Set                         (FXJSE_HVALUE hValue, FXJSE_HVALUE hOriginalValue);\r
118 FX_BOOL                 FXJSE_Value_GetObjectProp               (FXJSE_HVALUE hValue, FX_BSTR   szPropName,     FXJSE_HVALUE hPropValue);\r
119 FX_BOOL                 FXJSE_Value_SetObjectProp               (FXJSE_HVALUE hValue, FX_BSTR   szPropName,     FXJSE_HVALUE hPropValue);\r
120 FX_BOOL                 FXJSE_Value_GetObjectPropByIdx  (FXJSE_HVALUE hValue, FX_UINT32 uPropIdx,       FXJSE_HVALUE hPropValue);\r
121 FX_BOOL                 FXJSE_Value_SetObjectPropByIdx  (FXJSE_HVALUE hValue, FX_UINT32 uPropIdx,       FXJSE_HVALUE hPropValue);\r
122 FX_BOOL                 FXJSE_Value_DeleteObjectProp    (FXJSE_HVALUE hValue, FX_BSTR   szPropName);\r
123 FX_BOOL                 FXJSE_Value_ObjectHasOwnProp    (FXJSE_HVALUE hValue, FX_BSTR   szPropName, FX_BOOL     bUseTypeGetter);\r
124 FX_BOOL                 FXJSE_Value_SetObjectOwnProp    (FXJSE_HVALUE hValue, FX_BSTR   szPropName, FXJSE_HVALUE hPropValue);\r
125 FX_BOOL                 FXJSE_Value_CallFunction                (FXJSE_HVALUE hFunction, FXJSE_HVALUE hThis, FXJSE_HVALUE hRetValue, FX_UINT32 nArgCount, FXJSE_HVALUE* lpArgs);\r
126 FX_BOOL                 FXJSE_Value_SetFunctionBind     (FXJSE_HVALUE hValue, FXJSE_HVALUE hOldFunction, FXJSE_HVALUE hNewThis);\r
127 FX_BOOL                 FXJSE_ExecuteScript(FXJSE_HCONTEXT hContext, FX_LPCSTR szScript, FXJSE_HVALUE hRetValue, FXJSE_HVALUE hNewThisObject = NULL);\r
128 void                    FXJSE_ThrowMessage(FX_BSTR utf8Name, FX_BSTR utf8Message);\r
129 FX_BOOL                 FXJSE_ReturnValue_GetMessage(FXJSE_HVALUE hRetValue, CFX_ByteString& utf8Name, CFX_ByteString& utf8Message);\r
130 FX_BOOL                 FXJSE_ReturnValue_GetLineInfo(FXJSE_HVALUE hRetValue, FX_INT32& nLine, FX_INT32& nCol);\r
131 #endif\r