diff options
| author | gingerBill <gingerBill@users.noreply.github.com> | 2022-03-03 12:07:14 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-03-03 12:07:14 +0000 |
| commit | 6b2302fa8b8cca12b7e30f6ae56b483d4e82255e (patch) | |
| tree | 289a3941722b18c9134923304adb077dcef72a76 | |
| parent | ee28945e09bc49aa4217fffb6ba8dc2e82681e01 (diff) | |
| parent | 507722954c0390840d1ff0b0e8770428c3252114 (diff) | |
Merge pull request #1572 from Lperlind/better-fmt
Improve core:fmt formatting
| -rw-r--r-- | core/fmt/fmt.odin | 28 |
1 files changed, 22 insertions, 6 deletions
diff --git a/core/fmt/fmt.odin b/core/fmt/fmt.odin index d6c1894b7..d006d0ef8 100644 --- a/core/fmt/fmt.odin +++ b/core/fmt/fmt.odin @@ -605,7 +605,7 @@ fmt_bad_verb :: proc(using fi: ^Info, verb: rune) { fmt_bool :: proc(using fi: ^Info, b: bool, verb: rune) { switch verb { case 't', 'v': - io.write_string(writer, b ? "true" : "false", &fi.n) + fmt_string(fi, b ? "true" : "false", 's') case: fmt_bad_verb(fi, verb) } @@ -943,11 +943,27 @@ fmt_float :: proc(fi: ^Info, v: f64, bit_size: int, verb: rune) { fmt_string :: proc(fi: ^Info, s: string, verb: rune) { switch verb { case 's', 'v': - io.write_string(fi.writer, s, &fi.n) - if fi.width_set && len(s) < fi.width { - for _ in 0..<fi.width - len(s) { - io.write_byte(fi.writer, ' ', &fi.n) + if fi.width_set { + if fi.width > len(s) { + if fi.minus { + io.write_string(fi.writer, s, &fi.n) + } + + for _ in 0..<fi.width - len(s) { + io.write_byte(fi.writer, ' ', &fi.n) + } + + if !fi.minus { + io.write_string(fi.writer, s, &fi.n) + } } + else { + io.write_string(fi.writer, s[:fi.width], &fi.n) + } + } + else + { + io.write_string(fi.writer, s, &fi.n) } case 'q': // quoted string @@ -1058,7 +1074,7 @@ fmt_enum :: proc(fi: ^Info, v: any, verb: rune) { fmt_arg(fi, any{v.data, runtime.type_info_base(e.base).id}, verb) case 's', 'v': if str, ok := enum_value_to_string(v); ok { - io.write_string(fi.writer, str, &fi.n) + fmt_string(fi, str, 's') } else { io.write_string(fi.writer, "%!(BAD ENUM VALUE=", &fi.n) fmt_arg(fi, any{v.data, runtime.type_info_base(e.base).id}, 'i') |