要望:Rubyのコメント/文字定数No.08634
安久津 さん 01/05/09 21:42
 
こんにちは秀丸担当さん、安久津といいます。
「コメント/文字定数」の判定で Ruby を加えて下さい。
 Perl からの完全分離独立です。

●基本的な判定。
(A)文字定数。
 (1)"string"  「"」自体は \" で表す。
 (2)'string'  「'」自体は \' で表す。
 備考、Perl や 秀丸マクロと同じ。

(B)コメント。
 (1) # 以降から行末まで。(単一行) Perl と同じ。
 (2)行頭 =begin から、行頭 =end まで。(複数行)
    "^=begin$" から "^=end$" まで。

●例外。
 # の直後に { がある時にはコメントの開始としない。
 "#[^{]?" とか "#(?!{).?" な感じがコメントの開始。

以上よろしくお願いいたします。m(__)m
では。

__END__
 Rubyな人への補遺。
以前、綾乃介さんから要望(2:04492, 99/11/22)が出されていました。
ここで、( Perlな視点の )えるさんとのお話があるのですが、
秀丸での現実的な実装を越えているように思いました。
簡単にですが、私が考えたことを以下に述べます。

●元の要望: / から / までにある # はコメントの開始としない。
  目的は、正規表現オブジェクトの中の # 対策。
    /foo#bar/
    /#{var}/

●私の却下理由。
(1) / / 以外の %r, %Q, %x, ``, の中でコメント扱いを受けてしまう。
(2)#{var}でない # は、
   少なくとも、/ / , %r, %Q, %x, ``, の中では \x23, \043 で代替可能。
(3)秀丸の文字定数判定では挟みこみの対応関係を調べていない。
   例えば " があれば、対応する " が無くても行末まで強調される。
(4)商演算子としての / の存在。
  printf("%f\n%f\n", 10/3.0, 20/3.0)
  n = var1/var2; # n = var3/var4;
(5)判定処理が複雑。
(6)Ruby だけ特別な処理は気が引ける。

●新しい要望: # の直後に { がある時にはコメントの開始としない。
  目的は、正規表現オブジェクトの中の # 対策。
    /#{var}/

●私の採用理由。
(1) / / の中に限らず %r, %Q, %x, ``, の中でもコメントにならない。
(2)\x23{var}, \043{var} では代替不可能な #{var} の # が使える。
   さらに #$var, #@var は同様な流儀の #{$var}, #{@var} が使える。
   他の場合は \x23, \043 が使える。
(3)秀丸が / と / の対応関係を調べる必要が無い。
(4)商演算子としての / の副作用を避けられる。
(5)判定処理が単純。
(6)Ruby だけ特別な処理が欲しいというのでなく、
   現に Perl で行っているような処理を Ruby でもやって欲しい。
   「 # の直前に $ があるときにはコメントの開始としない。」
 @a = (1..5);
 for( $i = 0; $i <= $#a; $i++ ){
    print "\$a[$i] = $a[$i]\n";
 }

●副作用。
 当然、#{comment は、コメントとして強調されません。
 しかし Ruby でコメント開始の #{ の出現頻度は、極小でしょう。
 awk じゃないし。(^^;)

[ ]
RE:08634 要望:Rubyのコメント/文字定数No.08644
秀丸担当 さん 01/05/11 17:15
 
>「コメント/文字定数」の判定で Ruby を加えて下さい。
>&nbsp;Perl からの完全分離独立です。

なにやら、複雑ですね。
とりあえず、
> (2)行頭 =begin から、行頭 =end まで。(複数行)
これに例外的なことが無いでしょうか。
1行内の話は正規表現でなんとかするとして。

[ ]
RE:08644 要望:Rubyのコメント/文字定数No.08650
安久津 さん 01/05/11 23:44
 
>なにやら、複雑ですね。
抽象的な説明になってしまいました。(^^;)

>とりあえず、
>> (2)行頭 =begin から、行頭 =end まで。(複数行)
>これに例外的なことが無いでしょうか。
ありません。

とにもかくにも、Ruby のコメント/文字定数 が
 Perl のそれから独立して欲しいです。
 Perl に配慮しながらの要望は苦しいです。

>>●例外。
>> # の直後に { がある時にはコメントの開始としない。
>> "#[^{]?" とか "#(?!{).?" な感じがコメントの開始。
こっちは、後回しでも良いです。

では。
__END__
 Rubyな人への補遺の補遺。

●お詫び。
前回の投稿時に「``, %x の間で # が \x23, \043 で代替可能だ」と
書きました。間違っていました。m(__)m

●表。
(1)「現在」とは、現在の「コメント/文字定数」Perl での表示のこと。
(2)「要望後」とは
   「# の直後に { がある時 # をコメントの開始と見なさない」
    という要望実現後。
(3)「代替」とは # を \x23, \043 で置きかえ可能か。
 +------------------+------+--------+------+
 | オブジェクト   | 現在 | 要望後 | 代替 |
 +------------------+------+--------+------+
 | "foo#bar"    | 正  | 正   | 可  |
 | "#{var}"     | 正  | 正   | 不可 |
 | %Q!foo#bar!   | 誤認 | 誤認  | 可  |
 | %Q!#{var}!    | 誤認 | 正   | 不可 |
 +------------------+------+--------+------+
 | 'foo#bar'    | 正  | 正   | 不可 |
 | '#{var}'     | 正  | 正   | 不可 |
 | %q!foo#bar!   | 誤認 | 誤認  | 不可 |
 | %q!#{var}!    | 誤認 | 正   | 不可 |
 +------------------+------+--------+------+
 | /foo#bar/    | 誤認 | 誤認  | 可  |
 | /#{var}/     | 誤認 | 正   | 不可 |
 | %r!foo#bar!   | 誤認 | 誤認  | 可  |
 | %r!#{var}!    | 誤認 | 正   | 不可 |
 +------------------+------+--------+------+
 | `cmd foo#bar`  | 誤認 | 誤認  | 不可 |
 | `cmd #{var}`   | 誤認 | 正   | 不可 |
 | %x!cmd foo#bar! | 誤認 | 誤認  | 不可 |
 | %x!cmd #{var}!  | 誤認 | 正   | 不可 |
 +------------------+------+--------+------+

●顕著なもの。
 代替不能で、頻発する書き方の
 /#{var}/, %r!#{var}!, %r=#{var}=
 など、で誤認していること。
「# の直後に { がある時 # をコメントの開始と見なさない」
 であるならば、これらが解消されること。

●副作用。
>●副作用。
> 当然、#{comment は、コメントとして強調されません。
> しかし Ruby でコメント開始の #{ の出現頻度は、極小でしょう。
> awk じゃないし。(^^;)
もしかして、ブロックを受け取るメソッドの呼び出しで、
次のように書く人がいるかも知れません。
obj.method
{ |bp|
 to_be_yielded;
}
コメントアウトすれば。
#obj.method
#{ |bp|
# to_be_yielded;
#}
うーん。(--;)

また、代替不可能と言っているところでも、
 /#{var}/ を、Regexp.new("#{var}") と。
 Ruby も Perl と同じように、書き方がたくさんあります。
要は、出現頻度と Rubyらしい書き方に適っていること。
とりあえず、Rubyの自治権が確立すれば、様子をうかがえるし。(^^;)

[ ]
RE:08650 要望:Rubyのコメント/文字定数No.08652
安久津 さん 01/05/12 13:17
 
まとめです。
■ Ruby の「コメント/文字定数」判定。
●文字定数。
 (1)"string"、「"」自体は \" で表す。
 (2)'string'、「'」自体は \' で表す。
●コメント。
 (1)複数行。行頭 =begin から、行頭 =end まで。
   C の /* */ と同じく例外はない。
 (2)単一行。# 以降行末まで。
   例外(1) # の直後に { がある場合、コメント開始と見なさない。
   例外(2) # の直前に ? がある場合、コメント開始と見なさない。

●備考。
 最後の「例外(2)」というのは、Ruby特有のものです。
 次のように使います。
 printf("%#x\n", ?#);
 C だと以下と同じです。
 printf("%#x\n", '#');

あらためて、よろしくお願いいたします。m(__)m
では。

__END__
またまたお詫び。(^^;)

前回の投稿後の独り言。
"そういえば、イテレータで { を次行に書いているソースを"
"見た事無いな。自分も書いた覚えが無い。"
------------------------------
C:\Lang\ruby>ruby -v
ruby 1.6.1 (2000-09-27) [i386-cygwin]

C:\Lang\ruby>type a.rb
(1..3).each { |x|
  puts x
}

C:\Lang\ruby>ruby a.rb
1
2
3

C:\Lang\ruby>type b.rb
(1..3).each
{ |x|
  puts x
}

C:\Lang\ruby>ruby b.rb
b.rb:2: parse error
{ |x|
   ^
b.rb:3: parse error
------------------------------
ということで、Ruby で、コメント開始としての #{ は、
ちょっと考えられないです。
意図的に書かないと存在しないです。
やっぱり、#{ をコメント開始と見なさない方向で、大丈夫です。
 Perl とぜんぜん違うんです。(^^;)

[ ]
RE:08652 要望:Rubyのコメント/文字定数No.08656
秀丸担当 さん 01/05/14 18:25
 
>まとめです。

ありがとうございます。
参考にさせていただきます。

[ ]
RE:08656 要望:Rubyのコメント/文字定数No.08665
安久津 さん 01/05/16 09:54
 
>>●コメント。
>> (1)複数行。行頭 =begin から、行頭 =end まで。
これ、最初の要望では、"^=begin$" から "^=end$" と書きました。
間違っています。m(__)m
正しくは "^=begin" から "^=end.*$" です。

>参考にさせていただきます。
 vim の /syntax/ruby.vim が参考になります。
ドキュメントを生成するためのコメントの書式があることを、
すっかり失念していました。
雰囲気。breglf.dll だと from "^=begin(?: .*)?$" to "^=end(?: .*)?$"

では。

[ ]