summaryrefslogtreecommitdiff
path: root/xfa/include/fxjse/fxjse.h
blob: c0ec9c91d6ea9d0473430a85fc41efb623900cc1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
// Copyright 2014 PDFium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com

#ifndef _FXJSE_H_
#define _FXJSE_H_

typedef struct FXJSE_HRUNTIME_ {
    FX_LPVOID pData;
}* FXJSE_HRUNTIME;
typedef struct FXJSE_HCONTEXT_ {
    FX_LPVOID pData;
}* FXJSE_HCONTEXT;
typedef struct FXJSE_HCLASS_ {
    FX_LPVOID pData;
}* FXJSE_HCLASS;
typedef struct FXJSE_HVALUE_ {
    FX_LPVOID pData;
}* FXJSE_HVALUE;
typedef struct FXJSE_HOBJECT_ : public FXJSE_HVALUE_ {
}* FXJSE_HOBJECT;

typedef double FXJSE_DOUBLE;
void FXJSE_Initialize();
void FXJSE_Finalize();
FXJSE_HRUNTIME	FXJSE_Runtime_Create();
void			FXJSE_Runtime_Release(FXJSE_HRUNTIME hRuntime);
typedef struct _FXJSE_CLASS FXJSE_CLASS;
FXJSE_HCONTEXT	FXJSE_Context_Create	(FXJSE_HRUNTIME hRuntime, const FXJSE_CLASS* lpGlobalClass = NULL, FX_LPVOID lpGlobalObject = NULL);
void			FXJSE_Context_Release	(FXJSE_HCONTEXT hContext);
FXJSE_HVALUE	FXJSE_Context_GetGlobalObject(FXJSE_HCONTEXT hContext);
FXJSE_HRUNTIME  FXJSE_Context_GetRuntime(FXJSE_HCONTEXT hContext);
enum FXJSE_CompatibleModeFlags {
    FXJSE_COMPATIBLEMODEFLAG_CONSTRUCTOREXTRAMETHODS = (1 << 0),
    FXJSE_COMPATIBLEMODEFLAGCOUNT = 1,
};
void			FXJSE_Context_EnableCompatibleMode(FXJSE_HCONTEXT hContext, FX_DWORD dwCompatibleFlags);
class CFXJSE_Arguments
{
public:
    FXJSE_HRUNTIME	GetRuntime() const;
    int32_t		GetLength() const;
    FXJSE_HVALUE	GetValue(int32_t index) const;
    FX_BOOL			GetBoolean(int32_t index) const;
    int32_t		GetInt32(int32_t index) const;
    FX_FLOAT		GetFloat(int32_t index) const;
    CFX_ByteString	GetUTF8String(int32_t index) const;
    FX_LPVOID		GetObject(int32_t index, FXJSE_HCLASS hClass = NULL) const;
    FXJSE_HVALUE	GetReturnValue();
};
typedef void	(*FXJSE_FuncCallback)	(FXJSE_HOBJECT hThis,	FX_BSTR szFuncName, CFXJSE_Arguments &args);
typedef void	(*FXJSE_PropAccessor)	(FXJSE_HOBJECT hObject, FX_BSTR szPropName, FXJSE_HVALUE hValue);
typedef int32_t(*FXJSE_PropTypeGetter)	(FXJSE_HOBJECT hObject, FX_BSTR szPropName, FX_BOOL bQueryIn);
typedef FX_BOOL (*FXJSE_PropDeleter)	(FXJSE_HOBJECT hObject, FX_BSTR szPropName);
typedef struct _FXJSE_FUNCTION {
    FX_LPCSTR				name;
    FXJSE_FuncCallback		callbackProc;
} FXJSE_FUNCTION;
#define FXJSE_DEF_FUNCTION(functionName, functionCallback) {functionName, functionCallback}
void	FXJSE_DefineFunctions(FXJSE_HCONTEXT hContext, const FXJSE_FUNCTION* lpFunctions, int nNum);
typedef struct _FXJSE_PROPERTY {
    FX_LPCSTR				name;
    FXJSE_PropAccessor		getProc;
    FXJSE_PropAccessor		setProc;
} FXJSE_PROPERTY;
enum FXJSE_ClassPropTypes {
    FXJSE_ClassPropType_None,
    FXJSE_ClassPropType_Property,
    FXJSE_ClassPropType_Method
};
typedef struct _FXJSE_CLASS {
    FX_LPCSTR				name;
    FXJSE_FuncCallback		constructor;
    FXJSE_PROPERTY*			properties;
    FXJSE_FUNCTION*			methods;
    int32_t				propNum;
    int32_t				methNum;
    FXJSE_PropTypeGetter	dynPropTypeGetter;
    FXJSE_PropAccessor		dynPropGetter;
    FXJSE_PropAccessor		dynPropSetter;
    FXJSE_PropDeleter		dynPropDeleter;
    FXJSE_FuncCallback		dynMethodCall;
} FXJSE_CLASS;
FXJSE_HCLASS	FXJSE_DefineClass(FXJSE_HCONTEXT hContext, const FXJSE_CLASS* lpClass);
FXJSE_HCLASS	FXJSE_GetClass(FXJSE_HCONTEXT hContext, FX_BSTR szName);
FXJSE_HVALUE	FXJSE_Value_Create(FXJSE_HRUNTIME hRuntime);
void			FXJSE_Value_Release(FXJSE_HVALUE hValue);
FXJSE_HRUNTIME	FXJSE_Value_GetRuntime(FXJSE_HVALUE hValue);
FX_BOOL			FXJSE_Value_IsUndefined		(FXJSE_HVALUE hValue);
FX_BOOL			FXJSE_Value_IsNull			(FXJSE_HVALUE hValue);
FX_BOOL			FXJSE_Value_IsBoolean		(FXJSE_HVALUE hValue);
FX_BOOL			FXJSE_Value_IsUTF8String	(FXJSE_HVALUE hValue);
FX_BOOL			FXJSE_Value_IsNumber		(FXJSE_HVALUE hValue);
FX_BOOL			FXJSE_Value_IsInteger		(FXJSE_HVALUE hValue);
FX_BOOL			FXJSE_Value_IsObject		(FXJSE_HVALUE hValue);
FX_BOOL			FXJSE_Value_IsArray			(FXJSE_HVALUE hValue);
FX_BOOL			FXJSE_Value_IsFunction		(FXJSE_HVALUE hValue);
FX_BOOL			FXJSE_Value_IsDate			(FXJSE_HVALUE hValue);
FX_BOOL			FXJSE_Value_ToBoolean		(FXJSE_HVALUE hValue);
FX_FLOAT		FXJSE_Value_ToFloat			(FXJSE_HVALUE hValue);
FXJSE_DOUBLE	FXJSE_Value_ToDouble		(FXJSE_HVALUE hValue);
int32_t		FXJSE_Value_ToInteger		(FXJSE_HVALUE hValue);
void			FXJSE_Value_ToUTF8String	(FXJSE_HVALUE hValue, CFX_ByteString& szStrOutput);
FX_LPVOID		FXJSE_Value_ToObject		(FXJSE_HVALUE hValue, FXJSE_HCLASS hClass);
void			FXJSE_Value_SetUndefined	(FXJSE_HVALUE hValue);
void			FXJSE_Value_SetNull			(FXJSE_HVALUE hValue);
void			FXJSE_Value_SetBoolean		(FXJSE_HVALUE hValue, FX_BOOL	   bBoolean);
void			FXJSE_Value_SetUTF8String	(FXJSE_HVALUE hValue, FX_BSTR	   szString);
void			FXJSE_Value_SetInteger		(FXJSE_HVALUE hValue, int32_t     nInteger);
void			FXJSE_Value_SetFloat		(FXJSE_HVALUE hValue, FX_FLOAT     fFloat);
void			FXJSE_Value_SetDouble		(FXJSE_HVALUE hValue, FXJSE_DOUBLE dDouble);
void			FXJSE_Value_SetObject		(FXJSE_HVALUE hValue, FX_LPVOID lpObject, FXJSE_HCLASS hClass);
void			FXJSE_Value_SetArray		(FXJSE_HVALUE hValue, uint32_t uValueCount, FXJSE_HVALUE* rgValues);
void			FXJSE_Value_SetDate			(FXJSE_HVALUE hValue, FXJSE_DOUBLE dDouble);
void			FXJSE_Value_Set				(FXJSE_HVALUE hValue, FXJSE_HVALUE hOriginalValue);
FX_BOOL			FXJSE_Value_GetObjectProp		(FXJSE_HVALUE hValue, FX_BSTR	szPropName,	FXJSE_HVALUE hPropValue);
FX_BOOL			FXJSE_Value_SetObjectProp		(FXJSE_HVALUE hValue, FX_BSTR	szPropName,	FXJSE_HVALUE hPropValue);
FX_BOOL			FXJSE_Value_GetObjectPropByIdx	(FXJSE_HVALUE hValue, uint32_t	uPropIdx,	FXJSE_HVALUE hPropValue);
FX_BOOL			FXJSE_Value_SetObjectPropByIdx	(FXJSE_HVALUE hValue, uint32_t	uPropIdx,	FXJSE_HVALUE hPropValue);
FX_BOOL			FXJSE_Value_DeleteObjectProp	(FXJSE_HVALUE hValue, FX_BSTR	szPropName);
FX_BOOL			FXJSE_Value_ObjectHasOwnProp	(FXJSE_HVALUE hValue, FX_BSTR	szPropName, FX_BOOL	bUseTypeGetter);
FX_BOOL			FXJSE_Value_SetObjectOwnProp	(FXJSE_HVALUE hValue, FX_BSTR	szPropName, FXJSE_HVALUE hPropValue);
FX_BOOL			FXJSE_Value_CallFunction		(FXJSE_HVALUE hFunction, FXJSE_HVALUE hThis, FXJSE_HVALUE hRetValue, uint32_t nArgCount, FXJSE_HVALUE* lpArgs);
FX_BOOL			FXJSE_Value_SetFunctionBind	(FXJSE_HVALUE hValue, FXJSE_HVALUE hOldFunction, FXJSE_HVALUE hNewThis);
FX_BOOL			FXJSE_ExecuteScript(FXJSE_HCONTEXT hContext, FX_LPCSTR szScript, FXJSE_HVALUE hRetValue, FXJSE_HVALUE hNewThisObject = NULL);
void			FXJSE_ThrowMessage(FX_BSTR utf8Name, FX_BSTR utf8Message);
FX_BOOL			FXJSE_ReturnValue_GetMessage(FXJSE_HVALUE hRetValue, CFX_ByteString& utf8Name, CFX_ByteString& utf8Message);
FX_BOOL			FXJSE_ReturnValue_GetLineInfo(FXJSE_HVALUE hRetValue, int32_t& nLine, int32_t& nCol);
#endif