Merge XFA to PDFium master at 4dc95e7 on 10/28/2014
[pdfium.git] / xfa / src / fxfa / src / fm2js / xfa_fm2jscontext.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 _XFA_FM2JS_CONTEXT_H\r
8 #define _XFA_FM2JS_CONTEXT_H\r
9 class CXFA_FM2JSContext : public CFX_Object\r
10 {\r
11 public:\r
12     static void Abs             (FXJSE_HOBJECT hThis,   FX_BSTR szFuncName, CFXJSE_Arguments &args);\r
13     static void Avg             (FXJSE_HOBJECT hThis,   FX_BSTR szFuncName, CFXJSE_Arguments &args);\r
14     static void Ceil    (FXJSE_HOBJECT hThis,   FX_BSTR szFuncName, CFXJSE_Arguments &args);\r
15     static void Count   (FXJSE_HOBJECT hThis,   FX_BSTR szFuncName, CFXJSE_Arguments &args);\r
16     static void Floor   (FXJSE_HOBJECT hThis,   FX_BSTR szFuncName, CFXJSE_Arguments &args);\r
17     static void Max             (FXJSE_HOBJECT hThis,   FX_BSTR szFuncName, CFXJSE_Arguments &args);\r
18     static void Min             (FXJSE_HOBJECT hThis,   FX_BSTR szFuncName, CFXJSE_Arguments &args);\r
19     static void Mod             (FXJSE_HOBJECT hThis,   FX_BSTR szFuncName, CFXJSE_Arguments &args);\r
20     static void Round   (FXJSE_HOBJECT hThis,   FX_BSTR szFuncName, CFXJSE_Arguments &args);\r
21     static void Sum             (FXJSE_HOBJECT hThis,   FX_BSTR szFuncName, CFXJSE_Arguments &args);\r
22     static void Date                    (FXJSE_HOBJECT hThis,   FX_BSTR szFuncName, CFXJSE_Arguments &args);\r
23     static void Date2Num                (FXJSE_HOBJECT hThis,   FX_BSTR szFuncName, CFXJSE_Arguments &args);\r
24     static void DateFmt                 (FXJSE_HOBJECT hThis,   FX_BSTR szFuncName, CFXJSE_Arguments &args);\r
25     static void IsoDate2Num             (FXJSE_HOBJECT hThis,   FX_BSTR szFuncName, CFXJSE_Arguments &args);\r
26     static void IsoTime2Num             (FXJSE_HOBJECT hThis,   FX_BSTR szFuncName, CFXJSE_Arguments &args);\r
27     static void LocalDateFmt    (FXJSE_HOBJECT hThis,   FX_BSTR szFuncName, CFXJSE_Arguments &args);\r
28     static void LocalTimeFmt    (FXJSE_HOBJECT hThis,   FX_BSTR szFuncName, CFXJSE_Arguments &args);\r
29     static void Num2Date                (FXJSE_HOBJECT hThis,   FX_BSTR szFuncName, CFXJSE_Arguments &args);\r
30     static void Num2GMTime              (FXJSE_HOBJECT hThis,   FX_BSTR szFuncName, CFXJSE_Arguments &args);\r
31     static void Num2Time                (FXJSE_HOBJECT hThis,   FX_BSTR szFuncName, CFXJSE_Arguments &args);\r
32     static void Time                    (FXJSE_HOBJECT hThis,   FX_BSTR szFuncName, CFXJSE_Arguments &args);\r
33     static void Time2Num                (FXJSE_HOBJECT hThis,   FX_BSTR szFuncName, CFXJSE_Arguments &args);\r
34     static void TimeFmt                 (FXJSE_HOBJECT hThis,   FX_BSTR szFuncName, CFXJSE_Arguments &args);\r
35 \r
36     static FX_BOOL      IsIsoDateFormat                 (FX_LPCSTR pData, FX_INT32 iLength, FX_INT32 &iStyle, FX_INT32 &iYear, FX_INT32 &iMonth, FX_INT32 &iDay);\r
37     static FX_BOOL      IsIsoTimeFormat                 (FX_LPCSTR pData, FX_INT32 iLength, FX_INT32 &iHour, FX_INT32 &iMinute, FX_INT32 &iSecond, FX_INT32 &iMilliSecond, FX_INT32 &iZoneHour, FX_INT32 &iZoneMinute);\r
38     static FX_BOOL      IsIsoDateTimeFormat             (FX_LPCSTR pData, FX_INT32 iLength, FX_INT32 &iYear, FX_INT32 &iMonth, FX_INT32 &iDay, FX_INT32 &iHour, FX_INT32 &iMinute, FX_INT32 &iSecond, FX_INT32 &iMillionSecond, FX_INT32 &iZoneHour, FX_INT32 &iZoneMinute);\r
39     static FX_BOOL      Local2IsoDate                   (FXJSE_HOBJECT hThis, FX_BSTR szDate, FX_BSTR szFormat, FX_BSTR szLocale, CFX_ByteString &strIsoDate);\r
40     static FX_BOOL      Local2IsoTime                   (FXJSE_HOBJECT hThis, FX_BSTR szTime, FX_BSTR szFormat, FX_BSTR szLocale, CFX_ByteString &strIsoTime);\r
41     static FX_BOOL      IsoDate2Local                   (FXJSE_HOBJECT hThis, FX_BSTR szDate, FX_BSTR szFormat, FX_BSTR szLocale, CFX_ByteString &strLocalDate);\r
42     static FX_BOOL      IsoTime2Local                   (FXJSE_HOBJECT hThis, FX_BSTR szTime, FX_BSTR szFormat, FX_BSTR szLocale, CFX_ByteString &strLocalTime);\r
43     static FX_BOOL      GetGMTTime                              (FXJSE_HOBJECT hThis, FX_BSTR szTime, FX_BSTR szFormat, FX_BSTR szLocale, CFX_ByteString &strGMTTime);\r
44     static FX_INT32 DateString2Num                      (FX_BSTR szDateString);\r
45     static void         GetLocalDateFormat              (FXJSE_HOBJECT hThis, FX_INT32 iStyle, FX_BSTR szLocalStr, CFX_ByteString &strFormat, FX_BOOL bStandard);\r
46     static void         GetLocalTimeFormat              (FXJSE_HOBJECT hThis, FX_INT32 iStyle, FX_BSTR szLocalStr, CFX_ByteString &strFormat, FX_BOOL bStandard);\r
47     static void         GetStandardDateFormat   (FXJSE_HOBJECT hThis, FX_INT32 iStyle, FX_BSTR szLocalStr, CFX_ByteString &strFormat);\r
48     static void         GetStandardTimeFormat   (FXJSE_HOBJECT hThis, FX_INT32 iStyle, FX_BSTR szLocalStr, CFX_ByteString &strFormat);\r
49 \r
50     static void         Num2AllTime                             (FXJSE_HOBJECT hThis, FX_INT32 iTime, FX_BSTR szFormat, FX_BSTR szLocale, FX_BOOL bGM, CFX_ByteString &strTime);\r
51     static void         GetLocalTimeZone                (FX_INT32 &iHour, FX_INT32 &iMin, FX_INT32 &iSec);\r
52 \r
53     static void Apr             (FXJSE_HOBJECT hThis,   FX_BSTR szFuncName, CFXJSE_Arguments &args);\r
54     static void CTerm   (FXJSE_HOBJECT hThis,   FX_BSTR szFuncName, CFXJSE_Arguments &args);\r
55     static void FV              (FXJSE_HOBJECT hThis,   FX_BSTR szFuncName, CFXJSE_Arguments &args);\r
56     static void IPmt    (FXJSE_HOBJECT hThis,   FX_BSTR szFuncName, CFXJSE_Arguments &args);\r
57     static void NPV             (FXJSE_HOBJECT hThis,   FX_BSTR szFuncName, CFXJSE_Arguments &args);\r
58     static void Pmt             (FXJSE_HOBJECT hThis,   FX_BSTR szFuncName, CFXJSE_Arguments &args);\r
59     static void PPmt    (FXJSE_HOBJECT hThis,   FX_BSTR szFuncName, CFXJSE_Arguments &args);\r
60     static void PV              (FXJSE_HOBJECT hThis,   FX_BSTR szFuncName, CFXJSE_Arguments &args);\r
61     static void Rate    (FXJSE_HOBJECT hThis,   FX_BSTR szFuncName, CFXJSE_Arguments &args);\r
62     static void Term    (FXJSE_HOBJECT hThis,   FX_BSTR szFuncName, CFXJSE_Arguments &args);\r
63     static void Choose          (FXJSE_HOBJECT hThis,   FX_BSTR szFuncName, CFXJSE_Arguments &args);\r
64     static void Exists          (FXJSE_HOBJECT hThis,   FX_BSTR szFuncName, CFXJSE_Arguments &args);\r
65     static void HasValue        (FXJSE_HOBJECT hThis,   FX_BSTR szFuncName, CFXJSE_Arguments &args);\r
66     static void Oneof           (FXJSE_HOBJECT hThis,   FX_BSTR szFuncName, CFXJSE_Arguments &args);\r
67     static void Within          (FXJSE_HOBJECT hThis,   FX_BSTR szFuncName, CFXJSE_Arguments &args);\r
68     static void If                      (FXJSE_HOBJECT hThis,   FX_BSTR szFuncName, CFXJSE_Arguments &args);\r
69     static void Eval            (FXJSE_HOBJECT hThis,   FX_BSTR szFuncName, CFXJSE_Arguments &args);\r
70     static void Ref                     (FXJSE_HOBJECT hThis,   FX_BSTR szFuncName, CFXJSE_Arguments &args);\r
71     static void UnitType        (FXJSE_HOBJECT hThis,   FX_BSTR szFuncName, CFXJSE_Arguments &args);\r
72     static void UnitValue       (FXJSE_HOBJECT hThis,   FX_BSTR szFuncName, CFXJSE_Arguments &args);\r
73 \r
74     static void At                      (FXJSE_HOBJECT hThis,   FX_BSTR szFuncName, CFXJSE_Arguments &args);\r
75     static void Concat          (FXJSE_HOBJECT hThis,   FX_BSTR szFuncName, CFXJSE_Arguments &args);\r
76     static void Decode          (FXJSE_HOBJECT hThis,   FX_BSTR szFuncName, CFXJSE_Arguments &args);\r
77     static void DecodeURL       (FX_BSTR szURLString,  CFX_ByteTextBuf &szResultBuf);\r
78     static void DecodeHTML      (FX_BSTR szHTMLString, CFX_ByteTextBuf &szResultBuf);\r
79     static void DecodeXML       (FX_BSTR szXMLString,  CFX_ByteTextBuf &szResultBuf);\r
80     static void Encode          (FXJSE_HOBJECT hThis,   FX_BSTR szFuncName, CFXJSE_Arguments &args);\r
81     static void EncodeURL       (FX_BSTR szURLString,  CFX_ByteTextBuf &szResultBuf);\r
82     static void EncodeHTML      (FX_BSTR szHTMLString, CFX_ByteTextBuf &szResultBuf);\r
83     static void EncodeXML       (FX_BSTR szXMLString,  CFX_ByteTextBuf &szResultBuf);\r
84     static FX_BOOL HTMLSTR2Code (FX_WSTR pData, FX_UINT32 &iCode);\r
85     static FX_BOOL HTMLCode2STR (FX_UINT32 iCode,         CFX_WideString &wsHTMLReserve);\r
86     static void Format          (FXJSE_HOBJECT hThis,   FX_BSTR szFuncName, CFXJSE_Arguments &args);\r
87     static void Left            (FXJSE_HOBJECT hThis,   FX_BSTR szFuncName, CFXJSE_Arguments &args);\r
88     static void Len                     (FXJSE_HOBJECT hThis,   FX_BSTR szFuncName, CFXJSE_Arguments &args);\r
89     static void Lower           (FXJSE_HOBJECT hThis,   FX_BSTR szFuncName, CFXJSE_Arguments &args);\r
90     static void Ltrim           (FXJSE_HOBJECT hThis,   FX_BSTR szFuncName, CFXJSE_Arguments &args);\r
91     static void Parse           (FXJSE_HOBJECT hThis,   FX_BSTR szFuncName, CFXJSE_Arguments &args);\r
92     static void Replace         (FXJSE_HOBJECT hThis,   FX_BSTR szFuncName, CFXJSE_Arguments &args);\r
93     static void Right           (FXJSE_HOBJECT hThis,   FX_BSTR szFuncName, CFXJSE_Arguments &args);\r
94     static void Rtrim           (FXJSE_HOBJECT hThis,   FX_BSTR szFuncName, CFXJSE_Arguments &args);\r
95     static void Space           (FXJSE_HOBJECT hThis,   FX_BSTR szFuncName, CFXJSE_Arguments &args);\r
96     static void Str                     (FXJSE_HOBJECT hThis,   FX_BSTR szFuncName, CFXJSE_Arguments &args);\r
97     static void Stuff           (FXJSE_HOBJECT hThis,   FX_BSTR szFuncName, CFXJSE_Arguments &args);\r
98     static void Substr          (FXJSE_HOBJECT hThis,   FX_BSTR szFuncName, CFXJSE_Arguments &args);\r
99     static void Uuid            (FXJSE_HOBJECT hThis,   FX_BSTR szFuncName, CFXJSE_Arguments &args);\r
100     static void Upper           (FXJSE_HOBJECT hThis,   FX_BSTR szFuncName, CFXJSE_Arguments &args);\r
101     static void WordNum         (FXJSE_HOBJECT hThis,   FX_BSTR szFuncName, CFXJSE_Arguments &args);\r
102     static void TrillionUS      (FX_BSTR szData, CFX_ByteTextBuf &strBuf);\r
103     static void WordUS          (FX_BSTR szData, FX_INT32 iStyle, CFX_ByteTextBuf &strBuf);\r
104 \r
105     static void Get                     (FXJSE_HOBJECT hThis,   FX_BSTR szFuncName, CFXJSE_Arguments &args);\r
106     static void Post            (FXJSE_HOBJECT hThis,   FX_BSTR szFuncName, CFXJSE_Arguments &args);\r
107     static void Put                     (FXJSE_HOBJECT hThis,   FX_BSTR szFuncName, CFXJSE_Arguments &args);\r
108     static void assign_value_operator           (FXJSE_HOBJECT hThis,   FX_BSTR szFuncName, CFXJSE_Arguments &args);\r
109     static void logical_or_operator                     (FXJSE_HOBJECT hThis,   FX_BSTR szFuncName, CFXJSE_Arguments &args);\r
110     static void logical_and_operator            (FXJSE_HOBJECT hThis,   FX_BSTR szFuncName, CFXJSE_Arguments &args);\r
111     static void equality_operator                       (FXJSE_HOBJECT hThis,   FX_BSTR szFuncName, CFXJSE_Arguments &args);\r
112     static void notequality_operator            (FXJSE_HOBJECT hThis,   FX_BSTR szFuncName, CFXJSE_Arguments &args);\r
113     static FX_BOOL fm_ref_equal                         (FXJSE_HOBJECT hThis, CFXJSE_Arguments &args);\r
114     static void less_operator                           (FXJSE_HOBJECT hThis,   FX_BSTR szFuncName, CFXJSE_Arguments &args);\r
115     static void lessequal_operator                      (FXJSE_HOBJECT hThis,   FX_BSTR szFuncName, CFXJSE_Arguments &args);\r
116     static void greater_operator                        (FXJSE_HOBJECT hThis,   FX_BSTR szFuncName, CFXJSE_Arguments &args);\r
117     static void greaterequal_operator           (FXJSE_HOBJECT hThis,   FX_BSTR szFuncName, CFXJSE_Arguments &args);\r
118     static void plus_operator                           (FXJSE_HOBJECT hThis,   FX_BSTR szFuncName, CFXJSE_Arguments &args);\r
119     static void minus_operator                          (FXJSE_HOBJECT hThis,   FX_BSTR szFuncName, CFXJSE_Arguments &args);\r
120     static void multiple_operator                       (FXJSE_HOBJECT hThis,   FX_BSTR szFuncName, CFXJSE_Arguments &args);\r
121     static void divide_operator                         (FXJSE_HOBJECT hThis,   FX_BSTR szFuncName, CFXJSE_Arguments &args);\r
122     static void positive_operator                       (FXJSE_HOBJECT hThis,   FX_BSTR szFuncName, CFXJSE_Arguments &args);\r
123     static void negative_operator                       (FXJSE_HOBJECT hThis,   FX_BSTR szFuncName, CFXJSE_Arguments &args);\r
124     static void logical_not_operator            (FXJSE_HOBJECT hThis,   FX_BSTR szFuncName, CFXJSE_Arguments &args);\r
125     static void dot_accessor                            (FXJSE_HOBJECT hThis,   FX_BSTR szFuncName, CFXJSE_Arguments &args);\r
126     static void dotdot_accessor                         (FXJSE_HOBJECT hThis,   FX_BSTR szFuncName, CFXJSE_Arguments &args);\r
127     static void eval_translation                        (FXJSE_HOBJECT hThis,   FX_BSTR szFuncName, CFXJSE_Arguments &args);\r
128     static void         is_fm_object    (FXJSE_HOBJECT hThis,   FX_BSTR szFuncName, CFXJSE_Arguments &args);\r
129     static void         is_fm_array             (FXJSE_HOBJECT hThis,   FX_BSTR szFuncName, CFXJSE_Arguments &args);\r
130     static void         get_fm_value    (FXJSE_HOBJECT hThis,   FX_BSTR szFuncName, CFXJSE_Arguments &args);\r
131     static void         get_fm_jsobj    (FXJSE_HOBJECT hThis,   FX_BSTR szFuncName, CFXJSE_Arguments &args);\r
132     static void         fm_var_filter   (FXJSE_HOBJECT hThis,   FX_BSTR szFuncName, CFXJSE_Arguments &args);\r
133     static void         concat_fm_object(FXJSE_HOBJECT hThis,   FX_BSTR szFuncName, CFXJSE_Arguments &args);\r
134 \r
135     static FX_INT32 hvalue_get_array_length     (FXJSE_HOBJECT hThis, FXJSE_HVALUE arg);\r
136     static FX_BOOL              simpleValueCompare      (FXJSE_HOBJECT hThis, FXJSE_HVALUE firstValue, FXJSE_HVALUE secondValue);\r
137     static void                 unfoldArgs                      (FXJSE_HOBJECT hThis, CFXJSE_Arguments &args, FXJSE_HVALUE *&resultValues, FX_INT32 &iCount, FX_INT32 iStart = 0);\r
138     static void                 GetObjectDefaultValue(FXJSE_HVALUE hObjectValue, FXJSE_HVALUE hDefaultValue);\r
139     static FX_BOOL              SetObjectDefaultValue(FXJSE_HVALUE hObjectValue, FXJSE_HVALUE hNewValue);\r
140     static void                 GenerateSomExpression(FX_BSTR szName, FX_INT32 iIndexFlags, FX_INT32 iIndexValue, FX_BOOL bIsStar, CFX_ByteString& szSomExp);\r
141     static FX_BOOL              GetObjectByName(FXJSE_HOBJECT hThis, FXJSE_HVALUE accessorValue, FX_BSTR szAccessorName);\r
142     static FX_INT32             ResolveObjects(FXJSE_HOBJECT hThis, FXJSE_HVALUE hParentValue, FX_BSTR bsSomExp, XFA_RESOLVENODE_RS &resoveNodeRS, FX_BOOL bdotAccessor = TRUE, FX_BOOL bHasNoResolveName = FALSE);\r
143     static void                 ParseResolveResult(FXJSE_HOBJECT hThis, const XFA_RESOLVENODE_RS& resoveNodeRS, FXJSE_HVALUE hParentValue, FXJSE_HVALUE *&resultValues, FX_INT32 &iSize, FX_BOOL &bAttribute);\r
144 \r
145     static FXJSE_HVALUE GetSimpleHValue (FXJSE_HOBJECT hThis, CFXJSE_Arguments &args, FX_UINT32 index);\r
146     static FX_BOOL              HValueIsNull    (FXJSE_HOBJECT hThis, FXJSE_HVALUE hValue);\r
147     static FX_INT32             HValueToInteger (FXJSE_HOBJECT hThis, FXJSE_HVALUE hValue);\r
148     static FX_DOUBLE    StringToDouble(FX_BSTR szStringVal);\r
149     static FX_FLOAT             HValueToFloat   (FXJSE_HOBJECT hThis, FXJSE_HVALUE hValue);\r
150     static FX_DOUBLE    HValueToDouble  (FXJSE_HOBJECT hThis, FXJSE_HVALUE hValue);\r
151     static void                 HValueToUTF8String      (FXJSE_HVALUE hValue, CFX_ByteString& outputValue);\r
152     CXFA_FM2JSContext();\r
153     ~CXFA_FM2JSContext();\r
154     static CXFA_FM2JSContext* Create();\r
155     void Initialize(FXJSE_HRUNTIME hScriptRuntime, FXJSE_HCONTEXT hScriptContext, CXFA_Document* pDoc);\r
156     void GlobalPropertyGetter(FXJSE_HVALUE hValue);\r
157     void Release();\r
158     FXJSE_HRUNTIME GetScriptRuntime() const\r
159     {\r
160         return m_hScriptRuntime;\r
161     }\r
162     CXFA_Document* GetDocument() const\r
163     {\r
164         return m_pDocument;\r
165     }\r
166     void ThrowScriptErrorMessage(FX_INT32 iStringID, ...);\r
167 private:\r
168     FXJSE_HRUNTIME                      m_hScriptRuntime;\r
169     FXJSE_CLASS                         m_fmClass;\r
170     FXJSE_HCLASS                        m_hFMClass;\r
171     FXJSE_HVALUE                        m_hValue;\r
172     CXFA_Document*                      m_pDocument;\r
173 };\r
174 #endif\r