perlのコメントNo.16439
kikuto さん 04/01/16 14:34
 
変数をパッケージ名から書く場合、以下のような2通りの書き方があります。

$pack::xxx = 1;       #comment1
$pack'xxx = 1;        #comment2

「カラー表示にする言語」を「Perl」に設定すると、#comment1 はコメントとしてカ
ラー表示されるのですが、#comment2 はカラー表示されません。

また、

$xxx =~ s/\#//g;

のように、正規表現内に「#」が含まれていると、そこからコメントとしてカラー表
示されてしまいます。

改善を希望します。
よろしくお願いします。

[ ]
RE:16439 perlのコメントNo.16442
IKKI さん 04/01/16 16:14
 
はじめまして。秀丸ユーザーの IKKI です。

> $xxx =~ s/\#//g;
>
> のように、正規表現内に「#」が含まれていると、そこからコメントとしてカラー表
> 示されてしまいます。

この件については私もちょっと思うところがあるので便乗提案させてください。

▼現状
主にスクリプト言語で正規表現リテラルに使われる /〜/ という表記を
文字定数としてカラー表示したいという要望は以前私も出しました。
しかし、いろいろなケースに対応するためには結局言語ごとの構文解析が必要で、
現状では実現困難……という話になったような気がします。

その後 HmJre の登場により、正規表現で /〜/ を強調表示させることが
不可能ではなくなってきました。
が、この場合も /〜#〜/ の「#」以降がコメント色になってしまうことに
変わりありません。

▼提案
カラー表示でコメントより優先順位の高い場所については、コメント開始/終了
判定を無効(文字定数内と同様の扱い)としてはいかがでしょうか。

例えば「特に強調1」で強調された部分に「#」が入っていても
その「#」はコメント開始記号とは見なされない、ということです。

ユーザーは必要に応じて(自己責任で) /〜/ にマッチする正規表現を書き、
「特に強調」に設定することで要求が満たされます。
あらゆる言語に秀丸本体が対応しなくとも、ユーザーの手で拡張できるように
なっていればいいと思います。


唯一問題が出るとすれば互換性ですが……
強調表示はそもそもクリティカルな機能ではありませんし、
v4 ですでに非互換が生じてますよね。(^^;

[ ]
RE:16439 perlのコメントNo.16445
秀まるお2 さん 04/01/16 18:26
 
 Perlのカラー化についてですが、

> $xxx =~ s/\#//g;

 こっちの方は、構文解析が困難ということで、わざと、というか、仕方なく間
違ったカラー化になってたと思います。当時たしか、Perlに詳しい人からコメン
トしてもらったけども、「はっきりとこういう法則でなら判定できる」と言える
法則が無くて、うやむやのまま終わったような気がします。

 で、問題の、

> $pack'xxx = 1;        #comment2

 についてですが、これまたPerlの文法を知らない僕にはどう対処していいか分
かりませんで…。

 単純に、

 − 行頭から、タブ文字または空白だけをはさんで「$」が出没した場合で。

 − その「$」の後ろに英数字が連続していて、
   その直後に「'」が出没して、さらにその後ろに英数字が連続してた
   場合は、その「'」は文字列開始とは扱わない。

 ということでいいんでしょうか?。

 具体的に条件に一致する「'」の例をいくつか書いていただくか、または正規
表現でこういう風って教えて頂けると助かります。

 何もヒントが無ければ無いなりに、僕の方で調査しますけど。

[ ]
RE:16442 perlのコメントNo.16446
秀まるお2 さん 04/01/16 18:31
 
 提案いただいた件が、果たしてどういう方面に役立つのかよく分かりません。
とりあえず今回のPerlカラー化のバグを回避できる目的には使えるかもしれない
ですけど。

 カラー化の指定を全部正規表現のみでやりたいという話でも無いですよね?。
それはそれで大変な話なので、またの機会にとしたい所ですが。

[ ]
RE:16445 perlのコメントNo.16447
でるもんた さん 04/01/16 22:34
 
でるもんたです。

>  で、問題の、
>
> > $pack'xxx = 1;        #comment2
>
>  についてですが、これまたPerlの文法を知らない僕にはどう対処していいか分
> かりませんで…。
>
>  単純に、
>
>  − 行頭から、タブ文字または空白だけをはさんで「$」が出没した場合で。
>
>  − その「$」の後ろに英数字が連続していて、
>    その直後に「'」が出没して、さらにその後ろに英数字が連続してた
>    場合は、その「'」は文字列開始とは扱わない。
>
>  ということでいいんでしょうか?。

この場合の ' の使い方は C++ の :: と同じだと考えてください。

それから、$ の出没場所は行頭とは限らないです。変数名の頭には必ず $、@、%
のどれかをつけるので、たとえば $hoge'foo = $main'bar[3]; という書き方に
なることもあります。

変数名の途中の ' や :: は特殊記号ではなく英数字とみなす、でいいと思います。

$hoge'foo{'xxx'} = xxx; という場合は、{'xxx'}の部分は配列の添え字ですの
で、'xxx' は単なる文字列です。

========================================================================
飯嶋 浩光 / でるもんた・いいじま   http://www.ht.sakura.ne.jp/~delmonta/
IIJIMA Hiromitsu, aka Delmonta           mailto:xxxxxxxx@ht.sakura.ne.jp

[ ]
RE:16447 perlのコメントNo.16448
秀まるお2 さん 04/01/16 22:53
 
 詳しい情報ありがとうございます。連絡いただいた内容で、とりあえず秀丸の
カラー構文関係を修正できると思います。

 秀丸V4.10のβ版の方に、近い将来反映する予定とさせていただきます。

[ ]
RE:16448 perlのコメントNo.16449
でるもんた さん 04/01/16 23:00
 
でるもんたです。

>  詳しい情報ありがとうございます。連絡いただいた内容で、とりあえず秀丸の
> カラー構文関係を修正できると思います。
>
>  秀丸V4.10のβ版の方に、近い将来反映する予定とさせていただきます。

おつかれさまです。

書き忘れていましたが、' については関数呼び出しでも同様のことがいえます。

&hoge'foo(x,y); という具合です。

[ ]
RE:16449 perlのコメントNo.16451
kikuto さん 04/01/17 02:08
 
フォローありがとうございます。>でるもんたさん

$main'scalar @main'array %main'hash $main'array[2] $main'hash{'string'} &mai
n'subroutine 等がありますが、他にリファレンスというものがあって、C言語で言う
ところのポインタのようなものです。
ポインタは頭に * を付けますが、リファレンスは頭に \ を付けます。
\$main'scalar \%main'hash \&main'subroutine 等です。
また、C言語ではポインタから変数の値を参照するときは &pointer ですが、perlで
リファレンスから変数の値を参照するときは、$$main'ref_scalar や %$main'ref_ha
sh のように書きます。
C言語での「ポインタのポインタ」のように、リファレンスのリファレンスもありま
す。なので、\\$main'scalar や @$$main'ref_array という表記も存在します。
なので、変数の頭に付く記号を正規表現で現すと、
(\\*[$@%&]|[$@%&]$*)
ということになるのではないでしょうか。
正規表現に自信が無いので、間違っているかもしれません。

[ ]
RE:16451 perlのコメントNo.16485
秀まるお2 さん 04/01/19 14:35
 
 一応、簡単に対応しました。

 次のV4.10βにて反映されます。後はそちらのβテストの会議室の方にお願い
します。

[ ]
RE:16485 perlのコメントNo.16501
秀丸担当 さん 04/01/20 13:11
 

タイミングがずれてしまいましたが、昨日公開のβ10では修正が反映されていま
せんでした。
次のβ11で反映予定です。

[ ]