アウトライン解析でブロックの始端と終端No.31065
papayaaan さん 12/03/31 00:16
 
現在のアウトライン解析では、

\begin{equation}
\begin{array}
...
\end{array}
\end{equation}

というようなソースコードに対し、\begin{equation}〜\end{equation}のブロックが
あり、その下に\begin{array}〜\end{array}がある、という正しい解釈をさせるすべ
がありません。
複数行コメントを用いることで色分けだけは出来るのですが。LaTeXやRubyを扱う上
で大事な機能ですので、導入をご検討下さい。



[ ]
RE:31065 アウトライン解析でブロックの始No.31066
Iranoan さん 12/03/31 01:04
 
 papayaaan さん今日は、一ユーザの Iranoan です。
> というようなソースコードに対し、\begin{equation}〜\end{equation}のブロックが
> あり、その下に\begin{array}〜\end{array}がある、という正しい解釈をさせるすべ
> がありません。
 確かに自動でやってくれればとも思いますが、ある程度は仕方がないかと。

 現状だと、
・array 環境は equation や align 等数式環境内でしか使えないので、レベ
   ルに併せて個別にしてする
・実際にはインデントさせる事が多いと思うので、設定の [オプション] で表
  示される「インデントの深さで決める」を使う
等が使えると思います。
 私は後者に近い使い方をしています。

[ ]
RE:31066 アウトライン解析でブロックの始No.31067
papayaaan さん 12/03/31 01:35
 
> papayaaan さん今日は、一ユーザの Iranoan です。
≪全文引用されていたのでコミュニテックス会議室システムが引用部分を省略処理し
ました。≫
> 私は後者に近い使い方をしています。

例が悪かったですが、arrayみたいに使用環境が限られてるタグは多くありません
そもそもRubyやVHDLならどうすればいいんでしょう

インデント基準もあまり使えません
\beginだけを登録すると、\end以降の同じインデントの行が巻き添えを喰らいます
\endまで登録すると\end以降のタグが\endの子要素であるかのような動作をしてしま
います
どっちにせよ正しい解析には程遠いものです

[ ]
RE:31067 アウトライン解析でブロックの始No.31074
秀まるお2 さん 12/03/31 23:45
 
 秀丸担当は知ってるかもしれないのですが、僕自身はVHDLやRubyでの、その辺
の入れ子関係の仕組みは全然知らないです。なので、果たしてどういう対応をし
たらいいのか検討するためには、まずはその辺の言語の仕様の勉強からしないと
いけなさそうです。

 ですが、今なかなか時間が取れなくて、今からすぐに勉強するって訳にもいか
なさそうです。

 とりあえず、現状の秀丸エディタのアウトライン解析の仕組みに、例えばタグ
付き正規表現とか、何かちょっと的な仕組みを追加するだけで簡単に対応出来る
ようなことがあるのでしたら、対応出来るのかなぁという気がします。

 何かいい案(というか、簡単に目的のことを実現するための方式?)があれば
教えて欲しい所です。

 秀丸担当にも相談してみます。

[ ]
RE:31074 アウトライン解析でブロックの始No.31076
papayaaan さん 12/04/01 19:53
 
> 秀丸担当は知ってるかもしれないのですが、僕自身はVHDLやRubyでの、その辺
>の入れ子関係の仕組みは全然知らないです。なので、果たしてどういう対応をし
>たらいいのか検討するためには、まずはその辺の言語の仕様の勉強からしないと
>いけなさそうです。
>
> ですが、今なかなか時間が取れなくて、今からすぐに勉強するって訳にもいか
>なさそうです。
>
> とりあえず、現状の秀丸エディタのアウトライン解析の仕組みに、例えばタグ
>付き正規表現とか、何かちょっと的な仕組みを追加するだけで簡単に対応出来る
>ようなことがあるのでしたら、対応出来るのかなぁという気がします。
>
> 何かいい案(というか、簡単に目的のことを実現するための方式?)があれば
>教えて欲しい所です。
>
> 秀丸担当にも相談してみます。

ご検討有難うございます。これ系の言語はC言語なら{と}で表現されるブロックの始
端と終端がある文字列で表されます。
たとえば、Cで

if(...){
...
}else{
...
}

というコードは、VHDLですと

if ... then
...
else
...
end if;

となります。ですので、ブロックの終端(この場合end if)を設定できないと、入れ
子状態になった子要素を兄弟要素と誤解したり、その逆になることがありえます。こ
の場合ですと、複数行コメントのユーザー定義を用いまして、始まりを

if.+then

のようにし、終わりを

end if;

のようにすれば、色分けができます。これを応用して見やすくしているデザインもあ
ります(例えば、Latexの祝鳥)。ですので、ユーザー定義の複数行コメントと同じ
インターフェース(とおそらく似たソースコード)が有効だと思います。
複数行コメントにある「自身の入れ子を許可」を使えば以下のような入れ子になった
コードでも、BはAの子要素、CはAの兄弟要素と正しく解釈されるでしょう。

if ... then  //ブロックA
...
else
 if ... then  //ブロックB
 ...
 else
 ...
 end if;  //ブロックBの終端
end if;   //ブロックAの終端
if ... then  //ブロックC
...
else
...
end if;  //ブロックCの終端

分かりやすいので例としてif文を挙げましたが、if文を実際に解析する必要はないと
思います。しかしVHDLのprocess文(begin processからend processまで)やLatexの環
境(\begin{([^\}]+)}から\end{\1}まで)などに適応できれば、非常に使い勝手が良
くなります。書いている最中に思いましたが、HTMLでもこの解析は有効ですね。

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

[ ]
RE:31076 アウトライン解析でブロックの始No.31077
秀丸担当 さん 12/04/02 11:07
 

>のようにすれば、色分けができます。これを応用して見やすくしているデザインもあ
>ります(例えば、Latexの祝鳥)。ですので、ユーザー定義の複数行コメントと同じ
>インターフェース(とおそらく似たソースコード)が有効だと思います。
>複数行コメントにある「自身の入れ子を許可」を使えば以下のような入れ子になった
>コードでも、BはAの子要素、CはAの兄弟要素と正しく解釈されるでしょう。

終端を指定したいという話は他の方から要望を頂いたこともあって課題となって
いますが、けっこう大掛かりな話になりそうで、なかなか手を付けられていない
です。
複数行コメントのユーザー定義と同じ方式をアウトライン解析でも定義できるよ
うにすることは技術的には不可能ではないと思いますが、リアルタイム性と汎用
性を考えると簡単ではないところがあります。
一応アウトライン解析を作った当初、開始と終了がペアになるような定義方法も
作ろうとしていましたが、複数行コメントは文字単位なのに対してアウトライン
解析は行単位ということもあり、汎用的なことを考えると定義では収まらない
ケースが多くありました。
実用的なものにするにはさらなる工夫が必要になると思います。

他のアイディアとしては、アウトライン解析のツリー表示には強調表示を含ませ
ることができますが、似た方式で複数行コメントを含ませることができれば複数
行コメントの定義がそのまままるごと利用できそうなことも考えられます。(や
ってみないと実現できるかわからないですが)

引き続き課題にします。

[ ]
RE:31077 アウトライン解析でブロックの始No.31078
papayaaan さん 12/04/03 02:40
 
>
≪全文引用されていたのでコミュニテックス会議室システムが引用部分を省略処理し
ました。≫
>引き続き課題にします。

検討いただきありがとうございます。
複数行コメントをそのままアウトラインに含ませることが出来るならば喜ばしいので
すが、その場合ツリー表示と排他利用になるのは少々困ります。
特にLatexはタグと文章が、PHPはPHPとHTMLが混合する都合上、インデントを徹底す
ると逆にコードが見にくくなりますので、終端を決められるアウトライン解析(ない
し同等の機能)はとても重要になります。よろしくお願いします。

[ ]