add SkUnichar_IsVariationSelector()

git-svn-id: http://skia.googlecode.com/svn/trunk@2915 2bbb7eff-a529-9590-31e7-b0007b416f81
This commit is contained in:
reed@google.com 2011-12-21 15:21:32 +00:00
Родитель ef279d36ca
Коммит 419f43348a
3 изменённых файлов: 61 добавлений и 0 удалений

Просмотреть файл

@ -64,6 +64,7 @@
'../tests/Test.h',
'../tests/TestSize.cpp',
'../tests/ToUnicode.cpp',
'../tests/UnicodeTest.cpp',
'../tests/UtilsTest.cpp',
'../tests/WArrayTest.cpp',
'../tests/WritePixelsTest.cpp',

Просмотреть файл

@ -91,6 +91,21 @@ size_t SkUTF16_FromUnichar(SkUnichar uni, uint16_t utf16[] = NULL);
size_t SkUTF16_ToUTF8(const uint16_t utf16[], int numberOf16BitValues,
char utf8[] = NULL);
static bool SkUnichar_IsVariationSelector(SkUnichar uni) {
/* The 'true' ranges are:
* 0x180B <= uni <= 0x180D
* 0xFE00 <= uni <= 0xFE0F
* 0xE0100 <= uni <= 0xE01EF
*/
if (uni < 0x180B || uni > 0xE01EF) {
return false;
}
if ((uni > 0x180D && uni < 0xFE00) || (uni > 0xFE0F && uni < 0xE0100)) {
return false;
}
return true;
}
///////////////////////////////////////////////////////////////////////////////
class SkAutoTrace {

45
tests/UnicodeTest.cpp Normal file
Просмотреть файл

@ -0,0 +1,45 @@
/*
* Copyright 2011 Google Inc.
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#include "Test.h"
#include "SkUtils.h"
// Unicode Variation Selector ranges: inclusive
#define UVS_MIN0 0x180B
#define UVS_MAX0 0x180D
#define UVS_MIN1 0xFE00
#define UVS_MAX1 0xFE0F
#define UVS_MIN2 0xE0100
#define UVS_MAX2 0xE01EF
static bool isUVS(SkUnichar uni) {
return (uni >= UVS_MIN0 && uni <= UVS_MAX0) ||
(uni >= UVS_MIN1 && uni <= UVS_MAX1) ||
(uni >= UVS_MIN2 && uni <= UVS_MAX2);
}
static void test_uvs(skiatest::Reporter* reporter) {
// [min, max], [min, max] ... inclusive
static const SkUnichar gRanges[] = {
UVS_MIN0, UVS_MAX0, UVS_MIN1, UVS_MAX1, UVS_MIN2, UVS_MAX2
};
for (size_t i = 0; i < SK_ARRAY_COUNT(gRanges); i += 2) {
for (SkUnichar uni = gRanges[i] - 8; uni <= gRanges[i+1] + 8; ++uni) {
bool uvs0 = isUVS(uni);
bool uvs1 = SkUnichar_IsVariationSelector(uni);
REPORTER_ASSERT(reporter, uvs0 == uvs1);
}
}
}
static void TestUnicode(skiatest::Reporter* reporter) {
test_uvs(reporter);
}
#include "TestClassDef.h"
DEFINE_TESTCLASS("Unicode", TestUnicodeClass, TestUnicode)