強調定義時動作異常No.11549
WIZ さん 02/03/11 14:51
 
WIZです。こちらでは始めまして。

先日、秀丸を 3.13 から 3.15 にUPしました。
その時、以下の様な強調の定義を行ったのですが、それ以降、600行
30KB〜40KB程度のテキストファイルを編集している際に、頻繁なフ
リーズや開いてすぐ終了を行うとアプリケーション例外が発生するよ
うになりました。単純に、「」『』()<>≪≫【】の入れ子を、対
になっていると言う前提条件で、括弧の種類に応じて色分けしている
だけなのですが、定義の内容が悪いのでしょうか? チェックディス
クも再度かけてみようと思っていますが、他に確認する事はあるので
しょうか?

例外発生時の主な操作
・正規表現による文字列の検索を数回連続で繰り返した場合
・ファイルの最後まで移動
・秀丸を終了する
 ・すぐに終了にした場合
 ・正規表現による検索実行後に終了した場合

WindowsNT4.0ServerSP6a
Internet Explorer 5.5SP2
秀丸3.08/3.13./3.15


--> 動作不安定にならなかった強調定義の内容 <-----------------------
49,[「|『].*[』|」]
113,(.*)
241,[≪|<].*[>|≫]
177,【.*】
--> 動作不安定になった強調定義の内容 <-----------------------------
49,「+[^「|『|(|【|<|≪|≫|>|】|)|』|」]*
49,[^「|『|(|【|<|≪|≫|>|】|)|』|」]*」+
49,『+[^「|『|(|【|<|≪|≫|>|】|)|』|」]*
49,[^「|『|(|【|<|≪|≫|>|】|)|』|」]*』+
113,(+[^「|『|(|【|<|≪|≫|>|】|)|』|」]*
113,[^「|『|(|【|<|≪|≫|>|】|)|』|」]*)+
241,<+[^「|『|(|【|<|≪|≫|>|】|)|』|」]*
241,[^「|『|(|【|<|≪|≫|>|】|)|』|」]*>+
241,≪+[^「|『|(|【|<|≪|≫|>|】|)|』|」]*
241,[「|『|(|【|<|≪|≫|>|】|)|』|」]*≫+
177,【+[^「|『|(|【|<|≪|≫|>|】|)|』|」]*
177,[^「|『|(|【|<|≪|≫|>|】|)|』|」]*】+
-----------------------------------------------------------------


[ ]
RE:11549 強調定義時動作異常No.11551
秀丸担当 さん 02/03/11 18:16
 
>その時、以下の様な強調の定義を行ったのですが、それ以降、600行
>30KB〜40KB程度のテキストファイルを編集している際に、頻繁なフ
>リーズや開いてすぐ終了を行うとアプリケーション例外が発生するよ
>うになりました。単純に、「」『』()<>≪≫【】の入れ子を、対
>になっていると言う前提条件で、括弧の種類に応じて色分けしている
>だけなのですが、定義の内容が悪いのでしょうか? チェックディス
>クも再度かけてみようと思っていますが、他に確認する事はあるので
>しょうか?

いろいろ試してみたところ、強調表示に該当する行で、一行が長い行
で動作が遅くなり、死んでしまうことが確認できました。
正規表現で「*」を使っていて非常に長い文字がマッチするようなとき
に問題が起きているようです。
とりあえず、jre32.dllをbregifとbregexpに入れ替えると起きなく
なりましたが、それでも非常に遅かったです。
秀丸の処理で改善できるかもしれないので、調査しておきます。

[ ]
RE:11551 強調定義時動作異常No.11552
WIZ さん 02/03/12 00:15
 
秀丸担当 さん、こん○○は

>いろいろ試してみたところ、強調表示に該当する行で、一行が長い行
>で動作が遅くなり、死んでしまうことが確認できました。
>正規表現で「*」を使っていて非常に長い文字がマッチするようなとき
>に問題が起きているようです。
言われてみると、確かに、全角200文字ぐらいがヒットすると遅くなって
いるみたいです。この条件に一致するファイルだけのようです。普通、
こんなに長い条件をヒットさせる事は少ないんでしょうね。

>とりあえず、jre32.dllをbregifとbregexpに入れ替えると起きなく
>なりましたが、それでも非常に遅かったです。
>秀丸の処理で改善できるかもしれないので、調査しておきます。
回避方法はあるようなので、その方法を使わせてもらいます。
もし、秀丸側で対処できるようであれば、お願いします。遅くても落ちな
いようになれば嬉しいです。

[ ]
RE:11552 強調定義時動作異常No.11554
ENCODINGSHIFTJIS さん 02/03/12 14:20
 
補足します。
>こんなに長い条件をヒットさせる事は少ないんでしょうね。
と 正規表現マッチ動作の複合的な現象と 思います。

aaaaaaaa......b  形のマッチが入っていますから
オーダー(位数)が 2 になるのでしょう。例えば  )  では
*++++++)
-*+++++)
--*++++)
---*+++)
----*++)
-----*+)
------*)
の全文字位置でマッチが成立し、着色動作が毎回、起きるのでは?
(操作のまとめ規約化は高度な処理が必要です)

対策:
●幅ゼロマッチ(後読み・先読み)のできる正規表現を使って
頭の文字を限定する。
●頭の文字を限定して、それを着色範囲から除外できる指定を
秀丸に要求する。
のどちらか、でしょう。

>・・・・・・」  の時の  > の着色をあきらめる。(イージーな方法)

さらに詳しくは、正規表現マニアのバイブル、オーライリー社発行の
「詳説:正規表現」でも立ち読みします。











>
>>とりあえず、jre32.dllをbregifとbregexpに入れ替えると起きなく
>>なりましたが、それでも非常に遅かったです。
>>秀丸の処理で改善できるかもしれないので、調査しておきます。
>回避方法はあるようなので、その方法を使わせてもらいます。
>もし、秀丸側で対処できるようであれば、お願いします。遅くても落ちな
>いようになれば嬉しいです。

[ ]
RE:11554 強調定義時動作異常No.11555
WIZ さん 02/03/12 15:14
 
ENCODINGSHIFTJIS さん、こん○○は。WIZです。

>aaaaaaaa......b  形のマッチが入っていますから
>オーダー(位数)が 2 になるのでしょう。例えば  )  では
(snip)
>の全文字位置でマッチが成立し、着色動作が毎回、起きるのでは?
>(操作のまとめ規約化は高度な処理が必要です)
使っている正規表現の効率が悪いのは理解してます。この為に処理に
時間が掛かっているのも…。なんで、遅いのは仕方ないと。でも、遅
いのは秀丸みたいな書き方になってましたね…。

>さらに詳しくは、正規表現マニアのバイブル、オーライリー社発行の
>「詳説:正規表現」でも立ち読みします。
置いている店が無いもので…。オーライリー社の本、何種類か通信販
売で買ったことはあるんですけど、バッタ本以外は…。
今はWEBを漁りながらやってますけどね。

[ ]
RE:11555 強調定義時動作異常No.11559
ENCODINGSHIFTJIS さん 02/03/13 11:47
 
入れ子は正規表現の範囲ではチョット、Perl のように拡張して
入れ子が少しできるようになっても、使える人は少ない。
-------------------------------- testkakko.hilight
//  <hhh(99999)ggggg(0000)llll>
//  (hhh<99999>ggggg<0000>llll)
//
//
49,[「『][^』」]*[』」]
113,([^)]*)
241,[≪<][^>≫(]*[>≫(]
241,[≪<)][^>≫(]*[>≫]
177,[()90]
177,【[^】]*】
//
----------------------------------
着色順が、外括弧→内括弧ではうまくゆくが、括弧の使い方を
規制できるわけでもないし。少なくともソース順には着色していないし。
gggggの部分はどうしたものか
=================================================
古本チェーン店にはオーライリーの本(ページ単価は高め)は
ありそうもないですから


[ ]
RE:11559 強調定義時動作異常No.11560
安久津 さん 02/03/13 14:15
 
こんにちは安久津です。

49,113,241,177 の検索方法は、カッコに対してなのに、
いづれも"単語"かつ正規表現です。誤作動の元になります。#経験から。(^^;)

次の正規表現でどうでしょう?

17,「[^「『(【<≪≫>】)』」]*」
17,『[^「『(【<≪≫>】)』」]*』
81,([^「『(【<≪≫>】)』」]*)
209,<[^「『(【<≪≫>】)』」]*>
209,≪[^「『(【<≪≫>】)』」]*≫
145,【[^「『(【<≪≫>】)』」]*】

# 強調表示3と強調表示4の順番が違うけど。

>  <hhh(99999)ggggg(0000)llll>
>  (hhh<99999>ggggg<0000>llll)

入れ子構造にするのなら、優先順位の低い強調表示の
マッチする範囲を大きく取ります。

17,「[^「『』」]*」
17,『[^「『』」]*』
81,([^「『()』」]*)
145,【[^「『(【】)』」]*】
209,<[^「『(【<≪≫>】)』」]*>
209,≪[^「『(【<≪≫>】)』」]*≫

以下は、外側が強調表示1で、内側の姉の発言が強調表示3になります。
「尾崎先輩によると、合コンで姉は【変態が好き】と言ってたらしい」
#どういう例なんだか。(^^;)

以下の病的な例も強調できます。
「強調1(強調2【強調3<強調4>強調3】強調2)強調1(<hi4>hi2)hi1」

では。

[ ]
RE:11555 強調定義時動作異常No.11561
WIZ さん 02/03/13 16:13
 
ここにREPLYします。

ENCODINGSHIFTJIS さん
安久津 さん      こん○○は。WIZです。

おかげ様で、強調表示が上手くできました。正規表現の指定内容も、
お粗末でしたし。一番の原因は、色指定の、優先順位が高い・低い
と強調表示の優先順位が上手くつながってなかったことでした。

どうも、ありがとうございました。


[ ]