- // better stringify version, doesn't annoyingly print nested arrays with
- // a newline after every, single, element (i.e. tilemap)
- // parentObj assumed to be omitted in origninal call, should be null otherwise
- // indentLevel assumed to be omitted in original call
- // skipFirstIndent assumed not given, probably shouldn't ever be given
- function stringify(obj, indentChar, parentObj, indentLevel, skipInitialIndent) {
- parentObj = parentObj ? parentObj : null;
- indentLevel = indentLevel ? indentLevel : 0;
- console.log(typeof(obj), obj);
- var s = "";
- if (!skipInitialIndent)
- s += indentChar.repeat(indentLevel);
- if (obj instanceof Array) {
- s += "["
- if (obj.length < 1) {
- s += "]";
- } else if (!parentObj || !(parentObj instanceof Array)) {
- s += "\n";
- for (var i = 0; i < obj.length; i += 1) {
- s += "" + stringify(obj[i], indentChar.repeat(indentLevel + 0), obj, indentLevel + 1) + ",\n";
- }
- s = s.substring(0, s.length - 2); // strip trailing comma
- s += "\n" + indentChar.repeat(indentLevel) + "]";
- } else {
- for (var i = 0; i < obj.length; i += 1) {
- s += stringify(obj[i], "", obj, indentLevel + 1) + ", ";
- }
- s = s.substring(0, s.length - 2); // strip trailing comma
- s += "]"
- }
- } else if (obj instanceof Object) {
- s += "{\n";
- for (var key in obj) {
- s += indentChar.repeat(indentLevel + 1) + '"' + key + '": ' + stringify(obj[key], indentChar, obj, indentLevel + 1, true) + ",\n";
- }
- s = s.substring(0, s.length - 2); // strip trailing comma
- s += "\n" + indentChar.repeat(indentLevel) + "}";
- } else if (typeof obj === "number") {
- s += "" + obj;
- console.log("??");
- } else if (typeof obj === "string") {
- s += JSON.stringify(obj);
- }
- // unknown type, use default stringify logic
- else {
- s += JSON.stringify(obj);
- }
- return s;
- }