config "xBquoteInclude:"についてNo.03440
SAS さん 03/12/05 15:30
 
Ver4.10β開発&公開ご苦労様です

Ver4.10β1において、config "xBquoteInclude:"で値を空白を含む文字列を()を使って
指定したいのですが、このとき、)自体を文字として指定することができません。
例えば、"xBquoteInclude:( abc())"とすると設定時にエラーになりますし、
( abc(\))などと\でエスケープしてもうまくいきません。
(の方は含めることができました。

config "xBquoteInclude:"特有の問題なのか、他でもそうなのかは調べてないので
分らないのですが、これは不具合でしょうか?
それとも、何か ) 自身を文字列の中に含める方法があったりするのでしょうか?

具体的に書くと、下記するAddIndentChar関数のような処理を作ろうとすると、

AddIndentChar:
    menu
        "(&0) タブ文字のみ(英文向け)",
        "(&1) 半角空白も含める(和文向け)",
        "(&2) 半角空白+箇条書き(記号のみ)",
        "(&3) 半角空白+箇条書き(記号と全角数字)",
        "(&4) 半角空白+箇条書き(記号と全角/半角数字)",
        "キャンセル ([ESC])";
    if (result == 1) {
        config "xBquoteInclude:";
    } else if (result == 2) {
        config "xBquoteInclude:( )";
    } else if (result == 3) {
        config "xBquoteInclude:( −・)";
    } else if (result == 4) {
        config "xBquoteInclude:( −・.()0123456789)";
    } else if (result == 5) {
        config "xBquoteInclude:( −・.()0123456789-.()012345678
9)";
    }
    return;

result == 5のときマクロ実行時にエラーになります。
        config "xBquoteInclude:( −・.()0123456789-.(\)01234567
89)";
としても駄目で、
        config "xBquoteInclude:( −・.()0123456789-.(0123456789)";
ならエラーになりません。
宜しくお願いします。

[ ]
RE:03440 config "xBquoteInclude:"についNo.03441
秀丸担当 さん 03/12/05 16:00
 

>Ver4.10β1において、config "xBquoteInclude:"で値を空白を含む文字列を()を使
>って
>指定したいのですが、このとき、)自体を文字として指定することができません。

()はエスケープなどができないので、)自体の記述ができませんでした。
\を使ってエスケープできるように修正しようと思います。

ただし、正規表現と同じく、文字列としての解釈の\と二重になって、
')'を文字列中に入れたいときは config "x名前:(AB\\)CD)"
'\'を文字列中に入れたいときは config "x名前:(AB\\\\CD)"
というような感じになってしまいますが、これでいいでしょうか。

[ ]
RE:03441 config"xBquoteInclude:"についNo.03445
SAS さん 03/12/05 17:09
 
秀丸担当様、早速の回答ありがとうございました。

> というような感じになってしまいますが、これでいいでしょうか。
はい。私の方はそれで構わないですし、他での文字列内の\と同じ仕様になるの
で、ベストな仕様だと思いました。

[ ]
RE:03445 config"xBquoteInclude:"についNo.03446
SAS さん 03/12/05 17:18
 
>はい。私の方はそれで構わないですし
あっ。書いてから気づいたのですが、私が構わなくても、
過去に config "x" での () 内で、\を使ってるマクロがもしあるなら、
そのマクロで問題が出るから困るという、人もいるかもしれないんですねぇ
・・・
むむむむむ・・・

どういう仕様にするかの判断はおまかせしますが、もし互換性の問題で
\でのエスケープが無理ということになると、
エスケープ無しで ) を識別するという方法は無理でしょうか?
)が入れ子になってるときは、一番外側の ) 以外は、文字と判断するとか。

[ ]
RE:03446 config"xBquoteInclude:"についNo.03454
Iranoan さん 03/12/05 17:52
 
 秀丸担当さん、SASさん今日は、Iranoan です。
> 過去に config "x" での () 内で、\を使ってるマクロがもしあるなら、

 多分これだけなら問題ないと思いますが、
> '\'を文字列中に入れたいときは config "x名前:(AB\\\\CD)"
との兼ね合いで、例えばインデントの対象文字に \ と空白を含んでいると駄
目そうです。←実際に使われているかでは無く、単なる可能性の話。
 ただ他に対処法が無さそうですが...。

[ ]
RE:03446 config"xBquoteInclude:"についNo.03455
SAS さん 03/12/05 18:11
 
たびたび、すいません。

>過去に config "x" での () 内で、\を使ってるマクロがもしあるなら、
>そのマクロで問題が出るから困るという、人もいるかもしれないんですねぇ
どうやら勘違いでとんちんかんなことを書いてしまってたようです(^^;

従来も、config "x" での文字列でも、\は\\ なんですね。

回答を、"x"内ではエスケープ自体が使えなかったという意味だと、なぜか
勘違いしてしまい、 \ だけで \ になっていて、変更で \ を書くには \\ と
するようになるという意味だと、誤って思い込んでしまってました。

\を使ってるマクロで、互換性に問題出るというのは勘違いでした。
失礼しました。

それで、別の疑問なのですが、
>')'を文字列中に入れたいときは config "x名前:(AB\\)CD)"
これの"\\)"は "\\\)" の間違いでしょうか?

[ ]
RE:03446 config"xBquoteInclude:"についNo.03456
秀丸担当 さん 03/12/05 18:12
 

>過去に config "x" での () 内で、\を使ってるマクロがもしあるなら、
>そのマクロで問題が出るから困るという、人もいるかもしれないんですねぇ

いままでのconfig文で他に文字列が扱えるものは、フォント名と、各所の色を文
字列で指定する場合と、強調表示のファイル名を無理矢理変える場合だけです。
フォント名はFontsフォルダにファイル名としても使われるので、たぶん \ は使
われないと思います。
強調表示のファイル名はloadhilightで指定できるので、config文でファイル名
だけ書き換えて中身を読み込まないのはたぶん意味が無いことなので大丈夫だと
思います。

[ ]
RE:03455 config"xBquoteInclude:"についNo.03457
秀丸担当 さん 03/12/05 18:26
 

>\を使ってるマクロで、互換性に問題出るというのは勘違いでした。
>失礼しました。

勘違いではないと思います。
もし"\\"を使っているマクロがあれば互換性問題は発生します。
ですがその可能性は無いに違いないということです。

>それで、別の疑問なのですが、
>>')'を文字列中に入れたいときは config "x名前:(AB\\)CD)"
>これの"\\)"は "\\\)" の間違いでしょうか?

これは"\\)"で間違いないです。
文字列として"\\)"が"\)"として解釈され、config文が"\)"を")"として解釈しま
す。

Iranoanさんの
>との兼ね合いで、例えばインデントの対象文字に \ と空白を含んでいると駄
>目そうです。←実際に使われているかでは無く、単なる可能性の話。
> ただ他に対処法が無さそうですが...。

はどういう意味でしょうか。\と空白を含んでいても問題無いのではないかと思
うのですが。

[ ]
RE:03454 config"xBquoteInclude:"についNo.03458
SAS さん 03/12/05 18:27
 
Iranoanさん、すれ違いでレスした3445に書いたのですが、私の方で勘違いがあっ
たようです。混乱させて、ごめんなさい。
\ と空白を含んでても大丈夫だと思います。






あれっ、それとも、まだ何か私の方での、勘違いがあるのかなぁ?
頭回らなくなってきた(^^;

[ ]
RE:03457 config"xBquoteInclude:"についNo.03460
Iranoan さん 03/12/05 18:55
 
 秀丸担当さん今日は、Iranoan です。
> はどういう意味でしょうか。\と空白を含んでいても問題無いのではないかと思
> うのですが。
 インデントのキーを調べていませんが、これまでなら例えば「(」「\」
「)」をインデント対象とする目的で、
config "xKeyName:(\\)";
と書いていることはあり得るかと...。

[ ]
RE:03457 config"xBquoteInclude:"についNo.03461
SAS さん 03/12/05 19:01
 
秀丸担当様、回答ありがとうございます。

> 文字列として"\\)"が"\)"として解釈され、config文が"\)"を")"として解釈しま
> す。
あっ、正規表現と同じくと、2重というのは、そういう意味ですか!
またもや意味を取り違えて考えてました。すいませんm(_ _;)m

私は、この場合の、\) を "" 内で"を記述するときみたいな扱いにするのかと
思い込んでしまいました。

つまり、"\"" と同じイメージで "\)" を考えていました。

"\\\"" で \" となるのと同じように、(\\\)) で \) となるのかと
(2重という意味を、'\' と ')' を両方文字列に入れるという
意味と思うという、別の勘違いもしてたので(^^;)。

でも正規表現で、 ')'を指定するときは、\)  だから、
マクロの文字列内では当然、\\) になりますね。やっと理解できました。

[ ]
RE:03460 config"xBquoteInclude:"についNo.03463
Iranoan さん 03/12/05 19:03
 
 秀丸担当さん今日は、Iranoan です。
 自己レスです。ちょっと自分で混乱していました。
>  インデントのキーを調べていませんが、これまでなら例えば「(」「\」
> 「)」をインデント対象とする目的で、
> config "xKeyName:(\\)";
の訂正です。

 インデントのキーを調べていませんが、これまでなら例えば「 」と「\」を
インデント対象とする目的で、
config "xKeyName:( \\)";
と書いていることはあり得るかと...。

[ ]
RE:03460 config"xBquoteInclude:"についNo.03464
秀丸担当 さん 03/12/05 19:07
 

> インデントのキーを調べていませんが、これまでなら例えば「(」「\」
>「)」をインデント対象とする目的で、
>config "xKeyName:(\\)";
>と書いていることはあり得るかと...。

このインデントのキーこそが、今SASさんが取り扱っているBquoteIncludeで
す。
これはV4.10β1から追加されたものなので、今まで、というのが無いので、いま
のうちに対処しておけばこの先問題なくなると思います。

[ ]
RE:03464 config"xBquoteInclude:"についNo.03466
Iranoan さん 03/12/05 19:18
 
 秀丸担当さん今日は、Iranoan です。
> このインデントのキーこそが、今SASさんが取り扱っているBquoteIncludeで
> す。
> これはV4.10β1から追加されたものなので、今まで、というのが無いので、いま
> のうちに対処しておけばこの先問題なくなると思います。
 どうも失礼しましたm(__)m。

[ ]
RE:03456 config"xBquoteInclude:"についNo.03467
SAS さん 03/12/05 19:26
 
秀丸担当様、
>大丈夫だと思います。
そうですね。
私の要望で既存マクロに迷惑かけることがないようで、安心しました。

そして早速、β2で対応して頂けたようで助かります。
ありがとうございましたm(_ _)m

>>・config文でオプションfやxで()を使って文字列を指定するとき、
>>\\でエスケープ可能にする
>> ')'を文字列中に入れたいときは config "x名前:(AB\\)CD)"
>> '\'を文字列中に入れたいときは config "x名前:(AB\\\\CD)"

[ ]