亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? deelx.h

?? 看看吧C加加環境下的正則表達式引擎deelx
?? H
?? 第 1 頁 / 共 5 頁
字號:
{
public:
	int Match    (CContext * pContext) const;
	int MatchNext(CContext * pContext) const;

public:
	CBoundaryElxT(int ntype, int byes = 1);

protected:
	static int IsWordChar(CHART ch);

public:
	int m_ntype;
	int m_byes;
};

//
// Implementation
//
template <class CHART> CBoundaryElxT <CHART> :: CBoundaryElxT(int ntype, int byes)
{
	m_ntype = ntype;
	m_byes  = byes;
}

template <class CHART> int CBoundaryElxT <CHART> :: Match(CContext * pContext) const
{
	const CHART * pcsz  = (const CHART *)pContext->m_pMatchString;
	int npos = pContext->m_nCurrentPos;
	int tlen = pContext->m_pMatchStringLength;

	CHART chL = npos > 0    ? pcsz[npos - 1] : 0;
	CHART chR = npos < tlen ? pcsz[npos    ] : 0;

	int bsucc = 0;

	switch(m_ntype)
	{
	case BOUNDARY_FILE_BEGIN:
		bsucc = (npos <= 0);
		break;

	case BOUNDARY_FILE_END:
		bsucc = (npos >= tlen);
		break;

	case BOUNDARY_LINE_BEGIN:
		bsucc = (npos <= 0   ) || (chL == RCHART('\n')) || ((chL == RCHART('\r')) && (chR != RCHART('\n')));
		break;

	case BOUNDARY_LINE_END:
		bsucc = (npos >= tlen) || (chR == RCHART('\r')) || ((chR == RCHART('\n')) && (chL != RCHART('\r')));
		break;

	case BOUNDARY_WORD_BEGIN:
		bsucc = ! IsWordChar(chL) &&   IsWordChar(chR);
		break;

	case BOUNDARY_WORD_END:
		bsucc =   IsWordChar(chL) && ! IsWordChar(chR);
		break;

	case BOUNDARY_WORD_EDGE:
		bsucc =   IsWordChar(chL) ?  ! IsWordChar(chR) : IsWordChar(chR);
		break;
	}

	return bsucc;
}

template <class CHART> int CBoundaryElxT <CHART> :: MatchNext(CContext *) const
{
	return 0;
}

template <class CHART> inline int CBoundaryElxT <CHART> :: IsWordChar(CHART ch)
{
	return (ch >= RCHART('A') && ch <= RCHART('Z')) || (ch >= RCHART('a') && ch <= RCHART('z')) || (ch >= RCHART('0') && ch <= RCHART('9')) || (ch == RCHART('_'));
}

//
// Bracket
//
template <class CHART> class CBracketElxT : public ElxInterface  
{
public:
	int Match    (CContext * pContext) const;
	int MatchNext(CContext * pContext) const;

public:
	CBracketElxT(int nnumber, int bright);

public:
	int m_nnumber;
	int m_bright;

	CBufferT <CHART> m_szNamed;
};

template <class CHART> CBracketElxT <CHART> :: CBracketElxT(int nnumber, int bright)
{
	m_nnumber = nnumber;
	m_bright  = bright;
}

template <class CHART> int CBracketElxT <CHART> :: Match(CContext * pContext) const
{
	// check, for named
	if(m_nnumber < 0) return 0;

	if( ! m_bright )
	{
		pContext->m_captureindex.Prepare(m_nnumber, -1);
		int index = pContext->m_captureindex[m_nnumber];

		// check
		if(index > 0 && index < pContext->m_capturestack.GetSize() && pContext->m_capturestack[index+2] < 0)
		{
			pContext->m_capturestack[index+3] --;
			return 1;
		}

		// save
		pContext->m_captureindex[m_nnumber] = pContext->m_capturestack.GetSize();

		pContext->m_capturestack.Push(m_nnumber);
		pContext->m_capturestack.Push(pContext->m_nCurrentPos);
		pContext->m_capturestack.Push(-1);
		pContext->m_capturestack.Push( 0); // z-index
	}
	else
	{
		// check
		int index = pContext->m_captureindex[m_nnumber];

		if(pContext->m_capturestack[index + 3] < 0)
		{
			pContext->m_capturestack[index + 3] ++;
			return 1;
		}

		// save
		pContext->m_capturestack[index + 2] = pContext->m_nCurrentPos;
		pContext->m_capturestack[index + 3] = pContext->m_nParenZindex ++;
	}

	return 1;
}

template <class CHART> int CBracketElxT <CHART> :: MatchNext(CContext * pContext) const
{
	int index = pContext->m_captureindex[m_nnumber];

	if( ! m_bright )
	{
		if(pContext->m_capturestack[index + 3] < 0)
		{
			pContext->m_capturestack[index + 3] ++;
			return 0;
		}

		pContext->m_capturestack.Restore(pContext->m_capturestack.GetSize() - 4);

		// to find
		index = pContext->m_capturestack.GetSize() - 4;
		while(index >= 0 && pContext->m_capturestack[index] != m_nnumber) index -= 4;

		// new index
		pContext->m_captureindex[m_nnumber] = index;
	}
	else
	{
		if(pContext->m_capturestack[index + 3] < 0)
		{
			pContext->m_capturestack[index + 3] --;
			return 0;
		}

		pContext->m_capturestack[index + 2] = -1;
		pContext->m_capturestack[index + 3] =  0;
	}

	return 0;
}

//
// Deletage
//
template <class CHART> class CDelegateElxT : public ElxInterface  
{
public:
	int Match    (CContext * pContext) const;
	int MatchNext(CContext * pContext) const;

public:
	CDelegateElxT(int ndata = 0);

public:
	ElxInterface * m_pelx;
	int m_ndata; // +0 : recursive to
	             // -3 : named recursive

	CBufferT <CHART> m_szNamed;
};

template <class CHART> CDelegateElxT <CHART> :: CDelegateElxT(int ndata)
{
	m_pelx  = 0;
	m_ndata = ndata;
}

template <class CHART> int CDelegateElxT <CHART> :: Match(CContext * pContext) const
{
	if(m_pelx != 0)
		return m_pelx->Match(pContext);
	else
		return 1;
}

template <class CHART> int CDelegateElxT <CHART> :: MatchNext(CContext * pContext) const
{
	if(m_pelx != 0)
		return m_pelx->MatchNext(pContext);
	else
		return 0;
}

//
// Empty
//
template <int x> class CEmptyElxT : public ElxInterface
{
public:
	int Match    (CContext * pContext) const;
	int MatchNext(CContext * pContext) const;

public:
	CEmptyElxT();
};

typedef CEmptyElxT <0> CEmptyElx;

//
// Global
//
template <int x> class CGlobalElxT : public ElxInterface
{
public:
	int Match    (CContext * pContext) const;
	int MatchNext(CContext * pContext) const;

public:
	CGlobalElxT();
};

typedef CGlobalElxT <0> CGlobalElx;

//
// Repeat
//
template <int x> class CRepeatElxT : public ElxInterface
{
public:
	int Match    (CContext * pContext) const;
	int MatchNext(CContext * pContext) const;

public:
	CRepeatElxT(ElxInterface * pelx, int ntimes);

protected:
	int MatchFixed    (CContext * pContext) const;
	int MatchNextFixed(CContext * pContext) const;

public:
	ElxInterface * m_pelx;
	int m_nfixed;
};

typedef CRepeatElxT <0> CRepeatElx;

//
// Greedy
//
template <int x> class CGreedyElxT : public CRepeatElxT <x>
{
public:
	int Match    (CContext * pContext) const;
	int MatchNext(CContext * pContext) const;

public:
	CGreedyElxT(ElxInterface * pelx, int nmin = 0, int nmax = INT_MAX);

protected:
	int MatchVart    (CContext * pContext) const;
	int MatchNextVart(CContext * pContext) const;

public:
	int m_nvart;
};

typedef CGreedyElxT <0> CGreedyElx;

//
// Independent
//
template <int x> class CIndependentElxT : public ElxInterface
{
public:
	int Match    (CContext * pContext) const;
	int MatchNext(CContext * pContext) const;

public:
	CIndependentElxT(ElxInterface * pelx);

public:
	ElxInterface * m_pelx;
};

typedef CIndependentElxT <0> CIndependentElx;

//
// List
//
template <int x> class CListElxT : public ElxInterface
{
public:
	int Match    (CContext * pContext) const;
	int MatchNext(CContext * pContext) const;

public:
	CListElxT(int brightleft);

public:
	CBufferT <ElxInterface *> m_elxlist;
	int m_brightleft;
};

typedef CListElxT <0> CListElx;

//
// Posix Elx
//
template <class CHART> class CPosixElxT : public ElxInterface
{
public:
	int Match    (CContext * pContext) const;
	int MatchNext(CContext * pContext) const;

public:
	CPosixElxT(const char * posix, int brightleft);

protected:
	static int m_isblank(int c);

public:
	int (*m_posixfun)(int);
	int m_brightleft;
	int m_byes;
};

//
// Implementation
//
template <class CHART> CPosixElxT <CHART> :: CPosixElxT(const char * posix, int brightleft)
{
	m_brightleft = brightleft;

	if(posix[1] == '^')
	{
		m_byes = 0;
		posix += 2;
	}
	else
	{
		m_byes = 1;
		posix += 1;
	}

	if     (!strncmp(posix, "alnum:", 6)) m_posixfun = ::isalnum ;
	else if(!strncmp(posix, "alpha:", 6)) m_posixfun = ::isalpha ;
	else if(!strncmp(posix, "ascii:", 6)) m_posixfun = ::isascii ;
	else if(!strncmp(posix, "cntrl:", 6)) m_posixfun = ::iscntrl ;
	else if(!strncmp(posix, "digit:", 6)) m_posixfun = ::isdigit ;
	else if(!strncmp(posix, "graph:", 6)) m_posixfun = ::isgraph ;
	else if(!strncmp(posix, "lower:", 6)) m_posixfun = ::islower ;
	else if(!strncmp(posix, "print:", 6)) m_posixfun = ::isprint ;
	else if(!strncmp(posix, "punct:", 6)) m_posixfun = ::ispunct ;
	else if(!strncmp(posix, "space:", 6)) m_posixfun = ::isspace ;
	else if(!strncmp(posix, "upper:", 6)) m_posixfun = ::isupper ;
	else if(!strncmp(posix, "xdigit:",7)) m_posixfun = ::isxdigit;
	else if(!strncmp(posix, "blank:", 6)) m_posixfun = m_isblank ;
	else                                  m_posixfun = 0         ;
}

template <class CHART> int CPosixElxT <CHART> :: m_isblank(int c)
{
	return c == 0x20 || c == '\t';
}

template <class CHART> int CPosixElxT <CHART> :: Match(CContext * pContext) const
{
	if(m_posixfun == 0) return 0;

	int tlen = pContext->m_pMatchStringLength;
	int npos = pContext->m_nCurrentPos;

	// check
	int at   = m_brightleft ? npos - 1 : npos;
	if( at < 0 || at >= tlen )
		return 0;

	CHART ch = ((const CHART *)pContext->m_pMatchString)[at];

	int bsucc = (*m_posixfun)(ch);

	if( ! m_byes )
		bsucc = ! bsucc;

	if( bsucc )
		pContext->m_nCurrentPos += m_brightleft ? -1 : 1;

	return bsucc;
}

template <class CHART> int CPosixElxT <CHART> :: MatchNext(CContext * pContext) const
{
	pContext->m_nCurrentPos -= m_brightleft ? -1 : 1;
	return 0;
}

//
// Possessive
//
template <int x> class CPossessiveElxT : public CGreedyElxT <x>
{
public:
	int Match    (CContext * pContext) const;
	int MatchNext(CContext * pContext) const;

public:
	CPossessiveElxT(ElxInterface * pelx, int nmin = 0, int nmax = INT_MAX);
};

typedef CPossessiveElxT <0> CPossessiveElx;

//
// Range Elx
//
template <class CHART> class CRangeElxT : public ElxInterface
{
public:
	int Match    (CContext * pContext) const;
	int MatchNext(CContext * pContext) const;

public:
	CRangeElxT(int brightleft, int byes);

public:
	CBufferT <CHART> m_ranges;
	CBufferT <CHART> m_chars;
	CBufferT <ElxInterface *> m_embeds;

public:
	int m_brightleft;
	int m_byes;
};

//
// Implementation
//
template <class CHART> CRangeElxT <CHART> :: CRangeElxT(int brightleft, int byes)
{
	m_brightleft = brightleft;
	m_byes       = byes;
}

template <class CHART> int CRangeElxT <CHART> :: Match(CContext * pContext) const
{
	int tlen = pContext->m_pMatchStringLength;
	int npos = pContext->m_nCurrentPos;

	// check
	int at   = m_brightleft ? npos - 1 : npos;
	if( at < 0 || at >= tlen )
		return 0;

	CHART ch = ((const CHART *)pContext->m_pMatchString)[at];
	int bsucc = 0, i;

	// compare
	for(i=0; !bsucc && i<m_ranges.GetSize(); i+=2)
	{
		if(m_ranges[i] <= ch && ch <= m_ranges[i+1]) bsucc = 1;
	}

	for(i=0; !bsucc && i<m_chars.GetSize(); i++)
	{
		if(m_chars[i] == ch) bsucc = 1;
	}

	for(i=0; !bsucc && i<m_embeds.GetSize(); i++)
	{
		if(m_embeds[i]->Match(pContext))
		{
			pContext->m_nCurrentPos = npos;
			bsucc = 1;
		}
	}

	if( ! m_byes )
		bsucc = ! bsucc;

	if( bsucc )
		pContext->m_nCurrentPos += m_brightleft ? -1 : 1;

	return bsucc;
}

template <class CHART> int CRangeElxT <CHART> :: MatchNext(CContext * pContext) const
{
	pContext->m_nCurrentPos -= m_brightleft ? -1 : 1;
	return 0;
}

//
// Reluctant
//
template <int x> class CReluctantElxT : public CRepeatElxT <x>
{
public:
	int Match    (CContext * pContext) const;
	int MatchNext(CContext * pContext) const;

public:
	CReluctantElxT(ElxInterface * pelx, int nmin = 0, int nmax = INT_MAX);

protected:
	int MatchVart    (CContext * pContext) const;
	int MatchNextVart(CContext * pContext) const;

public:
	int m_nvart;
};

typedef CReluctantElxT <0> CReluctantElx;

//
// String Elx
//
template <class CHART> class CStringElxT : public ElxInterface
{
public:
	int Match    (CContext * pContext) const;
	int MatchNext(CContext * pContext) const;

public:
	CStringElxT(const CHART * fixed, int nlength, int brightleft, int bignorecase);

public:
	CBufferT <CHART> m_szPattern;
	int m_brightleft;
	int m_bignorecase;
};

//
// Implementation
//
template <class CHART> CStringElxT <CHART> :: CStringElxT(const CHART * fixed, int nlength, int brightleft, int bignorecase) : m_szPattern(fixed, nlength)
{
	m_brightleft  = brightleft;
	m_bignorecase = bignorecase;
}

template <class CHART> int CStringElxT <CHART> :: Match(CContext * pContext) const
{
	const CHART * pcsz  = (const CHART *)pContext->m_pMatchString;
	int npos = pContext->m_nCurrentPos;
	int tlen = pContext->m_pMatchStringLength;
	int slen = m_szPattern.GetSize();

	int bsucc;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美性极品少妇| 日韩精品一区二区三区在线播放| 国产最新精品免费| 激情五月播播久久久精品| 日本一区中文字幕| 美腿丝袜在线亚洲一区| 美女网站色91| 国产主播一区二区三区| 国产老妇另类xxxxx| 国产精品资源在线观看| 国产成人免费视频| av午夜精品一区二区三区| 欧美精品一二三区| 91精品国产综合久久久蜜臀粉嫩 | 免费看欧美女人艹b| 蜜桃久久久久久| 黑人精品欧美一区二区蜜桃| 国产激情一区二区三区桃花岛亚洲| 国产精品一二二区| 成人性生交大片免费看中文| 亚洲va国产va欧美va观看| 日韩电影在线观看网站| 黄页网站大全一区二区| 成人v精品蜜桃久久一区| 91免费观看视频在线| 欧美日韩中文字幕精品| 日韩三级精品电影久久久| 精品久久五月天| 国产精品理论片在线观看| 亚洲美女屁股眼交3| 丝袜美腿高跟呻吟高潮一区| 精品一区二区三区蜜桃| 国产盗摄女厕一区二区三区| 成人福利在线看| 欧美影院一区二区| 精品福利在线导航| 国产精品免费免费| 亚洲国产欧美一区二区三区丁香婷| 五月婷婷久久综合| 国产成人超碰人人澡人人澡| 在线观看亚洲一区| 日韩精品一区二区三区视频 | 国产精品福利影院| 首页国产欧美久久| 成人激情开心网| 欧美日韩视频专区在线播放| 久久久久久久综合狠狠综合| 亚洲日穴在线视频| 男女男精品视频网| av电影天堂一区二区在线| 欧美日韩一区二区三区四区五区| 欧美电影免费观看完整版| 国产精品无人区| 日韩高清一区在线| 成人黄色小视频在线观看| 色综合天天综合色综合av| 日韩女优电影在线观看| 国产精品一卡二卡| 在线观看日韩av先锋影音电影院| 精品欧美乱码久久久久久1区2区| 亚洲免费视频中文字幕| 国产一区二区三区日韩| 欧美日韩在线播放三区四区| 国产精品乱码久久久久久| 日本中文字幕一区二区视频| av电影在线观看完整版一区二区| 精品少妇一区二区三区视频免付费| 国产精品国产自产拍在线| 日本va欧美va精品| 欧美亚日韩国产aⅴ精品中极品| 国产亚洲欧美中文| 男女性色大片免费观看一区二区| 色悠悠亚洲一区二区| 国产三级欧美三级日产三级99| 日产国产高清一区二区三区 | 91精品欧美综合在线观看最新| 国产精品色噜噜| 精品一区二区三区蜜桃| 5858s免费视频成人| 国产精品久久久久久久岛一牛影视| 久久99热国产| 69堂精品视频| 亚洲电影一区二区| 色综合天天天天做夜夜夜夜做| 国产人妖乱国产精品人妖| 另类小说欧美激情| 99久久99久久精品免费看蜜桃| 日韩精品一区二区在线观看| 悠悠色在线精品| fc2成人免费人成在线观看播放| 欧美成人a在线| 久久精品国产精品亚洲精品| 欧美日韩一级片在线观看| 一区二区三区精品在线观看| 成人av网站在线观看免费| 中文字幕av资源一区| 国精品**一区二区三区在线蜜桃| 精品三级av在线| 日韩激情中文字幕| 欧美高清hd18日本| 一区二区在线观看视频在线观看| 99久久国产综合色|国产精品| 久久久不卡影院| 国产99久久久国产精品潘金网站| 欧美电影免费观看高清完整版| 蜜桃精品在线观看| 91麻豆精品国产自产在线 | 九九在线精品视频| 精品国产三级电影在线观看| 奇米色一区二区三区四区| 日韩欧美国产三级| 免费看欧美女人艹b| 日韩精品中文字幕一区| 奇米色一区二区| 2020国产精品自拍| 久久99精品国产| 久久亚洲一区二区三区四区| 美女性感视频久久| 久久久久久久久久看片| 国产一区二区在线看| 2017欧美狠狠色| 国产乱子伦一区二区三区国色天香| 精品美女一区二区三区| 捆绑调教一区二区三区| 欧美一三区三区四区免费在线看| 久久成人18免费观看| 欧美午夜一区二区三区免费大片| 亚洲国产aⅴ天堂久久| 91蜜桃网址入口| 亚洲一区二区三区爽爽爽爽爽| 91精品国产乱码久久蜜臀| 免费国产亚洲视频| 欧美韩国日本不卡| 成人激情小说网站| 亚洲国产精品久久艾草纯爱| 欧美日韩国产小视频在线观看| 久久成人久久鬼色| 国产日产欧美一区| 日本道在线观看一区二区| 亚洲午夜精品网| 精品国产自在久精品国产| 蜜桃精品视频在线观看| 国产精品毛片高清在线完整版 | 欧美一区二区三区四区久久| 人妖欧美一区二区| 久久久99久久精品欧美| 91小视频在线免费看| 亚洲国产日韩一区二区| 日韩三区在线观看| 国产精品99久久久久久宅男| 亚洲一区电影777| 精品国一区二区三区| 一本色道久久加勒比精品| 日本亚洲电影天堂| 中文字幕欧美日韩一区| av电影在线观看一区| 精品一区中文字幕| 中文字幕制服丝袜一区二区三区| 欧美日韩国产一级| eeuss鲁片一区二区三区在线看| 亚洲成av人在线观看| 欧美国产1区2区| 欧美日本免费一区二区三区| 成人黄色片在线观看| 三级欧美在线一区| 中文一区在线播放| 91精品蜜臀在线一区尤物| 成人性生交大合| 91麻豆精品国产自产在线观看一区| 亚洲国产综合91精品麻豆| 中文字幕av一区 二区| 欧美一级专区免费大片| 国产成人av电影在线播放| 视频一区二区中文字幕| 国产精品家庭影院| 久久久亚洲精华液精华液精华液| 91黄色免费版| 成人h版在线观看| 午夜精品久久久久久久久久| 中文字幕中文字幕在线一区 | 色视频欧美一区二区三区| 美女网站色91| 偷拍一区二区三区四区| 亚洲激情网站免费观看| 免费欧美在线视频| 亚洲欧美日韩久久精品| 26uuu另类欧美亚洲曰本| 欧美色精品天天在线观看视频| 久久国产日韩欧美精品| 亚洲一区二区三区四区不卡| 国产精品久久久久久久久免费相片| 欧美变态tickle挠乳网站| 色婷婷久久综合| 久久99精品久久只有精品| 一区二区三区成人| 亚洲综合网站在线观看| 国产精品女同一区二区三区| 国产免费观看久久| 日韩精品一区二区三区视频播放| 91精品国产综合久久久久|