JsRender/Gtk.vala.c
[app.Builder.js] / Palete / Palete.vala
index 9b70972..983fb17 100644 (file)
@@ -1,29 +1,51 @@
 
 namespace Palete 
 {
-    public errordomain Error {
-        INVALID_TYPE,
-        NEED_IMPLEMENTING,
+
+
+       public errordomain Error {
+               INVALID_TYPE,
+               NEED_IMPLEMENTING,
                MISSING_FILE,
                INVALID_VALUE
-    }
+       }
 
        public class Usage : Object 
        {
-               public string[] left;
-               public string[] right;
-               public Usage(string[] ileft, string[] iright)
+               public Gee.ArrayList<string> left;
+               public Gee.ArrayList<string> right;
+               public Usage(Gee.ArrayList<string> ileft, Gee.ArrayList<string> iright)
                {
-                       this.left = ileft;;
+                       this.left = ileft;
                        this.right=  iright;
                }
+               public bool leftHas(string s)
+               {
+                       for(var i = 0 ; i < this.left.size; i++) {
+                               var m = this.left.get(i);
+                               if (s == m) {
+                                       return true;
+                               }
+                               if (!m.contains(":")) {
+                                       continue;
+                               }
+                               var ar = m.split(":");
+                               if (ar[0] == s) {
+                                       return true;
+                               }
+                       }
+                       return false;
+                               
+               }
+
+               
        }
 
        
 
     static Gee.HashMap<string,Palete>? cache = null;
     
-       public static Palete factory(string xtype)
+    public static Palete factory(string xtype)
     {
         if (cache == null) {
             cache = new Gee.HashMap<string,Palete>();
@@ -35,8 +57,8 @@ namespace Palete
             case "Gtk":
                 cache.set(xtype, new Gtk());
                 break;
-            //case "Roo":
-            //    cache.set(xtype, new Roo());
+            case "Roo":
+                cache.set(xtype, new Roo());
                 break;
             default:
                 throw new Error.INVALID_TYPE("invalid argument to Palete factory");
@@ -51,12 +73,12 @@ namespace Palete
        
         public string name;
 
-               public GLib.List<Usage>? map;
+       public Gee.ArrayList<Usage> map;
                
         public Palete()
         {
             // nothing?
-                       this.map = null;
+               this.map = null;
         }
         
         
@@ -79,7 +101,7 @@ namespace Palete
          * 
          */
         /*
-        gatherList: function (existing) {
+        listChildren: function (existing) {
             existing = existing || [];
            // existing.push('*top'); // always have top
             var ret  = []; 
@@ -119,40 +141,89 @@ namespace Palete
             
         },
         */
-        public string[] getDropList(string rval)
+       
+
+           
+       public string[] getChildList(string in_rval)
         {
 
-                       if (this.map == null) {
-                               this.load();
+               if (this.map == null) {
+                       this.load();
+               }
+               // empty == *top
+               
+               var rval = in_rval == "" ? "*top" : in_rval; 
+                               
+                               // should be a bit more than this..
+                       // -> it should look for all elements that inherit 
+               string[] ret = {};
+               var rt = new Gee.ArrayList<string>();
+               for (var i = 0; i < this.map.size; i++) {
+                       var m = this.map.get(i);
+                               
+                       if (!m.leftHas(rval)) {
+                               continue;
                        }
+                       print("found LEFT, adding right\n");
+               
+                       for(var ii =0; ii < m.right.size; ii++) {
+                               var l = m.right.get(ii);
+                                       
+                               if (rt.index_of(l) > -1) {
+                                   continue;
+                               }
+                               //print("ADD " + string.joinv(", ", ret) + "\n");
+                               ret += l;
+                               rt.add(l);
+                       }
+                               
+                
+               }
+               print ("drop list for %s is:\n%s\n", rval, string.joinv("\n", ret));
+               //console.log("DROP LIST:");
+               //console.dump(ret);
+               return ret;
+            
+        }
+
+           
+        public string[] getDropList(string rval)
+        {
+
+               if (this.map == null) {
+                       this.load();
+               }
 
                                
-                       // should be a bit more than this..
+                               // should be a bit more than this..
                        // -> it should look for all elements that inherit 
-            string[] ret = {};
-                       var rt = new GLib.List<string>();
-                       for (var i = 0; i < this.map.length(); i++) {
-                               var m = this.map.nth_data(i);
+               string[] ret = {};
+               var rt = new Gee.ArrayList<string>();
+               for (var i = 0; i < this.map.size; i++) {
+                       var m = this.map.get(i);
                                
-                if (m.right.index(rval) > -1) {
-                                       print("found RIGHT, adding left\n");
+                       if (m.right.index_of(rval) < 0) {
+                               continue;
+                       }
+                       //print("found RIGHT, adding left\n");
+               
+                       for(var ii =0; ii < m.left.size; ii++) {
+                               var l = m.left.get(ii);
                                        
-                                       for(var ii =0; ii < m.left.length(); ii++) {
-                               var l = m.left.nth_data(ii);
-                                               
-                        if (rt.index(l) > -1) {
-                            continue;
-                        }
-                                               print("ADD " + string.joinv(", ", ret) + "\n");
-                        ret += l;
-                                               rt.append(l);
-                    }
-                }
+                               if (rt.index_of(l) > -1) {
+                                   continue;
+                               }
+                               //print("ADD " + string.joinv(", ", ret) + "\n");
+                               ret += l;
+                               rt.add(l);
+                       }
+                               
                 
-            }
-            //console.log("DROP LIST:");
-            //console.dump(ret);
-            return ret;
+               }
+                print ("drop list for %s is:\n%s\n", rval, string.joinv("\n", ret));
+               //console.log("DROP LIST:");
+               //console.dump(ret);
+               return ret;
             
         }
         /**
@@ -220,18 +291,18 @@ namespace Palete
         public  GLib.List<string> listTemplates (JsRender.Node node)
         {
             
-            var gn = node.fqn();
+               var gn = node.fqn();
             
-            var ret = new GLib.List<string>();
-            var dir= GLib.Environment.get_home_dir() + "/.Builder/" + gn;
-                       if (!GLib.FileUtils.test(dir, GLib.FileTest.IS_DIR)) {
+               var ret = new GLib.List<string>();
+               var dir= GLib.Environment.get_home_dir() + "/.Builder/" + gn;
+               if (!GLib.FileUtils.test(dir, GLib.FileTest.IS_DIR)) {
                        return ret;
-                       }
+               }
                        
 
 
                                    
-                       var f = File.new_for_path(dir);
+               var f = File.new_for_path(dir);
         
             var file_enum = f.enumerate_children(GLib.FileAttribute.STANDARD_DISPLAY_NAME, GLib.FileQueryInfoFlags.NONE, null);
              
@@ -250,23 +321,111 @@ namespace Palete
         public JsRender.Node? loadTemplate(string path)
         {
 
-                   var pa = new Json.Parser();
-            pa.load_from_file(path);
-            var node = pa.get_root();
-            
-            if (node.get_node_type () != Json.NodeType.OBJECT) {
-                       return null;
-               }
-            var obj = node.get_object ();
-             
-            var ret = new JsRender.Node();
-            ret.loadFromJson(obj);
-            return ret;
+               var pa = new Json.Parser();
+               pa.load_from_file(path);
+               var node = pa.get_root();
+
+               if (node.get_node_type () != Json.NodeType.OBJECT) {
+                       return null;
+               }
+               var obj = node.get_object ();
+
+               var ret = new JsRender.Node();
+
+
+               ret.loadFromJson(obj, 1);
+               ret.ref(); // not sure if needed -- but we had a case where ret became uninitialized?
+               
+               return ret;
+        }
+          public   void  loadUsageFile (string fname) {
+
+
+
+                       
+               print("Palete Load called\n");
+               string raw;
+               if (!FileUtils.test (fname, FileTest.EXISTS)) {
+                       throw new Error.MISSING_FILE(fname + " not found");
+               }
+       
+               FileUtils.get_contents(fname, out raw);
+             // print(data);
+               var data  = raw.split("\n");
+               var state = 0;
+               var cfg = new Gee.ArrayList<Usage>();
+               var left = new Gee.ArrayList<string>();
+               var right = new Gee.ArrayList<string>();
+       
+               for (var i = 0; i < data.length; i++) {
+                       var d = data[i].strip();
+                       //print("READ " + d + "\n");
+                       if (
+                               d.length < 1
+                           ||
+                            Regex.match_simple ("^\\s+$", d)
+                           ||
+                               Regex.match_simple ("^\\s*/", d)
+                    ){
+                           continue;
+                       }
+                               
+                       if (Regex.match_simple ("^left:", d)) { 
+                           state = 1;
+                           if (left.size > 0 ){
+                               cfg.add(new Usage( left, right));
+                                               }
+                           left = new Gee.ArrayList<string>();
+                                       right = new Gee.ArrayList<string>();
+                           continue;
+                       }
+                        if (Regex.match_simple ("^right:", d)) { 
+                           state = 2;
+                           continue;
+                       }
+                       if (state == 1) {
+                                               //print("add left: " + d + "\n");
+                           left.add(d);
+                           continue;
+                       }
+                                       //print("add Right: " + d + "\n");
+                       right.add(d);
+                       //Seed.quit();
+                      
+               }
+               if (left.size > 0 ){
+                       cfg.add(new Usage( left, right));
+               }
+               this.map = cfg;
+
         }
-            
+
+       
+           
+       public string validateCode(string code, string language) 
+       {   
+
+               print("validate code (%s) %s\n", language, code);
+               if (language == "javascript") {
+                       //var cd = new JSCore.ClassDefinitionEmpty();
+                       string res;
+//                     var ret = Javascript.singleton().validate(code, out res);
+//                     print ("ret = %s\n%s" , ret ? "OK" : "BAD", res);
+                       
+                       return "";
+               }
+
+               print ("not javascript\n");
+               return "";
+
+       }
+
+           
+          
         public abstract void fillPack(JsRender.Node node,JsRender.Node parent);
-               public abstract void load();
-               
+       public abstract void load();
+       public abstract Gee.HashMap<string,GirObject> getPropertiesFor(string ename, string type);
+       public abstract GirObject? getClass(string ename);
     }