allowing blank flags

This commit is contained in:
mes5k 2004-02-10 03:54:19 +00:00
parent d91d422210
commit 84a061ca4e
3 changed files with 49 additions and 13 deletions

View File

@ -31,6 +31,7 @@ const char Arg::blankChar = '*';
const char Arg::flagStartChar = '-';
const string Arg::flagStartString = "-";
const string Arg::nameStartString = "--";
const string Arg::ignoreNameString = "ignore_rest";
Arg::Arg( const string& flag,
const string& name,
@ -53,6 +54,24 @@ Arg::Arg( const string& flag,
if ( _flag.length() > 1 )
throw(ArgException("Argument flag can only be one character long",
toString() ) );
if ( _name != ignoreNameString &&
( _flag == Arg::flagStartString ||
_flag == Arg::nameStartString ||
_flag == " " ) )
throw(ArgException("Argument flag cannot be either '" +
Arg::flagStartString + "' or '" +
Arg::nameStartString + "' or a space.",
toString() ) );
if ( ( _name.find( Arg::flagStartString, 0 ) != string::npos ) ||
( _name.find( Arg::nameStartString, 0 ) != string::npos ) ||
( _name.find( " ", 0 ) != string::npos ) )
throw(ArgException("Argument name cannot contain either '" +
Arg::flagStartString + "' or '" +
Arg::nameStartString + "' or space.",
toString() ) );
};
Arg::Arg()
@ -107,7 +126,10 @@ string Arg::shortID( const string& valueId ) const
{
string id = "";
if ( _flag != "" )
id = Arg::flagStartString + _flag;
else
id = Arg::nameStartString + _name;
string delim = " ";
delim[0] = Arg::_delimiter; // ugly!!!
@ -125,13 +147,17 @@ string Arg::longID( const string& valueId ) const
{
string id = "";
id = Arg::flagStartString + _flag;
if ( _flag != "" )
{
id += Arg::flagStartString + _flag;
if ( _valueRequired )
id += " <" + valueId + ">";
id += ", ";
}
id += ", " + Arg::nameStartString + _name;
id += Arg::nameStartString + _name;
if ( _valueRequired )
id += " <" + valueId + ">";
@ -142,7 +168,7 @@ string Arg::longID( const string& valueId ) const
bool Arg::operator==(const Arg& a)
{
if ( _flag == a._flag ||
if ( ( _flag != "" && _flag == a._flag ) ||
_name == a._name ||
_description == a._description )
return true;
@ -157,8 +183,6 @@ bool Arg::processArg(int* i, vector<string>& args)
return false;
}
const string& Arg::getName() const { return _name; } ;
string Arg::getDescription() const
{
string desc = "";
@ -173,7 +197,11 @@ string Arg::getDescription() const
};
const string& Arg::getFlag() const { return _flag; };
const string& Arg::getName() const { return _name; } ;
bool Arg::isRequired() const { return _required; }
bool Arg::isValueRequired() const { return _valueRequired; }
bool Arg::isSet() const
@ -202,7 +230,13 @@ bool Arg::argMatches( const string& argFlag ) const
string Arg::toString() const
{
string s = Arg::flagStartString + _flag + " (" + Arg::nameStartString + _name + ")";
string s = "";
if ( _flag != "" )
s += Arg::flagStartString + _flag + " ";
s += "(" + Arg::nameStartString + _name + ")";
return s;
}

View File

@ -58,7 +58,8 @@ void CmdLine::_constructor()
false, new VersionVisitor( this ) );
add( *vers );
SwitchArg* ignore = new SwitchArg(Arg::flagStartString,"ignore_rest",
SwitchArg* ignore = new SwitchArg(Arg::flagStartString,
Arg::ignoreNameString,
"Ignores the rest of the labeled arguments following this flag.",
false, new IgnoreRestVisitor() );
add( *ignore );

View File

@ -43,11 +43,12 @@ bool SwitchArg::getValue() { return _value; };
bool SwitchArg::combinedSwitchesMatch(string& combinedSwitches )
{
// make sure this is actually a combined switch
if ( combinedSwitches[0] != '-' )
if ( combinedSwitches[0] != Arg::flagStartString[0] )
return false;
// make sure it isn't a long name
if ( combinedSwitches[1] == '-' )
if ( combinedSwitches.substr( 0, Arg::nameStartString.length() ) ==
Arg::nameStartString )
return false;
// ok, we're not specifying a ValueArg, so we know that we have