3.06β3で保存時文字が増える現象No.06938
SAS さん 00/11/29 22:30
 
こんにちは。
秀丸Ver3.06β3を使わせて頂いていて
秀丸Ver3.05で保存したときはエラーが出ていなかったあるPerlスクリプトを、
3.06β3で保存し直した場合に構文エラーが出る現象が発生しました。
そこで調べてみたところ、この現象の再現方法が分ったので、報告させて
頂きます。

例えば、

print "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopq
rst\"";

という行だけのPerlスクリプトがあった場合に、折り返し文字数80桁にしておくと、
表示行が2行になり 「\"」 がまたぎます(最初の表示行の最後に\があり、
次の表示行の先頭に"があります)。
この状態で保存して開きなおすと、「\"」の後ろに余分な「"」が増えてしまっていて、
print "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopq
rst\""";
となってしまいます。
エラーが発生したスクリプトでも似た記述があり、余分な「"」の為に、
構文エラーが発生していたわけです。

上記の例の場合、折り返し文字数が80桁以外だと、"が増える現象は
発生しません。

これは80桁でまたぐ場合にのみ発生するのではなく、「\"」が行をまたぐ位置が
90桁目や100桁目などの場合は、その桁位置の折り返し文字数にしてある場合に、
発生します。

また、
print "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopq
rst\v";
だったり
print "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopq
rst"";
など、またぐ文字列が「\"」でない場合(↑の2例だと「\v」と「""」)は、
表示2行目の先頭文字が増える現象は発生しませんでした。

今のところ、こちら側で判明していることは以上です。

[ ]
RE:06938 3.06β3で保存時文字が増える現No.06940
ENCODINGSHIFTJIS さん 00/11/30 09:57
 
再現させる、その他の設定も ?
禁則on の設定にしていると " は行頭禁則に入っているので
\" は泣き別れ の表示にはならなかった。保存も正常

動作環境 & ファイルタイプ別の設定で表示の変化に関係するのは
どうでしょう。

[ ]
RE:06940 3.06β3で保存時文字が増える現No.06945
SAS さん 00/11/30 19:35
 
ENCODINGSHIFTJISさん、こんんちは。
レスありがとうございます。

ある論理行にある「\"」が表示行をまたぐときに発生する現象なので、
ご指摘の通り、禁則処理でまたがないようになっていれば発生しません。

>動作環境 & ファイルタイプ別の設定で表示の変化に関係するのは
>どうでしょう。
現象の再現の為に、他の設定の詳細が必要という意味でしょうか?
「\"」が表示行をまたぐようにさえなってさえいれば、他の設定は
関係なさそうなので、特に設定を明記しなくても再現できると思っていた
のですが、もし、他では再現できない、あるいは他の理由で必要な
ようでしたら、うちの設定の詳細を、キャプチャーするなどして
アップしてもいいですよ。

ちなみに日本語コードは EUC, SJIS, UTF-8で確認したのですが、
いずれでも発生しました。

[ ]
RE:06945 3.06β3で保存時文字が増える現No.06950
encodingshiftjis さん 00/11/30 22:22
 
>ちなみに日本語コードは EUC, SJIS, UTF-8で確認したのですが、
>いずれでも発生しました。

全然再現できません。ファイルタイプ別の設定は? 改行に関係しそうなのは
全般      禁則処理、先頭のタブ文字の...
表示      改行非表示
強調表示  強調表示
保存・読み込み  保存する時の変換、保存するときに行末の...
くらい?
あとは、保存先のファイルシステム? ローカル、ネットワークのファイル
??

[ ]
RE:06950 3.06β3で保存時文字が増える現No.06959
SAS さん 00/12/01 12:41
 
encodingshiftjisさん、こんにちは。

encodingshiftjisさんのご指摘のように、設定により、現象を再現
できないケースがあるのか調べてみました。

まず設定の異なるファイルタイプをランダムに選択し、
複数保存してみました。すると、こちらでもファイルタイプ
(設定)により現象を再現できない場合を確認できました。

そこで再現できる場合と再現できない場合のファイルタイプの
設定を調べてみたところ、こちらでは「保存・読み込み」タブに
ある「保存するときの変換」の設定により、再現するかしないかが
分れていました。
他の設定を変えずに、その設定だけを変えると、
再現したり再現しなかったりします。

具体的には、

「空白をタブに変換する」の時に「\"」が表示行をまたぐと
再現します。

「変換無し」または「タブを空白に変換する」の時には
「\"」が表示行をまたいでいても再現しませんでした。

[ ]
RE:06959 3.06β3で保存時文字が増える現No.06960
番頭++ さん 00/12/01 13:31
 
>具体的には、
>
>「空白をタブに変換する」の時に「\"」が表示行をまたぐと
>再現します。
>
>「変換無し」または「タブを空白に変換する」の時には
>「\"」が表示行をまたいでいても再現しませんでした。

Ver. 3.06 βx で、タブの計算に関したバグは以前にありました。
終了時の「空白をタブに変換する」の計算ミスではないですか ???

[ ]
RE:06960 3.06β3で保存時文字が増える現No.06962
秀丸担当 さん 00/12/01 18:54
 
>>「空白をタブに変換する」の時に「\"」が表示行をまたぐと
>>再現します。

再現することができました。
これはやばいバグです。
報告ありがとうございます。

[ ]