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

📄 cproptypesregex.cpp

📁 日本的开源编辑器源码
💻 CPP
📖 第 1 页 / 共 3 页
字号:
//	$Id: CPropTypesRegex.cpp,v 1.12 2003/09/19 16:41:18 genta Exp $
/*!	@file
	タイプ別設定正規表現キーワードダイアログボックス

	@author MIK
	@date 2001/11/17  新規作成
	$Revision: 1.12 $
*/
/*
	Copyright (C) 2001, MIK
	Copyright (C) 2002, MIK
	Copyright (C) 2003, MIK

	This source code is designed for sakura editor.
	Please contact the copyright holder to use this code for other purpose.
*/

//@@@ 2001.11.17 add start MIK

#include "sakura_rc.h"
#include "CPropTypes.h"
#include "debug.h"
#include <windows.h>
#include <commctrl.h>
#include "CDlgOpenFile.h"
#include "etc_uty.h"
#include "global.h"
#include "CProfile.h"
#include "CShareData.h"
#include "funccode.h"	//Stonee, 2001/05/18
#include <stdio.h>	//@@@ 2001.11.17 add MIK
#include "CRegexKeyword.h"	//@@@ 2001.11.17 add MIK


#include "sakura.hh"
static const DWORD p_helpids[] = {	//11600
	IDC_BUTTON_REGEX_IMPORT,	HIDC_BUTTON_REGEX_IMPORT,	//インポート
	IDC_BUTTON_REGEX_EXPORT,	HIDC_BUTTON_REGEX_EXPORT,	//エクスポート
	IDC_BUTTON_REGEX_INS,		HIDC_BUTTON_REGEX_INS,		//挿入
	IDC_BUTTON_REGEX_ADD,		HIDC_BUTTON_REGEX_ADD,		//追加
	IDC_BUTTON_REGEX_UPD,		HIDC_BUTTON_REGEX_UPD,		//更新
	IDC_BUTTON_REGEX_DEL,		HIDC_BUTTON_REGEX_DEL,		//削除
	IDC_BUTTON_REGEX_TOP,		HIDC_BUTTON_REGEX_TOP,		//先頭
	IDC_BUTTON_REGEX_LAST,		HIDC_BUTTON_REGEX_LAST,		//最終
	IDC_BUTTON_REGEX_UP,		HIDC_BUTTON_REGEX_UP,		//上へ
	IDC_BUTTON_REGEX_DOWN,		HIDC_BUTTON_REGEX_DOWN,		//下へ
	IDC_CHECK_REGEX,			HIDC_CHECK_REGEX,			//正規表現キーワードを使用する
	IDC_COMBO_REGEX_COLOR,		HIDC_COMBO_REGEX_COLOR,		//色
	IDC_EDIT_REGEX,				HIDC_EDIT_REGEX,			//正規表現キーワード
	IDC_LIST_REGEX,				HIDC_LIST_REGEX,			//リスト
	IDC_LABEL_REGEX_KEYWORD,	HIDC_EDIT_REGEX,			
	IDC_LABEL_REGEX_COLOR,		HIDC_COMBO_REGEX_COLOR,		
	IDC_FRAME_REGEX,			HIDC_LIST_REGEX,			
	IDC_LABEL_REGEX_VERSION,	HIDC_LABEL_REGEX_VERSION,	//バージョン
//	IDC_STATIC,						-1,
	0, 0
};


/* 正規表現キーワード ダイアログプロシージャ */
INT_PTR CALLBACK CPropTypes::PropTypesRegex(
	HWND	hwndDlg,	// handle to dialog box
	UINT	uMsg,		// message
	WPARAM	wParam,		// first message parameter
	LPARAM	lParam 		// second message parameter
)
{
	PROPSHEETPAGE*	pPsp;
	CPropTypes* pCPropTypes;
	switch( uMsg ){
	case WM_INITDIALOG:
		pPsp = (PROPSHEETPAGE*)lParam;
		pCPropTypes = ( CPropTypes* )(pPsp->lParam);
		if( NULL != pCPropTypes ){
			return pCPropTypes->DispatchEvent_Regex( hwndDlg, uMsg, wParam, pPsp->lParam );
		}
		break;
	default:
		// Modified by KEITA for WIN64 2003.9.6
		pCPropTypes = ( CPropTypes* )::GetWindowLongPtr( hwndDlg, DWLP_USER );
		if( NULL != pCPropTypes ){
			return pCPropTypes->DispatchEvent_Regex( hwndDlg, uMsg, wParam, lParam );
		}
		break;
	}
	return FALSE;
}

BOOL CPropTypes::Import_Regex(HWND hwndDlg)
{
	CDlgOpenFile	cDlgOpenFile;
	char		szPath[_MAX_PATH + 1];
	int		i, j, k;
	char		szInitDir[_MAX_PATH + 1];
//	CProfile	cProfile;
	FILE		*fp;
	struct RegexKeywordInfo	pRegexKey[MAX_REGEX_KEYWORD];
	char	buff[1024];
	HWND	hwndWork;
	LV_ITEM	lvi;
	char	*p;

	strcpy( szPath, "" );
	strcpy( szInitDir, m_pShareData->m_szIMPORTFOLDER );	/* インポート用フォルダ */
	/* ファイルオープンダイアログの初期化 */
	cDlgOpenFile.Create(
		m_hInstance,
		hwndDlg,
		"*.rkw",	/* [R]egex [K]ey[W]ord */
		szInitDir
	);
	if( !cDlgOpenFile.DoModal_GetOpenFileName( szPath ) ){
		return FALSE;
	}
	/* ファイルのフルパスを、フォルダとファイル名に分割 */
	/* [c:\work\test\aaa.txt] → [c:\work\test] + [aaa.txt] */
	::SplitPath_FolderAndFile( szPath, m_pShareData->m_szIMPORTFOLDER, NULL );
	strcat( m_pShareData->m_szIMPORTFOLDER, "\\" );

	if( (fp = fopen(szPath, "r")) == NULL )
	{
		::MYMESSAGEBOX( hwndDlg, MB_OK | MB_ICONSTOP, GSTR_APPNAME, "ファイルを開けませんでした。\n\n%s", szPath );
		return FALSE;
	}

	j = 0;
	while(fgets(buff, sizeof(buff), fp))
	{
		if(j >= MAX_REGEX_KEYWORD) break;
		for(i = strlen(buff) - 1; i >= 0; i--){
			if( buff[i] == '\r' || buff[i] == '\n' ) buff[i] = '\0';
		}
		//RxKey[999]=ColorName,RegexKeyword
		if( strlen(buff) < 12 ) continue;
		if( memcmp(buff, "RxKey[", 6) != 0 ) continue;
		if( memcmp(&buff[9], "]=", 2) != 0 ) continue;
		p = strstr(&buff[11], ",");
		if( p )
		{
			*p = '\0';
			p++;
			if( p[0]	//キーワードがある
			 && RegexKakomiCheck(p) == TRUE )	//囲みがある
			{
				//色指定名に対応する番号を探す
				k = GetColorIndexByName( &buff[11] );	//@@@ 2002.04.30
				if( k != -1 )	/* 3文字カラー名からインデックス番号に変換 */
				{
					pRegexKey[j].m_nColorIndex = k;
					strcpy(pRegexKey[j].m_szKeyword, p);
					j++;
				}
				else
				{	/* 日本語名からインデックス番号に変換する */
					for(k = 0; k < COLORIDX_LAST; k++)
					{
						if( strcmp(m_Types.m_ColorInfoArr[k].m_szName, &buff[11]) == 0 )
						{
							pRegexKey[j].m_nColorIndex = k;
							strcpy(pRegexKey[j].m_szKeyword, p);
							j++;
							break;
						}
					}
				}
			}
		}
	}

	fclose(fp);

	hwndWork = ::GetDlgItem( hwndDlg, IDC_LIST_REGEX );
	ListView_DeleteAllItems(hwndWork);  /* リストを空にする */
	for(i = 0; i < j; i++)
	{
		lvi.mask     = LVIF_TEXT | LVIF_PARAM;
		lvi.pszText  = pRegexKey[i].m_szKeyword;
		lvi.iItem    = i;
		lvi.iSubItem = 0;
		lvi.lParam   = 0;
		ListView_InsertItem( hwndWork, &lvi );
		lvi.mask     = LVIF_TEXT;
		lvi.iItem    = i;
		lvi.iSubItem = 1;
		lvi.pszText  = m_Types.m_ColorInfoArr[pRegexKey[i].m_nColorIndex].m_szName;
		ListView_SetItem( hwndWork, &lvi );
	}
	ListView_SetItemState( hwndWork, 0, LVIS_SELECTED | LVIS_FOCUSED, LVIS_SELECTED | LVIS_FOCUSED );

	return TRUE;
}

BOOL CPropTypes::Export_Regex(HWND hwndDlg)
{
	CDlgOpenFile	cDlgOpenFile;
	char		szPath[_MAX_PATH + 1];
	int		i, j, k;
	char		szInitDir[_MAX_PATH + 1];
//	CProfile	cProfile;
	FILE		*fp;
	char	szKeyWord[256], szColorIndex[256];
	HWND	hwndList;

	strcpy( szPath, "" );
	strcpy( szInitDir, m_pShareData->m_szIMPORTFOLDER );	/* インポート用フォルダ */
	/* ファイルオープンダイアログの初期化 */
	cDlgOpenFile.Create(
		m_hInstance,
		hwndDlg,
		"*.rkw",	/* [R]egex [K]ey[W]ord */
		szInitDir
	);
	if( !cDlgOpenFile.DoModal_GetSaveFileName( szPath ) ){
		return FALSE;
	}
	/* ファイルのフルパスを、フォルダとファイル名に分割 */
	/* [c:\work\test\aaa.txt] → [c:\work\test] + [aaa.txt] */
	::SplitPath_FolderAndFile( szPath, m_pShareData->m_szIMPORTFOLDER, NULL );
	strcat( m_pShareData->m_szIMPORTFOLDER, "\\" );

	if( (fp = fopen(szPath, "w")) == NULL )
	{
		::MYMESSAGEBOX( hwndDlg, MB_OK | MB_ICONSTOP, GSTR_APPNAME, "ファイルを開けませんでした。\n\n%s", szPath );
		return FALSE;
	}

	fprintf(fp, "// 正規表現キーワード Ver1\n");

	hwndList = GetDlgItem( hwndDlg, IDC_LIST_REGEX );
	j = ListView_GetItemCount(hwndList);
	for(i = 0; i < j; i++)
	{
		memset(szKeyWord, 0, sizeof(szKeyWord));
		ListView_GetItemText(hwndList, i, 0, szKeyWord, sizeof(szKeyWord));
		memset(szColorIndex, 0, sizeof(szColorIndex));
		ListView_GetItemText(hwndList, i, 1, szColorIndex, sizeof(szColorIndex));

		const char* p = szColorIndex;
		for(k = 0; k < COLORIDX_LAST; k++)
		{
			if( strcmp( m_Types.m_ColorInfoArr[k].m_szName, szColorIndex ) == 0 )
			{
				p = GetColorNameByIndex(k);
				break;
			}
		}
		//fprintf(fp, "RxKey[%03d]=%s,%s\n", i, szColorIndex, szKeyWord);
		fprintf(fp, "RxKey[%03d]=%s,%s\n", i, p, szKeyWord);
	}

	fclose(fp);

	::MYMESSAGEBOX(	hwndDlg, MB_OK | MB_ICONINFORMATION, GSTR_APPNAME,
		"ファイルへエクスポートしました。\n\n%s", szPath
	);

	return TRUE;
}

/* 正規表現キーワード メッセージ処理 */
INT_PTR CPropTypes::DispatchEvent_Regex(
	HWND		hwndDlg,	// handle to dialog box
	UINT		uMsg,		// message
	WPARAM		wParam,		// first message parameter
	LPARAM		lParam 		// second message parameter
)
{
	WORD	wNotifyCode;
	WORD	wID;
	HWND	hwndCtl, hwndList;
	int	idCtrl;
	NMHDR*	pNMHDR;
	int	nIndex, nIndex2, i, j, k, nRet;
	LV_ITEM	lvi;
	LV_COLUMN	col;
	RECT		rc;
	char	szKeyWord[256], szColorIndex[256];
	static int nPrevIndex = -1;	//更新時におかしくなるバグ修正 @@@ 2003.03.26 MIK

	hwndList = GetDlgItem( hwndDlg, IDC_LIST_REGEX );

	switch( uMsg ){
	case WM_INITDIALOG:
		// Modified by KEITA for WIN64 2003.9.6
		::SetWindowLongPtr( hwndDlg, DWLP_USER, lParam );

		/* カラム追加 */
		//ListView_DeleteColumn( hwndList, 1 );
		//ListView_DeleteColumn( hwndList, 0 );
		::GetWindowRect( hwndList, &rc );
		col.mask     = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
		col.fmt      = LVCFMT_LEFT;
		col.cx       = (rc.right - rc.left) * 54 / 100;
		col.pszText  = "キーワード";
		col.iSubItem = 0;
		ListView_InsertColumn( hwndList, 0, &col );
		col.mask     = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
		col.fmt      = LVCFMT_LEFT;
		col.cx       = (rc.right - rc.left) * 38 / 100;
		col.pszText  = "色指定";
		col.iSubItem = 1;
		ListView_InsertColumn( hwndList, 1, &col );

		nPrevIndex = -1;	//@@@ 2003.05.12 MIK
		SetData_Regex( hwndDlg );	/* ダイアログデータの設定 正規表現キーワード */
		if( CheckRegexpVersion( hwndDlg, IDC_LABEL_REGEX_VERSION, false ) == false )	//@@@ 2001.11.17 add MIK
		{
			::SetDlgItemText( hwndDlg, IDC_LABEL_REGEX_VERSION, "正規表現キーワードは使えません。" );
			//ライブラリがなくて、使用しないになっている場合は、無効にする。
			if( ! IsDlgButtonChecked( hwndDlg, IDC_CHECK_REGEX ) )
			{
				//Disableにする。
				EnableWindow( GetDlgItem( hwndDlg, IDC_CHECK_REGEX ), FALSE );
			}
			else
			{
				//使用するになってるんだけどDisableにする。もうユーザは変更できない。
				EnableWindow( GetDlgItem( hwndDlg, IDC_CHECK_REGEX ), FALSE );
			}
		}
		return TRUE;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -