forked from sakura-editor/sakura
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCGrepAgent.h
199 lines (181 loc) · 7.09 KB
/
CGrepAgent.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
/*! @file */
/*
Copyright (C) 2008, kobake
Copyright (C) 2018-2022, Sakura Editor Organization
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 SAKURA_CGREPAGENT_97F2B632_71C8_4E4A_AC42_13A6098B248F_H_
#define SAKURA_CGREPAGENT_97F2B632_71C8_4E4A_AC42_13A6098B248F_H_
#pragma once
#include "doc/CDocListener.h"
class CDlgCancel;
class CEditView;
class CSearchStringPattern;
class CGrepEnumKeys;
class CGrepEnumFiles;
class CGrepEnumFolders;
struct SGrepOption{
bool bGrepReplace; //!< Grep置換
bool bGrepSubFolder; //!< サブフォルダーからも検索する
bool bGrepStdout; //!< 標準出力モード
bool bGrepHeader; //!< ヘッダー・フッター表示
ECodeType nGrepCharSet; //!< 文字コードセット選択
int nGrepOutputLineType; //!< 0:ヒット部分を出力, 1: ヒット行を出力, 2: 否ヒット行を出力
int nGrepOutputStyle; //!< 出力形式 1: Normal, 2: WZ風(ファイル単位) 3: 結果のみ
bool bGrepOutputFileOnly; //!< ファイル毎最初のみ検索
bool bGrepOutputBaseFolder; //!< ベースフォルダー表示
bool bGrepSeparateFolder; //!< フォルダー毎に表示
bool bGrepPaste; //!< Grep置換:クリップボードから貼り付ける
bool bGrepBackup; //!< Grep置換:バックアップ
SGrepOption() :
bGrepReplace(false)
,bGrepSubFolder(true)
,bGrepStdout(false)
,bGrepHeader(true)
,nGrepCharSet(CODE_AUTODETECT)
,nGrepOutputLineType(1)
,nGrepOutputStyle(1)
,bGrepOutputFileOnly(false)
,bGrepOutputBaseFolder(false)
,bGrepSeparateFolder(false)
,bGrepPaste(false)
,bGrepBackup(false)
{}
};
// Jun. 26, 2001 genta 正規表現ライブラリの差し替え
// Mar. 28, 2004 genta DoGrepFileから不要な引数を削除
class CGrepAgent : public CDocListenerEx{
public:
CGrepAgent();
// イベント
ECallbackResult OnBeforeClose() override;
void OnAfterSave(const SSaveInfo& sSaveInfo) override;
static void CreateFolders( const WCHAR* pszPath, std::vector<std::wstring>& vPaths );
static std::wstring ChopYen( const std::wstring& str );
void AddTail( CEditView* pcEditView, const CNativeW& cmem, bool bAddStdout );
// Grep実行
DWORD DoGrep(
CEditView* pcViewDst,
bool bGrepReplace,
const CNativeW* pcmGrepKey,
const CNativeW* pcmGrepReplace,
const CNativeW* pcmGrepFile,
const CNativeW* pcmGrepFolder,
bool bGrepCurFolder,
BOOL bGrepSubFolder,
bool bGrepStdout,
bool bGrepHeader,
const SSearchOption& sSearchOption,
ECodeType nGrepCharSet, // 2002/09/21 Moca 文字コードセット選択
int nGrepOutputLineType,
int nGrepOutputStyle,
bool bGrepOutputFileOnly, //!< [in] ファイル毎最初のみ出力
bool bGrepOutputBaseFolder, //!< [in] ベースフォルダー表示
bool bGrepSeparateFolder, //!< [in] フォルダー毎に表示
bool bGrepPaste,
bool bGrepBackup
);
private:
// Grep実行
int DoGrepTree(
CEditView* pcViewDst,
CDlgCancel* pcDlgCancel, //!< [in] Cancelダイアログへのポインタ
const wchar_t* pszKey, //!< [in] 検索パターン
const CNativeW& cmGrepReplace,
CGrepEnumKeys& cGrepEnumKeys, //!< [in] 検索対象ファイルパターン(!で除外指定)
CGrepEnumFiles& cGrepExceptAbsFiles,
CGrepEnumFolders& cGrepExceptAbsFolders,
const WCHAR* pszPath, //!< [in] 検索対象パス
const WCHAR* pszBasePath, //!< [in] 検索対象パス(ベース)
const SSearchOption& sSearchOption, //!< [in] 検索オプション
const SGrepOption& sGrepOption, //!< [in] Grepオプション
const CSearchStringPattern& pattern, //!< [in] 検索パターン
CBregexp* pRegexp, //!< [in] 正規表現コンパイルデータ。既にコンパイルされている必要がある
int nNest, //!< [in] ネストレベル
bool& bOutputBaseFolder,
int* pnHitCount, //!< [i/o] ヒット数の合計
CNativeW& cmemMessage,
CNativeW& cUnicodeBuffer
);
// Grep実行
int DoGrepFile(
CEditView* pcViewDst,
CDlgCancel* pcDlgCancel,
HWND hWndTarget,
const wchar_t* pszKey,
const WCHAR* pszFile,
const SSearchOption& sSearchOption,
const SGrepOption& sGrepOption,
const CSearchStringPattern& pattern,
CBregexp* pRegexp, // Jun. 27, 2001 genta 正規表現ライブラリの差し替え
int* pnHitCount,
const WCHAR* pszFullPath,
const WCHAR* pszBaseFolder,
const WCHAR* pszFolder,
const WCHAR* pszRelPath,
bool& bOutputBaseFolder,
bool& bOutputFolderName,
CNativeW& cmemMessage,
CNativeW& cUnicodeBuffer
);
int DoGrepReplaceFile(
CEditView* pcViewDst,
CDlgCancel* pcDlgCancel,
const wchar_t* pszKey,
const CNativeW& cmGrepReplace,
const WCHAR* pszFile,
const SSearchOption& sSearchOption,
const SGrepOption& sGrepOption,
const CSearchStringPattern& pattern,
CBregexp* pRegexp,
int* pnHitCount,
const WCHAR* pszFullPath,
const WCHAR* pszBaseFolder,
const WCHAR* pszFolder,
const WCHAR* pszRelPath,
bool& bOutputBaseFolder,
bool& bOutputFolderName,
CNativeW& cmemMessage,
CNativeW& cUnicodeBuffer
);
// Grep結果をpszWorkに格納
void SetGrepResult(
// データ格納先
CNativeW& cmemMessage,
// マッチしたファイルの情報
const WCHAR* pszFilePath, // フルパス or 相対パス
const WCHAR* pszCodeName, // 文字コード情報"[SJIS]"とか
// マッチした行の情報
LONGLONG nLine, // マッチした行番号
int nColumn, // マッチした桁番号
const wchar_t* pCompareData, // 行の文字列
int nLineLen, // 行の文字列の長さ
int nEolCodeLen, // EOLの長さ
// マッチした文字列の情報
const wchar_t* pMatchData, // マッチした文字列
int nMatchLen, // マッチした文字列の長さ
// オプション
const SGrepOption& sGrepOption
);
DWORD m_dwTickAddTail; // AddTail() を呼び出した時間
DWORD m_dwTickUICheck; // 処理中にユーザーによるUI操作が行われていないか確認した時間
DWORD m_dwTickUIFileName; // Cancelダイアログのファイル名表示更新を行った時間
public: //$$ 仮
bool m_bGrepMode; //!< Grepモードか
bool m_bGrepRunning; //!< Grep処理中
};
#endif /* SAKURA_CGREPAGENT_97F2B632_71C8_4E4A_AC42_13A6098B248F_H_ */