about summary refs log tree commit diff
path: root/src/lib
diff options
context:
space:
mode:
authorBrian Anderson <andersrb@gmail.com>2011-04-18 21:35:45 -0400
committerBrian Anderson <andersrb@gmail.com>2011-04-18 21:36:04 -0400
commit59d5267936934f8f653be44d2728fe7f618b89a4 (patch)
tree24da21d28791669fa9013e27f73192a9362ee551 /src/lib
parent869b28e393f1b87723c9186097bd6acd16366fbd (diff)
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 938e86b6511..79f86038528 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;
         }
     }