📄 cproptypesregex.cpp
字号:
// $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 + -