mirror of
https://github.com/TorqueGameEngines/Torque3D.git
synced 2026-03-13 09:20:47 +00:00
Added string manipulation functions
added some string manipulation functions, some are slightly different versions of existing functions.
This commit is contained in:
parent
39d5563a8c
commit
14037a742a
1 changed files with 97 additions and 0 deletions
|
|
@ -370,6 +370,40 @@ DefineConsoleFunction( strlen, S32, ( const char* str ),,
|
|||
return dStrlen( str );
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
DefineConsoleFunction( strlenskip, S32, ( const char* str, const char* first, const char* last ),,
|
||||
"Calculate the length of a string in characters, skipping everything between and including first and last.\n"
|
||||
"@param str A string.\n"
|
||||
"@param first First character to look for to skip block of text.\n"
|
||||
"@param last Second character to look for to skip block of text.\n"
|
||||
"@return The length of the given string skipping blocks of text between characters.\n"
|
||||
"@ingroup Strings" )
|
||||
{
|
||||
const UTF8* pos = str;
|
||||
U32 size = 0;
|
||||
U32 length = dStrlen(str);
|
||||
bool count = true;
|
||||
|
||||
//loop through each character counting each character, skipping tags (anything with < followed by >)
|
||||
for(U32 i = 0; i < length; i++, pos++)
|
||||
{
|
||||
if(count)
|
||||
{
|
||||
if(*pos == first[0])
|
||||
count = false;
|
||||
else
|
||||
size++;
|
||||
}
|
||||
else
|
||||
{
|
||||
if(*pos == last[0])
|
||||
count = true;
|
||||
}
|
||||
}
|
||||
|
||||
return S32(size);
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
DefineConsoleFunction( strstr, S32, ( const char* string, const char* substring ),,
|
||||
|
|
@ -416,6 +450,33 @@ DefineConsoleFunction( strpos, S32, ( const char* haystack, const char* needle,
|
|||
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
DefineConsoleFunction( strposr, S32, ( const char* haystack, const char* needle, S32 offset ), ( 0 ),
|
||||
"Find the start of @a needle in @a haystack searching from right to left beginning at the given offset.\n"
|
||||
"@param haystack The string to search.\n"
|
||||
"@param needle The string to search for.\n"
|
||||
"@return The index at which the first occurrence of @a needle was found in @a heystack or -1 if no match was found.\n\n"
|
||||
"@tsexample\n"
|
||||
"strposr( \"b ab\", \"b\", 1 ) // Returns 2.\n"
|
||||
"@endtsexample\n"
|
||||
"@ingroup Strings" )
|
||||
{
|
||||
U32 sublen = dStrlen( needle );
|
||||
U32 strlen = dStrlen( haystack );
|
||||
S32 start = strlen - offset;
|
||||
|
||||
if(start < 0 || start > strlen)
|
||||
return -1;
|
||||
|
||||
if (start + sublen > strlen)
|
||||
start = strlen - sublen;
|
||||
for(; start >= 0; start--)
|
||||
if(!dStrncmp(haystack + start, needle, sublen))
|
||||
return start;
|
||||
return -1;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
DefineConsoleFunction( ltrim, const char*, ( const char* str ),,
|
||||
"Remove leading whitespace from the string.\n"
|
||||
"@param str A string.\n"
|
||||
|
|
@ -762,6 +823,18 @@ DefineConsoleFunction( stripTrailingNumber, String, ( const char* str ),,
|
|||
return String::GetTrailingNumber( str, suffix );
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
DefineConsoleFunction( getFirstNumber, String, ( const char* str ),,
|
||||
"Get the first occuring number from @a str.\n"
|
||||
"@param str The string from which to read out the first number.\n"
|
||||
"@return String representation of the number or "" if no number.\n\n")
|
||||
{
|
||||
U32 start;
|
||||
U32 end;
|
||||
return String::GetFirstNumber(str, start, end);
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------
|
||||
|
||||
DefineConsoleFunction( isspace, bool, ( const char* str, S32 index ),,
|
||||
|
|
@ -948,6 +1021,30 @@ DefineConsoleFunction( strrchrpos, S32, ( const char* str, const char* chr, S32
|
|||
|
||||
//----------------------------------------------------------------
|
||||
|
||||
DefineConsoleFunction( strToggleCaseToWords, const char*, ( const char* str ),,
|
||||
"Parse a Toggle Case word into separate words.\n"
|
||||
"@param str The string to parse.\n"
|
||||
"@return new string space separated.\n\n"
|
||||
"@tsexample\n"
|
||||
"strToggleCaseToWords( \"HelloWorld\" ) // Returns \"Hello World\".\n"
|
||||
"@endtsexample\n"
|
||||
"@ingroup Strings" )
|
||||
{
|
||||
String newStr;
|
||||
for(S32 i = 0; str[i]; i++)
|
||||
{
|
||||
//If capitol add a space
|
||||
if(i != 0 && str[i] >= 65 && str[i] <= 90)
|
||||
newStr += " ";
|
||||
|
||||
newStr += str[i];
|
||||
}
|
||||
|
||||
return Con::getReturnBuffer(newStr);
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------
|
||||
|
||||
// Warning: isInt and isFloat are very 'strict' and might need to be adjusted to allow other values. //seanmc
|
||||
DefineConsoleFunction( isInt, bool, ( const char* str),,
|
||||
"Returns true if the string is an integer.\n"
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue