Eclipseプラグインの開発の勉強として、Asakusa FrameworkのDMDLエディターを作ってみようと思ってやってみた。
TextEditorについては本にも載っているしXMLエディターのテンプレートで基本は出来るので、最初の準備はクラス自体は多めだけど、コピペしていけばいいだけ。
しかしまずコメントの色付けを行うに当たり、Damager/RepairerでDefaultDamagerRepairerとNonRuleBasedDamagerRepairerのどちらを使えばいいのか迷った。
ScannerもPartitionScannerと単なるScannerの二種類出てくるし、片方はTokenに文字列を指定するのに他方はTextAttributeで色を指定してるし。
色々ウェブサイトを見て調べた結果、エディター上のテキスト(ドキュメント)をまずパーティションに分割することが分かった。そして、パーティションの種類によってはさらにパーティション内を構文解析して複数のTokenに分かれる。
で、パーティションのTokenにはパーティション名を示す文字列を指定し、パーティション内部の一部分を表すTokenではTextAttributeで文字列のスタイル(色など)を指定する。
Damager/Repairerは、パーティション内部の構造がある場合はDefaultDamagerRepairerを使い、構造が無い場合(コメント等)はNonRuleBasedDamagerRepairerを使う。(ここでいうNonRuleというのは、「内部構造(構文解析ルール)が無い」という意味らしい)
TODO: 「/*」「*/」で囲まれたコメントの途中に文字列を追加したり削除したりした場合に色が変になることがあるorz
ここまで出来てしまえば、キーワードに色を付けたりするのは比較的簡単w
TODO: キーワードが単語の途中にあっても色が付いてしまうorz
あと、括弧「{」「}」にカーソルを当てたときに対応する括弧が強調表示される(灰色の四角で囲まれる)のも本を見たら簡単だったのでやってみた。
TODO: コメント内に括弧があった場合、そこが強調表示されてしまうorz
さて、ここから先もまだ色々作ってみたい仕様があるけど、これ以上はデータモデルの定義部分をちゃんと構文解析しないと駄目そう。
RuleBasedScannerを参考にすれば良さそうだという事は分かったんだけど、nextToken()でTokenを返していく形式で解析する方法が思い付かない…。
そもそも今までやったことがある構文解析って、四則演算のライブラリーくらいだからなぁ。これは解析結果をツリー状に蓄積していく方式だったので、ちょっと違うんだよなぁ。どうしたものか。