if (longOptionsEnabled)
{
+ wxString errorOpt;
+
optInd = m_data->FindOptionByLongName(name);
if ( optInd == wxNOT_FOUND )
{
- errorMsg << wxString::Format(_("Unknown long option '%s'"), name.c_str())
- << wxT('\n');
+ // Check if this could be a negatable long option.
+ if ( name.Last() == '-' )
+ {
+ name.RemoveLast();
+
+ optInd = m_data->FindOptionByLongName(name);
+ if ( optInd != wxNOT_FOUND )
+ {
+ if ( !(m_data->m_options[optInd].flags &
+ wxCMD_LINE_SWITCH_NEGATABLE) )
+ {
+ errorOpt.Printf
+ (
+ _("Option '%s' can't be negated"),
+ name
+ );
+ optInd = wxNOT_FOUND;
+ }
+ }
+ }
+
+ if ( optInd == wxNOT_FOUND )
+ {
+ if ( errorOpt.empty() )
+ {
+ errorOpt.Printf
+ (
+ _("Unknown long option '%s'"),
+ name
+ );
+ }
+
+ errorMsg << errorOpt << wxT('\n');
+ }
}
}
else
case wxCMD_LINE_VAL_DATE:
{
wxDateTime dt;
- wxString::const_iterator end;
- if ( !dt.ParseDate(value, &end) || end != value.end() )
+ wxString::const_iterator endDate;
+ if ( !dt.ParseDate(value, &endDate) || endDate != value.end() )
{
errorMsg << wxString::Format(_("Option '%s': '%s' cannot be converted to a date."),
name.c_str(), value.c_str())
Windows conventions for the command line handling, not Unix ones. For
instance, backslash is not special except when it precedes double quote when
it does quote it.
+
+ TODO: Rewrite this to follow the even more complicated rule used by Windows
+ CommandLineToArgv():
+
+ * A string of backslashes not followed by a quotation mark has no special
+ meaning.
+ * An even number of backslashes followed by a quotation mark is treated as
+ pairs of protected backslashes, followed by a word terminator.
+ * An odd number of backslashes followed by a quotation mark is treated as
+ pairs of protected backslashes, followed by a protected quotation mark.
+
+ See http://blogs.msdn.com/b/oldnewthing/archive/2010/09/17/10063629.aspx
+
+ It could also be useful to provide a converse function which is also
+ non-trivial, see
+
+ http://blogs.msdn.com/b/twistylittlepassagesallalike/archive/2011/04/23/everyone-quotes-arguments-the-wrong-way.aspx
*/
/* static */