diff options
Diffstat (limited to 'Source')
-rw-r--r-- | Source/cmStringCommand.cxx | 41 | ||||
-rw-r--r-- | Source/cmStringCommand.h | 4 |
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 |