ENH: Add STRING STRIP command

This commit is contained in:
Andy Cedilnik 2007-04-26 21:50:52 -04:00
parent 6697979aaf
commit 1d4613a63b
3 changed files with 59 additions and 0 deletions

View File

@ -68,6 +68,10 @@ bool cmStringCommand::InitialPass(std::vector<std::string> const& args)
{
return this->HandleSubstringCommand(args);
}
else if(subCommand == "STRIP")
{
return this->HandleStripCommand(args);
}
else if(subCommand == "RANDOM")
{
return this->HandleRandomCommand(args);
@ -613,6 +617,43 @@ bool cmStringCommand
return true;
}
//----------------------------------------------------------------------------
bool cmStringCommand::HandleStripCommand(
std::vector<std::string> const& args)
{
if(args.size() != 3)
{
this->SetError("sub-command LENGTH requires two arguments.");
return false;
}
const std::string& stringValue = args[1];
const std::string& variableName = args[2];
size_t inStringLength = stringValue.size();
size_t startPos = inStringLength + 1;
size_t endPos = 0;
const char* ptr = stringValue.c_str();
size_t cc;
for ( cc = 0; cc < inStringLength; ++ cc )
{
if ( !isspace(*ptr) )
{
if ( startPos > inStringLength )
{
startPos = cc;
}
endPos = cc;
}
++ ptr;
}
size_t outLength = endPos - startPos + 1;
this->Makefile->AddDefinition(variableName.c_str(),
stringValue.substr(startPos, outLength).c_str());
return true;
}
//----------------------------------------------------------------------------
bool cmStringCommand
::HandleRandomCommand(std::vector<std::string> const& args)

View File

@ -85,6 +85,7 @@ public:
" STRING(TOLOWER <string1> <output variable>)\n"
" STRING(LENGTH <string> <output variable>)\n"
" STRING(SUBSTRING <string> <begin> <length> <output variable>)\n"
" STRING(STRIP <string> <output variable>)\n"
" STRING(RANDOM [LENGTH <length>] [ALPHABET <alphabet>]\n"
" <output variable>)\n"
"REGEX MATCH will match the regular expression once and store the "
@ -111,6 +112,8 @@ public:
"TOUPPER/TOLOWER will convert string to upper/lower characters.\n"
"LENGTH will return a given string's length.\n"
"SUBSTRING will return a substring of a given string.\n"
"STRIP will return a substring of a given string with leading "
"and trailing spaces removed.\n"
"RANDOM will return a random string of given length consisting of "
"characters from the given alphabet. Default length is 5 "
"characters and default alphabet is all numbers and upper and "
@ -131,6 +134,7 @@ protected:
bool HandleReplaceCommand(std::vector<std::string> const& args);
bool HandleLengthCommand(std::vector<std::string> const& args);
bool HandleSubstringCommand(std::vector<std::string> const& args);
bool HandleStripCommand(std::vector<std::string> const& args);
bool HandleRandomCommand(std::vector<std::string> const& args);
class RegexReplacement

View File

@ -34,6 +34,20 @@ STRING(TOUPPER "CMake" tuvar)
STRING(TOLOWER "CMake" tlvar)
STRING(REPLACE "Autoconf" "CMake" repvar "People should use Autoconf")
STRING(STRIP "
ST1
" ST1)
STRING(STRIP "ST2 " ST2)
STRING(STRIP " ST3" ST3)
FOREACH(var ST1 ST2 ST3)
IF("${var}" STREQUAL "${${var}}")
MESSAGE("[${var}] == [${${var}}]")
ELSE("${var}" STREQUAL "${${var}}")
MESSAGE(SEND_ERROR "Problem with the STRIP command for ${var}: [${${var}}]")
ENDIF("${var}" STREQUAL "${${var}}")
ENDFOREACH(var)
STRING(SUBSTRING "People should use Autoconf" 7 10 substringres)
SET(substringres "Everybody ${substringres} CMake")