package classes.utlis { import flash.xml.XMLNode; public class ObjectDumper3 { private static var inProgress; private static var maxLineLength = 100; private static var indent = 0; public static function sayHelloWorld():void { trace("helloWorld"); }; public static function toString(obj) { inProgress = new Array(); return realToString(obj); } private static function realToString(obj) { inProgress.push(obj); var t = typeof(obj); var result; if ((obj is XMLNode)) { result = obj.toString(); } else if (obj is Date) { result = obj.toString(); } else if (t == "object") { var nameList = new Array(); if (obj is Array) { result = "["; // "Array" + ":"; for (var i = 0; i < obj.length; i++) { nameList.push(i); } } else { result = "{"; // "Object" + ":"; for (var q in obj) { nameList.push(q); } nameList.sort(); } var sep = ""; for (var j = 0; j < nameList.length; j++) { var val = obj[nameList[j]]; var show = true; if (show) { result += sep; if (!(obj is Array)) result += nameList[j] + ": "; result += realToString(val); sep = ", `"; } } if (obj is Array) result += "]"; else result += "}"; } else if (t == "function") { result = "function"; } else if (t == "string") { result = "\"" + obj + "\""; } else { result = String(obj); } if (result == "undefined") result = "-"; inProgress.pop(); return replaceAll(result, "`", (result.length < maxLineLength) ? "" : ("\n" + doIndent(indent))); } private static function replaceAll (str : String, from: String, to: String) { var chunks = str.split(from); var result = ""; var sep = ""; for (var i = 0; i < chunks.length; i++) { result += sep + chunks[i]; sep = to; } return result; } private static function doIndent(indent) { var result = ""; for (var i = 0; i < indent; i ++) { result += " "; } return result; } } }