Left-justification overrides 0-padding in #fmt
This commit is contained in:
parent
d4f1a48111
commit
869b28e393
2 changed files with 35 additions and 23 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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 ' '
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue