blob: dcc0a7b04f265cfc8867e0ea3095f5652da72d58 [file] [log] [blame]
// 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_FM_EXPRESSION_H
#define _XFA_FM_EXPRESSION_H
enum XFA_FM_EXPTYPE {
XFA_FM_EXPTYPE_UNKNOWN,
XFA_FM_EXPTYPE_FUNC,
XFA_FM_EXPTYPE_VAR,
XFA_FM_EXPTYPE_EXP,
XFA_FM_EXPTYPE_BLOCK,
XFA_FM_EXPTYPE_IF,
XFA_FM_EXPTYPE_BREAK,
XFA_FM_EXPTYPE_CONTINUE,
};
class CXFA_FMExpression {
public:
CXFA_FMExpression(FX_DWORD line);
CXFA_FMExpression(FX_DWORD line, XFA_FM_EXPTYPE type);
virtual ~CXFA_FMExpression(){};
virtual void ToJavaScript(CFX_WideTextBuf& javascript);
virtual void ToImpliedReturnJS(CFX_WideTextBuf&);
FX_DWORD GetLine() { return m_line; }
XFA_FM_EXPTYPE GetExpType() const { return m_type; }
protected:
XFA_FM_EXPTYPE m_type;
FX_DWORD m_line;
};
class CXFA_FMFunctionDefinition : public CXFA_FMExpression {
public:
CXFA_FMFunctionDefinition(FX_DWORD line,
FX_BOOL isGlobal,
const CFX_WideStringC& wsName,
CFX_WideStringCArray* pArguments,
CFX_PtrArray* pExpressions);
virtual ~CXFA_FMFunctionDefinition();
virtual void ToJavaScript(CFX_WideTextBuf& javascript);
virtual void ToImpliedReturnJS(CFX_WideTextBuf&);
private:
CFX_WideStringC m_wsName;
CFX_WideStringCArray* m_pArguments;
CFX_PtrArray* m_pExpressions;
FX_BOOL m_isGlobal;
};
class CXFA_FMVarExpression : public CXFA_FMExpression {
public:
CXFA_FMVarExpression(FX_DWORD line,
const CFX_WideStringC& wsName,
CXFA_FMExpression* pInit);
virtual ~CXFA_FMVarExpression();
virtual void ToJavaScript(CFX_WideTextBuf& javascript);
virtual void ToImpliedReturnJS(CFX_WideTextBuf&);
private:
CFX_WideStringC m_wsName;
CXFA_FMExpression* m_pInit;
};
class CXFA_FMExpExpression : public CXFA_FMExpression {
public:
CXFA_FMExpExpression(FX_DWORD line, CXFA_FMSimpleExpression* pExpression);
virtual ~CXFA_FMExpExpression();
virtual void ToJavaScript(CFX_WideTextBuf& javascript);
virtual void ToImpliedReturnJS(CFX_WideTextBuf&);
private:
CXFA_FMSimpleExpression* m_pExpression;
};
class CXFA_FMBlockExpression : public CXFA_FMExpression {
public:
CXFA_FMBlockExpression(FX_DWORD line, CFX_PtrArray* pExpressionList);
virtual ~CXFA_FMBlockExpression();
virtual void ToJavaScript(CFX_WideTextBuf& javascript);
virtual void ToImpliedReturnJS(CFX_WideTextBuf&);
private:
CFX_PtrArray* m_pExpressionList;
};
class CXFA_FMDoExpression : public CXFA_FMExpression {
public:
CXFA_FMDoExpression(FX_DWORD line, CXFA_FMExpression* pList);
virtual ~CXFA_FMDoExpression();
virtual void ToJavaScript(CFX_WideTextBuf& javascript);
virtual void ToImpliedReturnJS(CFX_WideTextBuf&);
private:
CXFA_FMExpression* m_pList;
};
class CXFA_FMIfExpression : public CXFA_FMExpression {
public:
CXFA_FMIfExpression(FX_DWORD line,
CXFA_FMSimpleExpression* pExpression,
CXFA_FMExpression* pIfExpression,
CXFA_FMExpression* pElseExpression);
virtual ~CXFA_FMIfExpression();
virtual void ToJavaScript(CFX_WideTextBuf& javascript);
virtual void ToImpliedReturnJS(CFX_WideTextBuf&);
private:
CXFA_FMSimpleExpression* m_pExpression;
CXFA_FMExpression* m_pIfExpression;
CXFA_FMExpression* m_pElseExpression;
};
class CXFA_FMLoopExpression : public CXFA_FMExpression {
public:
CXFA_FMLoopExpression(FX_DWORD line) : CXFA_FMExpression(line) {}
virtual ~CXFA_FMLoopExpression();
virtual void ToJavaScript(CFX_WideTextBuf& javascript);
virtual void ToImpliedReturnJS(CFX_WideTextBuf&);
};
class CXFA_FMWhileExpression : public CXFA_FMLoopExpression {
public:
CXFA_FMWhileExpression(FX_DWORD line,
CXFA_FMSimpleExpression* pCodition,
CXFA_FMExpression* pExpression);
virtual ~CXFA_FMWhileExpression();
virtual void ToJavaScript(CFX_WideTextBuf& javascript);
virtual void ToImpliedReturnJS(CFX_WideTextBuf&);
private:
CXFA_FMSimpleExpression* m_pCondition;
CXFA_FMExpression* m_pExpression;
};
class CXFA_FMBreakExpression : public CXFA_FMExpression {
public:
CXFA_FMBreakExpression(FX_DWORD line);
virtual ~CXFA_FMBreakExpression();
virtual void ToJavaScript(CFX_WideTextBuf& javascript);
virtual void ToImpliedReturnJS(CFX_WideTextBuf&);
};
class CXFA_FMContinueExpression : public CXFA_FMExpression {
public:
CXFA_FMContinueExpression(FX_DWORD line);
virtual ~CXFA_FMContinueExpression();
virtual void ToJavaScript(CFX_WideTextBuf& javascript);
virtual void ToImpliedReturnJS(CFX_WideTextBuf&);
};
class CXFA_FMForExpression : public CXFA_FMLoopExpression {
public:
CXFA_FMForExpression(FX_DWORD line,
const CFX_WideStringC& wsVariant,
CXFA_FMSimpleExpression* pAssignment,
CXFA_FMSimpleExpression* pAccessor,
int32_t iDirection,
CXFA_FMSimpleExpression* pStep,
CXFA_FMExpression* pList);
virtual ~CXFA_FMForExpression();
virtual void ToJavaScript(CFX_WideTextBuf& javascript);
virtual void ToImpliedReturnJS(CFX_WideTextBuf&);
private:
CFX_WideStringC m_wsVariant;
CXFA_FMSimpleExpression* m_pAssignment;
CXFA_FMSimpleExpression* m_pAccessor;
int32_t m_iDirection;
CXFA_FMSimpleExpression* m_pStep;
CXFA_FMExpression* m_pList;
};
class CXFA_FMForeachExpression : public CXFA_FMLoopExpression {
public:
CXFA_FMForeachExpression(FX_DWORD line,
const CFX_WideStringC& wsIdentifier,
CFX_PtrArray* pAccessors,
CXFA_FMExpression* pList);
virtual ~CXFA_FMForeachExpression();
virtual void ToJavaScript(CFX_WideTextBuf& javascript);
virtual void ToImpliedReturnJS(CFX_WideTextBuf&);
private:
CFX_WideStringC m_wsIdentifier;
CFX_PtrArray* m_pAccessors;
CXFA_FMExpression* m_pList;
};
#endif