+
+ // Gir - is the libvala based version -
+
+
public class Gir : GirObject {
- public static Gee.HashMap<string,Gir> cache = null;
//Gee.Hashmap<string,what> nodes;
+
+ public Gir (string ns)
+ {
+ base("Package",ns);
+
+ }
+
+ public string doc(string what)
+ {
+ var ar = what.split(".");
+ var cls = this.classes.get(ar[1]);
+ if (ar.length == 2) {
+ return cls.doctxt != null ? cls.doctxt : "";
+ }
+ // return the property.. by default..
+ var pr = cls.props.get(ar[2]);
+ return pr.doctxt != null ? pr.doctxt : "";
+
+ }
+ /**
+ * since constructors from the API from gir or vala do not map
+ * correctly to properties, we have an Gir.overides file in resources
+ * that changes the ctor's for some elements.
+ *
+ */
+
+ public static void checkParamOverride(GirObject c)
+ {
+
+ print("checkParamOverride :check %s\n", c.name);
+ var parset = c.gparent;
+ if (parset == null || parset.nodetype != "Paramset") {
+ print("skip parent not Paramset\n");
+ return;
+ }
+ var method = parset.gparent;
+ // we can do this for pack methods..
+ if (method == null) {
+ print("skip parent.parent is null\n");
+ return;
+ }
+ var cls = method.gparent;
+ if (cls == null || cls.nodetype != "Class") {
+ //print("skip parent.parent.parent not Class\n");
+ return;
+ }
+
+
+
+ c.name = fetchOverride( cls.name, method.name, c.name);
+ }
+ public static bool overrides_loaded = false;
+ public static Gee.HashMap<string,string> overrides;
+
+ public static string fetchOverride( string cls, string method, string param)
+ {
+ // overrides should be in a file Gir.overides
+ // in that "Gtk.Label.new.str" : "label"
+ loadOverrides();
+ var key = "%s.%s.%s".printf(cls,method,param);
+ //print("Chekcing for key %s\n", key);
+ if (!overrides.has_key(key)) {
+ return param;
+ }
+ return overrides.get(key);
+ }
+
+ public static void loadOverrides(bool force = false)
+ {
+ if (overrides_loaded && ! force) {
+ return;
+ }
+
+ var pa = new Json.Parser();
+ pa.load_from_file(BuilderApplication.configDirectory() + "/resources/Gir.overides");
+ var node = pa.get_root();
+
+ if (node.get_node_type () != Json.NodeType.OBJECT) {
+ throw new GirError.INVALID_FORMAT ("Error loading gir.overides : Unexpected element type %s", node.type_name ());
+ }
+ overrides = new Gee.HashMap<string,string>();
+
+
+ var obj = node.get_object ();
- public static Gir? factory(string ns) {
+
+ obj.foreach_member((o , key, value) => {
+ //print(key+"\n");
+ var v = obj.get_string_member(key);
+ overrides.set(key, v);
+ });
+
+ overrides_loaded = true;
+
+
+
+ }
+
+ /**
+ * == all static below here...
+ *
+ */
+ public static Gee.HashMap<string,Gir> cache = null;
+
+
+ public static Gir? factory(string ns)
+ {
if (cache == null) {
cache = new Gee.HashMap<string,Gir>();
+ var a = new VapiParser( );
+ a.create_valac_tree();
+
}
var ret = cache.get(ns);
+
+
+ /*
if (ret == null) {
var add = new Gir(ns);
+
cache.set(ns, add);
var iter = add.classes.map_iterator();
ret = cache.get(ns);
}
+ */
+ if (ret != null && !ret.is_overlaid) {
+ ret.is_overlaid = true;
+ var iter = ret.classes.map_iterator();
+ while(iter.next()) {
+ iter.get_value().overlayParent();
+ }
+ // loop again and add the ctor properties.
+ iter = ret.classes.map_iterator();
+ while(iter.next()) {
+ iter.get_value().overlayCtorProperties();
+ }
+
+
+ }
+
+
return ret;
}
-
- public Gir (string ns)
- {
- base("Package",ns);
- }
- public string doc(string what)
- {
- var ar = what.split(".");
- var cls = this.classes.get(ar[1]);
- if (ar.length == 2) {
- return cls.doctxt != null ? cls.doctxt : "";
- }
- // return the property.. by default..
- var pr = cls.props.get(ar[2]);
- return pr.doctxt != null ? pr.doctxt : "";
-
- }