Revision: 3234
          http://vexi.svn.sourceforge.net/vexi/?rev=3234&view=rev
Author:   clrg
Date:     2008-12-02 15:47:09 +0000 (Tue, 02 Dec 2008)

Log Message:
-----------
Add some handy formatters for logging objects

Modified Paths:
--------------
    trunk/widgets/org.vexi.widgets/src/vexi/util/string.t

Modified: trunk/widgets/org.vexi.widgets/src/vexi/util/string.t
===================================================================
--- trunk/widgets/org.vexi.widgets/src/vexi/util/string.t       2008-11-28 
05:03:32 UTC (rev 3233)
+++ trunk/widgets/org.vexi.widgets/src/vexi/util/string.t       2008-12-02 
15:47:09 UTC (rev 3234)
@@ -11,5 +11,78 @@
     static.trimleft = function(str) { return 
str.replace(vexi.regexp("/^\s+/",'g'),""); }
     static.trimright = function(str) { return 
str.replace(vexi.regexp("/\s+$/",'g'),""); }
     
+    /** take the string input arr and format it as a string */
+    static.formatArray = function(arr, indent) {
+        if (arguments.length==1) indent = "";
+        var l = arr.length;
+        var ret = ["[\n"];
+        for (var i=0; l>i; i++) {
+            ret[3*i+1] = indent;
+            ret[3*i+2] = static.format(arr[i], indent+". ");
+            ret[3*i+3] = ",\n";
+        }
+        if (ret.length==1) ret[0] = "[ ]";
+        else ret[ret.length-1] = "\n"+indent+"]";
+        return ret.join("");
+    }
+    
+    /** take the object input obj and format it as a string */
+    static.formatObject = function(obj, indent) {
+        if (arguments.length==1) indent = "";
+        var ret = ["{\n"];
+        var i = ret.length;
+        for (var k in obj) {
+            ret[i++] = indent;
+            ret[i++] = "'"+k+"'";
+            ret[i++] = ':';
+            ret[i++] = static.format(obj[k], indent+". ");
+            ret[i++] = ",\n";
+        }
+        if (ret.length==1) ret[0] = "{ }";
+        else ret[ret.length-1] = "\n"+indent+"}";
+        return ret.join("");
+    }
+    
+    /** takes a string and return it as a formatted string */
+    static.formatString = function(str, indent) {
+        if (arguments.length==1) indent = "";
+        var l = str.length;
+        var ret = ['"', str.substring(i,i+72), '"'];
+        for (var i=1; l>(i*72); i++) {
+            ret[3*i] = indent + "\n+ " + '"';
+            ret[3*i+1] = str.substring(i*72,(i+1)*72);
+            ret[3*i+2] = '"';
+        }
+        return ret.join("");
+    }
+    
+    /** takes a VexiScript object and return it as a formatted string */
+    static.format = function(obj, indent) {
+        if (arguments.length==1) indent = "";
+        switch (typeof(obj)) {
+            case "string":
+                return formatString(obj, indent); 
+            case "object":
+                return formatObject(obj, indent);
+            case "array":
+                return formatArray(obj, indent);
+            default:
+                return vexi.js.stringify(obj);
+        }
+    }
+    
+    /** takes a VexiScript object and prints it as a formatted string */
+    static.logObject = function(obj) {
+        vexi.log.info(static.format(obj));
+    }
+    
+    /** takes a VexiScript object and prints it as a formatted string */
+    static.logAndCopyObject = function(obj) {
+        var str = static.format(obj);
+        vexi.log.info(str);
+        vexi.log.info("copying object to clipboard");
+        vexi.ui.clipboard = str;
+    }
+    
     <ui:box />
 </vexi>


This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.

-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
Vexi-svn mailing list
Vexi-svn@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/vexi-svn

Reply via email to