summaryrefslogtreecommitdiff
path: root/xfa/include/fxjse/fxjse.h
blob: 368acd18add49972beed32b54ac757f886049dec (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_ {
    void* pData;
}* FXJSE_HRUNTIME;
typedef struct FXJSE_HCONTEXT_ {
    void* pData;
}* FXJSE_HCONTEXT;
typedef struct FXJSE_HCLASS_ {
    void* pData;
}* FXJSE_HCLASS;
typedef struct FXJSE_HVALUE_ {
    void* 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, void* 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;
    void*		GetObject(int32_t index, FXJSE_HCLASS hClass = NULL) const;
    FXJSE_HVALUE	GetReturnValue();
};
typedef void	(*FXJSE_FuncCallback)	(FXJSE_HOBJECT hThis,	const CFX_ByteStringC& szFuncName, CFXJSE_Arguments &args);
typedef void	(*FXJSE_PropAccessor)	(FXJSE_HOBJECT hObject, const CFX_ByteStringC& szPropName, FXJSE_HVALUE hValue);
typedef int32_t(*FXJSE_PropTypeGetter)	(FXJSE_HOBJECT hObject, const CFX_ByteStringC& szPropName, FX_BOOL bQueryIn);
typedef FX_BOOL (*FXJSE_PropDeleter)	(FXJSE_HOBJECT hObject, const CFX_ByteStringC& szPropName);
typedef struct _FXJSE_FUNCTION {
    const FX_CHAR*				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 {
    const FX_CHAR*				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 {
    const FX_CHAR*				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, const CFX_ByteStringC& 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);
void*		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, const CFX_ByteStringC&	   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, void* 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, const CFX_ByteStringC&	szPropName,	FXJSE_HVALUE hPropValue);
FX_BOOL			FXJSE_Value_SetObjectProp		(FXJSE_HVALUE hValue, const CFX_ByteStringC&	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, const CFX_ByteStringC&	szPropName);
FX_BOOL			FXJSE_Value_ObjectHasOwnProp	(FXJSE_HVALUE hValue, const CFX_ByteStringC&	szPropName, FX_BOOL	bUseTypeGetter);
FX_BOOL			FXJSE_Value_SetObjectOwnProp	(FXJSE_HVALUE hValue, const CFX_ByteStringC&	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, const FX_CHAR* szScript, FXJSE_HVALUE hRetValue, FXJSE_HVALUE hNewThisObject = NULL);
void			FXJSE_ThrowMessage(const CFX_ByteStringC& utf8Name, const CFX_ByteStringC& 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