Fix handling of positional parameters in wxPrintf() and related.

Handle positional parameter specifications in wxFormatConverter to ensure that
e.g. "%N$s" are correctly transformed to "%N$S" if needed. This fixes the use
of positional parameters under OS X.

Closes #10965.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@70523 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2012-02-06 13:28:34 +00:00
parent a8ed16c999
commit 75717cb121
3 changed files with 21 additions and 0 deletions

View File

@@ -501,6 +501,7 @@ MSW:
OSX: OSX:
- Provide native implementations of wxDatePickerCtrl and wxTimePickerCtrl. - Provide native implementations of wxDatePickerCtrl and wxTimePickerCtrl.
- Fix handling of positional parameters in wxPrintf() &c (David Connet).
Univ: Univ:

View File

@@ -161,6 +161,19 @@ public:
{ {
if ( CopyFmtChar(*format++) == wxT('%') ) if ( CopyFmtChar(*format++) == wxT('%') )
{ {
#if wxUSE_PRINTF_POS_PARAMS
if ( *format >= '0' && *format <= '9' )
{
SkipDigits(&format);
if ( *format == '$' )
{
// It was a positional argument specification.
CopyFmtChar(*format++);
}
//else: it was a width specification, nothing else to do.
}
#endif // wxUSE_PRINTF_POS_PARAMS
// skip any flags // skip any flags
while ( IsFlagChar(*format) ) while ( IsFlagChar(*format) )
CopyFmtChar(*format++); CopyFmtChar(*format++);

View File

@@ -165,6 +165,13 @@ void StringTestCase::Format()
wxString s(wxT('Z'), len); wxString s(wxT('Z'), len);
CPPUNIT_ASSERT_EQUAL( len, wxString::Format(wxT("%s"), s.c_str()).length()); CPPUNIT_ASSERT_EQUAL( len, wxString::Format(wxT("%s"), s.c_str()).length());
} }
CPPUNIT_ASSERT_EQUAL
(
"two one",
wxString::Format(wxT("%2$s %1$s"), wxT("one"), wxT("two"))
);
} }
void StringTestCase::Constructors() void StringTestCase::Constructors()