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()に渡せば解析される。