⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cmacro.cpp

📁 日本的开源编辑器源码
💻 CPP
📖 第 1 页 / 共 3 页
字号:
			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 + -