Skip to content

Commit

Permalink
Merge pull request #1399 from berryzplus/feature/enable_escape_for_tip
Browse files Browse the repository at this point in the history
キーワードヘルプの説明文に"\n"を表示できるようにしたい。
  • Loading branch information
berryzplus authored Sep 15, 2020
2 parents 5d9f254 + cc95705 commit 26e92e8
Show file tree
Hide file tree
Showing 6 changed files with 43 additions and 39 deletions.
1 change: 1 addition & 0 deletions help/sakura/res/HLP000105.html
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ <h2>キーワードヘルプ</h2>
<div class=li200>
・キーワードは複数指定可能です(同義語)。半角カンマで区切って下さい<br>
・'\n'で訳語に改行を入れられます<br>
・'\x5C'で訳語に'\'を入れられます。'\x5c'では入れられないので注意して下さい<br>
・一つの定義(行)は、10キロバイト程度までです<br>
・一桁目が';'ならコメント行とみなします<br>
</div><br>
Expand Down
25 changes: 6 additions & 19 deletions sakura_core/cmd/CViewCommander_CustMenu.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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();

// 貼り付けで扱いやすいように、改行記号を CR+LF に置換する
cInfo.Replace( L"\n", L"\r\n" );

// 見た目と同じように、\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;
}
}
/* クリップボードにデータを設定 */
m_pCommanderView->MySetClipboardData( pszWork, nLength, false );
free( pszWork );
m_pCommanderView->MySetClipboardData( cInfo.GetStringPtr(), cInfo.GetStringLength(), false );

break;
}
Expand All @@ -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;
}
Expand Down
6 changes: 3 additions & 3 deletions sakura_core/view/CEditView.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand All @@ -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() );
}
}
}
Expand Down Expand Up @@ -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;
}
}
Expand Down
15 changes: 9 additions & 6 deletions sakura_core/view/CEditView_Search.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -133,9 +133,8 @@ BOOL CEditView::KeySearchCore( const CNativeW* pcmemCurText )
m_pTypeData->m_KeyHelpArr[i].m_szPath,
&nLine
);
if(nSearchResult){
/* 該当するキーがある */
LPWSTR pszWork = pcmemRefText->GetStringPtr();
/* 該当するキーがある */
if( nSearchResult ){
/* 有効になっている辞書を全部なめて、ヒットの都度説明の継ぎ増し */
if(m_pTypeData->m_bUseKeyHelpAllSearch){ /* ヒットした次の辞書も検索 */ // 2006.04.10 fon
/* バッファに前のデータが詰まっていたらseparator挿入 */
Expand All @@ -155,8 +154,11 @@ BOOL CEditView::KeySearchCore( const CNativeW* pcmemCurText )
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 );
}

/* 調査した「意味」を挿入 */
m_cTipWnd.m_cInfo.AppendString( UnEscapeInfoText( *pcmemRefText ) );

delete pcmemRefText;
delete pcmemRefKey; // 2006.07.02 genta
/* タグジャンプ用の情報を残す */
Expand All @@ -178,7 +180,8 @@ BOOL CEditView::KeySearchCore( const CNativeW* pcmemCurText )
}

/* 調査した「意味」を挿入 */
m_cTipWnd.m_cInfo.AppendString( pszWork );
m_cTipWnd.m_cInfo.AppendString( UnEscapeInfoText( *pcmemRefText ) );

delete pcmemRefText;
delete pcmemRefKey; // 2006.07.02 genta
/* タグジャンプ用の情報を残す */
Expand Down
22 changes: 13 additions & 9 deletions sakura_core/window/CTipWnd.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,14 @@
// ダミー文字列
static constexpr WCHAR szDummy[] = { L" " };

/* Tipの内容データを設定するためにエスケープ解除を行う */
const WCHAR* UnEscapeInfoText( CNativeW& cInfo )
{
cInfo.Replace( L"\\n", L"\n" );
cInfo.Replace( L"\\x5C", L"\\" );
return cInfo.GetStringPtr();
}

/* CTipWndクラス デストラクタ */
CTipWnd::CTipWnd()
: CWnd(L"::CTipWnd")
Expand Down Expand Up @@ -98,15 +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 );
}

hdc = ::GetDC( GetHwnd() );

// サイズを計算済み 2001/06/19 asa-o
Expand Down Expand Up @@ -166,7 +170,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;
// 計測対象の文字列がブランクでない場合
Expand Down Expand Up @@ -197,7 +201,7 @@ void CTipWnd::ComputeWindowSize(
}

// 次の行の開始位置を設定する
nLineBgn = i + 2; // "\\n" の文字数
nLineBgn = i + 1; // "\n" の文字数
i = nLineBgn;
}else{
// 現在位置の文字がTCHAR単位で何文字に当たるか計算してインデックスを進める
Expand Down Expand Up @@ -247,7 +251,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 ) {
Expand All @@ -269,7 +273,7 @@ void CTipWnd::DrawTipText(
}

// 次の行の開始位置を設定する
nLineBgn = i + 2; // "\\n" の文字数
nLineBgn = i + 1; // "\n" の文字数
i = nLineBgn;
}else{
// 現在位置の文字がTCHAR単位で何文字に当たるか計算してインデックスを進める
Expand Down
13 changes: 11 additions & 2 deletions sakura_core/window/CTipWnd.h
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,8 @@
class CTipWnd;

#include "CWnd.h"
#include "mem/CMemory.h"
#include "mem/CNativeW.h"

/*-----------------------------------------------------------------------
クラスの宣言
-----------------------------------------------------------------------*/
Expand All @@ -38,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 ウィンドウのサイズを得る

Expand Down Expand Up @@ -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_ */

0 comments on commit 26e92e8

Please sign in to comment.