breglfで C/C++強調No.02118
安久津 さん 01/05/02 21:01
 
● きっかけ。
 秀丸標準添付の C-function.hilight で、ちょっと C を使っていたら、
 1 行で定義が完結している関数が強調されていないことが分かった。
int sum(int a, int b){ return a+b; }

● c-function.hilight( jre32.dll用オリジナル )
21,^[_a-zA-Z][^\(=;:]* [_a-zA-Z][_a-zA-Z0-9]*\([^;]*$
21,^[_a-zA-Z][^\(=;:]* operator[^\(;]+\([^;]*$
21,^[_a-zA-Z][^\(=;:]*::[^\(;]+\([^;]*$
21,^[_a-zA-Z][_a-zA-Z0-9]*[a-z]+[_a-zA-Z0-9]* *\([^;]*$

 最後の "[^;]*$" が問題だ。
 関数呼び出しは、インデントしているので "[^;]*$" が無くても大丈夫だ。
 しかし "[^;]*$" を除くと関数プロトタイプにまでマッチしてしまう。

● c-function2.hilight( breglf.dll用 )
21,^[_a-zA-Z][^(=;:]* \**[_a-zA-Z]\w*\([^;)]*(?:\)(?!;).*)?$
21,^[_a-zA-Z][^(=;:]* operator[^(;]+\([^;)]*(?:\)(?!;).*)?$
21,^[_a-zA-Z][^(=;:]*::[^(;]+\([^;)]*(?:\)(?!;).*)?$
21,^[_a-zA-Z]\w*\([^;)]*(?:\)(?!;).*)?$

● 強調できるようになった関数。
type f(int a){ return a; }
int *getp(){ return p; }
int* getg(){ return &g; }
int f(int a[], int b[] ){ return a[0]-b[0]; }
int f(int *a, int *b){ return *a - *b; }
int f(type &a){ hoge(); }
f(){ puts("foo"); }
main(int c, char *a[]){ int i; for(i=0;i<c;i++) puts(a[i]); }

● ぼやき。
 jre32 用のハイライトファイルはライブラリで手に入ります。
 breglf を使っている人用のハイライトファイルは手に入らない。
 参考にできない。発展しない。(ToT)
 arimac さんの c-function.hilight をのぞきたい。(^^;)

パパパダピョーン。

[ ]
RE:02118 breglfで C/C++強調No.02119
Arimac さん 01/05/02 21:17
 
> arimac さんの c-function.hilight をのぞきたい。(^^;)

最近はCは余りやらないので秀丸のをそのまま使ってると
思います(^^;
(手を入れてないかは忘れた)
今はJavaやってますが、プロジェクト毎にコロコロ言語が
変わるので凝ったことはできません・・・(;_;)
言語どころかOSもマシンもコロコロ変わるし
マクロも余り使ってません・・・
ご期待に沿えなくてどうも済みません。
#世間が連休中はずっと出勤予定なので
#なぜかフォーラム常駐状態になるかも(^^;

[ ]
RE:02119 breglfで C/C++強調No.02126
安久津 さん 01/05/03 09:18
 
>> arimac さんの c-function.hilight をのぞきたい。(^^;)
>
>最近はCは余りやらないので秀丸のをそのまま使ってると
>思います(^^;
ざんねん。

>今はJavaやってますが、プロジェクト毎にコロコロ言語が
>変わるので凝ったことはできません・・・(;_;)
そういえば、Java 用のハイライトファイルを作成したときには
ものすごく苦労しましたのを憶えています。
今ならもっとスマートにできるかも。

ぜんぜん関係ないけど、
searchdown "ab(?i)cd", regular;
で、
"ABCD" にもマッチするんですね。(^^;)

気が向いたら breglf & bregexp の正規表現を徹底調査しなきゃ。
では。
# rubyな人に参考。
["ABCD", "abCD", "abcD"].each do |x|
  print "#{x} "
  /ab(?i)cd/ =~ x
  if $& then puts "matched."; else puts "not matched."; end
end

[ ]
RE:02126 breglfで C/C++強調No.02130
Arimac さん 01/05/03 11:45
 
>>> arimac さんの c-function.hilight をのぞきたい。(^^;)
>>
>>最近はCは余りやらないので秀丸のをそのまま使ってると
>>思います(^^;
>ざんねん。

複数行とマッチした強調が出来ないので
そもそも完全には無理だと思ってるし。
-?[0-9]+(\.[0-9]+)?
とか
0x[0-9A-Fa-f]+
とか、リテラルを強調してるのが特徴かも。

>>今はJavaやってますが、プロジェクト毎にコロコロ言語が
>>変わるので凝ったことはできません・・・(;_;)
>そういえば、Java 用のハイライトファイルを作成したときには
>ものすごく苦労しましたのを憶えています。
>今ならもっとスマートにできるかも。

私は、
^[ \t]*public[^;]+$
^[ \t]*protected[^;]+$
^[ \t]*private[^;]+$
って感じでやってたりして(^^;

>ぜんぜん関係ないけど、
>searchdown "ab(?i)cd", regular;
>で、
>"ABCD" にもマッチするんですね。(^^;)

「(?」はたしかオプションをパターン内に
記述するという意味だったと思うので、
パターン全体に効くと思います。
(マニュアルは家のマシンにあるのでうろ覚え(^^;)

[ ]
RE:02130 breglfで C/C++強調No.02132
安久津 さん 01/05/03 19:53
 
>-?[0-9]+(\.[0-9]+)?
>とか
>0x[0-9A-Fa-f]+
>とか、リテラルを強調してるのが特徴かも。
ふーむ。

>>>今はJavaやってますが、プロジェクト毎にコロコロ言語が
>>>変わるので凝ったことはできません・・・(;_;)
>>そういえば、Java 用のハイライトファイルを作成したときには
>>ものすごく苦労しましたのを憶えています。
>>今ならもっとスマートにできるかも。
>
>私は、
>^[ \t]*public[^;]+$
>^[ \t]*protected[^;]+$
>^[ \t]*private[^;]+$
>って感じでやってたりして(^^;
予想外にシンプル。ど吃驚。

>>ぜんぜん関係ないけど、
>>searchdown "ab(?i)cd", regular;
>>で、
>>"ABCD" にもマッチするんですね。(^^;)
>「(?」はたしかオプションをパターン内に
>記述するという意味だったと思うので、
>パターン全体に効くと思います。
>(マニュアルは家のマシンにあるのでうろ覚え(^^;)
 Ruby を基準に考えていました。m(__)m
 Ruby だと cd 以下に効きます。
 Perl を基準に考えるのが適当かと思いました。
しかし 1週間前に Perl はアンインストールしました。(^^)/~bye
breglf(bregexp)の正規表現は、それ独自のものとして
おいおい調査したいと思います。

では。

[ ]
RE:02132 breglfで C/C++強調No.02133
Arimac さん 01/05/03 23:29
 
>>>ぜんぜん関係ないけど、
>>>searchdown "ab(?i)cd", regular;
>>>で、
>>>"ABCD" にもマッチするんですね。(^^;)
>>「(?」はたしかオプションをパターン内に
>>記述するという意味だったと思うので、
>>パターン全体に効くと思います。
>>(マニュアルは家のマシンにあるのでうろ覚え(^^;)
> Ruby を基準に考えていました。m(__)m
> Ruby だと cd 以下に効きます。
> Perl を基準に考えるのが適当かと思いました。
>しかし 1週間前に Perl はアンインストールしました。(^^)/~bye
>breglf(bregexp)の正規表現は、それ独自のものとして
>おいおい調査したいと思います。
 
マニュアル(PERLRE(1))では
「区別するものでは、単にパターンの先頭に (?i) を
 付け加えればよいのです。」
という結構あいまいな書き方をしてました(^^;
(マニュアルの雰囲気ではパターンの先頭以外に書いた
 場合の動作については未定のような感じ(^^;)
 
Perlの正規表現は同じバージョンでありながら
ガンガン進化してるようなので仕様(実装?)が
変わったのかも(^^;
bregexpのはだいぶ古いみたいです。

[ ]