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

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

?? cbregexp.h

?? 日本的開源編輯器源碼
?? H
字號:
//	$Id: CBregexp.h,v 1.20 2005/04/17 10:01:02 genta Exp $
/*!	@file
	@brief BREGEXP Library Handler

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

	@author genta
	@date Jun. 10, 2001
	@date Jan. 05, 2002 genta コメント追加
	@date 2002/2/1 hor
	@date Jul. 25, 2002 genta 行頭條件の考慮を追加

	$Revision: 1.20 $
*/
/*
	Copyright (C) 2001-2002, genta
	Copyright (C) 2001, 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.
*/

#ifndef _DLL_BREGEXP_H_
#define _DLL_BREGEXP_H_

#include "CDllHandler.h"

/*!
	BREGEXP 正規表現のコンパイル結果を保持する構造體
*/
typedef struct bregexp {
	const char *outp;	//!< BSubst 置換データの先頭ポインタ
	const char *outendp;	//!< BSubst 置換データの最終ポインタ+1
	int  splitctr;	//!< BSplit 配列數
	const char **splitp;	//!< BSplit データポインタ
	int	rsv1;		//!< リザーブ 自由に使用可能
	char *parap;		//!< パターンデータポインタ
	char *paraendp;		//!< パターンデータポインタ+1
	char *transtblp;	//!< BTrans 変換テーブルポインタ
	char **startp;		//!< マッチしたデータの先頭ポインタ
	char **endp;		//!< マッチしたデータの最終ポインタ+1
	int nparens;		//!< パターンの中の() の數。 $1,$2, を調べるときに使用
} BREGEXP;

/*!
	@brief Perl互換正規表現 BREGEXP.DLL をサポートするクラス

	DLLの動的ロードを行うため、DllHandlerを継承している。

	CJreに近い動作をさせるため、バッファをクラス內に1つ保持し、
	データの設定と検索の2つのステップに分割するようにしている。
	Jreエミュレーション関數を使うときは入れ子にならないように注意すること。

	本來はこのような部分は別クラスとして分離すべきだが、その場合このクラスが
	破棄される前に全てのクラスを破棄する必要がある。
	その安全性を保証するのが難しいため、現時點では両者を1つのクラスに入れた。

	@note このクラスはThread Safeではない。

	@date 2005.03.19 かろと リファクタリング。クラス內部を隠蔽
*/
class SAKURA_CORE_API CBregexp : public CDllHandler {
public:
	CBregexp();
	virtual ~CBregexp();

	enum Option {
		bIgnoreCase = 1			//!< 大文字小文字無視オプション
	};
	//! 検索パターン定義
	enum Pattern {
		PAT_UNKNOWN = 0,		//!< 不明(初期値)
		PAT_NORMAL = 1,			//!< 通常
		PAT_TOP = 2,			//!< 行頭"^"
		PAT_BOTTOM = 4,			//!< 行末"$"
		PAT_TAB = 8,			//!< 行頭行末"^$"
		PAT_LOOKAHEAD = 16		//!< 先読み"(?[=]"
	};

	const char* GetVersion(){		//!< DLLのバージョン情報を取得
		return IsAvailable() ? BRegexpVersion() : "";
	}

	//	CJreエミュレーション関數
	//!	検索パターンのコンパイル
	// 2002/01/19 novice 正規表現による文字列置換
	// 2002.01.26 hor    置換後文字列を別引數に
	// 2002.02.01 hor    大文字小文字を無視するオプション追加
	//>> 2002/03/27 Azumaiya 正規表現置換にコンパイル関數を使う形式を追加
	bool Compile(const char *szPattern, int bOption = 0) {
		return Compile(szPattern, NULL, bOption);
	}
	bool Compile(const char *szPattern0, const char *szPattern1, int bOption = 0);	//!< Replace用
	bool Match(const char *szTarget, int nLen, int nStart = 0);						//!< 検索を実行する
	bool Replace(const char *szTarget, int nLen, int nStart = 0);					//!< 置換を実行する

	//-----------------------------------------
	// 2005.03.19 かろと クラス內部を隠蔽
	/*! @{
		@name 結果を得るメソッドを追加し、BREGEXPを外部から隠す
	*/
	/*!
	    検索に一致した文字列の先頭位置を返す(文字列先頭なら0)
		@retval 検索に一致した文字列の先頭位置
	*/
	int GetIndex(void) {
		return m_pRegExp->startp[0] - m_szTarget;
	}
	/*!
	    検索に一致した文字列の次の位置を返す
		@retval 検索に一致した文字列の次の位置
	*/
	int GetLastIndex(void) {
		return m_pRegExp->endp[0] - m_szTarget;
	}
	/*!
		検索に一致した文字列の長さを返す
		@retval 検索に一致した文字列の長さ
	*/
	int GetMatchLen(void) {
		return m_pRegExp->endp[0] - m_pRegExp->startp[0];
	}
	/*!
		置換された文字列の長さを返す
		@retval 置換された文字列の長さ
	*/
	int GetStringLen(void) {
		// 置換後文字列が0幅なら outp、outendpもNULLになる
		// NULLポインタの引き算は問題なく0になる。
		// outendpは '\0'なので、文字列長は +1不要
		return m_pRegExp->outendp - m_pRegExp->outp;
	}
	/*!
		置換された文字列を返す
		@retval 置換された文字列へのポインタ
	*/
	const char *GetString(void) {
		return m_pRegExp->outp;
	}
	/*! @} */
	//-----------------------------------------

	/*! BREGEXPメッセージを取得する
		@retval メッセージへのポインタ
	*/
	const char* GetLastMessage(void) const { return m_szMsg; }
	/*!	先読みパターンが存在するかを返す
		この関數は、コンパイル後であることが前提なので、コンパイル前はfalse
		@retval true 先読みがある
		@retval false 先読みがない 又は コンパイル前
	*/
	bool IsLookAhead(void) {
		return m_ePatType & PAT_LOOKAHEAD ? true : false;
	}
	/*!	検索パターンに先読みが含まれるか?(コンパイル前でも判別可能)
		@param[in] pattern 検索パターン
		@retval true 先読みがある
		@retval false 先読みがない
	*/
	bool IsLookAhead(const char *pattern) {
		CheckPattern(pattern);
		return IsLookAhead();
	}

protected:
	//	Jul. 5, 2001 genta インターフェース変更に伴う引數追加
	virtual char* GetDllName(char*);
	virtual int InitDll(void);
	virtual int DeinitDll(void);

	//	DLL Interfaceの受け皿
	typedef int (*BREGEXP_BMatch)(const char*,const char *,const char *,BREGEXP **,char *);
	typedef int (*BREGEXP_BSubst)(const char*,const char *,const char *,BREGEXP **,char *);
	typedef int (*BREGEXP_BTrans)(const char*,char *,char *,BREGEXP **,char *);
	typedef int (*BREGEXP_BSplit)(const char*,char *,char *,int,BREGEXP **,char *);
	typedef void (*BREGEXP_BRegfree)(BREGEXP*);
	typedef const char* (*BREGEXP_BRegexpVersion)(void);
	// 2005.03.19 かろと 前方一致用新インターフェース
	typedef int (*BREGEXP_BMatchEx)(const char*,const char*, const char *,const char *,BREGEXP **,char *);
	typedef int (*BREGEXP_BSubstEx)(const char*,const char*, const char *,const char *,BREGEXP **,char *);

	BREGEXP_BMatch BMatch;
	BREGEXP_BSubst BSubst;
	BREGEXP_BTrans BTrans;
	BREGEXP_BSplit BSplit;
	BREGEXP_BRegfree BRegfree;
	BREGEXP_BRegexpVersion BRegexpVersion;
	BREGEXP_BMatchEx BMatchEx;
	BREGEXP_BSubstEx BSubstEx;

	//!	コンパイルバッファを解放する
	/*!
		m_pcRegをBRegfree()に渡して解放する.解放後はNULLにセットする.
		元々NULLなら何もしない
	*/
	void ReleaseCompileBuffer(void){
		if( m_pRegExp ){
			BRegfree( m_pRegExp );
			m_pRegExp = NULL;
		}
		m_ePatType = PAT_UNKNOWN;
	}

private:
	//	內部関數

	//! 検索パターン作成
	int CheckPattern( const char *szPattern );
	char* MakePatternSub( const char* szPattern, const char* szPattern2, const char* szAdd2, int bOption );
	char* MakePattern( const char* szPattern, const char* szPattern2, int bOption );
	//	メンバ変數
	BREGEXP*			m_pRegExp;			//!< コンパイル構造體
	int					m_ePatType;			//!< 検索文字列パターン種別
	const char			*m_szTarget;		//!< 対象文字列へのポインタ
	char				m_szMsg[80];		//!< BREGEXPからのメッセージを保持する
	// 靜的メンバ変數
	static const char	m_tmpBuf[2];		//!< ダミー文字列
};

//	以下は関數ポインタに読み込まれる関數の解説
/*!	@fn int CBregexp::BMatch(char* str,char *target,char *targetendp, BREGEXP **rxp,char *msg)

	m/pattern/option 形式のPerl互換パターンマッチングを行う。

	@param str [in] 検索するパターン
	@param target [in] 検索対象領域先頭
	@param targetendp [in] 検索対象領域末尾
	@param rxp [out] BREGEXP構造體。結果はここから取得する。
	@param msg [out] エラーメッセージ

	target <= p < targetendp の範囲が検索対象になる。
*/
/*!	@fn int CBregexp::BMatchEx(char* str,char *targetbeg, char *target,char *targetendp, BREGEXP **rxp,char *msg)

	m/pattern/option 形式のPerl互換パターンマッチングを行う。

	@param str [in] 検索するパターン(コンパイル済みならNULL)
	@param targetbeg [in] 検索対象文字列(行頭から)
	@param target [in] 検索対象領域先頭
	@param targetendp [in] 検索対象領域末尾
	@param rxp [out] BREGEXP構造體。結果はここから取得する。
	@param msg [out] エラーメッセージ

	target <= p < targetendp の範囲が検索対象になる。
*/

/*!	@fn int CBregexp::BSubst(char* str,char *target,char *targetendp, BREGEXP **rxp,char *msg);

	s/pattern/replace/option 形式のPerl互換文字列置換を行う

	@param str [in] 検索?置換パターン
	@param target [in] 検索対象領域先頭
	@param targetendp [in] 検索対象領域末尾
	@param rxp [out] BREGEXP構造體。結果はここから取得する。
	@param msg [out] エラーメッセージ

	@return 置換した文字列の數
	
	rxp->outpからrxp->outendpに置換後の文字列が格納される。

*/
/*!	@fn int CBregexp::BSubstEx(char* str,char *targetbeg char *target, ,char *targetendp, BREGEXP **rxp,char *msg);

	s/pattern/replace/option 形式のPerl互換文字列置換を行う

	@param str [in] 検索?置換パターン(コンパイル済みならNULL)
	@param target [in] 検索対象文字列(行頭から)
	@param target [in] 検索対象領域先頭
	@param targetendp [in] 検索対象領域末尾
	@param rxp [out] BREGEXP構造體。結果はここから取得する。
	@param msg [out] エラーメッセージ

	@return 置換した文字列の數
	
	rxp->outpからrxp->outendpに置換後の文字列が格納される。

*/

/*!	@fn	int CBregexp::BTrans(char* str,char *target,char *targetendp, BREGEXP **rxp,char *msg)

	tr/pattern/replace/option 形式のPerl互換文字置換を行う

	@param str [in] 検索?置換パターン
	@param target [in] 検索対象領域先頭
	@param targetendp [in] 検索対象領域末尾
	@param rxp [out] BREGEXP構造體。結果はここから取得する。
	@param msg [out] エラーメッセージ

	@return 変換した文字數

	rxp->outpからrxp->outendpに変換後の文字列が格納される。

*/

/*!	@fn int CBregexp::BSplit(char* str,char *target,char *targetendp, int limit,BREGEXP **rxp,char *msg)

	split( /patttern/, string ) 相當の文字列分割を行う

	@param str [in] 検索パターン
	@param target [in] 検索対象領域先頭
	@param targetendp [in] 検索対象領域末尾
	@param rxp [out] BREGEXP構造體。結果はここから取得する。
	@param msg [out] エラーメッセージ
	@param limit [in] 最大分割數。これを越えた分については分割は行われずに最終要素に入る。

	@return 分割數

*/

/*!	@fn void CBregexp::BRegfree(BREGEXP* rx)

	検索関數によって渡されたBREGEXP構造體の解放

	@param rx [in] 解放する構造體
*/


/*!	@fn const char* CBregexp::BRegexpVersion(void)

	BREGEXP.DLLのバージョン番號を返す。
	@return バージョン文字列へのポインタ。

	@par Sample
	Version: Bregexp.dll V1.1 Build 22 Apr 29 2000 21:13:19
*/

#endif
/*[EOF]*/

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩国产中文| 成人小视频免费在线观看| 欧美亚洲免费在线一区| 中文字幕日本乱码精品影院| 99在线视频精品| 亚洲猫色日本管| 欧美另类高清zo欧美| 日本色综合中文字幕| 欧美一区二区久久| 国产精品 日产精品 欧美精品| 国产日韩欧美亚洲| 91女厕偷拍女厕偷拍高清| 亚洲午夜久久久久中文字幕久| 91精品午夜视频| 国产成人精品免费| 亚洲综合区在线| 日韩欧美国产三级| 99久久精品免费观看| 性感美女极品91精品| 欧美刺激脚交jootjob| 丰满放荡岳乱妇91ww| 亚洲综合视频在线| 精品久久久久久综合日本欧美| 处破女av一区二区| 五月婷婷激情综合网| 久久久久青草大香线综合精品| 91在线你懂得| 精品亚洲成a人| 亚洲美女偷拍久久| 精品国产99国产精品| 91视视频在线直接观看在线看网页在线看 | 国产精品国产三级国产aⅴ无密码| 91麻豆福利精品推荐| 久久精品国内一区二区三区| 亚洲欧美日韩国产综合| 欧美mv日韩mv亚洲| 欧洲av在线精品| 国产成人午夜视频| 日韩国产成人精品| 亚洲欧洲精品一区二区三区| 日韩欧美一级二级| 色国产精品一区在线观看| 国模无码大尺度一区二区三区| 亚洲欧美电影一区二区| 国产亚洲婷婷免费| 欧美电影一区二区| 一本大道久久精品懂色aⅴ| 六月婷婷色综合| 亚洲成人动漫av| 日韩一区在线免费观看| 久久综合成人精品亚洲另类欧美 | 91福利在线播放| 国产精品自拍一区| 麻豆国产精品一区二区三区| 亚洲精品大片www| 亚洲欧洲日韩av| 国产清纯白嫩初高生在线观看91| 欧美一区二区三区在线视频| 色哟哟日韩精品| eeuss影院一区二区三区| 国产乱子轮精品视频| 蜜臀av一区二区| 午夜精品久久久久久不卡8050| 日韩美女久久久| 成人欧美一区二区三区小说| 久久久亚洲精品一区二区三区| 日韩女优av电影在线观看| 4438成人网| 欧美日韩一本到| 欧美视频一二三区| 欧美日韩一区二区在线视频| 在线一区二区三区四区五区| 色综合咪咪久久| 色网综合在线观看| 91国偷自产一区二区开放时间 | 色综合一个色综合| voyeur盗摄精品| eeuss鲁片一区二区三区在线看| 成人性视频免费网站| 粗大黑人巨茎大战欧美成人| 懂色av一区二区三区免费看| 国产91在线观看丝袜| 成人高清视频在线观看| 成人爽a毛片一区二区免费| 成人一区二区在线观看| 成人爱爱电影网址| 91啪在线观看| 欧美日韩午夜影院| 91精品在线免费观看| 日韩你懂的在线观看| 久久一二三国产| 18成人在线观看| 亚洲一区二区在线免费观看视频 | 国产福利精品一区二区| 成人午夜激情片| 在线看日本不卡| 日韩一级免费观看| 亚洲精品一区二区三区在线观看 | 中文字幕第一区综合| 亚洲欧美日韩一区| 日韩va欧美va亚洲va久久| 久色婷婷小香蕉久久| 成人一区二区视频| 欧美日韩在线观看一区二区 | 国产精品国产馆在线真实露脸| 亚洲精品国产无天堂网2021| 日韩电影在线观看网站| 国产伦精品一区二区三区免费迷| 波多野结衣精品在线| 欧美三级午夜理伦三级中视频| 日韩欧美国产一区二区三区| 国产精品网站导航| 亚洲成人一二三| 国产一区91精品张津瑜| 色香蕉成人二区免费| 精品福利一区二区三区| 亚洲人xxxx| 精品一二三四区| 色呦呦日韩精品| 精品久久国产字幕高潮| 亚洲视频一区二区在线| 日本午夜精品视频在线观看| 成人精品免费视频| 日韩一区二区三区电影| 欧美国产亚洲另类动漫| 男人的j进女人的j一区| av高清久久久| 精品国产电影一区二区| 亚洲高清在线精品| 99re热视频这里只精品| 欧美xfplay| 亚洲成av人综合在线观看| 高清视频一区二区| 精品国产污污免费网站入口| 亚洲一区二区中文在线| 9久草视频在线视频精品| 日韩欧美国产精品| 午夜久久久久久久久久一区二区| 丁香激情综合国产| ww亚洲ww在线观看国产| 日韩电影在线观看电影| 色婷婷av一区| 中文av一区二区| 国产精品自拍三区| 精品成人私密视频| 日本不卡一二三| 欧美日产国产精品| 夜夜精品浪潮av一区二区三区| 国产成人a级片| 久久美女艺术照精彩视频福利播放| 日韩精品电影在线| 欧美日韩一区久久| 亚洲福中文字幕伊人影院| 成人18视频日本| 国产精品视频第一区| 国产成人亚洲综合色影视| 欧美α欧美αv大片| 日本大胆欧美人术艺术动态| 在线成人高清不卡| 婷婷国产在线综合| 欧美日韩日日骚| 视频一区二区国产| 在线电影欧美成精品| 日韩一区精品视频| 欧美日韩国产高清一区| 午夜婷婷国产麻豆精品| 欧美视频一区二区三区| 午夜欧美2019年伦理| 91精品国产福利| 九色|91porny| 国产视频911| 成人av网站在线观看| **性色生活片久久毛片| 91老师国产黑色丝袜在线| 亚洲精品视频观看| 欧美私人免费视频| 麻豆专区一区二区三区四区五区| 日韩午夜小视频| 国产一区二区在线观看免费| 日韩精品中文字幕一区二区三区| 国产一区二区主播在线| 中文字幕欧美日本乱码一线二线| eeuss鲁片一区二区三区在线看| 一区二区三区四区在线播放| 欧美日韩一区二区三区在线看| 天天综合天天综合色| 日韩欧美成人一区二区| 丁香另类激情小说| 亚洲曰韩产成在线| 欧美一级国产精品| 国产a精品视频| 亚洲国产日韩av| 久久综合色鬼综合色| 99久久精品免费看| 日本欧美久久久久免费播放网| 久久九九全国免费| 欧美性淫爽ww久久久久无| 日本在线不卡视频一二三区| 久久蜜桃av一区二区天堂 | 日韩成人免费看|