// under OSX locale formats are defined using
// http://unicode.org/reports/tr35/tr35-6.html#Date_Format_Patterns
-//
+//
// so we need a translation function, bluntly copied from the windows
// version above and enhanced with the additional elements needed
-static wxString TranslateFromUnicodeFormat( const wxString& fmt)
+static wxString TranslateFromUnicodeFormat(const wxString& fmt)
{
-
wxString fmtWX;
wxChar chLast = _T('\0');
size_t lastCount = 0;
- for ( wxString::const_iterator p = fmt.begin(); /* NUL handled inside */; p++ )
+ for ( wxString::const_iterator p = fmt.begin(); /* end handled inside */; ++p )
{
- if ( *p == chLast )
+ if ( p == fmt.end() || *p == chLast )
{
lastCount++;
+ if ( p == fmt.end() )
+ break;
+
continue;
}
- switch ( (char) *p )
+ switch ( (*p).GetValue() )
{
// these characters come in groups, start counting them
case _T('d'):
wxFAIL_MSG( _T("wrong number of 'H's") );
}
break;
-
+
case _T('h'):
switch ( lastCount )
{
wxFAIL_MSG( _T("wrong number of 'm's") );
}
break;
-
+
case _T('s'):
switch ( lastCount )
{
wxFAIL_MSG( _T("wrong number of 's's") );
}
break;
-
+
case _T('g'):
// strftime() doesn't have era string,
// ignore this format
// not a special character so must be just a separator,
// treat as is
- if ( *p != _T('\0') )
+ if ( *p == _T('%') )
{
- if ( *p == _T('%') )
- {
- // this one needs to be escaped
- fmtWX += _T('%');
- }
-
- fmtWX += *p;
+ // this one needs to be escaped
+ fmtWX += _T('%');
}
- }
- if ( *p == _T('\0') )
- break;
+ fmtWX += *p;
+ }
}
return fmtWX;
static wxString GetLocaleDateFormat()
{
wxCFRef<CFLocaleRef> currentLocale( CFLocaleCopyCurrent() );
-
+
wxCFRef<CFDateFormatterRef> dateFormatter( CFDateFormatterCreate
(NULL, currentLocale, kCFDateFormatterShortStyle, kCFDateFormatterNoStyle));
wxCFStringRef cfs = wxCFRetain( CFDateFormatterGetFormat(dateFormatter ));
static wxString GetLocaleFullDateFormat()
{
wxCFRef<CFLocaleRef> currentLocale( CFLocaleCopyCurrent() );
-
+
wxCFRef<CFDateFormatterRef> dateFormatter( CFDateFormatterCreate
(NULL, currentLocale, kCFDateFormatterLongStyle, kCFDateFormatterMediumStyle));
wxCFStringRef cfs = wxCFRetain( CFDateFormatterGetFormat(dateFormatter ));
hasValidDate = true;
}
}
-
+
if ( !hasValidDate )
#endif // __WXOSX__
{
dt = ParseFormatAt(input, end,
fmtDate, fmtDateAlt);
Tm tm;
-
+
if ( !dt.IsValid() )
{
wxString fmtDateLong = fmtDate;
wxString fmtDateLongAlt = fmtDateAlt;
-
+
if ( !fmtDateLong.empty() )
{
fmtDateLong, fmtDateLongAlt);
if ( !dtLong.IsValid() )
return false;
-
+
tm = dtLong.GetTm();
}
else