Merge XFA to PDFium master at 4dc95e7 on 10/28/2014
[pdfium.git] / xfa / src / fxfa / src / fm2js / xfa_expression.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_EXPRESSION_H\r
8 #define _XFA_FM_EXPRESSION_H\r
9 enum XFA_FM_EXPTYPE {\r
10     XFA_FM_EXPTYPE_UNKNOWN,\r
11     XFA_FM_EXPTYPE_FUNC,\r
12     XFA_FM_EXPTYPE_VAR,\r
13     XFA_FM_EXPTYPE_EXP,\r
14     XFA_FM_EXPTYPE_BLOCK,\r
15     XFA_FM_EXPTYPE_IF,\r
16     XFA_FM_EXPTYPE_BREAK,\r
17     XFA_FM_EXPTYPE_CONTINUE,\r
18 };\r
19 class CXFA_FMExpression : public CFX_Object\r
20 {\r
21 public:\r
22     CXFA_FMExpression(FX_DWORD line);\r
23     CXFA_FMExpression(FX_DWORD line, XFA_FM_EXPTYPE type);\r
24     virtual ~CXFA_FMExpression() {};\r
25     virtual void ToJavaScript(CFX_WideTextBuf& javascript);\r
26     virtual void ToImpliedReturnJS(CFX_WideTextBuf&);\r
27     FX_DWORD GetLine()\r
28     {\r
29         return m_line;\r
30     }\r
31     XFA_FM_EXPTYPE GetExpType() const\r
32     {\r
33         return m_type;\r
34     }\r
35 protected:\r
36     XFA_FM_EXPTYPE m_type;\r
37     FX_DWORD m_line;\r
38 };\r
39 class CXFA_FMFunctionDefinition : public CXFA_FMExpression\r
40 {\r
41 public:\r
42     CXFA_FMFunctionDefinition(FX_DWORD line, FX_BOOL isGlobal, FX_WSTR wsName, CFX_WideStringCArray *pArguments, CFX_PtrArray *pExpressions);\r
43     virtual ~CXFA_FMFunctionDefinition();\r
44     virtual void ToJavaScript(CFX_WideTextBuf& javascript);\r
45     virtual void ToImpliedReturnJS(CFX_WideTextBuf&);\r
46 private:\r
47     CFX_WideStringC m_wsName;\r
48     CFX_WideStringCArray *m_pArguments;\r
49     CFX_PtrArray *m_pExpressions;\r
50     FX_BOOL m_isGlobal;\r
51 };\r
52 class CXFA_FMVarExpression : public CXFA_FMExpression\r
53 {\r
54 public:\r
55     CXFA_FMVarExpression(FX_DWORD line, FX_WSTR wsName, CXFA_FMExpression *pInit);\r
56     virtual ~CXFA_FMVarExpression();\r
57     virtual void ToJavaScript(CFX_WideTextBuf& javascript);\r
58     virtual void ToImpliedReturnJS(CFX_WideTextBuf&);\r
59 private:\r
60     CFX_WideStringC m_wsName;\r
61     CXFA_FMExpression *m_pInit;\r
62 };\r
63 class CXFA_FMExpExpression : public CXFA_FMExpression\r
64 {\r
65 public:\r
66     CXFA_FMExpExpression(FX_DWORD line, CXFA_FMSimpleExpression *pExpression);\r
67     virtual ~CXFA_FMExpExpression();\r
68     virtual void ToJavaScript(CFX_WideTextBuf& javascript);\r
69     virtual void ToImpliedReturnJS(CFX_WideTextBuf&);\r
70 private:\r
71     CXFA_FMSimpleExpression *m_pExpression;\r
72 };\r
73 class CXFA_FMBlockExpression : public CXFA_FMExpression\r
74 {\r
75 public:\r
76     CXFA_FMBlockExpression(FX_DWORD line, CFX_PtrArray *pExpressionList);\r
77     virtual ~CXFA_FMBlockExpression();\r
78     virtual void ToJavaScript(CFX_WideTextBuf& javascript);\r
79     virtual void ToImpliedReturnJS(CFX_WideTextBuf&);\r
80 private:\r
81     CFX_PtrArray *m_pExpressionList;\r
82 };\r
83 class CXFA_FMDoExpression : public CXFA_FMExpression\r
84 {\r
85 public:\r
86     CXFA_FMDoExpression(FX_DWORD line, CXFA_FMExpression *pList);\r
87     virtual ~CXFA_FMDoExpression();\r
88     virtual void ToJavaScript(CFX_WideTextBuf& javascript);\r
89     virtual void ToImpliedReturnJS(CFX_WideTextBuf&);\r
90 private:\r
91     CXFA_FMExpression *m_pList;\r
92 };\r
93 class CXFA_FMIfExpression : public CXFA_FMExpression\r
94 {\r
95 public:\r
96     CXFA_FMIfExpression(FX_DWORD line, CXFA_FMSimpleExpression *pExpression, CXFA_FMExpression *pIfExpression, CXFA_FMExpression *pElseExpression);\r
97     virtual ~CXFA_FMIfExpression();\r
98     virtual void ToJavaScript(CFX_WideTextBuf& javascript);\r
99     virtual void ToImpliedReturnJS(CFX_WideTextBuf&);\r
100 private:\r
101     CXFA_FMSimpleExpression *m_pExpression;\r
102     CXFA_FMExpression   *m_pIfExpression;\r
103     CXFA_FMExpression   *m_pElseExpression;\r
104 };\r
105 class CXFA_FMLoopExpression : public CXFA_FMExpression\r
106 {\r
107 public:\r
108     CXFA_FMLoopExpression(FX_DWORD line) : CXFA_FMExpression(line) {}\r
109     virtual ~CXFA_FMLoopExpression();\r
110     virtual void ToJavaScript(CFX_WideTextBuf& javascript);\r
111     virtual void ToImpliedReturnJS(CFX_WideTextBuf&);\r
112 };\r
113 class CXFA_FMWhileExpression : public CXFA_FMLoopExpression\r
114 {\r
115 public:\r
116     CXFA_FMWhileExpression(FX_DWORD line, CXFA_FMSimpleExpression *pCodition, CXFA_FMExpression *pExpression);\r
117     virtual ~CXFA_FMWhileExpression();\r
118     virtual void ToJavaScript(CFX_WideTextBuf& javascript);\r
119     virtual void ToImpliedReturnJS(CFX_WideTextBuf&);\r
120 private:\r
121     CXFA_FMSimpleExpression *m_pCondition;\r
122     CXFA_FMExpression *m_pExpression;\r
123 };\r
124 class CXFA_FMBreakExpression : public CXFA_FMExpression\r
125 {\r
126 public:\r
127     CXFA_FMBreakExpression(FX_DWORD line);\r
128     virtual ~CXFA_FMBreakExpression();\r
129     virtual void ToJavaScript(CFX_WideTextBuf& javascript);\r
130     virtual void ToImpliedReturnJS(CFX_WideTextBuf&);\r
131 private:\r
132     CXFA_FMLoopExpression *m_pExpression;\r
133 };\r
134 class CXFA_FMContinueExpression : public CXFA_FMExpression\r
135 {\r
136 public:\r
137     CXFA_FMContinueExpression(FX_DWORD line);\r
138     virtual ~CXFA_FMContinueExpression();\r
139     virtual void ToJavaScript(CFX_WideTextBuf& javascript);\r
140     virtual void ToImpliedReturnJS(CFX_WideTextBuf&);\r
141 private:\r
142     CXFA_FMLoopExpression *m_pExpression;\r
143 };\r
144 class CXFA_FMForExpression : public CXFA_FMLoopExpression\r
145 {\r
146 public:\r
147     CXFA_FMForExpression(FX_DWORD line, FX_WSTR wsVariant, CXFA_FMSimpleExpression *pAssignment,\r
148                          CXFA_FMSimpleExpression *pAccessor, FX_INT32 iDirection, CXFA_FMSimpleExpression *pStep, CXFA_FMExpression *pList);\r
149     virtual ~CXFA_FMForExpression();\r
150     virtual void ToJavaScript(CFX_WideTextBuf& javascript);\r
151     virtual void ToImpliedReturnJS(CFX_WideTextBuf&);\r
152 private:\r
153     CFX_WideStringC m_wsVariant;\r
154     CXFA_FMSimpleExpression * m_pAssignment;\r
155     CXFA_FMSimpleExpression *m_pAccessor;\r
156     FX_INT32 m_iDirection;\r
157     CXFA_FMSimpleExpression *m_pStep;\r
158     CXFA_FMExpression *m_pList;\r
159 };\r
160 class CXFA_FMForeachExpression : public CXFA_FMLoopExpression\r
161 {\r
162 public:\r
163     CXFA_FMForeachExpression(FX_DWORD line, FX_WSTR wsIdentifier, CFX_PtrArray *pAccessors, CXFA_FMExpression *pList);\r
164     virtual ~CXFA_FMForeachExpression();\r
165     virtual void ToJavaScript(CFX_WideTextBuf& javascript);\r
166     virtual void ToImpliedReturnJS(CFX_WideTextBuf&);\r
167 private:\r
168     CFX_WideStringC m_wsIdentifier;\r
169     CFX_PtrArray *m_pAccessors;\r
170     CXFA_FMExpression *m_pList;\r
171 };\r
172 #endif\r