| ... | ... | @@ -486,7 +486,7 @@ fn BitGrid(comptime size: usize) type { |
| 486 | 486 | } |
| 487 | 487 | |
| 488 | 488 | pub fn asBlockString(grid: *const @This(), allocator: std.mem.Allocator) ![]u8 { |
| 489 | | var content: std.ArrayList(u8) = .init(allocator); |
| 489 | var content: std.Io.Writer.Allocating = .init(allocator); |
| 490 | 490 | errdefer content.deinit(); |
| 491 | 491 | for (0..grid.size / 2 + 1) |y| { |
| 492 | 492 | for (0..grid.size / 2 + 1) |x| { |
| ... | ... | @@ -503,16 +503,16 @@ fn BitGrid(comptime size: usize) type { |
| 503 | 503 | } |
| 504 | 504 | } |
| 505 | 505 | const characters = [_][]const u8{ " ", "▘", "▖", "▌", "▝", "▀", "▞", "▛", "▗", "▚", "▄", "▙", "▐", "▜", "▟", "█" }; |
| 506 | | try content.appendSlice(characters[(idx.mask)]); |
| 506 | try content.writer.writeAll(characters[(idx.mask)]); |
| 507 | 507 | } |
| 508 | | if (builtin.is_test) try content.appendSlice("|"); |
| 509 | | try content.appendSlice("\n"); |
| 508 | if (builtin.is_test) try content.writer.writeAll("|"); |
| 509 | try content.writer.writeAll("\n"); |
| 510 | 510 | } |
| 511 | 511 | return content.toOwnedSlice(); |
| 512 | 512 | } |
| 513 | 513 | |
| 514 | 514 | pub fn asBlockString2(grid: *const @This(), allocator: std.mem.Allocator) ![]u8 { |
| 515 | | var content: std.ArrayList(u8) = .init(allocator); |
| 515 | var content: std.Io.Writer.Allocating = .init(allocator); |
| 516 | 516 | errdefer content.deinit(); |
| 517 | 517 | for (0..grid.size / 2 + 1) |y| { |
| 518 | 518 | for (0..grid.size) |x| { |
| ... | ... | @@ -527,17 +527,17 @@ fn BitGrid(comptime size: usize) type { |
| 527 | 527 | idx.set(y2); |
| 528 | 528 | } |
| 529 | 529 | const characters = [_][]const u8{ " ", "▀", "▄", "█" }; |
| 530 | | try content.appendSlice(characters[(idx.mask)]); |
| 530 | try content.writer.writeAll(characters[(idx.mask)]); |
| 531 | 531 | } |
| 532 | | if (builtin.is_test) try content.appendSlice("|"); |
| 533 | | try content.appendSlice("\n"); |
| 532 | if (builtin.is_test) try content.writer.writeAll("|"); |
| 533 | try content.writer.writeAll("\n"); |
| 534 | 534 | } |
| 535 | 535 | return content.toOwnedSlice(); |
| 536 | 536 | } |
| 537 | 537 | |
| 538 | 538 | pub fn asBrailleString(grid: *const @This(), allocator: std.mem.Allocator) ![]u8 { |
| 539 | 539 | const B = packed struct(u8) { @"0": bool, @"1": bool, @"2": bool, @"3": bool, @"4": bool, @"5": bool, @"6": bool, @"7": bool }; |
| 540 | | var content: std.ArrayList(u8) = .init(allocator); |
| 540 | var content: std.Io.Writer.Allocating = .init(allocator); |
| 541 | 541 | errdefer content.deinit(); |
| 542 | 542 | for (0..grid.size / 4 + 1) |y| { |
| 543 | 543 | for (0..grid.size / 2 + 1) |x| { |
| ... | ... | @@ -557,23 +557,23 @@ fn BitGrid(comptime size: usize) type { |
| 557 | 557 | cp += @as(u8, @bitCast(b)); |
| 558 | 558 | var buf: [3]u8 = undefined; |
| 559 | 559 | _ = std.unicode.utf8Encode(cp, &buf) catch unreachable; |
| 560 | | try content.appendSlice(&buf); |
| 560 | try content.writer.writeAll(&buf); |
| 561 | 561 | } |
| 562 | | if (builtin.is_test) try content.appendSlice("|"); |
| 563 | | try content.appendSlice("\n"); |
| 562 | if (builtin.is_test) try content.writer.writeAll("|"); |
| 563 | try content.writer.writeAll("\n"); |
| 564 | 564 | } |
| 565 | 565 | return content.toOwnedSlice(); |
| 566 | 566 | } |
| 567 | 567 | |
| 568 | 568 | pub fn asSvg(grid: *const @This(), allocator: std.mem.Allocator) ![]u8 { |
| 569 | | var content: std.ArrayList(u8) = .init(allocator); |
| 569 | var content: std.Io.Writer.Allocating = .init(allocator); |
| 570 | 570 | errdefer content.deinit(); |
| 571 | | try content.writer().print("<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"{d}0\" height=\"{d}0\" viewBox=\"-1 -1 {d} {d}\" shape-rendering=\"crispEdges\" stroke=\"#000\">\n", .{ size + 2, size + 1, size + 2, size + 1 }); |
| 572 | | try content.writer().print("<rect x=\"-1\" y=\"-1\" width=\"{d}\" height=\"{d}\" fill=\"#fff\" stroke=\"none\" />\n", .{ size + 2, size + 1 }); |
| 571 | try content.writer.print("<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"{d}0\" height=\"{d}0\" viewBox=\"-1 -1 {d} {d}\" shape-rendering=\"crispEdges\" stroke=\"#000\">\n", .{ size + 2, size + 1, size + 2, size + 1 }); |
| 572 | try content.writer.print("<rect x=\"-1\" y=\"-1\" width=\"{d}\" height=\"{d}\" fill=\"#fff\" stroke=\"none\" />\n", .{ size + 2, size + 1 }); |
| 573 | 573 | var prev = false; |
| 574 | 574 | var run: u16 = 0; |
| 575 | 575 | for (0..size) |y| { |
| 576 | | try content.appendSlice("<path d=\""); |
| 576 | try content.writer.writeAll("<path d=\""); |
| 577 | 577 | for (0..size) |x| { |
| 578 | 578 | if (x == 0) { |
| 579 | 579 | run = 0; |
| ... | ... | @@ -584,7 +584,7 @@ fn BitGrid(comptime size: usize) type { |
| 584 | 584 | run += 1; |
| 585 | 585 | } else { |
| 586 | 586 | if (prev) { |
| 587 | | try content.writer().print("M{d},{d} h{d} ", .{ x - run, y, run }); |
| 587 | try content.writer.print("M{d},{d} h{d} ", .{ x - run, y, run }); |
| 588 | 588 | } |
| 589 | 589 | run = 1; |
| 590 | 590 | } |
| ... | ... | @@ -592,11 +592,11 @@ fn BitGrid(comptime size: usize) type { |
| 592 | 592 | } |
| 593 | 593 | if (grid.isSet(size - 1, y)) { |
| 594 | 594 | const x = size; |
| 595 | | try content.writer().print("M{d},{d} h{d}", .{ x - run, y, run }); |
| 595 | try content.writer.print("M{d},{d} h{d}", .{ x - run, y, run }); |
| 596 | 596 | } |
| 597 | | try content.appendSlice("\" />\n"); |
| 597 | try content.writer.writeAll("\" />\n"); |
| 598 | 598 | } |
| 599 | | try content.appendSlice("</svg>\n"); |
| 599 | try content.writer.writeAll("</svg>\n"); |
| 600 | 600 | return content.toOwnedSlice(); |
| 601 | 601 | } |
| 602 | 602 | }; |