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
p.AddSwitch("b");
p.AddSwitch("c");
p.AddSwitch("d");
+ p.AddSwitch("n", "neg", "Switch that can be negated",
+ wxCMD_LINE_SWITCH_NEGATABLE);
p.SetCmdLine("");
CPPUNIT_ASSERT_EQUAL(0, p.Parse(false) );
CPPUNIT_ASSERT( !p.Found("b") );
CPPUNIT_ASSERT( !p.Found("c") );
CPPUNIT_ASSERT( p.Found("d") );
+
+ p.SetCmdLine("-n");
+ CPPUNIT_ASSERT_EQUAL(0, p.Parse(false) );
+ CPPUNIT_ASSERT_EQUAL(wxCMD_SWITCH_NOT_FOUND, p.FoundSwitch("a") );
+ CPPUNIT_ASSERT_EQUAL(wxCMD_SWITCH_ON, p.FoundSwitch("n") );
+
+ p.SetCmdLine("-n-");
+ CPPUNIT_ASSERT_EQUAL(0, p.Parse(false) );
+ CPPUNIT_ASSERT_EQUAL(wxCMD_SWITCH_OFF, p.FoundSwitch("neg") );
+
+ p.SetCmdLine("--neg");
+ CPPUNIT_ASSERT_EQUAL(0, p.Parse(false) );
+ CPPUNIT_ASSERT_EQUAL(wxCMD_SWITCH_ON, p.FoundSwitch("neg") );
+
+ p.SetCmdLine("--neg-");
+ CPPUNIT_ASSERT_EQUAL(0, p.Parse(false) );
+ CPPUNIT_ASSERT_EQUAL(wxCMD_SWITCH_OFF, p.FoundSwitch("n") );
}
void CmdLineTestCase::Usage()