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);
}