e29f4f62c4
X-SVN-Rev: 5659
238 lines
8.7 KiB
C++
238 lines
8.7 KiB
C++
/*
|
|
**********************************************************************
|
|
* Copyright (C) 2001, International Business Machines
|
|
* Corporation and others. All Rights Reserved.
|
|
**********************************************************************
|
|
* Date Name Description
|
|
* 05/23/00 aliu Creation.
|
|
**********************************************************************
|
|
*/
|
|
#include "testutil.h"
|
|
#include "unicode/unicode.h"
|
|
#include "unicode/unistr.h"
|
|
|
|
struct Split {
|
|
UChar ch;
|
|
int8_t i1;
|
|
int8_t i2;
|
|
};
|
|
|
|
static const Split gTestUtilitySplit[] = {
|
|
{0x0250, 4, 5}, // -1
|
|
{0x02B0, 5, 6}, // -2
|
|
{0x0370, 7, 8}, // -3
|
|
{0x0530, 0, 10}, // -4
|
|
{0x0590, 10, 11}, // -5
|
|
{0x0750, 13, 0}, // -6
|
|
{0x07C0, 14, 0}, // -7
|
|
{0x10A0, 28, 29}, // -8
|
|
{0x13A0, 0, 32}, // -9
|
|
{0x16A0, 34, 35}, // -10
|
|
{0x18B0, 37, 0}, // -11
|
|
{0x2070, 40, 41}, // -12
|
|
{0x20A0, 41, -31}, // -13
|
|
{0x2150, 44, 45}, // -14
|
|
{0x2190, 45, 46}, // -15
|
|
{0x2440, 49, -32}, // -16
|
|
{0x25A0, 53, 54}, // -17
|
|
{0x27C0, 56, 0}, // -18
|
|
{0x2FE0, 59, -33}, // -19
|
|
{0x3040, 61, 62}, // -20
|
|
{0x30A0, 62, 63}, // -21
|
|
{0x3130, 64, 65}, // -22
|
|
{0x3190, 65, -34}, // -23
|
|
{0x4DB6, 70, 0}, // -24
|
|
{0xA490, 72, -35}, // -25
|
|
{0xD7A4, 74, 0}, // -26
|
|
{0xFB50, 80, 81}, // -27
|
|
{0xFE20, 0, -36}, // -28
|
|
{0xFEFF, 85, 86}, // -29
|
|
{0xFFF0, 87, -37}, // -30
|
|
{0x20D0, 42, 43}, // -31
|
|
{0x2460, 50, 51}, // -32
|
|
{0x2FF0, 0, 60}, // -33
|
|
{0x31A0, 66, -38}, // -34
|
|
{0xA4D0, 73, 0}, //-35
|
|
{0xFE30, 82, -39}, //-36
|
|
{0xFFFE, 88, 0}, //-37
|
|
{0x31C0, 67, 0}, // -38
|
|
{0xFE50, 83, -40}, //-39
|
|
{0xFE70, 84, 85} // -40
|
|
};
|
|
|
|
int8_t TestUtility::getBlock(UChar c) {
|
|
int8_t block = charToBlock[((uint16_t)c) >> 7];
|
|
while (block < 0) { // take care of exceptions, blocks split across 128 boundaries
|
|
const Split *tuple = &gTestUtilitySplit[-block-1];
|
|
if (c < tuple->ch)
|
|
return tuple->i1; // Always positive or == 0
|
|
else
|
|
block = tuple->i2;
|
|
}
|
|
return block;
|
|
}
|
|
|
|
// returns next letter of script, or 0xFFFF if done
|
|
|
|
UChar TestUtility::getNextLetter(UChar c, int8_t script) {
|
|
while (c < 0xFFFF) {
|
|
++c;
|
|
if (getScript(c) == script && Unicode::isLetter(c)) {
|
|
return c;
|
|
}
|
|
}
|
|
return c;
|
|
}
|
|
|
|
static const UChar HEX[16]={48,49,50,51,52,53,54,55,56,57,65,66,67,68,69,70};
|
|
|
|
UnicodeString TestUtility::hex(UChar ch) {
|
|
UnicodeString buf;
|
|
buf.append(HEX[0xF&(ch>>12)]);
|
|
buf.append(HEX[0xF&(ch>>8)]);
|
|
buf.append(HEX[0xF&(ch>>4)]);
|
|
buf.append(HEX[0xF&ch]);
|
|
return buf;
|
|
}
|
|
|
|
UnicodeString TestUtility::hex(const UnicodeString& s) {
|
|
return hex(s, 44 /*,*/);
|
|
}
|
|
|
|
UnicodeString TestUtility::hex(const UnicodeString& s, UChar sep) {
|
|
if (s.length() == 0) return "";
|
|
UnicodeString result = hex(s.charAt(0));
|
|
for (int32_t i = 1; i < s.length(); ++i) {
|
|
result.append(sep);
|
|
result.append(hex(s.charAt(i)));
|
|
}
|
|
return result;
|
|
}
|
|
|
|
const int8_t TestUtility::blockToScript[] = {
|
|
COMMON_SCRIPT, // 0, <RESERVED_BLOCK>
|
|
LATIN_SCRIPT, // 1, BASIC_LATIN
|
|
LATIN_SCRIPT, // 2, LATIN_1_SUPPLEMENT
|
|
LATIN_SCRIPT, // 3, LATIN_EXTENDED_A
|
|
LATIN_SCRIPT, // 4, LATIN_EXTENDED_B
|
|
LATIN_SCRIPT, // 5, IPA_EXTENSIONS
|
|
COMMON_SCRIPT, // 6, SPACING_MODIFIER_LETTERS
|
|
COMMON_SCRIPT, // 7, COMBINING_DIACRITICAL_MARKS
|
|
GREEK_SCRIPT, // 8, GREEK
|
|
CYRILLIC_SCRIPT, // 9, CYRILLIC
|
|
ARMENIAN_SCRIPT, // 10, ARMENIAN
|
|
HEBREW_SCRIPT, // 11, HEBREW
|
|
ARABIC_SCRIPT, // 12, ARABIC
|
|
SYRIAC_SCRIPT, // 13, SYRIAC
|
|
THAANA_SCRIPT, // 14, THAANA
|
|
DEVANAGARI_SCRIPT, // 15, DEVANAGARI
|
|
BENGALI_SCRIPT, // 16, BENGALI
|
|
GURMUKHI_SCRIPT, // 17, GURMUKHI
|
|
GUJARATI_SCRIPT, // 18, GUJARATI
|
|
ORIYA_SCRIPT, // 19, ORIYA
|
|
TAMIL_SCRIPT, // 20, TAMIL
|
|
TELUGU_SCRIPT, // 21, TELUGU
|
|
KANNADA_SCRIPT, // 22, KANNADA
|
|
MALAYALAM_SCRIPT, // 23, MALAYALAM
|
|
SINHALA_SCRIPT, // 24, SINHALA
|
|
THAI_SCRIPT, // 25, THAI
|
|
LAO_SCRIPT, // 26, LAO
|
|
TIBETAN_SCRIPT, // 27, TIBETAN
|
|
MYANMAR_SCRIPT, // 28, MYANMAR
|
|
GEORGIAN_SCRIPT, // 29, GEORGIAN
|
|
JAMO_SCRIPT, // 30, HANGUL_JAMO
|
|
ETHIOPIC_SCRIPT, // 31, ETHIOPIC
|
|
CHEROKEE_SCRIPT, // 32, CHEROKEE
|
|
ABORIGINAL_SCRIPT, // 33, UNIFIED_CANADIAN_ABORIGINAL_SYLLABICS
|
|
OGHAM_SCRIPT, // 34, OGHAM
|
|
RUNIC_SCRIPT, // 35, RUNIC
|
|
KHMER_SCRIPT, // 36, KHMER
|
|
MONGOLIAN_SCRIPT, // 37, MONGOLIAN
|
|
LATIN_SCRIPT, // 38, LATIN_EXTENDED_ADDITIONAL
|
|
GREEK_SCRIPT, // 39, GREEK_EXTENDED
|
|
COMMON_SCRIPT, // 40, GENERAL_PUNCTUATION
|
|
COMMON_SCRIPT, // 41, SUPERSCRIPTS_AND_SUBSCRIPTS
|
|
COMMON_SCRIPT, // 42, CURRENCY_SYMBOLS
|
|
COMMON_SCRIPT, // 43, COMBINING_MARKS_FOR_SYMBOLS
|
|
COMMON_SCRIPT, // 44, LETTERLIKE_SYMBOLS
|
|
COMMON_SCRIPT, // 45, NUMBER_FORMS
|
|
COMMON_SCRIPT, // 46, ARROWS
|
|
COMMON_SCRIPT, // 47, MATHEMATICAL_OPERATORS
|
|
COMMON_SCRIPT, // 48, MISCELLANEOUS_TECHNICAL
|
|
COMMON_SCRIPT, // 49, CONTROL_PICTURES
|
|
COMMON_SCRIPT, // 50, OPTICAL_CHARACTER_RECOGNITION
|
|
COMMON_SCRIPT, // 51, ENCLOSED_ALPHANUMERICS
|
|
COMMON_SCRIPT, // 52, BOX_DRAWING
|
|
COMMON_SCRIPT, // 53, BLOCK_ELEMENTS
|
|
COMMON_SCRIPT, // 54, GEOMETRIC_SHAPES
|
|
COMMON_SCRIPT, // 55, MISCELLANEOUS_SYMBOLS
|
|
COMMON_SCRIPT, // 56, DINGBATS
|
|
COMMON_SCRIPT, // 57, BRAILLE_PATTERNS
|
|
HAN_SCRIPT, // 58, CJK_RADICALS_SUPPLEMENT
|
|
HAN_SCRIPT, // 59, KANGXI_RADICALS
|
|
HAN_SCRIPT, // 60, IDEOGRAPHIC_DESCRIPTION_CHARACTERS
|
|
COMMON_SCRIPT, // 61, CJK_SYMBOLS_AND_PUNCTUATION
|
|
HIRAGANA_SCRIPT, // 62, HIRAGANA
|
|
KATAKANA_SCRIPT, // 63, KATAKANA
|
|
BOPOMOFO_SCRIPT, // 64, BOPOMOFO
|
|
JAMO_SCRIPT, // 65, HANGUL_COMPATIBILITY_JAMO
|
|
HAN_SCRIPT, // 66, KANBUN
|
|
BOPOMOFO_SCRIPT, // 67, BOPOMOFO_EXTENDED
|
|
COMMON_SCRIPT, // 68, ENCLOSED_CJK_LETTERS_AND_MONTHS
|
|
COMMON_SCRIPT, // 69, CJK_COMPATIBILITY
|
|
HAN_SCRIPT, // 70, CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A
|
|
HAN_SCRIPT, // 71, CJK_UNIFIED_IDEOGRAPHS
|
|
YI_SCRIPT, // 72, YI_SYLLABLES
|
|
YI_SCRIPT, // 73, YI_RADICALS
|
|
HANGUL_SCRIPT, // 74, HANGUL_SYLLABLES
|
|
COMMON_SCRIPT, // 75, HIGH_SURROGATES
|
|
COMMON_SCRIPT, // 76, HIGH_PRIVATE_USE_SURROGATES
|
|
COMMON_SCRIPT, // 77, LOW_SURROGATES
|
|
COMMON_SCRIPT, // 78, PRIVATE_USE
|
|
HAN_SCRIPT, // 79, CJK_COMPATIBILITY_IDEOGRAPHS
|
|
COMMON_SCRIPT, // 80, ALPHABETIC_PRESENTATION_FORMS
|
|
ARABIC_SCRIPT, // 81, ARABIC_PRESENTATION_FORMS_A
|
|
COMMON_SCRIPT, // 82, COMBINING_HALF_MARKS
|
|
COMMON_SCRIPT, // 83, CJK_COMPATIBILITY_FORMS
|
|
COMMON_SCRIPT, // 84, SMALL_FORM_VARIANTS
|
|
ARABIC_SCRIPT, // 85, ARABIC_PRESENTATION_FORMS_B
|
|
COMMON_SCRIPT, // 86, SPECIALS
|
|
COMMON_SCRIPT, // 87, HALFWIDTH_AND_FULLWIDTH_FORMS
|
|
COMMON_SCRIPT, // 88, SPECIALS
|
|
};
|
|
|
|
const int8_t TestUtility::charToBlock[] = {
|
|
1, 2, 3, 4, -1, -2, -3, 8, 9, 9, -4, -5, 12, 12, -6, -7,
|
|
0, 0, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 27,
|
|
28, -8, 30, 30, 31, 31, 31, -9, 33, 33, 33, 33, 33, -10, 0, 36,
|
|
37, -11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, 38, 39, 39,
|
|
-12, -13, -14, -15, 47, 47, 48, 48, -16, 51, 52, -17, 55, 55, 56, -18,
|
|
57, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58, 59, -19,
|
|
-20, -21, -22, -23, 68, 68, 69, 69, 70, 70, 70, 70, 70, 70, 70, 70,
|
|
70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70,
|
|
70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70,
|
|
70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, -24, 71, 71, 71, 71,
|
|
71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71,
|
|
71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71,
|
|
71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71,
|
|
71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71,
|
|
71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71,
|
|
71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71,
|
|
71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71,
|
|
71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71,
|
|
71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71,
|
|
71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71,
|
|
72, 72, 72, 72, 72, 72, 72, 72, 72, -25, 0, 0, 0, 0, 0, 0,
|
|
0, 0, 0, 0, 0, 0, 0, 0, 74, 74, 74, 74, 74, 74, 74, 74,
|
|
74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74,
|
|
74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74,
|
|
74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74,
|
|
74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74,
|
|
74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, -26,
|
|
75, 75, 75, 75, 75, 75, 75, 76, 77, 77, 77, 77, 77, 77, 77, 77,
|
|
78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78,
|
|
78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78,
|
|
78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78,
|
|
78, 78, 79, 79, 79, 79, -27, 81, 81, 81, 81, 81, -28, -29, 87, -30
|
|
};
|