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:
@@ -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
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user