📄 hwordstreamex.cpp
字号:
// HWordStreamEx.cpp: implementation of the HWordStreamEx class.
//
//////////////////////////////////////////////////////////////////////
#include "HWordStreamEx.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
//可显示字符,从020开始, !"#$%&'()*+,-./09:;<=>?AZ[\]^_`abcdez{|}~
CHAR_RANG g_RangeChar[]={
{' ',(char)0x7f},
{(char)0x80,(char)0xff},////汉字的字符范围
};
//不包括“\”的任何字符,
CHAR_RANG g_RangeChar_NotZY[]={
{' ','['},
{']',(char)0x7f},
{(char)0x80,(char)0xff},////汉字的字符范围
};
//不包括双引号“"”和“\”的任何字符
CHAR_RANG g_RangeString[]={
{' ','!'},
{'#','['},
{']',(char)0x7f},
{(char)0x80,(char)0xff},////汉字的字符范围
};
/////////////////////////////////////////////////////////////////////
//以一个单引号结束一个字符
BEGIN_STATE_MAP(g_SingelQuoteTable,HWordStreamEx)
MAP_STATE_SET("'",WORD_CHAR,NULL)
END_STATE_MAP()
//单字符转义符之后可跟的内容
BEGIN_STATE_MAP(g_ZhuanYiCharTable,HWordStreamEx)
MAP_STATE_RANGE(g_RangeChar,WORD_CHAR,g_SingelQuoteTable)
END_STATE_MAP()
//字符串中转义符之后可跟的内容
BEGIN_STATE_MAP(g_ZhuanYiStringTable,HWordStreamEx)
MAP_STATE_RANGE(g_RangeChar, WORD_STRING, g_StringTable)
END_STATE_MAP()
//字符刚开始的内容
//用来匹配单个字符如要:'A','\t'
BEGIN_STATE_MAP(g_CharacterTable,HWordStreamEx)
MAP_STATE_RANGE(g_RangeChar_NotZY,WORD_CHAR,g_SingelQuoteTable)
MAP_STATE_SET("\\",WORD_CHAR,g_ZhuanYiCharTable)
END_STATE_MAP()
//用来匹配一个字符串如:“when i was young”
BEGIN_STATE_MAP(g_StringTable,HWordStreamEx)
MAP_STATE_SET("\"", WORD_STRING, NULL)
MAP_STATE_RANGE(g_RangeString, WORD_STRING, g_StringTable)
MAP_STATE_SET("\\", WORD_STRING, g_ZhuanYiStringTable)
END_STATE_MAP()
//注释行后可跟的字符
//用来匹配注释行如://not code here
BEGIN_STATE_MAP(g_RemTable,HWordStreamEx)
MAP_STATE_RANGE(g_RangeChar,WORD_REM,g_RemTable)
END_STATE_MAP()
HWordStreamEx::HWordStreamEx()
{
}
HWordStreamEx::~HWordStreamEx()
{
}
int HWordStreamEx::MacthWord(H_WORD &word,CHAR_MAPITEM *pMap)
{
char c;
do {
c=GetOneChar();
if(word.dwWordLen<MAX_NAME_LEN)
{
word.szWord[word.dwWordLen]=c;
word.dwWordLen++;
}
word.dwStringLen ++;
} while(pMap=FindNextState(pMap,c,&word.type));
if(IsBacked())
{
word.dwStringLen--;
word.dwWordLen--;
}
word.szWord[word.dwWordLen]=0;
return 0;
}
int HWordStreamEx::GetOneWord(H_WORD &word)
{
int state;
for(;;)
{
state=HWordStream::GetOneWord(word);
switch(word.type)
{
case WORD_SPACE:
case WORD_TAB:
break;
case WORD_SINGEL_QUOTE:
this->m_Colum-=word.dwStringLen;
state= this->MacthWord(word,g_CharacterTable);
this->m_Colum+=word.dwStringLen;
return state;
case WORD_DOUBLE_QUOTE:
this->m_Colum-=word.dwStringLen;
state= this->MacthWord(word,g_StringTable);
this->m_Colum+=word.dwStringLen;
return state;
case WORD_REM:
this->m_Colum-=word.dwStringLen;
state= this->MacthWord(word,g_RemTable);
this->m_Colum+=word.dwStringLen;
break;
default:
return state;
}
}
return 0;//永不会执行到这里
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -