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ファイルを見て、雰囲気をつかまないと何もできそうにないな。