📄 style.h
字号:
#ifndef __style_h__
#define __style_h__
#include "afxtempl.h"
#include "afxmt.h"
#include "unibus.h"
#include "Scaner.h"
void WriteError(char * filename,int line,char * samp,char * error);
typedef COMMANDRESULT (APIENTRY * COMMPARSEFN)(UniVar * pdwParamList,int iVarNum=0);
class CStyle ;
class AFX_EXT_CLASS CFunctionRegister
{
public:
CFunctionRegister(){m_pStyle=NULL;};
virtual ~CFunctionRegister(){};
CStyle * m_pStyle;
virtual COMMPARSEFN FindFunction(DWORD dwFunctionId){return NULL;};
virtual void OnRegisterBaseStyle(){};
bool AddStyle(char *filename);
void AddSystemVariant(LPSTR lpCommand,DWORD dwCommandId);
bool AddSystemCommand(LPSTR lpCommand,DWORD dwCommandId,UniVar var=InValidVar,...);
};
#define WORD_VERION 0x20
#define WORD_VARIANT 0x21
#define WORD_COMMAND 0x22
#define WORD_EVENT 0x23
#define WORD_PARAM 0x24
#define WORD_OIDENTY 0x25
#define WORD_PARENTSTYLE 0x26
#define WORD_CONST 0x27
#define WORD_STATIC 0x28
#define WORD_INCLUDE 0x29
#define WORD_INT_TYPE 0x30
#define WORD_FLOAT_TYPE 0x31
#define WORD_STRING_TYPE 0x32
#define WORD_DWORD_TYPE 0x33
#define WORD_HANDLE_TYPE 0x34
#define WORD_NOPARAM 0x40
#define WORD_UNKNOWN 0x41
#define WORD_PARAMIN 0x50
#define WORD_PARAMINOUT 0x51
#define TYPE_INT 0x00000000
#define TYPE_FLOAT 0x01000000
#define TYPE_DWORD 0x02000000
#define TYPE_STRING 0x03000000
#define TYPE_HANDLE 0x04000000
#define DTYPE_FILTER 0x0f000000
#define ITYPE_FILTER 0xf0000000
#define UTYPE_FILTER 0xf0000000
#define POSID_FILTER 0x00ffffff
#define STYPE_FILTER 0xff000000
struct WORDTABLE{
LPSTR lpWord;
DWORD dwIdenty;
};
struct EVENTTABLE{
DWORD dwUserEventId;
};
struct CONSTVAR{
LPSTR lpConst;
LPSTR lpName;
DWORD dwId;
};
struct COMMANDSTRUCT{
DWORD dwCommandId;
int ParamNum;
int iStartParam;
COMMPARSEFN pFn;
};
#define USE_TYPE_IN 0
#define USE_TYPE_INOUT 1
#define TYPE_CONST 0xf0000000
#define TYPE_VARIANT 0xe0000000
#define TYPE_GLOBALVAR 0xd0000000
#define TYPE_LOCALVAR 0xc0000000
#define TYPE_EXPR 0xb0000000
#define TYPE_STATIC 0x50000000
#define TYPE_COMMAND 0xa0000000
#define TYPE_FUNCTION 0x90000000
#define TYPE_EVENT 0x80000000
#define TYPE_LABEL 0x70000000
#define TYPE_BNODE 0x60000000
#define TYPE_SYSTEM 0x00000000
class AFX_EXT_CLASS CStyle
{
private:
WORDTABLE * m_pstkStyleWord;
CScanner * m_pScanner;
int m_iuser;
int m_icLine;
int m_ierror;
// HANDLE m_hCompile;
public:
void AddRef(){m_iuser++;};
void Release(){m_iuser--;};
CStyle(CFunctionRegister * pRegister,LPSTR lpStyleFile);
virtual ~CStyle();
CArray <PARAMEMTER,PARAMEMTER&> m_ParamArray;
CArray <COMMANDSTRUCT, COMMANDSTRUCT&> m_CommandList;
CArray <EVENTTABLE,EVENTTABLE&> m_UserEventList;
CString m_csVersion;
CMapStringToPtr m_StyleStrTable;
CFunctionRegister * m_pRegister;
CString m_csFileName;
CArray<CONSTVAR,CONSTVAR&> m_ListConst;
BOOL GetStyle();
BOOL ReadLine();
void SetRegister();
static CMapStringToPtr m_StrStyleCommand;
void WriteError(LPCTSTR pName,int line,char * samp,char * error){
::WriteError((LPSTR)pName,line,samp,error);
};
void AddSystemCommand(LPSTR lpCommand,DWORD dwCommandId,int ParamNum,UniVar * pParam);
void AddSystemVariant(LPSTR lpCommand,DWORD dwCommandId);
bool AddStyle(char *filename);
};
class AFX_EXT_CLASS CStyleMg{
public:
CArray<CStyle *,CStyle *> m_StyleList;
CRITICAL_SECTION statArea;
CArray<UniVar,UniVar>m_StaVarList;
CMapStringToPtr m_StaVarMap;
DWORD AddStaticVar(LPCTSTR);
BOOL SetStaVar(DWORD dwId,UniVar uv);
BOOL GetStaVar(DWORD dwId,UniVar & uv);
CStyle * GetStyle(CFunctionRegister * pRegister,LPSTR lpStyleFile){
CStyle * pStyle=FindStyle(pRegister,lpStyleFile);
if(pStyle)return pStyle;
pStyle=new CStyle(pRegister,lpStyleFile);
if(pStyle){
if(!pStyle->GetStyle()){
delete pStyle;
pStyle=NULL;
}
else
m_StyleList.Add(pStyle);
}
return pStyle;
};
CStyle * FindStyle(CFunctionRegister * pRegister,LPSTR lpStyleFile)
{
for(int i=0;i<m_StyleList.GetSize();i++){
if(!m_StyleList[i]->m_csFileName.CompareNoCase(lpStyleFile)
&&m_StyleList[i]->m_pRegister==pRegister)
return m_StyleList[i];
}
return NULL;
};
CStyleMg();
~CStyleMg(){
for(int i=0;i<m_StyleList.GetSize();i++){
delete m_StyleList[i];
}
CStyle::m_StrStyleCommand.RemoveAll();
DeleteCriticalSection(&statArea);
};
};
extern CStyleMg gpStyleMg;
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -