Palete/Gir.vala
[app.Builder.js] / Palete / Gir.vala
1
2 // valac --pkg libxml-2.0 --pkg gee-1.0  Gir.vala -o /tmp/Gir
3 public static int main (string[] args) {
4     
5     var g = new Palete.Gir("/usr/share/gir-1.0/Gtk-3.0.gir");
6     
7     return 0;
8 }
9
10 namespace Palete {
11
12     public class GirObject: Object {
13         public string name;
14         
15         public GirObject(string n) {
16             this.name = n;
17         }
18     
19     }
20     
21     public class Method: Object {
22         
23         public Value return_value = null;
24         
25         public Ctor(string n) {
26             base(n);
27         }
28     
29     }
30     
31     
32     public class Ctor: Method {
33         
34         public Ctor(string n) {
35             base(n);
36         }
37     
38     }
39     public class Params: Object {
40         public Gee.HashMap<string,Param> params;
41         public Ctor(string n) {
42             base(n);
43             this.params = new Gee.HashMap<string,Param>();
44         }
45     
46     }
47     
48     
49     public class Value: Object {
50         public string type;
51         public Ctor(string n) {
52             this.type= "";
53             base(n);
54         }
55     
56     }
57     
58     
59     public class Cls: GirObject {
60         public  string parent;
61         public GLib.List<string> implements;
62         public Lib.List<Ctor> ctors;
63         public Gee.HashMap<string,Method> methods;
64         
65         public Cls(string n) {
66             base(n);
67             this.name = n;
68             this.implements = new GLib.List<string>();
69             this.ctors = new GLib.List<Ctor>();
70             this.methods =new ee.HashMap<string,Method>();
71         }
72     
73     }
74     
75     
76     
77     public class Gir : GirObject {
78     
79         string name; // filename..
80         string  package;
81         
82         Gee.Hashmap<string,string> includes;
83         Gee.Hashmap<string,Cls> classes;
84         
85         //Gee.Hashmap<string,what> nodes;
86     
87         public Gir (string file)
88         {
89             base(file);
90             //this.nodes = new Gee.Hashmap<string,what>();
91             this.includes = new Gee.Hashmap<string,string>();
92             
93             var doc = Xml.Parser.parse_file (file);
94             var root = doc->get_root_element();
95             this.walk( root, this );
96             delete doc;
97         
98         }
99         public void walk(Xml.Node* element, GirObject? parent)
100         {
101             var n = element->get_prop("name");
102             
103             print(parent.name + "==>" + n +"\n");
104             switch (element->name) {
105                 case "repository":
106                     
107                     break;
108                 case "include":
109                     ((Gir)parent).includes.set(n, element->get_prop("version"));
110                     break
111                 case "package":
112                     ((Gir)parent).package = n;
113                     break;
114                 case "c:include":
115                     break;
116                 
117                 case "namespace":
118                     ((Gir)parent).name = n;
119                     break;
120                 
121                 case "alias":
122                     return;
123                     break; // not handled..
124                 
125                 case "class":
126                     var c = new Cls(parent.name + "." + n);
127                     ((Gir)parent).classes.set(parent.name + "." + n, c);
128                     c.parent = element->get_prop("parent");
129                     parent = c;
130                     break;
131                 
132                 case "doc":
133                     break;
134                 
135                 case "implements":
136                     ((Cls)parent).implements.add(n);
137                     break;
138                 
139                 case "constructor":
140                     var c = new Ctor(n);
141                     ((Cls)parent).ctors.add(c);
142                     parent  = c;
143                     break;
144                 case "return_value":
145                     var c = new Value("return-value");
146                     ((Method)parent).return_value = c;
147                     parent =c;
148                     break;
149                 
150                 case "type":
151                     ((Value)parent).type = n;
152                     return; // no children?
153                     break;
154                 
155                 case "method":
156                     var c = new Method(n);
157                     ((Cls)parent).methods.set(n,c);
158                     parent = c;
159                     break;
160                 
161                 case "parameters":
162                     
163                 
164                 
165                 
166             }
167             /*
168             if (element->name == "signal") {
169                 path += ".signal";
170             }
171             
172             
173             if (element->name == "return-value") {
174                 path += ".return-value";
175             }
176             print(path + ":"  + element->name + "\n");
177             */
178             //var d =   getAttribute(element,'doc');
179             //if (d) {
180              //   Seed.print(path + ':' + d);
181             //    ret[path] = d;
182             //}
183             for (Xml.Node* iter = element->children; iter != null; iter = iter->next) {
184                 if (iter->type == Xml.ElementType.TEXT_NODE) {
185                     continue;
186                 }
187                 this.walk(iter, parent);
188             }
189             
190         }
191         
192     
193     
194     } 
195         
196 }