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

📄 hwordstreamex.cpp

📁 积下的一点C++编程序库源码
💻 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 + -