summaryrefslogtreecommitdiff
path: root/xfa/src/fxfa/src/fm2js/xfa_fm2jscontext.h
blob: f0ac12045b54a04fc399672ffa8546439bae5de5 (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
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
// 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 _XFA_FM2JS_CONTEXT_H
#define _XFA_FM2JS_CONTEXT_H
class CXFA_FM2JSContext
{
public:
    static void Abs		(FXJSE_HOBJECT hThis,	const CFX_ByteStringC& szFuncName, CFXJSE_Arguments &args);
    static void Avg		(FXJSE_HOBJECT hThis,	const CFX_ByteStringC& szFuncName, CFXJSE_Arguments &args);
    static void Ceil	(FXJSE_HOBJECT hThis,	const CFX_ByteStringC& szFuncName, CFXJSE_Arguments &args);
    static void Count	(FXJSE_HOBJECT hThis,	const CFX_ByteStringC& szFuncName, CFXJSE_Arguments &args);
    static void Floor	(FXJSE_HOBJECT hThis,	const CFX_ByteStringC& szFuncName, CFXJSE_Arguments &args);
    static void Max		(FXJSE_HOBJECT hThis,	const CFX_ByteStringC& szFuncName, CFXJSE_Arguments &args);
    static void Min		(FXJSE_HOBJECT hThis,	const CFX_ByteStringC& szFuncName, CFXJSE_Arguments &args);
    static void Mod		(FXJSE_HOBJECT hThis,	const CFX_ByteStringC& szFuncName, CFXJSE_Arguments &args);
    static void Round	(FXJSE_HOBJECT hThis,	const CFX_ByteStringC& szFuncName, CFXJSE_Arguments &args);
    static void Sum		(FXJSE_HOBJECT hThis,	const CFX_ByteStringC& szFuncName, CFXJSE_Arguments &args);
    static void Date			(FXJSE_HOBJECT hThis,	const CFX_ByteStringC& szFuncName, CFXJSE_Arguments &args);
    static void Date2Num		(FXJSE_HOBJECT hThis,	const CFX_ByteStringC& szFuncName, CFXJSE_Arguments &args);
    static void DateFmt			(FXJSE_HOBJECT hThis,	const CFX_ByteStringC& szFuncName, CFXJSE_Arguments &args);
    static void IsoDate2Num		(FXJSE_HOBJECT hThis,	const CFX_ByteStringC& szFuncName, CFXJSE_Arguments &args);
    static void IsoTime2Num		(FXJSE_HOBJECT hThis,	const CFX_ByteStringC& szFuncName, CFXJSE_Arguments &args);
    static void LocalDateFmt	(FXJSE_HOBJECT hThis,	const CFX_ByteStringC& szFuncName, CFXJSE_Arguments &args);
    static void LocalTimeFmt	(FXJSE_HOBJECT hThis,	const CFX_ByteStringC& szFuncName, CFXJSE_Arguments &args);
    static void Num2Date		(FXJSE_HOBJECT hThis,	const CFX_ByteStringC& szFuncName, CFXJSE_Arguments &args);
    static void Num2GMTime		(FXJSE_HOBJECT hThis,	const CFX_ByteStringC& szFuncName, CFXJSE_Arguments &args);
    static void Num2Time		(FXJSE_HOBJECT hThis,	const CFX_ByteStringC& szFuncName, CFXJSE_Arguments &args);
    static void Time			(FXJSE_HOBJECT hThis,	const CFX_ByteStringC& szFuncName, CFXJSE_Arguments &args);
    static void Time2Num		(FXJSE_HOBJECT hThis,	const CFX_ByteStringC& szFuncName, CFXJSE_Arguments &args);
    static void TimeFmt			(FXJSE_HOBJECT hThis,	const CFX_ByteStringC& szFuncName, CFXJSE_Arguments &args);

    static FX_BOOL	IsIsoDateFormat			(const FX_CHAR* pData, int32_t iLength, int32_t &iStyle, int32_t &iYear, int32_t &iMonth, int32_t &iDay);
    static FX_BOOL	IsIsoTimeFormat			(const FX_CHAR* pData, int32_t iLength, int32_t &iHour, int32_t &iMinute, int32_t &iSecond, int32_t &iMilliSecond, int32_t &iZoneHour, int32_t &iZoneMinute);
    static FX_BOOL	IsIsoDateTimeFormat		(const FX_CHAR* pData, int32_t iLength, int32_t &iYear, int32_t &iMonth, int32_t &iDay, int32_t &iHour, int32_t &iMinute, int32_t &iSecond, int32_t &iMillionSecond, int32_t &iZoneHour, int32_t &iZoneMinute);
    static FX_BOOL	Local2IsoDate			(FXJSE_HOBJECT hThis, const CFX_ByteStringC& szDate, const CFX_ByteStringC& szFormat, const CFX_ByteStringC& szLocale, CFX_ByteString &strIsoDate);
    static FX_BOOL	Local2IsoTime			(FXJSE_HOBJECT hThis, const CFX_ByteStringC& szTime, const CFX_ByteStringC& szFormat, const CFX_ByteStringC& szLocale, CFX_ByteString &strIsoTime);
    static FX_BOOL	IsoDate2Local			(FXJSE_HOBJECT hThis, const CFX_ByteStringC& szDate, const CFX_ByteStringC& szFormat, const CFX_ByteStringC& szLocale, CFX_ByteString &strLocalDate);
    static FX_BOOL	IsoTime2Local			(FXJSE_HOBJECT hThis, const CFX_ByteStringC& szTime, const CFX_ByteStringC& szFormat, const CFX_ByteStringC& szLocale, CFX_ByteString &strLocalTime);
    static FX_BOOL	GetGMTTime				(FXJSE_HOBJECT hThis, const CFX_ByteStringC& szTime, const CFX_ByteStringC& szFormat, const CFX_ByteStringC& szLocale, CFX_ByteString &strGMTTime);
    static int32_t DateString2Num			(const CFX_ByteStringC& szDateString);
    static void		GetLocalDateFormat		(FXJSE_HOBJECT hThis, int32_t iStyle, const CFX_ByteStringC& szLocalStr, CFX_ByteString &strFormat, FX_BOOL bStandard);
    static void		GetLocalTimeFormat		(FXJSE_HOBJECT hThis, int32_t iStyle, const CFX_ByteStringC& szLocalStr, CFX_ByteString &strFormat, FX_BOOL bStandard);
    static void		GetStandardDateFormat	(FXJSE_HOBJECT hThis, int32_t iStyle, const CFX_ByteStringC& szLocalStr, CFX_ByteString &strFormat);
    static void		GetStandardTimeFormat	(FXJSE_HOBJECT hThis, int32_t iStyle, const CFX_ByteStringC& szLocalStr, CFX_ByteString &strFormat);

    static void		Num2AllTime				(FXJSE_HOBJECT hThis, int32_t iTime, const CFX_ByteStringC& szFormat, const CFX_ByteStringC& szLocale, FX_BOOL bGM, CFX_ByteString &strTime);
    static void		GetLocalTimeZone		(int32_t &iHour, int32_t &iMin, int32_t &iSec);

    static void Apr		(FXJSE_HOBJECT hThis,	const CFX_ByteStringC& szFuncName, CFXJSE_Arguments &args);
    static void CTerm	(FXJSE_HOBJECT hThis,	const CFX_ByteStringC& szFuncName, CFXJSE_Arguments &args);
    static void FV		(FXJSE_HOBJECT hThis,	const CFX_ByteStringC& szFuncName, CFXJSE_Arguments &args);
    static void IPmt	(FXJSE_HOBJECT hThis,	const CFX_ByteStringC& szFuncName, CFXJSE_Arguments &args);
    static void NPV		(FXJSE_HOBJECT hThis,	const CFX_ByteStringC& szFuncName, CFXJSE_Arguments &args);
    static void Pmt		(FXJSE_HOBJECT hThis,	const CFX_ByteStringC& szFuncName, CFXJSE_Arguments &args);
    static void PPmt	(FXJSE_HOBJECT hThis,	const CFX_ByteStringC& szFuncName, CFXJSE_Arguments &args);
    static void PV		(FXJSE_HOBJECT hThis,	const CFX_ByteStringC& szFuncName, CFXJSE_Arguments &args);
    static void Rate	(FXJSE_HOBJECT hThis,	const CFX_ByteStringC& szFuncName, CFXJSE_Arguments &args);
    static void Term	(FXJSE_HOBJECT hThis,	const CFX_ByteStringC& szFuncName, CFXJSE_Arguments &args);
    static void Choose		(FXJSE_HOBJECT hThis,	const CFX_ByteStringC& szFuncName, CFXJSE_Arguments &args);
    static void Exists		(FXJSE_HOBJECT hThis,	const CFX_ByteStringC& szFuncName, CFXJSE_Arguments &args);
    static void HasValue	(FXJSE_HOBJECT hThis,	const CFX_ByteStringC& szFuncName, CFXJSE_Arguments &args);
    static void Oneof		(FXJSE_HOBJECT hThis,	const CFX_ByteStringC& szFuncName, CFXJSE_Arguments &args);
    static void Within		(FXJSE_HOBJECT hThis,	const CFX_ByteStringC& szFuncName, CFXJSE_Arguments &args);
    static void If			(FXJSE_HOBJECT hThis,	const CFX_ByteStringC& szFuncName, CFXJSE_Arguments &args);
    static void Eval		(FXJSE_HOBJECT hThis,	const CFX_ByteStringC& szFuncName, CFXJSE_Arguments &args);
    static void Ref			(FXJSE_HOBJECT hThis,	const CFX_ByteStringC& szFuncName, CFXJSE_Arguments &args);
    static void UnitType	(FXJSE_HOBJECT hThis,	const CFX_ByteStringC& szFuncName, CFXJSE_Arguments &args);
    static void UnitValue	(FXJSE_HOBJECT hThis,	const CFX_ByteStringC& szFuncName, CFXJSE_Arguments &args);

    static void At			(FXJSE_HOBJECT hThis,	const CFX_ByteStringC& szFuncName, CFXJSE_Arguments &args);
    static void Concat		(FXJSE_HOBJECT hThis,	const CFX_ByteStringC& szFuncName, CFXJSE_Arguments &args);
    static void Decode		(FXJSE_HOBJECT hThis,	const CFX_ByteStringC& szFuncName, CFXJSE_Arguments &args);
    static void DecodeURL	(const CFX_ByteStringC& szURLString,  CFX_ByteTextBuf &szResultBuf);
    static void DecodeHTML	(const CFX_ByteStringC& szHTMLString, CFX_ByteTextBuf &szResultBuf);
    static void DecodeXML	(const CFX_ByteStringC& szXMLString,  CFX_ByteTextBuf &szResultBuf);
    static void Encode		(FXJSE_HOBJECT hThis,	const CFX_ByteStringC& szFuncName, CFXJSE_Arguments &args);
    static void EncodeURL	(const CFX_ByteStringC& szURLString,  CFX_ByteTextBuf &szResultBuf);
    static void EncodeHTML	(const CFX_ByteStringC& szHTMLString, CFX_ByteTextBuf &szResultBuf);
    static void EncodeXML	(const CFX_ByteStringC& szXMLString,  CFX_ByteTextBuf &szResultBuf);
    static FX_BOOL HTMLSTR2Code	(const CFX_WideStringC& pData, uint32_t &iCode);
    static FX_BOOL HTMLCode2STR	(uint32_t iCode,	  CFX_WideString &wsHTMLReserve);
    static void Format		(FXJSE_HOBJECT hThis,	const CFX_ByteStringC& szFuncName, CFXJSE_Arguments &args);
    static void Left		(FXJSE_HOBJECT hThis,	const CFX_ByteStringC& szFuncName, CFXJSE_Arguments &args);
    static void Len			(FXJSE_HOBJECT hThis,	const CFX_ByteStringC& szFuncName, CFXJSE_Arguments &args);
    static void Lower		(FXJSE_HOBJECT hThis,	const CFX_ByteStringC& szFuncName, CFXJSE_Arguments &args);
    static void Ltrim		(FXJSE_HOBJECT hThis,	const CFX_ByteStringC& szFuncName, CFXJSE_Arguments &args);
    static void Parse		(FXJSE_HOBJECT hThis,	const CFX_ByteStringC& szFuncName, CFXJSE_Arguments &args);
    static void Replace		(FXJSE_HOBJECT hThis,	const CFX_ByteStringC& szFuncName, CFXJSE_Arguments &args);
    static void Right		(FXJSE_HOBJECT hThis,	const CFX_ByteStringC& szFuncName, CFXJSE_Arguments &args);
    static void Rtrim		(FXJSE_HOBJECT hThis,	const CFX_ByteStringC& szFuncName, CFXJSE_Arguments &args);
    static void Space		(FXJSE_HOBJECT hThis,	const CFX_ByteStringC& szFuncName, CFXJSE_Arguments &args);
    static void Str			(FXJSE_HOBJECT hThis,	const CFX_ByteStringC& szFuncName, CFXJSE_Arguments &args);
    static void Stuff		(FXJSE_HOBJECT hThis,	const CFX_ByteStringC& szFuncName, CFXJSE_Arguments &args);
    static void Substr		(FXJSE_HOBJECT hThis,	const CFX_ByteStringC& szFuncName, CFXJSE_Arguments &args);
    static void Uuid		(FXJSE_HOBJECT hThis,	const CFX_ByteStringC& szFuncName, CFXJSE_Arguments &args);
    static void Upper		(FXJSE_HOBJECT hThis,	const CFX_ByteStringC& szFuncName, CFXJSE_Arguments &args);
    static void WordNum		(FXJSE_HOBJECT hThis,	const CFX_ByteStringC& szFuncName, CFXJSE_Arguments &args);
    static void TrillionUS	(const CFX_ByteStringC& szData, CFX_ByteTextBuf &strBuf);
    static void WordUS		(const CFX_ByteStringC& szData, int32_t iStyle, CFX_ByteTextBuf &strBuf);

    static void Get			(FXJSE_HOBJECT hThis,	const CFX_ByteStringC& szFuncName, CFXJSE_Arguments &args);
    static void Post		(FXJSE_HOBJECT hThis,	const CFX_ByteStringC& szFuncName, CFXJSE_Arguments &args);
    static void Put			(FXJSE_HOBJECT hThis,	const CFX_ByteStringC& szFuncName, CFXJSE_Arguments &args);
    static void assign_value_operator		(FXJSE_HOBJECT hThis,	const CFX_ByteStringC& szFuncName, CFXJSE_Arguments &args);
    static void logical_or_operator			(FXJSE_HOBJECT hThis,	const CFX_ByteStringC& szFuncName, CFXJSE_Arguments &args);
    static void logical_and_operator		(FXJSE_HOBJECT hThis,	const CFX_ByteStringC& szFuncName, CFXJSE_Arguments &args);
    static void equality_operator			(FXJSE_HOBJECT hThis,	const CFX_ByteStringC& szFuncName, CFXJSE_Arguments &args);
    static void notequality_operator		(FXJSE_HOBJECT hThis,	const CFX_ByteStringC& szFuncName, CFXJSE_Arguments &args);
    static FX_BOOL fm_ref_equal				(FXJSE_HOBJECT hThis, CFXJSE_Arguments &args);
    static void less_operator				(FXJSE_HOBJECT hThis,	const CFX_ByteStringC& szFuncName, CFXJSE_Arguments &args);
    static void lessequal_operator			(FXJSE_HOBJECT hThis,	const CFX_ByteStringC& szFuncName, CFXJSE_Arguments &args);
    static void greater_operator			(FXJSE_HOBJECT hThis,	const CFX_ByteStringC& szFuncName, CFXJSE_Arguments &args);
    static void greaterequal_operator		(FXJSE_HOBJECT hThis,	const CFX_ByteStringC& szFuncName, CFXJSE_Arguments &args);
    static void plus_operator				(FXJSE_HOBJECT hThis,	const CFX_ByteStringC& szFuncName, CFXJSE_Arguments &args);
    static void minus_operator				(FXJSE_HOBJECT hThis,	const CFX_ByteStringC& szFuncName, CFXJSE_Arguments &args);
    static void multiple_operator			(FXJSE_HOBJECT hThis,	const CFX_ByteStringC& szFuncName, CFXJSE_Arguments &args);
    static void divide_operator				(FXJSE_HOBJECT hThis,	const CFX_ByteStringC& szFuncName, CFXJSE_Arguments &args);
    static void positive_operator			(FXJSE_HOBJECT hThis,	const CFX_ByteStringC& szFuncName, CFXJSE_Arguments &args);
    static void negative_operator			(FXJSE_HOBJECT hThis,	const CFX_ByteStringC& szFuncName, CFXJSE_Arguments &args);
    static void logical_not_operator		(FXJSE_HOBJECT hThis,	const CFX_ByteStringC& szFuncName, CFXJSE_Arguments &args);
    static void dot_accessor				(FXJSE_HOBJECT hThis,	const CFX_ByteStringC& szFuncName, CFXJSE_Arguments &args);
    static void dotdot_accessor				(FXJSE_HOBJECT hThis,	const CFX_ByteStringC& szFuncName, CFXJSE_Arguments &args);
    static void eval_translation			(FXJSE_HOBJECT hThis,	const CFX_ByteStringC& szFuncName, CFXJSE_Arguments &args);
    static void		is_fm_object	(FXJSE_HOBJECT hThis,	const CFX_ByteStringC& szFuncName, CFXJSE_Arguments &args);
    static void		is_fm_array		(FXJSE_HOBJECT hThis,	const CFX_ByteStringC& szFuncName, CFXJSE_Arguments &args);
    static void		get_fm_value	(FXJSE_HOBJECT hThis,	const CFX_ByteStringC& szFuncName, CFXJSE_Arguments &args);
    static void		get_fm_jsobj	(FXJSE_HOBJECT hThis,	const CFX_ByteStringC& szFuncName, CFXJSE_Arguments &args);
    static void		fm_var_filter	(FXJSE_HOBJECT hThis,	const CFX_ByteStringC& szFuncName, CFXJSE_Arguments &args);
    static void		concat_fm_object(FXJSE_HOBJECT hThis,	const CFX_ByteStringC& szFuncName, CFXJSE_Arguments &args);

    static int32_t hvalue_get_array_length	(FXJSE_HOBJECT hThis, FXJSE_HVALUE arg);
    static FX_BOOL		simpleValueCompare	(FXJSE_HOBJECT hThis, FXJSE_HVALUE firstValue, FXJSE_HVALUE secondValue);
    static void			unfoldArgs			(FXJSE_HOBJECT hThis, CFXJSE_Arguments &args, FXJSE_HVALUE *&resultValues, int32_t &iCount, int32_t iStart = 0);
    static void			GetObjectDefaultValue(FXJSE_HVALUE hObjectValue, FXJSE_HVALUE hDefaultValue);
    static FX_BOOL		SetObjectDefaultValue(FXJSE_HVALUE hObjectValue, FXJSE_HVALUE hNewValue);
    static void			GenerateSomExpression(const CFX_ByteStringC& szName, int32_t iIndexFlags, int32_t iIndexValue, FX_BOOL bIsStar, CFX_ByteString& szSomExp);
    static FX_BOOL		GetObjectByName(FXJSE_HOBJECT hThis, FXJSE_HVALUE accessorValue, const CFX_ByteStringC& szAccessorName);
    static int32_t		ResolveObjects(FXJSE_HOBJECT hThis, FXJSE_HVALUE hParentValue, const CFX_ByteStringC& bsSomExp, XFA_RESOLVENODE_RS &resoveNodeRS, FX_BOOL bdotAccessor = TRUE, FX_BOOL bHasNoResolveName = FALSE);
    static void			ParseResolveResult(FXJSE_HOBJECT hThis, const XFA_RESOLVENODE_RS& resoveNodeRS, FXJSE_HVALUE hParentValue, FXJSE_HVALUE *&resultValues, int32_t &iSize, FX_BOOL &bAttribute);

    static FXJSE_HVALUE GetSimpleHValue	(FXJSE_HOBJECT hThis, CFXJSE_Arguments &args, uint32_t index);
    static FX_BOOL		HValueIsNull	(FXJSE_HOBJECT hThis, FXJSE_HVALUE hValue);
    static int32_t		HValueToInteger	(FXJSE_HOBJECT hThis, FXJSE_HVALUE hValue);
    static FX_DOUBLE	StringToDouble(const CFX_ByteStringC& szStringVal);
    static FX_FLOAT		HValueToFloat	(FXJSE_HOBJECT hThis, FXJSE_HVALUE hValue);
    static FX_DOUBLE	HValueToDouble	(FXJSE_HOBJECT hThis, FXJSE_HVALUE hValue);
    static void			HValueToUTF8String	(FXJSE_HVALUE hValue, CFX_ByteString& outputValue);
    CXFA_FM2JSContext();
    ~CXFA_FM2JSContext();
    static CXFA_FM2JSContext* Create();
    void Initialize(FXJSE_HRUNTIME hScriptRuntime, FXJSE_HCONTEXT hScriptContext, CXFA_Document* pDoc);
    void GlobalPropertyGetter(FXJSE_HVALUE hValue);
    void Release();
    FXJSE_HRUNTIME GetScriptRuntime() const
    {
        return m_hScriptRuntime;
    }
    CXFA_Document* GetDocument() const
    {
        return m_pDocument;
    }
    void ThrowScriptErrorMessage(int32_t iStringID, ...);
private:
    FXJSE_HRUNTIME			m_hScriptRuntime;
    FXJSE_CLASS				m_fmClass;
    FXJSE_HCLASS			m_hFMClass;
    FXJSE_HVALUE			m_hValue;
    CXFA_Document*			m_pDocument;
};
#endif