const repeat = require("./string-repeat"); module.exports = function printy(parsed, indent = 0) { let indentWasNegative = false; const result = parsed .reduce(function (output, p) { const splitted = p.value.split(/(?:\n|\r|\t)(?: |\r|\t)*/g); const value = splitted.join(""); if (value === "") { return output; } if (p.type === "tag" && p.position === "end") { indent--; } if (indent < 0) { indentWasNegative = true; } const i = indent < 0 ? `(${indent})` : `(${indent})` + repeat(" ", indent); if (p.subparsed) { indent++; const stars = i.replace(/./g, "*"); output += `\n${stars}START LOOP OF ${value}`; output += printy(p.subparsed, indent); output += `\n${stars}END LOOP OF ${value}`; indent--; } else if (p.type === "placeholder") { output += `\n${i.replace(/./g, "=")}{${value}}`; } else { output += `\n${i}${value}`; } if (p.type === "tag" && p.position === "start") { indent++; } return output; }, "") .split("\n") .map(function (line) { return line.replace(/[\s\uFEFF\xA0]+$/g, ""); }) .join("\n"); if (indentWasNegative) { const err = new Error("Indent negative"); err.properties = { result }; throw err; } return result; };