Merge XFA to PDFium master at 4dc95e7 on 10/28/2014
[pdfium.git] / xfa / src / fxfa / src / fm2js / xfa_simpleexpression.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_FM_SIMPLEEXPRESSION_H\r
8 #define _XFA_FM_SIMPLEEXPRESSION_H\r
9 enum XFA_FM_SimpleExpressionType {\r
10     ASSIGN,\r
11     LOGICALOR,\r
12     LOGICALAND,\r
13     EQUALITY,\r
14     NOTEQUALITY,\r
15     LESS,\r
16     LESSEQUAL,\r
17     GREATER,\r
18     GREATEREQUAL,\r
19     PLUS,\r
20     MINUS,\r
21     MULTIPLE,\r
22     DIVIDE,\r
23     POSITIVE,\r
24     NEGATIVE,\r
25     NOT,\r
26     CALL,\r
27     DOT,\r
28     DOTDOT,\r
29     CONCATFMOBJECT,\r
30     ISFMOBJECT,\r
31     ISFMARRAY,\r
32     GETFMVALUE,\r
33     GETFMJSOBJ,\r
34     VARFILTER\r
35 };\r
36 CFX_WideStringC XFA_FM_EXPTypeToString(XFA_FM_SimpleExpressionType simpleExpType);\r
37 struct XFA_FMBuildInFunc {\r
38     FX_UINT32           m_uHash;\r
39     FX_LPCWSTR          m_buildinfunc;\r
40 };\r
41 struct XFA_FMSOMMethod {\r
42     FX_UINT32           m_uHash;\r
43     FX_LPCWSTR          m_wsSomMethodName;\r
44     FX_DWORD            m_dParameters;\r
45 };\r
46 enum XFA_FM_AccessorIndex {\r
47     ACCESSOR_NO_INDEX,\r
48     ACCESSOR_NO_RELATIVEINDEX,\r
49     ACCESSOR_POSITIVE_INDEX,\r
50     ACCESSOR_NEGATIVE_INDEX\r
51 };\r
52 class CXFA_FMSimpleExpression : public CFX_Object\r
53 {\r
54 public:\r
55     CXFA_FMSimpleExpression(FX_DWORD line, XFA_FM_TOKEN op);\r
56     virtual ~CXFA_FMSimpleExpression() {};\r
57     virtual void ToJavaScript(CFX_WideTextBuf& javascript);\r
58     virtual void ToImpliedReturnJS(CFX_WideTextBuf& javascript);\r
59 \r
60     XFA_FM_TOKEN GetOperatorToken() const;\r
61 protected:\r
62     FX_DWORD m_line;\r
63     XFA_FM_TOKEN m_op;\r
64 };\r
65 class CXFA_FMNullExpression : public CXFA_FMSimpleExpression\r
66 {\r
67 public:\r
68     CXFA_FMNullExpression(FX_DWORD line);\r
69     virtual ~CXFA_FMNullExpression() {};\r
70     virtual void ToJavaScript(CFX_WideTextBuf& javascript);\r
71 };\r
72 class CXFA_FMNumberExpression : public CXFA_FMSimpleExpression\r
73 {\r
74 public:\r
75     CXFA_FMNumberExpression(FX_DWORD line, CFX_WideStringC wsNumber);\r
76     virtual ~CXFA_FMNumberExpression() {};\r
77     virtual void ToJavaScript(CFX_WideTextBuf& javascript);\r
78 protected:\r
79     CFX_WideStringC m_wsNumber;\r
80 };\r
81 class CXFA_FMStringExpression : public CXFA_FMSimpleExpression\r
82 {\r
83 public:\r
84     CXFA_FMStringExpression(FX_DWORD line, CFX_WideStringC wsString);\r
85     virtual ~CXFA_FMStringExpression() {};\r
86     virtual void ToJavaScript(CFX_WideTextBuf& javascript);\r
87 protected:\r
88     CFX_WideStringC m_wsString;\r
89 };\r
90 class CXFA_FMIdentifierExpressionn : public CXFA_FMSimpleExpression\r
91 {\r
92 public:\r
93     CXFA_FMIdentifierExpressionn(FX_DWORD line, CFX_WideStringC wsIdentifier);\r
94     virtual ~CXFA_FMIdentifierExpressionn() {};\r
95     virtual void ToJavaScript(CFX_WideTextBuf& javascript);\r
96 protected:\r
97     CFX_WideStringC m_wsIdentifier;\r
98 };\r
99 class CXFA_FMUnaryExpression : public CXFA_FMSimpleExpression\r
100 {\r
101 public:\r
102     CXFA_FMUnaryExpression(FX_DWORD line, XFA_FM_TOKEN op, CXFA_FMSimpleExpression *pExp);\r
103     virtual ~CXFA_FMUnaryExpression();\r
104     virtual void ToJavaScript(CFX_WideTextBuf& javascript);\r
105 protected:\r
106     CXFA_FMSimpleExpression *m_pExp;\r
107 };\r
108 class CXFA_FMBinExpression : public CXFA_FMSimpleExpression\r
109 {\r
110 public:\r
111     CXFA_FMBinExpression(FX_DWORD line, XFA_FM_TOKEN op, CXFA_FMSimpleExpression *pExp1, CXFA_FMSimpleExpression *pExp2);\r
112     virtual ~CXFA_FMBinExpression();\r
113     virtual void ToJavaScript(CFX_WideTextBuf& javascript);\r
114 protected:\r
115     CXFA_FMSimpleExpression *m_pExp1;\r
116     CXFA_FMSimpleExpression *m_pExp2;\r
117 };\r
118 class CXFA_FMAssignExpression : public CXFA_FMBinExpression\r
119 {\r
120 public:\r
121     CXFA_FMAssignExpression(FX_DWORD line, XFA_FM_TOKEN op, CXFA_FMSimpleExpression *pExp1, CXFA_FMSimpleExpression *pExp2);\r
122     virtual ~CXFA_FMAssignExpression() {};\r
123     virtual void ToJavaScript(CFX_WideTextBuf& javascript);\r
124     virtual void ToImpliedReturnJS(CFX_WideTextBuf& javascript);\r
125 };\r
126 class CXFA_FMLogicalOrExpression : public CXFA_FMBinExpression\r
127 {\r
128 public:\r
129     CXFA_FMLogicalOrExpression(FX_DWORD line, XFA_FM_TOKEN op, CXFA_FMSimpleExpression *pExp1, CXFA_FMSimpleExpression *pExp2);\r
130     virtual ~CXFA_FMLogicalOrExpression() {};\r
131     virtual void ToJavaScript(CFX_WideTextBuf& javascript);\r
132 };\r
133 class CXFA_FMLogicalAndExpression : public CXFA_FMBinExpression\r
134 {\r
135 public:\r
136     CXFA_FMLogicalAndExpression(FX_DWORD line, XFA_FM_TOKEN op, CXFA_FMSimpleExpression *pExp1, CXFA_FMSimpleExpression *pExp2);\r
137     virtual ~CXFA_FMLogicalAndExpression() {};\r
138     virtual void ToJavaScript(CFX_WideTextBuf& javascript);\r
139 };\r
140 class CXFA_FMEqualityExpression : public CXFA_FMBinExpression\r
141 {\r
142 public:\r
143     CXFA_FMEqualityExpression(FX_DWORD line, XFA_FM_TOKEN op, CXFA_FMSimpleExpression *pExp1, CXFA_FMSimpleExpression *pExp2);\r
144     virtual ~CXFA_FMEqualityExpression() {};\r
145     virtual void ToJavaScript(CFX_WideTextBuf& javascript);\r
146 };\r
147 class CXFA_FMRelationalExpression : public CXFA_FMBinExpression\r
148 {\r
149 public:\r
150     CXFA_FMRelationalExpression(FX_DWORD line, XFA_FM_TOKEN op, CXFA_FMSimpleExpression *pExp1, CXFA_FMSimpleExpression *pExp2);\r
151     virtual ~CXFA_FMRelationalExpression() {};\r
152     virtual void ToJavaScript(CFX_WideTextBuf& javascript);\r
153 };\r
154 class CXFA_FMAdditiveExpression : public CXFA_FMBinExpression\r
155 {\r
156 public:\r
157     CXFA_FMAdditiveExpression(FX_DWORD line, XFA_FM_TOKEN op, CXFA_FMSimpleExpression *pExp1, CXFA_FMSimpleExpression *pExp2);\r
158     virtual ~CXFA_FMAdditiveExpression() {};\r
159     virtual void ToJavaScript(CFX_WideTextBuf& javascript);\r
160 };\r
161 class CXFA_FMMultiplicativeExpression : public CXFA_FMBinExpression\r
162 {\r
163 public:\r
164     CXFA_FMMultiplicativeExpression(FX_DWORD line, XFA_FM_TOKEN op, CXFA_FMSimpleExpression *pExp1, CXFA_FMSimpleExpression *pExp2);\r
165     virtual ~CXFA_FMMultiplicativeExpression() {};\r
166     virtual void ToJavaScript(CFX_WideTextBuf& javascript);\r
167 };\r
168 class CXFA_FMPosExpression : public CXFA_FMUnaryExpression\r
169 {\r
170 public:\r
171     CXFA_FMPosExpression(FX_DWORD line, CXFA_FMSimpleExpression *pExp);\r
172     virtual ~CXFA_FMPosExpression() {};\r
173     virtual void ToJavaScript(CFX_WideTextBuf& javascript);\r
174 };\r
175 class CXFA_FMNegExpression : public CXFA_FMUnaryExpression\r
176 {\r
177 public:\r
178     CXFA_FMNegExpression(FX_DWORD line, CXFA_FMSimpleExpression *pExp);\r
179     virtual ~CXFA_FMNegExpression() {};\r
180     virtual void ToJavaScript(CFX_WideTextBuf& javascript);\r
181 };\r
182 class CXFA_FMNotExpression : public CXFA_FMUnaryExpression\r
183 {\r
184 public:\r
185     CXFA_FMNotExpression(FX_DWORD line, CXFA_FMSimpleExpression *pExp);\r
186     virtual ~CXFA_FMNotExpression() {};\r
187     virtual void ToJavaScript(CFX_WideTextBuf& javascript);\r
188 };\r
189 class CXFA_FMCallExpression : public CXFA_FMUnaryExpression\r
190 {\r
191 public:\r
192     CXFA_FMCallExpression(FX_DWORD line, CXFA_FMSimpleExpression *pExp, CFX_PtrArray *pArguments, FX_BOOL bIsSomMethod);\r
193     virtual ~CXFA_FMCallExpression();\r
194     virtual FX_BOOL IsBuildInFunc(CFX_WideTextBuf& funcName);\r
195     virtual FX_DWORD IsSomMethodWithObjPara(FX_WSTR methodName);\r
196     virtual void ToJavaScript(CFX_WideTextBuf& javascript);\r
197 private:\r
198     FX_BOOL m_bIsSomMethod;\r
199     CFX_PtrArray *m_pArguments;\r
200 };\r
201 class CXFA_FMDotAccessorExpression : public CXFA_FMBinExpression\r
202 {\r
203 public:\r
204     CXFA_FMDotAccessorExpression(FX_DWORD line, CXFA_FMSimpleExpression *pAccessor, XFA_FM_TOKEN op,\r
205                                  CFX_WideStringC wsIdentifier, CXFA_FMSimpleExpression *pIndexExp);\r
206     virtual ~CXFA_FMDotAccessorExpression() {};\r
207     virtual void ToJavaScript(CFX_WideTextBuf& javascript);\r
208 protected:\r
209     CFX_WideStringC m_wsIdentifier;\r
210 };\r
211 class CXFA_FMIndexExpression : public CXFA_FMUnaryExpression\r
212 {\r
213 public:\r
214     CXFA_FMIndexExpression(FX_DWORD line, XFA_FM_AccessorIndex accessorIndex, CXFA_FMSimpleExpression *pIndexExp, FX_BOOL bIsStarIndex);\r
215     virtual ~CXFA_FMIndexExpression() {};\r
216     virtual void ToJavaScript(CFX_WideTextBuf& javascript);\r
217 protected:\r
218     XFA_FM_AccessorIndex m_accessorIndex;\r
219     FX_BOOL m_bIsStarIndex;\r
220 };\r
221 class CXFA_FMDotDotAccessorExpression : public CXFA_FMBinExpression\r
222 {\r
223 public:\r
224     CXFA_FMDotDotAccessorExpression(FX_DWORD line, CXFA_FMSimpleExpression *pAccessor, XFA_FM_TOKEN op,\r
225                                     CFX_WideStringC wsIdentifier, CXFA_FMSimpleExpression *pIndexExp);\r
226     virtual ~CXFA_FMDotDotAccessorExpression() {};\r
227     virtual void ToJavaScript(CFX_WideTextBuf& javascript);\r
228 protected:\r
229     CFX_WideStringC m_wsIdentifier;\r
230 };\r
231 class CXFA_FMMethodCallExpression : public CXFA_FMBinExpression\r
232 {\r
233 public:\r
234     CXFA_FMMethodCallExpression(FX_DWORD line, CXFA_FMSimpleExpression *pAccessorExp1, CXFA_FMSimpleExpression *pCallExp);\r
235     virtual ~CXFA_FMMethodCallExpression() {};\r
236     virtual void ToJavaScript(CFX_WideTextBuf& javascript);\r
237 protected:\r
238 };\r
239 #endif\r