ENH: Add upper and lower case support. Close Bug #79 - STRING TOUPPER and TOLOWER
This commit is contained in:
parent
a6fd6a0bae
commit
c4275f54c7
|
@ -18,6 +18,7 @@
|
||||||
#include <cmsys/RegularExpression.hxx>
|
#include <cmsys/RegularExpression.hxx>
|
||||||
|
|
||||||
#include <stdlib.h> // required for atoi
|
#include <stdlib.h> // required for atoi
|
||||||
|
#include <ctype.h>
|
||||||
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
||||||
bool cmStringCommand::InitialPass(std::vector<std::string> const& args)
|
bool cmStringCommand::InitialPass(std::vector<std::string> const& args)
|
||||||
{
|
{
|
||||||
|
@ -32,6 +33,14 @@ bool cmStringCommand::InitialPass(std::vector<std::string> const& args)
|
||||||
{
|
{
|
||||||
return this->HandleRegexCommand(args);
|
return this->HandleRegexCommand(args);
|
||||||
}
|
}
|
||||||
|
else if(subCommand == "TOLOWER")
|
||||||
|
{
|
||||||
|
return this->HandleToUpperLowerCommand(args, false);
|
||||||
|
}
|
||||||
|
else if(subCommand == "TOUPPER")
|
||||||
|
{
|
||||||
|
return this->HandleToUpperLowerCommand(args, true);
|
||||||
|
}
|
||||||
else if(subCommand == "COMPARE")
|
else if(subCommand == "COMPARE")
|
||||||
{
|
{
|
||||||
return this->HandleCompareCommand(args);
|
return this->HandleCompareCommand(args);
|
||||||
|
@ -46,6 +55,35 @@ bool cmStringCommand::InitialPass(std::vector<std::string> const& args)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
bool cmStringCommand::HandleToUpperLowerCommand(
|
||||||
|
std::vector<std::string> const& args, bool toUpper)
|
||||||
|
{
|
||||||
|
if ( args.size() <= 1 )
|
||||||
|
{
|
||||||
|
this->SetError("no output variable specified");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string outvar = args[2];
|
||||||
|
std::string output;
|
||||||
|
|
||||||
|
bool first = true;
|
||||||
|
|
||||||
|
if (toUpper)
|
||||||
|
{
|
||||||
|
output = cmSystemTools::UpperCase(args[1]);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
output = cmSystemTools::LowerCase(args[1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Store the output in the provided variable.
|
||||||
|
m_Makefile->AddDefinition(outvar.c_str(), output.c_str());
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
||||||
bool cmStringCommand::HandleAsciiCommand(std::vector<std::string> const& args)
|
bool cmStringCommand::HandleAsciiCommand(std::vector<std::string> const& args)
|
||||||
{
|
{
|
||||||
|
|
|
@ -78,6 +78,8 @@ public:
|
||||||
" STRING(COMPARE LESS <string1> <string2> <output variable>)\n"
|
" STRING(COMPARE LESS <string1> <string2> <output variable>)\n"
|
||||||
" STRING(COMPARE GREATER <string1> <string2> <output variable>)\n"
|
" STRING(COMPARE GREATER <string1> <string2> <output variable>)\n"
|
||||||
" STRING(ASCII <number> [<number> ...] <output variable>)\n"
|
" STRING(ASCII <number> [<number> ...] <output variable>)\n"
|
||||||
|
" STRING(TOUPPER <string1> <output variable>)\n"
|
||||||
|
" STRING(TOLOWER <string1> <output variable>)\n"
|
||||||
"REGEX MATCH will match the regular expression once and store the "
|
"REGEX MATCH will match the regular expression once and store the "
|
||||||
"match in the output variable.\n"
|
"match in the output variable.\n"
|
||||||
"REGEX MATCHALL will match the regular expression as many times as "
|
"REGEX MATCHALL will match the regular expression as many times as "
|
||||||
|
@ -87,7 +89,8 @@ public:
|
||||||
"in the output.\n"
|
"in the output.\n"
|
||||||
"COMPARE EQUAL/NOTEQUAL/LESS/GREATER will compare the strings and "
|
"COMPARE EQUAL/NOTEQUAL/LESS/GREATER will compare the strings and "
|
||||||
"store true or false in the output variable.\n"
|
"store true or false in the output variable.\n"
|
||||||
"ASCII will convert all numbers into corresponding ASCII characters.";
|
"ASCII will convert all numbers into corresponding ASCII characters.\n"
|
||||||
|
"TOUPPER/TOLOWER will convert string to upper/lower characters.";
|
||||||
}
|
}
|
||||||
|
|
||||||
cmTypeMacro(cmStringCommand, cmCommand);
|
cmTypeMacro(cmStringCommand, cmCommand);
|
||||||
|
@ -97,6 +100,7 @@ protected:
|
||||||
bool RegexMatch(std::vector<std::string> const& args);
|
bool RegexMatch(std::vector<std::string> const& args);
|
||||||
bool RegexMatchAll(std::vector<std::string> const& args);
|
bool RegexMatchAll(std::vector<std::string> const& args);
|
||||||
bool RegexReplace(std::vector<std::string> const& args);
|
bool RegexReplace(std::vector<std::string> const& args);
|
||||||
|
bool HandleToUpperLowerCommand(std::vector<std::string> const& args, bool toUpper);
|
||||||
bool HandleCompareCommand(std::vector<std::string> const& args);
|
bool HandleCompareCommand(std::vector<std::string> const& args);
|
||||||
|
|
||||||
class RegexReplacement
|
class RegexReplacement
|
||||||
|
|
Loading…
Reference in New Issue