6fn print_help() -> void {
8 sb_append(sb, "clocf - cloc formatter\n\n");
9 sb_append(sb, "Usage:\n");
10 sb_append(sb, " cloc [options] <path> | clocf # Process cloc output via pipe\n");
11 puts(sb_to_string(sb));
16 var argc = sys_argc();
19 var arg = sys_argv(1);
20 if (arg == "--help" || arg == "-h") {
30 var dataStorage = sb_new();
34 if (len(line) == 0) { break; }
36 if (starts_with(line, "github.com/AlDanial/cloc") || starts_with(line, "-") || starts_with(line, "Language") || starts_with(line, "SUM")) {
41 var foundDigits = false;
44 for (var i = len(line) - 1; i >= 0; i = i - 1) {
45 var c = char_at(line, i);
46 var isDigit = (c == "0" || c == "1" || c == "2" || c == "3" || c == "4" ||
47 c == "5" || c == "6" || c == "7" || c == "8" || c == "9");
50 var tempSb = sb_new();
52 sb_append(tempSb, codeStr);
53 codeStr = sb_free(tempSb);
55 } else if (foundDigits) {
62 for (var j = 0; j < len(line); j = j + 1) {
63 var c = char_at(line, j);
64 if (c == " " && j > 0) {
65 if (char_at(line, j-1) != " ") {
66 namePart = substr(line, 0, j);
72 if (len(codeStr) > 0 && len(namePart) > 0) {
73 var codeValue = to_int(codeStr);
74 totalCode = totalCode + codeValue;
76 if (len(namePart) > maxNameLen) {
77 maxNameLen = len(namePart);
80 sb_append(dataStorage, namePart);
81 sb_append(dataStorage, ":");
82 sb_append(dataStorage, codeStr);
83 sb_append(dataStorage, "\n");
84 langCount = langCount + 1;
89 puts_error("Error: No cloc data received via pipe.");
94 var headerSb = sb_new();
95 sb_append(headerSb, "Total code lines: ");
96 sb_append(headerSb, to_string(to_int(totalCode)));
97 puts(sb_to_string(headerSb));
99 puts("Language percentages:");
101 var rawResults = sb_free(dataStorage);
104 for (var k = 0; k < langCount; k = k + 1) {
106 for (var m = currentPos; m < len(rawResults); m = m + 1) {
107 if (char_at(rawResults, m) == "\n") {
108 entry = substr(rawResults, currentPos, m - currentPos);
115 for (var n = 0; n < len(entry); n = n + 1) {
116 if (char_at(entry, n) == ":") {
122 var lName = substr(entry, 0, splitIdx);
123 var lCode = to_int(substr(entry, splitIdx + 1));
124 var percent = (lCode * 100.0) / totalCode;
126 var lineSb = sb_new();
127 sb_append(lineSb, lName);
129 var padding = maxNameLen - len(lName);
130 for (var p = 0; p < padding; p = p + 1) {
131 sb_append(lineSb, " ");
134 sb_append(lineSb, " : ");
135 sb_append(lineSb, to_string(percent));
136 sb_append(lineSb, "% (");
137 sb_append(lineSb, to_string(lCode));
138 sb_append(lineSb, " lines)");
140 puts(sb_to_string(lineSb));