From 803c8d922cd669ab46d074b5e295caad9992c7e2 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 12 Sep 2020 16:49:11 +0900 Subject: [PATCH 01/10] =?UTF-8?q?=E3=82=AD=E3=83=BC=E3=83=AF=E3=83=BC?= =?UTF-8?q?=E3=83=89=E3=83=98=E3=83=AB=E3=83=97=E3=81=AE=E8=AA=AC=E6=98=8E?= =?UTF-8?q?=E6=96=87=E3=81=AB"\n"=E3=82=92=E8=A1=A8=E7=A4=BA=E3=81=A7?= =?UTF-8?q?=E3=81=8D=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/window/CTipWnd.cpp | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/sakura_core/window/CTipWnd.cpp b/sakura_core/window/CTipWnd.cpp index 4281ead03a..14b02c4b89 100644 --- a/sakura_core/window/CTipWnd.cpp +++ b/sakura_core/window/CTipWnd.cpp @@ -17,6 +17,10 @@ #include "StdAfx.h" #include "CTipWnd.h" + +#include +#include + #include "env/CShareData.h" #include "env/DLLSHAREDATA.h" #include "util/window.h" @@ -151,6 +155,16 @@ void CTipWnd::ComputeWindowSize( const int cx4 = DpiScaleX( 4 ); const int cy4 = DpiScaleY( 4 ); + std::wregex re1( LR"(([^\\])\\n)" ); + std::wregex re2( LR"((\\)\\)" ); + if( m_cInfo.IsValid() + && ( std::regex_search( m_cInfo.GetStringPtr(), re1 ) || std::regex_search( m_cInfo.GetStringPtr(), re2 ) ) ){ + auto text = std::regex_replace( m_cInfo.GetStringPtr(), re1, L"$1\n" ); + text = std::regex_replace( text, re1, L"$1\n" ); + text = std::regex_replace( text, re2, L"$1" ); + m_cInfo.SetString( text.c_str(), text.length() ); + } + // 計測対象をメンバ変数からローカル変数に取得 const WCHAR* pszText = m_cInfo.GetStringPtr(); const size_t cchText = m_cInfo.GetStringLength(); @@ -166,7 +180,7 @@ void CTipWnd::ComputeWindowSize( const bool isEndOfText = ( pszText[i] == '\0' ); // iの位置にNUL終端、または"\n"がある場合 if ( isEndOfText - || ( i + 1 < cchText && pszText[i] == '\\' && pszText[i + 1] == 'n' ) ) { + || pszText[i] == '\n' ) { // 計測結果を格納する矩形 CMyRect rc; // 計測対象の文字列がブランクでない場合 @@ -197,7 +211,7 @@ void CTipWnd::ComputeWindowSize( } // 次の行の開始位置を設定する - nLineBgn = i + 2; // "\\n" の文字数 + nLineBgn = i + 1; // "\n" の文字数 i = nLineBgn; }else{ // 現在位置の文字がTCHAR単位で何文字に当たるか計算してインデックスを進める @@ -247,7 +261,7 @@ void CTipWnd::DrawTipText( const bool isEndOfText = ( pszText[i] == '\0' ); // iの位置にNUL終端、または"\n"がある場合 if ( isEndOfText - || ( i + 1 < cchText && pszText[i] == '\\' && pszText[i + 1] == 'n' ) ) { + || pszText[i] == '\n' ) { int nHeight; // 計測対象の文字列がブランクでない場合 if ( 0 < i - nLineBgn ) { @@ -269,7 +283,7 @@ void CTipWnd::DrawTipText( } // 次の行の開始位置を設定する - nLineBgn = i + 2; // "\\n" の文字数 + nLineBgn = i + 1; // "\n" の文字数 i = nLineBgn; }else{ // 現在位置の文字がTCHAR単位で何文字に当たるか計算してインデックスを進める From 791bf8b54ad818b22037704e1b5dc29df0b1491a Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sun, 13 Sep 2020 00:18:12 +0900 Subject: [PATCH 02/10] =?UTF-8?q?Revert=20"=E3=82=AD=E3=83=BC=E3=83=AF?= =?UTF-8?q?=E3=83=BC=E3=83=89=E3=83=98=E3=83=AB=E3=83=97=E3=81=AE=E8=AA=AC?= =?UTF-8?q?=E6=98=8E=E6=96=87=E3=81=AB"\n"=E3=82=92=E8=A1=A8=E7=A4=BA?= =?UTF-8?q?=E3=81=A7=E3=81=8D=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB=E3=81=99?= =?UTF-8?q?=E3=82=8B"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit 803c8d922cd669ab46d074b5e295caad9992c7e2. --- sakura_core/window/CTipWnd.cpp | 22 ++++------------------ 1 file changed, 4 insertions(+), 18 deletions(-) diff --git a/sakura_core/window/CTipWnd.cpp b/sakura_core/window/CTipWnd.cpp index 14b02c4b89..4281ead03a 100644 --- a/sakura_core/window/CTipWnd.cpp +++ b/sakura_core/window/CTipWnd.cpp @@ -17,10 +17,6 @@ #include "StdAfx.h" #include "CTipWnd.h" - -#include -#include - #include "env/CShareData.h" #include "env/DLLSHAREDATA.h" #include "util/window.h" @@ -155,16 +151,6 @@ void CTipWnd::ComputeWindowSize( const int cx4 = DpiScaleX( 4 ); const int cy4 = DpiScaleY( 4 ); - std::wregex re1( LR"(([^\\])\\n)" ); - std::wregex re2( LR"((\\)\\)" ); - if( m_cInfo.IsValid() - && ( std::regex_search( m_cInfo.GetStringPtr(), re1 ) || std::regex_search( m_cInfo.GetStringPtr(), re2 ) ) ){ - auto text = std::regex_replace( m_cInfo.GetStringPtr(), re1, L"$1\n" ); - text = std::regex_replace( text, re1, L"$1\n" ); - text = std::regex_replace( text, re2, L"$1" ); - m_cInfo.SetString( text.c_str(), text.length() ); - } - // 計測対象をメンバ変数からローカル変数に取得 const WCHAR* pszText = m_cInfo.GetStringPtr(); const size_t cchText = m_cInfo.GetStringLength(); @@ -180,7 +166,7 @@ void CTipWnd::ComputeWindowSize( const bool isEndOfText = ( pszText[i] == '\0' ); // iの位置にNUL終端、または"\n"がある場合 if ( isEndOfText - || pszText[i] == '\n' ) { + || ( i + 1 < cchText && pszText[i] == '\\' && pszText[i + 1] == 'n' ) ) { // 計測結果を格納する矩形 CMyRect rc; // 計測対象の文字列がブランクでない場合 @@ -211,7 +197,7 @@ void CTipWnd::ComputeWindowSize( } // 次の行の開始位置を設定する - nLineBgn = i + 1; // "\n" の文字数 + nLineBgn = i + 2; // "\\n" の文字数 i = nLineBgn; }else{ // 現在位置の文字がTCHAR単位で何文字に当たるか計算してインデックスを進める @@ -261,7 +247,7 @@ void CTipWnd::DrawTipText( const bool isEndOfText = ( pszText[i] == '\0' ); // iの位置にNUL終端、または"\n"がある場合 if ( isEndOfText - || pszText[i] == '\n' ) { + || ( i + 1 < cchText && pszText[i] == '\\' && pszText[i + 1] == 'n' ) ) { int nHeight; // 計測対象の文字列がブランクでない場合 if ( 0 < i - nLineBgn ) { @@ -283,7 +269,7 @@ void CTipWnd::DrawTipText( } // 次の行の開始位置を設定する - nLineBgn = i + 1; // "\n" の文字数 + nLineBgn = i + 2; // "\\n" の文字数 i = nLineBgn; }else{ // 現在位置の文字がTCHAR単位で何文字に当たるか計算してインデックスを進める From 931b07e4a14f456d9b63e1fdeeb054ff8c24f7b8 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sun, 13 Sep 2020 00:33:32 +0900 Subject: [PATCH 03/10] =?UTF-8?q?=E3=82=AD=E3=83=BC=E3=83=AF=E3=83=BC?= =?UTF-8?q?=E3=83=89=E3=83=98=E3=83=AB=E3=83=97=E3=81=AE=E8=AA=AC=E6=98=8E?= =?UTF-8?q?=E6=96=87=E3=81=AB"\n"=E3=82=92=E8=A1=A8=E7=A4=BA=E3=81=A7?= =?UTF-8?q?=E3=81=8D=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/cmd/CViewCommander_CustMenu.cpp | 23 +--- sakura_core/view/CEditView_Search.cpp | 118 +++++++++----------- sakura_core/window/CTipWnd.cpp | 17 ++- sakura_core/window/CTipWnd.h | 11 +- 4 files changed, 83 insertions(+), 86 deletions(-) diff --git a/sakura_core/cmd/CViewCommander_CustMenu.cpp b/sakura_core/cmd/CViewCommander_CustMenu.cpp index f55ead6eca..8dad6b9e2d 100644 --- a/sakura_core/cmd/CViewCommander_CustMenu.cpp +++ b/sakura_core/cmd/CViewCommander_CustMenu.cpp @@ -23,33 +23,21 @@ /* 右クリックメニュー */ void CViewCommander::Command_MENU_RBUTTON( void ) { - int nId; - int nLength; -// HGLOBAL hgClip; -// char* pszClip; - int i; /* ポップアップメニュー(右クリック) */ - nId = m_pCommanderView->CreatePopUpMenu_R(); + auto nId = m_pCommanderView->CreatePopUpMenu_R(); if( 0 == nId ){ return; } switch( nId ){ case IDM_COPYDICINFO: { - nLength = m_pCommanderView->m_cTipWnd.m_cInfo.GetStringLength(); - const WCHAR* pszStr = m_pCommanderView->m_cTipWnd.m_cInfo.GetStringPtr(); - WCHAR* pszWork = _wcsdup( pszStr ); + CNativeW cInfo = m_pCommanderView->m_cTipWnd.GetInfoText(); // 見た目と同じように、\n を CR+LFへ変換する - for( i = 0; i < nLength ; ++i){ - if( pszWork[i] == L'\\' && pszWork[i + 1] == L'n'){ - pszWork[i] = WCODE::CR; - pszWork[i + 1] = WCODE::LF; - } - } + cInfo.Replace( L"\n", L"\r\n" ); + /* クリップボードにデータを設定 */ - m_pCommanderView->MySetClipboardData( pszWork, nLength, false ); - free( pszWork ); + m_pCommanderView->MySetClipboardData( cInfo.GetStringPtr(), cInfo.GetStringLength(), false ); break; } @@ -68,7 +56,6 @@ void CViewCommander::Command_MENU_RBUTTON( void ) default: /* コマンドコードによる処理振り分け */ -// HandleCommand( nId, true, 0, 0, 0, 0 ); ::PostMessageCmd( GetMainWindow(), WM_COMMAND, MAKELONG( nId, 0 ), (LPARAM)NULL ); break; } diff --git a/sakura_core/view/CEditView_Search.cpp b/sakura_core/view/CEditView_Search.cpp index 10e27b90ae..d33439fa9d 100644 --- a/sakura_core/view/CEditView_Search.cpp +++ b/sakura_core/view/CEditView_Search.cpp @@ -106,85 +106,77 @@ BOOL CEditView::KeyWordHelpSearchDict( LID_SKH nID, POINT* po, RECT* rc ) */ BOOL CEditView::KeySearchCore( const CNativeW* pcmemCurText ) { - CNativeW* pcmemRefKey; - int nCmpLen = STRNCMP_MAX; // 2006.04.10 fon - int nLine; // 2006.04.10 fon + /* tooltipバッファ初期化 */ + m_cTipWnd.m_cInfo.Clear(); - m_cTipWnd.m_cInfo.SetString( L"" ); /* tooltipバッファ初期化 */ /* 1行目にキーワード表示の場合 */ - if(m_pTypeData->m_bUseKeyHelpKeyDisp){ /* キーワードも表示する */ // 2006.04.10 fon - m_cTipWnd.m_cInfo.AppendString( L"[ " ); - m_cTipWnd.m_cInfo.AppendString( pcmemCurText->GetStringPtr() ); - m_cTipWnd.m_cInfo.AppendString( L" ]" ); + if( m_pTypeData->m_bUseKeyHelpKeyDisp ){ /* キーワードも表示する */ // 2006.04.10 fon + m_cTipWnd.m_cInfo.AppendStringF( L"[ %s ]", pcmemCurText->GetStringPtr() ); } - /* 途中まで一致を使う場合 */ - if(m_pTypeData->m_bUseKeyHelpPrefix) - nCmpLen = wcslen( pcmemCurText->GetStringPtr() ); // 2006.04.10 fon + + // 一致確認する最大文字数、途中まで一致を使う場合は短くする + const int nCmpLen = m_pTypeData->m_bUseKeyHelpPrefix + ? std::min( STRNCMP_MAX, (int)::wcslen( pcmemCurText->GetStringPtr() ) ) + : STRNCMP_MAX; + + // 検索前にヒットフラグをクリアしておく m_cTipWnd.m_KeyWasHit = FALSE; - for(int i =0 ; i < m_pTypeData->m_nKeyHelpNum; i++){ //最大数:MAX_KEYHELP_FILE + + // 辞書ファイルの冊数、最大値は MAX_KEYHELP_FILE 。 + const int nKeyHelpNum = std::min(m_pTypeData->m_nKeyHelpNum, (int)MAX_KEYHELP_FILE); + + for( int i = 0; i < nKeyHelpNum; i++ ){ if( m_pTypeData->m_KeyHelpArr[i].m_bUse ){ - // 2006.04.10 fon (nCmpLen,pcmemRefKey,nSearchLine)引数を追加 - CNativeW* pcmemRefText; - int nSearchResult=m_cDicMgr.CDicMgr::Search( + CNativeW* pcmemRefKey = NULL; + CNativeW* pcmemRefText = NULL; + int nLine; + const auto& szPath = m_pTypeData->m_KeyHelpArr[i].m_szPath; + const int nSearchResult = m_cDicMgr.CDicMgr::Search( pcmemCurText->GetStringPtr(), nCmpLen, &pcmemRefKey, &pcmemRefText, - m_pTypeData->m_KeyHelpArr[i].m_szPath, + szPath, &nLine ); - if(nSearchResult){ - /* 該当するキーがある */ - LPWSTR pszWork = pcmemRefText->GetStringPtr(); + + /* 該当するキーがある */ + if( nSearchResult ){ + // バッファが空でなければseparator挿入 + if( m_cTipWnd.GetInfoText().GetStringLength() != 0 ){ + m_cTipWnd.m_cInfo.AppendString( L"\n--------------------\n" ); + } + /* 有効になっている辞書を全部なめて、ヒットの都度説明の継ぎ増し */ - if(m_pTypeData->m_bUseKeyHelpAllSearch){ /* ヒットした次の辞書も検索 */ // 2006.04.10 fon - /* バッファに前のデータが詰まっていたらseparator挿入 */ - if(m_cTipWnd.m_cInfo.GetStringLength() != 0) - m_cTipWnd.m_cInfo.AppendString( LS(STR_ERR_DLGEDITVW5) ); - else - m_cTipWnd.m_cInfo.AppendString( LS(STR_ERR_DLGEDITVW6) ); /* 先頭の場合 */ - /* 辞書のパス挿入 */ - { - WCHAR szFile[MAX_PATH]; - // 2013.05.08 表示するのはファイル名(拡張子なし)のみにする - _wsplitpath( m_pTypeData->m_KeyHelpArr[i].m_szPath, NULL, NULL, szFile, NULL ); - m_cTipWnd.m_cInfo.AppendString( szFile ); - } - m_cTipWnd.m_cInfo.AppendString( L"\n" ); - /* 前方一致でヒットした単語を挿入 */ - if(m_pTypeData->m_bUseKeyHelpPrefix){ /* 選択範囲で前方一致検索 */ - m_cTipWnd.m_cInfo.AppendString( pcmemRefKey->GetStringPtr() ); - m_cTipWnd.m_cInfo.AppendString( L" >>\n" ); - }/* 調査した「意味」を挿入 */ - m_cTipWnd.m_cInfo.AppendString( pszWork ); - delete pcmemRefText; - delete pcmemRefKey; // 2006.07.02 genta - /* タグジャンプ用の情報を残す */ - if(!m_cTipWnd.m_KeyWasHit){ - m_cTipWnd.m_nSearchDict=i; /* 辞書を開くとき最初にヒットした辞書を開く */ - m_cTipWnd.m_nSearchLine=nLine; - m_cTipWnd.m_KeyWasHit = TRUE; - } + if( m_pTypeData->m_bUseKeyHelpAllSearch ){ /* ヒットした次の辞書も検索 */ + /* 複数辞書をなめるので辞書のパス挿入、表示するのはファイル名(拡張子なし)のみ */ + WCHAR szFile[MAX_PATH]; + _wsplitpath( szPath, NULL, NULL, szFile, NULL ); + m_cTipWnd.m_cInfo.AppendStringF( L"■%s\n", szFile ); + } + + /* 前方一致でヒットした単語を挿入 */ + if( m_pTypeData->m_bUseKeyHelpPrefix ){ /* 選択範囲で前方一致検索 */ + m_cTipWnd.m_cInfo.AppendStringF(L"%s >>\n", pcmemRefKey->GetStringPtr() ); } - else{ /* 最初のヒット項目のみ返す場合 */ - /* キーワードが入っていたらseparator挿入 */ - if(m_cTipWnd.m_cInfo.GetStringLength() != 0) - m_cTipWnd.m_cInfo.AppendString( L"\n--------------------\n" ); - - /* 前方一致でヒットした単語を挿入 */ - if(m_pTypeData->m_bUseKeyHelpPrefix){ /* 選択範囲で前方一致検索 */ - m_cTipWnd.m_cInfo.AppendString( pcmemRefKey->GetStringPtr() ); - m_cTipWnd.m_cInfo.AppendString( L" >>\n" ); - } - /* 調査した「意味」を挿入 */ - m_cTipWnd.m_cInfo.AppendString( pszWork ); - delete pcmemRefText; - delete pcmemRefKey; // 2006.07.02 genta + /* 調査した「意味」を挿入 */ + m_cTipWnd.m_cInfo.AppendString( UnEscapeInfoText( *pcmemRefText ) ); + + /* 最初のヒット項目のみ返す場合、または、初回ヒットの場合 */ + if( !m_pTypeData->m_bUseKeyHelpAllSearch + || !m_cTipWnd.m_KeyWasHit ){ /* タグジャンプ用の情報を残す */ - m_cTipWnd.m_nSearchDict=i; - m_cTipWnd.m_nSearchLine=nLine; + m_cTipWnd.m_nSearchDict = i; + m_cTipWnd.m_nSearchLine = nLine; m_cTipWnd.m_KeyWasHit = TRUE; + } + + delete pcmemRefText; + delete pcmemRefKey; + + /* 最初のヒット項目のみ返す場合 */ + if( !m_pTypeData->m_bUseKeyHelpAllSearch ){ return TRUE; } } diff --git a/sakura_core/window/CTipWnd.cpp b/sakura_core/window/CTipWnd.cpp index 4281ead03a..17aa83f8b7 100644 --- a/sakura_core/window/CTipWnd.cpp +++ b/sakura_core/window/CTipWnd.cpp @@ -24,6 +24,14 @@ // ダミー文字列 static constexpr WCHAR szDummy[] = { L" " }; +/* Tipの内容データを設定するためにエスケープ解除を行う */ +const WCHAR* UnEscapeInfoText( CNativeW& cInfo ) +{ + cInfo.Replace( L"\\n", L"\n" ); + cInfo.Replace( L"\\x53", L"\\" ); + return cInfo.GetStringPtr(); +} + /* CTipWndクラス デストラクタ */ CTipWnd::CTipWnd() : CWnd(L"::CTipWnd") @@ -105,6 +113,7 @@ void CTipWnd::Show( int nX, int nY, const WCHAR* szText, RECT* pRect ) if( NULL != szText ){ m_cInfo.SetString( szText ); + UnEscapeInfoText( m_cInfo ); } hdc = ::GetDC( GetHwnd() ); @@ -166,7 +175,7 @@ void CTipWnd::ComputeWindowSize( const bool isEndOfText = ( pszText[i] == '\0' ); // iの位置にNUL終端、または"\n"がある場合 if ( isEndOfText - || ( i + 1 < cchText && pszText[i] == '\\' && pszText[i + 1] == 'n' ) ) { + || pszText[i] == '\n' ) { // 計測結果を格納する矩形 CMyRect rc; // 計測対象の文字列がブランクでない場合 @@ -197,7 +206,7 @@ void CTipWnd::ComputeWindowSize( } // 次の行の開始位置を設定する - nLineBgn = i + 2; // "\\n" の文字数 + nLineBgn = i + 1; // "\n" の文字数 i = nLineBgn; }else{ // 現在位置の文字がTCHAR単位で何文字に当たるか計算してインデックスを進める @@ -247,7 +256,7 @@ void CTipWnd::DrawTipText( const bool isEndOfText = ( pszText[i] == '\0' ); // iの位置にNUL終端、または"\n"がある場合 if ( isEndOfText - || ( i + 1 < cchText && pszText[i] == '\\' && pszText[i + 1] == 'n' ) ) { + || pszText[i] == '\n' ) { int nHeight; // 計測対象の文字列がブランクでない場合 if ( 0 < i - nLineBgn ) { @@ -269,7 +278,7 @@ void CTipWnd::DrawTipText( } // 次の行の開始位置を設定する - nLineBgn = i + 2; // "\\n" の文字数 + nLineBgn = i + 1; // "\n" の文字数 i = nLineBgn; }else{ // 現在位置の文字がTCHAR単位で何文字に当たるか計算してインデックスを進める diff --git a/sakura_core/window/CTipWnd.h b/sakura_core/window/CTipWnd.h index cd6e047328..8952be7a8c 100644 --- a/sakura_core/window/CTipWnd.h +++ b/sakura_core/window/CTipWnd.h @@ -21,7 +21,8 @@ class CTipWnd; #include "CWnd.h" -#include "mem/CMemory.h" +#include "mem/CNativeW.h" + /*----------------------------------------------------------------------- クラスの宣言 -----------------------------------------------------------------------*/ @@ -74,5 +75,13 @@ class CTipWnd final : public CWnd /* 仮想関数 メッセージ処理 詳しくは実装を参照 */ LRESULT OnPaint(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam) override;/* 描画処理 */ + +public: + /* Tipの内容データを取得する */ + const CNativeW& GetInfoText() const { return m_cInfo; } }; + +/* Tipの内容データを設定するためにエスケープ解除を行う */ +const WCHAR* UnEscapeInfoText( CNativeW& cInfo ); + #endif /* SAKURA_CTIPWND_E3DB6CF2_888C_42F5_953E_D923221F0B16_H_ */ From 9c95e44566667df24a2f01fd3be6357f1c227333 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sun, 13 Sep 2020 19:33:31 +0900 Subject: [PATCH 04/10] =?UTF-8?q?=E3=83=AC=E3=83=93=E3=83=A5=E3=83=BC?= =?UTF-8?q?=E6=8C=87=E6=91=98=E3=81=AB=E3=82=88=E3=82=8A=E3=82=B3=E3=83=A1?= =?UTF-8?q?=E3=83=B3=E3=83=88=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/cmd/CViewCommander_CustMenu.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sakura_core/cmd/CViewCommander_CustMenu.cpp b/sakura_core/cmd/CViewCommander_CustMenu.cpp index 8dad6b9e2d..7ca5db467e 100644 --- a/sakura_core/cmd/CViewCommander_CustMenu.cpp +++ b/sakura_core/cmd/CViewCommander_CustMenu.cpp @@ -33,7 +33,7 @@ void CViewCommander::Command_MENU_RBUTTON( void ) { CNativeW cInfo = m_pCommanderView->m_cTipWnd.GetInfoText(); - // 見た目と同じように、\n を CR+LFへ変換する + // 貼り付けで扱いやすいように、改行記号を CR+LF に置換する cInfo.Replace( L"\n", L"\r\n" ); /* クリップボードにデータを設定 */ From ca9351401da708ce0211ba7c63ecf797369f4e98 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sun, 13 Sep 2020 19:49:05 +0900 Subject: [PATCH 05/10] =?UTF-8?q?=E7=BD=AE=E6=8F=9B=E4=BB=95=E6=A7=98?= =?UTF-8?q?=E3=82=92=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/window/CTipWnd.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sakura_core/window/CTipWnd.cpp b/sakura_core/window/CTipWnd.cpp index 17aa83f8b7..f6ddf1ad79 100644 --- a/sakura_core/window/CTipWnd.cpp +++ b/sakura_core/window/CTipWnd.cpp @@ -28,7 +28,7 @@ static constexpr WCHAR szDummy[] = { L" " }; const WCHAR* UnEscapeInfoText( CNativeW& cInfo ) { cInfo.Replace( L"\\n", L"\n" ); - cInfo.Replace( L"\\x53", L"\\" ); + cInfo.Replace( L"\\\\", L"\\" ); return cInfo.GetStringPtr(); } From b008715e6c10c7835864d227f4c9d8710d57b06b Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sun, 13 Sep 2020 20:11:35 +0900 Subject: [PATCH 06/10] =?UTF-8?q?=E3=83=AC=E3=83=93=E3=83=A5=E3=83=BC?= =?UTF-8?q?=E6=8C=87=E6=91=98=E3=81=AB=E3=82=88=E3=82=8A=E5=88=B6=E5=BE=A1?= =?UTF-8?q?=E6=A7=8B=E9=80=A0=E3=81=AE=E3=83=AA=E3=83=95=E3=82=A1=E3=82=AF?= =?UTF-8?q?=E3=82=BF=E3=83=AA=E3=83=B3=E3=82=B0=E3=82=92=E5=8F=96=E6=B6=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/view/CEditView_Search.cpp | 113 ++++++++++++++------------ 1 file changed, 62 insertions(+), 51 deletions(-) diff --git a/sakura_core/view/CEditView_Search.cpp b/sakura_core/view/CEditView_Search.cpp index d33439fa9d..e628162404 100644 --- a/sakura_core/view/CEditView_Search.cpp +++ b/sakura_core/view/CEditView_Search.cpp @@ -106,77 +106,88 @@ BOOL CEditView::KeyWordHelpSearchDict( LID_SKH nID, POINT* po, RECT* rc ) */ BOOL CEditView::KeySearchCore( const CNativeW* pcmemCurText ) { - /* tooltipバッファ初期化 */ - m_cTipWnd.m_cInfo.Clear(); + CNativeW* pcmemRefKey; + int nCmpLen = STRNCMP_MAX; // 2006.04.10 fon + int nLine; // 2006.04.10 fon + m_cTipWnd.m_cInfo.SetString( L"" ); /* tooltipバッファ初期化 */ /* 1行目にキーワード表示の場合 */ - if( m_pTypeData->m_bUseKeyHelpKeyDisp ){ /* キーワードも表示する */ // 2006.04.10 fon - m_cTipWnd.m_cInfo.AppendStringF( L"[ %s ]", pcmemCurText->GetStringPtr() ); + if(m_pTypeData->m_bUseKeyHelpKeyDisp){ /* キーワードも表示する */ // 2006.04.10 fon + m_cTipWnd.m_cInfo.AppendString( L"[ " ); + m_cTipWnd.m_cInfo.AppendString( pcmemCurText->GetStringPtr() ); + m_cTipWnd.m_cInfo.AppendString( L" ]" ); } - - // 一致確認する最大文字数、途中まで一致を使う場合は短くする - const int nCmpLen = m_pTypeData->m_bUseKeyHelpPrefix - ? std::min( STRNCMP_MAX, (int)::wcslen( pcmemCurText->GetStringPtr() ) ) - : STRNCMP_MAX; - - // 検索前にヒットフラグをクリアしておく + /* 途中まで一致を使う場合 */ + if(m_pTypeData->m_bUseKeyHelpPrefix) + nCmpLen = wcslen( pcmemCurText->GetStringPtr() ); // 2006.04.10 fon m_cTipWnd.m_KeyWasHit = FALSE; - - // 辞書ファイルの冊数、最大値は MAX_KEYHELP_FILE 。 - const int nKeyHelpNum = std::min(m_pTypeData->m_nKeyHelpNum, (int)MAX_KEYHELP_FILE); - - for( int i = 0; i < nKeyHelpNum; i++ ){ + for(int i =0 ; i < m_pTypeData->m_nKeyHelpNum; i++){ //最大数:MAX_KEYHELP_FILE if( m_pTypeData->m_KeyHelpArr[i].m_bUse ){ - CNativeW* pcmemRefKey = NULL; - CNativeW* pcmemRefText = NULL; - int nLine; - const auto& szPath = m_pTypeData->m_KeyHelpArr[i].m_szPath; - const int nSearchResult = m_cDicMgr.CDicMgr::Search( + // 2006.04.10 fon (nCmpLen,pcmemRefKey,nSearchLine)引数を追加 + CNativeW* pcmemRefText; + int nSearchResult=m_cDicMgr.CDicMgr::Search( pcmemCurText->GetStringPtr(), nCmpLen, &pcmemRefKey, &pcmemRefText, - szPath, + m_pTypeData->m_KeyHelpArr[i].m_szPath, &nLine ); - /* 該当するキーがある */ if( nSearchResult ){ - // バッファが空でなければseparator挿入 - if( m_cTipWnd.GetInfoText().GetStringLength() != 0 ){ - m_cTipWnd.m_cInfo.AppendString( L"\n--------------------\n" ); - } - /* 有効になっている辞書を全部なめて、ヒットの都度説明の継ぎ増し */ - if( m_pTypeData->m_bUseKeyHelpAllSearch ){ /* ヒットした次の辞書も検索 */ - /* 複数辞書をなめるので辞書のパス挿入、表示するのはファイル名(拡張子なし)のみ */ - WCHAR szFile[MAX_PATH]; - _wsplitpath( szPath, NULL, NULL, szFile, NULL ); - m_cTipWnd.m_cInfo.AppendStringF( L"■%s\n", szFile ); - } + if(m_pTypeData->m_bUseKeyHelpAllSearch){ /* ヒットした次の辞書も検索 */ // 2006.04.10 fon + /* バッファに前のデータが詰まっていたらseparator挿入 */ + if(m_cTipWnd.m_cInfo.GetStringLength() != 0) + m_cTipWnd.m_cInfo.AppendString( LS(STR_ERR_DLGEDITVW5) ); + else + m_cTipWnd.m_cInfo.AppendString( LS(STR_ERR_DLGEDITVW6) ); /* 先頭の場合 */ + /* 辞書のパス挿入 */ + { + WCHAR szFile[MAX_PATH]; + // 2013.05.08 表示するのはファイル名(拡張子なし)のみにする + _wsplitpath( m_pTypeData->m_KeyHelpArr[i].m_szPath, NULL, NULL, szFile, NULL ); + m_cTipWnd.m_cInfo.AppendString( szFile ); + } + m_cTipWnd.m_cInfo.AppendString( L"\n" ); + /* 前方一致でヒットした単語を挿入 */ + if(m_pTypeData->m_bUseKeyHelpPrefix){ /* 選択範囲で前方一致検索 */ + m_cTipWnd.m_cInfo.AppendString( pcmemRefKey->GetStringPtr() ); + m_cTipWnd.m_cInfo.AppendString( L" >>\n" ); + } + + /* 調査した「意味」を挿入 */ + m_cTipWnd.m_cInfo.AppendString( UnEscapeInfoText( *pcmemRefText ) ); - /* 前方一致でヒットした単語を挿入 */ - if( m_pTypeData->m_bUseKeyHelpPrefix ){ /* 選択範囲で前方一致検索 */ - m_cTipWnd.m_cInfo.AppendStringF(L"%s >>\n", pcmemRefKey->GetStringPtr() ); + delete pcmemRefText; + delete pcmemRefKey; // 2006.07.02 genta + /* タグジャンプ用の情報を残す */ + if(!m_cTipWnd.m_KeyWasHit){ + m_cTipWnd.m_nSearchDict=i; /* 辞書を開くとき最初にヒットした辞書を開く */ + m_cTipWnd.m_nSearchLine=nLine; + m_cTipWnd.m_KeyWasHit = TRUE; + } } + else{ /* 最初のヒット項目のみ返す場合 */ + /* キーワードが入っていたらseparator挿入 */ + if(m_cTipWnd.m_cInfo.GetStringLength() != 0) + m_cTipWnd.m_cInfo.AppendString( L"\n--------------------\n" ); - /* 調査した「意味」を挿入 */ - m_cTipWnd.m_cInfo.AppendString( UnEscapeInfoText( *pcmemRefText ) ); + /* 前方一致でヒットした単語を挿入 */ + if(m_pTypeData->m_bUseKeyHelpPrefix){ /* 選択範囲で前方一致検索 */ + m_cTipWnd.m_cInfo.AppendString( pcmemRefKey->GetStringPtr() ); + m_cTipWnd.m_cInfo.AppendString( L" >>\n" ); + } + + /* 調査した「意味」を挿入 */ + m_cTipWnd.m_cInfo.AppendString( UnEscapeInfoText( *pcmemRefText ) ); - /* 最初のヒット項目のみ返す場合、または、初回ヒットの場合 */ - if( !m_pTypeData->m_bUseKeyHelpAllSearch - || !m_cTipWnd.m_KeyWasHit ){ + delete pcmemRefText; + delete pcmemRefKey; // 2006.07.02 genta /* タグジャンプ用の情報を残す */ - m_cTipWnd.m_nSearchDict = i; - m_cTipWnd.m_nSearchLine = nLine; + m_cTipWnd.m_nSearchDict=i; + m_cTipWnd.m_nSearchLine=nLine; m_cTipWnd.m_KeyWasHit = TRUE; - } - - delete pcmemRefText; - delete pcmemRefKey; - - /* 最初のヒット項目のみ返す場合 */ - if( !m_pTypeData->m_bUseKeyHelpAllSearch ){ return TRUE; } } From 7e3c597eb6270912842247c6db1b0b72a0a78574 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sun, 13 Sep 2020 20:19:54 +0900 Subject: [PATCH 07/10] =?UTF-8?q?=E3=83=AC=E3=83=93=E3=83=A5=E3=83=BC?= =?UTF-8?q?=E6=8C=87=E6=91=98=E3=81=AB=E3=82=88=E3=82=8A=20CTipWnd::Show?= =?UTF-8?q?=20=E3=81=AE=E7=AC=AC3=E5=BC=95=E6=95=B0=E3=82=92=E9=99=A4?= =?UTF-8?q?=E5=8E=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/view/CEditView.cpp | 6 +++--- sakura_core/window/CTipWnd.cpp | 7 +------ sakura_core/window/CTipWnd.h | 2 +- 3 files changed, 5 insertions(+), 10 deletions(-) diff --git a/sakura_core/view/CEditView.cpp b/sakura_core/view/CEditView.cpp index f335fc79ea..5e73ac9406 100644 --- a/sakura_core/view/CEditView.cpp +++ b/sakura_core/view/CEditView.cpp @@ -1296,7 +1296,7 @@ VOID CEditView::OnTimer( bool bHide; if( MiniMapCursorLineTip( &po, &rc, &bHide ) ){ m_cTipWnd.m_bAlignLeft = true; - m_cTipWnd.Show( po.x, po.y + m_pcEditWnd->GetActiveView().GetTextMetrics().GetHankakuHeight(), NULL ); + m_cTipWnd.Show( po.x, po.y + m_pcEditWnd->GetActiveView().GetTextMetrics().GetHankakuHeight() ); }else{ if( bHide && 0 == m_dwTipTimer ){ m_cTipWnd.Hide(); @@ -1305,7 +1305,7 @@ VOID CEditView::OnTimer( }else{ if( FALSE != KeyWordHelpSearchDict( LID_SKH_ONTIMER, &po, &rc ) ){ // 2006.04.10 fon /* 辞書Tipを表示 */ - m_cTipWnd.Show( po.x, po.y + GetTextMetrics().GetHankakuHeight(), NULL ); + m_cTipWnd.Show( po.x, po.y + GetTextMetrics().GetHankakuHeight() ); } } } @@ -2662,7 +2662,7 @@ bool CEditView::ShowKeywordHelp( POINT po, LPCWSTR pszHelp, LPRECT prcHokanWin) // 2001/06/19 End /* 辞書Tipを表示 */ - m_cTipWnd.Show( po.x, po.y , NULL , &rcTipWin); + m_cTipWnd.Show( po.x, po.y, &rcTipWin ); return true; } } diff --git a/sakura_core/window/CTipWnd.cpp b/sakura_core/window/CTipWnd.cpp index f6ddf1ad79..874c7e4ec1 100644 --- a/sakura_core/window/CTipWnd.cpp +++ b/sakura_core/window/CTipWnd.cpp @@ -106,16 +106,11 @@ void CTipWnd::AfterCreateWindow( void ) } /* Tipを表示 */ -void CTipWnd::Show( int nX, int nY, const WCHAR* szText, RECT* pRect ) +void CTipWnd::Show( int nX, int nY, RECT* pRect ) { HDC hdc; RECT rc; - if( NULL != szText ){ - m_cInfo.SetString( szText ); - UnEscapeInfoText( m_cInfo ); - } - hdc = ::GetDC( GetHwnd() ); // サイズを計算済み 2001/06/19 asa-o diff --git a/sakura_core/window/CTipWnd.h b/sakura_core/window/CTipWnd.h index 8952be7a8c..034bc5ac56 100644 --- a/sakura_core/window/CTipWnd.h +++ b/sakura_core/window/CTipWnd.h @@ -39,7 +39,7 @@ class CTipWnd final : public CWnd /* || Attributes & Operations */ - void Show( int nX, int nY, const WCHAR* szText, RECT* pRect = NULL ); /* Tipを表示 */ + void Show( int nX, int nY, RECT* pRect = NULL ); /* Tipを表示 */ void Hide( void ); /* Tipを消す */ void GetWindowSize(LPRECT pRect); // 2001/06/19 asa-o ウィンドウのサイズを得る From 29ddc5c136b958d28349df90eaef68b6c42415a4 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sun, 13 Sep 2020 20:29:21 +0900 Subject: [PATCH 08/10] =?UTF-8?q?=E7=BD=AE=E6=8F=9B=E4=BB=95=E6=A7=98?= =?UTF-8?q?=E3=82=92=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/window/CTipWnd.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sakura_core/window/CTipWnd.cpp b/sakura_core/window/CTipWnd.cpp index 874c7e4ec1..7af4b58136 100644 --- a/sakura_core/window/CTipWnd.cpp +++ b/sakura_core/window/CTipWnd.cpp @@ -28,7 +28,7 @@ static constexpr WCHAR szDummy[] = { L" " }; const WCHAR* UnEscapeInfoText( CNativeW& cInfo ) { cInfo.Replace( L"\\n", L"\n" ); - cInfo.Replace( L"\\\\", L"\\" ); + cInfo.Replace( L"\\x5C", L"\\" ); return cInfo.GetStringPtr(); } From eb0ef5b63c7e12cecd97886740b384208bd33354 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sun, 13 Sep 2020 21:20:18 +0900 Subject: [PATCH 09/10] =?UTF-8?q?=E3=83=AC=E3=83=93=E3=83=A5=E3=83=BC?= =?UTF-8?q?=E6=8C=87=E6=91=98=E3=81=AB=E3=82=88=E3=82=8A=E3=83=98=E3=83=AB?= =?UTF-8?q?=E3=83=97=E3=81=AB=E8=AA=AC=E6=98=8E=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- help/sakura/res/HLP000105.html | 1 + 1 file changed, 1 insertion(+) diff --git a/help/sakura/res/HLP000105.html b/help/sakura/res/HLP000105.html index 2c002c9585..04115e1e7f 100644 --- a/help/sakura/res/HLP000105.html +++ b/help/sakura/res/HLP000105.html @@ -23,6 +23,7 @@

キーワードヘルプ

・キーワードは複数指定可能です(同義語)。半角カンマで区切って下さい
・'\n'で訳語に改行を入れられます
+・'\x5C'で訳語に'\'を入れられます
・一つの定義(行)は、10キロバイト程度までです
・一桁目が';'ならコメント行とみなします

From cc957058ec3e94ad3b6c51ebd2530edf4bf0dc6d Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sun, 13 Sep 2020 22:58:22 +0900 Subject: [PATCH 10/10] =?UTF-8?q?=E3=83=AC=E3=83=93=E3=83=A5=E3=83=BC?= =?UTF-8?q?=E6=8C=87=E6=91=98=E3=81=AB=E3=82=88=E3=82=8A=E3=83=98=E3=83=AB?= =?UTF-8?q?=E3=83=97=E3=81=AB=E6=B3=A8=E6=84=8F=E5=96=9A=E8=B5=B7=E3=82=92?= =?UTF-8?q?=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- help/sakura/res/HLP000105.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/help/sakura/res/HLP000105.html b/help/sakura/res/HLP000105.html index 04115e1e7f..457ffdea67 100644 --- a/help/sakura/res/HLP000105.html +++ b/help/sakura/res/HLP000105.html @@ -23,7 +23,7 @@

キーワードヘルプ

・キーワードは複数指定可能です(同義語)。半角カンマで区切って下さい
・'\n'で訳語に改行を入れられます
-・'\x5C'で訳語に'\'を入れられます
+・'\x5C'で訳語に'\'を入れられます。'\x5c'では入れられないので注意して下さい
・一つの定義(行)は、10キロバイト程度までです
・一桁目が';'ならコメント行とみなします