Skip to content

Commit 59d5267

Browse files
committed
Rearrange ExtFmt.RT.pad to recover some horizontal space
1 parent 869b28e commit 59d5267

File tree

1 file changed

+51
-49
lines changed

1 file changed

+51
-49
lines changed

src/lib/ExtFmt.rs

Lines changed: 51 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -458,64 +458,66 @@ mod RT {
458458
}
459459

460460
fn pad(&conv cv, str s, pad_type pt) -> str {
461+
auto uwidth;
461462
alt (cv.width) {
462463
case (count_implied) {
463464
ret s;
464465
}
465466
case (count_is(?width)) {
466467
// FIXME: Maybe width should be uint
467-
auto uwidth = width as uint;
468-
auto strlen = _str.char_len(s);
469-
if (strlen < uwidth) {
470-
auto padchar = ' ';
471-
auto diff = uwidth - strlen;
472-
if (have_flag(cv.flags, flag_left_justify)) {
473-
auto padstr = str_init_elt(padchar, diff);
474-
ret s + padstr;
475-
} else {
476-
auto zero_padding = false;
477-
auto signed = false;
478-
alt (pt) {
479-
case (pad_nozero) {
480-
// fallthrough
481-
}
482-
case (pad_signed) {
483-
signed = true;
484-
if (have_flag(cv.flags, flag_left_zero_pad)) {
485-
padchar = '0';
486-
zero_padding = true;
487-
}
488-
}
489-
case (pad_unsigned) {
490-
if (have_flag(cv.flags, flag_left_zero_pad)) {
491-
padchar = '0';
492-
zero_padding = true;
493-
}
494-
}
495-
}
496-
497-
auto padstr = str_init_elt(padchar, diff);
498-
499-
// This is completely heinous. If we have a signed
500-
// value then potentially rip apart the intermediate
501-
// result and insert some zeros. It may make sense
502-
// to convert zero padding to a precision instead.
503-
if (signed
504-
&& zero_padding
505-
&& _str.byte_len(s) > 0u
506-
&& s.(0) == '-' as u8) {
507-
508-
auto bytelen = _str.byte_len(s);
509-
auto numpart = _str.substr(s, 1u, bytelen - 1u);
510-
ret "-" + padstr + numpart;
511-
}
512-
513-
ret padstr + s;
468+
uwidth = width as uint;
469+
}
470+
}
471+
472+
auto strlen = _str.char_len(s);
473+
if (uwidth <= strlen) {
474+
ret s;
475+
}
476+
477+
auto padchar = ' ';
478+
auto diff = uwidth - strlen;
479+
if (have_flag(cv.flags, flag_left_justify)) {
480+
auto padstr = str_init_elt(padchar, diff);
481+
ret s + padstr;
482+
} else {
483+
auto zero_padding = false;
484+
auto signed = false;
485+
alt (pt) {
486+
case (pad_nozero) {
487+
// fallthrough
488+
}
489+
case (pad_signed) {
490+
signed = true;
491+
if (have_flag(cv.flags, flag_left_zero_pad)) {
492+
padchar = '0';
493+
zero_padding = true;
494+
}
495+
}
496+
case (pad_unsigned) {
497+
if (have_flag(cv.flags, flag_left_zero_pad)) {
498+
padchar = '0';
499+
zero_padding = true;
514500
}
515-
} else {
516-
ret s;
517501
}
518502
}
503+
504+
auto padstr = str_init_elt(padchar, diff);
505+
506+
// This is completely heinous. If we have a signed value then
507+
// potentially rip apart the intermediate result and insert some
508+
// zeros. It may make sense to convert zero padding to a precision
509+
// instead.
510+
if (signed
511+
&& zero_padding
512+
&& _str.byte_len(s) > 0u
513+
&& s.(0) == '-' as u8) {
514+
515+
auto bytelen = _str.byte_len(s);
516+
auto numpart = _str.substr(s, 1u, bytelen - 1u);
517+
ret "-" + padstr + numpart;
518+
}
519+
520+
ret padstr + s;
519521
}
520522
}
521523

0 commit comments

Comments
 (0)