// 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_SIMPLEEXPRESSION_H #define _XFA_FM_SIMPLEEXPRESSION_H enum XFA_FM_SimpleExpressionType { ASSIGN, LOGICALOR, LOGICALAND, EQUALITY, NOTEQUALITY, LESS, LESSEQUAL, GREATER, GREATEREQUAL, PLUS, MINUS, MULTIPLE, DIVIDE, POSITIVE, NEGATIVE, NOT, CALL, DOT, DOTDOT, CONCATFMOBJECT, ISFMOBJECT, ISFMARRAY, GETFMVALUE, GETFMJSOBJ, VARFILTER }; CFX_WideStringC XFA_FM_EXPTypeToString( XFA_FM_SimpleExpressionType simpleExpType); struct XFA_FMBuildInFunc { uint32_t m_uHash; const FX_WCHAR* m_buildinfunc; }; struct XFA_FMSOMMethod { uint32_t m_uHash; const FX_WCHAR* m_wsSomMethodName; FX_DWORD m_dParameters; }; enum XFA_FM_AccessorIndex { ACCESSOR_NO_INDEX, ACCESSOR_NO_RELATIVEINDEX, ACCESSOR_POSITIVE_INDEX, ACCESSOR_NEGATIVE_INDEX }; class CXFA_FMSimpleExpression { public: CXFA_FMSimpleExpression(FX_DWORD line, XFA_FM_TOKEN op); virtual ~CXFA_FMSimpleExpression(){}; virtual void ToJavaScript(CFX_WideTextBuf& javascript); virtual void ToImpliedReturnJS(CFX_WideTextBuf& javascript); XFA_FM_TOKEN GetOperatorToken() const; protected: FX_DWORD m_line; XFA_FM_TOKEN m_op; }; class CXFA_FMNullExpression : public CXFA_FMSimpleExpression { public: CXFA_FMNullExpression(FX_DWORD line); virtual ~CXFA_FMNullExpression(){}; virtual void ToJavaScript(CFX_WideTextBuf& javascript); }; class CXFA_FMNumberExpression : public CXFA_FMSimpleExpression { public: CXFA_FMNumberExpression(FX_DWORD line, CFX_WideStringC wsNumber); virtual ~CXFA_FMNumberExpression(){}; virtual void ToJavaScript(CFX_WideTextBuf& javascript); protected: CFX_WideStringC m_wsNumber; }; class CXFA_FMStringExpression : public CXFA_FMSimpleExpression { public: CXFA_FMStringExpression(FX_DWORD line, CFX_WideStringC wsString); virtual ~CXFA_FMStringExpression(){}; virtual void ToJavaScript(CFX_WideTextBuf& javascript); protected: CFX_WideStringC m_wsString; }; class CXFA_FMIdentifierExpressionn : public CXFA_FMSimpleExpression { public: CXFA_FMIdentifierExpressionn(FX_DWORD line, CFX_WideStringC wsIdentifier); virtual ~CXFA_FMIdentifierExpressionn(){}; virtual void ToJavaScript(CFX_WideTextBuf& javascript); protected: CFX_WideStringC m_wsIdentifier; }; class CXFA_FMUnaryExpression : public CXFA_FMSimpleExpression { public: CXFA_FMUnaryExpression(FX_DWORD line, XFA_FM_TOKEN op, CXFA_FMSimpleExpression* pExp); virtual ~CXFA_FMUnaryExpression(); virtual void ToJavaScript(CFX_WideTextBuf& javascript); protected: CXFA_FMSimpleExpression* m_pExp; }; class CXFA_FMBinExpression : public CXFA_FMSimpleExpression { public: CXFA_FMBinExpression(FX_DWORD line, XFA_FM_TOKEN op, CXFA_FMSimpleExpression* pExp1, CXFA_FMSimpleExpression* pExp2); virtual ~CXFA_FMBinExpression(); virtual void ToJavaScript(CFX_WideTextBuf& javascript); protected: CXFA_FMSimpleExpression* m_pExp1; CXFA_FMSimpleExpression* m_pExp2; }; class CXFA_FMAssignExpression : public CXFA_FMBinExpression { public: CXFA_FMAssignExpression(FX_DWORD line, XFA_FM_TOKEN op, CXFA_FMSimpleExpression* pExp1, CXFA_FMSimpleExpression* pExp2); virtual ~CXFA_FMAssignExpression(){}; virtual void ToJavaScript(CFX_WideTextBuf& javascript); virtual void ToImpliedReturnJS(CFX_WideTextBuf& javascript); }; class CXFA_FMLogicalOrExpression : public CXFA_FMBinExpression { public: CXFA_FMLogicalOrExpression(FX_DWORD line, XFA_FM_TOKEN op, CXFA_FMSimpleExpression* pExp1, CXFA_FMSimpleExpression* pExp2); virtual ~CXFA_FMLogicalOrExpression(){}; virtual void ToJavaScript(CFX_WideTextBuf& javascript); }; class CXFA_FMLogicalAndExpression : public CXFA_FMBinExpression { public: CXFA_FMLogicalAndExpression(FX_DWORD line, XFA_FM_TOKEN op, CXFA_FMSimpleExpression* pExp1, CXFA_FMSimpleExpression* pExp2); virtual ~CXFA_FMLogicalAndExpression(){}; virtual void ToJavaScript(CFX_WideTextBuf& javascript); }; class CXFA_FMEqualityExpression : public CXFA_FMBinExpression { public: CXFA_FMEqualityExpression(FX_DWORD line, XFA_FM_TOKEN op, CXFA_FMSimpleExpression* pExp1, CXFA_FMSimpleExpression* pExp2); virtual ~CXFA_FMEqualityExpression(){}; virtual void ToJavaScript(CFX_WideTextBuf& javascript); }; class CXFA_FMRelationalExpression : public CXFA_FMBinExpression { public: CXFA_FMRelationalExpression(FX_DWORD line, XFA_FM_TOKEN op, CXFA_FMSimpleExpression* pExp1, CXFA_FMSimpleExpression* pExp2); virtual ~CXFA_FMRelationalExpression(){}; virtual void ToJavaScript(CFX_WideTextBuf& javascript); }; class CXFA_FMAdditiveExpression : public CXFA_FMBinExpression { public: CXFA_FMAdditiveExpression(FX_DWORD line, XFA_FM_TOKEN op, CXFA_FMSimpleExpression* pExp1, CXFA_FMSimpleExpression* pExp2); virtual ~CXFA_FMAdditiveExpression(){}; virtual void ToJavaScript(CFX_WideTextBuf& javascript); }; class CXFA_FMMultiplicativeExpression : public CXFA_FMBinExpression { public: CXFA_FMMultiplicativeExpression(FX_DWORD line, XFA_FM_TOKEN op, CXFA_FMSimpleExpression* pExp1, CXFA_FMSimpleExpression* pExp2); virtual ~CXFA_FMMultiplicativeExpression(){}; virtual void ToJavaScript(CFX_WideTextBuf& javascript); }; class CXFA_FMPosExpression : public CXFA_FMUnaryExpression { public: CXFA_FMPosExpression(FX_DWORD line, CXFA_FMSimpleExpression* pExp); virtual ~CXFA_FMPosExpression(){}; virtual void ToJavaScript(CFX_WideTextBuf& javascript); }; class CXFA_FMNegExpression : public CXFA_FMUnaryExpression { public: CXFA_FMNegExpression(FX_DWORD line, CXFA_FMSimpleExpression* pExp); virtual ~CXFA_FMNegExpression(){}; virtual void ToJavaScript(CFX_WideTextBuf& javascript); }; class CXFA_FMNotExpression : public CXFA_FMUnaryExpression { public: CXFA_FMNotExpression(FX_DWORD line, CXFA_FMSimpleExpression* pExp); virtual ~CXFA_FMNotExpression(){}; virtual void ToJavaScript(CFX_WideTextBuf& javascript); }; class CXFA_FMCallExpression : public CXFA_FMUnaryExpression { public: CXFA_FMCallExpression(FX_DWORD line, CXFA_FMSimpleExpression* pExp, CFX_PtrArray* pArguments, FX_BOOL bIsSomMethod); virtual ~CXFA_FMCallExpression(); virtual FX_BOOL IsBuildInFunc(CFX_WideTextBuf& funcName); virtual FX_DWORD IsSomMethodWithObjPara(const CFX_WideStringC& methodName); virtual void ToJavaScript(CFX_WideTextBuf& javascript); private: FX_BOOL m_bIsSomMethod; CFX_PtrArray* m_pArguments; }; class CXFA_FMDotAccessorExpression : public CXFA_FMBinExpression { public: CXFA_FMDotAccessorExpression(FX_DWORD line, CXFA_FMSimpleExpression* pAccessor, XFA_FM_TOKEN op, CFX_WideStringC wsIdentifier, CXFA_FMSimpleExpression* pIndexExp); virtual ~CXFA_FMDotAccessorExpression(){}; virtual void ToJavaScript(CFX_WideTextBuf& javascript); protected: CFX_WideStringC m_wsIdentifier; }; class CXFA_FMIndexExpression : public CXFA_FMUnaryExpression { public: CXFA_FMIndexExpression(FX_DWORD line, XFA_FM_AccessorIndex accessorIndex, CXFA_FMSimpleExpression* pIndexExp, FX_BOOL bIsStarIndex); virtual ~CXFA_FMIndexExpression(){}; virtual void ToJavaScript(CFX_WideTextBuf& javascript); protected: XFA_FM_AccessorIndex m_accessorIndex; FX_BOOL m_bIsStarIndex; }; class CXFA_FMDotDotAccessorExpression : public CXFA_FMBinExpression { public: CXFA_FMDotDotAccessorExpression(FX_DWORD line, CXFA_FMSimpleExpression* pAccessor, XFA_FM_TOKEN op, CFX_WideStringC wsIdentifier, CXFA_FMSimpleExpression* pIndexExp); virtual ~CXFA_FMDotDotAccessorExpression(){}; virtual void ToJavaScript(CFX_WideTextBuf& javascript); protected: CFX_WideStringC m_wsIdentifier; }; class CXFA_FMMethodCallExpression : public CXFA_FMBinExpression { public: CXFA_FMMethodCallExpression(FX_DWORD line, CXFA_FMSimpleExpression* pAccessorExp1, CXFA_FMSimpleExpression* pCallExp); virtual ~CXFA_FMMethodCallExpression(){}; virtual void ToJavaScript(CFX_WideTextBuf& javascript); protected: }; #endif