let mut prefixed = false;
if self.flags & (1 << (FlagAlternate as uint)) != 0 {
- prefixed = true; width += prefix.len();
+ prefixed = true; width += prefix.char_len();
}
// Writes the sign if it exists, and then the prefix if it was requested
// If we're under both the maximum and the minimum width, then fill
// up the minimum width with the specified string + some alignment.
Some(width) => {
- self.with_padding(width - s.len(), rt::AlignLeft, |me| {
+ self.with_padding(width - s.char_len(), rt::AlignLeft, |me| {
me.buf.write(s.as_bytes())
})
}
struct A;
struct B;
+struct C;
impl fmt::Signed for A {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
f.write("adios".as_bytes())
}
}
+impl fmt::Show for C {
+ fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+ f.pad_integral(true, "☃", "123".as_bytes())
+ }
+}
macro_rules! t(($a:expr, $b:expr) => { assert_eq!($a.as_slice(), $b) })
t!(format!("{} {0}", "a"), "a a");
t!(format!("{foo_bar}", foo_bar=1i), "1");
t!(format!("{:d}", 5i + 5i), "10");
+ t!(format!("{:#4}", C), "☃123");
let a: &fmt::Show = &1i;
t!(format!("{}", a), "1");
// Formatting strings and their arguments
t!(format!("{:s}", "a"), "a");
t!(format!("{:4s}", "a"), "a ");
+ t!(format!("{:4s}", "☃"), "☃ ");
t!(format!("{:>4s}", "a"), " a");
t!(format!("{:<4s}", "a"), "a ");
t!(format!("{:^5s}", "a"), " a ");