Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

キーワードヘルプの説明文に"\n"を表示できるようにしたい。 #1399

Merged
Merged
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'で訳語に'\'を入れられます<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" );
beru marked this conversation as resolved.
Show resolved Hide resolved

// 見た目と同じように、\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 )
beru marked this conversation as resolved.
Show resolved Hide resolved
{
cInfo.Replace( L"\\n", L"\n" );
cInfo.Replace( L"\\x5C", L"\\" );
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

\x5C だけでなく \x5c\ に置換してあげた方が良かったりするでしょうか?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

もともと \n の置換でも \N は考慮してないので、
大文字小文字の違いを考慮する必要はないと思います。(強引

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

アメリカ人の知能指数が将来的に低下してアルファベットの大文字だけしか使われなくなるかもしれないのでそれで良さそうですね。

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

C には \N なんて存在しませんし、\x5C\x5c も使えますので強引すぎますね。
C 系のエスケープシーケンス表記に慣れた人には \x5c が使えないというのは不自然に感じるでしょうから、\x5C にしか対応しないのであれば、ヘルプにも注意書きとして明記しておいた方が親切ですね。

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_ */