7 public errordomain Error {
14 public class Usage : Object
16 public Gee.ArrayList<string> left;
17 public Gee.ArrayList<string> right;
18 public Usage(Gee.ArrayList<string> ileft, Gee.ArrayList<string> iright)
23 public bool leftHas(string s)
25 for(var i = 0 ; i < this.left.size; i++) {
26 var m = this.left.get(i);
30 if (!m.contains(":")) {
33 var ar = m.split(":");
47 static Gee.HashMap<string,Palete>? cache = null;
49 public static Palete factory(string xtype)
52 cache = new Gee.HashMap<string,Palete>();
54 if (cache.get(xtype) != null) {
55 return cache.get(xtype);
59 cache.set(xtype, new Gtk());
62 cache.set(xtype, new Roo());
65 throw new Error.INVALID_TYPE("invalid argument to Palete factory");
67 return cache.get(xtype);
71 public abstract class Palete : Object
77 public Gee.ArrayList<Usage> map;
79 public Gee.HashMap<string,GirObject> classes; // used in roo..
89 //map : false, // array of mappings left: [] , right : []
91 //items : false, // the tree of nodes.
96 string guessName(JsRender.Node ar) throws Error // turns the object into full name.
98 throw new Error.NEED_IMPLEMENTING("xxx. guessName needs implimenting");
106 public string[] getChildList(string in_rval)
109 if (this.map == null) {
114 var rval = in_rval == "" ? "*top" : in_rval;
116 // should be a bit more than this..
117 // -> it should look for all elements that inherit
119 var rt = new Gee.ArrayList<string>();
120 for (var i = 0; i < this.map.size; i++) {
121 var m = this.map.get(i);
123 if (!m.leftHas(rval)) {
126 print("found LEFT, adding right\n");
128 for(var ii =0; ii < m.right.size; ii++) {
129 var l = m.right.get(ii);
131 if (rt.index_of(l) > -1) {
134 //print("ADD " + string.joinv(", ", ret) + "\n");
141 print ("drop list for %s is:\n%s\n", rval, string.joinv("\n", ret));
142 //console.log("DROP LIST:");
149 public string[] getDropList(string rval)
152 if (this.map == null) {
157 // should be a bit more than this..
158 // -> it should look for all elements that inherit
160 var rt = new Gee.ArrayList<string>();
161 for (var i = 0; i < this.map.size; i++) {
162 var m = this.map.get(i);
164 if (m.right.index_of(rval) < 0) {
167 //print("found RIGHT, adding left\n");
169 for(var ii =0; ii < m.left.size; ii++) {
170 var l = m.left.get(ii);
172 if (rt.index_of(l) > -1) {
175 //print("ADD " + string.joinv(", ", ret) + "\n");
182 print ("drop list for %s is:\n%s\n", rval, string.joinv("\n", ret));
183 //console.log("DROP LIST:");
189 public void saveTemplate (string name, JsRender.Node data)
193 // store it in user's directory..
194 var appdir = GLib.Environment.get_home_dir() + "/.Builder";
197 if (!GLib.FileUtils.test(appdir+ "/" + gn, GLib.FileTest.IS_DIR)) {
198 GLib.File.new_for_path (appdir+ "/" + gn).make_directory ();
201 GLib.FileUtils.set_contents(appdir+ "/" + gn + "/" + name + ".json", data.toJsonString());
206 * list templates - in home directory (and app dir in future...)
207 * @param {String} name - eg. Gtk.Window..
208 * @return {Array} list of templates available..
211 public GLib.List<string> listTemplates (JsRender.Node node)
216 var ret = new GLib.List<string>();
217 var dir= GLib.Environment.get_home_dir() + "/.Builder/" + gn;
218 if (!GLib.FileUtils.test(dir, GLib.FileTest.IS_DIR)) {
225 var f = File.new_for_path(dir);
227 var file_enum = f.enumerate_children(GLib.FileAttribute.STANDARD_DISPLAY_NAME, GLib.FileQueryInfoFlags.NONE, null);
230 while ((next_file = file_enum.next_file(null)) != null) {
231 var n = next_file.get_display_name();
232 if (!Regex.match_simple ("\\.json$", n)) {
235 ret.append( dir + "/" + n);
241 public JsRender.Node? loadTemplate(string path)
244 var pa = new Json.Parser();
245 pa.load_from_file(path);
246 var node = pa.get_root();
248 if (node.get_node_type () != Json.NodeType.OBJECT) {
251 var obj = node.get_object ();
253 var ret = new JsRender.Node();
256 ret.loadFromJson(obj, 1);
257 ret.ref(); // not sure if needed -- but we had a case where ret became uninitialized?
264 public void loadUsageFile (string fname) {
269 print("Palete Load called\n");
271 if (!FileUtils.test (fname, FileTest.EXISTS)) {
272 throw new Error.MISSING_FILE(fname + " not found");
275 FileUtils.get_contents(fname, out raw);
277 var data = raw.split("\n");
279 var cfg = new Gee.ArrayList<Usage>();
280 var left = new Gee.ArrayList<string>();
281 var right = new Gee.ArrayList<string>();
283 for (var i = 0; i < data.length; i++) {
284 var d = data[i].strip();
285 //print("READ " + d + "\n");
289 Regex.match_simple ("^\\s+$", d)
291 Regex.match_simple ("^\\s*/", d)
296 if (Regex.match_simple ("^left:", d)) {
299 cfg.add(new Usage( left, right));
301 left = new Gee.ArrayList<string>();
302 right = new Gee.ArrayList<string>();
305 if (Regex.match_simple ("^right:", d)) {
310 //print("add left: " + d + "\n");
314 //print("add Right: " + d + "\n");
320 cfg.add(new Usage( left, right));
327 public void validateVala(
332 JsRender.JsRender file,
337 print("validate code (%s) %s\n", file.language, code);
341 if (file.language != "vala" ) { // not sure if we need to validate property
344 // file.project , file.path, file.build_module, ""
348 //var cd = new JSCore.ClassDefinitionEmpty();
349 state.valasource.checkFileWithNodePropChange(
363 public Gee.HashMap<int,string> validateJavascript(
367 JsRender.JsRender file,
372 print("validate code (%s) ptype=%s property=%s\n", file.language, ptype, property);
373 var ret = new Gee.HashMap<int,string>();
375 if (file.language != "js") {
378 if (ptype != "listener" && property.length > 0 && property[0] == '|') {
382 //var cd = new JSCore.ClassDefinitionEmpty();
383 //print("TESTING CODE %s\n", code);
385 var testcode = ptype == "file" ? code : "var __aaa___ = " + code;
386 var line = Javascript.singleton().validate(
387 testcode, out errmsg);
390 print("no errors\n");
393 ret.set(line, errmsg);
394 print("got errors\n");
399 public abstract void fillPack(JsRender.Node node,JsRender.Node parent);
400 public abstract void load();
401 public abstract Gee.HashMap<string,GirObject> getPropertiesFor(string ename, string type);
402 public abstract GirObject? getClass(string ename);
404 public abstract bool typeOptions(string fqn, string key, string type, out string[] opts);
405 public abstract List<SourceCompletionItem> suggestComplete(
406 JsRender.JsRender file,
410 string complete_string