// prettify_mcode.ce — reformat .mcode files to be human-readable // Usage: ./cell --dev prettify_mcode boot/tokenize.cm.mcode // ./cell --dev prettify_mcode boot/*.mcode var fd = use("fd") var json = use("json") if (length(args) == 0) { print("usage: cell prettify_mcode [...]") disrupt } // Collapse leaf arrays (instruction arrays) onto single lines var compact_arrays = function(json_text) { var lines = array(json_text, "\n") var result = [] var i = 0 var line = null var trimmed = null var collecting = false var collected = null var indent = null var is_leaf = null var j = 0 var inner = null var parts = null var trailing = null var chars = null var k = 0 while (i < length(lines)) { line = lines[i] trimmed = trim(line) if (collecting == false && trimmed == "[") { collecting = true chars = array(line) k = 0 while (k < length(chars) && chars[k] == " ") { k = k + 1 } indent = text(line, 0, k) collected = [] i = i + 1 continue } if (collecting) { if (trimmed == "]" || trimmed == "],") { is_leaf = true j = 0 while (j < length(collected)) { inner = trim(collected[j]) if (starts_with(inner, "[") || starts_with(inner, "{")) { is_leaf = false } j = j + 1 } if (is_leaf && length(collected) > 0) { parts = [] j = 0 while (j < length(collected)) { inner = trim(collected[j]) if (ends_with(inner, ",")) { inner = text(inner, 0, length(inner) - 1) } parts[] = inner j = j + 1 } trailing = "" if (ends_with(trimmed, ",")) { trailing = "," } result[] = `${indent}[${text(parts, ", ")}]${trailing}` } else { result[] = `${indent}[` j = 0 while (j < length(collected)) { result[] = collected[j] j = j + 1 } result[] = line } collecting = false } else { collected[] = line } i = i + 1 continue } result[] = line i = i + 1 } return text(result, "\n") } var i = 0 var path = null var raw = null var obj = null var pretty = null var f = null while (i < length(args)) { path = args[i] if (!fd.is_file(path)) { print(`skip ${path} (not found)`) i = i + 1 continue } raw = text(fd.slurp(path)) obj = json.decode(raw) pretty = compact_arrays(json.encode(obj, null, 2)) f = fd.open(path, "w") fd.write(f, pretty) fd.close(f) print(`prettified ${path}`) i = i + 1 }