36. process character


文章作者: cyclezone
版权声明: 本文为博主「cyclezone」的原创文章,采用 CC BY 4.0 许可协议。转载请附上原文出处链接和本声明 cyclezone !

36. process character

void process(const char* lpszString)
{
  const char*		lpszBegin	= lpszString;
  const char*		lpszEnd		= NULL;

  // skip space 
  while(::isspace(*lpszBegin))
    lpszBegin = ::_tcsinc(lpszBegin);

  // begine with '<' ?
  if(*lpszBegin != _T('<'))
    return 0;

  // skip'<'
  lpszBegin = ::_tcsinc(lpszBegin);

  // if empty ,return
  if(*lpszBegin == _T('>'))
      return;

        bool bClosingTag =false;
  // check label is character or not
  if(!::isalpha(*lpszBegin))
  {
    bClosingTag = (*lpszBegin==_T('/'));
    if(bClosingTag)
      lpszBegin = ::_tcsinc(lpszBegin);
    else
      return 0;
  }

  bOpeningTag = !bClosingTag;
  lpszEnd = lpszBegin;
  do
  {
    // include (a-z, A-Z) \(0-9) \'-' \'-' \':' \'.'
    if((!::isalnum(*lpszEnd)) && 
      (*lpszEnd!=_T('-')) && (*lpszEnd!=_T(':')) && 
      (*lpszEnd!=_T('_')) && (*lpszEnd!=_T('.')))
    {
      // if illegal
      ASSERT(lpszEnd != lpszBegin);

      // check state
      if(*lpszEnd==NULL || ::isspace(*lpszEnd) || 
        *lpszEnd == _T('>') || (*lpszEnd == _T('/') && 
        (!bClosingTag)))
      {
        break;
      }
      return 0;
    }

    // contine process next
    lpszEnd = ::_tcsinc(lpszEnd);
  } while(true);
}
文章作者: cyclezone
版权声明: 本文为博主「cyclezone」的原创文章,采用 CC BY 4.0 许可协议。转载请附上原文出处链接和本声明 cyclezone !

评论
  目录