当前位置: 首页>>代码示例>>C++>>正文


C++ Tag::Set方法代码示例

本文整理汇总了C++中Tag::Set方法的典型用法代码示例。如果您正苦于以下问题:C++ Tag::Set方法的具体用法?C++ Tag::Set怎么用?C++ Tag::Set使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在Tag的用法示例。


在下文中一共展示了Tag::Set方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: Parse

// 解析页面模板
int Page::Parse()
{
    FUNCTION_TRACK(); // 函数轨迹跟踪

    FileObj file;

    // 文件名空,则不解析;
    if("" == m_html)
    {
        LOG_DEBUG("no html file. [%s]", m_id.c_str());
        return OK;
    }

    if( !file.Open(m_html) )
    {
        LOG_ERROR("Can't open html template file: [%s]", m_html.c_str());
        return ERR;
    }

    int ret;
    const int nFileSize = file.Size();
    std::auto_ptr<char> tmp(new char [nFileSize + 1]);
    char * const buf = tmp.get();

    if(NULL == buf)
    {
        LOG_ERROR("分配内存出错");
        return ERR;
    }

    ret = file.Read(buf, nFileSize);
    if(nFileSize != ret)
    {
        LOG_ERROR("读取文件不完整,[%d/%d]", ret, nFileSize);
        return ERR;
    }
    buf[ret] = '\0';
    //LOG_DEBUG("nFileSize=[%d], file=[%s]", nFileSize, buf);

    m_TagList = new vector< Tag * >;
    if(NULL == m_TagList)
    {
        LOG_ERROR("分配标记容器内存出错");
        return ERR;
    }


    vector< Tag * > &list = (*m_TagList);


    char *pBuf = buf;

    while(NULL != pBuf)
    {
        char *left;
        char *right;
        char *txt = pBuf;   // 正常文本部分
        char *tag = NULL;     // 标记部分

        // 查找标记如:"<!--$.......$-->"
        if( (left = strstr(pBuf, TAG_LEFT)) != NULL
            && (right = strstr(left, TAG_RIGHT)) != NULL
          )
        {
            *left = '\0';   // 去掉左边括号
            *right = '\0';  // 去掉右边括号
            tag = left + (sizeof(TAG_LEFT) - 1);    // 跳过左边括号(指向标记部分)
            pBuf = right + (sizeof(TAG_RIGHT) - 1);    // 跳过右边括号后,指向下段文本;
        }
        else
        {
            pBuf = NULL;    // 准备结束操作
        }

        /*
         * 每个段文件(及标记),对应一个处理对象;
         */

        // 正常文本
        {
            Tag *objTxt;
            if( '\0' != *txt
                && (objTxt = Tag::New("", "TXT")) != NULL // "TXT"对应文件处理对象
              )
            {
                // 设置标记,及类型为文本;
                objTxt->Set(txt, Tag::TXT);
                // 插入列队
                list.push_back(objTxt);
                //LOG_DEBUG("插入标记对象:[%d][%s]", Tag::TXT, txt);
            }
            else
            {
                LOG_ERROR("Can't find object of tag: [%s] [%s]", m_html.c_str(), txt);
            }
        }

        // 处理标记
        if(NULL != tag && '\0' != tag)
//.........这里部分代码省略.........
开发者ID:rocky2shi,项目名称:NoteSrv,代码行数:101,代码来源:Page.cpp


注:本文中的Tag::Set方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。