Left-justification overrides 0-padding in #fmt

This commit is contained in:
Brian Anderson 2011-04-18 21:25:22 -04:00
parent d4f1a48111
commit 869b28e393
2 changed files with 35 additions and 23 deletions

View file

@ -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

View file

@ -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 ' '