don't allow switches (i.e. options without value) to have values (closes 781373)

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@42197 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2006-10-21 14:04:27 +00:00
parent 9e29cd0a28
commit abce4ee622

View File

@@ -595,7 +595,8 @@ int wxCmdLineParser::Parse(bool showUsage)
optInd = m_data->FindOptionByLongName(name); optInd = m_data->FindOptionByLongName(name);
if ( optInd == wxNOT_FOUND ) if ( optInd == wxNOT_FOUND )
{ {
errorMsg << wxString::Format(_("Unknown long option '%s'"), name.c_str()) << wxT("\n"); errorMsg << wxString::Format(_("Unknown long option '%s'"), name.c_str())
<< _T('\n');
} }
} }
else else
@@ -604,11 +605,12 @@ int wxCmdLineParser::Parse(bool showUsage)
// Print the argument including leading "--" // Print the argument including leading "--"
name.Prepend( wxT("--") ); name.Prepend( wxT("--") );
errorMsg << wxString::Format(_("Unknown option '%s'"), name.c_str()) << wxT("\n"); errorMsg << wxString::Format(_("Unknown option '%s'"), name.c_str())
<< _T('\n');
} }
} }
else else // not a long option
{ {
isLong = false; isLong = false;
@@ -625,7 +627,8 @@ int wxCmdLineParser::Parse(bool showUsage)
{ {
// we couldn't find a valid option name in the // we couldn't find a valid option name in the
// beginning of this string // beginning of this string
errorMsg << wxString::Format(_("Unknown option '%s'"), name.c_str()) << wxT("\n"); errorMsg << wxString::Format(_("Unknown option '%s'"), name.c_str())
<< _T('\n');
break; break;
} }
@@ -672,38 +675,51 @@ int wxCmdLineParser::Parse(bool showUsage)
continue; // will break, in fact continue; // will break, in fact
} }
// look at what follows:
// +1 for leading '-'
const wxChar *p = arg.c_str() + 1 + name.length();
if ( isLong )
p++; // for another leading '-'
wxCmdLineOption& opt = m_data->m_options[(size_t)optInd]; wxCmdLineOption& opt = m_data->m_options[(size_t)optInd];
if ( opt.kind == wxCMD_LINE_SWITCH ) if ( opt.kind == wxCMD_LINE_SWITCH )
{ {
// nothing more to do // we must check that there is no value following the switch
opt.SetHasValue(); if ( *p != _T('\0') )
if ( opt.flags & wxCMD_LINE_OPTION_HELP )
{ {
helpRequested = true; errorMsg << wxString::Format(_("Unexpected characters following option '%s'."), name.c_str())
<< _T('\n');
// it's not an error, but we still stop here
ok = false; ok = false;
} }
else // no value, as expected
{
// nothing more to do
opt.SetHasValue();
if ( opt.flags & wxCMD_LINE_OPTION_HELP )
{
helpRequested = true;
// it's not an error, but we still stop here
ok = false;
}
}
} }
else else // it's an option. not a switch
{ {
// get the value // get the value
// +1 for leading '-'
const wxChar *p = arg.c_str() + 1 + name.length();
if ( isLong ) if ( isLong )
{ {
p++; // for another leading '-'
if ( *p++ != _T('=') ) if ( *p++ != _T('=') )
{ {
errorMsg << wxString::Format(_("Option '%s' requires a value, '=' expected."), name.c_str()) << wxT("\n"); errorMsg << wxString::Format(_("Option '%s' requires a value, '=' expected."), name.c_str())
<< _T('\n');
ok = false; ok = false;
} }
} }
else else // short option
{ {
switch ( *p ) switch ( *p )
{ {
@@ -719,7 +735,8 @@ int wxCmdLineParser::Parse(bool showUsage)
{ {
// ... but there is none // ... but there is none
errorMsg << wxString::Format(_("Option '%s' requires a value."), errorMsg << wxString::Format(_("Option '%s' requires a value."),
name.c_str()) << wxT("\n"); name.c_str())
<< _T('\n');
ok = false; ok = false;
} }
@@ -736,7 +753,8 @@ int wxCmdLineParser::Parse(bool showUsage)
if ( opt.flags & wxCMD_LINE_NEEDS_SEPARATOR ) if ( opt.flags & wxCMD_LINE_NEEDS_SEPARATOR )
{ {
errorMsg << wxString::Format(_("Separator expected after the option '%s'."), errorMsg << wxString::Format(_("Separator expected after the option '%s'."),
name.c_str()) << wxT("\n"); name.c_str())
<< _T('\n');
ok = false; ok = false;
} }
@@ -766,7 +784,8 @@ int wxCmdLineParser::Parse(bool showUsage)
else else
{ {
errorMsg << wxString::Format(_("'%s' is not a correct numeric value for option '%s'."), errorMsg << wxString::Format(_("'%s' is not a correct numeric value for option '%s'."),
value.c_str(), name.c_str()) << wxT("\n"); value.c_str(), name.c_str())
<< _T('\n');
ok = false; ok = false;
} }
@@ -781,7 +800,8 @@ int wxCmdLineParser::Parse(bool showUsage)
if ( !res || *res ) if ( !res || *res )
{ {
errorMsg << wxString::Format(_("Option '%s': '%s' cannot be converted to a date."), errorMsg << wxString::Format(_("Option '%s': '%s' cannot be converted to a date."),
name.c_str(), value.c_str()) << wxT("\n"); name.c_str(), value.c_str())
<< _T('\n');
ok = false; ok = false;
} }
@@ -796,9 +816,8 @@ int wxCmdLineParser::Parse(bool showUsage)
} }
} }
} }
else else // not an option, must be a parameter
{ {
// a parameter
if ( currentParam < countParam ) if ( currentParam < countParam )
{ {
wxCmdLineParam& param = m_data->m_paramDesc[currentParam]; wxCmdLineParam& param = m_data->m_paramDesc[currentParam];
@@ -822,7 +841,8 @@ int wxCmdLineParser::Parse(bool showUsage)
} }
else else
{ {
errorMsg << wxString::Format(_("Unexpected parameter '%s'"), arg.c_str()) << wxT("\n"); errorMsg << wxString::Format(_("Unexpected parameter '%s'"), arg.c_str())
<< _T('\n');
ok = false; ok = false;
} }
@@ -859,7 +879,8 @@ int wxCmdLineParser::Parse(bool showUsage)
} }
errorMsg << wxString::Format(_("The value for the option '%s' must be specified."), errorMsg << wxString::Format(_("The value for the option '%s' must be specified."),
optName.c_str()) << wxT("\n"); optName.c_str())
<< _T('\n');
ok = false; ok = false;
} }
@@ -880,7 +901,8 @@ int wxCmdLineParser::Parse(bool showUsage)
if ( !(param.flags & wxCMD_LINE_PARAM_OPTIONAL) ) if ( !(param.flags & wxCMD_LINE_PARAM_OPTIONAL) )
{ {
errorMsg << wxString::Format(_("The required parameter '%s' was not specified."), errorMsg << wxString::Format(_("The required parameter '%s' was not specified."),
param.description.c_str()) << wxT("\n"); param.description.c_str())
<< _T('\n');
ok = false; ok = false;
} }
@@ -982,7 +1004,7 @@ wxString wxCmdLineParser::GetUsageString()
if (!opt.longName.empty()) if (!opt.longName.empty())
{ {
wxFAIL_MSG( wxT("option with only a long name while long ") wxFAIL_MSG( wxT("option with only a long name while long ")
wxT("options are disabled") ); wxT("options are disabled") );
} }
else else
{ {