Gray C++ Libraries  0.0.2
A set of C++ libraries for MSVC, GNU on Windows, WinCE, Linux
cScriptExec.h
Go to the documentation of this file.
1 //
5 //
6 
7 #ifndef _INC_cScriptExec_H
8 #define _INC_cScriptExec_H
9 #ifndef NO_PRAGMA_ONCE
10 #pragma once
11 #endif
12 
13 #include "../Expression/cExpressionExec.h"
14 #include "../Scriptable/cScriptableInterface.h"
15 #include "../ScriptContext/cScriptContext.h"
16 
17 #ifdef USE_EXPRESSION
18 #include "../Variant/cVarMap.h"
19 #include "../Http/cHttpCommon.h"
21 
22 namespace GrayLib
23 {
25 
27  {
32 
35  };
37  {
39 #define cScriptExecFunc(a,b) SCRIPTCMD_##a,
40 #include "cScriptExecFunc.tbl"
41 #undef cScriptExecFunc
43  };
44 
46  {
51 
52  typedef cExpressionExec SUPER_t;
53 
54  protected:
55  static const ATOMCHAR_t* const k_szScriptFuncs[];
56 
57  private:
58  HRESULT ParseArgs_ExtProp(const IniChar_t*& pszExp, OUT cVariant& vArgsRet);
59  HRESULT ParseArgs_Prop(const cScriptableProp* pProp, const IniChar_t*& rpszExp, OUT cVariant& vArgs);
60 
61  HRESULT ExecuteFunction_Prop(cScriptContext* pContext, IScriptableObj* pScriptable, const cScriptableProp* pProp, const IniChar_t*& pszExp, OUT cVariant& vValRet);
62  HRESULT ExecuteFunction_1(const IniChar_t*& pszExp, OUT cVariant& vValRet, EXP_PARSE_MASK_t uParseFlags);
63 
64  HRESULT ExecuteSectionMode(const cIniSectionData* pSection, OUT ITERATE_t& iLine, OUT cVariant& vValRet, SCRIPTRUN_TYPE eRunMode);
65 
66  protected:
67  StrLen_t ParseArgs_BlockReplacement(OUT IniChar_t* pszDest, StrLen_t nLenMax, const IniChar_t* pszSrc, bool bHTML = false);
68  IniChar_t* ParseArgs(OUT IniChar_t* pszDest, StrLen_t nLenMax, const IniChar_t* pszSrc, SCRIPTCMD_TYPE eCmd);
69 
70  public:
71  cScriptExec(cScriptContext* pContext = nullptr);
72  virtual ~cScriptExec();
73 
75  virtual HRESULT ExecuteFunctionInt(const IniChar_t*& pszExp, OUT cVariant& vValRet, EXP_PARSE_MASK_t uParseFlags) override;
76 
78  HRESULT ExecuteSection(const cIniSectionData* pSection, OUT ITERATE_t& iLine, OUT cVariant& vValRet);
79 
81  {
82  return DYNPTR_CAST(cScriptContext, SUPER_t::get_ContextCurrent());
83  }
84 
86  };
87 
89  {
92 
93  public:
95  const bool m_bHTML;
96 
97  public:
98  cScriptExecGetter(cScriptExec* pExec, bool bHTML)
99  : m_pExec(pExec)
100  , m_bHTML(bHTML)
101  {
102  ASSERT(pExec != nullptr);
103  }
104  virtual HRESULT PropGet(const char* pszPropTag, OUT cStringI& rsValue) const override
105  {
106  // IIniBaseGetter
107  // @note pszPropTag isn't really a property at all.
108  cVariant vValRet;
109  HRESULT hRes = m_pExec->GetVarRef2(pszPropTag, vValRet, false);
110  if (FAILED(hRes))
111  {
112  return hRes;
113  }
114  if (vValRet.isEmptyVar() && m_bHTML)
115  {
116  rsValue = cHttpCommon::k_Space;
117  return S_OK;
118  }
119  rsValue = vValRet.get_StrT<IniChar_t>(); // make a string.
120  return S_OK;
121  }
122  };
123 }
124 #endif // USE_EXPRESSION
125 #endif // _INC_cScriptExec_H
#define GRAYLIB_LINK
Definition: GrayLibBase.h:35
#define FAILED(x)
Definition: HResult.h:30
#define DYNPTR_CAST(t, p)
Definition: PtrCast.h:22
INT32 HRESULT
_WIN32 style error codes. INT32
Definition: SysTypes.h:465
#define ASSERT(exp)
Definition: cDebugAssert.h:87
Definition: cExpressionBase.h:27
Definition: cExpressionExec.h:37
virtual HRESULT GetVarRef2(const ATOMCHAR_t *&rpszExp, OUT cVariant &vValRet, bool bInArray) override
Definition: cScriptContext.h:24
Definition: cScriptExec.h:89
cScriptExecGetter(cScriptExec *pExec, bool bHTML)
Definition: cScriptExec.h:98
const bool m_bHTML
Definition: cScriptExec.h:95
virtual HRESULT PropGet(const char *pszPropTag, OUT cStringI &rsValue) const override
Definition: cScriptExec.h:104
cScriptExec *const m_pExec
Definition: cScriptExec.h:94
Definition: cScriptExec.h:46
UNITTEST2_PREDEF(cScriptExec)
cScriptContext * get_ContextCurrent() const
Definition: cScriptExec.h:80
Definition: cScriptableInterface.h:97
Definition: cVariant.h:26
cStringT< _TYPE_CH > get_StrT() const
bool isEmptyVar() const
Definition: cVariant.cpp:87
Definition: cIniSection.h:71
Definition: IScriptableObj.h:71
Definition: cMesh.h:22
UNITTEST2_PREDEF(cQuadtree)
SCRIPTRUN_TYPE
Definition: cScriptExec.h:27
@ SCRIPTRUN_BLOCK_FALSE
Just ignore this whole code block.
Definition: cScriptExec.h:31
@ SCRIPTRUN_SINGLE_TRUE
Execute just this line or blocked segment.
Definition: cScriptExec.h:33
@ SCRIPTRUN_SINGLE_FALSE
ignore just this line or blocked segment.
Definition: cScriptExec.h:34
@ SCRIPTRUN_BLOCK_TRUE
execute this code block normally.
Definition: cScriptExec.h:30
WORD EXP_PARSE_MASK_t
EXP_PARSE_TYPE_ Flags.
Definition: cExpressionExec.h:34
SCRIPTCMD_TYPE
Definition: cScriptExec.h:37
@ SCRIPTCMD_QTY
Definition: cScriptExec.h:42
int StrLen_t
the length of a string in chars (bytes for UTF8, wchar_t for UNICODE). or offset in characters....
Definition: StrConst.h:32
int ITERATE_t
like size_t but signed
Definition: Index.h:28
char IniChar_t
char format even on UNICODE system! Screw M$, INI files should ALWAYS have UTF8 contents
Definition: cIniBase.h:17
char ATOMCHAR_t
the char form (UNICODE or not) for an atom. (for symbolic names)
Definition: StrConst.h:15
static const char * k_Space
" "
Definition: cHttpCommon.h:52
Definition: cIniBase.h:28