Eclipseのプラグイン開発の自作DMDLエディターでDmdlParserを使ってみようかと思ったが、無理そう。
|
キーワードの色付けは出来たが、キーワードを含む単語でも色が付いてしまったりする。
これ以上はちゃんと構文解析しないと難しそう。
しかしパーサーを自作するのは大変なので、Asakusa Framework本体のDMDLのパーサー(DmdlParser)を利用しようと思った。
が、結論から言うと、駄目そう(苦笑)
一応、DmdlParser#parse()を呼び出すだけ(判定には使わない)コードを書いてみた。
AsakusaFW 0.4.0だとDmdlParserはasakusa-dmdl-core-0.4.0.jarに入っているので、通常のJavaプロジェクトならこのjarファイルをビルドパスに加えればよい。
Eclipseプラグイン開発プロジェクトでも、コンパイルだけなら同じくビルドパスに加えればいいが、実際にプラグインをテスト実行するにはビルドパスは関係ない。
プラグインが使用するライブラリー(jarファイル)は、以下のようにして追加する。
これで、テスト実行時の環境にjarファイルが追加される他、ビルドパスにも追加される。
AsakusaFWのjarファイルはMavenのリポジトリーにある。(Windows7の場合、C:\Users\ユーザー\.m2\repository
)
AsakusaFW 0.4.0のDmdlParserの場合は、依存ライブラリーも含めて以下のjarファイルが必要。
DMDLPartitionScannerで、試しにDmdlParserを実行してみる。
import java.io.StringReader; import jp.hishidama.eclipse_plugin.dmdl_editor.Activator; import org.eclipse.core.runtime.ILog; import org.eclipse.core.runtime.Status; import org.eclipse.jface.text.IDocument; import com.asakusafw.dmdl.model.AstScript; import com.asakusafw.dmdl.parser.DmdlParser; import com.asakusafw.dmdl.parser.DmdlSyntaxException;
@Override public void setPartialRange(IDocument document, int offset, int length, String contentType, int partitionOffset) { ILog log = Activator.getDefault().getLog(); { String text = document.get(); DmdlParser parser = new DmdlParser(); try { AstScript ast = parser.parse(new StringReader(text), null); log.log(new Status(Status.INFO, Activator.PLUGIN_ID, "AST=" + ast)); } catch (DmdlSyntaxException e) { log.log(new Status(Status.INFO, Activator.PLUGIN_ID, "parse error", e)); } } super.setPartialRange(document, offset, length, contentType, partitionOffset); }
document.get()で、ファイル全体のテキストが取得できる。
これをDmdlParser#parse()に渡せば解析される。