╭─────────────╮ │scroll to top│ ╰─────────────╯ ╭ Title.zig ────────────────────────────────────────────────────╮ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ╰───────────────────────────────────────────────────────────────╯
╭────╮ ╭ clone ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ╮ │http│ ssh │ │ ╰────╯ ╰ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ╯
539 540 if (!first) { 541 for (&rows) |*r| try r.append(allocator, ' '); 542 } 543 first = false; 544 545 for (0..3) |text_row| { 546 for (0..3) |text_col| { 547 var pattern: u6 = 0; 548 for (0..3) |sub_row| { 549 for (0..2) |sub_col| { 550 const row_idx = text_row * 3 + sub_row; 551 const col_idx = text_col * 2 + sub_col; 552 if (kept[row_idx][col_idx]) { 553 pattern |= @as(u6, 1) << @intCast(sub_row * 2 + sub_col); 554 } 555 } 556 } 557 const cp = sextantCodepoint(pattern); 558 var utf8_buf: [4]u8 = undefined; 559 const len = try std.unicode.utf8Encode(cp, &utf8_buf); 560 try rows[text_row].appendSlice(allocator, utf8_buf[0..len]); 561 } 562 } 563 } 564 565 var out: std.ArrayList(u8) = .empty; 566 errdefer out.deinit(allocator); 567 try out.appendSlice(allocator, rows[0].items); 568 try out.append(allocator, '\n'); 569 try out.appendSlice(allocator, rows[1].items); 570 try out.append(allocator, '\n'); 571 try out.appendSlice(allocator, rows[2].items); 572 return out.toOwnedSlice(allocator); 573 } 574