// ★コメント未記入
// FinderVBScript.h: CFinderVBScript クラスのインターフェイス
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_FINDERVBSCRIPT_H__078AD195_4F47_49C3_8763_656C3BF50C82__INCLUDED_)
#define AFX_FINDERVBSCRIPT_H__078AD195_4F47_49C3_8763_656C3BF50C82__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#include <comdef.h>		//COMを簡単に使うための便利なクラスが盛りだくさん
#include <afxtempl.h>
#include "vbscriptregexp.h"		//OLE Viewer で作成したヘッダファイル
#include "Finder.h"

//IRegExp専用のスマートポインタの定義をやらせる
_COM_SMARTPTR_TYPEDEF(IRegExp, __uuidof(IRegExp));

/*
// 利用するアプリケーションの最初と最期ですること

	//COMを使うときのお約束
	BOOL	bComUse;
	bComUse = ( SUCCEEDED(CoInitialize(NULL)) );

		：

	// COMの後始末
	if ( bComUse )
	{
		//お約束
		CoUninitialize();
	}
*/
class CFinderVBScript : public CFinder  
{
public:
	CFinderVBScript();
	virtual ~CFinderVBScript();

	virtual BOOL	IsAlive();
	virtual CString	Name();
	virtual BOOL	IsRegExp(){ return( TRUE ); };

	// 行から文字列を検索
	virtual BOOL FindAtLine(
		CString&			strTarget,
		long				idxStartColumn,
		long				idxEndColumn,
		CString&			strSubString,
		long*				pidxFoundCaretColumn,
		long*				pnCaretColumn,
		BOOL				bCaseCare,
		BOOL				bToken
	);

	virtual CString GetReplaceWord(
		CShitarabianDoc*	pDoc,
		long				idxRow,
		long				idxStartColumn,
		long				idxEndColumn,
		CString&			strSubString,
		CString&			strReplaceFormat,
		BOOL				bCaseCare,
		BOOL				bToken
	);

	virtual long GetMatchz(
		CString&					strSrc,
		CString&					strSubString,
		CArray<TMatch, TMatch& >*	paMatchz,
		BOOL						bCaseCare,
		BOOL						bToken,
		BOOL						bNeedSubMatch = FALSE
	);
	virtual BOOL QuickMatch(
		LPCTSTR						strSrc,
		CString&					strSubString,
		TMatch*						pMatch,
		BOOL						bCaseCare,
		BOOL						bToken
	);

protected:
	void RerflactProperty();

	BOOL	CFinderVBScript::GetSubMatch(
		CString&		strSrc,
		IDispatch*		pDispMatch,
		TMatch*			pMatch,
		BOOL			bCaseCare,
		BOOL			bToken
	);

protected:
	BOOL			m_bAlive;
    IRegExpPtr		m_RegExp;

	BOOL			m_bGrobal;
	BOOL			m_CareCase;

    _bstr_t			m_bstrPattern;
};

#endif // !defined(AFX_FINDERVBSCRIPT_H__078AD195_4F47_49C3_8763_656C3BF50C82__INCLUDED_)
