scorpioengine/src/string_functions.cpp

95 lines
1.2 KiB
C++

#include <utf8/utf8.h>
#include "string_functions.h"
wchar_t ToLower(wchar_t c)
{
if( c >= 'A' && c <= 'Z' )
c = c - 'A' + 'a';
return c;
}
bool CompareNoCase(const wchar_t * str1, const wchar_t * str2)
{
while( *str1 && *str2 && ToLower(*str1) == ToLower(*str2) )
{
++str1;
++str2;
}
if( *str1 == 0 && *str2 == 0 )
return true;
return false;
}
bool CompareNoCase(const std::wstring & str1, const wchar_t * str2)
{
return CompareNoCase(str1.c_str(), str2);
}
bool IsDecDigit(wchar_t c)
{
if( c >= '0' && c <= '9' )
return true;
return false;
}
bool IsHexDigit(wchar_t c)
{
if( c >= '0' && c <= '9' )
return true;
if( ToLower(c) >= 'a' && ToLower(c) <= 'f' )
return true;
return false;
}
int HexDigitToValue(wchar_t c)
{
if( c >= '0' && c <= '9' )
return static_cast<int>(c - '0');
if( ToLower(c) >= 'a' && ToLower(c) <= 'f' )
return static_cast<int>(c - 'a') + 10;
return 0;
}
// do not use \r or \n here
bool IsWhite(wchar_t c)
{
return (c == ' ' || c == '\t');
}
void TrimWhiteAtEnd(std::wstring & str)
{
if( !str.empty() )
{
size_t i = str.size();
while( i > 0 && IsWhite(str[i-1]) )
{
i -= 1;
}
if( i < str.size() )
str.erase(i);
}
}