⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cftanalyser.h

📁 与游戏,网络,输入法相关
💻 H
字号:
// 自定义格式化文本代码
// 作者: Janhail Luo
// 最后整理: 2003-03-03
//////////////////////////////////////////////////////////////////////

#ifndef _CFTANALYSER_H_
#define _CFTANALYSER_H_

#include <map>
#include <list>
#include <stack>
#include <vector>
#include <string.h>
using namespace std;

class CCFTAnalyser  
{
public:
    struct SItem
    {
        int                     iType;      // 节点类型, 0 元素, 1 元素内容
        CString                 strName;    // 标记名字
        map<CString, CString>   listParm;   // 属性表
        vector<SItem*>          listNode;   // 子元素列表
        void*                   pData;      // 用户自定义数据
    };

public:
    // 构造函数
	CCFTAnalyser();

    // 析构函数
	virtual ~CCFTAnalyser();

public:
    // 初始化,
    // szString是一个以0结尾的字符串,里面保存的是需要分析的字符串
    // szName是一个以0结尾的字符串,里面保存这次分析的名字
    // 返回true表是分析正确,返回false表是分析错误。
    bool        Init(const char* szString, const char* szName);

    // 清除
    void        Clear();

    // 访问所有的字节点
    // iType传入一个用户定义的参数
    // pParam也是传入一个用户自定义的一个指针
    void        Visitor(int iType, void* pParam);

protected:
    // 分析字符串szStr
    // 如果分析成功完成就返回true
    // 否则返回 false
    bool        Analyse(const char* szStr);

    // 当分析程序碰到一个标记时调用这个函数
    // iState 当前分析状态
    // szStart 指向标记开始部分的指针
    // szEnd 指向标记结束部分的指针
    bool        DoTag(int iState, char* szStart, char* szEnd);

    // 当分析程序碰到一个属性时调用这个函数
    // iState 当前分析状态
    // szStart 指向标记开始部分的指针
    // szEnd 指向标记结束部分的指针
    bool        DoItem(int iState, char* szStart, char* szEnd);

    // 访问某一个节点
    // iType 是用户自定义的参数
    // iDepth 是这个节点在节点树中的层次,根节点的层次为0
    // pItem 是当前访问的节点
    // pParam 是用户自定义的一个指针
    void        VisitItem(int iType, int iDepth,
                CCFTAnalyser::SItem* pItem, void* pParam);

protected:
    // 当创建一个新的节点的时候就会调用这个函数
    // pItem 当前创建的节点的指针
    virtual void  OnCreateItem(CCFTAnalyser::SItem* pItem);

    // 当销毁一个节点的时候就会调用这个函数
    // pItem 当前销毁的节点的指针
    virtual void  OnDestroyItem(CCFTAnalyser::SItem* pItem);

    // 访问一个节点前,这是一个虚函数,用户可以自定义这个函数
    // iType 是用户自定义的参数
    // iDepth 是这个节点在节点树中的层次,根节点的层次为0
    // pItem 是当前访问的节点
    // pParam 是用户自定义的一个指针
    virtual void  OnVisitBefore(int iType, int iDepth,
                CCFTAnalyser::SItem* pItem, void* pParam);

    // 访问一个节点,这是一个虚函数,用户可以自定义这个函数
    // iType 是用户自定义的参数
    // iDepth 是这个节点在节点树中的层次,根节点的层次为0
    // pItem 是当前访问的节点
    // pParam 是用户自定义的一个指针
    virtual void  OnVisit(int iType, int iDepth,
                CCFTAnalyser::SItem* pItem, void* pParam);

    // 访问一个节点后,这是一个虚函数,用户可以自定义这个函数
    // iType 是用户自定义的参数
    // iDepth 是这个节点在节点树中的层次,根节点的层次为0
    // pItem 是当前访问的节点
    // pParam 是用户自定义的一个指针
    virtual void  OnVisitAfter(int iType, int iDepth,
                CCFTAnalyser::SItem* pItem, void* pParam);

protected:
    CString         m_Name;
    SItem           m_Root;     // 根节点
    stack<SItem*>   m_Stack;

};

#endif // _CFTANALYSER_H_

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -