ページ:[≪ <] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [> ≫]
■ 2266 ■
▼ 2015/7/11 (土) 10:12:27 LR4  
Mozilla/5.0 (Windows NT 6.1; WOW64; rv:39.0) Gecko/20100101 Firefox/39.0
[2266] 正規表現OFF置換で異常終了する
以下の手順で異常終了します。sakura ver.2.2.0.1(たぶん2.1.0.0以後)

�@正規表現ONの検索または置換を実行
�A何か選択(矩形選択、非矩形選択のどちらでも同じ)
�B正規表現OFFの置換を実行

手っ取り早い再現手順は以下の通りです。

�@ 「無題」で abc を入力する
   -> キャレットは末尾の c の後にくる
�A 置換ダイアログを出し、以下の条件で「上検索」を実施
        置換前:a
        置換後:(空)
        正規表現:ON
        他のチェックボックス:すべてOFF
   -> 先頭の a が選択状態になる
�B 続けて�Aのダイアログで正規表現:OFFにして「置換」を実施
   -> 異常終了

▼ 2015/7/11 (土) 21:51:52 syat  
Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.132 Safari/537.36
[2267] Re:正規表現OFF置換で異常終了する
▼ LR4さん
> 以下の手順で異常終了します。sakura ver.2.2.0.1(たぶん2.1.0.0以後)
>
> �@正規表現ONの検索または置換を実行
> �A何か選択(矩形選択、非矩形選択のどちらでも同じ)
> �B正規表現OFFの置換を実行


私のところでも再現しました。
パッチを投稿しました。( patchunicode:994)

▼ 2015/7/11 (土) 23:22:57 LR4  
Mozilla/5.0 (Windows NT 6.1; WOW64; rv:39.0) Gecko/20100101 Firefox/39.0
[2268] Re2:正規表現OFF置換で異常終了する
▼ syatさん
> 私のところでも再現しました。
> パッチを投稿しました。( patchunicode:994)


試していないのですが、「ChangeCurRegexp()呼び出しが必要かしら?」というのは自分も推測していました。
パッチではパラメータなしのようですが、ChangeCurRegexp(false)にしたら何か問題ありますかね?
そこで再描画まで追加する必要があるかどうか、なのですが、自分にはわかりません。

ところで、提案です。
・USE_CRASHDUMPはデフォルトでONにしませんか?
・ver2.0.5.0までは実施されていた .pdbファイルのリリースを復活しませんか?


今回、再現手順を特定できたのはUSE_CRASHDUMPをONでコンパイルしたsakuraをしばらく使い続けた恩恵でした。
それまでOFFのsakuraを使っていた時には「置換を実行すると異常終了することがある」ということしかわかりませんでした。
そんな報告受けても「再現しません」としか回答できませんよね?
でも、
・異常終了時に生成されたユーザ環境の .dmpファイル
・コンパイル時ソース
・コンパイル時に作成された .pdbファイル

これだけあればVC++2005以後を持っている誰でも障害解析が可能です。
ユーザさんに .dmp ファイルの送付をお願いする必要はありますが、
それだけで障害が起きたソース個所とその時点のスタックトレースがピンポイントで特定できます。

[一般]掲示板の8044だって一発で解決できる可能性があります。

いかがでしょうか?

▼ 2015/7/12 (日) 13:02:38 syat  
Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.132 Safari/537.36
[2269] Re3:正規表現OFF置換で異常終了する
▼ LR4さん
> パッチではパラメータなしのようですが、ChangeCurRegexp(false)にしたら何か問題ありますかね?

Command_REPLACEはその後に Command_SEARCH_NEXT() を呼び出していて、その中でもう一度 ChangeCurRegexp が引数なしで呼ばれるので、再描画はいらないですね。


> ・USE_CRASHDUMPはデフォルトでONにしませんか?
> ・ver2.0.5.0までは実施されていた .pdbファイルのリリースを復活しませんか?


よいと思います。

私が無知で申し訳ないのですが、これはリリースビルドでも有効なんでしょうか?
リリースビルドだとsakura.pdbが生成されないみたいですが、作る方法があるのでしょうか?
昔ryojiさんがやっていた記憶はありますが、継承していません・・

▼ 2015/7/12 (日) 15:03:07 LR4  
Mozilla/5.0 (Windows NT 6.1; WOW64; rv:39.0) Gecko/20100101 Firefox/39.0
[2270] Re4:正規表現OFF置換で異常終了する
▼ syatさん
> リリースビルドだとsakura.pdbが生成されないみたいですが、作る方法があるのでしょうか?

それはよくある勘違いらしいですが…
プロジェクトのプロパティで以下の設定をすればリリースビルドでもOKです。
[リンカ]-[デバッグ]の画面を開き、
[デバッグ情報の生成]で「はい」を選択
[プログラムデータベースファイル]でパスを指定

もしかするとexeサイズが少し大きくなるかもしれませんが、
性能には何の影響もありません。
私の環境ではサイズも変わりませんでした。
大きくなるといってもせいぜい1KB程度らしいです。

■ 2152 ■
▼ 2014/4/16 (水) 23:33:38 Viu89r9VV  
Mozilla/5.0 (Windows NT 6.1; rv:28.0) Gecko/20100101 Firefox/28.0
[2152] 不具合:「開きません」のキャンセルが存在しません
環境(Environment): Windows 7, サクラエディタ 2.1.1.1

前回ファイルを「UTF-8」で開き、今回「SJIS」で開こうとした場合、以下の警告メッセージが表示されます。

----------------------------------------
文字コード情報
パス\ファイル名.txt

このファイルを文字コード SJIS で開こうとしていますが、前回は別の文字コード UTF-8 で開かれています。前回と同じ文字コードを使いますか?

・[はい(Y)] =UTF-8
・[いいえ(N)]=SJIS
・[キャンセル]=開きません


[はい] [いいえ]
----------------------------------------

しかし、「キャンセル」のボタンが存在しないため、キャンセルできません。画面右上に [×] マークは存在しますが、グレー アウトしていて押せません。これは不具合ということで よろしいのでしょうか。報告しておきます。

▼ 2014/4/19 (土) 23:27:52 novice  
Mozilla/5.0 (Windows NT 6.1; WOW64; rv:28.0) Gecko/20100101 Firefox/28.0
[2153] Re:不具合:「開きません」のキャンセルが存在しません
▼ Viu89r9VVさん
> しかし、「キャンセル」のボタンが存在しないため、キャンセルできません。画面右上に [×] マークは存在しますが、グレー アウトしていて押せません。これは不具合ということで よろしいのでしょうか。報告しておきます。

patchを登録しました。
http://sourceforge.net/p/sakura-editor/patchunicode/800/

▼ 2014/4/20 (日) 17:05:00 神楽  
Mozilla/5.0 (X11; Linux x86_64; rv:28.0) Gecko/20100101 Firefox/28.0
[2154] Re2:不具合:「開きません」のキャンセルが存在しません
▼ noviceさん
> ▼ Viu89r9VVさん
> > しかし、「キャンセル」のボタンが存在しないため、キャンセルできません。画面右上に [×] マークは存在しますが、グレー アウトしていて押せません。これは不具合ということで よろしいのでしょうか。報告しておきます。
>
> patchを登録しました。
> http://sourceforge.net/p/sakura-editor/patchunicode/800/

ANSI版(1.6.6.0)にはキャンセルの説明があり、キャンセルボタンもあります。
ANSI版の仕様に合わせた方が良いのではないでしょうか?

▼ 2014/4/20 (日) 17:50:43 novice  
Mozilla/5.0 (Windows NT 6.1; WOW64; rv:28.0) Gecko/20100101 Firefox/28.0
[2155] Re3:不具合:「開きません」のキャンセルが存在しません
▼ 神楽さん
Unicode版は、r1587でキャンセルが削除されたようです。
http://sourceforge.net/p/sakura-editor/code/1587/

PatchUnicodeは未登録で、掲示板にログが残ってましたが、キャンセルの削除については特に記載が見つかりませんでした。
http://sakura-editor.sourceforge.net/cgi-bin/cyclamen/cyclamen.cgi?log=unicode&v=950

▼ 2014/5/8 (木) 06:21:50 神楽  
Mozilla/5.0 (X11; Linux x86_64; rv:29.0) Gecko/20100101 Firefox/29.0
[2165] Re4:不具合:「開きません」のキャンセルが存在しません
▼ noviceさん
2.1.1.1も同じ挙動だったのですが、2.1.1.2で文字コード情報の
メッセージダイアログがアクティブの時に、
Ctrl+Cでダイアログタイトルバー通りの「文字コード情報」とコピーされず、
「(保存されていません)」と「(印刷プレビューでのみ使用できます)」が
Ctrl+Cする度に、交互に繰り返されます。
1.6.6.0ではタイトルバー通りにコピーされますので、できれば対策をお願い致します。

▼ 2014/5/8 (木) 20:38:59 LR4  
Mozilla/5.0 (Windows NT 6.1; rv:29.0) Gecko/20100101 Firefox/29.0
[2166] Re5:不具合:「開きません」のキャンセルが存在しません
ちゃんと検証したわけではないのでアレですが…

> 「(保存されていません)」と「(印刷プレビューでのみ使用できます)」が
> Ctrl+Cする度に、交互に繰り返されます。


これ、メッセージボックス出しているときにエディタウィンドウのアクティブ/非アクティブ切替が発生し、
CEditWnd::UpdateCaption()
 → CSakuraEnvironment::ExpandParameter()
が呼ばれてメッセージバッファの書き換え(CLoadStringでのバッファリサイクル)が起きているせいではないでしょうか。

メッセージボックス上でCtrl+Cされるたびに、MessageBox APIが引数の文字列ポインタを直接参照しているのかな?、と思うわけです。
メッセージ本文のほうが無事なのは、MYMESSAGEBOXが本文を別のバッファにコピーしてMessageBox APIに渡しているからかも。

▼ 2014/5/9 (金) 17:42:18 LR4  
Mozilla/5.0 (Windows NT 6.1; rv:29.0) Gecko/20100101 Firefox/29.0
[2168] Re6:不具合:「開きません」のキャンセルが存在しません
> メッセージ本文のほうが無事なのは、MYMESSAGEBOXが本文を別のバッファにコピーしてMessageBox APIに渡しているからかも。

案の定、[共通設定]-[強調キーワード]の[整理]ボタンを押したときに
表示されるメッセージボックスで、本文のほうに同様の症状が出ました。

下記のように、CSakuraEnvironment::ExpandParameter()で
コール時に毎回ではなく、言語切替時だけLoadStringするように
変更したところ、自環境では改善しました。

Index: sakura_core/env/CSakuraEnvironment.cpp
===================================================================
--- sakura_core/env/CSakuraEnvironment.cpp	(リビジョン 3706)
+++ sakura_core/env/CSakuraEnvironment.cpp	(作業コピー)
@@ -90,11 +90,22 @@
 	const CEditDoc* pcDoc = CEditDoc::GetInstance(0); //###
 
 	// Apr. 03, 2003 genta 固定文字列をまとめる
-	const wstring	PRINT_PREVIEW_ONLY		= LSW( STR_PREVIEW_ONLY );	//L"(印刷プレビューでのみ使用できます)";
+	static HINSTANCE s_hRsrc = NULL;
+	static wstring	PRINT_PREVIEW_ONLY		= L"";	//L"(印刷プレビューでのみ使用できます)";
+	static wstring	NO_TITLE				= L"";	//L"(無題)";
+	static wstring	NOT_SAVED				= L"";	//L"(保存されていません)";
+
+	// 初回と言語切替時に文字列をロードする
+	HINSTANCE hRsrc = CSelectLang::getLangRsrcInstance();
+	if( s_hRsrc != hRsrc ){
+		s_hRsrc = hRsrc;
+		PRINT_PREVIEW_ONLY		= LSW( STR_PREVIEW_ONLY );
+		NO_TITLE				= LSW( STR_NO_TITLE1 );
+		NOT_SAVED				= LSW( STR_NOT_SAVED );
+	}
+
 	const int		PRINT_PREVIEW_ONLY_LEN	= PRINT_PREVIEW_ONLY.length();
-	const wstring	NO_TITLE				= LSW( STR_NO_TITLE1 );	//L"(無題)";
 	const int		NO_TITLE_LEN			= NO_TITLE.length();
-	const wstring	NOT_SAVED				= LSW( STR_NOT_SAVED );	//L"(保存されていません)";
 	const int		NOT_SAVED_LEN			= NOT_SAVED.length();
 
 	const wchar_t *p, *r;	//	p:目的のバッファ。r:作業用のポインタ。


▼ 2014/5/11 (日) 16:44:12 novice  
Mozilla/5.0 (Windows NT 6.1; WOW64; rv:29.0) Gecko/20100101 Firefox/29.0
[2172] Re5:不具合:「開きません」のキャンセルが存在しません
▼ 神楽さん
> 「(保存されていません)」と「(印刷プレビューでのみ使用できます)」が
> Ctrl+Cする度に、交互に繰り返されます。

patchを登録しました。
http://sourceforge.net/p/sakura-editor/patchunicode/816/

▼ 2014/5/11 (日) 17:52:03 LR4  
Mozilla/5.0 (Windows NT 6.1; WOW64; rv:29.0) Gecko/20100101 Firefox/29.0
[2173] Re6:不具合:「開きません」のキャンセルが存在しません
> patchを登録しました。
> http://sourceforge.net/p/sakura-editor/patchunicode/816/


このパッチですが、直接MessageBox APIを呼び出している個所には効果が無さげです。
>>unicode:2168の冒頭で例示した[整理]ボタンで出るメッセージボックスは直に呼び出してます。

▼ 2014/5/12 (月) 17:50:31 LR4  
Mozilla/5.0 (Windows NT 6.1; rv:29.0) Gecko/20100101 Firefox/29.0
[2175] Re6:不具合:「開きません」のキャンセルが存在しません
trunk2_VMessageBoxF_fix_b.patchでMessageBox()->MYMESSAGEBOX()置換されたようですが、置換方法に問題があるようです。
MYMESSAGEBOX()の第4引数は「メッセージ文字列」ではなく「メッセージ用の書式指定文字列」であることに注意しないと。

上記パッチを適用した状態で、[名前を付けて保存]で既存ファイル(ファイル名:%s%s%s.txt)に上書きを試みたり、S_MessageBox("%s", 0)マクロを実行したりするとメッセージボックスの文字が化けるか異常終了するです(汗)。

ご確認お願いします。

▼ 2014/5/13 (火) 18:25:12 LR4  
Mozilla/5.0 (Windows NT 6.1; rv:29.0) Gecko/20100101 Firefox/29.0
[2177] Re6:不具合:「開きません」のキャンセルが存在しません
[trunk2_VMessageBoxF_fix_c.patch]
19行目: STR_BACKUP_ERR_DELETE は STR_BACKUP_ERR_MOVE の誤りではないか?
45行目: pszMsg は LS マクロで取得したポインタなのにローカルコピーしていない
→ ここまでチェックしたところで中断(他にパッチ不足とかの問題もあるかもです)。

この様子だと、労力も過多ですし将来のミス防止も難しいかな?と思いました。
次に、費用対効果が高そうな代替案パッチを貼っておきます。
採用の可否についてはお任せします。

【代替案の説明】
[MessageBoxF.h]
マクロ MessageBox は MessageBoxA/W ではなく Wrap_MessageBox に
展開するように変更

[MessageBox.cpp]
Wrap_MessageBox() は タイトル/メッセージをローカルバッファに
コピーし、明示リンクで MessageBoxA/W を呼び出す。

MessageBoxF.h は StdAfx.h に入っているので、すべての .cpp で
MessageBox が Wrap_MessageBox に展開されます。
メッセージボックス表示がすべて Wrap_MessageBox 経由になるため、
これでビルドした sakura.exe を Dependency Walker で確認すると、
USER32.dll の MessageBoxA/W への暗黙リンクは無くなっているはずです。

▼ 2014/5/13 (火) 18:26:18 LR4  
Mozilla/5.0 (Windows NT 6.1; rv:29.0) Gecko/20100101 Firefox/29.0
[2178] 代替案パッチ
【代替案パッチ】
Index: sakura_core/util/MessageBoxF.cpp
===================================================================
--- sakura_core/util/MessageBoxF.cpp	(リビジョン 3706)
+++ sakura_core/util/MessageBoxF.cpp	(作業コピー)
@@ -40,6 +40,25 @@
 // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- //
 //                 メッセージボックス:実装                    //
 // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- //
+int Wrap_MessageBox(HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType)
+{
+	static int (WINAPI *RealMessageBox)(HWND, LPCTSTR, LPCTSTR, UINT);
+	static HMODULE hMod = NULL;
+	if( hMod == NULL ){	// 初期化されていない場合は初期化する
+		hMod = GetModuleHandle(_T("USER32"));
+#ifdef _UNICODE
+		*(FARPROC *)&RealMessageBox = GetProcAddress(hMod, "MessageBoxW");
+#else
+		*(FARPROC *)&RealMessageBox = GetProcAddress(hMod, "MessageBoxA");
+#endif
+	}
+
+	// lpText, lpCaption をローカルバッファにコピーして MessageBox API を呼び出す
+	// ※ 使い回しのバッファが使用されていてそれが裏で書き換えられた場合でも
+	//    メッセージボックス上の Ctrl+C が文字化けしないように
+	return RealMessageBox(hWnd, std::tstring(lpText).c_str(), std::tstring(lpCaption).c_str(), uType);
+}
+
 HWND GetMessageBoxOwner(HWND hwndOwner)
 {
 	if(hwndOwner==NULL && g_pcEditWnd){
Index: sakura_core/util/MessageBoxF.h
===================================================================
--- sakura_core/util/MessageBoxF.h	(リビジョン 3706)
+++ sakura_core/util/MessageBoxF.h	(作業コピー)
@@ -37,6 +37,9 @@
 // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- //
 
 //2007.10.02 kobake メッセージボックスの使用はデバッグ時に限らないので、「Debug〜」という名前を廃止
+#undef MessageBox
+#define MessageBox Wrap_MessageBox
+int Wrap_MessageBox(HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType);
 
 //テキスト整形機能付きMessageBox
 int VMessageBoxF( HWND hwndOwner, UINT uType, LPCTSTR lpCaption, LPCTSTR lpText, va_list& v );

▼ 2014/5/13 (火) 23:43:34 (--;  
Mozilla/5.0 (Windows NT 6.1; WOW64; rv:29.0) Gecko/20100101 Firefox/29.0
[2179] noviceさん
[trunk2_VMessageBoxF_fix_d.patch]

> [trunk2_VMessageBoxF_fix_c.patch]
> 19行目: STR_BACKUP_ERR_DELETE は STR_BACKUP_ERR_MOVE の誤りではないか?
> 45行目: pszMsg は LS マクロで取得したポインタなのにローカルコピーしていない

↑の *45行目* は見ておいてください

▼ 2014/5/15 (木) 12:09:16 LR4  
Mozilla/5.0 (Windows NT 6.1; rv:29.0) Gecko/20100101 Firefox/29.0
[2181] 代替案パッチ(改) 1/2
2.1.1.2では、言語を英語に切替えてもメッセージボックスのボタンが
日本語(例:はい/いいえ/キャンセル)で表示されるようです。
ついでにこの問題も同じ仕掛けで修正してみました。

投稿許可サイズをちょっとオーバーするので2回に分けます。

Index: sakura_core/CSelectLang.h
===================================================================
--- sakura_core/CSelectLang.h	(リビジョン 3706)
+++ sakura_core/CSelectLang.h	(作業コピー)
@@ -50,6 +50,7 @@
 	*/
 	static HINSTANCE getLangRsrcInstance( void );			// メッセージリソースDLLのインスタンスハンドルを返す
 	static LPCTSTR getDefaultLangString( void );			// メッセージリソースDLL未読み込み時のデフォルト言語("(Japanese)" or "(English(United States))")
+	static WORD getLangId( void ){ return m_psLangInfo? m_psLangInfo->wLangId: 0; }
 
 	static HINSTANCE InitializeLanguageEnvironment(void);		// 言語環境を初期化する
 	static HINSTANCE LoadLangRsrcLibrary( SSelLangInfo& lang );	// メッセージ用リソースDLLをロードする
Index: sakura_core/util/MessageBoxF.h
===================================================================
--- sakura_core/util/MessageBoxF.h	(リビジョン 3706)
+++ sakura_core/util/MessageBoxF.h	(作業コピー)
@@ -37,6 +37,9 @@
 // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- //
 
 //2007.10.02 kobake メッセージボックスの使用はデバッグ時に限らないので、「Debug〜」という名前を廃止
+#undef MessageBox
+#define MessageBox Wrap_MessageBox
+int Wrap_MessageBox(HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType);
 
 //テキスト整形機能付きMessageBox
 int VMessageBoxF( HWND hwndOwner, UINT uType, LPCTSTR lpCaption, LPCTSTR lpText, va_list& v );

▼ 2014/5/15 (木) 12:10:26 LR4  
Mozilla/5.0 (Windows NT 6.1; rv:29.0) Gecko/20100101 Firefox/29.0
[2182] Re:代替案パッチ(改) 2/2
Index: sakura_core/util/MessageBoxF.cpp
===================================================================
--- sakura_core/util/MessageBoxF.cpp	(リビジョン 3706)
+++ sakura_core/util/MessageBoxF.cpp	(作業コピー)
@@ -40,6 +40,25 @@
 // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- //
 //                 メッセージボックス:実装                    //
 // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- //
+int Wrap_MessageBox(HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType)
+{
+	static int (WINAPI *RealMessageBox)(HWND, LPCTSTR, LPCTSTR, UINT, WORD);
+	static HMODULE hMod = NULL;
+	if( hMod == NULL ){	// 初期化されていない場合は初期化する
+		hMod = GetModuleHandle(_T("USER32"));
+#ifdef _UNICODE
+		*(FARPROC *)&RealMessageBox = GetProcAddress(hMod, "MessageBoxExW");
+#else
+		*(FARPROC *)&RealMessageBox = GetProcAddress(hMod, "MessageBoxExA");
+#endif
+	}
+
+	// lpText, lpCaption をローカルバッファにコピーして MessageBox API を呼び出す
+	// ※ 使い回しのバッファが使用されていてそれが裏で書き換えられた場合でも
+	//    メッセージボックス上の Ctrl+C が文字化けしないように
+	return RealMessageBox(hWnd, std::tstring(lpText).c_str(), std::tstring(lpCaption).c_str(), uType, CSelectLang::getLangId());
+}
+
 HWND GetMessageBoxOwner(HWND hwndOwner)
 {
 	if(hwndOwner==NULL && g_pcEditWnd){

▼ 2014/6/3 (火) 23:10:15 LR4  
Mozilla/5.0 (Windows NT 6.1; WOW64; rv:29.0) Gecko/20100101 Firefox/29.0
[2189] パッチ訂正
訂正です。
Wrap_MessageBox()の最後で RealMessageBox()を呼んでる箇所を修正する必要があります。

【誤】+	return RealMessageBox(hWnd, std::tstring(lpText).c_str(), std::tstring(lpCaption).c_str(), uType, CSelectLang::getLangId());
【正】+ return RealMessageBox(hWnd, lpText? std::tstring(lpText).c_str(): NULL, lpCaption? std::tstring(lpCaption).c_str(): NULL, uType, CSelectLang::getLangId());

MessageBox API のタイトルには NULL を指定可能(デフォルトタイトル"Error"を表示)
なのに、【誤】のほうで NULL 指定すると異常終了してしまいます。

しばらく【誤】のほうを使っていたところ、
Wikiではなく、どこかから拾ってきた「選択範囲を MSDN(VS2008用) で検索」マクロで、
オンライン優先にした場合に時間がかかってエラーになるケースで異常終了しました。

▼ 2014/5/16 (金) 00:29:53 もか  
INCM1.23a
[2183] Re5:不具合:「開きません」のキャンセルが存在しません
MessageBoxやDialogBox*(ついでにSHBrowseForFolder、GetOpenFileName等)は内部でGetMessage等を呼び出してメッセージ処理をするから、
BlockingHookと同じように他のウィンドウのメッセージが処理されることを意識する必要があるってことですね
(サクラのコードはBlockingHookもほとんど他の処理が走ることを考慮していませんけど)

VMessageBoxFを表示中にさらにVMessageBoxFが表示されることがあるようです。
何かのダイアログが表示された状態で、親ウィンドウにWM_CLOSEが送られてきたとか。
ためしに、編集中ドキュメントを[X]で閉じようとして「保存しますか?」ときかれてきて、
その状態でタスクバー(Win7)から「このウィンドウを閉じる」を選んだら、
もう一つ「保存しますか?」が表示されました。
1つめが他のダイアログだった場合は、VMessageBoxFのszBufはstaticなので、
2つめをキャンセルして1つめに戻ってきた場合に、よろしくないんじゃないでしょうか。
LR4さんの代替案ならWarpでコピーされて問題なさそうです。

考慮したほうがいいことで思いつくことは
1.バッファのリサイクル(LS/LSW/to_*char)
2.staticになってる変数等の再入問題
3.API呼び出し前にチェックしたファイル・ウィンドウ・共有変数等の内容が変更になっている可能性
4.プロセス(親ウィンドウ)の終了
とかいろいろありますが現状は結構手抜きのはず。

▼ 2014/5/16 (金) 09:50:12 LR4  
Mozilla/5.0 (Windows NT 6.1; rv:29.0) Gecko/20100101 Firefox/29.0
[2186] Re6:不具合:「開きません」のキャンセルが存在しません
残念なことですが、複数のメッセージボックスを表示している場合ですが、*各メッセージボックスの文字列バッファが独立したものになっていても*、どのメッセージボックスに対するCtrl+Cも、常に最後に出したメッセージボックスのテキストがクリップボードに入ります。
最後のメッセージボックスを閉じるとひとつ前のメッセージボックスのテキストになります。
(MessageBox APIの側で常に末尾スタックに積まれたバッファポインタを参照しているのかな?という挙動です)

サクラとは別に、Visual Studioが生成する最も単純なWin32 Appに少し手を加えただけのプログラムで検証しても同様でした。

サクラでは検索ボックスと置換ボックスを同時に出して、
検索ボックス:検索条件を指定してください
置換ボックス:前方(↓) に文字列 'x' が1つも見つかりません
のメッセージを同時に出すことができます。
上記に加えて、「閉じる前に保存しますか?」も簡単に出せますね。

メッセージフックでもして自コード内にクリップボード処理を回せば矯正できるとは思いますが、さすがにそれはアレなので、複数表示についてはあきらめて期待通りには動かないのが「仕様」ということにしておくほうが賢明と思います。
1個だけ表示しているときは期待通り動く、というところまでの対策で妥協しましょう(汗)

▼ 2014/5/16 (金) 10:30:39 LR4  
Mozilla/5.0 (Windows NT 6.1; rv:29.0) Gecko/20100101 Firefox/29.0
[2187] Re7:不具合:「開きません」のキャンセルが存在しません
> 最後のメッセージボックスを閉じるとひとつ前のメッセージボックスのテキストになります。

すみません、必ずしもこのルール通りではないようです。時折、違う挙動が起きるような?…
ちなみに、メモ帳でも検索ダイアログの「"x"が見つかりません」と「無題 への変更内容を保存しますか?」を同時に出したりできますが、やはり変な挙動になります。

▼ 2014/5/16 (金) 18:21:43 LR4  
Mozilla/5.0 (Windows NT 6.1; rv:29.0) Gecko/20100101 Firefox/29.0
[2188] Re7:不具合:「開きません」のキャンセルが存在しません
>どのメッセージボックスに対するCtrl+Cも、常に最後に出したメッセージボックスのテキストがクリップボードに入ります。

Spy++で見たら、どのウィンドウがアクティブかに関わらずメッセージループを回しているメッセージボックス(最後に表示したメッセージボックス)に WM_COPY が送られていました。
エディタウィンドウをアクティブにしている時でも。

▼ 2015/7/9 (木) 22:30:13 syat  
Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.132 Safari/537.36
[2265] Re8:不具合:「開きません」のキャンセルが存在しません
LR4さんのパッチをトラッカーに登録しました。(patchunicode/816)
問題なさそうなのでこちらを採用したいと思います。

■ 2222 ■
▼ 2014/12/8 (月) 22:03:32 もか  
INCM1.23a
[2222] ini読み取り専用・履歴分離オプションについて
・履歴分離
sakura.iniをバージョン管理するときなどに役立ちます。
ファイル履歴や検索履歴だけでなく、ウィンドウ位置・ダイアログ上のオプションなども対象です。
・ini読み取り専用
USBメモリとかSSDなどで書き込みを削減できます。
昔のバージョンでは、sakura.iniを読み取り専用属性にするだけでできましたが、今はリネーム処理をするためうまくいきません。
・合わせ技
読み取り専用になるのはsakura.iniだけです。sakura_hist.iniは書き込み可能です。
デフォルトの設定値の部分を削除してsakura.iniを削りかつ履歴は記録できるようにできます。

▼ 2015/1/16 (金) 08:57:33 匿名  
Mozilla/5.0 (Windows NT 6.1; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0
[2238] Re:ini読み取り専用・履歴分離オプションについて
最近の機能追加には非常に期待しております。

特にこちらの機能は気になっているのですが、
対応したバージョンをお試し利用できるでしょうか?
(MocaさんのWebページでの配布物でもまだ未対応でしょうか?)

> 読み取り専用になるのはsakura.iniだけです。sakura_hist.iniは書き込み可能です。

読み取り専用というより、
・終了時に常に更新されるのが、sakura_hist.ini で
・設定の変更時のみ更新されるのが、sakura.ini

のように分離されるということですよね。
とりあえずこの仕様だけでも、すっきりすると思います。

さらにずっと将来の話をすると、タイプ別のiniみたいな仕組みがあるとうれしい。
タイプ別設定とか、強調キーワード管理とか、もう少しどうにかならないかなと思うわけです。
現状、新たなPCで、まっさらな状態からsakuraの設定をしていく時、結構面倒ですよね。
その場合、sakura.iniファイルを新PCにコピーする方法が一番楽な解決法ですが、
それでもPC環境に合わせて変更する作業は必要なので。

VimのBundler(NeoBundle)みたいな仕組みがあるとうれしいですが。

▼ 2015/1/16 (金) 18:50:42 もか  
INCM1.23a
[2239] Re2:ini読み取り専用・履歴分離オプションについて
>(MocaさんのWebページでの配布物でもまだ未対応でしょうか?)
近いうちに対応版はだす予定です。
>読み取り専用というより、
>・終了時に常に更新されるのが、sakura_hist.ini で
>・設定の変更時のみ更新されるのが、sakura.ini
>のように分離されるということですよね。
>とりあえずこの仕様だけでも、すっきりすると思います。

ちょっと違います。
読み取り専用モードにすると、設定画面で設定を変更しても、sakura.iniには書き込まなくなります。
サクラエディタを再起動すると設定は変更前に戻ります。
ので、設定を変更したいときは、sakura.iniを直接操作する必要が出てきます。

▼ 2015/1/17 (土) 10:20:02 匿名  
Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0
[2240] Re3:ini読み取り専用・履歴分離オプションについて
> 近いうちに対応版はだす予定です。

期待しています!
MocaさんのサクラエディタWeekly版を、自己責任で使用させてもらっていますが、
最近の機能追加は本当に期待感が大でワクワクします。

> ちょっと違います。
> 読み取り専用モードにすると、設定画面で設定を変更しても、sakura.iniには書き込まなくなります。


この設定しても保存されないという仕様は、使用者には分かり辛いような。
単純に sakura.ini から sakura_hist.ini 部分の分離じゃだめなんでしょうか?
それとも、iniの仕様変更前の前段階のテスト的な実装でしょうか?

▼ 2015/1/18 (日) 00:19:49 もか  
INCM1.23a
[2241] Re4:ini読み取り専用・履歴分離オプションについて
>この設定しても保存されないという仕様は、使用者には分かり辛いような。
これは、旧サクラのsakura.iniの「読み取り専用属性」の代替機能なので、こうなっています。
もちろん、保存されないのを承知で使う機能です。
例えば、まだフロッピーを使っている人で、デフォルト設定部分を削除したsakura.ini使いの人とか、
sakura.iniを何かで共有していて、書き換えられると困る人向けです。
>単純に sakura.ini から sakura_hist.ini 部分の分離じゃだめなんでしょうか?
>それとも、iniの仕様変更前の前段階のテスト的な実装でしょうか?

「単純に」というと、何か誤解してるのか私の説明が悪いのかわかりませんが、
オプションではなく、履歴の分離を必須にするって意味ですか?
オプションにしたのには特に信条があってそうしたのではなく、サクラは保守派が強いので、ファイルが増えたり仕様が変わるのを嫌う人もいるかな位です。
それとも、履歴の分離のみ有効にしたいって意味なら、読み取り専用と履歴分離はそれぞれ独立して設定できます。
デフォルトではどちらもOFFで、直接iniを書き換える必要があるので、玄人用です。

>・終了時に常に更新されるのが、sakura_hist.ini で
>・設定の変更時のみ更新されるのが、sakura.ini

これはこれで便利そうなので、このようにする機能も付けてもいいとは思います。
読み取り専用オプションを「読み書き」「変更時」「読み取り専用」の3つから選べるようにするか、
または、履歴が「分離」または「なし」のときで、読み取り専用がOFFのときには、必ずそうするか。

なにか想定している使い方とかあれば、それを書いてもらえると参考になります。

▼ 2015/1/23 (金) 20:00:00 匿名  
Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.99 Safari/537.36
[2247] Re5:ini読み取り専用・履歴分離オプションについて
レス、ありがとうございます。

> なにか想定している使い方とかあれば、それを書いてもらえると参考になります。

やりたいことは、設定のカスタマイズ履歴を管理・バックアップしたいとか、
複数のPCでカスタマイズ設定部分だけ共通にしたいとか、そういう目的です。
いわゆるUnix系の人の間で流行っているGitによるdotfiles管理というものです。

サクラエディタの場合、とりあえずは、sakura.ini が毎回変わってしまうのが嫌なのです。
カスタマイズ的な変更をしていないのに設定ファイルが更新されるなんて!という思ってしまいます。
そういうわけで、sakura.ini からカスタマイズ系以外のセクション(MRU系)の分離を希望します。

他には、複数のPCで少しだけ設定項目を環境で切り分けたい場合、
Vimとかbashrcとかだったらif文で条件判断で設定を切り替えできるのですが、
同等のことをサクラでやるには良い方法はないでしょうか?
iniの一部だけを反映したいのです。
もちろんエディタでiniを編集すればできるのですが、面倒です。
「一部のセクションの一部のパラメータだけ記述したiniファイル」を読み込んで、
追加差分だけ反映するような機能あれば良いですが。
(現状は、インポートするとセクション全体が変わってしまう?)

▼ 2015/2/10 (火) 08:02:04 匿名  
Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0
[2251] Re6:ini読み取り専用・履歴分離オプションについて
> やりたいことは、設定のカスタマイズ履歴を管理・バックアップしたいとか、
> 複数のPCでカスタマイズ設定部分だけ共通にしたいとか、そういう目的です。


自己レスですが、
現状、sakura.iniファイルを複数のPCで使いまわそうとすると、
設定フォルダの起点がユーザー名やPCのフォルダ構成によって異なるため
それらを環境ごとに編集しないとダメっぽいですね。
( D:\Users\ユーザー名\ .... みたいなのが各所に )

つまり、複数のPCを使っている人は、各PCごとに書き換える必要があると。
結局、設定ダイアログをマウスでポチポチしないといけないのかな??

▼ 2015/2/12 (木) 01:29:08 もか  
INCM1.23a
[2254] Re7:ini読み取り専用・履歴分離オプションについて
>現状、sakura.iniファイルを複数のPCで使いまわそうとすると、
>設定フォルダの起点がユーザー名やPCのフォルダ構成によって異なるため
>それらを環境ごとに編集しないとダメっぽいですね。
>( D:\Users\ユーザー名\ .... みたいなのが各所に )

辞書・単語・ルールファイル・背景画像・マクロフォルダ等は、sakura.iniからの相対パスが使えますけど、
そういうことじゃない?

▼ 2015/2/13 (金) 07:11:05 匿名  
Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36
[2259] Re8:ini読み取り専用・履歴分離オプションについて
> 辞書・単語・ルールファイル・背景画像・マクロフォルダ等は、sakura.iniからの相対パスが使えますけど、
> そういうことじゃない?


....そういうことでした!!(笑)

そういえば、その辺は相対パスが使えたことは過去に知っていましたが、
今の自分のiniファイルはいつの間にか絶対パスになっていたのでした。
相対パス記述に直しましたが大丈夫そうです。
ありがとうございました!

ということで複数PCで設定をコピーして使い回しは、なんとか出来そうです。
ただMRU系(history系)がうっとうしいので、MRU系の分離(削除)は、しばらくは手作業で運用してみます。


他には、、、[2247] にて、一部のパラメータだけ記述したiniファイルを
読み込ませたいって書いたのは、その理由は、
2chの次の話のような場合に、設定ファイルにパッチを当てたいっていう理由でした。
http://anago.2ch.net/test/read.cgi/software/1415436679/130
こちらも手作業でiniファイルを置換すればよいので、問題ではないですが。

■ 2257 ■
▼ 2015/2/12 (木) 19:50:21 anonymous  
Mozilla/5.0 (Windows NT 6.3; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0
[2257] GREP中断で表示されるメッセージが文字化け
GREP中にキャンセルを押したときに出力されるメッセージ「中断しました。」が文字化けします。

CGrepAgent::DoGrepの以下がおかしいです。
const wchar_t* p = LSW( STR_GREP_SUSPENDED );        //L"中断しました。\r\n"
pcViewDst->GetCommander().Command_ADDTAI
L( p, -1 );
LSWした文字列をCommand_ADDTAILに渡す前にいったん一時変数に代入すれば文字化けしません。

sakura2.1.1.4

▼ 2015/2/12 (木) 21:25:42 もか  
INCM1.23a
[2258] Re: GREP中断で表示されるメッセージが文字化け
該当箇所はtrunk2/HEADでは他のパッチによりCNativeW経由になってるので問題ないようです。

■ 2242 ■
▼ 2015/1/19 (月) 23:16:00 syat  
Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.99 Safari/537.36
[2242] リリース予告
遅くとも2月中には次版をリリースしたいと思います。
バージョンは「2.1.2.0」か「2.2.0.0」か迷いましたが、新機能が大量なので2.2.0.0かな?


▼ 2015/1/25 (日) 16:33:03 syat  
Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.91 Safari/537.36
[2248] Re:リリース予告
ヘルプを書こうかと思ったら、もかさんがすでに私家版で修正していることに気づきました。
https://github.com/mocaskr/sakura_help

近いうちにSVNにコミットする予定はありますか?>もかさん
それならヘルプの更新はいったん止めます。すでに数パッチ分更新がかぶってしまいすみません。

▼ 2015/1/25 (日) 20:52:09 もか  
INCM1.23a
[2249] Re2:リリース予告
>近いうちにSVNにコミットする予定はありますか?>もかさん
>それならヘルプの更新はいったん止めます。すでに数パッチ分更新がかぶってしまいすみません。

まず、画像を用意するのが大変面倒なので、github版は手抜きでWin7のスクショを貼ったものになっています。
見ればわかるようにv007まではヘルプの修正をしたのだけど、残りは放置中です。
コピーしたり書き換えたり自由に使ってもらっていいので、syatさん側でやっていただいても構いません。
もちろん、ある分は私がやってもいいです。
ただしCshelp.txtの更新はやってないです。
あと、github版では、試験的にバージョン番号表記を対象文の前につけるようにしています。
後ろだとどこから開始か分かりにくい気がしたので。

本体側の修正は、
・矩形選択ロックの変更
・NEL等のデフォルトをOFF/及びNELのバグ修正

を入れたら今回のリリースではバグ修正以外おしまいにして次回へ回そうと思います。

▼ 2015/1/25 (日) 22:47:45 syat  
Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.91 Safari/537.36
[2250] Re3:リリース予告
わかりました。もかさんの修正を取り込みつつヘルプ書きます。

画面キャプチャ面倒ですよね。Win8ではクラシックテーマが廃止されたので、ホコリかぶってるXPマシンを引っ張り出さないとならない。

▼ 2015/2/11 (水) 13:26:52 syat  
Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36
[2252] テストバイナリ
誰かが試してくれるかもという期待をこめて、テストバイナリをアップしました。
http://ux.getuploader.com/sakura_editor/download/123/sakura_r3951.zip

主な新機能は、
・コードページ対応
 文字コードにコードページ番号を指定することで、対応文字コードが飛躍的に増えます
・マルチプロファイル対応
 複数のsakura.iniを切り替えて使うための機能です
・ノート線
・タブバーの多段、下段表示
・Grep置換
・ファイルツリー

 ファイル一覧を表示するだけでなく、複数のフォルダを統合してプロジェクトのような使い方ができる
・ミニマップ
・タイプ別拡張子ワイルドカード
・次の/前の変更行、関数に移動するコマンド
・Grep否定行検索
・マクロ関数(行属性取得、スクロール位置・表示桁数取得、ポップアップメニュー作成)


■ 2243 ■
▼ 2015/1/22 (木) 13:47:26 匿名  
Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0
[2243] ファイルの排他制御の不具合?
ファイルの排他制御を"しない"に設定して bat ファイルを編集して上書きすると
"ファイルが更新されました"のダイアログが出ます。
他のファイルでは出ないのですが。

▼ 2015/1/22 (木) 15:28:40 匿名  
Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0
[2244] Re:ファイルの排他制御の不具合?
環境を書き忘れてました。
Windows7 x64
Ver. 2.1.1.4 (Rev.3932)
です。

▼ 2015/1/23 (金) 16:39:40 est  
Mozilla/5.0 (Windows NT 6.1; rv:35.0) Gecko/20100101 Firefox/35.0
[2245] Re:ファイルの排他制御の不具合?
▼ 匿名さん
> ファイルの排他制御を"しない"に設定して bat ファイルを編集して上書きすると
> "ファイルが更新されました"のダイアログが出ます。
> 他のファイルでは出ないのですが。


私のところでも1年くらい前に同様な症状が出ていました。
出ていたのは.emlファイルでした。当時は.batファイルは扱っておりません。
(sakura 2.1.0.0だか2.1.1.0あたり)
確か、VirusScan Enterpriseのオンアクセススキャン設定でsakura.exeをローリスクプロセスとして登録してやることで問題が回避できた記憶があります。
今はsakura 2.1.1.4を使用していますが、問題は起きていません。

アンチウィルスソフトなど、常駐ソフトを一時的に止めて確認してみてはいかがでしょうか。
#常駐ソフト側のバージョンによって起きたり起きなかったりということもあるかもしれません。

▼ 2015/1/23 (金) 17:42:25 匿名  
Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0
[2246] Re2:ファイルの排他制御の不具合?
▼ estさん
> ▼ 匿名さん
> > ファイルの排他制御を"しない"に設定して bat ファイルを編集して上書きすると
> > "ファイルが更新されました"のダイアログが出ます。
> > 他のファイルでは出ないのですが。

>
> 私のところでも1年くらい前に同様な症状が出ていました。
> 出ていたのは.emlファイルでした。当時は.batファイルは扱っておりません。
> (sakura 2.1.0.0だか2.1.1.0あたり)
> 確か、VirusScan Enterpriseのオンアクセススキャン設定でsakura.exeをローリスクプロセスとして登録してやることで問題が回避できた記憶があります。
> 今はsakura 2.1.1.4を使用していますが、問題は起きていません。
>
> アンチウィルスソフトなど、常駐ソフトを一時的に止めて確認してみてはいかがでしょうか。
> #常駐ソフト側のバージョンによって起きたり起きなかったりということもあるかもしれません。


Avira Free を使っているのですが、監視プロセスから sakura.exe を外したら出なくなりました。
ありがとうございました。

■ 2223 ■
▼ 2014/12/31 (水) 13:08:40 匿名  
Mozilla/5.0 (Windows NT 6.1; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0
[2223] ダブルクォーテーション文字列の判定が変
Onigmo-5.15.0 のソース regexec.c の 1396 行目からダブルクォーテーション文字列の判定が変になります。
https://github.com/k-takata/Onigmo/blob/Onigmo-5.15.0/regexec.c#L1396

2.1.1.4 Stable と Rev.3908 で確認しました。

▼ 2014/12/31 (水) 16:28:40 もか  
INCM1.23a
[2224] Re: ダブルクォーテーション文字列の判定が変
そのURLで確認しました。
今の実装だと、「R"なにがし(」の文字列は、C++11のRaw Stringとみなされるので、
その終端がないものとして、この場合は「) "」が現れるまで文字列になります。
もしRと"の間にスペース1つでもあればRaw Stringとは認識されません。
これどうしたらいいと思う?

1. Rの直前にu8w以外が来ているかチェックする
\b(u|u8|w)R"[^(]*\(
の正規表現相当でチェック。\bの具体的パターンはよく分からない。

2. C++とは別にC/C++03文字列を追加してそっちを使ってもらう
作るのは簡単そうだけど、使う人が面倒
しかし、""文字列型を汎用として使うにはR"str...も普通の文字列としたい場合などあったほうがいいかも。

1.2.両方かな。
PRIdPTR等はC99みたいなので、何とかしようと思います。

▼ 2014/12/31 (水) 16:39:53 もか  
INCM1.23a
[2225] Re2: ダブルクォーテーション文字列の判定が変
>\b(u|u8|w)R"[^(]*\(
訂正。たぶんこう
\b(u8|u|U|L|)R"[^(]*\(

\bはたぶん
^|[!"#$%&'()=@{};:<>?,.*/\-\+\[\]\\s]

▼ 2014/12/31 (水) 19:35:45 もか  
Mozilla/5.0 (Windows NT 6.1; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0
[2226] Re3: ダブルクォーテーション文字列の判定が変
パッチをトラッカーに登録しました

https://sourceforge.net/p/sakura-editor/patchunicode/954/

▼ 2014/12/31 (水) 21:41:19 匿名  
Mozilla/5.0 (Windows NT 6.1; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0
[2227] Re4: ダブルクォーテーション文字列の判定が変
お疲れ様です。

▼ 2015/1/4 (日) 14:34:44 suzz  
Mozilla/5.0 (Windows NT 6.3; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0
[2228] Re4: ダブルクォーテーション文字列の判定が変
>C++ Raw StringがR"で終わる識別子でRそのものでない(PTIdPTR等)場合にも

・・・わけがわからないよ。
もう少しわかるように書けない?
また、どう直したのかを自然言語でも書けないかな?

また、「#956 カラーの文字列にC言語風を追加」ですが、
C言語風 / C++言語風 よりは、C/C++03 / C++11 という定義名にして、
デフォルトは C/C++03 にしませんか?

▼ 2015/1/4 (日) 22:15:51 もか  
INCM1.23a
[2229] Re5: ダブルクォーテーション文字列の判定が変
>>C++ Raw StringがR"で終わる識別子でRそのものでない(PTIdPTR等)場合にも
>・・・わけがわからないよ。

(キューベーのAA略)
「Rで終わる」ってのはxxxxR"hoge(str... って意味で
「Rそのもの」ってのはR"hoge(str.. て意味で書いたけどこれは不正確だった。
でその2つが「かつ」って書いてないけどかつの場合。
if( 'R' == str[nPos-1] ){ // Rで終わる識別子
    // 旧:Raw String定義
    if( IsRawStringPrefix(str, nPos) ){
       // UR,uR,u8R,LR,R の識別子(直前が記号類・空白か行頭)
       // 新:Raw String定義
    }else{
      // 上記の「場合」とはここの意味。ここは条件から外す。
    }
}
>また、「#956 カラーの文字列にC言語風を追加」ですが、
>C言語風 / C++言語風 よりは、C/C++03 / C++11 という定義名にして、

定義名は変更しようと思います。
>デフォルトは C/C++03 にしませんか?
C++11のほうを追加にして、
C/C++03(旧C/C++言語風)ではRawを色分けしないように仕様変更。
CType_CppのデフォルトだけC++11にしました。
旧設定から引き継いだC/C++タイプ別はC/C++03になります。ので、Rawを色分けしたい人は手動で設定を変更する必要があります。
2011年から4年も経過しているわけで、私個人としてはC++は04準拠で行きたいと思います。
サクラエディタのソースは違うけど。
新規格を取り込んでいかないと緩やかに死んでいくだけ。
Cの定義がっていう場合はそろそろタイプ別を分けたほうがいいと思う。
もはやCの上位版がC++とは言えないし。

▼ 2015/1/5 (月) 22:44:44 suzz  
Mozilla/5.0 (Windows NT 6.1; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0
[2230] Re6: ダブルクォーテーション文字列の判定が変

正規表現とか擬似コードに頼らずに日本語で書いて欲しいな。

コードを読まないと何やってんのかわからないのでは、
読む側は時間がかかるばっかりで嫌になっちゃうよ。
(サクラエディタのコードはうんこなんだから、できるだけヒントは欲しい。今北産業で。)

>旧設定から引き継いだC/C++タイプ別はC/C++03になります。ので、Rawを色分けしたい人は手動で設定を変更する必要があります。
>2011年から4年も経過しているわけで、私個人としてはC++は04準拠で行きたいと思います。


落とし所としてはこの辺ですかね。
新機能を入れるのはいいけど、利用者のことも考えてほしいなと。
(まあ、私はサクラエディタを使っていない人の筆頭なのだが)

> Cの定義がっていう場合はそろそろタイプ別を分けたほうがいいと思う。
> もはやCの上位版がC++とは言えないし。


ヘッダファイルがどっちも .h のことが多いので、分けるとそのへんが辛いのでは。

▼ 2015/1/6 (火) 02:17:19 もか  
INCM1.23a
[2231] Re7: ダブルクォーテーション文字列の判定が変
>コードを読まないと何やってんのかわからないのでは、
>読む側は時間がかかるばっかりで嫌になっちゃうよ。

どちらかというと変な日本語読んで混乱しているより、
さくっとコード差分みるのが早いとおもうんだけど、違うかな。
特にこのパッチは簡単な部類の処理なのでC++アレルギーとかCOBOLしかわからんとかでなければ。
最近はかなりの量をコミットしてるので、全部見るのは相当しんどいと思うけど。

>正規表現とか擬似コードに頼らずに日本語で書いて欲しいな。
それBNFで定義してるHTML5とかRFCとかディスってるの?
俺に日本語期待しても無駄だぞ。

>\b(u8|u|U|L|)R"[^(]*\(
>^|[!"#$%&'()=@{};:<>?,.*/\-\+\[\]\\s]

挑戦してみた。
!"#$%&'()=@{};:<>?,.*/-+[] 半角スペース および タブ文字 のいずれかの文字
または 行頭だった場合 かつ、
それに「u8R"」「uR"」「ULR"」「LR"」「R"」のいずれかの文字列が続きかつ、
その後ろに0文字以上「(」以外の任意の文字列が続きかつ、
さらにその後ろで改行までに「(」が現れた場合に、
Raw String とみなします。
いままでは、
「R"」の後で0文字以上の任意の文字列の後に、「(」が現れた場合に、
Raw String とみなしていました。

>(サクラエディタのコードはうんこなんだから、できるだけヒントは欲しい。今北産業で。)
(否定はしないが)汚い言葉を書く以上は、ぜひSuzzさんのウルトラスーパーすばらしいコードをですね、
と思いちょっと#if 0のコードを読ませてもらいました。よければポートしたいですし。
「#if 0」「#if 1」でタブだった場合とか2文字以上スペースがある場合は考慮されてない。
#とif, else, endifの間にスペースがある場合は考慮しなくていいのかな。
wmemicmpになってるけど、「#IF 0」とかも認識しちゃうけどいいのかな(プリプロセッサの仕様は詳しく知らない)。
あとはもし、完璧を目指すなら、文字列中のコメントらしい文字は文字列になるはずなので、その考慮が必要かも。
一か所 $endifになってる。
CColor_Comment_Cpp_If1::Match_CommentTo とかのwmemicmpがバッファオーバーランしてるところがある
ちゃんと見てないけど、colorStrategyStateの取り回しは良さそう。
実行は試していない15分斜め読みクオリティーなので、間違ってる所あるかも。
ちなみに「#if 0」をコメント開始「#e」をコメント終了にしてしのいでます。

▼ 2015/1/6 (火) 14:17:23 もか  
INCM1.23a
[2232] Re8: ダブルクォーテーション文字列の判定が変
自己突込み
>バッファオーバーラン
×
○:範囲外アクセス
読み込みだけでは、バッファオーバーランとは言わないと思う。全然違うがな。

▼ 2015/1/6 (火) 22:56:15 suzz  
Mozilla/5.0 (Windows NT 6.3; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0
[2233] Re9: ダブルクォーテーション文字列の判定が変
例えば、

C++11 Raw String の開始判定において、単語区切りを認識して
判定を行うように変更した。
(単語の区切りは、記号、ホワイトスペース、もしくは、
行頭の場合)

とか。100% 正確でなくても、コードや正規表現を読む
よりも、すばやく変更の概要が伝わるように。

コミットログやBTS/ITSのチケットなどを、他の人に
わかりやすく伝えたいと思って書かない人は、
コードも他の人が読みやすいようには書かないでしょう。
なので、諦めずに行きましょう。

私もご指摘の通り、うんこコードを書いていますので、
説得力はありませんが、サクラエディタのコードがこれ以上
うんこコードにならないように、善処いただけると、
ファンとしては嬉しいです。

>「#if 0」「#if 1」でタブだった場合とか2文字以上スペースがある場合は考慮されてない。
>#とif, else, endifの間にスペースがある場合は考慮しなくていいのかな。


私が仕事でメンテせざるを得なかった #if 0 だらけの
うんこコードは、サクラエディタを使って書かれたコード
だったらしく、概ね "#if 0" で統一されていました。
なので、上記のケースは考慮しなくても大丈夫でした。

私のうんこコードは出来も悪いので、取り込まないで
頂きたいのですが #if 0 / #if 1 ネスト対応は本家サクラエディタで
対応されるとありがたいユーザはそれなりにいると思います。
(C言語しか書けない(ような情けない人たちがIT土方を
やっている)組み込み業界では)

>実行は試していない15分斜め読みクオリティーなので、間違ってる所あるかも。
コードレビュー、ありがとうございます。

▼ 2015/1/10 (土) 22:56:58 suzz  
Mozilla/5.0 (Windows NT 6.3; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0
[2234] 紅桜の #if 0/#if 1 コード不具合について
> ○:範囲外アクセス
> 読み込みだけでは、バッファオーバーランとは言わないと思う。全然違うがな。


よろしければ、どのあたりが範囲外アクセスを行っているか、教えていただけないでしょうか?


ちなみに、

$endif はくだらないミスですね。。。
文字数が合っているので、かろうじて不具合にはなっていないようですが。

プリプロセッサに大文字は無いようなので、wmemicmp を使用しているのは不具合です。
おそらく、CBlockComment.cpp を流用したので、あまり考えず wmemicmp を使ってしまったのだと思います。

▼ 2015/1/11 (日) 03:19:49 もか  
INCM1.23a
[2235] RE: 紅桜の #if 0/#if 1 コード不具合について
>> ○:範囲外アクセス
>> 読み込みだけでは、バッファオーバーランとは言わないと思う。全然違うがな。

>
>よろしければ、どのあたりが範囲外アクセスを行っているか、教えていただけないでしょうか?

これ、CStringRefは元がCNativeWだった場合は、NUL文字が末尾についていることを保証できるので、
呼び出し元を含めたコード全部を考慮にいれた場合は、大丈夫みたいです。
すみません。


細かく対応しようとすると面倒がおおいですね。
行をまたいだでプリプロセッサがコメントアウトされた場合
/*
#endif
*/
とか。
厳密にはOKなのか知らないのですが、ifの直後に括弧がある場合とか、
#if 0
#if(1)
#endif
#endif

memcmp/wmemcmpって、
比較が一致しなかった次の文字にはアクセスしたらいけないのですよね?
先頭から1文字づつ比較しないといけなくて、
intとか8バイト以上とかで一致するか見るだけの場合にループで書いたのほうが速いとかありそう。
まぁ今のマシンは100MBをコピーしても一瞬だったりするから気にしたことないけど。

▼ 2015/1/11 (日) 04:04:18 もか  
INCM1.23a
[2236] RE2: 紅桜の #if 0/#if 1 コード不具合について
>比較が一致しなかった次の文字にはアクセスしたらいけないのですよね?
気になったんで(英語はよく分からんから)JIS X 3010:2003をwebで閲覧してみたけど、(w)memcmpの箇所に
有効バッファ長(n)のうち一致しなかった文字の後ろにアクセスしちゃいけない
とは書いてないので、
memcmp( "ab", "abcdefgh", 8 );
こういうのは、厳密な定義によるなら範囲外アクセスになるかどうかは実装依存かも。
サクラのほかのコードでも引数のs1,s2両方の長さが、n未満の場合がある使い方をしてるっぽいので微妙だ。

▼ 2015/1/12 (月) 16:55:15 suzz  
Mozilla/5.0 (Windows NT 6.3; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0
[2237] Re2: 紅桜の #if 0/#if 1 コード不具合について
> >よろしければ、どのあたりが範囲外アクセスを行っているか、教えていただけないでしょうか?
> これ、CStringRefは元がCNativeWだった場合は、NUL文字が末尾についていることを保証できるので、
> 呼び出し元を含めたコード全部を考慮にいれた場合は、大丈夫みたいです。


ありがとうございます。
文字の比較に memcmp(wmemcmp) を使うのも微妙な感じがするので、wcsncmp で比較する形にしようと思います。
(条件判定1回分省略したい・・・とも思わないので。)

> 細かく対応しようとすると面倒がおおいですね。
私は「いい加減」なので、あまり細かく対応せずとも、現状のブロックコメントより改善されれば良いかなと思っています。

#if 0/ #if 1 は、往々にしてコメントアウト目的のコードですので、
色分け表示する以前に消せばいいのですが、それを許してくれない現場も残っています。

ページ:[≪ <] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [> ≫]
INCM/CMT
Cyclamen v3.81
[ut:0.040][st:0.020]