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: Object {
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) {
59 public class Cls: GirObject {
61 public GLib.List<string> implements;
62 public Lib.List<Ctor> ctors;
63 public Gee.HashMap<string,Method> methods;
65 public Cls(string n) {
68 this.implements = new GLib.List<string>();
69 this.ctors = new GLib.List<Ctor>();
70 this.methods =new ee.HashMap<string,Method>();
77 public class Gir : GirObject {
79 string name; // filename..
82 Gee.Hashmap<string,string> includes;
83 Gee.Hashmap<string,Cls> classes;
85 //Gee.Hashmap<string,what> nodes;
87 public Gir (string file)
90 //this.nodes = new Gee.Hashmap<string,what>();
91 this.includes = new Gee.Hashmap<string,string>();
93 var doc = Xml.Parser.parse_file (file);
94 var root = doc->get_root_element();
95 this.walk( root, this );
99 public void walk(Xml.Node* element, GirObject? parent)
101 var n = element->get_prop("name");
103 print(parent.name + "==>" + n +"\n");
104 switch (element->name) {
109 ((Gir)parent).includes.set(n, element->get_prop("version"));
112 ((Gir)parent).package = n;
118 ((Gir)parent).name = n;
123 break; // not handled..
126 var c = new Cls(parent.name + "." + n);
127 ((Gir)parent).classes.set(parent.name + "." + n, c);
128 c.parent = element->get_prop("parent");
136 ((Cls)parent).implements.add(n);
141 ((Cls)parent).ctors.add(c);
145 var c = new Value("return-value");
146 ((Method)parent).return_value = c;
151 ((Value)parent).type = n;
152 return; // no children?
156 var c = new Method(n);
157 ((Cls)parent).methods.set(n,c);
168 if (element->name == "signal") {
173 if (element->name == "return-value") {
174 path += ".return-value";
176 print(path + ":" + element->name + "\n");
178 //var d = getAttribute(element,'doc');
180 // Seed.print(path + ':' + d);
183 for (Xml.Node* iter = element->children; iter != null; iter = iter->next) {
184 if (iter->type == Xml.ElementType.TEXT_NODE) {
187 this.walk(iter, parent);