diff options
| author | Brian Anderson <[email protected]> | 2011-04-26 20:49:03 -0400 |
|---|---|---|
| committer | Brian Anderson <[email protected]> | 2011-04-26 20:49:03 -0400 |
| commit | 8216b5fc10e7c7b0d4e9f40bb4f9fdaaaebf9400 (patch) | |
| tree | b7dddff0dda11e1eae672740185f8431952b317b | |
| parent | Support octal #fmt conversions (diff) | |
| download | rust-8216b5fc10e7c7b0d4e9f40bb4f9fdaaaebf9400.tar.xz rust-8216b5fc10e7c7b0d4e9f40bb4f9fdaaaebf9400.zip | |
Fix the interaction between various flags in #fmt
| -rw-r--r-- | src/lib/ExtFmt.rs | 19 | ||||
| -rw-r--r-- | src/test/run-pass/syntax-extension-fmt.rs | 19 |
2 files changed, 29 insertions, 9 deletions
diff --git a/src/lib/ExtFmt.rs b/src/lib/ExtFmt.rs index a9747c6a..c71e49a3 100644 --- a/src/lib/ExtFmt.rs +++ b/src/lib/ExtFmt.rs @@ -532,15 +532,20 @@ mod RT { // instead. if (signed && zero_padding - && _str.byte_len(s) > 0u - && s.(0) == '-' as u8) { + && _str.byte_len(s) > 0u) { - auto bytelen = _str.byte_len(s); - auto numpart = _str.substr(s, 1u, bytelen - 1u); - ret "-" + padstr + numpart; - } else { - ret padstr + s; + auto head = s.(0); + if (head == '+' as u8 + || head == '-' as u8 + || head == ' ' as u8) { + + auto headstr = _str.unsafe_from_bytes(vec(head)); + auto bytelen = _str.byte_len(s); + auto numpart = _str.substr(s, 1u, bytelen - 1u); + ret headstr + padstr + numpart; + } } + ret padstr + s; } fn have_flag(vec[flag] flags, flag f) -> bool { diff --git a/src/test/run-pass/syntax-extension-fmt.rs b/src/test/run-pass/syntax-extension-fmt.rs index 46b529d5..82b3e658 100644 --- a/src/test/run-pass/syntax-extension-fmt.rs +++ b/src/test/run-pass/syntax-extension-fmt.rs @@ -175,6 +175,21 @@ fn main() { test(#fmt("%06.5X", 127u), " 0007F"); test(#fmt("%06.5o", 10u), " 00012"); - // TODO: Padding and + - // TODO: Padding and ' ' + // Signed combinations + test(#fmt("% 5d", 1), " 1"); + test(#fmt("% 5d", -1), " -1"); + test(#fmt("%+5d", 1), " +1"); + test(#fmt("%+5d", -1), " -1"); + test(#fmt("% 05d", 1), " 0001"); + test(#fmt("% 05d", -1), "-0001"); + test(#fmt("%+05d", 1), "+0001"); + test(#fmt("%+05d", -1), "-0001"); + test(#fmt("%- 5d", 1), " 1 "); + test(#fmt("%- 5d", -1), "-1 "); + test(#fmt("%-+5d", 1), "+1 "); + test(#fmt("%-+5d", -1), "-1 "); + test(#fmt("%- 05d", 1), " 1 "); + test(#fmt("%- 05d", -1), "-1 "); + test(#fmt("%-+05d", 1), "+1 "); + test(#fmt("%-+05d", -1), "-1 "); } |