diff options
Diffstat (limited to 'xfa/fxfa/fm2js/cxfa_fmexpression.h')
-rw-r--r-- | xfa/fxfa/fm2js/cxfa_fmexpression.h | 214 |
1 files changed, 214 insertions, 0 deletions
diff --git a/xfa/fxfa/fm2js/cxfa_fmexpression.h b/xfa/fxfa/fm2js/cxfa_fmexpression.h new file mode 100644 index 0000000000..c04bc2f117 --- /dev/null +++ b/xfa/fxfa/fm2js/cxfa_fmexpression.h @@ -0,0 +1,214 @@ +// 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_FMEXPRESSION_H_ +#define XFA_FXFA_FM2JS_CXFA_FMEXPRESSION_H_ + +#include <memory> +#include <vector> + +#include "xfa/fxfa/fm2js/cxfa_fmsimpleexpression.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: + explicit CXFA_FMExpression(uint32_t line); + CXFA_FMExpression(uint32_t line, XFA_FM_EXPTYPE type); + virtual ~CXFA_FMExpression() {} + virtual bool ToJavaScript(CFX_WideTextBuf& javascript); + virtual bool ToImpliedReturnJS(CFX_WideTextBuf&); + uint32_t GetLine() { return m_line; } + XFA_FM_EXPTYPE GetExpType() const { return m_type; } + + private: + XFA_FM_EXPTYPE m_type; + uint32_t m_line; +}; + +class CXFA_FMFunctionDefinition : public CXFA_FMExpression { + public: + // Takes ownership of |arguments| and |expressions|. + CXFA_FMFunctionDefinition( + uint32_t line, + bool isGlobal, + const CFX_WideStringC& wsName, + std::vector<CFX_WideStringC>&& arguments, + std::vector<std::unique_ptr<CXFA_FMExpression>>&& expressions); + ~CXFA_FMFunctionDefinition() override; + + bool ToJavaScript(CFX_WideTextBuf& javascript) override; + bool ToImpliedReturnJS(CFX_WideTextBuf&) override; + + private: + CFX_WideStringC m_wsName; + std::vector<CFX_WideStringC> m_pArguments; + std::vector<std::unique_ptr<CXFA_FMExpression>> m_pExpressions; + bool m_isGlobal; +}; + +class CXFA_FMVarExpression : public CXFA_FMExpression { + public: + CXFA_FMVarExpression(uint32_t line, + const CFX_WideStringC& wsName, + std::unique_ptr<CXFA_FMExpression> pInit); + ~CXFA_FMVarExpression() override; + + bool ToJavaScript(CFX_WideTextBuf& javascript) override; + bool ToImpliedReturnJS(CFX_WideTextBuf&) override; + + private: + CFX_WideStringC m_wsName; + std::unique_ptr<CXFA_FMExpression> m_pInit; +}; + +class CXFA_FMExpExpression : public CXFA_FMExpression { + public: + CXFA_FMExpExpression(uint32_t line, + std::unique_ptr<CXFA_FMSimpleExpression> pExpression); + ~CXFA_FMExpExpression() override; + + bool ToJavaScript(CFX_WideTextBuf& javascript) override; + bool ToImpliedReturnJS(CFX_WideTextBuf&) override; + + private: + std::unique_ptr<CXFA_FMSimpleExpression> m_pExpression; +}; + +class CXFA_FMBlockExpression : public CXFA_FMExpression { + public: + CXFA_FMBlockExpression( + uint32_t line, + std::vector<std::unique_ptr<CXFA_FMExpression>>&& pExpressionList); + ~CXFA_FMBlockExpression() override; + + bool ToJavaScript(CFX_WideTextBuf& javascript) override; + bool ToImpliedReturnJS(CFX_WideTextBuf&) override; + + private: + std::vector<std::unique_ptr<CXFA_FMExpression>> m_ExpressionList; +}; + +class CXFA_FMDoExpression : public CXFA_FMExpression { + public: + CXFA_FMDoExpression(uint32_t line, std::unique_ptr<CXFA_FMExpression> pList); + ~CXFA_FMDoExpression() override; + + bool ToJavaScript(CFX_WideTextBuf& javascript) override; + bool ToImpliedReturnJS(CFX_WideTextBuf&) override; + + private: + std::unique_ptr<CXFA_FMExpression> m_pList; +}; + +class CXFA_FMIfExpression : public CXFA_FMExpression { + public: + CXFA_FMIfExpression(uint32_t line, + std::unique_ptr<CXFA_FMSimpleExpression> pExpression, + std::unique_ptr<CXFA_FMExpression> pIfExpression, + std::unique_ptr<CXFA_FMExpression> pElseExpression); + ~CXFA_FMIfExpression() override; + + bool ToJavaScript(CFX_WideTextBuf& javascript) override; + bool ToImpliedReturnJS(CFX_WideTextBuf&) override; + + private: + std::unique_ptr<CXFA_FMSimpleExpression> m_pExpression; + std::unique_ptr<CXFA_FMExpression> m_pIfExpression; + std::unique_ptr<CXFA_FMExpression> m_pElseExpression; +}; + +class CXFA_FMLoopExpression : public CXFA_FMExpression { + public: + explicit CXFA_FMLoopExpression(uint32_t line) : CXFA_FMExpression(line) {} + ~CXFA_FMLoopExpression() override; + bool ToJavaScript(CFX_WideTextBuf& javascript) override; + bool ToImpliedReturnJS(CFX_WideTextBuf&) override; +}; + +class CXFA_FMWhileExpression : public CXFA_FMLoopExpression { + public: + CXFA_FMWhileExpression(uint32_t line, + std::unique_ptr<CXFA_FMSimpleExpression> pCodition, + std::unique_ptr<CXFA_FMExpression> pExpression); + ~CXFA_FMWhileExpression() override; + + bool ToJavaScript(CFX_WideTextBuf& javascript) override; + bool ToImpliedReturnJS(CFX_WideTextBuf&) override; + + private: + std::unique_ptr<CXFA_FMSimpleExpression> m_pCondition; + std::unique_ptr<CXFA_FMExpression> m_pExpression; +}; + +class CXFA_FMBreakExpression : public CXFA_FMExpression { + public: + explicit CXFA_FMBreakExpression(uint32_t line); + ~CXFA_FMBreakExpression() override; + bool ToJavaScript(CFX_WideTextBuf& javascript) override; + bool ToImpliedReturnJS(CFX_WideTextBuf&) override; +}; + +class CXFA_FMContinueExpression : public CXFA_FMExpression { + public: + explicit CXFA_FMContinueExpression(uint32_t line); + ~CXFA_FMContinueExpression() override; + bool ToJavaScript(CFX_WideTextBuf& javascript) override; + bool ToImpliedReturnJS(CFX_WideTextBuf&) override; +}; + +class CXFA_FMForExpression : public CXFA_FMLoopExpression { + public: + CXFA_FMForExpression(uint32_t line, + const CFX_WideStringC& wsVariant, + std::unique_ptr<CXFA_FMSimpleExpression> pAssignment, + std::unique_ptr<CXFA_FMSimpleExpression> pAccessor, + int32_t iDirection, + std::unique_ptr<CXFA_FMSimpleExpression> pStep, + std::unique_ptr<CXFA_FMExpression> pList); + ~CXFA_FMForExpression() override; + + bool ToJavaScript(CFX_WideTextBuf& javascript) override; + bool ToImpliedReturnJS(CFX_WideTextBuf&) override; + + private: + CFX_WideStringC m_wsVariant; + std::unique_ptr<CXFA_FMSimpleExpression> m_pAssignment; + std::unique_ptr<CXFA_FMSimpleExpression> m_pAccessor; + const bool m_bDirection; + std::unique_ptr<CXFA_FMSimpleExpression> m_pStep; + std::unique_ptr<CXFA_FMExpression> m_pList; +}; + +class CXFA_FMForeachExpression : public CXFA_FMLoopExpression { + public: + // Takes ownership of |pAccessors|. + CXFA_FMForeachExpression( + uint32_t line, + const CFX_WideStringC& wsIdentifier, + std::vector<std::unique_ptr<CXFA_FMSimpleExpression>>&& pAccessors, + std::unique_ptr<CXFA_FMExpression> pList); + ~CXFA_FMForeachExpression() override; + + bool ToJavaScript(CFX_WideTextBuf& javascript) override; + bool ToImpliedReturnJS(CFX_WideTextBuf&) override; + + private: + CFX_WideStringC m_wsIdentifier; + std::vector<std::unique_ptr<CXFA_FMSimpleExpression>> m_pAccessors; + std::unique_ptr<CXFA_FMExpression> m_pList; +}; + +#endif // XFA_FXFA_FM2JS_CXFA_FMEXPRESSION_H_ |