mirror of
https://github.com/fmtlib/fmt.git
synced 2024-11-22 10:30:05 +00:00
fix interaction of space flag and '+' flag, as well as '-' flag and '0' flag (#1687)
This commit is contained in:
parent
eee2023c2a
commit
6b219a58db
@ -405,7 +405,9 @@ void basic_printf_context<OutputIt, Char>::parse_flags(format_specs& specs,
|
||||
specs.fill[0] = '0';
|
||||
break;
|
||||
case ' ':
|
||||
specs.sign = sign::space;
|
||||
if (specs.sign != sign::plus) {
|
||||
specs.sign = sign::space;
|
||||
}
|
||||
break;
|
||||
case '#':
|
||||
specs.alt = true;
|
||||
@ -517,10 +519,11 @@ OutputIt basic_printf_context<OutputIt, Char>::format() {
|
||||
if (specs.alt && visit_format_arg(detail::is_zero_int(), arg))
|
||||
specs.alt = false;
|
||||
if (specs.fill[0] == '0') {
|
||||
if (arg.is_arithmetic())
|
||||
if (arg.is_arithmetic() && specs.align != align::left)
|
||||
specs.align = align::numeric;
|
||||
else
|
||||
specs.fill[0] = ' '; // Ignore '0' flag for non-numeric types.
|
||||
specs.fill[0] = ' '; // Ignore '0' flag for non-numeric types or if '-'
|
||||
// flag is also present.
|
||||
}
|
||||
|
||||
// Parse length and convert the argument to the required type.
|
||||
|
@ -151,6 +151,18 @@ TEST(PrintfTest, PlusFlag) {
|
||||
|
||||
// '+' flag is ignored for non-numeric types.
|
||||
EXPECT_PRINTF("x", "%+c", 'x');
|
||||
|
||||
// '+' flag wins over space flag
|
||||
EXPECT_PRINTF("+42", "%+ d", 42);
|
||||
EXPECT_PRINTF("-42", "%+ d", -42);
|
||||
EXPECT_PRINTF("+42", "% +d", 42);
|
||||
EXPECT_PRINTF("-42", "% +d", -42);
|
||||
EXPECT_PRINTF("+0042", "% +05d", 42);
|
||||
EXPECT_PRINTF("+0042", "%0+ 5d", 42);
|
||||
|
||||
// '+' flag and space flag are both ignored for non-numeric types.
|
||||
EXPECT_PRINTF("x", "%+ c", 'x');
|
||||
EXPECT_PRINTF("x", "% +c", 'x');
|
||||
}
|
||||
|
||||
TEST(PrintfTest, MinusFlag) {
|
||||
@ -160,6 +172,17 @@ TEST(PrintfTest, MinusFlag) {
|
||||
EXPECT_PRINTF("7 ", "%-5d", 7);
|
||||
EXPECT_PRINTF("97 ", "%-5hhi", 'a');
|
||||
EXPECT_PRINTF("a ", "%-5c", 'a');
|
||||
|
||||
// '0' flag is ignored if '-' flag is given
|
||||
EXPECT_PRINTF("7 ", "%-05d", 7);
|
||||
EXPECT_PRINTF("7 ", "%0-5d", 7);
|
||||
EXPECT_PRINTF("a ", "%-05c", 'a');
|
||||
EXPECT_PRINTF("a ", "%0-5c", 'a');
|
||||
EXPECT_PRINTF("97 ", "%-05hhi", 'a');
|
||||
EXPECT_PRINTF("97 ", "%0-5hhi", 'a');
|
||||
|
||||
// '-' and space flag don't interfere
|
||||
EXPECT_PRINTF(" 42", "%- d", 42);
|
||||
}
|
||||
|
||||
TEST(PrintfTest, SpaceFlag) {
|
||||
|
Loading…
Reference in New Issue
Block a user