📄 cmacro.cpp
字号:
CMemory cmWork1; cmWork1.SetDataSz( Argument[0] ); cmWork1.Replace_j( "\"", "\"\"" ); // 検索文字列
CMemory cmWork2; cmWork2.SetDataSz( Argument[1] ); cmWork2.Replace_j( "\"", "\"\"" ); // ファイル名
CMemory cmWork3; cmWork3.SetDataSz( Argument[2] ); cmWork3.Replace_j( "\"", "\"\"" ); // フォルダ名
LPARAM lFlag = Argument[3] != NULL ? atoi(Argument[3]) : 5;
// 2002/09/21 Moca 文字コードセット
{
nCharSet = CODE_SJIS;
if( lFlag & 0x10 ){ // 文字コード自動判別(下位互換用)
nCharSet = CODE_AUTODETECT;
}
int nCode = (lFlag >> 8) & 0xff; // 下から 7-15 ビット目(0開始)を使う
if( ( 0 < nCode && nCode < CODE_CODEMAX ) || CODE_AUTODETECT == nCode ){
nCharSet = nCode;
}
}
/*
|| -GREPMODE -GKEY="1" -GFILE="*.*;*.c;*.h" -GFOLDER="c:\" -GCODE=0 -GOPT=S
*/
wsprintf( pCmdLine, "-GREPMODE -GKEY=\"%s\" -GFILE=\"%s\" -GFOLDER=\"%s\" -GCODE=%d",
cmWork1.GetPtr(),
cmWork2.GetPtr(),
cmWork3.GetPtr(),
nCharSet
);
pOpt[0] = '\0';
if( lFlag & 0x01 ){ /* サブフォルダからも検索する */
strcat( pOpt, "S" );
}
// if( lFlag & 0x02 ){ /* この編集中のテキストから検索する */
//
// }
if( lFlag & 0x04 ){ /* 英大文字と英小文字を区別する */
strcat( pOpt, "L" );
}
if( lFlag & 0x08 ){ /* 正規表現 */
strcat( pOpt, "R" );
}
// 2002/09/21 Moca -GCODE に統合
// if( lFlag & 0x10 ){ /* 文字コード自動判別 */
// strcat( pOpt, "K" );
// }
if( lFlag & 0x20 ){ /* 行を出力するか該当部分だけ出力するか */
strcat( pOpt, "P" );
}
if( lFlag & 0x40 ){ /* Grep: 出力形式 */
strcat( pOpt, "2" );
}
else {
strcat( pOpt, "1" );
}
if( 0 < lstrlen( pOpt ) ){
strcat( pCmdLine, " -GOPT=" );
strcat( pCmdLine, pOpt );
}
/* 新規編集ウィンドウの追加 ver 0 */
CEditApp::OpenNewEditor( pcEditView->m_hInstance, pcEditView->m_pShareData->m_hwndTray, pCmdLine, 0, FALSE );
/*======= Grepの実行 =============*/
/* Grep結果ウィンドウの表示 */
}
break;
case F_FILEOPEN:
// Argument[0]を開く。
if( Argument[0] == NULL ){
::MYMESSAGEBOX( NULL, MB_OK | MB_ICONSTOP | MB_TOPMOST, EXEC_ERROR_TITLE,
_T( "読み込みファイル名が指定されていません." ));
break;
}
{
pcEditView->HandleCommand( Index, FALSE, (LPARAM)Argument[0], 0, 0, 0);
}
break;
case F_FILESAVEAS:
// Argument[0]を別名で保存。
if( Argument[0] == NULL ){
::MYMESSAGEBOX( NULL, MB_OK | MB_ICONSTOP | MB_TOPMOST, EXEC_ERROR_TITLE,
_T( "保存ファイル名が指定されていません." ));
break;
}
{
/* デフォルト値 */
// Sep. 11, 2004 genta 初期値を「変更しない」に
// 0だとSJIS指定となってしまうため
int nCharCode = CODE_AUTODETECT;
int nSaveLineCode = 0;
if (Argument[1] != NULL){
nCharCode = atoi( Argument[1] );
}
if (Argument[2] != NULL){
nSaveLineCode = atoi( Argument[2] );
}
// 文字コードセット
// Sep. 11, 2004 genta 文字コード設定の範囲チェック
if( 0 <= nCharCode && nCharCode < CODE_CODEMAX &&
nCharCode != pcEditView->m_pcEditDoc->m_nCharCode ){
pcEditView->m_pcEditDoc->m_nCharCode = nCharCode;
// From Here Jul. 26, 2003 ryoji BOM状態を初期化
switch( pcEditView->m_pcEditDoc->m_nCharCode ){
case CODE_UNICODE:
case CODE_UNICODEBE:
pcEditView->m_pcEditDoc->m_bBomExist = TRUE;
break;
case CODE_UTF8:
default:
pcEditView->m_pcEditDoc->m_bBomExist = FALSE;
break;
}
// To Here Jul. 26, 2003 ryoji BOM状態を初期化
}
// 改行コード
switch (nSaveLineCode){
case 0:
pcEditView->m_pcEditDoc->m_cSaveLineCode = EOL_NONE;
break;
case 1:
pcEditView->m_pcEditDoc->m_cSaveLineCode = EOL_CRLF;
break;
case 2:
pcEditView->m_pcEditDoc->m_cSaveLineCode = EOL_LF;
break;
case 3:
pcEditView->m_pcEditDoc->m_cSaveLineCode = EOL_CR;
break;
default:
pcEditView->m_pcEditDoc->m_cSaveLineCode = EOL_NONE;
break;
}
pcEditView->HandleCommand( Index, FALSE, (LPARAM)Argument[0], 0, 0, 0);
}
break;
// Jul. 5, 2002 genta
case F_EXTHTMLHELP:
pcEditView->HandleCommand( Index, FALSE, (LPARAM)Argument[0], (LPARAM)Argument[1], 0, 0);
break;
// From Here Dec. 4, 2002 genta
case F_FILE_REOPEN ://開き直す
case F_FILE_REOPEN_SJIS ://SJISで開き直す
case F_FILE_REOPEN_JIS ://JISで開き直す
case F_FILE_REOPEN_EUC ://EUCで開き直す
case F_FILE_REOPEN_UNICODE ://Unicodeで開き直す
case F_FILE_REOPEN_UNICODEBE ://UnicodeBEで開き直す
case F_FILE_REOPEN_UTF8 ://UTF-8で開き直す
case F_FILE_REOPEN_UTF7 ://UTF-7で開き直す
{
int noconfirm = 0;
if (Argument[0] != NULL){
noconfirm = ( atoi( Argument[0] ) != 0 );
}
pcEditView->HandleCommand( Index, FALSE, noconfirm, 0, 0, 0 );
}
break;
// To Here Dec. 4, 2002 genta
case F_TOPMOST:
{
int lparam1;
if( Argument[0] != NULL ){
lparam1 = atoi( Argument[0] );
pcEditView->HandleCommand( Index, FALSE, lparam1, 0, 0, 0 );
}
}
break; // Jan. 29, 2005 genta 抜けていた
case F_TAGJUMP_KEYWORD: // @@ 2005.03.31 MIK
{
//引数はNULLでもOK
pcEditView->HandleCommand( Index, FALSE, (LPARAM)Argument[0], 0, 0, 0);
}
break;
default:
// 引数なし。
pcEditView->HandleCommand( Index, FALSE, 0, 0, 0, 0 ); // 標準
break;
}
}
/*! 値を返す関数を処理する
@param View [in] 対象となるView
@param ID [in] 関数番号
@param Arguments [in] 引数の配列
@param ArgSize [in] 引数の数(Argument)
@param Result [out] 結果の値を返す場所。戻り値がfalseのときは不定。
@return true: 成功, false: 失敗
@author 鬼
@date 2003.02.21 鬼
*/
bool CMacro::HandleFunction(CEditView *View, int ID, VARIANT *Arguments, int ArgSize, VARIANT &Result)
{
//2003-02-21 鬼
switch(ID)
{
case F_GETFILENAME:
{
char const * FileName = View->m_pcEditDoc->GetFilePath();
SysString S(FileName, lstrlen(FileName));
Wrap(&Result)->Receive(S);
}
return true;
case F_GETSELECTED:
{
if(View->IsTextSelected())
{
CMemory cMem;
if(!View->GetSelectedData(cMem, FALSE, NULL, FALSE, FALSE)) return false;
SysString S(cMem.GetPtr(), cMem.GetLength());
Wrap(&Result)->Receive(S);
}
else
{
Result.vt = VT_BSTR;
Result.bstrVal = SysAllocString(L"");
}
}
return true;
case F_EXPANDPARAMETER:
// 2003.02.24 Moca
{
if(ArgSize != 1) return false;
if(Arguments[0].vt != VT_BSTR) return false;
//void ExpandParameter(const char* pszSource, char* pszBuffer, int nBufferLen);
//pszSourceを展開して、pszBufferにコピー
char *Source;
int SourceLength;
Wrap(&Arguments[0].bstrVal)->Get(&Source, &SourceLength);
char Buffer[2048];
View->m_pcEditDoc->ExpandParameter(Source, Buffer, 2047);
delete[] Source;
SysString S(Buffer, lstrlen(Buffer));
Wrap(&Result)->Receive(S);
}
return true;
case F_GETLINESTR:
// 2003.06.01 Moca マクロ追加
{
if( ArgSize != 1 ) return false;
if( Arguments[0].vt != VT_I4 ) return false;
if( -1 < Arguments[0].lVal ){
const char *Buffer;
int nLength, nLine;
if( 0 == Arguments[0].lVal ){
nLine = View->m_nCaretPosY_PHY;
}else{
nLine = Arguments[0].lVal - 1;
}
Buffer = View->m_pcEditDoc->m_cDocLineMgr.GetLineStr( nLine, &nLength );
if( Buffer != NULL ){
SysString S( Buffer, nLength );
Wrap( &Result )->Receive( S );
}else{
Result.vt = VT_BSTR;
Result.bstrVal = SysAllocString(L"");
}
}else{
return false;
}
}
return true;
case F_GETLINECOUNT:
// 2003.06.01 Moca マクロ追加
{
if( ArgSize != 1 ) return false;
if( Arguments[0].vt != VT_I4 ) return false;
if( 0 == Arguments[0].lVal ){
int nLineCount;
nLineCount = View->m_pcEditDoc->m_cDocLineMgr.GetLineCount();
Wrap( &Result )->Receive( nLineCount );
}else{
return false;
}
}
return true;
default:
return false;
}
}
/*[EOF]*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -