mirror of
https://github.com/cuberite/TCLAP.git
synced 2025-09-08 11:49:39 -04:00
allowing blank flags
This commit is contained in:
parent
d91d422210
commit
84a061ca4e
46
src/Arg.cpp
46
src/Arg.cpp
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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 );
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user