▼ 2005/10/22 (土) 09:39:38 かろと | |
[4061] RE: 「\r」が「\r\n」にマッチする件 |
>タイトル: RE: 「\r」が「\r\n」にマッチする件
>発言者: miau
>sakura_2005-10-09 の CEditView_Command.cpp 7518 行目、7957 行目で、
>
>// 置換後文字列への書き換え(行末から検索文字列末尾までの文字を除く)
>Command_INSTEXT( FALSE, cRegexp.GetString(), cRegexp.GetStringLen() - colDiff, TRUE );
>
>という処理を行い、選択部分の文字列を置換後のものに置き換えているようです。
>ここで検索マッチ部分に「\r」が含まれる場合、直後で「\n」にマッチしていない状態であっても
>「\r\n」までが選択されているのが原因のようです。
\rを、INSTEXTで置き換えようと思っても(というより、改行の途中を表現できない)、
\r\nを置き換えてしまうので、結果的に \n が欠けてしまっていたようです。
改行の途中なら、行末まで(\nも含めて) INSTEXTで置き換えてしまうように修正しました。
diff --dos -ur -x CVS -x tags -x sakura_rc.aps -x *.obj -x *.RES -x *.rc sakura_core_old/CEditView_Command.cpp sakura_core/CEditView_Command.cpp
--- sakura_core_old/CEditView_Command.cpp Sun Oct 02 14:38:05 2005
+++ sakura_core/CEditView_Command.cpp Sat Oct 22 09:32:58 2005
@@ -7514,6 +7514,10 @@
}
// 行末から検索文字列末尾までの文字数
int colDiff = nLen - nIdxTo;
+ if (colDiff < pcLayout->m_pCDocLine->m_cEol.GetLen()) {
+ // 改行にかかっていたら、行全体をINSTEXTする。
+ colDiff = 0;
+ }
// 置換後文字列への書き換え(行末から検索文字列末尾までの文字を除く)
Command_INSTEXT( FALSE, cRegexp.GetString(), cRegexp.GetStringLen() - colDiff, TRUE );
// To Here Jun. 6, 2005 かろと
@@ -7953,6 +7957,10 @@
}
// 行末から検索文字列末尾までの文字数
int colDiff = nLen - nIdxTo;
+ if (colDiff < pcLayout->m_pCDocLine->m_cEol.GetLen()) {
+ // 改行にかかっていたら、行全体をINSTEXTする。
+ colDiff = 0;
+ }
// 置換後文字列への書き換え(行末から検索文字列末尾までの文字を除く)
Command_INSTEXT( FALSE, cRegexp.GetString(), cRegexp.GetStringLen() - colDiff, TRUE );
// To Here Jun. 6, 2005 かろと
|
|