girファイルの解析 seed 編
最近になって、seedでlibxmlが使えることがわかった。なので、わざわざpythonなんかで記述しなくても、seedでseed用のファイルが扱える。チュートリアルとサンプルもあるので、そちらを見たほうが良いでしょう。
http://live.gnome.org/Seed/Tutorial/libxml
http://git.gnome.org/browse/seed-examples/tree/xml
girファイルはcontentsが無く、全部attributeなので、getAttribute("name")を使ってゴニョゴニョしたのが以下のソース。
#! /usr/bin/env seed var xml = imports.libxml; var doc = xml.parseFile(Seed.argv[2]); function print_element (element) { var child = element.children; while (child){ if (child.type == "element") { print(child.name + " : " + child.getAttribute("name")); print_element (child); } child = child.next; } } print_element (doc.root);
使い方は、
$ ./gir_list.js /usr/share/gir-1.0/Gtk-2.0.gir
こんな感じで、適当に | grep "^class" なんてすると、クラスがわかる。
なんとなく、girファイルというか、girディレクトリのビュアーをJavaScriptで書いてみたくなった。
GIOを使って、Gio.file_new_for_path("/usr/share/gir-1.0");なんかして、enumerate_children()すればgirファイルのリストができる。それをGtkTreeなんかで表示して、クリックするとそれらのgirファイルをxml.parseFile()して、別のwidgetにツリー構造で表示してみたい。
と、簡単に書いたけど、JavaScriptも素人だし、GtkWidgetを使ったアプリも素人だし、libxml2も素人なので、勉強時間が必要だな〜。
そのまえに、seed-2.30.0/libseed/seed-builtins.c を見て、Seed.hogeで使えるメソッドを調べたり、seed-2.30.0/extensions 以下のjsファイルを見て、雰囲気をつかまないと何もできそうにないな。