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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? cbregexp.cpp

?? 日本的開源編輯器源碼
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
//	$Id: CBregexp.cpp,v 1.18 2005/04/17 10:01:02 genta Exp $
/*!	@file
	@brief BREGEXP Library Handler

	Perl5互換正規(guī)表現(xiàn)を扱うDLLであるBREGEXP.DLLを利用するためのインターフェース

	@author genta
	@date Jun. 10, 2001
	@date 2002/2/1 hor		ReleaseCompileBufferを適宜追加
	@date Jul. 25, 2002 genta 行頭條件を考慮した検索を行うように.(置換はまだ)
	@date 2003.05.22 かろと 正規(guī)な正規(guī)表現(xiàn)に近づける
	@date 2005.03.19 かろと リファクタリング。クラス內(nèi)部を隠蔽。
*/
/*
	Copyright (C) 2001-2002, genta
	Copyright (C) 2002, novice, hor
	Copyright (C) 2003, かろと

	This software is provided 'as-is', without any express or implied
	warranty. In no event will the authors be held liable for any damages
	arising from the use of this software.

	Permission is granted to anyone to use this software for any purpose, 
	including commercial applications, and to alter it and redistribute it 
	freely, subject to the following restrictions:

		1. The origin of this software must not be misrepresented;
		   you must not claim that you wrote the original software.
		   If you use this software in a product, an acknowledgment
		   in the product documentation would be appreciated but is
		   not required.

		2. Altered source versions must be plainly marked as such, 
		   and must not be misrepresented as being the original software.

		3. This notice may not be removed or altered from any source
		   distribution.
*/

#include <stdio.h>
#include <string.h>
#include "CBregexp.h"
#include "etc_uty.h"

// Compile時、行頭置換(len=0)の時にダミー文字列(1つに統(tǒng)一) by かろと
const char CBregexp::m_tmpBuf[2] = "\0";

CBregexp::CBregexp() : m_pRegExp( NULL ),
	m_ePatType( PAT_NORMAL )	//	Jul, 25, 2002 genta
{
}

CBregexp::~CBregexp()
{
	//<< 2002/03/27 Azumaiya
	// 一応、クラスの終了時にコンパイルバッファを解放。
	DeinitDll();
	//>> 2002/03/27 Azumaiya
}

//	Jul. 5, 2001 genta 引數(shù)追加。ただし、ここでは使わない。
char *
CBregexp::GetDllName( char* str )
{
	return "BREGEXP.DLL";
}
/*!
	DLLの初期化

	関數(shù)のアドレスを取得してメンバに保管する.

	@retval 0 成功
	@retval 1 アドレス取得に失敗
*/
int CBregexp::InitDll(void)
{
	//	Apr. 15, 2002 genta
	//	CPPA.cpp を參考に設(shè)定を配列化した
	
	const ImportTable table[] = {
		{ &BMatch,		"BMatch" },
		{ &BSubst,		"BSubst" },
		{ &BTrans,		"BTrans" },
		{ &BSplit,		"BSplit" },
		{ &BRegfree, 	"BRegfree" },
		{ &BRegexpVersion,	"BRegexpVersion" },
		{ NULL, 0 }
	};
	
	if( ! RegisterEntries( table )){
		return 1;
	}
	// 2003.11.01 かろと 拡張した関數(shù)のアドレス取得
	BMatchEx = (BREGEXP_BMatchEx)GetProcAddress( GetInstance(), "BMatchEx" );
	BSubstEx = (BREGEXP_BSubstEx)GetProcAddress( GetInstance(), "BSubstEx" );
	
	return 0;
}

/*!
	BREGEXP構(gòu)造體の解放
*/
int CBregexp::DeinitDll( void )
{
	ReleaseCompileBuffer();
	return 0;
}

/*! @brief 検索パターンが特定の検索パターンかチェックする
**
** @param[in] szPattern 検索パターン
**
** @retval 検索パターン文字列長
** 
** @date 2005.03.20 かろと 関數(shù)に切り出し
*/
int CBregexp::CheckPattern(const char *szPattern)
{
	static const char TOP_MATCH[] = "/^\\(*\\^/k";							//!< 行頭パターンのチェック用パターン
	static const char DOL_MATCH[] = "/\\\\\\$$/k";							//!< \$(行末パターンでない)チェック用パターン
	static const char BOT_MATCH[] = "/\\$\\)*$/k";							//!< 行末パターンのチェック用パターン
	static const char TAB_MATCH[] = "/^\\(*\\^\\$\\)*$/k";					//!< "^$"パターンかをチェック用パターン
	static const char LOOKAHEAD[] = "/\\(\\?[=]/k";							//!< "(?=" 先読み の存在チェックパターン
	BREGEXP*	sReg = NULL;					//!< コンパイル構(gòu)造體
	char szMsg[80] = "";						//!< エラーメッセージ
	int nLen;									//!< 検索パターンの長さ
	const char *szPatternEnd;					//!< 検索パターンの終端

	m_ePatType = PAT_NORMAL;	//!< ノーマルは確定
	nLen = strlen( szPattern );
	szPatternEnd = szPattern + nLen;
	// パターン種別の設(shè)定
	if( BMatch( TOP_MATCH, szPattern, szPatternEnd, &sReg, szMsg ) > 0 ) {
		// 行頭パターンにマッチした
		m_ePatType |= PAT_TOP;
	}
	BRegfree(sReg);
	sReg = NULL;
	if( BMatch( TAB_MATCH, szPattern, szPatternEnd, &sReg, szMsg ) > 0 ) {
		// 行頭行末パターンにマッチした
		m_ePatType |= PAT_TAB;
	}
	BRegfree(sReg);
	sReg = NULL;
	if( BMatch( DOL_MATCH, szPattern, szPatternEnd, &sReg, szMsg ) > 0 ) {
		// 行末の\$ にマッチした
		// PAT_NORMAL
	} else {
		BRegfree(sReg);
		sReg = NULL;
		if( BMatch( BOT_MATCH, szPattern, szPatternEnd, &sReg, szMsg ) > 0 ) {
			// 行末パターンにマッチした
			m_ePatType |= PAT_BOTTOM;
		} else {
			// その他
			// PAT_NORMAL
		}
	}
	BRegfree(sReg);
	sReg = NULL;
	
	if( BMatch( LOOKAHEAD, szPattern, szPattern + nLen, &sReg, szMsg ) > 0 ) {
		// 先読みパターンにマッチした
		m_ePatType |= PAT_LOOKAHEAD;
	}
	BRegfree(sReg);
	sReg = NULL;
	return (nLen);
}

/*! @brief ライブラリに渡すための検索?置換パターンを作成する
**
** @note szPattern2: == NULL:検索 != NULL:置換
** 
** @param[in] szPattern 検索パターン
** @param[in] szPattern2 置換パターン(NULLなら検索)
** @param[in] szAdd2	置換パターンの後ろに付け加えるパターン($1など) 
** @param[in] bOption	検索オプション
**
** @retval ライブラリに渡す検索パターンへのポインタを返す
** @note 返すポインタは、呼び出し側(cè)で delete すること
** 
** @date 2003.05.03 かろと 関數(shù)に切り出し
*/
char* CBregexp::MakePatternSub( const char* szPattern, const char* szPattern2, const char* szAdd2, int bOption ) 
{
	static const char DELIMITER = '\xFF';		//<! デリミタ
	int nLen;									//!< szPatternの長さ
	int nLen2;									//!< szPattern2 + szAdd2 の長さ

	// 検索パターン作成
	char *szNPattern;		//!< ライブラリ渡し用の検索パターン文字列
	char *pPat;				//!< パターン文字列操作用のポインタ

	nLen = strlen(szPattern);
	if (szPattern2 == NULL) {
		// 検索(BMatch)時
		szNPattern = new char[ nLen + 15 ];	//	15:「s///option」が余裕ではいるように。
		pPat = szNPattern;
		*pPat++ = 'm';
	} else {
		// 置換(BSubst)時
		nLen2 = strlen(szPattern2) + strlen(szAdd2);
		szNPattern = new char[ nLen + nLen2 + 15 ];
		pPat = szNPattern;
		*pPat++ = 's';
	}
	*pPat++ = DELIMITER;
	while (*szPattern != '\0') { *pPat++ = *szPattern++; }
	*pPat++ = DELIMITER;
	if (szPattern2 != NULL) {
		while (*szPattern2 != '\0') { *pPat++ = *szPattern2++; }
		while (*szAdd2 != '\0') { *pPat++ = *szAdd2++; }
		*pPat++ = DELIMITER;
	}
	*pPat++ = 'k';			// 漢字対応
	*pPat++ = 'm';			// 複數(shù)行対応(但し、呼び出し側(cè)が複數(shù)行対応でない)
	if( !(bOption & bIgnoreCase) ) {		// 2002/2/1 hor IgnoreCase オプション追加 マージ:aroka
		*pPat++ = 'i';		// 同上
	}
	*pPat = '\0';
	return szNPattern;
}


/*! 
** 行末文字の意味がライブラリでは \n固定なので、
** これをごまかすために、ライブラリに渡すための検索?置換パターンを工夫する
**
** 行末文字($)が検索パターンの最後にあり、その直前が [\r\n] でない場合に、
** 行末文字($)の手前に ([\r\n]+)を補って、置換パターンに $(nParen+1)を補う
** というアルゴリズムを用いて、ごまかす。
**
** @note szPattern2: == NULL:検索 != NULL:置換

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
中文字幕一区二区三区在线播放| 国产精品久久久久久久裸模 | 亚洲欧洲一区二区在线播放| 亚洲国产中文字幕| 国产乱码精品一区二区三区忘忧草 | 美腿丝袜亚洲三区| 在线视频国内一区二区| 久久久九九九九| 蜜桃av一区二区三区| 91官网在线免费观看| 国产精品全国免费观看高清| 久久精品国产第一区二区三区| 欧美视频一区在线观看| 中文字幕制服丝袜成人av| 国产一区二区三区| 91精品国产综合久久蜜臀| 一区二区欧美国产| 91视视频在线观看入口直接观看www | 国产成人丝袜美腿| 日韩三级在线免费观看| 亚洲成av人片在线观看无码| 色综合av在线| 亚洲男人都懂的| jlzzjlzz亚洲女人18| 国产偷国产偷亚洲高清人白洁| 久久激情五月婷婷| 欧美剧情片在线观看| 香蕉久久夜色精品国产使用方法 | 亚洲444eee在线观看| 欧美中文字幕一二三区视频| 亚洲男人都懂的| 欧美影院精品一区| 亚洲成人动漫av| 欧美男女性生活在线直播观看| 伊人色综合久久天天人手人婷| 色婷婷综合久久| 亚洲在线视频网站| 欧美日韩成人激情| 蜜桃一区二区三区在线| 日韩久久精品一区| 国产丶欧美丶日本不卡视频| 中文字幕电影一区| 91亚洲精品乱码久久久久久蜜桃| 亚洲欧美激情一区二区| 欧美三级韩国三级日本三斤| 日韩不卡一区二区| 亚洲精品一线二线三线| 国产成人丝袜美腿| 亚洲色图视频网站| 精品婷婷伊人一区三区三| 人人狠狠综合久久亚洲| 国产欧美日韩综合精品一区二区 | 911精品国产一区二区在线| 日韩制服丝袜先锋影音| 欧美成人福利视频| 成人开心网精品视频| 一区二区三区免费网站| 5月丁香婷婷综合| 国产乱理伦片在线观看夜一区| 亚洲国产精品ⅴa在线观看| 91国产精品成人| 另类的小说在线视频另类成人小视频在线 | 香蕉久久夜色精品国产使用方法| 欧美www视频| 91视频免费观看| 五月婷婷激情综合| www久久精品| 色中色一区二区| 激情伊人五月天久久综合| 国产精品国产三级国产有无不卡 | **欧美大码日韩| 日韩精品一区在线观看| 91在线你懂得| 国产在线播放一区| 亚洲一区中文日韩| 欧美国产1区2区| 日韩一区二区三区电影在线观看| 不卡的电视剧免费网站有什么| 天堂资源在线中文精品| 国产精品视频免费看| 欧美一区二区三区成人| 97精品久久久午夜一区二区三区 | 日本午夜一本久久久综合| 国产精品久久久久久久久果冻传媒| 欧美精品一卡二卡| 97久久精品人人做人人爽| 国产一区二区成人久久免费影院 | 成人免费视频网站在线观看| 日韩中文字幕亚洲一区二区va在线| 国产精品欧美久久久久一区二区| 精品国产91亚洲一区二区三区婷婷| 日本高清不卡视频| eeuss国产一区二区三区| 精品无码三级在线观看视频| 午夜激情一区二区| 亚洲综合一区在线| 亚洲乱码中文字幕综合| 中文字幕一区二区三区精华液| 久久午夜电影网| 精品精品欲导航| 日韩视频一区在线观看| 欧美一区二区在线免费播放| 欧美日韩一卡二卡三卡| 在线免费观看日韩欧美| 色一情一伦一子一伦一区| 成人18精品视频| 国产**成人网毛片九色| 国产福利91精品一区| 国产美女av一区二区三区| 另类综合日韩欧美亚洲| 蜜桃久久久久久| 麻豆精品视频在线观看视频| 日本va欧美va瓶| 看片的网站亚洲| 看电视剧不卡顿的网站| 激情综合色综合久久| 极品少妇xxxx精品少妇偷拍| 国产在线麻豆精品观看| 国产一区二区精品久久91| 国产精品一区二区三区乱码| 成人午夜av在线| 91网站在线播放| 91电影在线观看| 欧美日韩精品一区二区三区四区| 欧美日韩国产影片| 在线播放91灌醉迷j高跟美女| 日韩亚洲欧美中文三级| 久久久久九九视频| 中文字幕一区三区| 亚洲一区二区在线视频| 日韩黄色免费电影| 国产一区二区视频在线播放| 国产69精品久久777的优势| 91在线观看污| 91精品国模一区二区三区| 精品免费视频一区二区| 亚洲欧美一区二区视频| 亚洲成人av一区| 激情综合色丁香一区二区| 丁香亚洲综合激情啪啪综合| 在线视频你懂得一区| 欧美一级免费大片| 中文成人综合网| 性做久久久久久久免费看| 国产一区二区三区黄视频 | 国产精品一区二区你懂的| av午夜一区麻豆| 欧美一区二区三区四区视频| 国产午夜精品一区二区| 一区二区三区四区视频精品免费| 欧美a级理论片| 91一区二区三区在线观看| 日韩一级黄色大片| 中文字幕一区二区三| 奇米色一区二区三区四区| 成人妖精视频yjsp地址| 欧美老女人第四色| 国产精品无圣光一区二区| 天天操天天色综合| av一区二区三区四区| 日韩片之四级片| 一区二区三区精品视频在线| 国产一区二区三区av电影| 欧美日韩免费观看一区三区| 国产嫩草影院久久久久| 亚洲一区二区成人在线观看| 国产91在线看| 日韩午夜精品视频| 亚洲一区二区三区四区在线| 国产suv精品一区二区883| 日韩美女天天操| 天堂久久一区二区三区| 在线观看成人小视频| 国产人久久人人人人爽| 久久9热精品视频| 91精品在线免费观看| 亚洲综合免费观看高清完整版在线 | 亚洲午夜免费福利视频| www.在线成人| 久久精品一区二区三区不卡牛牛| 日韩中文字幕av电影| 欧美日韩精品欧美日韩精品一综合| 国产精品视频第一区| 国产乱子伦一区二区三区国色天香| 在线成人免费视频| 午夜欧美一区二区三区在线播放| 色呦呦日韩精品| 综合激情网...| 成人午夜视频在线观看| 久久亚洲影视婷婷| 经典三级视频一区| 精品国产乱码久久久久久闺蜜 | 视频一区视频二区在线观看| 欧美性三三影院| 亚洲免费视频中文字幕| 色综合久久综合网| 亚洲一区二区在线视频| 欧美日韩色综合| 日本在线不卡一区| 日韩一卡二卡三卡国产欧美|