directTagJumpに不要entryNo.02594
inouen さん 03/08/03 12:47
 
Java / C++ 等にて direct Tag Jump 指定した場合に
target method/function 以外に return parameter, input parameter も
jump 対象とされてしまいますので、target method/functionの宣言部
のみに jump先を制限するようにお願いします。
この件は http://www.maruo.co.jp/hidesoft/2/t0207.html
12424, 12481 にて要望していましたように 10数行の追加で可能ですので
ぜひお願いします。

[ ]
RE:02594 directTagJumpに不要entryNo.02619
秀丸担当 さん 03/08/05 12:36
 

>Java / C++ 等にて direct Tag Jump 指定した場合に
>target method/function 以外に return parameter, input parameter も
>jump 対象とされてしまいますので、target method/functionの宣言部
>のみに jump先を制限するようにお願いします。

次のβで対応することにします。

[ ]
RE:02619 directTagJumpに不要entryNo.02734
inouen さん 03/08/09 17:26
 
秀tags機能追加有難うございました。

ただし、最初はルールを自動のままtagsファイルを作成しましたので何故機能しない
のだろう
と思ってしまいました。

file extensionが c, cc, cpp, java(...) の場合は自動的にルールを
「c/java言語の関数一覧」を選択するようにして頂くと有難いのですが。
そうしないと殆どの人は今まで通りに「自動」のまま使ってしまうように思いますの
で。


その他:

機能拡張要望
java class 宣言文(constructor宣言無し)へのdirectTagJump

public class ... Entity {
   ...
   public Entity() {...}
   public Entity(int index) {...}
   ...
}

 上記のように Entity(...)等とconstructor 宣言がある場合はtagjumpが有効ですが、
constructor 宣言が無い場合はjump出来ないようです。
 " ... Entity {" の行を関数宣言と同様に考えてjump出来たらと考えました。

それには 指定された関数名をtags file中でサーチする時に、同時に 関数名と同一
のファイルを
サーチをしておき (directory\...\filename.ext(123) のfilename部分の一致を取る)
関数名の一致が取れず、ファイル名の一致が取れた場合はその対応する行にjumpする
ように
して頂けたらと思います。
(javaでは class_xyz に対応するfileは class_xyz.javaとすることになっていま
すので、
この方法でOKだと思います。他にも考えられるでしょうが、このやり方が簡単なよう
です。
C++, C# 等については考えていませんが...)

以上、よろしくお願いします。




[ ]
RE:02619 directTagJumpに不要entryNo.02736
inouen さん 03/08/11 13:58
 
複数tagsファイル指定機能の追加要望

上記機能を同じく追加して頂くと有難いのですが。

Java/C-Standard Library,Project Standard Library 等の複数のdisk/directoryに
分かれている
ソースファイルの参照が可能なように複数tagsファイルの参照をしたいわけです。

tagsファイル(T)  指定例:
  tags;c:\j2sdk142\src\tags;d:\ourproject\package00\tags
"上の階層もチェックする" の機能は、先頭のファイルのみに有効とする。

以上 よろしくお願いします。

[ ]
RE:02734 directTagJumpに不要entryNo.02740
秀丸担当 さん 03/08/12 16:03
 

>file extensionが c, cc, cpp, java(...) の場合は自動的にルールを
>「c/java言語の関数一覧」を選択するようにして頂くと有難いのですが。
>そうしないと殆どの人は今まで通りに「自動」のまま使ってしまうように思いますの
>で。

そうすると、秀tagsで最後に実行したルールを覚えておくという動作が変わって
しまうのと、c, cc, cpp, javaでも自分でカスタマイズしたルールが作成しにく
くなります。
いままで出来ていたことができなくなるような影響が出てくるようであれば、や
らないことにします。


>機能拡張要望
>java class 宣言文(constructor宣言無し)へのdirectTagJump

これは、行の強調表示をカスタマイズすることで可能になります。

   public Entity() {...}

を、行の強調表示できるようにしておき、hilightファイルとして保存しておく
と、秀tagsでルールを(自動)とすることでダイレクトタグジャンプできます。

今回追加したファイル先頭に*を付けるC言語用のtagsファイルとの両立はできま
せんが。

C言語においては、ファイル名とクラス名は必ずしも一致するものではないので、
できません。

[ ]
RE:02736 directTagJumpに不要entryNo.02756
秀丸担当 さん 03/08/13 15:48
 
>複数tagsファイル指定機能の追加要望

複数ファイルも指定可能にします

[ ]
RE:02740 directTagJumpに不要entryNo.02763
inouen さん 03/08/14 11:33
 
>そうすると、秀tagsで最後に実行したルールを覚えておくという動作が変わって
>しまうのと、c, cc, cpp, javaでも自分でカスタマイズしたルールが作成しにく
>くなります。
>いままで出来ていたことができなくなるような影響が出てくるようであれば、や
>らないことにします。

Ver4.00の追加機能説明等で明記されると思いますので、今まで通りでも特にかまい
ません。

ただ、Ver4.00導入時にc,cc,cpp,javaに関しては一度ルールを(C/Java言語の関数一覧)
モードに設定することにしていただけたら新しい機能を知らないまま使う人が多少は
少なく
なるのではと思います。
特定の設定をしたい人は、最初の一回のみ固有のルールの選択をすれば その後は入
力した
選択が優先され、今まで通りの使い方が出来るはずですから。



>機能拡張要望
>java class 宣言文(constructor宣言無し)へのdirectTagJump

>これは、行の強調表示をカスタマイズすることで可能になります。

自分で作っていないプログラムのトラブルシュートを要求された場合、自分のプログ
ラムだが
標準のサブルーチンパッケージとの組み合わせでの動作を追求したい場合等では、
数多くの新しいclass名を強調表示に追加して...といったことが必要になり、カスタ
マイズの
手段は現実的でないと思います。

>今回追加したファイル先頭に*を付けるC言語用のtagsファイルとの両立はできませ
>んが。

今回追加した *機能の使用には無関係に、Java等に関しては問題なく両立可能のはず
です。
(なお Javaではサーチ時に大文字・小文字の区別をする必要があり、現在tagsファ
イル中の
ファイル名を小文字にされていますので変更が必要になると思います)

ぜひ必要なレベルの機能ではありませんが、簡単に数行で実現できる機能ですので
出来たら追加して頂きたいと思います。


[ ]
RE:02763 directTagJumpに不要entryNo.02772
安久津 さん 03/08/15 20:17
 
あくつです。
今 Java は使っていません。
秀丸のベータテストにも参加できません。(^^;)

(1) 行の強調表示の登場前後。

    かつて、秀丸の「関数の一覧」や「ダイレクトタグジャンプ(tags
    ファイルの生成)」などの機能が利用できた言語は、C言語だけでした。

    v3.00 以降に、hilight ファイルが登場しました。
    行の強調表示なる特別な強調表示が用意されました。
    行の強調表示をユーザーがカスタマイズすることで、C言語以外の言語でも
    「関数一覧」や「ダイレクトタグジャンプ(tags ファイルの生成)」が利用で
    きるようになりました。

    それに伴い「関数一覧」の名前は「強調表示の一覧」に変わりました。
    その他「次の関数」は「下の強調行」など、関連機能の名前も変わりました。

    なぜ "関数" でなくなったのかは明白です。
    行の強調表示に割り当てている意味が、ユーザーごとで異なるからです。
    関数、サブルーチン、メソッド、プロシージャ、ラベル、クラス、
    構造体、インターフェース、ヘッダー、見出し、等になります。

    それ故の
    Date: Sun, 14 Jul 2002 22:28:59 +0900
    From: アルビレオ<63xxxxxxxxxxxxxx@maruo.co.jp>
    Subject: hidesoft.2:12434| RE 12433 class-funcのdirectTagJumpに不要entry
    です。

(2) 行の強調表示のカスタマイズ。

>>機能拡張要望
>>java class 宣言文(constructor宣言無し)へのdirectTagJump
>
>>これは、行の強調表示をカスタマイズすることで可能になります。
>
>自分で作っていないプログラムのトラブルシュートを要求された場合、自分のプログ
>ラムだが
>標準のサブルーチンパッケージとの組み合わせでの動作を追求したい場合等では、
>数多くの新しいclass名を強調表示に追加して...といったことが必要になり、カスタ
>マイズの
>手段は現実的でないと思います。

    本来、正規表現を使って、class 定義行が強調されるように細工します。
    行の強調表示のカスタマイズとは、ユーザーにとっての有意味行に
    マッチする正規表現をひねり出すことです。
    参考として、秀丸ディレクトリにある c-function.hilight をごらん下さい。
    # 行頭に 21 がある部分。
    こういう定義を Java でも行ないます。

(3) java.hilight for bregif & bregexp

85,^ +(?:(?:public|protected|private|static|abstract|final|native|synchroniz
ed) +)*[A-Z][A-Za-z0-9_$]* *\(
85,^ +(?:(?:public|protected|private|static|abstract|final|native|synchronized)
+)*(?:void|boolean|char|byte|short|int|long|float|double|(?:[A-Za-z_][\w$]*
\.)*[A-Z][\w$]*)(?:\[\])* +[a-z][\w$]* *\(
21,\b(?:class|interface) +[A-Za-z_][^(]*$
// Note(1):
//    上記の定義行は3行です。
// Note(2):
//    このハイライトファイルは、bregif.dll と bregexp.dll を
//    必要とします。詳しくは、秀丸のマクロライブラリーで bregif.dll
//    を取得して、説明ファイルを参照してください。
// Note(3):
//    このハイライトファイルは、秀丸 v3.17 と bregif v1.1b
//    で動作します。

(4) Ruby でも動く。
    ' +' は '\s+' にしている。

$ cat hilight.rb

re1=/^\s+(?:(?:public|protected|private|static|abstract|final|native|synchro
nized)\s+)*[A-Z][A-Za-z0-9_$]*\s*\(/
re2=/^\s+(?:(?:public|protected|private|static|abstract|final|native|synchro
nized)\s+)*(?:void|boolean|char|byte|short|int|long|floa
t|double|(?:[A-Za-z_][\w$]*\.)*[A-Z][\w$]*)(?:\[\])*\s+[a-z][\w$]*\s*\(/
re3=/\b(?:class|interface)\s+[A-Za-z_][^(]*$/

line=nil
ARGF.each{ |line|
    # クラス定義行かメソッド定義行を出力。
    if re1 =~ line || re2 =~ line || re3 =~ line
        print line
    end
}

$ ruby hilight.rb Foo.java


(5) 新しい HmJre.dll
    秀丸の新しい正規表現 DLL(HmJre.dll) の出来具合によって、
    上記の正規表現が機能する可能性があります。

    私は、秀丸 v4 のベータテストに参加していません。
    しかし、現状の HmJre.dll では無理だということは分かっています。

    +-------------------------------+------------------+
    | hidemaru v3.17 & bregif v1.1b | hmjre.dll        |
    +-------------------------------+------------------+
    | ' +'                          | '[\t ]+'         | ここ疑義あり。
    | '[\w$]'                       | '[A-Za-z0-9_$]'  |
    | '\b'                          | '\<' または '\>' |
    +-------------------------------+------------------+

    現在のハイライトファイルは、ひとつの正規表現文字列が 200 バイト
    ぐらいの制限があります。少ないような気が・・・。
    [\w$] を [A-Za-z0-9_$] にすると、制限を超えてしまいます。

    Java 固有の要望を出すより、HmJre.dll への要望を出した方がいいと
    思います。若しくは正規表現の相談です。

    # でも、いままで inouen さんが hilight ファイルを使っていなかった
    # ので、結構難しいかも。(^^;)

[ ]
RE:02772 directTagJumpに不要entryNo.02774
安久津 さん 03/08/15 23:39
 
あくつです。 忘れ物。(^^ )>>

>target method/function 以外に return parameter, input parameter も
>jump 対象とされてしまいますので、target method/functionの宣言部
>のみに jump先を制限するようにお願いします。

class Foo {
    Foo(){ }
    public Foo getFoo(){ }
    public void setFoo( Foo foo ){ }
}
    こういうのでしょ?
    tags ファイルを編集してしまえば平気。
    関数の名前だけを保存して、他は削除すれば大丈夫です。

    以下の Ruby スクリプトは、メソッド名を残して、return タイプや引数のタイ
    プを削除します。あと、コンストラクタも削除します( クラス定義の方を優先
    させるため )。extends と implements 以降も削除します。
    # extends java.applet.Applet implements Runnable, MouseListener

D:\where\>type edtags.rb

re=/^([^(]+\(\d+\)\s*:\s*)(.+)$/
line=ms=md=nil
ARGF.each{ |line|
    line.sub!(re){ |ms|
        md=$~
        if /\S+\s*\(/ =~ md[2]
            ms = md[1] + %r!\S+\s*\(!.match(md[2])[0]
        elsif /\b(?:extends|implements)\b/ =~ md[2]
            ms = md[1] + md[2].sub(/\b(?:extends|implements)\b.*$/, '')
        end
        ms
    }
    print line unless /\s[A-Z_]\w+\s*\(/ =~ line
}

D:\where\>ruby -i.bak edtags.rb tags

[ ]
RE:02763 directTagJumpに不要entryNo.02785
秀丸担当 さん 03/08/18 18:16
 

>ただ、Ver4.00導入時にc,cc,cpp,javaに関しては一度ルールを(C/Java言語の関数一
>覧)
>モードに設定することにしていただけたら新しい機能を知らないまま使う人が多少は
>少なく
>なるのではと思います。

稀なケースで、その機能が動作しているのかしていないのかよくわからなくなっ
てしまい、動作に一貫性が無くなってしまう気がするのでやらないことにします。


>自分で作っていないプログラムのトラブルシュートを要求された場合、自分のプログ
>ラムだが
>標準のサブルーチンパッケージとの組み合わせでの動作を追求したい場合等では、
>数多くの新しいclass名を強調表示に追加して...といったことが必要になり、カスタ
>マイズの
>手段は現実的でないと思います。

これは安久津さんの言われる通りの方法で、カスタマイズができます。

Javaは詳しく知りませんが、c言語であればコンストラクタでなくてもクラスの
宣言内に関数の内容を書くことができますし、インデントや改行の仕方によって
も解釈の仕方が様々になってきます。
コンパイルすれば正確な解釈も可能かもしれませんが、テキストエディタで実現
するには限界があります。
そのためにも行の強調表示を使う方法があるので、行の強調表示を使っていただ
けると助かります。

[ ]
RE:02619 directTagJumpに不要entryNo.02849
inouen さん 03/08/24 11:31
 
”direct tag jump時にparameter部分は無視する”の指定方法に付いて
 "C言語の関数一覧" 以外に C-function.hilight、その他専用のhilightファイ
ルを指定して作成していた場合等、tagsファイル作成時の
ルールに無関係に指定出来るようにすべきだと考えらてきました。

したがってtags ファイル作成時には今まで通りに作成し、
動作環境 tagsファイルの項に 
  ”上の階層もチェックする” の指定と同様に
  ”関数パラメータはjumpの対象としない”
のチェックを入れる等の手段により実現していただくようにお願いします。

[ ]
RE:02785 directTagJumpに不要entryNo.02850
inouen さん 03/08/24 11:59
 
java ファイルで関数宣言無しのデータ宣言のみのもの、C等でのstructure
宣言文の参照等も direct tag jumpの対象にしたい等の要望はあるのですが

そのような使い方をする人は少ないのでは、
テキストエディタでは限界です
マクロを使用して相当のことが出来るのでは...
等のご意見ですので この項はパスされてかまいません。
別途 C/Java言語開発システム等の範囲の問題かも知れませんね。
秀丸が軽快で使い慣れているのでそちらで出来たらと思っていました。
いろいろとおさわがせしました。


[ ]
RE:02849 directTagJumpに不要entryNo.02859
秀丸担当 さん 03/08/25 17:30
 

>したがってtags ファイル作成時には今まで通りに作成し、
>動作環境 tagsファイルの項に 
>  ”上の階層もチェックする” の指定と同様に
>  ”関数パラメータはjumpの対象としない”
>のチェックを入れる等の手段により実現していただくようにお願いします。

この方法であれば、問題ないと思います。
*を入れる方法だと、動作しているのかしていないのか、知っている人しかよく
わからないような機能でしたが、動作環境に書かれているのであれば分かりやす
いと思います。
これを導入して、*を入れる方法は削除してしまっていいでしょうか。

[ ]
RE:02859 directTagJumpに不要entryNo.02861
inouen さん 03/08/25 17:51
 
>
>>したがってtags ファイル作成時には今まで通りに作成し、
>>動作環境 tagsファイルの項に 
>>  ”上の階層もチェックする” の指定と同様に
>>  ”関数パラメータはjumpの対象としない”
>>のチェックを入れる等の手段により実現していただくようにお願いします。
>
>この方法であれば、問題ないと思います。
>*を入れる方法だと、動作しているのかしていないのか、知っている人しかよく
>わからないような機能でしたが、動作環境に書かれているのであれば分かりやす
>いと思います。
>これを導入して、*を入れる方法は削除してしまっていいでしょうか。

*を入れる方法は削除してください。
他に問題が発生するようであれば別ですが、
  ”関数パラメータはjumpの対象としない”
をdefaultにしていただく方が使い勝手が良くなると思います。
よろしくお願いします。

[ ]
RE:02861 directTagJumpに不要entryNo.02879
秀丸担当 さん 03/08/26 18:48
 

>*を入れる方法は削除してください。
>他に問題が発生するようであれば別ですが、
>  ”関数パラメータはjumpの対象としない”
>をdefaultにしていただく方が使い勝手が良くなると思います。

β16でそのようにします。

[ ]