全置換が途中で終了するNo.08356
colder さん 14/09/01 10:16
 
colderです

ver8.40以降、全置換で変換モジュールを呼び出しているとき、
変換モジュールがNULLを返してくるとそれ以降の置換が行なわれなっています。
この動作変更は意図的なものでしょうか?

環境 win7 秀丸 8.41β6

[ ]
RE:08356 全置換が途中で終了するNo.08357
秀丸担当 さん 14/09/01 13:29
 

この動作はV8.40で確かに変更がありました。

V8.40より前では、変換モジュールによってダイアログが出る場合、全置換が終
わるまで、際限無くダイアログが出続けるという問題がありました。
例えば置換後の文字列で\(1,Sort)として、ソートダイアログを出すと、全置換
で何度も出続け、キャンセルしてもキャンセルされるのは1つだけで、何度も出
ていました。

V8.40では2点修正があり、1つはNULL(キャンセル)のとき中断するということ
で、もう一つは、キー操作の記録と再生のように、最初に決まったパラメータを
再利用するようにしました。
例えば\(1,Sort)として、ダイアログでOKすると、2つ目以降は
\(1,Sort,HmFilter,"101000000000000\"00")
といった感じにパラメータが付いたものとしてダイアログが出ずに置換されます。

関連する以前の修正として、V8.13β9の頃に、NULLが返った場合は削除されてい
たのが、削除せずにそのままにする修正がありました。
[編集]→[変換]による操作で、NULL時は何もしないという結果に合わせるもので
した。

[ ]
RE:08357 全置換が途中で終了するNo.08358
colder さん 14/09/01 16:11
 
colderです

>V8.40では2点修正があり、1つはNULL(キャンセル)のとき中断するということ
>で、もう一つは、キー操作の記録と再生のように、最初に決まったパラメータを
>再利用するようにしました。
>例えば\(1,Sort)として、ダイアログでOKすると、2つ目以降は
>\(1,Sort,HmFilter,"101000000000000\"00")
>といった感じにパラメータが付いたものとしてダイアログが出ずに置換されます。

ということは、変換モジュールに渡されたテキストが変換モジュール側で変換する必
要がない場合でも、NULLを返さず、テキストをそのままコピーして返す必要があると
いうことでしょうか?

それともうひとつ、1回目の置換で変換モジュールからNULLが返ってきたとき、検索
パターンが見つからなかったという不適切なメッセージが表示されます。

[ ]
RE:08358 全置換が途中で終了するNo.08359
秀丸担当 さん 14/09/01 17:05
 

>ということは、変換モジュールに渡されたテキストが変換モジュール側で変換する必
>要がない場合でも、NULLを返さず、テキストをそのままコピーして返す必要があると
>いうことでしょうか?

いまのところそれしか方法は無いということになりますが、既にそうやって使わ
れている何かがあるとしたら、互換性も考えなくてはいけないと思います。

とはいえ、ダイアログが何度も出る問題もあるので、この仕様のまま両立するの
は難しそうです。
ダイアログの問題は、検索ダイアログから複数選択して、[編集]→[変換]を行う
ことでけっこう簡単に問題が起きてしまいます。

今後なんとかするとすれば、変換モジュールに新たな仕様を設けるということは
考えらえると思いますが、どうでしょうか。

>それともうひとつ、1回目の置換で変換モジュールからNULLが返ってきたとき、検索
>パターンが見つからなかったという不適切なメッセージが表示されます。

確かにメッセージの内容は不適切でした。
修正させていただきます。

[ ]
RE:08359 全置換が途中で終了するNo.08360
colder さん 14/09/01 22:35
 
colderです
回答ありがとうございます

>>ということは、変換モジュールに渡されたテキストが変換モジュール側で変換する必
>>要がない場合でも、NULLを返さず、テキストをそのままコピーして返す必要があると
>>いうことでしょうか?
>
>いまのところそれしか方法は無いということになりますが、既にそうやって使わ
>れている何かがあるとしたら、互換性も考えなくてはいけないと思います。
現状、問題となる変換モジュールは個人で使っている自作のものだけなので変換モジ
ュールの方を修正します。

>とはいえ、ダイアログが何度も出る問題もあるので、この仕様のまま両立するの
>は難しそうです。
>ダイアログの問題は、検索ダイアログから複数選択して、[編集]→[変換]を行う
>ことでけっこう簡単に問題が起きてしまいます。
>
>今後なんとかするとすれば、変換モジュールに新たな仕様を設けるということは
>考えらえると思いますが、どうでしょうか。

これは確かに問題なので、自作の変換モジュール(http://hide.maruo.co.jp/lib/hmc
onv/ultiv125.html)と検索マクロ(http://hide.maruo.co.jp/lib/macro/asearchv21.
html)の組み合わせに限り、パラメータ付きの変換モジュールを呼び出す置換パター
ンを簡単に書ける仕組みを作っちゃいました。

[ ]
RE:08360 全置換が途中で終了するNo.08361
秀丸担当 さん 14/09/02 10:31
 

>現状、問題となる変換モジュールは個人で使っている自作のものだけなので変換モジ
>ュールの方を修正します。

そうでしたか。
すみませんが、現状ではそうしてもらえると助かります。

>これは確かに問題なので、自作の変換モジュール(http://hide.maruo.co.jp/lib/hmc
>onv/ultiv125.html)と検索マクロ(http://hide.maruo.co.jp/lib/macro/asearchv21.
>html)の組み合わせに限り、パラメータ付きの変換モジュールを呼び出す置換パター
>ンを簡単に書ける仕組みを作っちゃいました。

このマクロと変換モジュールは相当凝っていてすごいですね。
NULLで置換しないか、複製したものを返すかの違いは、処理速度ということにな
りますが、もし必要であれば変換モジュールの呼び出し方の新しい仕様も考えま
す。

[ ]