#include "config.h"
#include "UnicodeBrew.h"
#include <wchar.h>
#include <wctype.h>
namespace WTF {
namespace Unicode {
UChar toLower(UChar c)
{
return towlower(c);
}
UChar toUpper(UChar c)
{
return towupper(c);
}
UChar foldCase(UChar c)
{
return towlower(c);
}
bool isPrintableChar(UChar c)
{
return !!iswprint(c);
}
bool isUpper(UChar c)
{
return !!iswupper(c);
}
bool isLower(UChar c)
{
return !!iswlower(c);
}
bool isDigit(UChar c)
{
return !!iswdigit(c);
}
bool isPunct(UChar c)
{
return !!iswpunct(c);
}
bool isAlphanumeric(UChar c)
{
return !!iswalnum(c);
}
int toLower(UChar* result, int resultLength, const UChar* source, int sourceLength, bool* isError)
{
const UChar* sourceIterator = source;
const UChar* sourceEnd = source + sourceLength;
UChar* resultIterator = result;
UChar* resultEnd = result + resultLength;
if (sourceLength <= resultLength) {
while (sourceIterator < sourceEnd)
*resultIterator++ = towlower(*sourceIterator++);
} else {
while (resultIterator < resultEnd)
*resultIterator++ = towlower(*sourceIterator++);
}
int remainingCharacters = sourceIterator < sourceEnd ? sourceEnd - sourceIterator : 0;
*isError = !!remainingCharacters;
if (resultIterator < resultEnd)
*resultIterator = 0;
return (resultIterator - result) + remainingCharacters;
}
int toUpper(UChar* result, int resultLength, const UChar* source, int sourceLength, bool* isError)
{
const UChar* sourceIterator = source;
const UChar* sourceEnd = source + sourceLength;
UChar* resultIterator = result;
UChar* resultEnd = result + resultLength;
if (sourceLength <= resultLength) {
while (sourceIterator < sourceEnd)
*resultIterator++ = towupper(*sourceIterator++);
} else {
while (resultIterator < resultEnd)
*resultIterator++ = towupper(*sourceIterator++);
}
int remainingCharacters = sourceIterator < sourceEnd ? sourceEnd - sourceIterator : 0;
*isError = !!remainingCharacters;
if (resultIterator < resultEnd)
*resultIterator = 0;
return (resultIterator - result) + remainingCharacters;
}
int foldCase(UChar* result, int resultLength, const UChar* source, int sourceLength, bool* isError)
{
*isError = false;
if (resultLength < sourceLength) {
*isError = true;
return sourceLength;
}
for (int i = 0; i < sourceLength; ++i)
result[i] = foldCase(source[i]);
return sourceLength;
}
UChar toTitleCase(UChar c)
{
return towupper(c);
}
Direction direction(UChar32 c)
{
return static_cast<Direction>(ICU::direction(c));
}
CharCategory category(unsigned int c)
{
return static_cast<CharCategory>(TO_MASK((int8_t) ICU::category(c)));
}
DecompositionType decompositionType(UChar32 c)
{
return static_cast<DecompositionType>(ICU::decompositionType(c));
}
unsigned char combiningClass(UChar32 c)
{
return ICU::combiningClass(c);
}
UChar mirroredChar(UChar32 c)
{
return ICU::mirroredChar(c);
}
int digitValue(UChar c)
{
return ICU::digitValue(c);
}
bool isSpace(UChar c)
{
return !!iswspace(c);
}
bool isLetter(UChar c)
{
return !!iswalpha(c);
}
} }