Fix bug in padding unicode, #17105.
This commit is contained in:
parent
06c0b1d28a
commit
5b3c3511c9
@ -476,7 +476,7 @@ impl<'a> Formatter<'a> {
|
||||
|
||||
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
|
||||
@ -562,7 +562,7 @@ impl<'a> Formatter<'a> {
|
||||
// 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())
|
||||
})
|
||||
}
|
||||
|
@ -25,6 +25,7 @@ use std::str;
|
||||
|
||||
struct A;
|
||||
struct B;
|
||||
struct C;
|
||||
|
||||
impl fmt::Signed for A {
|
||||
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||
@ -36,6 +37,11 @@ impl fmt::Signed for B {
|
||||
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) })
|
||||
|
||||
@ -81,6 +87,7 @@ pub fn main() {
|
||||
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");
|
||||
@ -88,6 +95,7 @@ pub fn main() {
|
||||
// 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 ");
|
||||
|
Loading…
Reference in New Issue
Block a user