/*-----------------------------------------------------------------------------
[名称]	Grep.h
[概要]	Grep検索クラスのヘッダ
[備考]	なし
[履歴]	2004-01-30	b031228 (3367)Grep検索(dincom)
-----------------------------------------------------------------------------*/
#if !defined(AFX_GREP_H__4EFC001D_82C3_4F30_BD78_416DC144B16E__INCLUDED_)
#define AFX_GREP_H__4EFC001D_82C3_4F30_BD78_416DC144B16E__INCLUDED_

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

class	CProgressDlg;
class	CGrepProgressDlg;

/*-----------------------------------------------------------------------------
[名称]	Grepリクエスト構造体
[用途]	Grep条件をまとめたもの
[備考]	なし
-----------------------------------------------------------------------------*/
struct TGrepRequest
{
	CString		strFolder;				// 検索対象フォルダ [-] (-)
	CString		strSubString;			// 検索文字列 [-] (-)

	CString		strCommand;				// 条件指定 [-] (複合指定)
											//		G:（気にしない）
											//		R:正規表現検索
											//		C:大文字小文字を区別する
											//		T:単語単位検索
											//		S:サブフォルダーも検索

	CString		strFilter;				// ファイルフィルター [-] (-)
};

/*-----------------------------------------------------------------------------
[名称]	挿入文字列構造体
[用途]	挿入文字列と挿入されたかのフラグ
[備考]	なし
-----------------------------------------------------------------------------*/
struct InsertString
{
	CString		strInsert;				// 挿入文字列 [-] (-)
	BOOL		bSuccess;				// 挿入成功フラグ [-] (TRUE:ON、FALSE:OFF)
};

/*-----------------------------------------------------------------------------
[名称]	Grep検索クラス
[用途]	Grep検索を実行する
[備考]	なし
-----------------------------------------------------------------------------*/
class CGrep  
{
public:
	CGrep();
	virtual ~CGrep();

public:
	// Grepの実行
	void	Execute(
		CString		strTargetFolder,
		CString		strSubString,
		CString		strFilter,	
		BOOL		bRegExp,
		BOOL		bCaseCare,
		BOOL		bToken,
		BOOL		bSubFolder
	);

protected:
	void	ExecuteCore(
		CString		strTargetFolder,
		CString		strSubString,
		CStringArray&		strFilter,	
		BOOL		bRegExp,
		BOOL		bCaseCare,
		BOOL		bToken,
		BOOL		bSubFolder,
		long&		nHit,
		long&		nConpleteFile
	);

	// 文字列の挿入要求
	BOOL	SendInsertString(
		CString&	strInsert
	);

	//ファイルフィルタリストを作成
	CString FindFilter(
		CString&	strFilter,
		CStringList* strlFilter
	);

	//ファイルから該当文字検索
	long FindFromFile(
		CString			strFindFile,
		CGrepProgressDlg*	pProgress,
		CString			strSubString,
		BOOL			bRegExp,			//正規表現フラグ		[-] (TRUE:ON、FALSE:OFF)
		BOOL			bCaseCare,			//大小文字検索フラグ	[-] (TRUE:ON、FALSE:OFF)
		BOOL			bToken,				//単語単位検索フラグ	[-] (TRUE:ON、FALSE:OFF)
		long			*plHitRow,
		long			*plHitColumn,
		CString			*pstrHit
	);

	//ファイルの行数取得
	long GetFileRow( 
		CString&	strFilePath
	);

private:
	long	m_nHit;							//ヒット件数

};

#endif // !defined(AFX_GREP_H__4EFC001D_82C3_4F30_BD78_416DC144B16E__INCLUDED_)
