Fix parsing of flags.

This commit is contained in:
Victor Zverovich 2014-06-06 08:01:48 -07:00
parent f16aff8033
commit 438eba1402

View File

@ -657,6 +657,7 @@ void fmt::BasicWriter<Char>::PrintfParser::Format(
switch (have_width) { switch (have_width) {
case false: case false:
// TODO: parse optional flags // TODO: parse optional flags
for (bool stop = false; !stop;) {
switch (*s) { switch (*s) {
case '-': case '-':
++s; ++s;
@ -664,11 +665,18 @@ void fmt::BasicWriter<Char>::PrintfParser::Format(
break; break;
case '+': case '+':
// TODO // TODO
++s;
spec.flags_ |= SIGN_FLAG | PLUS_FLAG; spec.flags_ |= SIGN_FLAG | PLUS_FLAG;
break;
case '0':
spec.fill_ = '0';
case ' ': case ' ':
case '#': case '#':
++s; ++s;
break; break;
default:
stop = true;
}
} }
/* /*
@ -731,10 +739,6 @@ void fmt::BasicWriter<Char>::PrintfParser::Format(
// Parse width and zero flag. // Parse width and zero flag.
if (*s < '0' || *s > '9') if (*s < '0' || *s > '9')
break; break;
if (*s == '0')
spec.fill_ = '0';
// Zero may be parsed again as a part of the width, but it is simpler
// and more efficient than checking if the next char is a digit.
spec.width_ = internal::ParseNonnegativeInt(s, error); spec.width_ = internal::ParseNonnegativeInt(s, error);
// Fall through. // Fall through.
default: default: