aboutsummaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
authorBrian Anderson <[email protected]>2011-04-18 21:35:45 -0400
committerBrian Anderson <[email protected]>2011-04-18 21:36:04 -0400
commit59d5267936934f8f653be44d2728fe7f618b89a4 (patch)
tree24da21d28791669fa9013e27f73192a9362ee551 /src/lib
parentLeft-justification overrides 0-padding in #fmt (diff)
downloadrust-59d5267936934f8f653be44d2728fe7f618b89a4.tar.xz
rust-59d5267936934f8f653be44d2728fe7f618b89a4.zip
Rearrange ExtFmt.RT.pad to recover some horizontal space
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/ExtFmt.rs100
1 files changed, 51 insertions, 49 deletions
diff --git a/src/lib/ExtFmt.rs b/src/lib/ExtFmt.rs
index 938e86b6..79f86038 100644
--- a/src/lib/ExtFmt.rs
+++ b/src/lib/ExtFmt.rs
@@ -458,64 +458,66 @@ mod RT {
}
fn pad(&conv cv, str s, pad_type pt) -> str {
+ auto uwidth;
alt (cv.width) {
case (count_implied) {
ret s;
}
case (count_is(?width)) {
// FIXME: Maybe width should be uint
- auto uwidth = width as uint;
- auto strlen = _str.char_len(s);
- if (strlen < uwidth) {
- auto padchar = ' ';
- auto diff = uwidth - strlen;
- 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
- // to convert zero padding to a precision instead.
- if (signed
- && zero_padding
- && _str.byte_len(s) > 0u
- && s.(0) == '-' as u8) {
-
- auto bytelen = _str.byte_len(s);
- auto numpart = _str.substr(s, 1u, bytelen - 1u);
- ret "-" + padstr + numpart;
- }
-
- ret padstr + s;
+ uwidth = width as uint;
+ }
+ }
+
+ auto strlen = _str.char_len(s);
+ if (uwidth <= strlen) {
+ ret s;
+ }
+
+ auto padchar = ' ';
+ auto diff = uwidth - strlen;
+ 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;
}
- } else {
- ret s;
}
}
+
+ 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 to convert zero padding to a precision
+ // instead.
+ if (signed
+ && zero_padding
+ && _str.byte_len(s) > 0u
+ && s.(0) == '-' as u8) {
+
+ auto bytelen = _str.byte_len(s);
+ auto numpart = _str.substr(s, 1u, bytelen - 1u);
+ ret "-" + padstr + numpart;
+ }
+
+ ret padstr + s;
}
}