summaryrefslogtreecommitdiff
path: root/xfa/include/fxjse/fxjse.h
blob: 0bd44347a4409d2a3ee28d2153f5cbabfa77a631 (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
// 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_
#ifdef __cplusplus
#define FXJSE_DEFINEINHERITHANDLE(name, subtypename) typedef struct _##subtypename : public _##name {} * subtypename;
#else
#define FXJSE_DEFINEINHERITHANDLE(name, subtypename) typedef name subtypename;
#endif
FX_DEFINEHANDLE(FXJSE_HRUNTIME);
FX_DEFINEHANDLE(FXJSE_HCONTEXT);
FX_DEFINEHANDLE(FXJSE_HCLASS);
FX_DEFINEHANDLE(FXJSE_HVALUE);
FXJSE_DEFINEINHERITHANDLE(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;
    FX_INT32		GetLength() const;
    FXJSE_HVALUE	GetValue(FX_INT32 index) const;
    FX_BOOL			GetBoolean(FX_INT32 index) const;
    FX_INT32		GetInt32(FX_INT32 index) const;
    FX_FLOAT		GetFloat(FX_INT32 index) const;
    CFX_ByteString	GetUTF8String(FX_INT32 index) const;
    FX_LPVOID		GetObject(FX_INT32 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 FX_INT32(*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;
    FX_INT32				propNum;
    FX_INT32				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);
FX_INT32		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, FX_INT32     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, FX_UINT32 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, FX_UINT32	uPropIdx,	FXJSE_HVALUE hPropValue);
FX_BOOL			FXJSE_Value_SetObjectPropByIdx	(FXJSE_HVALUE hValue, FX_UINT32	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, FX_UINT32 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, FX_INT32& nLine, FX_INT32& nCol);
#endif