summaryrefslogtreecommitdiffstats
path: root/Source
diff options
context:
space:
mode:
Diffstat (limited to 'Source')
-rw-r--r--Source/cmStringCommand.cxx41
-rw-r--r--Source/cmStringCommand.h4
2 files changed, 45 insertions, 0 deletions
diff --git a/Source/cmStringCommand.cxx b/Source/cmStringCommand.cxx
index fa71c90..4bc9ca6 100644
--- a/Source/cmStringCommand.cxx
+++ b/Source/cmStringCommand.cxx
@@ -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);
@@ -614,6 +618,43 @@ bool cmStringCommand
}
//----------------------------------------------------------------------------
+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)
{
diff --git a/Source/cmStringCommand.h b/Source/cmStringCommand.h
index 23e78c7..d46d70c 100644
--- a/Source/cmStringCommand.h
+++ b/Source/cmStringCommand.h
@@ -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