diff options
Diffstat (limited to 'xfa/fxfa/fm2js/cxfa_fmsimpleexpression.h')
-rw-r--r-- | xfa/fxfa/fm2js/cxfa_fmsimpleexpression.h | 308 |
1 files changed, 308 insertions, 0 deletions
diff --git a/xfa/fxfa/fm2js/cxfa_fmsimpleexpression.h b/xfa/fxfa/fm2js/cxfa_fmsimpleexpression.h new file mode 100644 index 0000000000..e6d39419ed --- /dev/null +++ b/xfa/fxfa/fm2js/cxfa_fmsimpleexpression.h @@ -0,0 +1,308 @@ +// 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_FXFA_FM2JS_CXFA_FMSIMPLEEXPRESSION_H_ +#define XFA_FXFA_FM2JS_CXFA_FMSIMPLEEXPRESSION_H_ + +#include <memory> +#include <vector> + +#include "core/fxcrt/fx_basic.h" +#include "xfa/fxfa/fm2js/cxfa_fmlexer.h" + +#define RUNTIMEFUNCTIONRETURNVALUE \ + (L"foxit_xfa_formcalc_runtime_func_return_value") +#define EXCLAMATION_IN_IDENTIFIER (L"foxit_xfa_formcalc__exclamation__") + +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); + +enum XFA_FM_AccessorIndex { + ACCESSOR_NO_INDEX, + ACCESSOR_NO_RELATIVEINDEX, + ACCESSOR_POSITIVE_INDEX, + ACCESSOR_NEGATIVE_INDEX +}; + +class CXFA_FMSimpleExpression { + public: + CXFA_FMSimpleExpression(uint32_t line, XFA_FM_TOKEN op); + virtual ~CXFA_FMSimpleExpression() {} + virtual bool ToJavaScript(CFX_WideTextBuf& javascript); + virtual bool ToImpliedReturnJS(CFX_WideTextBuf& javascript); + + XFA_FM_TOKEN GetOperatorToken() const; + + protected: + uint32_t m_line; + const XFA_FM_TOKEN m_op; +}; + +class CXFA_FMNullExpression : public CXFA_FMSimpleExpression { + public: + explicit CXFA_FMNullExpression(uint32_t line); + ~CXFA_FMNullExpression() override {} + bool ToJavaScript(CFX_WideTextBuf& javascript) override; +}; + +class CXFA_FMNumberExpression : public CXFA_FMSimpleExpression { + public: + CXFA_FMNumberExpression(uint32_t line, CFX_WideStringC wsNumber); + ~CXFA_FMNumberExpression() override; + bool ToJavaScript(CFX_WideTextBuf& javascript) override; + + private: + CFX_WideStringC m_wsNumber; +}; + +class CXFA_FMStringExpression : public CXFA_FMSimpleExpression { + public: + CXFA_FMStringExpression(uint32_t line, CFX_WideStringC wsString); + ~CXFA_FMStringExpression() override; + bool ToJavaScript(CFX_WideTextBuf& javascript) override; + + private: + CFX_WideStringC m_wsString; +}; + +class CXFA_FMIdentifierExpression : public CXFA_FMSimpleExpression { + public: + CXFA_FMIdentifierExpression(uint32_t line, CFX_WideStringC wsIdentifier); + ~CXFA_FMIdentifierExpression() override; + bool ToJavaScript(CFX_WideTextBuf& javascript) override; + + private: + CFX_WideStringC m_wsIdentifier; +}; + +class CXFA_FMUnaryExpression : public CXFA_FMSimpleExpression { + public: + CXFA_FMUnaryExpression(uint32_t line, + XFA_FM_TOKEN op, + std::unique_ptr<CXFA_FMSimpleExpression> pExp); + ~CXFA_FMUnaryExpression() override; + + bool ToJavaScript(CFX_WideTextBuf& javascript) override; + + protected: + std::unique_ptr<CXFA_FMSimpleExpression> m_pExp; +}; + +class CXFA_FMBinExpression : public CXFA_FMSimpleExpression { + public: + CXFA_FMBinExpression(uint32_t line, + XFA_FM_TOKEN op, + std::unique_ptr<CXFA_FMSimpleExpression> pExp1, + std::unique_ptr<CXFA_FMSimpleExpression> pExp2); + ~CXFA_FMBinExpression() override; + + bool ToJavaScript(CFX_WideTextBuf& javascript) override; + + protected: + std::unique_ptr<CXFA_FMSimpleExpression> m_pExp1; + std::unique_ptr<CXFA_FMSimpleExpression> m_pExp2; +}; + +class CXFA_FMAssignExpression : public CXFA_FMBinExpression { + public: + CXFA_FMAssignExpression(uint32_t line, + XFA_FM_TOKEN op, + std::unique_ptr<CXFA_FMSimpleExpression> pExp1, + std::unique_ptr<CXFA_FMSimpleExpression> pExp2); + ~CXFA_FMAssignExpression() override {} + bool ToJavaScript(CFX_WideTextBuf& javascript) override; + bool ToImpliedReturnJS(CFX_WideTextBuf& javascript) override; +}; + +class CXFA_FMLogicalOrExpression : public CXFA_FMBinExpression { + public: + CXFA_FMLogicalOrExpression(uint32_t line, + XFA_FM_TOKEN op, + std::unique_ptr<CXFA_FMSimpleExpression> pExp1, + std::unique_ptr<CXFA_FMSimpleExpression> pExp2); + ~CXFA_FMLogicalOrExpression() override {} + bool ToJavaScript(CFX_WideTextBuf& javascript) override; +}; + +class CXFA_FMLogicalAndExpression : public CXFA_FMBinExpression { + public: + CXFA_FMLogicalAndExpression(uint32_t line, + XFA_FM_TOKEN op, + std::unique_ptr<CXFA_FMSimpleExpression> pExp1, + std::unique_ptr<CXFA_FMSimpleExpression> pExp2); + ~CXFA_FMLogicalAndExpression() override {} + bool ToJavaScript(CFX_WideTextBuf& javascript) override; +}; + +class CXFA_FMEqualityExpression : public CXFA_FMBinExpression { + public: + CXFA_FMEqualityExpression(uint32_t line, + XFA_FM_TOKEN op, + std::unique_ptr<CXFA_FMSimpleExpression> pExp1, + std::unique_ptr<CXFA_FMSimpleExpression> pExp2); + ~CXFA_FMEqualityExpression() override {} + bool ToJavaScript(CFX_WideTextBuf& javascript) override; +}; + +class CXFA_FMRelationalExpression : public CXFA_FMBinExpression { + public: + CXFA_FMRelationalExpression(uint32_t line, + XFA_FM_TOKEN op, + std::unique_ptr<CXFA_FMSimpleExpression> pExp1, + std::unique_ptr<CXFA_FMSimpleExpression> pExp2); + ~CXFA_FMRelationalExpression() override {} + bool ToJavaScript(CFX_WideTextBuf& javascript) override; +}; + +class CXFA_FMAdditiveExpression : public CXFA_FMBinExpression { + public: + CXFA_FMAdditiveExpression(uint32_t line, + XFA_FM_TOKEN op, + std::unique_ptr<CXFA_FMSimpleExpression> pExp1, + std::unique_ptr<CXFA_FMSimpleExpression> pExp2); + ~CXFA_FMAdditiveExpression() override {} + bool ToJavaScript(CFX_WideTextBuf& javascript) override; +}; + +class CXFA_FMMultiplicativeExpression : public CXFA_FMBinExpression { + public: + CXFA_FMMultiplicativeExpression( + uint32_t line, + XFA_FM_TOKEN op, + std::unique_ptr<CXFA_FMSimpleExpression> pExp1, + std::unique_ptr<CXFA_FMSimpleExpression> pExp2); + ~CXFA_FMMultiplicativeExpression() override {} + bool ToJavaScript(CFX_WideTextBuf& javascript) override; +}; + +class CXFA_FMPosExpression : public CXFA_FMUnaryExpression { + public: + CXFA_FMPosExpression(uint32_t line, + std::unique_ptr<CXFA_FMSimpleExpression> pExp); + ~CXFA_FMPosExpression() override {} + bool ToJavaScript(CFX_WideTextBuf& javascript) override; +}; + +class CXFA_FMNegExpression : public CXFA_FMUnaryExpression { + public: + CXFA_FMNegExpression(uint32_t line, + std::unique_ptr<CXFA_FMSimpleExpression> pExp); + ~CXFA_FMNegExpression() override {} + bool ToJavaScript(CFX_WideTextBuf& javascript) override; +}; + +class CXFA_FMNotExpression : public CXFA_FMUnaryExpression { + public: + CXFA_FMNotExpression(uint32_t line, + std::unique_ptr<CXFA_FMSimpleExpression> pExp); + ~CXFA_FMNotExpression() override {} + bool ToJavaScript(CFX_WideTextBuf& javascript) override; +}; + +class CXFA_FMCallExpression : public CXFA_FMUnaryExpression { + public: + CXFA_FMCallExpression( + uint32_t line, + std::unique_ptr<CXFA_FMSimpleExpression> pExp, + std::vector<std::unique_ptr<CXFA_FMSimpleExpression>>&& pArguments, + bool bIsSomMethod); + ~CXFA_FMCallExpression() override; + + bool IsBuildInFunc(CFX_WideTextBuf* funcName); + uint32_t IsMethodWithObjParam(const CFX_WideStringC& methodName); + bool ToJavaScript(CFX_WideTextBuf& javascript) override; + + private: + bool m_bIsSomMethod; + std::vector<std::unique_ptr<CXFA_FMSimpleExpression>> m_Arguments; +}; + +class CXFA_FMDotAccessorExpression : public CXFA_FMBinExpression { + public: + CXFA_FMDotAccessorExpression( + uint32_t line, + std::unique_ptr<CXFA_FMSimpleExpression> pAccessor, + XFA_FM_TOKEN op, + CFX_WideStringC wsIdentifier, + std::unique_ptr<CXFA_FMSimpleExpression> pIndexExp); + ~CXFA_FMDotAccessorExpression() override; + bool ToJavaScript(CFX_WideTextBuf& javascript) override; + + private: + CFX_WideStringC m_wsIdentifier; +}; + +class CXFA_FMIndexExpression : public CXFA_FMUnaryExpression { + public: + CXFA_FMIndexExpression(uint32_t line, + XFA_FM_AccessorIndex accessorIndex, + std::unique_ptr<CXFA_FMSimpleExpression> pIndexExp, + bool bIsStarIndex); + ~CXFA_FMIndexExpression() override {} + bool ToJavaScript(CFX_WideTextBuf& javascript) override; + + private: + XFA_FM_AccessorIndex m_accessorIndex; + bool m_bIsStarIndex; +}; + +class CXFA_FMDotDotAccessorExpression : public CXFA_FMBinExpression { + public: + CXFA_FMDotDotAccessorExpression( + uint32_t line, + std::unique_ptr<CXFA_FMSimpleExpression> pAccessor, + XFA_FM_TOKEN op, + CFX_WideStringC wsIdentifier, + std::unique_ptr<CXFA_FMSimpleExpression> pIndexExp); + ~CXFA_FMDotDotAccessorExpression() override; + + bool ToJavaScript(CFX_WideTextBuf& javascript) override; + + private: + CFX_WideStringC m_wsIdentifier; +}; + +class CXFA_FMMethodCallExpression : public CXFA_FMBinExpression { + public: + CXFA_FMMethodCallExpression( + uint32_t line, + std::unique_ptr<CXFA_FMSimpleExpression> pAccessorExp1, + std::unique_ptr<CXFA_FMSimpleExpression> pCallExp); + ~CXFA_FMMethodCallExpression() override {} + bool ToJavaScript(CFX_WideTextBuf& javascript) override; +}; + +bool CFXA_IsTooBig(const CFX_WideTextBuf& javascript); + +#endif // XFA_FXFA_FM2JS_CXFA_FMSIMPLEEXPRESSION_H_ |