X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/74698d3a22d5e611bbcd731a3ade616c66cfaca6..e5c4c38b5d3523bfac08987b5ec09d34f4f61caa:/src/common/cmdline.cpp diff --git a/src/common/cmdline.cpp b/src/common/cmdline.cpp index 1c74dfdb5e..87c1c8ecee 100644 --- a/src/common/cmdline.cpp +++ b/src/common/cmdline.cpp @@ -6,7 +6,7 @@ // Created: 05.01.00 // RCS-ID: $Id$ // Copyright: (c) 2000 Vadim Zeitlin -// Licence: wxWindows license +// Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// // ============================================================================ @@ -86,6 +86,7 @@ struct wxCmdLineOption GetLongOptionName(lng).Len() == lng.Len(), wxT("Long option contains invalid characters") ); + kind = k; @@ -113,15 +114,19 @@ struct wxCmdLineOption { Check(wxCMD_LINE_VAL_NUMBER); return m_longVal; } const wxString& GetStrVal() const { Check(wxCMD_LINE_VAL_STRING); return m_strVal; } +#if wxUSE_DATETIME const wxDateTime& GetDateVal() const { Check(wxCMD_LINE_VAL_DATE); return m_dateVal; } +#endif // wxUSE_DATETIME void SetLongVal(long val) { Check(wxCMD_LINE_VAL_NUMBER); m_longVal = val; m_hasVal = TRUE; } void SetStrVal(const wxString& val) { Check(wxCMD_LINE_VAL_STRING); m_strVal = val; m_hasVal = TRUE; } +#if wxUSE_DATETIME void SetDateVal(const wxDateTime val) { Check(wxCMD_LINE_VAL_DATE); m_dateVal = val; m_hasVal = TRUE; } +#endif // wxUSE_DATETIME void SetHasValue(bool hasValue = TRUE) { m_hasVal = hasValue; } bool HasValue() const { return m_hasVal; } @@ -139,7 +144,9 @@ private: long m_longVal; wxString m_strVal; +#if wxUSE_DATETIME wxDateTime m_dateVal; +#endif // wxUSE_DATETIME }; struct wxCmdLineParam @@ -458,6 +465,7 @@ bool wxCmdLineParser::Found(const wxString& name, long *value) const return TRUE; } +#if wxUSE_DATETIME bool wxCmdLineParser::Found(const wxString& name, wxDateTime *value) const { int i = m_data->FindOption(name); @@ -476,6 +484,7 @@ bool wxCmdLineParser::Found(const wxString& name, wxDateTime *value) const return TRUE; } +#endif // wxUSE_DATETIME size_t wxCmdLineParser::GetParamCount() const { @@ -561,7 +570,7 @@ int wxCmdLineParser::Parse(bool showUsage) optInd = m_data->FindOptionByLongName(name); if ( optInd == wxNOT_FOUND ) { - errorMsg << wxString::Format(_("Unknown long option '%s'"), name.c_str()) << "\n"; + errorMsg << wxString::Format(_("Unknown long option '%s'"), name.c_str()) << wxT("\n"); } } else @@ -570,7 +579,7 @@ int wxCmdLineParser::Parse(bool showUsage) // Print the argument including leading "--" name.Prepend( wxT("--") ); - errorMsg << wxString::Format(_("Unknown option '%s'"), name.c_str()) << "\n"; + errorMsg << wxString::Format(_("Unknown option '%s'"), name.c_str()) << wxT("\n"); } } @@ -591,7 +600,7 @@ int wxCmdLineParser::Parse(bool showUsage) { // we couldn't find a valid option name in the // beginning of this string - errorMsg << wxString::Format(_("Unknown option '%s'"), name.c_str()) << "\n"; + errorMsg << wxString::Format(_("Unknown option '%s'"), name.c_str()) << wxT("\n"); break; } @@ -663,7 +672,7 @@ int wxCmdLineParser::Parse(bool showUsage) if ( *p++ != _T('=') ) { - errorMsg << wxString::Format(_("Option '%s' requires a value, '=' expected."), name.c_str()) << "\n"; + errorMsg << wxString::Format(_("Option '%s' requires a value, '=' expected."), name.c_str()) << wxT("\n"); ok = FALSE; } @@ -684,7 +693,7 @@ int wxCmdLineParser::Parse(bool showUsage) { // ... but there is none errorMsg << wxString::Format(_("Option '%s' requires a value."), - name.c_str()) << "\n"; + name.c_str()) << wxT("\n"); ok = FALSE; } @@ -701,7 +710,7 @@ int wxCmdLineParser::Parse(bool showUsage) if ( opt.flags & wxCMD_LINE_NEEDS_SEPARATOR ) { errorMsg << wxString::Format(_("Separator expected after the option '%s'."), - name.c_str()) << "\n"; + name.c_str()) << wxT("\n"); ok = FALSE; } @@ -731,13 +740,14 @@ int wxCmdLineParser::Parse(bool showUsage) else { errorMsg << wxString::Format(_("'%s' is not a correct numeric value for option '%s'."), - value.c_str(), name.c_str()) << "\n"; + value.c_str(), name.c_str()) << wxT("\n"); ok = FALSE; } } break; +#if wxUSE_DATETIME case wxCMD_LINE_VAL_DATE: { wxDateTime dt; @@ -745,7 +755,7 @@ int wxCmdLineParser::Parse(bool showUsage) if ( !res || *res ) { errorMsg << wxString::Format(_("Option '%s': '%s' cannot be converted to a date."), - name.c_str(), value.c_str()) << "\n"; + name.c_str(), value.c_str()) << wxT("\n"); ok = FALSE; } @@ -755,6 +765,7 @@ int wxCmdLineParser::Parse(bool showUsage) } } break; +#endif // wxUSE_DATETIME } } } @@ -785,7 +796,7 @@ int wxCmdLineParser::Parse(bool showUsage) } else { - errorMsg << wxString::Format(_("Unexpected parameter '%s'"), arg.c_str()) << "\n"; + errorMsg << wxString::Format(_("Unexpected parameter '%s'"), arg.c_str()) << wxT("\n"); ok = FALSE; } @@ -808,13 +819,21 @@ int wxCmdLineParser::Parse(bool showUsage) } else { - optName.Printf(_("%s (or %s)"), - opt.shortName.c_str(), - opt.longName.c_str()); + if ( AreLongOptionsEnabled() ) + { + optName.Printf( _("%s (or %s)"), + opt.shortName.c_str(), + opt.longName.c_str() ); + } + else + { + optName.Printf( wxT("%s"), + opt.shortName.c_str() ); + } } errorMsg << wxString::Format(_("The value for the option '%s' must be specified."), - optName.c_str()) << "\n"; + optName.c_str()) << wxT("\n"); ok = FALSE; } @@ -835,20 +854,30 @@ int wxCmdLineParser::Parse(bool showUsage) if ( !(param.flags & wxCMD_LINE_PARAM_OPTIONAL) ) { errorMsg << wxString::Format(_("The required parameter '%s' was not specified."), - param.description.c_str()) << "\n"; + param.description.c_str()) << wxT("\n"); ok = FALSE; } } } - if ( !ok && errorMsg.length() != 0 ) + // if there was an error during parsing the command line, show this error + // and also the usage message if it had been requested + if ( !ok && (!errorMsg.empty() || (helpRequested && showUsage)) ) { - wxString usage; wxMessageOutput* msgOut = wxMessageOutput::Get(); - if ( showUsage ) usage = GetUsageString(); if ( msgOut ) + { + wxString usage; + if ( showUsage ) + usage = GetUsageString(); + msgOut->Printf( wxT("%s%s"), usage.c_str(), errorMsg.c_str() ); + } + else + { + wxFAIL_MSG( _T("no wxMessageOutput object?") ); + } } return ok ? 0 : helpRequested ? -1 : 1; @@ -860,10 +889,15 @@ int wxCmdLineParser::Parse(bool showUsage) void wxCmdLineParser::Usage() { - wxString usage = GetUsageString(); wxMessageOutput* msgOut = wxMessageOutput::Get(); if ( msgOut ) - msgOut->Printf( wxT("%s"), usage.c_str() ); + { + msgOut->Printf( wxT("%s"), GetUsageString().c_str() ); + } + else + { + wxFAIL_MSG( _T("no wxMessageOutput object?") ); + } } wxString wxCmdLineParser::GetUsageString() @@ -884,7 +918,7 @@ wxString wxCmdLineParser::GetUsageString() wxString usage; wxArrayString namesOptions, descOptions; - if ( !!m_data->m_logo ) + if ( !m_data->m_logo.empty() ) { usage << m_data->m_logo << _T('\n'); } @@ -1020,9 +1054,17 @@ static wxString GetTypeName(wxCmdLineParamType type) wxFAIL_MSG( _T("unknown option type") ); // still fall through - case wxCMD_LINE_VAL_STRING: s = _("str"); break; - case wxCMD_LINE_VAL_NUMBER: s = _("num"); break; - case wxCMD_LINE_VAL_DATE: s = _("date"); break; + case wxCMD_LINE_VAL_STRING: + s = _("str"); + break; + + case wxCMD_LINE_VAL_NUMBER: + s = _("num"); + break; + + case wxCMD_LINE_VAL_DATE: + s = _("date"); + break; } return s; @@ -1085,7 +1127,7 @@ static wxString GetLongOptionName(const wxChar *p) In particular, to pass a single argument containing a space to the program it should be quoted: - + myprog.exe foo bar -> argc = 3, argv[1] = "foo", argv[2] = "bar" myprog.exe "foo bar" -> argc = 2, argv[1] = "foo bar"