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 string nodetype;
16 public GirObject paramset;
17 public string package;
18 public GirObject return_value = null;
19 public bool is_instance;
22 public Gee.HashMap<string,GirObject> params;
23 public GLib.List<string> implements;
24 public GLib.List<GirObject> ctors;
25 public Gee.HashMap<string,GirObject> methods;
26 public Gee.HashMap<string,string> includes;
27 public Gee.HashMap<string,GirObject> classes;
28 public Gee.HashMap<props,GirObject> classes;
30 public GirObject(string nodetype, string n) {
31 this.nodetype = nodetype;
33 this.params = new Gee.HashMap<string,GirObject>();
35 this.is_array = false;
36 this.is_instance = false;
37 this.implements = new GLib.List<string>();
38 this.ctors = new GLib.List<GirObject>();
39 this.methods =new Gee.HashMap<string,GirObject>();
40 this.includes = new Gee.HashMap<string,string>();
41 this.classes= new Gee.HashMap<string,GirObject>();
42 this.props= new Gee.HashMap<string,GirObject>();
51 public class Gir : GirObject {
53 public string package;
56 //Gee.Hashmap<string,what> nodes;
58 public Gir (string file)
61 //this.nodes = new Gee.Hashmap<string,what>();
63 var doc = Xml.Parser.parse_file (file);
64 var root = doc->get_root_element();
65 this.walk( root, (GirObject) this );
69 public void walk(Xml.Node* element, GirObject? parent)
71 var n = element->get_prop("name");
75 print(element->name + " (" + parent.name + "==>" + n +")\n");
76 switch (element->name) {
81 parent.includes.set(n, element->get_prop("version"));
97 //break; // not handled..
100 var c = new GirObject("Class", parent.name + "." + n);
101 parent.classes.set(parent.name + "." + n, c);
102 c.parent = element->get_prop("parent");
110 parent.implements.append(n);
114 var c = new GirObject("Ctor",n);
115 parent.ctors.append(c);
116 parent = (GirObject)c;
120 var c = new GirObject("Return", "return-value");
121 parent.return_value = c;
122 parent = (GirObject)c;
125 case "virtual-method":
130 return; // no children?
134 var c = new GirObject("Method",n);
135 parent.methods.set(n,c);
140 var c = new GirObject("Paramset",n);
145 case "instance-parameter":
146 var c = new GirObject("Param",n);
147 c.is_instance = true;
148 parent.params.set(n,c);
153 var c = new GirObject("Param",n);
154 parent.params.set(n,c);
159 var c = new GirObject("Function",n);
160 parent.methods.set(n,c);
165 parent.is_array = true;
170 print("UNHANDLED" + element->name +"\n");
174 if (element->name == "signal") {
179 if (element->name == "return-value") {
180 path += ".return-value";
182 print(path + ":" + element->name + "\n");
184 //var d = getAttribute(element,'doc');
186 // Seed.print(path + ':' + d);
189 for (Xml.Node* iter = element->children; iter != null; iter = iter->next) {
190 if (iter->type == Xml.ElementType.TEXT_NODE) {
193 this.walk(iter, parent);