2 // valac --pkg libxml-2.0 --pkg gee-1.0 Gir.vala -o /tmp/Gir
3 public static int main (string[] args) {
5 var g = new Palete.Gir("/usr/share/gir-1.0/Gtk-3.0.gir");
12 public class GirObject: Object {
15 public GirObject(string n) {
21 public class Method: Object {
23 public Value return_value = null;
25 public Ctor(string n) {
32 public class Ctor: Method {
34 public Ctor(string n) {
39 public class Params: Value {
40 public Gee.HashMap<string,Param> params;
41 public Ctor(string n) {
43 this.params = new Gee.HashMap<string,Param>();
49 public class Value: Object {
51 public Ctor(string n) {
58 public class Param: Value {
59 public Ctor(string n) {
66 public class Cls: GirObject {
68 public GLib.List<string> implements;
69 public Lib.List<Ctor> ctors;
70 public Gee.HashMap<string,Method> methods;
72 public Cls(string n) {
75 this.implements = new GLib.List<string>();
76 this.ctors = new GLib.List<Ctor>();
77 this.methods =new ee.HashMap<string,Method>();
84 public class Gir : GirObject {
86 public string name; // filename..
87 public string package;
89 public Gee.Hashmap<string,string> includes;
90 public Gee.Hashmap<string,Cls> classes;
92 //Gee.Hashmap<string,what> nodes;
94 public Gir (string file)
97 //this.nodes = new Gee.Hashmap<string,what>();
98 this.includes = new Gee.Hashmap<string,string>();
100 var doc = Xml.Parser.parse_file (file);
101 var root = doc->get_root_element();
102 this.walk( root, this );
106 public void walk(Xml.Node* element, GirObject? parent)
108 var n = element->get_prop("name");
110 print(parent.name + "==>" + n +"\n");
111 switch (element->name) {
116 ((Gir)parent).includes.set(n, element->get_prop("version"));
119 ((Gir)parent).package = n;
125 ((Gir)parent).name = n;
130 break; // not handled..
133 var c = new Cls(parent.name + "." + n);
134 ((Gir)parent).classes.set(parent.name + "." + n, c);
135 c.parent = element->get_prop("parent");
143 ((Cls)parent).implements.add(n);
148 ((Cls)parent).ctors.add(c);
152 var c = new Value("return-value");
153 ((Method)parent).return_value = c;
158 ((Value)parent).type = n;
159 return; // no children?
163 var c = new Method(n);
164 ((Cls)parent).methods.set(n,c);
169 var c = new Params(n);
170 ((Method)parent).params = c;
174 case "instance-parameter":
175 var c = new Param(n);
176 ((Params)parent).params.set(n,c);
183 if (element->name == "signal") {
188 if (element->name == "return-value") {
189 path += ".return-value";
191 print(path + ":" + element->name + "\n");
193 //var d = getAttribute(element,'doc');
195 // Seed.print(path + ':' + d);
198 for (Xml.Node* iter = element->children; iter != null; iter = iter->next) {
199 if (iter->type == Xml.ElementType.TEXT_NODE) {
202 this.walk(iter, parent);