95 lines
1.2 KiB
C++
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);
|
|
}
|
|
}
|
|
|