/ 最近 .rdf 追記 設定 本棚

log[SakuraEditor: 2011-06-01]



20110601() あかん。r1921をマージするのは死ねるァイル構成()が違うし名前が違うし DoChangeColorとかもうないしSColorStrategyInfoCColorStrategyのインターフェイスの一部(CColorStrategy.hの中に入れるもの)ではなくその利用者 CEditViewに属するものだと思うんだよね本来無関係な CEditViewの一部を取り込んでおいて #include "view/CEditView.h"(2)とかその引きずってるものの大きさを考えたら気違い沙汰ですよと思ったので色分けを SHJS方式にしたときに構成を変えたのだった2 #includeはコメトアトされてるように見えるけどヘッダの中で Viewのメンバを呼んでるからむしろ何でそれでOKなの? .cppに移動させてもリンクのコトが無駄に増えるのは変わりないCColorStrategy.hをインクルドする他のファイルに無駄な依存を伝播させることはなくなるけど### r1921のマージはアイアを借りた再実装と同じだとわかったったら今はやらない

最終更: 2011-06-11T02:05+0900

[SakuraEditor] BugReport/82 - SakuraEditorWiki 正規表現検索の不具合

ここに犯人がいます。言い訳するとこれは見逃してもしかたがないと思うの(補記だし存在しない機能だ)

 補記 3. Perl 5.8.0と比較して存在しない機能
 + \N{name}
 + \l,\u,\L,\U, \X, \C
 + (?{code})
 + (??{code})
 + (?(condition)yes-pat|no-pat)

 * \Q...\E
   但しONIG_SYNTAX_PERLとONIG_SYNTAX_JAVAでは有効
http://www.geocities.co.jp/kosako3/oniguruma/doc/RE.ja.txt

bregonig.dllONIG_SYNTAX_PERL_NGを使ってるみたいだから \Q...\Eは有効bregexp.dll\Q...\Eをサポトしていない

ッチはこれ>regex_trick_coping_with_qeescape.patch(13.3KB, 2011-06-01)

トケースはこれから整理する(パターン内でのコンテクト×エスケープシークス×正規表現ライブラ)


 @2011-06-02

トマクロを書いた>test_regex_trick.js(5.0KB, 2011-06-02)

そうすると\c\\ みたいなパターンに対応できていないことが新たに判明した*っとだけ修正したパッチはこれ>regex_trick_coping_with_qeescape.rev2.patch(13.3KB, 2011-06-02)

手もとでは bcc32で作成した sakura.exe(1.6.6.0 with bregonig-1.45)VS2008EEで作成した sakura.exe(2.0.2.0 with bregonig-2.02)ともに Revision 1922ースですべてのテトに成功する逆にッチなしだと期待した通りに失敗する


 @2011-06-10

掲示板>1571

コミ>r1923

* 違ったもうシラネっていってたやつだたぶん


20110509() 原文を見なくてもわかる日本語訳のミス>ーグル社員の間でも黄の社員証の階級はほとんど知られていない彼らのビルは3.1459~という棟で

最終更: 2011-05-10T18:49+0900

[SakuraEditor] Re: 正規表現による複数行検索対(簡易版

 GetCountOfDividedStringW()はいけてない

どういう関数?>「改行のエスケープシーケ'\\'+'n'で区切られる文字列の個数を数えWCHAR)」

使われ方>「複数行指定方法の改(正規表現パターンの行数とダイアログ設定値の大きい方を採用する)」

  • \rに対応していない
  • LFの直書きに対応していない(CRの貼り付けはできなかったのでとりあえず LF)
  • 量指定子に対応していない
  • \x0D\x00\x0A\x00\x{0D}\x{0A}に対応していない
  • [\s\S]\s, [\w\W]\W, . (sフラグON)に対応していない

これだけ対応していないな「正規表現によるというより\nというエスケープシーケスにだけ対応した普通の検索といったほうが当たってる正規表現ライブラリに今以上の機能(hitEnd)を求めないのならこれが最大限度の対応なのかもしれないが……。GetCountOfDividedStringWには期待せずダイアログで 100とか設定しておけば大体はうまくいくのかもしれない

 CMultiLineSearch::GetCompensationLengthには脱帽

どういう関数?>「0文字マッチや改行文字の途中を考慮した置換文字数の補正値を取得する

なぜ必要?>ドキュメトの操作がビー経由でしか行えないためロジック単位で行った検索をレイアト単位に変換してから置換を実行しなければいけない置換関数の中ではレイアト単位をロジック単位に変換して……といったことがもちろん行われるわけで……ムキってなことを 20100907p01.03に書いた

とりあえずロジック単位で置換範囲を指定できる置換関数をどこかに作ろうとして、20100709p01の複数行置換の実装は止まっている。CMultiLineSearch::GetCompensationLengthを使うアプローチはこれまでのやり方を踏襲するもので置換範囲と置換文字列をレイアト単位境界にそろえてから置換関数を呼び出す。計画倒れよりできあがってる方が偉い


20110420()

最終更: 2011-04-21T03:20+0900

[SakuraEditor] Regarding: Request/359(CSV編集モ) - SakuraEditorWiki

TSVったらタブ幅が可変になればよさそう列ごとにドの最大幅より1文字分だけ右側にタブップがくるようにすると表形式に整列されるァイルを最後の行まで読んで調べないとレイアトを決定できなくなるのがデメリレイアト↔論理座標変換も工夫しないと遅くなるこの変換は検索などでやたら無駄に呼び出されるから速度低下は増幅されるCSVならカンマの幅を半角文字○個分扱いするのかな一文字編集するたびに画面全体の再描画が発生するケースもあるけど気にならない程度? 列を指定してソトできる秀丸さんかっこいいタブップを自由に設定できるというからタブップの位置を配列で持ってんのかなタブ幅だけを覚えておいてその倍数がタブップという現状にくらべると記憶領域も検索コトも必要になるけどせいぜい人間が管理できる程度の数にしかならないだろうし桁位置(64bits)×タブップの数(10000)=80KBで十分過ぎるくらい


20110406() zenback を入れてみた一点にだけ注目していた期待は裏切られなかったコメトの後に ZENBACKが表示されるのがイイそうでないと読もうと思ったコメトが遅延ロドされた ZENBACKに押しやられて逃げていってしまうから追記@2011-04-07:zenbackをツッコミ欄の後ろに表示させた一件 - kayakaya日記(2011-03-28) 突如わいてきた(ように見えた)要望の目的は最初からそこにあったのねスクリトを埋め込むのに tDiary本体の修正が本当に必要?って思ってdanなにがしさんの(コメトが逃げる)ブログを Firebugで覗いてみたりしてたのよこの後者のエトリを発見したのが前のエトリの関連リンク(powered by zenback)ってんだから有用性は疑いえないな

最終更: 2011-04-14T01:54+0900

[SakuraEditor] BugReport/70 - SakuraEditorWiki

ったく、CViewCommander::Command_REPLACE_ALL ってのは人類の理解の範囲を超えている

  • 通常選択範囲を置換
  • 矩形選択範囲を置換
  • ァイル全体を置換
  • 対象範囲を行単位で置換
  • 対象範囲をひとつのマッチごとに置換
  • 正規表現ライブラリを使って置換
  • クリップボドのテキトに置換
  • クリップボドの矩形テキトに置換
  • 置換ではなく前に挿入する
  • 置換ではなく後ろに挿入する

これあえて異なる複数の分類を一括りのリトにしてるけど実際のコドがそうなのだこんな処理が一つの関数の中に変数を共有しながら―しかも型を偽って本来とは違う使い方が特定の処理ルトではなされていたりする―一部の処理を共有しながらインターリーブされてる

BugReport70.patch (1.7KiB, 2011-04-07 02:50)

submit(<commit以前)はしない怖すぎる


「すべて置換は置換の繰返しフラグが ONのときの対策がまだ

コミトログも読まずに軽率な修正>BugReport70.rev2.patch (2.7KiB, 2007-04-07 06:50)

これから読む>SourceForge.net Repository - [sakura-editor] Revision 1049, SourceForge.net: Sakura Editor: Detail: 1636751 - 行置換のオプション化&問題修正

うむ削除したコドがなぜあえて論理座標だったのかわからない


 @2011-04-11 // 行単位で置換するので colDifは常に 0

って書いて削除したコドがパッチにあるけど一つの行が複数のレイアト行に分割されてることがある一行処理して次の行……と思ったらまだ折り返された同じ行にいた前にも別件で書いてるけど折り返しと矩形選択(+文字一括挿入/+置換)は本当にひどい組み合わせ結果を予測できるものにするためには選択範囲の末尾の行から処理をしないといけないそうすると文字の削除や挿入による折り返し位置の変化が後の処理に影響を与えないのででもそうはなってないだから結果を維持する労力を割く必要もな「未定義の動作だと考えてしまう


20110210() 「それは仕様ですってそんなに嫌いではない発言者にその宣言を遵守する意志があるのなら言われた方はその宣言を以て即座にその仕様(と手元の実装)に依存できるった方は修正の手間がないし挙動を変えて周囲(期待と実際の違いに気付いていなかった方の集団)を騒がせるおそれもないとはいえ一般に「仕様のわけねーだろバグだよバグって言いたくなるようなものに対し「これは仕様でしょうか?ってのも嫌みったらしく聞こえそうなので控えたい何回かやってるけど

最終更: 2011-02-11T00:59+0900

[SakuraEditor] SourceForge.net Repository - [sakura-editor] Revision 1887

Fix: 検索(ールバ)を使うとプラグインコマドが実行される(2)

検索ボックスのコドをほとんどコピーした自作ツールバーボタンもやばい気がするもののCBN_SELCHANGEはツールバーボタンで処理してるんだよね処理しなかったメッセージが誤った取り扱いを受けるということなんだろうわからないよん

>>log[2008-06-04-p01] 現在適用されているファイルタイプを表示/変更するツールバーボタン


20110129()

最終更: 2011-04-09T19:20+0900

[SakuraEditor] サクラエタに複数行検索を導入する際に考慮する必要がある正規表現パターンへの細工

今のサクラエタはユーザーが入力したパターンに細工を施している>正規表現を使った検索・置換で改行の意味を LFのみから CRも含むように

サクラエタでは改行をまたいだ検索ができないけど将来できるようになると問題が生じる(その根拠は20100709p01の実験によ)

  • ^(改行文字の直後にマッチ)CR直後(かつLF直前でないことが望ましい)にマッチしないことが露見する
  • $(?<![\r\n])(?=\r|$) に置き換える現在の細工では連続する改行と改行の間にマッチできない

^(?:(?<=^|\n)(?=[\s\S])|(?<=\r)(?=[^\n])) に、$(?=\r\n?|(?<!\r)\n|(?<![\r\n])$) に置き換えるのでいいかなあ用意した入力が期待した結果になるのは確認したけど予期しない入力が予期しない結果になる可能性はやっぱりある

 ^$先読みや戻り読みを使ったパターンに置き換えることの副作用

戻り読みの中に ^$ を置けなくなる複数行検索ができるようになったときには戻り読みの中で行末を検知したくなることもあるかもしれないねでもできないね


20101015() Adobe ReaderQuick Timeをアップデトしたくないのはたまにしか起動しない Adobe Readerやたまにしか利用しない Quick Timeのために Windowsのスタトアップを遅くして欲しくないのと無効化していた FirefoxPDFプラグインをアップデト後にもう一度無効化しなければいけないのが極めて面倒だからQuick Timeはアンイールしたけど Adobe Readerとは手を切れそうにないのがつらいそれとスタトアップに Flash Playerのアップデトタスクを登録しても無駄だから再起動が必要な Windows Updateをひと月ふた月待つつもり?

最終更: 2010-10-15T10:51+0900

[SakuraEditor] Meryーカル変数の定義位置・()の使用位置に飛ぶ機能(

93 :名無しさん@お腹いっぱい。:2010/10/15(金) 01:30:28 ID:hD6Ahu8Z0 
マウスだと何が良いのかあんまりわからない気がする。 

1.マウスで文字列選択 
2.メニューで[次の文字列を検索]or [前の文字列を検索] 

がマウス操作の基本だと思うけど、Ctrl+F 同様に単語の選択が必須ではなくて 

1.検索したい文字列かその直前にカーソルを置く(マウスのダブルクリックで選択される範囲に相当) 
2.キーボードで Shift+Ctrl+↓or Shift+Ctrl+↑ 

みたいにいきなり検索&ハイライトができる。もちろん単語というか検索語句に応じて 
文字列選択はしたりしなかったりなので、必ずしも文字列を選択しなくていいという訳でもない。 

個人的には編集中に文字列をちょっと連続で参照して元の場所に戻るのが特に便利。 
直前or直後なら2アクションで参照して戻ってこられるし、連続でポンポンと参照して戻ってくるのも直感的で分かりやすいキーボード操作になる。 

次を検索[F3] では良くも悪くも、検索する文字列に縛られるのが利点ではあるものの、ちょこっと確認したいときには不便。 
というか F3 と別系統で検索が可能になるので、F3 での検索文字列を維持できるようになるのが地味に便利。 

個人的に感じているメリットはこんなところ。
テキトエMery (mEditor) part2

すげー使いたいそしてこういうことを実現できない(よね?)サクラエタのマクロに幻滅あれってただのコマド集(しかも公開を目的としていない)だしャレトの位置を知る方法が Editor.ExpandParameter("$x,$y") とかっつけ仕様過ぎきちんとしたオブジトモデルが必要だ

本日のツッコミ(4) ッコミを入れる

名無しhttp://sakura.qp.land.to/?Macro%2F%C5%EA%B9%C6%2F153

名無Wiki Macro/投稿/153がまさに相当するマクロだと思うけど 他にも関連マクロWiki Macr..

名無しVisual Studioが本元かな? 調べてみたらEmEditor Freeにも同じ動作の 次の文字列を検索(Ct..

ds14050おおまさしく 「ダブルクリックで単語ハイラとか聞いたことがあるけどあれの変種でしたね図らずも VC..


20100921()

最終更: 2017-10-13T21:42+0900

[SakuraEditor] (2ch) 選択領域の描画が反転に固定されてるのが嫌だ半透明がいいという

半透明選択 反転選択

眠たくないですか? ラスタオペレーションをセトして領域を塗りつぶすだけの操作に比べてビトマップビトを操作する手間をかける価値があるだろうWindowsでの標準的な描画方法は背景を選択領域(背景色)文字を選択領域(文字色)で塗るだけみたいだけどどうして半透明? それともさらに手間をかけて半透明の選択領域を単色からグラデーションパターンにするぐらいやるんだろうAeroGlassがそんな風に微妙なパターンを入れてるどうやったらグラデーションが表現できるのか知らんけどピクセル当たり 1トで表現できるなら GDIブラシでパターンを塗り込めておけるかも

 余談

  • 左の画像のステータスバーに文字が少ないのはタを一回非アクブにして再度アクブにしたときに消えるからバグじゃないよ
  • 選択領域の描画は CEditView::DispTextSelected()CViewSelect::DrawSelectAreaLine() の少なくとも二カ所で行われてるこの DRYゃない実装や反転の反転で元の状態に戻したりしてるのが選択領域のかすが残る度々の不具合につながってる気がするんだけど画像のエタは CViewSelect::DrawSelectAreaLine() には手を付けてない使えないはりぼて
  • 選択領域の色設定画面 「文字色が領域の色「背景色RGB各バトのα値透明度を上げていくと背景色は黒に近づいてみえる色分けするかどうかのチックが外れてるときを従来通りの反転描画に割り当てたので Windowsの標準的な描画方法を指定する方法がない

 @2010-09-23 あるいは

テキトの背景色と XORをとったときにユーザーの指定した色になるような色を使って排他的論理和をとってみたりするとどうなるだろうトラトを保ちつつ選択領域の全体的な色をコトロールできるのだろ


ってみた

//HBRUSH hBrush    = ::CreateSolidBrush( SELECTEDAREA_RGB );
HBRUSH hBrush    = ::CreateSolidBrush( selColorSetting.GetBackColor() ^ CTypeSupport(this, COLORIDX_TEXT).GetBackColor() ); // assuming SELECTEDAREA_ROP2 == XOR

わりと文字がつぶれるつぶれないような色を選ぶと上左の画像のような淡い色になってしまいったら半透明でいいじゃない? 変更が一行で済むのだけが利点半透明の方はざっと抜き出してもこんなに

CreateCompatibleDC( hdc );
CreateCompatibleBitmap( hdc, rcClip.right - rcClip.left, rcClip.bottom - rcClip.top );
SelectObject( hdcMem, hbmpSelected );
BitBlt( hdcMem, 0, 0, rcClip.right - rcClip.left, rcClip.bottom - rcClip.top, hdc, rcClip.left, rcClip.top, SRCCOPY );
GetObject( hbmpSelected, sizeof bmpSelected, &bmpSelected );
GetDIBits( hdcMem, hbmpSelected, 0, bmpSelected.bmHeight, pBits, &bmpinfo, DIB_RGB_COLORS );
for (RGBQUAD* pQuad = pBits; pQuad < pBits + bmpSelected.bmWidth * copiedLines; ++pQuad)
SetDIBits( hdcMem, hbmpSelected, 0, copiedLines, pBits, &bmpinfo, DIB_RGB_COLORS );
BitBlt( hdc, rcClip.left, rcClip.top, rcClip.right - rcClip.left, rcClip.bottom - rcClip.top, hdcMem, 0, 0, SRCCOPY );
DeleteObject( hbmpSelected );
DeleteDC( hdcMem );

GetDIBits, for, SetDIBitsあたりがやばいかんじ(速度的に)


 @2010-09-25

半透明処理にすると反転の反転で元通りみたいなことができなくなるのだよね反転処理前のビトマップを保存しておかなければ戻せないあと矩形選択で行っていたージョンを結合して差分をとって PaintRgn一発で選択解除と選択描画のできあがりということができない矩形選択なんて四角を一個塗るだけで済むはずのものなのに……クライアト領域をいくつかのレイヤーに分けたいなあ背景<文字の後ろ(罫線など)<文字<文字の前(アンダーライン対括弧強調など)<選択領域<ャレト みたいにZ座標でなく更新頻度でわけるのもあり半透明にすると他にも左に選択範囲をのばしていくとキャレトの残像が次々増えていく問題くじけそうきままにやるけど


 @2010-09-26 transparent_selection(trunk2@1825).patch (21.8KiB)

非効率的なのを承知で CViewSelect::DrawSelectAreaLine() で行っていた処理を CEditView::OnPaint() に委譲したそれが選択描画を取り消すのに一番簡単だったからVistaだと確認できないけど古い Windowsだとフリッカーがひどいかもしれない気付いたのは検索を行ったときにカーソル行アンダーラインがちらつくことが増えたこと範囲の拡大・縮小も遅い。<追記@2010-10-15>再描画する領域を最小限にする努力が必要でも重なった二つの矩形が作る領域をどう扱ったものか(9つに分割して左上↘右下左下↗右上左上↖右下左下↙右上で網羅できるものなのかっと簡単にできるのか)悩み中。</追記>


 @2010-10-03 2chスレ見て

選択色指定(固定色or半透明)のお試し版がすでにあるとなんだよもうース読も

725 :名無しさん@お腹いっぱい。:2010/10/03(日) 03:45:30 ID:FVNsnn5V0
ちなみに、「下の全部」というタイトルで以下のような物も公開されている。
> 状態:アルファ
> bin/pp-disable: skrw_ext13_bgimg_100929.zip Unicode版1.6.5.0 base r1827
> bin/pp-enable: skrw_ext13_bgimgpp_100929_pp.zip Unicode版1.6.5.0 base r1827
> 背景テストデータとini: bgimage 111KB
> diff:skrw_ext12_to_ext13bgimgpp100929.zip 78KB ext12からの差分,テスト未整理コードあり
> ext+背景表示+プロポーショナル
> ClaerType対策に選択文字列の作画表示の実装を追加。OFF→従来のように反転,色指定→固定色,文字色=背景色→元の色と20%で色混合)で設定
> 改行文字の色指定を変更。ベース色<改行の指定色<検索色<選択色。
> pp-enableのほうだけプロポーショナルが使えます。その分動作はあやしいです。
>
> r1827/100929/ext13+bgimg v0.4+ppfont v0.2(バージョン情報ではext12になってます)
> 選択色指定:デフォルトで色指定になっています。色分けをOFFにすると戻ります。0幅表示未対応
> ・[ext/skrw_search_fast_v0_0]rev1827の大文字小文字変換対応。skr_toupperに切替
> ・[ext]DIFFのデフォルト設定色のRとBが反対だった(iniはBGR順でした)
サクラエタふぁんくらぶ part12

プロポーショナルフトが指定できるとメイリオが選べて嬉しい次は Operaのようにブロック単位でフトを指定したい英字は Consolas日本語はメイリオひらがなは……カタカナは……というように


プロポーショナルフト関連のあやしい動作を一つ発見 >skrw_ext13_bgimgpp_100929 矩形選択で文字のないところを右側に範囲を拡大していくとキャレトが 1pixelずつくらい移動するんだけどこのとき画面が横にスクロールするとルーラーが逆行する7って15進むという具合につじつまは合うみたいだけど改行の後ろの選択範囲の描画もずれる


ース読んだ選択範囲の半透明処理って「テキ「コメURLなどなどの文字の色と背景色をずらすだけでできたらしいなんだよもう(二度目)

CRLFークがはみだすことの対策もあった3ピクセル出てるらしい上の画像ではみだしを確認できるけどっともないもんね改行マークが非表示だと選択範囲が右にちっとはみ出して見えるのもみっともないと思ってるんだけどどうだろう

 ェイズとレイヤWebKitの例(@2014-01-18)

WEB+DB PRESS Vol.54 - WebKit Quest 第5回を読んでるェイズはレイヤーより細かい区分

paint()メソドを呼び出す側は何度もpaint()を呼び出します。その際指定されるPaintPhaseは背景から前景へ推移します。

WebKitはフーズの数だけ何度も Renderツリトラバースし各フーズを重ね描きすることでページの描画を行うので(図5

enum PaintPhaseのメンバーはこれで全部ではないけどこんなかんじ

  • PaintPhaseBlockBackground
  • PaintPhaseFloat
  • PaintPhaseForeground
  • PaintPhaseSelection
  • PaintPhaseOutline

レイヤーが必要な場面はこれより大局的な

  • z-indexが指定されたとき
  • transformが指定されて座標変換が必要なとき
  • opacityが指定されて透過するとき
  • など

タ領域の描画はフェイズで十分そうね

本日のツッコミ(2) ッコミを入れる

Mocaいつもお世話になってます。 色の合成は指定色で選択作画を書く→ここをみる→混ぜればできるのを思い出して追加の順だ..

ds14050後半の意味がわからないと思ったらANSI版では改行マークの表示・非表示に関係なく改行マークの背景色が塗られていた..


20100915()

最終更: 2013-01-11T22:45+0900

[SakuraEditor] 拡張子のないファイルにもタイプ別設定を自動適用する

どこかに書いた気がするのに見つからないのでもう一度

サクラエタは拡張子を見てファイルの種類を区別し色分けルールやタブ幅折り返しルールなどを使い分けるが拡張子がない makefileChangeLogはみん「基本設定になってしまう

 1: 「拡張子ではなくファイル名の末尾に対するマッチングでファイルタイプを区別する

ァイル名の末尾が .rbったら Ruby.jsったら JavaScriptという具合ァイル名の末尾(といいつつ全体)makefileったら makefile.htaccessったら Apache HTTPD設定ファイル

ところがサクラエタが設定として持ってる判別のための拡張子リトが

c,cpp,cxx,cc,cp,c++,h,hpp,hxx,hh,hp,h++,rc,hm

という具合にト省略必須「スペースorカンマorセミコロン区切り(ヘルプによればカンマ区切りらしいが,」と.が紛らわしいのでスペース区切りにするのがいいよ)のリトなもんでこの案は没広まってしまト省略拡張子リトに対処することができないので

 2(): 「拡張子がないときはファイル名を拡張子として扱う

makefile.makefileだとみなしてファイルタイプを判別するということ

ッチ> guess_filetype_of_extlessfile.rev2.patch (0.9KiB)

JSという名前のファイルが拡張子が .jsJavaScriptァイルだとみなされることになるけど気にしないよね

 @2012-11-04 moca_skrさんによるパッチ

>>SourceForge.net: Sakura Editor: Detail: 3581841 - タイプ別設定の拡張子を二重・なしにも対応

0 < _tcslen が使われてないところが好zero fill(""での初期化)するかしないかに強い意見はない結局呼び出した関数が null-terminateするかギリギリまで書き込むかに依存するのだから自分に影響がありそうな部分にコメトした(試してないので勘違いかも)


杞憂だった恥ずかしGetDocumentTypeOfExtはパッチだけでは全体がわからないから元のファイルにあたってみてその後でパッチの追加部分に戻ってくるのを忘れてた(という言い訳)


GetDocumentTypeOfPathでごちゃごちゃせずに引数として渡されたファイルパス(pszFilePath)をたどって最後のパスセパレータの次の位置を指すポインタを GetDocumentTypeOfExtに渡すだけにしたらすっきりするのにと思ったa...............................................b.txtみたいなファイルでスタックオーバーフローを起こすだろう


@2012-11-06っと臆病になってここに書くけど二重拡張子探索のためにファイル名からピリドを探索するときに _tcschr を使ってるけど _tcsrchr ではないのかな_tcschr を使ってるならすぐ上に書いたようにバッファの確保も _tsplitpathも省いて _tcsrchr(pszFilePath, TEXT('\\'))で得たポインタ+1GetDocumentTypeOfExtに渡すのと似た結果になりそうだ

_tcsrchrを使うには表(Shift_JISだと2バト目が\と同じ)のような文字対策が必要で_tsplitpathはそういうのも隠蔽してくれてるのかなだとしたら似た結果にはならない

再度考え直し_tcsrchr_mbsrchr にマップされる可能性_mbsrchr はうまくやってくれるのだろう

こんなんだからこそ JScriptでパスを扱うときは必ず

new ActiveXObject("Scripting.FileSystemObject").GetFileName
new ActiveXObject("Scripting.FileSystemObject").BuildPath

を使って自分で文字列処理をしないのだけど_tsplitpath が拡張子付きのファイル名を返してくれなかったりするから自前でやるはめにCだから固定長バッファが前提でその長さが問題になってくるからかもしれないがケチるんだったらポインタで返してくれたらいいのに引数のここからここまでがファイル名ですって正規化したいから無理だって?


 @2012-11-13

..............................................................................................................................................................................................................................................t

というファイル名をtrunk2@2457 + skr_imp_ext_ex.patch試してみたけれどスタックオーバーフローは起こせませんでしたピリドの数よりちっと少ないくらい GetDocumentTypeOfExtが呼ばれる(二重拡張子でなく多重拡張子をテトしてる)のは確認できたけれど

 @2013-01-11 コミトされています。

http://sourceforge.net/p/sakura-editor/code/2565/

そういう機能が欲しいと思ったから自分でも改造してたんだし喜ばしいことなんだけど自分でビドするサクラエタに反映するとコンフリト必至なのが憂鬱

 RUNESOFTのイーラがーザーがイール先を変更したときにレジトリに記録するイールフォルダ末尾に \ を付け忘れてしまいおそらくファイル名を連結するときに \ を補わなかったのだろうームの起動に失敗するというポカをやらかしていた


20100907()

最終更: 2010-09-15T20:40+0900

[SakuraEditor][正規表現] 検索置換

Command_REPLACE(置換)Command_REPLACE_ALL(すべて置換)Command_SEARCH_NEXT(下検索)を呼ぶのをやめたい連携手段がレイアト座標を基にした選択範囲しかなく一文字で表現される CRLFLFだけがマッチしたときに情報が欠落するしCommand_SEARCH_NEXTが持つ検索以外の事前・事後処理が無駄になるし正規表現検索が BMatch(), BSubst(検索&置換)の計二回行われるのも無駄

wchar_t単位で検索を行う CSearchAgent::SearchWord検索結果をレイアト座標に変換する際の誤差(前述)を考慮してマッチ範囲を拡大し結果を不正確なものにするのは誤りだと思うそれより上の層でこれを呼び出している CLayoutMgr::SearchWordがその配慮を行うべきでは

 ったらいい操作

Match
対象文字列の対象範囲全体がパターンに一致するか調べる
Search
対象文字列の対象範囲からパターンに一致する部分を探す。
Replace
対象文字列の対象範囲からパターンに一致する部分を探し与えられたフーマトの文字列に置き換えた文字列を返す。(返るのは対象文字列の対象範囲に相当する文字)
Expand
MatchSearchの結果を用いッチ全体($0)を与えられたフーマトの文字列に置き換えた文字列を返す。
パターン
BREGEXP.DLLm/pattern/flags/pattern/replace/flag も同じ一つのパターンとして扱うので検索用のパターンと置換用のパターンに互換性がないそうではなく、Search(Compile("pattern", flag), "target", startindex), Replace(Compile("pattern", flag), "target", startIndex, "replace")ったら良かった( "pattern""target""replace" は実際は二つの引数で表)

bregonig.dllbregexp.dllを使いながらパターンの共通化や Expandの不足に対処するにはどうする自分で Expandを実装しdllが用意した置換機能(置換パターン)を使わないで済ませるでもねえ実装の数だけ仕様がある状態を避けたいから Expand機能をライブラリに用意して欲しいわけで(置換文字列の $$$に展開されなかったり\1 が展開されたり$1が展開されなかったり色々あるんよ)


 @2010-09-10 悪夢のよう「クリップボドから貼り付ける置換オプション(本当は矩形選択)

  • CRLFCRだけや LFだけをクリップボドの内容で置き換えることができない
  • 正規表現検索のとき検索始点(終点)挿入オプションがきかない
  • クリップボドの形式が矩形テキトだったときに検索条件によっては無限ループ

    例えばクリップボドに

    789
    456
    123

    という 39文字(改行文字はない)がおさめられているときッチと置き換えられるのは 789 であり、456 123 はそれぞれ次行次々行に挿入されるつまり、456 123 はこれから検索対象になるということだ検索条件が \d{3}ったり ^ったり矩形テキトの二行目以降にマッチするものだったら無限ループ

置換操作が二階層潜らないとロジック単位にならないというのも悩みの種検索はロジック単位で行えてるのにそれをレイアト単位に変換してそれがさらにロジック単位に変換されて一対一対応じゃないからごにょごにょしないと思い通りに置換されなくて

 @2010-09-15

どうして最上層のレイアトを基準にして文字列処理を行わなければいけない文書(wchar_t列としておく)の変更を LayoutMgrに通知する仕組みを整備するのを怠ってLayoutMgrを通して文書の変更を行うことで通知を不要にしていることが背景にあるのでは? GUIを通しての文字列操作に限ってはそれで十分だからそうなるのも仕方ないし必要に迫られた人間(俺とか)がより汎用的な手段を整備せずにダック*に頼る方が罪は重いかも

* 挿入位置・置換範囲を文字レイアト境界まで拡大して入・置換文字列も同じだけ拡張する


20100830()

最終更: 2010-08-30T23:07+0900

[SakuraEditor] 2ch. 正規表現キーワ

規制で書き込めないのでここで

583 :名無しさん@お腹いっぱい。:2010/08/25(水) 15:31:52 ID:wtW19SUb0
    頭に**がある行はコメント行として緑色にする
    という正規表現での色分けと
    ABCという言葉は赤色にする
    という正規表現の色分けを同時にする方法はありますか? 

    (省略)

587 :名無しさん@お腹いっぱい。:2010/08/30(月) 14:18:00 ID:yI6qoQsb0
    >>584
    正規表現キーワードって、設定の上下に優先度あるらしいけど(ヘルプ情報)、結局の所、先に検索で引っかかった方が優先されるらしいよ。
    wiki でバグじゃないかと報告されて、誰かが仕様じゃボケぇ、なんもおかしなことないわ! と切れてた。

    個人的には、キーワードに優先順位があるならそれに準拠して欲しいと思うんだけどね。
    なんていうか、二つの仕事を割り振られたA君が優先順位を決めて作業した結果、端から結果だけ見ると作業をひとつしか終えていないように見えるんだよね。
    言葉の意味をはき違えているように思えて、そこが気持ち悪い。 
サクラエタふぁんくらぶ part12

言及されてるバグ報告ってのはこれ>>BugReport/60 - SakuraEditorWiki

587自分の想定した動作モデル以外を認めない姿勢がなんだかなあいわ「優先順位があるならそれに準拠して欲しいいわ「言葉の意味をはき違えているように思え()バグ報告者の方は単なる理解不足だしあんなに噛みつかれたことに同情するけど

優先順位は確かに存在してる使われ方が 587の期待と違うだけでたとえに沿って説明すると仕事は最初から一つしかない「正規表現キーワドの色分けこれひとつ何をキーワドとみなすかの判断基準として複数の正規表現が存在してるだ複数の正規表現のマッチが重なったときに最も左から始まり最も上にあるパターンが優先される最も左が優先されるのは正規表現キーワドを含む色分け要素(文字列コメURLなど)間の順序付けにも利用されてる大原則なのでわざわざヘルプに書く必要を感じなかったんでしょうよ上の方のパターンが優先されるというのはコメトなど他の色分けより正規表現キーワドの色分けが優先される(これもヘルプに書いてある)と言うときと全く同じ意味で使われている不自然なことはない

「先に検索で引っかかった方が優先されるらしいよというのは嘘「先に(時間的な前後)ではな「前の方で(空間的な前後)なら間違いではない

バグ報告した人(たぶん 587)の希望する動作を強調キーワドに置き換えるとINSELECTEXISTSJOINというのを強調キーワ1,2,3,4にしてそれぞれ別の色に色分けするようにしている強調キーワ1は強調キーワ4より優先されるはずだから JOINの中の INが色分けされないのはおかしいという内容になるKeywordの中に別の Keywordがあるなんて想定はない方が普通でしょう

7195System_UPJさんのように動作を理解した上で使いこなしてる人もいるヘルプには改善の余地があるとしても今の動作はバグではないし変更されると困る人が(正規表現キーワドの利用者の中ではたぶん)大多数存在しない別の機能を要望していることに気付くべき

583へのスとして用意したんで規制された文章ものせとく

Wikiでも似たような要望がバグとして報告されてたけど、よくある要望なんかね。
手持ちの案はこげな感じ。
1.キャブチャ部分に別の色を指定できるようにする。
2.従属的な正規表現キーワードを指定できるようにしてキーワード内キーワードを
  色分けできるようにする。
3.萌ディタのように色分けに状態を持たせる。
実装の難易度   1=2<3
設定の面倒さ   1=2<3
色分けの自由度 1<2<3

20100730()

最終更: 2012-11-01T13:41+0900

[SakuraEditor][SHJS][Ruby] Ruby%リテラルの色分けを修正

説明が面倒なのと誰も知りたくないだろうから適当に備忘のためだけに

  1. まさか %{literal}literal部分で \{\} を使う人間がいるとは思わなかった(違う種類の括弧を使えばいいじゃない開閉の釣り合いがとれてれば同じ種類の括弧でもエスケープ不要だ)
  2. だのに Ruby1.9rake.rbにこんなパターンが……

    %r{[*?\[\{]}
  3. エスケープされた { 2のはの考慮がないから閉じ括弧が足りないとしてファイル末尾まで正規表現として色分けされてしまう
  4. ょちょちょいと .rkw2ァイルにエスケープ文字を追加してサクラエタに対する修正は完了
  5. SHJSlang/sh_ruby.js(自作)への対応も同じですむはずが入力の末尾に達した時点で意図せぬバトラックが発動し閉じ括弧が足りなくても色分けが適当な閉じ括弧で終了してしまう現象に遭遇これは自業自得(20090808p01)なので自分でなんとかせねば間違いが埋没してしまうのはよろしくない
  6. こうした

    %r{余分な開き括弧{。間違いはインタープリタを通す前から目立つように}

2のは Rubyインタープリタに対するエスケープと同時に正規表現パターンとしてのエスケープですよ%r[\[]/\[/ が同じパターンになって%r[[]Rubyのシンタックスエラ/[/ がパターンのコンパイルエラーになるんだから(ruby 1.8.7 (2010-01-10 patchlevel 249) [i386-mswin32] / ruby 1.9.1p0 (2009-01-30 revision 21907) [i386-mswin32])


20100709() Windows Confidential: The Third Rail of Keyboard Shortcuts | TechNet Magazineを読んでの違和感レイモド チェンは Win+Eがどこを開くかの話をしているおれは Win+Eがどこを開くかなんて確かめたことがなくWindows Explorer――フォルダを表示するときに利用される簡易表示ではなくフォルダツリーが付いた正式版――を起動するためのシトカトだと思っていたそんでだから使ってない

最終更: 2014-01-02T18:04+0900

[SakuraEditor][正規表現] 「鬼車と bregonighitEnd(20100531p01)機能が搭載されることを願う他力本願日記

なんてことをこの日記の冒頭に掲げたもんだから自分でやってみた(どういうこと?)

 更新履歴

rev3 (2010-09-05, そのうち書)
(サクラエ) 複数行検索を利用した複数行置換を実装(複数行全置換はまだ似たようなコドだし必要なのは手間だけだけ)
rev2.1 (2011-01-29)
(サクラエ) バグ修正複数行検索モドでマッチ位置をバッファ内インデックスから(,)に変換する際にミスった検索結果が表示されることがあった
rev2 (2010-08-27)
(サクラエ) 複数行検索モド実装(正規表現を使った下検索の50MiB制限あり制限による探索打ち切り・ッチ範囲切り上げの通知な)
トバイナリ+変更点(test_multiine_search.zip)
rev1
() 普通のマッチなしと入力次第でマッチする可能性のあるマッチなしに異なる戻り値を割り当てた
(bregonig) 入力不足のときに BMatchの戻り値を 0(正常終了,ッチなし)にしてエラーメッセージで入力延長によるマッチ成功の可能性を伝えている
(サクラエ) 下検索での入力不足によるマッチ失敗をステータスバーで通知

 bregonig

既存アプリに影響があるので良くないけどbregonigへの暫定的な変更はこう

 regexec_onig(bregonig.cpp)
	} else {
		/* ERROR */
		onig_err_to_bregexp_msg(err_code, NULL, msg);
-		return -1;
+		return err_code == ONIG_MISMATCH_INPUTSHORTAGE ? 0 : -1;
	}

入力が足りなくてマッチしなかったときはエラーメッセージをセトするけど戻り値は負数(エラ)ではなく 0(ッチなし)

 鬼車

鬼車(5.9.2)K.Takata's software : bregonig.dllで手に入る onig-5.9.2-mod.diffを適用したものをさらに変更ッチに失敗したときのエラーの種類で hitendしたかどうかを伝えるゃんと動くのか非常にあやしい代物TODOもいっぱいある

  • 特定のパターンのパターンに向けた最適化を無効にしている(そこまで手が回らな)
  • backward searchに対していつ hitendフラグを立てていいのかわからない(ので未対)
  • "aaaaa\n" という文字列から [a\r\n]+a というパターンを検索したときにバトラックにより "aaaaa" がマッチするわけだがその次の行にも "aaaa.." という文字が続いていた場合は……一応マッチは見つかっているが hitendフラグも立てたい
  • [\w\W\s\S] というようなパターンでメタ文字の登場順([\W\S\w\s]とか)に 依存しておかしな結果になる(もちろん俺のミス原因は解らな)

っぱり鬼車は手に負えないかも

 サクラエ

なんのことはない影響を受ける既存アプリにはサクラエタが含まれている正規表現のコンパイルエラーと入力不足によるマッチなしを区別するためにちっと変更した

 複数行検索モ

一行検索(従来動作)してみてッチが行末まで続いていたり次の行の内容次第でマッチが成功に変わりそうなときはとりあえず二行ぶん検索してみるそれでも状況が同じなら 50MiBのバッファを埋めてから三度目の検索を行う50MiBって大きすぎるだろう大きさの問題だろうかか

実装は CSearchAgent::SearchWord()これって単語検索専用のメソドではなかったのですよ。CGrepAgentもこれを利用したらよかった

ッファの実体は std::wstring文字列を比較するにも wmemcmpなりを使おうとして結局 std::wstring("hoge") == L"hoge" を使ったへたれなのでstr系のライブラリ関数は恐ろしくて毎回すぐに投げ出します。(あれを使いこなせる人は VBPHPも使いこなせると思うんです)

 TODO
  • 上検索
  • 検索語ハイラトの処理がたぶん一行ごとに行われている一行ずつ進みながら複数行を対象に検索を行ってるってわ無駄だし目に見えて遅い
  • ッファ長の制限によりッチ範囲が途中で切られたりマッチの探索が打ち切られたりしても何も言わないのをなんと(制限をなくすかメッセージで)
  • SourceForge.net: Sakura Editor: Detail: 2309002 - 正規表現による複数行検索対(簡易版のコメトを見ると検索語ハイラトのほか「すべて置換にもパッチが必要そうッチを流し読みしてたら BookmarkManager(::MarkSearchWord)までが GrepAgentが持ってたような検索の勝手実装を持ってるらしSearchAgentを使ってよね(いやSearchAgentは当時なかったんだ)
  • (複数行)検索にマッチしたなかでも最初の行がマッチに含まれているか含まれていないかというのは区別する価値があるサクラエタの既存の実装は行指向が強いだろうから「マッチした(ただし先のほうの行で)ということを勘違いしかねない(SearchAgentや選択範囲にはそういう指向がないから運良く複数行検索が自然に実装できただ)
  • (@2011-08-01) [\s\S]*$ というパターン最後の行の末尾までマッチして欲しいのに一行目の改行直前で止まってしまうッチに成功したときの hitEndフラグの扱い

 @2010-07-12 鬼車 for Java

hitEnd()の実装の参考になるか?と思ったけどそうもいかなそう

Revision  74 hitEnd()の実装(但し仕様は満たしていない)。
Revision  85 useAnchoringBounds()及びuseTransparentBounds()に対応。→hitEnd()の実装を修正。
Revision 103 hitEnd()に@Deprecatedを追加。
    /**
     * This method is experimentation phase, and implementation has not been completed yet.
     * @return
     * @deprecated
     */
    @Deprecated
    public boolean hitEnd() {
        return (hasAnchoringBounds ? (range == region.end(0)) : (input.length() == end()));
    }
Matcher.java(rev166)

hasAnchoringBoundsが設定されてる場合は無視するとしてそうでないときは入力の長さとマッチの末尾(end())が一致してることをテトしてるだけに見えるそれって hitEnd()とは違うよね。531日の日記文字列 aa に対してパターン aa を適用したときに hitEnd()falseになった事例を引用した

そうそうこれこそが hitEnd()の使い道 >Check if string is a prefix of a Javascript RegExp - Stack Overflow コメトの最後に見たことのある名前が☺


 @2010-07-12 PCRE

PCRE(現在 ver. 8.10)は戻り読みも再帰も(パターンのコンパイル時の)改行指定オプションもスキャナー的に使うための hitEnd()のような機能(read pcrepartial)およそ欲しいものをすべて備えている悪名高いスタックオーバーフローにも1.スタック使用量を減らす。2.代替メモリ確保関数を使う(汎用ゆえに遅いmalloc/freeか自作)3.pcre_exec()の代わりに pcre_dfa_exec()を使うみたいな各種対策があるらしい