e16c0a8a7b8a65853ac62c6cc8e4dbdf5dd89a59
[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         public string type;
15         public string nodetype;
16         public GirObject paramset;
17         public string  package;
18         public GirObject return_value = null;
19         public bool is_instance;
20         public bool is_array;
21         public  string parent;
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;
29        
30         public GirObject(string nodetype, string n) {
31             this.nodetype = nodetype;
32             this.name = n;
33              this.params = new Gee.HashMap<string,GirObject>();
34             this.type = "";
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>();
43         }
44     
45     }
46     
47      
48     
49     
50     
51     public class Gir : GirObject {
52     
53          public string  package;
54         
55         
56         //Gee.Hashmap<string,what> nodes;
57     
58         public Gir (string file)
59         {
60             base("Package",file);
61             //this.nodes = new Gee.Hashmap<string,what>();
62              
63             var doc = Xml.Parser.parse_file (file);
64             var root = doc->get_root_element();
65             this.walk( root, (GirObject) this );
66             delete doc;
67         
68         }
69         public void walk(Xml.Node* element, GirObject? parent)
70         {
71             var n = element->get_prop("name");
72             if (n == null) {
73                 n = "";
74             }
75             print(element->name + " ("  + parent.name + "==>" + n +")\n");
76             switch (element->name) {
77                 case "repository":
78                     break;
79                 
80                 case "include":
81                     parent.includes.set(n, element->get_prop("version"));
82                     break;
83                 
84                 case "package":
85                     parent.package = n;
86                     break;
87                 
88                 case "c:include":
89                     break;
90                 
91                 case "namespace":
92                     parent.name = n;
93                     break;
94                 
95                 case "alias":
96                     return;
97                     //break; // not handled..
98                 
99                 case "class":
100                     var c = new GirObject("Class", parent.name + "." + n);
101                     parent.classes.set(parent.name + "." + n, c);
102                     c.parent = element->get_prop("parent");
103                     parent =  c;
104                     break;
105                 
106                 case "doc":
107                     return;
108                 
109                 case "implements":
110                     parent.implements.append(n);
111                     break;
112                 
113                 case "constructor":
114                     var c = new GirObject("Ctor",n);
115                     parent.ctors.append(c);
116                     parent  = (GirObject)c;
117                     break;
118                 
119                 case "return-value":
120                     var c = new GirObject("Return", "return-value");
121                     parent.return_value = c;
122                     parent = (GirObject)c;
123                     break;
124                 
125                 case "virtual-method":
126                     return;
127                 
128                 case "type":
129                     parent.type = n;
130                     return; // no children?
131                     //break;
132                 
133                 case "method":
134                     var c = new GirObject("Method",n);
135                     parent.methods.set(n,c);
136                     parent = c;
137                     break;
138                 
139                 case "parameters":
140                     var c = new GirObject("Paramset",n);
141                     parent.paramset = c;
142                     parent =  c;
143                     break;
144                 
145                 case "instance-parameter":
146                     var c = new GirObject("Param",n);
147                     c.is_instance = true;
148                     parent.params.set(n,c);
149                     parent = c;
150                     break;
151                 
152                 case "parameter":
153                     var c = new GirObject("Param",n);
154                     parent.params.set(n,c);
155                     parent = c;
156                     break;
157                 
158                 case "function":
159                     var c = new GirObject("Function",n);
160                     parent.methods.set(n,c);
161                     parent = c;
162                     break;
163                 
164                 case "array":
165                     parent.is_array = true;
166                      
167                     break;
168                 
169                 default:
170                     print("UNHANDLED" + element->name +"\n");
171                     return;
172             }
173             /*
174             if (element->name == "signal") {
175                 path += ".signal";
176             }
177             
178             
179             if (element->name == "return-value") {
180                 path += ".return-value";
181             }
182             print(path + ":"  + element->name + "\n");
183             */
184             //var d =   getAttribute(element,'doc');
185             //if (d) {
186              //   Seed.print(path + ':' + d);
187             //    ret[path] = d;
188             //}
189             for (Xml.Node* iter = element->children; iter != null; iter = iter->next) {
190                 if (iter->type == Xml.ElementType.TEXT_NODE) {
191                     continue;
192                 }
193                 this.walk(iter, parent);
194             }
195             
196         }
197         
198     
199     
200     } 
201         
202 }