ultimatepp/uppsrc/Core/StrUtil.cpp
cxl 06758e3dad Added CharFilterNotWhitespace
git-svn-id: svn://ultimatepp.org/upp/trunk@377 f0d560ea-af0d-0410-9eb7-867de7ffcac7
2008-08-28 16:42:17 +00:00

112 lines
1.7 KiB
C++

#include <Core/Core.h>
NAMESPACE_UPP
int wstrlen(const wchar *s)
{
const wchar *q = s;
while(*q) q++;
return (int)(q - s);
}
unsigned ctoi(int c)
{
if(c >= '0' && c <= '9')
return c - '0';
if(c >= 'A' && c <= 'Z')
return c - 'A' + 10;
if(c >= 'a' && c <= 'z')
return c - 'a' + 10;
return (unsigned)-1;
}
int CharFilterAscii(int c)
{
return c >= 32 && c < 256 ? c : 0;
}
int CharFilterAscii128(int c)
{
return c >= 32 && c < 128 ? c : 0;
}
int CharFilterUnicode(int c)
{
return c >= 32 && c < 65536 ? c : 0;
}
int CharFilterDigit(int c)
{
return IsDigit(c) ? c : 0;
}
int CharFilterInt(int c)
{
if(c == '+' || c == '-') return c;
return CharFilterDigit(c);
}
int CharFilterDouble(int c)
{
if(c == ',' || c == '.') return '.';
if(c == 'e' || c == 'E') return 'E';
return CharFilterInt(c);
}
int CharFilterWhitespace(int c)
{
return IsSpace(c) ? c : 0;
}
int CharFilterNotWhitespace(int c)
{
return IsSpace(c) ? 0 : c;
}
int CharFilterAlpha(int c)
{
return IsAlpha(c) ? c : 0;
}
int CharFilterAlphaToUpper(int c)
{
return IsAlpha(c) ? IsUpper(c) ? c : ToUpper(c) : 0;
}
int CharFilterAlphaToLower(int c)
{
return IsAlpha(c) ? IsLower(c) ? c : ToLower(c) : 0;
}
int CharFilterDefaultToUpperAscii(int c)
{
return ToUpper(ToAscii(c, CHARSET_DEFAULT));
}
int CharFilterCrLf(int c)
{
return c == '\r' || c == '\n' ? c : 0;
}
String Filter(const char *s, int (*filter)(int))
{
String result;
while(*s) {
int c = (*filter)((byte)*s++);
if(c) result.Cat(c);
}
return result;
}
String FilterWhile(const char *s, int (*filter)(int))
{
String result;
while(*s) {
int c = (*filter)((byte)*s++);
if(!c) break;
result.Cat(c);
}
return result;
}
END_UPP_NAMESPACE