Netbeansモジュールの概念の説明みたいなもの

ってことで、まず、netbeansのモジュールの説明を突然始める。
とりあえず、layer.xmlが一番重要なファイルです。
layer.xmlxmlで表したファイルシステムです。
で、分かりやすく図で書くとこんなかんじになります。

+root
 +サービス
  +MIMEリゾルバー
   □DNGLResolver.xml
 +エディタ
  +text
   +dngl
    □language.nbs
 +ナビゲータ
  +パネル
   +text
    +dngl
     □org-netbeans-modules-languages-features-LanguagesNavigator.instance

NetBeansは以下のような事をします。


サービスのMIMEゾルバーに登録されているものを見ます。
DNGLResolver.xmlにはドングル言語の拡張子は.dnglでMIMEタイプがtext/dnglだと定義されているので
それを読み込みます。
うんたら.dnglはmimeがtext/dnglだと。
エディタで開いた場合は、エディタ/text/dngl以下を見ます。
language.nbsっていうnbsファイルは文法を定義したファイルがあるので
language.nbsに書いてある文法に従って構文解析した後、文法によってエディタの動作を変更します。
ナビゲータパネルの動作もtext/dngl以下にファイルがあるので、動作を変更します。
ナビゲータ/パネル/text/dngl/org-netbeans-modules-languages-features-LanguagesNavigator.instance
は、netbeansのモジュールの言語フューチャーの言語ナビゲータのインスタンスが入ってるので、
つくらんでも勝手にlanguage.nbsファイル内の設定から動作させます。
他のフォルダに何かがあれば、その動作も変更します。

つまり、うんたら.dnglファイルをエディタで開くとサービス内のMIMEゾルバーをなめて、
dnglがtext/dnglだと認識し、エディタ/text/dngl/language.nbsがあるので、それでうまいこと動く。
ってだけの話しです。

他に変更できるものとして、mimeにアイコンを設定したり、テンプレートファイルを設定したりできます。
とそんな構造になっています。


てことで、気になるlanguage.nbsの中身なんですが、
細かい説明は後にすることとして、とりあえず、いいところだけ書きます。
BNFが分からないとアレなんですが、分かってれば楽チンです。


FOLDってのに文法要素を設定するだけで、ピロピロするやつがついてしまったりします。

Paren : "(" Statements ")";
Block : "{" Statements "}";
# code folding
FOLD:Block
FOLD:Paren

これを書くと、{...}と(...)で+と−のボタンで、開いたり閉じたりピロピロしてしまいます。


で、ナビゲーターに以下のように文法要素の表示名を文法要素内の文法要素名を指定したりすると、
ナビゲーターのウィンドウに表示してくれるとか言う簡単さです。

NameStatement: Name ":" Statement;

NAVIGATOR:NameStatement: {
    display_name: "$Name$";
}

てなかんじなんです。
簡単でしょう。なんか、スゴイ偉くなってしまった気分です。偉いのは、nbsなんだけどな。
やってませんが、例えば、rubyのclassはピロピロしません。
だけど、classのbody部分をFOLDに設定するだけで、ピロピロできると思うのです。
なんという、簡単さ!ってなかんじなわけでした。