最終更新: 2011-01-02T16:57+0900
/* 現在位置より前の位置を検索する */ bool found = false; CLogicRange matchLogicRange = CLogicRange( CLogicPoint( -1, -1 ), CLogicPoint( -1, -1 ) ); CLayoutRange matchLayoutRange = CLayoutRange( CLayoutPoint( -1, -1 ), CLayoutPoint( -1, -1 ) ); const SearchPos originalSearchPos = searchPos; if( pLayout ) { bool retried = false; ///< 末尾から再検索したかどうか。 for(;;) { found = 0 != GetDocument()->m_cLayoutMgr.SearchWord( searchPos.y, searchPos.x, // 検索開始位置 m_pCommanderView->m_szCurSrchKey, // 検索条件 SEARCH_BACKWARD, // 0==前方検索 1==後方検索 m_pCommanderView->m_sCurSearchOption, // 検索オプション &matchLayoutRange, // マッチレイアウト範囲 &m_pCommanderView->m_CurRegexp // 正規表現コンパイルデータ ); if( retried ) { break; } if( ! found && GetDllShareData().m_Common.m_sSearch.m_bSearchAll ) { // From Here 2002.01.26 hor 見つからなかったので末尾から再検索する。 searchPos.y = GetDocument()->m_cLayoutMgr.GetLineCount() - 1; searchPos.x = static_cast<Int>( MAXLINEKETAS ); // とにかく大きければよい。 retried = true; continue; } if( found ) { this->GetDocument()->m_cLayoutMgr.LayoutToLogic( matchLayoutRange, &matchLogicRange ); // 検索開始位置での幅0マッチはなかったことにして一つ前から探す。 if( matchLayoutRange.GetFrom() == matchLayoutRange.GetTo() && matchLayoutRange.GetFrom().GetY2() == originalSearchPos.y && matchLogicRange.GetFrom().GetX2() == originalSearchPos.x ) { searchPos.x -= 1; found = false; continue; } } break; } }
20090808p03の @2009-10-19に書いた*結果の一部が上のコ
gotoを使
まあ、bRedoはわからなくもない。いや、使われている部分を確認しないとわからないのだが、retriedだ
あ、上のコ
もうひとつ問題が見つか
CViewSelectの修正がないと、マ
範囲選択中でないときは幅0マ
「aaaaaaa...」というテキストを、F6による選択ロ
誤) SEARCH_PREV, SEARCH_NEXT
正) Command_SEARCH_PREV, Command_SEARCH_NEXT
すべて置換の無限置換対策として「m_pCommanderView->GetDrawSwitch() // 全て置換の実行中じ
CViewSelectの変更がステ
F6でロ単語文字列をデフ
CViewSelect.IsTextSelected()には、0文字選択を含むのか含まないのかは
そもそも、keepCurrentSelectionの条件に CViewSelect.IsTextSelected()は不要に思えるのでこれを外すことで対処。元のソ
「末尾から再検索しました」が表示されないのは、条件が「先頭から再検索しました」と同じにな
「CViewSelect.cppの修正は、幅0なら何もしないのではなく、 (略)」 else節で「pSelect->Set(ptCaretPos);」と同じことをしていたつもりです。また「m_nLastSelectedByteLen = 0; // 前回選択時の選択バイト数」の扱い方がわか
コメントで指摘されて rev2で導入した sel.IsTextSelected()を sel.IsTextSelecting()に変更したのは、CViewSelectの変更を取り消したことによ
「本の虫: シンタ
ifの条件文に && や || が 3つも 4つも連な
http://sakura-editor.svn.sourceforge.net/viewvc/sakura-editor?view=rev&revision=1724
とにかく無限ル
* 「# 幅0の上検索がいつまでもその場足踏みしてないで上へ進むように修正。
# キ
⁑ CViewSelect.IsTextSelected() -> return CLayoutRange m_sSelect.IsValid() -> return CLayoutPoint m_ptFrom.BothNatural() && CLayoutPoint m_ptTo.BothNatural()。BothNaturalという名前だけど、実際は xと yが共に 0以上かどうかをテストしている。選択範囲の始点と終点の X,Y座標がすべて 0以上のとき CViewSelect.IsTextSelected()は trueを返す。
最終更新: 2010-04-08T22:28+0900
参照(説明の丸投げ)> 萌デ
SHJSと萌デ
SHJSの場合は、JavaScriptであることと eval()で評価されることを利用して、ネイテ
今日試しにダウンロ
・<<(["'`]?)(\w+)\1 .... ^$2$ ヒアドキュメント1。後ろのディスクリプターは行内に唯一でなければ ならない。
右側の検索文字列には、後方参照が使えます。 左側で()でくく
ってグル ーピングしたマ ッチ文字列を、 右側の検索文字列の中で取得できます。 取得するには、 K2Editorの置換機構の 後方参照と同じように、$1,$2などを使います。
\1、\2でなくて $1、$2だから、右側のパタ
SHJS(と萌デ
formatted_text = <<TEXT.strip.gsub(/\t/, " "*8) TEXT
texts = [<<TEXT1, <<TEXT2] TEXT1 TEXT2
こんなんどうする?
最終更新: 2009-12-06T02:34+0900
たとえば、http://sakura.qp.land.to/?Junk%2F31 で展開されている GNU Global対応。息の長い支持があるが本体に取り込まれてはいない。こういう万人向けでない機能がプラガブルにな
プラグイン化を推し進めると、不要な機能をそぎ落として、メニ
い
なんでもできるエデ
でも実際は、エデ
という要素を自分は求めている(らしい。サクラエデ
この展開の着地点を Windows ということにしてみよう。エデ
最終更新: 2009-11-19T05:26+0900
すくなくとも幅0の矩形選択で改行の手前にタブやスペ
折り返しの結果として行頭に改行がきている場合もタブやスペ
Index: sakura_core/CViewCommander.cpp =================================================================== --- sakura_core/CViewCommander.cpp (リビジョン 42643) +++ sakura_core/CViewCommander.cpp (リビジョン 42644) @@ -4733,11 +4733,11 @@ // From Here 2001.12.03 hor /* SPACEorTABインンデントで矩形選択桁がゼロの時は選択範囲を最大にする */ // Aug. 14, 2005 genta 折り返し幅をLayoutMgrから取得するように - if((wcChar==SPACE || wcChar==TAB) && m_pCommanderView->GetSelectionInfo().IsBoxSelecting() && GetSelect().GetFrom().x==GetSelect().GetTo().x ){ - GetSelect().SetToX( GetDocument()->m_cLayoutMgr.GetMaxLineKetas() ); - m_pCommanderView->RedrawAll(); - return; - } + //if((wcChar==SPACE || wcChar==TAB) && m_pCommanderView->GetSelectionInfo().IsBoxSelecting() && GetSelect().GetFrom().x==GetSelect().GetTo().x ){ + // GetSelect().SetToX( GetDocument()->m_cLayoutMgr.GetMaxLineKetas() ); + // m_pCommanderView->RedrawAll(); + // return; + //} // To Here 2001.12.03 hor wchar_t szWork[2]; auto_sprintf( szWork, L"%lc", wcChar ); @@ -4833,7 +4833,8 @@ nDelLen = nIdxTo - nIdxFrom; /* TABやスペースインデントの時 */ - if( bIndent && 0 == nDelLen ) { + const bool emptyLine = ! pcLayout || 0 == pcLayout->GetLengthWithoutEOL(); + if( bIndent && emptyLine ) { continue; }
隠し機能がでてきましたよ。>「矩形選択時のSPACE/TAB動作に手を入れる場合、実装上、>>dev:4103 あたりのSPACE/TABインデント仕様を実現するための実装部が絡んできそうです。」
これだから迂闊なことはできない。自分用だと自分が使う範囲で問題がない限り気にしないで済むけど。
リンク先で議論されている桁揃えのためのインデント(条件によりタブやスペ
矩形選択はつ
挿入位置の文字の末尾が矩形選択範囲に含まれていないときにインデント用の文字を入力しないことで、インデント揃えができるように追加修正した版 > fix_indentation (4.1KiB, diff to trunk2@1674)
矩形選択時、その範囲内に文字がない状態でインデントすると桁が揃うようにスペ
hor氏のヘルプースを補完します。それ以外の場合、範囲内に文字のない行はインデント対象外になります。
「範囲内に文字のない行」は考慮外だ
あいう abc
というテキストの一桁目(「あ」の前半と「a」)や、
^ ABC DEF
というテキストの一桁目(タブの前半と「D」)を矩形選択してタブやスペ
一応入力された文字の幅を考慮して右移動しているけど、右移動を行うのが選択範囲の一行目だから、この場合一回右移動するだけで行き過ぎてしまう。
それも修正 > fix_indentation.rev2 (5.3KiB, diff to trunk2@1674)
問題の存在がわかれば叩きようも考えられるけど、それがわからなければ手の打ちようがない。テスト重要。
どうして、(幅のある)文字の先頭部分が矩形選択範囲に含まれているときだけインデント用の文字を挿入、ではなく文字の末尾が含まれているときだけ、なのかといえばおそらく、そうでないとインデントの桁揃えができないから。実際に試してみればすぐわかるけど、文字の先頭を条件にするとほとんど常にインデント文字が挿入されてしま
現在認識している問題点。
入力がインデント用の文字のときにも矩形選択の幅0を維持するようにした結果、CViewCommander::Command_INDENT_TAB()の
if(m_pCommanderView->GetSelectionInfo().IsTextSelected() && m_pCommanderView->GetSelectionInfo().IsBoxSelecting() && GetSelect().GetFrom().x==GetSelect().GetTo().x){ Command_INDENT( WCODE::TAB ); return; }
このコ
修正した。>fix_indentation.rev3 (5.8KiB, diff to trunk2@1674)
1つ目は fix_indentaiton.rev2のバグ。意図せず bIndent引数を trueから falseに変更してしま
指摘を受けて修正。原因は rev2のタイポ。指摘を受けたケ
本腰を入れて読んでいなか
つ
あいうえお 1かきくけこ
という行で幅1矩形選択をしてインデント用の文字を入力するとおかしな事になる。文字を挿入するときは幅0選択でいいじ
「ptLayoutNewを使
オプシ
とりあえずインデント文字のうちスペ
また従来は矩形選択範囲が折り返し桁に達した場合、行番号はそのままで選択範囲が行頭に移動して循環していたが、折り返し桁でとどまるようにな
折り返しといえば
1|ABC< 2|DEF< 3|GHI<
CFIを矩形選択して _を入力したとき、_が Fと Iの直前に入力されるわけではないというのはどう考えられているのだろう。これがあるから矩形選択入力と折り返しを組み合わせてはいけない、どんな結果も期待してはいけない、と思
タブが入力されたときもおかしなことにならないように改善した。>fix_indentation.rev6 (8.4KiB, diff to trunk2@1674)
原因はインデント文字の入力をスキ
テスト。1行目と 2行目をどこでも幅1矩形選択してタブを入力する。最初に選択した文字が取り残されないことを確認する。
あいうえお 1かきくけこ
4タブ設定で「う」の前半と「き」の後半を幅1矩形選択してタブをいくつか入力したとき、初回だけ「う」が後ろに行きすぎる。これはもうあきらめている。
0123456789 あいうえお 1かきくけこ (TAB幅は4の設定) で、1行目の「4」の左から3行目の「き」の右までを矩形選択(幅1桁)して TABを3回入力すると、1行目の「4」の左右にTABが入ります。
これは、「これはもうあきらめている」(@2009-11-09)ケ
行番号が55行ほどずれてしま
っています...
う
Editor.Char(9) と Editor.IndentTab() の使い分け
すでに BOOL bIndent引数が存在するのだからこれを厳密に適用しようということですね。悪くないと思いますし、対象も重な
矩形選択範囲がタブ境界にあり、全角文字の前半分が範囲からはみ出しているときにタブを挿入すると、行によりタブの幅が最小と最大にな
あいうえお 1かきくけこ で、「い」の左から「き」の右まで矩形選択します。 まず、「さ」を入力します。 次に、「a」を入力します。 結果、1行目には「さ」の手前に「a」が入ってしまいます。
不安に思
TABを含めた文字列をクリ
ップボ ードから貼り付けた場合
この場合はインデントではありませんし、揃えることよりもクリ
'int' から 'CLayoutInt' に変換できません。
直しました。個人的にデバ
二、三日前から毎日これぞ決定版fix_indentation.rev8 (10.8KiB, diff to trunk2@1674)
selectionIsOutOfLineの判定条件が(たぶん)おかしいです。 (括弧が足りてない気がします)
詳細なレポ
一日を失う手痛いミス >fix_indentation.rev8.1 (10.8KiB, diff to trunk2@1674)
インデント揃えにからむ機能のオンオフを機能の割り付けでコントロ
タブインデントとタブ文字の入力を区別。>fix_indentation.rev9
矩形選択入力で、(TABインデントや SPACEインデントによらない)タブやスペ
rev9.1を眺めていて、従来の動作に疑問。テキストが選択されていなか
わか
矩形選択で、改行文字の手前にインデント用の文字(タブとスペ
ABC ABC
Cの後ろを幅0矩形選択してスペ
矩形選択範囲の先頭が全角文字やタブなど幅広の文字のとき、インデント用の文字の挿入が桁揃えのためにスキ
あいう abc
一桁目(あの前半とa)を矩形選択してスペ
矩形選択範囲が全角文字の前半ばかりを移動してしまい、スペ
あいうえお 1かきくけこ
1行目と 2行目をどこでも幅1矩形選択して、スペ
矩形選択してタブを入力したとき、最初に選択されていた文字を置いてきぼりにして選択範囲が後ろに移動したりしない。
あいうえお 1かきくけこ
1行目と 2行目をどこでも幅1矩形選択して、タブをいくつか入力し、最初に選択した文字が範囲内に残
(何人いるのかわからない)ななしさんに協力してもら
追加修正もあるようで、
元に戻
ダウンロ
「GNU patchが5年ぶりにバ
patch 2.5.4 Copyright 1984-1988 Larry Wall Copyright 1989-1999 Free Software Foundation, Inc. This program comes with NO WARRANTY, to the extent permitted by law. You may redistribute copies of this program under the terms of the GNU General Public License. For more information about these matters, see the file named COPYING. written by Larry Wall and Paul Eggert
* 追記@2009-11-18 http://sakura-editor.sourceforge.net/cgi-bin/cyclamen/cyclamen.cgi?log=dev&v=4137#4137 にまさにその手順が書かれていた。ぱ
♭
ななしデバ
♭
ななしrev8です。 あいうえお 1かきくけこ 0123456789 「い」の右側から、3行全部を0幅選択してスペ
♭ ななしrev8.1でOKな気がします。 いい感じ (^^)
♭
anonymouse「1文字のTAB/SPACE入力が必ずインデント扱いにな
♭
ななし念のため。 上記の、 ・タブキ
♭
ds14050ええと、具体的にどういう動作が不満で、どういう結果になるのがよいのでし
♭
ななし行末を超えた位置にも通常文字は入る。 SPACEキ
♭ ds14050この部分ですね。 ---- if( nDataLen == 1 && IsIndentChar( pData[0] ..
♭
ななしnDataLen == 1 && IsIndentChar( pData[0] ) なんていう条件だと、 クリ
♭
ななし> 選択範囲が一行だけだ
♭
ds14050>1字のSPACE/TABという条件は、コ
♭ ds14050どうしようもないな。「元の挙動を残し」た。<<<大嘘
♭
ds14050なんかもうぐだぐだだけど気づいてしま
最終更新: 2011-12-20T23:29+0900
発端はこれ > 「折り返ししている物理行末を、キ
折り返し桁に到達した瞬間、次の行の始めにキ
いいだし
ざ
いじ
矩形選択をキ
矩形選択を上下左右矢印で解除したときはカ
取り残されるよりはましだろうと思
別件。選択を矢印で解除するとき、右(左)矢印だ
さらに別件。キ
違うなあ。フ
した。
たぶん、二行下移動(そういうコマンドがあ
と思
ち
ツ
今のサクラで、選択を上下左右の矢印キ
ーで解除するときの挙動は、秀、Em、MS Wordなどと同じ動きです。
秀丸エデ
(折り返し位置の1字手前から次行に移動する)も、概ね多くのエデ
ィタと同じ動きだと思います。
これ、キ
書いてるうちにさらなるツ
通常選択や通常カ
ーソル移動の仕様変更するのは本末転倒かな。
「本末転倒」はそうだ
二人とも、矩形選択中にキ
自然にこうなるはずもなし。 先人の意向ということで。
レガシ
個人的な主張や好みはおいておいて、波状攻撃をくら
SourceForge.net: Sakura Editor: Modify: 2889930 - 矩形選択中にキ
最終更新: 2013-04-29T21:18+0900
いままでは、Alt+矢印で矩形選択モ
2000年にはそのための布石というか、コメントアウトされたプレ
Sakura Editor / PatchUnicode / #449 矩形選択移動コマンドの追加
俺みたいにありもののコマンドで間に合わせるのでなく、足りないコマンドの実装までされています。
今思うと矩形選択しながらの、(折り返しでない本当の)改行単位での行頭・行末移動は不要だ
残念なのは、既存ユ
最終更新: 2016-03-05T00:30+0900
経緯 > サクラエデ
差分 > fix_cr_handling_of_regex(下に修正版がある)
お試し > sakuraW.zip (547KiB)(下に修正版がある) (正規表現検索・置換を試すには bregonig.dll(Unicode対応版)が別途必要)
検索、置換を数度試したが機能しているみたい。ただ、$ が本当に改行の手前でマ
^.*$
を空文字列に置換するという最初に提起されたケ
^.+$
あるいは、エデ
.+
で良い。
「正規表現 - SakuraEditorWiki」を見ていて気付いた。\c[、\c]、\c$、\c. という制御文字のひとつを表すパタ
irb(main):001:0> /\M-\C-[/ SyntaxError: (irb):1: too short escaped multibyte character: /\M-\C-[/ from c:/Program Files (x86)/ActiveScriptRuby-1.9.1/bin/irb.bat:20:in `<main>' irb(main):002:0
制御文字なんて扱
一括置換で $ が CRLFの CR直前、LF直前、LF直後(正規表現DLLに与えた文字列末尾)の三カ所にマ
逐一、置換を実行した場合は問題ないことを確認していたのだが、一括置換はライブラリに全部お任せで、検索開始位置を調整することもできないから動作が違
急いで修正 > fix_cr_handling_of_regex.rev2、sakuraW.rev2.zip (547KiB)(さらなる修正版 rev3が下に)
初めて戻り読みを使
\C-X、\M-X というのは Ruby向けなのかも。サクラエデ
対処 > fix_cr_handling_of_regex.rev3、sakuraW.rev3.zip
<追記>bregonig.dllでは \c\X が \cX の意味になるとか。もう知らね
個人プロジ
2.非対応となっているBREGEXP.DLL(ANSI版)への対処方法 ANSI版とUNICODE版は別仕様としてしまうのか?
使用できる正規表現自体が別物なので BREGEXP.DLLは CBregexp::MakePattern()でよいかと。ユ
<追記>ANSI版+bregonig.dll向けのパ
<追記>BREGEXP.DLL版も用意した。>_ANSI.rev2 >_ANSI.rev3</追記>
3.$ が改行なし最終行のEOF手前ともマッチするように改善すること $ を (?=\r\n?|(?<!\r)\n|(?<[^\r\n])$) に置き換える方法を試してみたけどエラーで動きませんでした。
肯定の戻り読みは (?<=) でした(なにせ使用経験がないもので)。気を取り直して、パタ
「以前は行われていたのだろうか?」< 行われていなか
4.検索強調表示が検索時の選択反転表示と一致すること $ を (?=\r\n?|(?<!\r)\n) に置き換えた版で $ を検索すると、改行文字自体は選択反転表示にはならない(マッチしない)のに検索強調表示されている。 また、なぜか上方向検索では改行文字自体にマッチしたかのように選択反転表示になる。
$で検索したときに改行文字が強調表示されるのは、幅0のハイライトには意味がないので、実用面から今のように最低でも幅 1を保つべきだと思
上検索で改行が選択されてしまうのは間違いなので修正したい。これまでが、知らず $ が改行にマ
修正した(rev4)。無限ル
5.正規表現キーワードでの $, . 指定も検索・置換と挙動が一致すること 現状、正規表現キーワードには $, . に検索・置換でやっているような細工が入っておらず、素の正規表現ライブラリ挙動になっている模様。 検索・置換時の . の細工([^\r\n]への置換)が追加されると、今よりも差異が大きくなって混乱しそう。
すでに書いたように、. が \r にマ
\r\n$ みたいな書き方をしていた場合にマ
6.検索・置換や正規表現キーワードの複数行対応への順応性
ノ
>fix_cr_handling_of_regex.rev4、sakuraW.rev4.zip
2ch民は 1.6.5.0をつかうのね。♥マ
Unicode版Revision1662>http://sakura-editor.svn.sourceforge.net/viewvc/sakura-editor?view=rev&sortby=date&revision=1662
Ansi版Patch>http://sourceforge.net/tracker/?func=detail&aid=2869238&group_id=12488&atid=312488
勘違いしていた。Unicode版のサクラエデ
だ
>>> DLL初期化時に呼ばれる仮想関数がありました。(そのたびにチ
CheckRegexpSyntax() は癌だ。検索ボタンを押すたびに DLLのロ
や
おまけとして、bregexp.dllだけが sakura.exeの隣にある状態でエデ
本当は CBregexpが CDllHandlerを継承するのをやめて分離して、1つの CDllHandler(DLLインスタンス)を多数の CBregexp(BREGEXP構造体)から参照するのがいいのかも。も
いまの CBregexpは InitDll()を呼び出されて、途中で違う正規表現ライブラリを読み込まされたとき、コンパイル済みの BREGEXP構造体を正しく解放できるのだろうか?
BREGEXP.DLLでも . と $ を置き換えるようにしてみた > fix_cr_handling_of_regex_ANSI.rev2(下に rev3)
副作用があ
ついでに気にな
表示としては ↵ も ⇠ も ⇣ も同じ一字だから CLayoutのすることにも一理あるのかもしれない。それなら改行文字の部分の選択領域をせめて全角幅にして検索結果のハイライト部分と大きさをそろえよう。
ANSI版の View関連のソ
あたり、なんとかならんかな。検索結果の選択範囲とハイライト領域のずれが気になる。
ANSI版を BREGEXP.DLLと組み合わせているときに、不必要に改行が検索結果に含まれてしまう場合を rev2より大幅に減らした。意地悪なパタ
> fix_cr_handling_of_regex_ANSI.rev3(rev2と rev3にバグ発覚。rev4へ)
fix_cr_handling_of_regex_ANSI.rev4
どういうバグだ
誤: /A|B/ -> /A|B((?:\r\n?|\n\r?)?)/ 正: /A|B/ -> /(?:A|B)((?:\r\n?|\n\r?)?)/
選択 | の結合順位は一番低いのでした。
バグは CBregexp.cppを好き勝手にいじ
していた。これは単なる自己満足。
不必要に選択範囲が改行にかか
バイナリ>sakura.zip
AINI版では LFCRの LFと CRの間に幅0マ
最終更新: 2011-03-25T01:34+0900
そして素朴な疑問。選択肢が 4つあるんだけど
閉じるをクリ
シンボリ
対策は、シンボリ
ので、こうした(improve_fileupdatequery_dialog.patch)。
わかりにくいと感じてるのは俺だけじ
なお、更新通知ダイアログはわかりづらいようなので、次のようにしてください。 ---------------------------------------- <!> このファイルは別のプログラムによって変更されました。 読み直しますか? ---------------------------------------- [ ]今後、ステータスバーに通知する [ ]今後、通知しない ---------------------------------------- [はい] [いいえ] ----------------------------------------
日記を書く段にな
最終更新: 2009-09-02T23:44+0900
キ
キ
最終更新: 2010-05-19T17:19+0900
確かに変ですが、ここの部分をきっちりやろうとするとレイアウト処理性能にシビアに影響するみたいです。 ざっと試したところでは、ファイル読み込みで1.5~3倍くらいの処理時間がかかるようになってしまいました。 右端で折り返す設定で画面幅を変化させるときの応答にも同様に効いてきます。http://sakura-editor.sourceforge.net/cgi-bin/cyclamen/cyclamen.cgi?log=data&tree=r7015
さらりと、できなくはないと書かれているが、どうやるんだろう?
sakura_core\view\colors\CColorStrategy.cpp の後半(「色開始」部分)をこう書きかえてみても中途半端な結果。フ
bool CColorStrategyPool::CheckColorMODE( CColorStrategy** ppcColorStrategy, //!< [in/out] int nPos, const CStringRef& cLineStr ) { //色終了 if(*ppcColorStrategy){ if((*ppcColorStrategy)->EndColor(cLineStr,nPos)){ *ppcColorStrategy = NULL; return true; } } //色開始 if(!*ppcColorStrategy){ for(int i = 0; i < (int)m_vStrategies.size(); ++i) { if(m_vStrategies[i]->BeginColor(cLineStr, nPos)) { *ppcColorStrategy = m_vStrategies[i]; break; } } } return false; }
違う。CheckColorMODE()のときに正規表現キ
白々しさ爆発だけど書く。下は sakura/trunk2/sakura_core/doc/CLayoutMgr_DoLayout.cpp から削除されたコ
if(!*ppcColorStrategy){ CColorStrategyPool* pool = CColorStrategyPool::Instance(); for(int i=0;i<pool->GetStrategyCount();i++){ CColorStrategy* pcSample = pool->GetStrategy(i); if(pcSample->BeginColor(cLineStr,nPos)){ *ppcColorStrategy = pcSample; //bRet = true; break; } } }
俺が感じたプログレスバ
CheckColorMODE()がないとク
レイアウト(禁則処理とか折り返しとか)とク
http://sakura-editor.sourceforge.net/cgi-bin/cyclamen/cyclamen.cgi?log=dev&v=4079#4083
サクラエデ
ィタの色分け解析ル ーチンは、全部で3つあ って、
- 行デ
ータの変更に、各レイアウト行の先頭色を決めるもの(CLayoutMgr) - 実際の作画時に各文字の色を決定しつつ作画するもの(CEditView::OnPaint)
- 対括弧の色を戻すときに各文字の色を決定するもの(CEditView::GetColorIndex)
最終更新: 2009-09-24T04:29+0900
方法は sakura/trunk2/sakura_core/sakura_rc.rcから CBS_SORTを一か所削除するだけでした。CRecentImp.AppendItem()が名前に反してあえて「アイテムを先頭に追加」しているけど、俺もそれが自然だと思う。「開く...(ドロ
ダイアログつながりで、拡張子補完も完全に切
最終更新: 2019-12-01T02:10+0900
行単位で処理してるのはどちらも同じだし、サクラエデ
色分けが正規表現キ
今のサクラエデ
シ
正規表現リテラルの影響があるのも嫌だな。パタ
<追記@2009-09-23>サクラエデ
CColor_RegexKeywordだけをいじるんでなく、CColorStrategy関連を作り直して CColor_*をそれに対応させるのがゴ
でもや
//参照 CEditView* pcView; CGraphics gr; //(SColorInfoでは未使用) //描画位置 DispPos* pDispPos; DispPos sDispPosBegin; CLogicInt GetPosInLayout() const; const CDocLine* GetDocLine() const; const CLayout* GetLayout() const;
こういうの。
与えられた行に対して、これからはそれより前の行の色分け結果も参照しつつ、一行分の色分け結果をまとめて返すから、描画はそちら(CEditView)でどうぞ、検索語のハイライトとの重ね合わせもそちらでよろしく、といいたいんだけど。
CColor_*
BREGEXPの情報は「BREGEXP DLL」を見てたんだけど、そこには載
typedef int (__cdecl *BREGEXP_BMatchExW2) (const wchar_t* str, const wchar_t* targetbeg, const wchar_t* target, const wchar_t* targetendp, BREGEXP_W** rxp, wchar_t* msg); typedef int (__cdecl *BREGEXP_BMatchW2) (const wchar_t* str, const wchar_t* target, const wchar_t* targetendp, BREGEXP_W** rxp, wchar_t* msg);
これは期待できるなあ。
ざ
// 拡張関数がない場合は、行の先頭("^")の検索時の特別処理 by かろと if (!ExistBMatchEx()) { /* ** 行頭(^)とマッチするのは、nStart=0の時だけなので、それ以外は false */ if( (m_ePatType & PAT_TOP) != 0 && nStart != 0 ) { // nStart!=0でも、BMatch()にとっては行頭になるので、ここでfalseにする必要がある return false; } // 検索文字列=NULLを指定すると前回と同一の文字列と見なされる matched = BMatch( NULL, target + nStart, target + len, &m_pRegExp, m_szMsg ); } else { // 検索文字列=NULLを指定すると前回と同一の文字列と見なされる matched = BMatchEx( NULL, target, target + nStart, target + len, &m_pRegExp, m_szMsg ); }
「拡張関数がない場合」もあるんですか……。BMatchExの google検索結果もた
BMatch()の戻り値は int。だが boolean扱いしてはいけない。BMatch関数のサンプルとして
while (BMatch(patern1,t1+pos,t1+lstrlen(t1),&rxp,msg)) { (マッチング結果の処理) }
みたいに書いてあるので騙されたけど、サクラエデ
// 検索文字列=NULLを指定すると前回と同一の文字列と見なされる matched = BMatchEx( NULL, target, target + nStart, target + len, &m_pRegExp, m_szMsg );
if ( matched < 0 || m_szMsg[0] ) { // BMatchエラー // エラー処理をしていなかったので、nStart>=lenのような場合に、マッチ扱いになり // 無限置換等の不具合になっていた 2003.05.03 by かろと return false; } else if ( matched == 0 ) { // 一致しなかった return false; }
負数の時はエラ
レイアウトと色分けの関係。変更のあ
次の行以降に影響する文字( " など)を入力しても即座には反映されない(最小化して元に戻すと反映されている。アンド
before
bool CEditView::DrawLogicLine( HDC _hdc, //!< [in] 作画対象 DispPos* _pDispPos, //!< [in/out] 描画する箇所、描画元ソース CLayoutInt nLineTo //!< [in] 作画終了するレイアウト行番号
after
bool CEditView::DrawLogicLine( HDC _hdc, //!< [in] 作画対象 DispPos* _pDispPos, //!< [in/out] 描画する箇所、描画元ソース CLayoutInt* pnLineTo //!< [in/out] 作画終了するレイアウト行番号
第3引数を双方向にして CEditView::DrawLogicLine()の呼び出し元にさらなる DrawLogicLine()呼び出しと描画領域の拡大をしてもらうことにな
……ということをや
や
あとは
折り返し、WSHマクロ、矩形選択、置換などはまだ試してない。落ちてから対応する。(分割ビ
自分が忘れてたので覚え書き。この変更で
正規表現キ
設定のフ
正規表現キ
たとえば、正規表現キ
再帰的な構造に対しては、JavaScriptで動く SHJSに対して鬼車が使えるサクラエデ
ときどき落ちる(落ちないはずがない)
レアな機能を呼び出したときが危ない。
JavaScriptで使
自分に対しても仕様を明確にしたい。もはや色分け結果は、良くも悪くも以前のものと変わらない。
フ
JSON_checkerを修正して使用することにした。修正内容は……
> allow_comment_and_regex_literal_and_single_quotation_string_and_identifier_as_a_object_key
遷移表が 30×31(=930エントリ)から 40×35(=1400エントリ)へ 50%増加している。ま、気にすることではないな。
enum modesと enum statesをヘ
(どうでもいいこと: JSON_checker.cの enum定義部分だけが LFでなく CRLF改行だ
「SHJSの言語フ
sh_preprocとか sh_functionという色指定をいちいち正規表現キ
オブジ
enumの要素(ラベル)が定数に置き換えられて構文エラ
#undef IN した。これは windows.hで定義されていたもの。
でけた。GUIがないから iniフしていないした)。SHJSの色指定は sh_normal、sh_keyword、sh_string、sh_comment、sh_number、sh_urlだけがサクラエデ
BREGEXP.DLLしかないときだ
C/C++とか PL/SQLというタイプ設定名をどうしよう。全角に変換しようか。……。した。<<< 曖昧な書き方だ
ヘ
正規表現キ
短い名前 | EColorIndexType | 長い名前 |
---|---|---|
RKB | COLORIDX_REGEX_KEYWORD | 正規表現キ |
RKC | COLORIDX_REGEX_TYPE | 正規表現キ |
RKD | COLORIDX_REGEX_VARIABLE | 正規表現キ |
RKE | COLORIDX_REGEX_CONSTANT | 正規表現キ |
RKF | COLORIDX_REGEX_ASSIGN | 正規表現キ |
RKG | COLORIDX_REGEX_OPERATOR | 正規表現キ |
RKH | COLORIDX_REGEX_FUNCTION | 正規表現キ |
RKI | COLORIDX_REGEX_OBJECT | 正規表現キ |
RKJ | COLORIDX_REGEX_BLOCK | 正規表現キ |
RKK | COLORIDX_REGEX_RXPATTERN | 正規表現キ |
RKL | COLORIDX_REGEX_DATE | 正規表現キ |
RKM | COLORIDX_REGEX_TIME | 正規表現キ |
どなたかの受け売りで代入( = など)と演算子( == など)を分けた。この日記での色分けも以前からそうしている。
タイプ別設定のデフ
付け加えるなら、コピ
カスタマイズされたタイプ設定というのも、すべての項目を持つのではなく、基本設定からの差分、ここだけは譲れないという設定だけを持つようにしたい。強調キ
さらに、強調キ
キ
スリム化といえば、MRU関連を別フ
全く関係ないが思い出したこと。既存のフ
@2009-12-16 カレントデ
一つだけ棚上げされていた CColor_Foundの移植完了。検索語のハイライトがドキ
重さとか、気になるなあ。気がつけば CPUや GPUよりケ
「ヘ
移植ミスかと思
\w{10} というパタ
こうしてみた。
//検索マークの切替え // 2001.12.03 hor クリア を 切替え に変更 void CViewCommander::Command_SEARCH_CLEARMARK( void ) { this->m_pCommanderView->m_bCurSrchKeyMark = ! this->m_pCommanderView->m_bCurSrchKeyMark; this->m_pCommanderView->RedrawAll(); return; }
これで本当に Ctrl+F3が検索語ハイライトの切り替えにな
<追記@2010-06-20>
検索条件が選択文字列で置きかわるのは意図された動作だ
脈絡もなく突然死する。abnormal program terminationと出るから、throwしてる部分が原因。どうしてそこを実行するような状態になるのかがわからない。色分けの反映が、外因による再描画が起こるまで遅れることも、やはり前後の脈絡なく起こる。徐々に壊れてい
昨日の突然死はコ
仮想関数を持
気付かなか
派生クラスで分かり易さのためにわざわざ virtual
関連。C#のえろい人の話>「Versioning, Virtual, and Override」
degradeの回復はもううんざりだお。次はこれをする。
パタ
JavaScriptの正規表現と違
/(A)(B)(C)/
というように隣接させる必要がない。入れ子にすることも許される。入れ子にしたら一番内側の色が適用されるようにしたつもり。
@2009-10-11に書いた Ctrl+F3での検索語ハイライトの切り替えについて。ANSI版、UNICODE版に共通するパタ
検索語ハイライトのやり方を変えないといけない。
先に、さらに別の問題の、上検索で行末からの検索が行われていなか
まだ直
検索語ハイライトのやり方を変えた。パタ
@2011-03-31 ハイライトが原因で1行3000桁を超える程度のフ
Luaち
>>'\0'も置換できるように >正規表現で \x00 とすれば出来ます。
無理。俺は NUL文字を考慮していない。
> // 前の行のNULL文字(\0)にもマッチさせるために+1 2003.05.16 かろと
というコメントを CSearchAgent::SearchWord() @ CSearchAgent.cpp で見つけたときに嫌な予感はしたけどもう遅い。
設定フ
正規表現インクリメンタルサ
>正規表現による複数行検索対応(簡易版)
正規表現ライブラリに適切なインタ
既存の APIに適合させるための非効率的なごり押し(に思える)や、バ
色分けのために行ごとに保存するキ
昨日の空の選択範囲が消えない対策として空のときは範囲選択をしないことにしたら、今度は下検索が先へ進まない。現在の選択範囲が空かどうかでその場足踏み対策をしていたからだ
空の選択範囲はキ
わか
というわけでもなか
選択開始時というのは幅0の選択をしている状態である。そのときにCViewSelect::DrawTextArea()を呼ぶことで選択範囲の始点の反転・反転解除の対応がとれたと思う。空の選択範囲のゴミは残らなくな
そもそもどの変更でゴミが残るようにしてしま
// 2005/04/02 かろと 0文字マッチだと反転幅が0となり反転されないので、1/3文字幅だけ反転させる // 2005/06/26 zenryaku 選択解除でキャレットの残骸が残る問題を修正 // 2005/09/29 ryoji スクロール時にキャレットのようなゴミが表示される問題を修正
こういうコメントが残
ここ数日は一退一進で進んでいない。
18日から 20日にかけて、exeのサイズが 50KB、diffのサイズが数KB縮んでいる。mergeのやり方を変えたんだが、失敗しているとしか思えない。
色分けは別スレ
中心となるデ
色分けスレ
メインスレ
こういう機能はどうや
そもそも、配列を所有するオブジ
違う違う。両方のスレ
Unicodeリテラル(>20091007)といい、正常進化だよね。>「C++0xのマルチスレ
非キ
正規表現でたとえると、従来の色分けは \b\w+\b を色分けする。昨日までは \b(\w+|[^\w\s]+)\b を色分けしていた。今日のは \b\S.*?\b を色分けする。(\bは \wと [^\w\s]、\wと \s、[^\w\s]と \sの境界)
弱点は、最長一致ではないから共通の接頭辞を持つ複数のキ
<追記@2010-04-04>
やはりというか、掲示板(unicode:1156)で最長一致について言及されてしま
昨日おかした間違いにトイレで気がついたよ。<どうでもいい
長さが足りなくて登録キ
予想通りだ
こういうケ
# 強調キーワード(2つ) 本日は、晴天なり 晴天じゃないよ # テキスト(1行) 本日は、晴天じゃないよ。
晴天じ
ハイライトの描画が古い情報に基づいていたのを修正した。なにが大丈夫だから省略、だ。> 過去の自分
@2009-10-20での矩形選択始点にゴミが残る問題の修正の結果、普通の選択でゴミが残るようにな
組み込みの「半角数値」の色分けが単語の境界を認識せず、数字とみれば見境なく色分けするようにしてしま
検索語ハイライトがおかしい。CEditView::IsSearchString()の仕様が正規表現検索とそうでない場合で異な
修正した。
@2009-10-10で書いた、「どなたかの受け売りで代入( = など)と演算子( == など)を分けた。この日記での色分けも以前からそうしている。」の元ネタを再発見した。これを以前読んでいたのだ。
With syntax highlighting it would be possible to mark "=" and "==" in different colours. Yay! A good reason for implementing syntax highlighting! But — and at this point it probably won't surprise you — every colour scheme I've come across uses the same colour to highlight both "=" and "==".
http://www.linusakesson.net/programming/syntaxhighlighting/index.php
ち
正規表現キ
>複数検索結果のハイライト表示 Request/197 - SakuraEditorWiki
最初に一言。検索履歴を利用して複数の色分け対象を探すのは、使いやすいインタ
検索機能は大枠で三種類ある。パタ
ツ
検索文字列の色設定のチ
Very Sleepyを試してみた。Ctrl+Endを押すと wcschr()がものすごい勢いで呼ばれているらしい。それを呼ぶのは文字変換系などを除くと WCODE::IsZenkakuKigou()がくさい。さらにそれを呼ぶのは CWordParse::WhatKindOfChar()。これは単語の境界判定で使われている。
改行文字36223個、折り返し64935行のフ
sakuraW.exe!CWordParse::WhatKindOfChar(const wchar_t * pData=0x027dd078, int pDataLen=134) 行 120 C++ sakuraW.exe!CWordParse::WhereCurrentWord_2(const wchar_t * pLine=0x027dd078, int nLineLen=134, int nIdx=125, int * pnIdxFrom=0x0017f76c, int * pnIdxTo=0x0017f768, CNativeW * pcmcmWord=0x00000000, CNativeW * pcmcmWordLeft=0x00000000) 行 49 + 0x10 バイト C++ sakuraW.exe!CEditView::IsSearchString(const CStringRef & cStr={...}, int nPos=125, int * pnSearchStart=0x026338f4, int * pnSearchEnd=0x026338f8) 行 307 + 0x24 バイト C++ sakuraW.exe!CColorML_Found::IsStartOfKeyword(const CEditDoc * const pDoc=0x02740048, const int nLineNumber=40057076, const int nPosWithinLine=125, EColorIndexType * const outColor=0x0017f80c, void * * userData=0x04af1e94) 行 56 C++ sakuraW.exe!ColorMLStrategy::HighlightEngine::DoHighlightLine(const std::vector<CColorML_Base * const,std::allocator<CColorML_Base * const> > & strategies=[2](0x026338a8,0x026338e8 {pView=0x0263a458 lineNum=1582 begin=-1 ...}), const CEditDoc * const pDoc=0x02740048, const int nLineNumber=1582, const ColorMLStrategy::HighlightEngine::StartingStrategy & startingStrategy={...}, ColorMLStrategy::Result * const outResult=0x00000000) 行 113 + 0x27 バイト C++ sakuraW.exe!ColorMLStrategy::HighlightEngine::HighlightLine(const std::vector<CColorML_Base * const,std::allocator<CColorML_Base * const> > & strategies=[2](0x026338a8,0x026338e8 {pView=0x0263a458 lineNum=1582 begin=-1 ...}), const CEditDoc * const pDoc=0x02740048, const int nLineNumber=36202, ColorMLStrategy::Result * const outResult=0x0017f9bc) 行 69 C++ sakuraW.exe!ColorMLStrategy::HighlightLine(const CEditDoc * const pDoc=0x02740048, const int nLineNumber=36202, ColorMLStrategy::Result * const outResult=0x0017f9bc) 行 200 C++ sakuraW.exe!CEditView::DrawLogicLine(HDC__ * _hdc=0x00008d6a, DispPos * _pDispPos=0x00000000, int * pnLineTo=0x0017fbe4) 行 546 C++ sakuraW.exe!CEditView::OnPaint(HDC__ * _hdc=0x01011734, tagPAINTSTRUCT * pPs=0x0017fc38, int bDrawFromComptibleBmp=18) 行 377 C++ sakuraW.exe!CEditView::DispatchEvent(HWND__ * hwnd=0x00080684, unsigned int uMsg=0, unsigned int wParam=0, long lParam=0) 行 693 C++ sakuraW.exe!EditViewWndProc(HWND__ * hwnd=0x00080684, unsigned int uMsg=15, unsigned int wParam=0, long lParam=0) 行 103 C++
CLayoutMgrの実装もリスト。ランダムアクセスの遅さ(=CLayoutMgr.SearchLineByLayoutY()の遅さ)がスクロ
インデ
ポインタ二個分のオ
Alphaは、GreenPadとならんで、ソ
GreenPadはねえ、どこに機能があ
Alpha-0.7.5.16α-fix10で .rbフ
ソ
昨日は「Localization(でいいのかな?)」と書いたけど、2006年あたりの日記(Alpha の باطل な日記)を見てると Multilingualizationまで踏み込んでいる気がする。「気がする」のは用語の適用範囲がいまいちわか
破
@2009-10-17に書いた「上検索で行末からの検索が行われていなか
サクラは '00000'00000 ←→ 00000'00000' だから、挙動に納得は出来る。 EmEditorは一見、真魚と同じに見えるが、 aaa1aaa1aaa1に対して、.+1で検索すれば、 順方向では開始位置から最後までがヒ
汁么ゴ魚 - 鬼車#3ットするのに逆方向ではa1だけがヒ ットする。 これも全く納得できない理解不能な動作だ。
上検索で a1 ではなく aaa1aaa1aaa1 にマ
真魚の最新版(2.2.3.5)で aaa1aaa1aaa1 に対して .+1 を下検索すると全体がマ
気にせず greedyな上検索にしてみたけど、中途半端な結果にな
本家のサクラエデ
対称性は(自分の望んだ結果なのだから)捨てられるとしても、2番目と 3番目にはよりよいマ
行末やキ
同じく、真魚の作者の日記から
正しくは、 CR:← LF:↓ CRLF:←曲がって↓ LFCR:↓で一行、←で一行 こんな表記になる。 あきらかに間違っているのはサクラエディタで、CRとLFの矢印が逆だ。 いや、Windowsの間違いにわざと乗ってやってると言うべきなのか。 CR:↓(逆) LF:←(逆) CRLF:↓曲がって←(逆+逆) LFCR:←曲がって↓(一行にまとめてはいけない)汁么ゴ魚 - CRとLFの問題
今は ANSI版、Unicode版ともに CRと LFの逆転は解消され、CRは←で、LFは↓で描画されている。CRLFはそのままだがこれは、LF(↓)と CR(←)の組み合わせなのではなく、リタ
URLの色分けがいつからかできてないや。
2009-11-16からだ。アルフ
intと wchar_t(オプシ
相変わらずマ
行をまたぐ色分けに問題があ
括弧類を色分け対象にしていて、「対括弧の強調」も有効にな
このブランチ単体でも、純粋な公式 trunk2でも再現しないからその差分を見ていたら見つけた。
http://sakura-editor.svn.sourceforge.net/viewvc/sakura-editor?view=rev&revision=1723
Index: sakura_core/view/CEditView_Paint_Bracket.cpp =================================================================== --- sakura_core/view/CEditView_Paint_Bracket.cpp (.../shjs_style_regex_keyword) (リビジョン 45197) +++ sakura_core/view/CEditView_Paint_Bracket.cpp (.../build_my_sakura) (リビジョン 45197) @@ -138,7 +138,7 @@ if( IsBracket( pLine, OutputX, CLogicInt(1) ) ){ // 03/10/24 ai 折り返し行のColorIndexが正しく取得できない問題に対応 // 2009.02.07 ryoji GetColorIndex に渡すインデックスの仕様変更(元はこっちの仕様だった模様) - nColorIndex = GetColorIndex( pcLayout, OutputX ); + nColorIndex = GetColorIndex( pcLayout, OutputX + 1 ); } else{ SetBracketPairPos( false );
+1したら次の文字の色になるのも当然。GetColorIndex()の中身がブランチの方で別物にな
ここらで続く。
sakuraW+rkw2.zip (645KiB, 2011-05-25, 2.0.2.0(r1913)ベ
shjs_style_regex_keyword(trunk2@1711).patch (352KiB, 2010-04-14)
svn co https://sakura-editor.svn.sourceforge.net/svnroot/sakura-editor/sakura/trunk2/@1711
気ままな変更がちらほら。
色分けされないときのチ
Javaだ
* WikiPedia(ja)を見たら JSONで表現できるデ
⁑ 内部で使用するだけの型の完全な情報を実装(cppフ
⁂ @2009-10-24 デストラクタが呼べないのは、auto_ptrをメンバに持つクラスのデストラクタがコンパイラの生成するデフ
*4 @2010-01-29 『More Exceptional C++』を読み返していたら、これにも原因の説明と対処法が載
*5 今のままでは正規表現のフラグとフラグの間にコメントが埋め込めそう。コメントは空白文字だとして、returnStateに戻る代わりに state_transition_table[returnState][C_SPACE]に戻れば良さげ。
*6 現在までに書いた C++コ
*7 というか、そのときの C#しか知らない。
*8 共有メモリにオブジ
@2013-07-26 Scintillaでの行管理の工夫。「[[Scintillaのデ
*9 文字列の内部表現が Unicodeなのに \xXX という ASCIIコ
縦書き編集機能とか実装できるほどのスキルがあればいいんだけどねえ。
2chに化けるという書き込みがあ
ステ
この修正中にこんな処理が行われていたことを知
// 編集ウィンドウ切替中(タブまとめ時)はタイトルバーのアクティブ/非アクティブ状態をできるだけ変更しないように(1) // 2007.04.03 ryoji // 前面にいるのが編集ウィンドウならアクティブ状態を保持する
タブ切り替え時に二つのサクラエデ
行・列番号の表示よりも右の部分にゴミが表示されます。
Vistaしかないので制御文字が半角空白に置き換えられたときに区別できるように、メ
ステ
サクラエデータスバ ーを消すとメニ ュ ーバ ーの右端が化けち ゃうんだけどどうすれば ィタふ ぁんくらぶ part12
というのを読んで俺は表示が欠けることを指して化けると言
タブ切り替え時のちらつき防止はノ
_tcsncpyが、コピ
今度は右端に埋め文字(「 」の代わりの「*」)が見えた > fix_menubarmessage(rev2).diff
さらなるチ
もう最後にしたい > fix_menubarmessage(rev3).diff
最終更新: 2009-08-26T17:01+0900
要望を書いて次の日になんとかするセルフサ
便利なメソ
結果はわりと希望通りの動作。
バ
タブを閉じたときに次にアクテ
知らなか
よくみると CRの部分は改行がダブ
あとは、常に「前回開いていたフ
♭ ななしfix_searchword_selection_with_selectinglock_on 置換前:$ 置換後:..
♭ ななしてけと ー。 CViewCommander.cpp 【追加】 3116: const bool wasSelected..
♭ ななしや、 3158: (sel.IsTextSelected() && matchLayoutRange.GetF..
♭ ななしrev2 「先頭(末尾)から再検索する」をONにしているのに、 末尾から再検索しても「▲末尾から再検索しました」 が..
♭ ななし「選択幅ゼロ」は自明なので一切表示しなくていいと思います。
♭ ななしCViewSelect.cppの修正は、 幅0なら何もしないのではなく、 以下のようにしたほうが良くないですか? ..
♭ ななしrev2です。 abc というテキストで、 置換前:abc 置換後:xyz 先頭(末尾)から再検索する:ON 置換対..
♭ ななし※同じく、置換後を abcxyz、置換対象を[選択文字(0)]としても起きた