blob: 2df44f8d9ee2ae00d27e93f19fd3533879fae2c9 [file] [log] [blame]
/*
* Copyright (C) 2006 George Staikos <staikos@kde.org>
* Copyright (C) 2006 Alexey Proskuryakov <ap@nypop.com>
* Copyright (C) 2007-2009 Torch Mobile, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public License
* along with this library; see the file COPYING.LIB. If not, write to
* the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301, USA.
*/
#include "config.h"
#include "UnicodeWince.h"
#include <wchar.h>
namespace WTF {
namespace Unicode {
wchar_t toLower(wchar_t c)
{
return towlower(c);
}
wchar_t toUpper(wchar_t c)
{
return towupper(c);
}
wchar_t foldCase(wchar_t c)
{
return towlower(c);
}
bool isPrintableChar(wchar_t c)
{
return !!iswprint(c);
}
bool isSpace(wchar_t c)
{
return !!iswspace(c);
}
bool isLetter(wchar_t c)
{
return !!iswalpha(c);
}
bool isUpper(wchar_t c)
{
return !!iswupper(c);
}
bool isLower(wchar_t c)
{
return !!iswlower(c);
}
bool isDigit(wchar_t c)
{
return !!iswdigit(c);
}
bool isPunct(wchar_t c)
{
return !!iswpunct(c);
}
int toLower(wchar_t* result, int resultLength, const wchar_t* source, int sourceLength, bool* isError)
{
const UChar* sourceIterator = source;
const UChar* sourceEnd = source + sourceLength;
UChar* resultIterator = result;
UChar* resultEnd = result + resultLength;
int remainingCharacters = 0;
if (sourceLength <= resultLength)
while (sourceIterator < sourceEnd)
*resultIterator++ = towlower(*sourceIterator++);
else
while (resultIterator < resultEnd)
*resultIterator++ = towlower(*sourceIterator++);
if (sourceIterator < sourceEnd)
remainingCharacters += sourceEnd - sourceIterator;
*isError = (remainingCharacters != 0);
if (resultIterator < resultEnd)
*resultIterator = 0;
return (resultIterator - result) + remainingCharacters;
}
int toUpper(wchar_t* result, int resultLength, const wchar_t* source, int sourceLength, bool* isError)
{
const UChar* sourceIterator = source;
const UChar* sourceEnd = source + sourceLength;
UChar* resultIterator = result;
UChar* resultEnd = result + resultLength;
int remainingCharacters = 0;
if (sourceLength <= resultLength)
while (sourceIterator < sourceEnd)
*resultIterator++ = towupper(*sourceIterator++);
else
while (resultIterator < resultEnd)
*resultIterator++ = towupper(*sourceIterator++);
if (sourceIterator < sourceEnd)
remainingCharacters += sourceEnd - sourceIterator;
*isError = (remainingCharacters != 0);
if (resultIterator < resultEnd)
*resultIterator = 0;
return (resultIterator - result) + remainingCharacters;
}
int foldCase(wchar_t* result, int resultLength, const wchar_t* 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;
}
wchar_t toTitleCase(wchar_t c)
{
return towupper(c);
}
Direction direction(UChar32 c)
{
return static_cast<Direction>(UnicodeCE::direction(c));
}
CharCategory category(unsigned int c)
{
return static_cast<CharCategory>(TO_MASK((__int8) UnicodeCE::category(c)));
}
DecompositionType decompositionType(UChar32 c)
{
return static_cast<DecompositionType>(UnicodeCE::decompositionType(c));
}
unsigned char combiningClass(UChar32 c)
{
return UnicodeCE::combiningClass(c);
}
wchar_t mirroredChar(UChar32 c)
{
return UnicodeCE::mirroredChar(c);
}
int digitValue(wchar_t c)
{
return UnicodeCE::digitValue(c);
}
} // namespace Unicode
} // namespace WTF