diff options
| author | Brian Anderson <[email protected]> | 2011-04-18 21:25:22 -0400 |
|---|---|---|
| committer | Brian Anderson <[email protected]> | 2011-04-18 21:36:04 -0400 |
| commit | 869b28e393f1b87723c9186097bd6acd16366fbd (patch) | |
| tree | 6d5069e96da7cff50446c4261968d02bcc2f06b0 | |
| parent | Support 0 flag in #fmt (diff) | |
| download | rust-869b28e393f1b87723c9186097bd6acd16366fbd.tar.xz rust-869b28e393f1b87723c9186097bd6acd16366fbd.zip | |
Left-justification overrides 0-padding in #fmt
| -rw-r--r-- | src/lib/ExtFmt.rs | 46 | ||||
| -rw-r--r-- | src/test/run-pass/syntax-extension-fmt.rs | 12 |
2 files changed, 35 insertions, 23 deletions
diff --git a/src/lib/ExtFmt.rs b/src/lib/ExtFmt.rs index ec778f6d..938e86b6 100644 --- a/src/lib/ExtFmt.rs +++ b/src/lib/ExtFmt.rs @@ -467,33 +467,35 @@ mod RT { auto uwidth = width as uint; auto strlen = _str.char_len(s); if (strlen < uwidth) { - auto zero_padding = false; - auto signed = false; auto padchar = ' '; - alt (pt) { - case (pad_nozero) { - // fallthrough - } - case (pad_signed) { - signed = true; - if (have_flag(cv.flags, flag_left_zero_pad)) { - padchar = '0'; - zero_padding = true; - } - } - case (pad_unsigned) { - if (have_flag(cv.flags, flag_left_zero_pad)) { - padchar = '0'; - zero_padding = true; - } - } - } - auto diff = uwidth - strlen; - auto padstr = str_init_elt(padchar, diff); if (have_flag(cv.flags, flag_left_justify)) { + auto padstr = str_init_elt(padchar, diff); ret s + padstr; } else { + auto zero_padding = false; + auto signed = false; + alt (pt) { + case (pad_nozero) { + // fallthrough + } + case (pad_signed) { + signed = true; + if (have_flag(cv.flags, flag_left_zero_pad)) { + padchar = '0'; + zero_padding = true; + } + } + case (pad_unsigned) { + if (have_flag(cv.flags, flag_left_zero_pad)) { + padchar = '0'; + zero_padding = true; + } + } + } + + auto padstr = str_init_elt(padchar, diff); + // This is completely heinous. If we have a signed // value then potentially rip apart the intermediate // result and insert some zeros. It may make sense diff --git a/src/test/run-pass/syntax-extension-fmt.rs b/src/test/run-pass/syntax-extension-fmt.rs index 46d5036a..c3b2cd76 100644 --- a/src/test/run-pass/syntax-extension-fmt.rs +++ b/src/test/run-pass/syntax-extension-fmt.rs @@ -139,7 +139,17 @@ fn main() { test(#fmt("%05s", "test"), " test"); test(#fmt("%05b", true), " true"); - // TODO: Left-justify overrides 0-padding + // Left-justify overrides 0-padding + test(#fmt("%-05d", 0), "0 "); + test(#fmt("%-05d", 1), "1 "); + test(#fmt("%-05d", -1), "-1 "); + test(#fmt("%-05u", 1u), "1 "); + test(#fmt("%-05x", 127u), "7f "); + test(#fmt("%-05X", 127u), "7F "); + test(#fmt("%-05t", 3u), "11 "); + test(#fmt("%-05s", "test"), "test "); + test(#fmt("%-05b", true), "true "); + // TODO: Precision overrides 0-padding // TODO: Padding and + // TODO: Padding and ' ' |