1. // better stringify version, doesn't annoyingly print nested arrays with
  2. // a newline after every, single, element (i.e. tilemap)
  3. // parentObj assumed to be omitted in origninal call, should be null otherwise
  4. // indentLevel assumed to be omitted in original call
  5. // skipFirstIndent assumed not given, probably shouldn't ever be given
  6. function stringify(obj, indentChar, parentObj, indentLevel, skipInitialIndent) {
  7. parentObj = parentObj ? parentObj : null;
  8. indentLevel = indentLevel ? indentLevel : 0;
  9. console.log(typeof(obj), obj);
  10. var s = "";
  11. if (!skipInitialIndent)
  12. s += indentChar.repeat(indentLevel);
  13. if (obj instanceof Array) {
  14. s += "["
  15. if (obj.length < 1) {
  16. s += "]";
  17. } else if (!parentObj || !(parentObj instanceof Array)) {
  18. s += "\n";
  19. for (var i = 0; i < obj.length; i += 1) {
  20. s += "" + stringify(obj[i], indentChar.repeat(indentLevel + 0), obj, indentLevel + 1) + ",\n";
  21. }
  22. s = s.substring(0, s.length - 2); // strip trailing comma
  23. s += "\n" + indentChar.repeat(indentLevel) + "]";
  24. } else {
  25. for (var i = 0; i < obj.length; i += 1) {
  26. s += stringify(obj[i], "", obj, indentLevel + 1) + ", ";
  27. }
  28. s = s.substring(0, s.length - 2); // strip trailing comma
  29. s += "]"
  30. }
  31. } else if (obj instanceof Object) {
  32. s += "{\n";
  33. for (var key in obj) {
  34. s += indentChar.repeat(indentLevel + 1) + '"' + key + '": ' + stringify(obj[key], indentChar, obj, indentLevel + 1, true) + ",\n";
  35. }
  36. s = s.substring(0, s.length - 2); // strip trailing comma
  37. s += "\n" + indentChar.repeat(indentLevel) + "}";
  38. } else if (typeof obj === "number") {
  39. s += "" + obj;
  40. console.log("??");
  41. } else if (typeof obj === "string") {
  42. s += JSON.stringify(obj);
  43. }
  44. // unknown type, use default stringify logic
  45. else {
  46. s += JSON.stringify(obj);
  47. }
  48. return s;
  49. }