| ... | ... | @@ -334,16 +334,16 @@ pub fn formatType( |
| 334 | 334 | return formatValue(value, fmt, options, out_stream); |
| 335 | 335 | }, |
| 336 | 336 | .Void => { |
| 337 | | return out_stream.writeAll("void"); |
| 337 | return formatBuf("void", options, out_stream); |
| 338 | 338 | }, |
| 339 | 339 | .Bool => { |
| 340 | | return out_stream.writeAll(if (value) "true" else "false"); |
| 340 | return formatBuf(if (value) "true" else "false", options, out_stream); |
| 341 | 341 | }, |
| 342 | 342 | .Optional => { |
| 343 | 343 | if (value) |payload| { |
| 344 | 344 | return formatType(payload, fmt, options, out_stream, max_depth); |
| 345 | 345 | } else { |
| 346 | | return out_stream.writeAll("null"); |
| 346 | return formatBuf("null", options, out_stream); |
| 347 | 347 | } |
| 348 | 348 | }, |
| 349 | 349 | .ErrorUnion => { |
| ... | ... | @@ -495,7 +495,7 @@ fn formatValue( |
| 495 | 495 | switch (@typeInfo(T)) { |
| 496 | 496 | .Float => return formatFloatValue(value, fmt, options, out_stream), |
| 497 | 497 | .Int, .ComptimeInt => return formatIntValue(value, fmt, options, out_stream), |
| 498 | | .Bool => return out_stream.writeAll(if (value) "true" else "false"), |
| 498 | .Bool => return formatBuf(if (value) "true" else "false", options, out_stream), |
| 499 | 499 | else => comptime unreachable, |
| 500 | 500 | } |
| 501 | 501 | } |
| ... | ... | @@ -561,9 +561,7 @@ pub fn formatText( |
| 561 | 561 | options: FormatOptions, |
| 562 | 562 | out_stream: var, |
| 563 | 563 | ) !void { |
| 564 | | if (fmt.len == 0) { |
| 565 | | return out_stream.writeAll(bytes); |
| 566 | | } else if (comptime std.mem.eql(u8, fmt, "s")) { |
| 564 | if (comptime std.mem.eql(u8, fmt, "s") or (fmt.len == 0)) { |
| 567 | 565 | return formatBuf(bytes, options, out_stream); |
| 568 | 566 | } else if (comptime (std.mem.eql(u8, fmt, "x") or std.mem.eql(u8, fmt, "X"))) { |
| 569 | 567 | for (bytes) |c| { |
| ... | ... | @@ -588,13 +586,30 @@ pub fn formatBuf( |
| 588 | 586 | options: FormatOptions, |
| 589 | 587 | out_stream: var, |
| 590 | 588 | ) !void { |
| 591 | | try out_stream.writeAll(buf); |
| 592 | | |
| 593 | | const width = options.width orelse 0; |
| 594 | | var leftover_padding = if (width > buf.len) (width - buf.len) else return; |
| 589 | const width = options.width orelse buf.len; |
| 590 | const alignment = options.alignment orelse .Left; |
| 591 | var padding = if (width > buf.len) (width - buf.len) else 0; |
| 595 | 592 | const pad_byte = [1]u8{options.fill}; |
| 596 | | while (leftover_padding > 0) : (leftover_padding -= 1) { |
| 597 | | try out_stream.writeAll(&pad_byte); |
| 593 | switch (alignment) { |
| 594 | .Left => { |
| 595 | try out_stream.writeAll(buf); |
| 596 | while (padding > 0) : (padding -= 1) { |
| 597 | try out_stream.writeAll(&pad_byte); |
| 598 | } |
| 599 | }, |
| 600 | .Center => { |
| 601 | const padl = padding / 2; |
| 602 | var i: usize = 0; |
| 603 | while (i < padl) : (i += 1) try out_stream.writeAll(&pad_byte); |
| 604 | try out_stream.writeAll(buf); |
| 605 | while (i < padding) : (i += 1) try out_stream.writeAll(&pad_byte); |
| 606 | }, |
| 607 | .Right => { |
| 608 | while (padding > 0) : (padding -= 1) { |
| 609 | try out_stream.writeAll(&pad_byte); |
| 610 | } |
| 611 | try out_stream.writeAll(buf); |
| 612 | }, |
| 598 | 613 | } |
| 599 | 614 | } |
| 600 | 615 | |
| ... | ... | @@ -1686,3 +1701,16 @@ test "vector" { |
| 1686 | 1701 | test "enum-literal" { |
| 1687 | 1702 | try testFmt(".hello_world", "{}", .{.hello_world}); |
| 1688 | 1703 | } |
| 1704 | |
| 1705 | test "padding" { |
| 1706 | try testFmt("Simple", "{}", .{"Simple"}); |
| 1707 | try testFmt("true ", "{:10}", .{true}); |
| 1708 | try testFmt(" true", "{:>10}", .{true}); |
| 1709 | try testFmt("======true", "{:=>10}", .{true}); |
| 1710 | try testFmt("true======", "{:=<10}", .{true}); |
| 1711 | try testFmt(" true ", "{:^10}", .{true}); |
| 1712 | try testFmt("===true===", "{:=^10}", .{true}); |
| 1713 | try testFmt("Minimum width", "{:18} width", .{"Minimum"}); |
| 1714 | try testFmt("==================Filled", "{:=>24}", .{"Filled"}); |
| 1715 | try testFmt(" Centered ", "{:^24}", .{"Centered"}); |
| 1716 | } |