xtext で Syntax Coloring の実装

DSLのエディタプラグインで欲しい機能の1つと言うことで、
キーワード文字列のカラー設定(Syntax Coloring:シンタックス、カラーリング)について書きます。
xtextのサイトのドキュメントを見てもなかなか難しかった…

ポイントは、binding

xtest内部では、GoogleのInjectとかを使って、各モジュールの依存関係をInjectしつつ動いてる様で…ハイライト用のクラスとか用意した時に、どうやって関連つければいいんだろう?って思ったら bind でした。

元々Injectしてるから、後からユーザが作った機能でInjectすれば、モジュールの変更が容易ってことですね。
全然使ったこと無かったから理解するのに苦労した(汗
でも、これ便利だねぇ~。

実際に行ったのは、3つのクラスの作成と、それをbindするためのメソッドをUIモジュールに追加したのみ。

作成する3つのクラスは、xtextのサイトの通りで、以下の3つ。

  • ハイライトの設定項目を決めるクラス(IHighlightingConfigurationの実装)
  • 設定ページの「項目ID」と「項目名」と「デフォルトカラー」の組み合わせを設定する。

  • 意味を元にハイライトを行うためのクラス(ISemanticHighlightingCalculatorの実装)
  • キーワードでは設定できない意味を元にしたカラーを抽出するクラスで、テキストの何処から何処までが、どの様な意味なのか抽出する。
    具体的には、何処から何処までが、どのカラー設定の「項目ID」となるか設定。このクラスは必要なければ作らなくてもOKだと思う。

  • キーワードを抽出するためのAntlrトークンのマッピング用クラス(AbstractAntlrTokenToAttributeIdMapperの派生)
  • どのキーワードがどのカラー設定の「項目ID」になるかのマッピングを行うクラスで、xtextで生成されたantlrのparserを元にキーワードを抽出する。

で、作ったクラスをどうやってエディタと関連付けるか?がbind。

xtextでコードを生成すると、uiのプロジェクトに MyDSLUiModule.java (MyDSL部分はDSL毎にさまざま)みたいなクラスがあって、ここにクラスを設定する。

EventDSLUiModule.java

public Class<? extends IHighlightingConfiguration>
    bindIHighlightingConfiguration() {
    return EventDSLHighlightingConfiguration.class;
}

こんな感じに、”bind” で始まるメソッドで、関連付けるクラスを返すと、それをインスタンス化して使ってくれる。

カテゴリー: RPGMKDT, イベントエディタ | タグ: , | コメントをどうぞ

JavaからRubyオブジェクト操作

イベントエディタはEclipsePluginで、RGSSのデータはRubyのオブジェクト
なので、DSLで読み込んだデータからRGSSで読めるイベントデータにするために
JavaからRubyオブジェクトを作らないとなりません。

いろいろ探すと、JRubyを使う場合に、JavaProxyとかで、ruby世界からJavaライブラリを読んだり操作するのは、結構あるんだけど逆があまり無いみたい。
基本的には、RubyObjectを作って、call系のメソッドを呼べば、Rubyのオブジェクトのメソッドとかも呼べるので、JavaからRuby世界のデータの操作もできるけど…イベントエディタで作るデータ量が多いので、なんとか楽したい。
JavaProxyみたいに、オブジェクトのメソッドがそのまま同じ様に呼べるといいよねぇ~。

前置きが長くなった。
簡単にありそうなんだけど、見つからないので作ってみることに(自転車の車輪作ってた嫌だな~とか思いつつ)。
作ってみると無い理由もなんとなくわかるけど、制限ありであってもいいかも?

RubyProxyと言う感じで、Javaのjava.lang.reflect.Proxyを使って、JavaBeanぽいインタフェースのプロキシクラスを作って…
メソッドを横取りしつつ、RubyObjectのメソッドを呼ぶようなものです。

jp.sourceforge.rgsslib.tools.j2rlib

まぁまぁ、良い感じに出来た。
RGSSに対応したイベントデータのインタフェースが必要だけど、Ruby操作がJavaから簡単にできそうなのはわかった。
たぶん問題ないと思うけど、これで作ったデータをRGSSで実際に読めるように試さないとなぁ~

もう1つ進めて…RGSSのRubyデータから自動的にインタフェースが出来ると楽かも?
インタフェースを用意するのが結構大変そうなので(汗

この辺は…xtextがつかえるかもしれない?

カテゴリー: RPGMKDT, イベントエディタ | タグ: , | コメントをどうぞ

EclipseCon2012 に行って来て xtext を使ってみようかと思った。

去年あたりに少し目にして気になってた xtext のチュートリアルをやってみて、RPGツクールのEclipse Pluginをつくれるな~って思った。

もともとRPGXPDTとかRPGVXDTとか作ってたけど VXAce では、rake を使って同じ様な事ができるから作って無かったです。

ただ、イベントの作成をツクールのエディタでやるのは、Eclipseとかの統合環境になれた福山的にはやっぱりちょっと面倒で…テキストエディタでできないかな~?と、XP/VX の時は、イベントコマンドの書かれたテキストファイルから、イベントを作成するコンパイラとかも作ってたんですよね。

これはこれで使えるんだけど、エディタの方は普通のテキストエディタなので、xtextを使ってRPGツクール用のイベントコマンドDSLを、作ればエディタもEclipse Pluing化できる!ってことで、またプラグイン作成熱があがってきてます。

まずはインストール

Eclipseは、いまのところの最新、INDIGO(JUNOでも良いんだけど…)とりあえずこれに、Subclipse と、DLTK rubyと、xtext を追加した状態。
もともとRGSSの開発に使ってるのに xtext を追加した感じ。(シンプルに)

これから少しづつ作っていってみよう。
いまのところのイメージ

event 001 (0,0) EV001
page
    condition
        switch1     1
        switch2     1
        variable    1
        self_switch A
        item        1
        actor       1
    end
    image test.png
        tile_id   0
        index     0
        direction 上
        pattern   2
    end
end
カテゴリー: RPGMKDT, イベントエディタ | タグ: , | コメントをどうぞ

ActiveRubyのrake

たまには、Rubyのバージョンをアップさせようと、ActiveRubyを再インストールとりあえず1.8.7。RGSSが1.8系なので、同じ系統にしてるけど、いつまでもつのかな~?と…

で、入れたけど、rakeが動かなかった。

ruby.exe: No such file or directory -- C:/Program Files/ruby-1.8/bin/rake (LoadError)

とか言われる。
う~ん。たしかに、そんなファイル無いけど…rake.rb を読みたいんじゃないかね?
ってことで、bin/rake.rbを bin/rakeにコピー。

ふむ、とりあえず動くぽい。なんだろう?(特に検索してないけど…まいっか。うごいてるぽいから)

今は、テンプレートプロジェクトを作るために、ゲーム内のデータベースを修正する必要があって
とても大変だから、LibreOffice のスプレッドシートからxmlを吐かせて、そこから rxdata を作る様なコンパイラを作成中。
RPGツクールXPの基本的なデータは作れるようになった。アクターとかエネミー、システム情報とかアイテム、武器、防具、スキル等々…とりあえずね。
編集しやすいかどうかはあるけど、スプレッドシートで全体をみつつ簡単に編集できるので楽だ。
rakeで使えるようになる予定…

これ進めていくと、ツクールいらなくなるかもね~?

カテゴリー: 未分類 | タグ: | コメントをどうぞ

DQScripts

活動は、続けていますが…リリースがまったくされてないですね。
デモを、久々にダウンロードしたら、ちゃんと動かなかった(汗
RGSS100J.dllとか、古すぎ!作っていたデモ 0.3.1 は、えたーなってしまいました。

あと、ライセンス違反の連絡があって確かめたら公開されてるデモは、LGPLでしたね。
これも初期の頃の物で、RGSS的には、LGPLが合わないと指摘があって、BSDライセンスに変更したけど、それから1度も出してなかったみたい。
う~ん、ダメすぎる。

やっぱりデモをゲームの形で出すポリシーはあきらめ。
ゲームが完成しないと出せなくなくなってしまうってことで、つぎはテンプレートみたいな形にテストとサンプルのプロジェクトで出すことにしよう。
これも時間がかかりそうなので…まずは、前のプロジェクトをリメイクしようかな。

カテゴリー: DQScripts | タグ: | コメントをどうぞ

SourceForge.jp ブログを開始

いろいろ機能が追加されてるので、一通り設定中…
でも、ブログって他にもいっぱい似たようなのあるし困るよねSNSとか
ここのは…やっぱりRGSS-LIB関連のってことになるのかな~?

カテゴリー: 未分類 | コメントをどうぞ