アウトライン解析の対応言語についてNo.31844
rtle さん 12/12/09 03:17
 
プログラミング言語のアウトライン解析の折りたたみ機能のパワーアップをお願いし
ます。

例えば

function main(){
  hoge();
  hoge();
 var call=function(){
  hoge();
  hoge();
  hoge();
  hoge();
 }
  hoge();
  hoge();
}

例えばmain()の行で折りたたむと、$call=functionの行までしか折りたたまれません

[ ]
RE:31844 アウトライン解析の対応言語につNo.31845
秀丸担当 さん 12/12/10 10:35
 

アウトライン解析の方法として、関数一覧やツリー表示などがありますが、関数
一覧だと階層構造にはなっていないですが、ツリー表示だと階層構造のものを定
義することができます。

アウトライン解析は、[その他]→[ファイルタイプ別の設定]→[アウトライン]→
[解析]で設定します。
ここを「ツリー表示 - 通常」にしておくといいです。
このソースはjavaかjavascriptだと思いますが、この場合はC言語とほぼ同じで、
C言語のものが適用できます。
ツリー表示の定義が空欄の場合は自動認識され、拡張子が.jsなどの場合は自動
的にC言語と同じものが適用されます。
拡張子が違う場合は「リセット(R)>>」より、「C言語用」のものにすると、明示
的にC言語用ものにすることができます。

ツリー表示にしておくと、折りたたみの設定もデフォルトのままであれば折りた
たみも階層構造になります。

ちなみに参考情報として、現在β版のV8.30においては折りたたみの設定で終端
の「}」までを折りたたみの範囲にする方法が追加されます。

[ ]
RE:31845 アウトライン解析の対応言語につNo.31848
rtle さん 12/12/11 03:56
 
言語:C言語 と書いてあるのでプログラミング言語のベストな解析の方法は関数一覧
だと思い込んでいました
βも試してみようと思います。
ありがとうございます。

[ ]
RE:31848 アウトライン解析の対応言語につNo.31850
秀まるお2 さん 12/12/11 08:31
 
 ちなみにですが、こちらのFirefoxでテストしたら、たしかにその

 var call=function(){
  hoge();
  hoge();
  hoge();
  hoge();
 }

 のような記述はエラーとならずに通ってしまうようですが、本来はちゃんとセ
ミコロンで区切って、例えば

 var call=function();
 {
  hoge();
  hoge();
  hoge();
  hoge();
 }

 のように書くのが正しいというか、セミコロンが抜けてるのは文法的には間違
いなんじゃないかという気がしますけど、どうなんでしょうか。

 セミコロン無しの場合だと、別の意味になったりするのやら?

 (誰か詳しい人いたら教えて欲しいですけども)

[ ]
RE:31850 アウトライン解析の対応言語につNo.31854
Smartweed さん 12/12/12 02:14
 
> var call=function(){
>  hoge();
>  hoge();
>  hoge();
>  hoge();
> }

ですが、C言語っぽく言えば、
hoge() を4回呼び出す、名無しの関数を定義して、そのアドレスを call に代入する、
ということです。

[ ]
RE:31850 アウトライン解析の対応言語につNo.31855
rtle さん 12/12/12 05:25
 
厳密に書くと、callに無名の関数を代入している訳ですから
var call=function(){
 hoge();hoge();hoge();
};
となります。

var call=function(){;
 hoge();hoge();hoge();
}
だと
var call=function(){;
で一つの命令になってしまい、callにfunction(){を代入する
でもfunction(){は構文エラー とな…と思って試してみたけどエラーになりません
ね。よくわからない…

[ ]
RE:31844 アウトライン解析の対応言語につNo.31856
rtle さん 12/12/12 05:29
 
そして投稿を分けさせて頂きますが、今度はphpで


function hoge(){//←ここで折りたたむと
 $data=<<<assss  //←ここまでしか折りたたまれない
assss;
}//←本当はここまで折りたたんで欲しい
function koge(){
 print("hoge");
}


php独自の構文ですので、これは正常に折りたためない…かな?また設定ミスでした
らごめんなさい。

やはり対応言語の追加をお願いしたいです。

[ ]
RE:31856 アウトライン解析の対応言語につNo.31857
rtle さん 12/12/12 05:30
 
と、サンプルがあまりよろしくなかったですね


function hoge(){//←ここで折りたたむと
 print "hoge";
 $data=<<<assss//←ここまでしか折りたたまれない
ほんぶんほんぶん
ほんぶんほんぶん
assss;
 print "hoge2";
}
function koge(){
 print "koge";
}

です。

[ ]
RE:31854 アウトライン解析の対応言語につNo.31858
秀まるお2 さん 12/12/12 08:23
 
 そのような仕組みがあるとは知りませんでした。勉強になりました。

 最近(というか、数年以上前から?)はC++言語もすごく拡張されてしまって
て、書き方によっては何の言語で書いてるのか分からないみたいだし、全然つい
ていけてないですね。

[ ]
RE:31857 アウトライン解析の対応言語につNo.31859
秀丸担当 さん 12/12/12 09:41
 

PHPについては、HTMLやサーバーサイドとクライアントサイドのスクリプトが混
在して完全ではない場合がある思いますが、HTML部分にプログラムと同じような
記述がなければ多くの場合うまくいくと思います。

サンプルで確認した限りでは、ツリー表示でリセットして空欄の場合は、拡張子
によりますが、拡張子が.phpの場合は自動的には適用されないので、言われてい
る通りうまくいきませんでした。

関数一覧またはツリー表示で「C言語用」の定義の状態ではうまくいきました。
もし拡張子が.phpだとしたら明示的に「C言語用」にリセットするといいと思い
ます。

[ ]
RE:31859 アウトライン解析の対応言語につNo.31860
rtle さん 12/12/12 13:46
 
なるほど、ありがとうございます。

…しかしキリがないと言うかそんな感じになってしまいますが
こんな例とか
function aaaa(){
 print "aaa";
 print "aaa";
 $call=function(){//[1] ここで閉じた時
  print "aaa";
  print "aaa";
 };//[2] ここまで閉じて欲しいけど
 print "aaa";
 print "aaa";
 print<<<aaa
<html>
</html>
aaa;
 print "aaa";
 print "aaa";
 $call=function(){//[3] ここまで閉じてしまう…
  print "aaa";
  print "aaa";
 };
 print "aaa";
 print "aaa";
}

またこんな例
function aaaa(){//[4]また、ここで折りたたむと・・
 print "aaa";
 print "aaa";
}//[5]ここまで折りたたんで欲しいけど
aaa();
run();run();run();
function aaaa(){//[6]ここまで折りたたまれてしまう
 print "aaa";
 print "aaa";
 print "aaa";
}
ではおかしな折りたたまれ方をしてしまいます。
「こう設定すれば全ての場合において完璧な折りたたみが出来るぜ」という設定があ
ればよいのですが
対応言語の追加という形をお願いしたいな と思う次第です。
失礼しました

[ ]
RE:31860 アウトライン解析の対応言語につNo.31861
秀丸担当 さん 12/12/12 15:17
 

こういう場合については、現在の正式版にはありませんが、V8.30のβ版におい
て設定が追加され、「}」までを折りたたみできるようになりました。

V8.30βで、[その他]→[ファイルタイプ別の設定]→[アウトライン]→[折りたた
み]→[折りたたみ可能な条件の設定]で、「"}"まで(アウトライン解析との対応
時のみ)」をONにしておくとできるようになります。

他の方法としては、「折りたたみ可能な条件の設定」で、「カーソル上の対応す
る括弧」がONになっていると、カーソルを「{」にあわせて折りたたみすること
で対応する「}」までを折りたたむ方法もあります。
この場合は言語にあまり依存せず、関数でなくても使うことができ、V8.21でも
使えます。

[ ]
RE:31861 アウトライン解析の対応言語につNo.31862
rtle さん 12/12/13 15:38
 
秀丸担当さんに教えていただいた設定
・アウトライン解析は、[その他]→[ファイルタイプ別の設定]→
 [アウトライン]→[解析]を「ツリー表示 - 通常」にする
・関数一覧またはツリー表示で「C言語用」の定義の状態にリセットする
にしたら今までのサンプルは全て正常に折りたたまれました。

また申し訳ありませんが
class hoge{//[1]ここで折りたたむと
 function a(){
  print "ng";
  print "ng";
  $b=<<<DOCUMENT
  test
DOCUMENT;//[2]ここまでしか折りたたまれない
  print "ng";
 }
 print "ng";
}//[3]ここまで折り畳んで欲しいのに

という場合もありました。

DOCUMENTがインデントをぶちぬいて行頭から書いてあるのが原因の様ですが
この構文はタブやスペースを書くことが出来ないのでどうしてもインデントが崩れて
しまいます

[ ]
RE:31862 アウトライン解析の対応言語につNo.31863
アルビレオ さん 12/12/13 16:25
 
ユーザーのアルビレオです。

>DOCUMENTがインデントをぶちぬいて行頭から書いてあるのが原因の様ですが
>この構文はタブやスペースを書くことが出来ないのでどうしてもインデントが崩れて
>しまいます

たとえばヒアドキュメント中に } があっても無視しなければいけないといった
問題もあるので、やるとしたらヒアドキュメント部分をひとつの折りたたみブロ
ックとして認識するようにしないといろいろ不都合が出ると思います。

[ ]
RE:31863 アウトライン解析の対応言語につNo.31864
秀丸担当 さん 12/12/13 17:03
 

この例の場合は、アウトライン解析ではなくインデントによる折りたたみになり
ますが、確かにインデントによる折りたたみは、ヒアドキュメントには対応して
ないです。

似たケースとして、インデントによる折りたたみはコメントやC言語の#ifなどに
対応しています。

例:

if(x){
    xxxx
    xxxx
/*
comment}
comment
*/
    xxxx
#if 0
yyy}yyy
yyy}yyy
yyy}yyy
#endif
    xxxx
    xxxx
}


この場合はコメントやifdef等の無効行はインデントの対象としないように無視
しています。
ヒアドキュメントもカラー表示は対応しているので(phpのカラー化はかなり複
雑なことになっていますが)、一応それを判断すれば同じように可能なはずなの
で、V8.30のβ版で検討したいと思います。

現状では「{」にカーソルを合わせて「折りたたみ」コマンドを実行してやるこ
とで回避できると思います。

[ ]