breglfで ruby強調No.01919
安久津 さん 01/03/29 09:41
 
「コメント/文字定数のカラー表示」の「 Perl 」を使わずに、
 breglf(bregexp)を使って、Rubyのコメント/文字定数の表示の試み。
 cf 会議室2,発言04492,日付99/11/22,発言者 綾乃介,題名 Perl/Rubyのコメント判定
環境 Win95B, 秀丸v3.05, breglf v0.0.0.1, bregexp v2.0.4.29

(A)直接のきっかけ。
「コメント/文字定数のカラー表示」の Perl で。
(1) # から行末までコメント表示になることが不満。
 /#{var}/ =~ "string"
 ret = str.gsub(/#{var}/i, 'bar')
print <<"EOD"
#{RUBY_VERSION}
#{__FILE__}
EOD

(2)対応関係の無い ' や " 以下が文字定数として強調表示されることも不満。
 /here's/ =~ "string"
 hoge = $' #postmatch

(B)ruby.hilight
// コメント/文字定数のカラー表示は OFF にして使う。
// 欠点は、コードの末尾にあるコメントを強調できない事。
//
// 強調表示4、正規表現。
209,%r!(?:[^!\\]|\\.)*![iomxnesu]*
209,\x2f[^\x2f\\]*(?:\\.[^\x2f\\]*)*\x2f[iomxnesu]*
// 行の強調表示1、メソッド定義。
21,^ *attr_accessor\b
21,^ *attr_reader\b
21,^ *attr_writer\b
21,^ *def +
// 行の強調表示2、クラス定義、モジュール定義。
85,^ *class +
85,^ *module +
// 特に強調表示1、文字定数、コマンドなど。
19,%[Qqxw]!(?:[^!\\]|\\.)*!
19,\x22[^\x22\\]*(?:\\.[^\x22\\]*)*\x22
19,\x27[^\x27\\]*(?:\\.[^\x27\\]*)*\x27
19,\x60[^\x60\\]*(?:\\.[^\x60\\]*)*\x60
// 特に強調表示2、コメント(行頭、またインデントされたコメントのみ)。
// 間違えると困るところ。
83,^ *#(?!{).*
99,else if
99,elseif
// (私の)他の強調表示の割り当て。
// 強調表示1、その他の識別子。if,else,end,puts,print,gsub,chop,chop!,...
// 強調表示2、グローバル変数など(記号が付くものを除く)。\$[0-9A-Za-z_]+
// 強調表示3、組込み変数・定数・関数。RUBY_VERSION,$KCODE,ARGV,p,...

(C)サンプル。
$ret = %x!command.com /c dir /a-d/on/b!
puts $ret, "-- end of dir --"
str = "expression"
%r!regular/#{str}/index\.html! =~ "regular/expression/index.html"
puts $&
str = "REgular/exPRESSION/foo.html"
$ret = str.gsub(/regular\/expression/i,'正規/表現')
puts $ret
he = ["He said \"Hello, World\".",  %q!He said "Hello, World".!]
puts he
# comment
print <<"EOD"
#{RUBY_VERSION}
#{__FILE__}
EOD

print DATA.read
__END__
(D) ' の表示。
/here's/ =~ "string"
hoge = $'  #postmatch

(E)不具合。
/foo's bar\./ =~ "foo's bar."
|<-regexp->|
  |<- string ->|
         |<-string->|
"foobar/hoge.c" =~ %r!/hoge\.c! #ruby 風でない。
|<- string ->|
    |<- regexp ->|
          |<-regexp->|

あちらを立てればこちらが立たず。
しかし、(C)や(D)の表記の方が、(E)よりも出現頻度が多いと思う。
/foo\x27s bar./ =~ "foo's bar."
"foobar\x2fhoge.c" =~ %r!/hoge\.c!
では。

[ ]