]> git.saurik.com Git - apple/javascriptcore.git/blob - wtf/unicode/wince/UnicodeWinCE.h
JavaScriptCore-903.tar.gz
[apple/javascriptcore.git] / wtf / unicode / wince / UnicodeWinCE.h
1 /*
2 * Copyright (C) 2006 George Staikos <staikos@kde.org>
3 * Copyright (C) 2006 Alexey Proskuryakov <ap@nypop.com>
4 * Copyright (C) 2007 Apple Computer, Inc. All rights reserved.
5 * Copyright (C) 2007-2009 Torch Mobile, Inc.
6 *
7 * This library is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Library General Public
9 * License as published by the Free Software Foundation; either
10 * version 2 of the License, or (at your option) any later version.
11 *
12 * This library is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Library General Public License for more details.
16 *
17 * You should have received a copy of the GNU Library General Public License
18 * along with this library; see the file COPYING.LIB. If not, write to
19 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
20 * Boston, MA 02110-1301, USA.
21 *
22 */
23
24 #ifndef WTF_UnicodeWinCE_h
25 #define WTF_UnicodeWinCE_h
26
27 #include "UnicodeMacrosFromICU.h"
28
29 #include "ce_unicode.h"
30
31 #define TO_MASK(x) (1 << (x))
32
33 namespace WTF {
34 namespace Unicode {
35
36 enum Direction {
37 LeftToRight = UnicodeCE::U_LEFT_TO_RIGHT,
38 RightToLeft = UnicodeCE::U_RIGHT_TO_LEFT,
39 EuropeanNumber = UnicodeCE::U_EUROPEAN_NUMBER,
40 EuropeanNumberSeparator = UnicodeCE::U_EUROPEAN_NUMBER_SEPARATOR,
41 EuropeanNumberTerminator = UnicodeCE::U_EUROPEAN_NUMBER_TERMINATOR,
42 ArabicNumber = UnicodeCE::U_ARABIC_NUMBER,
43 CommonNumberSeparator = UnicodeCE::U_COMMON_NUMBER_SEPARATOR,
44 BlockSeparator = UnicodeCE::U_BLOCK_SEPARATOR,
45 SegmentSeparator = UnicodeCE::U_SEGMENT_SEPARATOR,
46 WhiteSpaceNeutral = UnicodeCE::U_WHITE_SPACE_NEUTRAL,
47 OtherNeutral = UnicodeCE::U_OTHER_NEUTRAL,
48 LeftToRightEmbedding = UnicodeCE::U_LEFT_TO_RIGHT_EMBEDDING,
49 LeftToRightOverride = UnicodeCE::U_LEFT_TO_RIGHT_OVERRIDE,
50 RightToLeftArabic = UnicodeCE::U_RIGHT_TO_LEFT_ARABIC,
51 RightToLeftEmbedding = UnicodeCE::U_RIGHT_TO_LEFT_EMBEDDING,
52 RightToLeftOverride = UnicodeCE::U_RIGHT_TO_LEFT_OVERRIDE,
53 PopDirectionalFormat = UnicodeCE::U_POP_DIRECTIONAL_FORMAT,
54 NonSpacingMark = UnicodeCE::U_DIR_NON_SPACING_MARK,
55 BoundaryNeutral = UnicodeCE::U_BOUNDARY_NEUTRAL
56 };
57
58 enum DecompositionType {
59 DecompositionNone = UnicodeCE::U_DT_NONE,
60 DecompositionCanonical = UnicodeCE::U_DT_CANONICAL,
61 DecompositionCompat = UnicodeCE::U_DT_COMPAT,
62 DecompositionCircle = UnicodeCE::U_DT_CIRCLE,
63 DecompositionFinal = UnicodeCE::U_DT_FINAL,
64 DecompositionFont = UnicodeCE::U_DT_FONT,
65 DecompositionFraction = UnicodeCE::U_DT_FRACTION,
66 DecompositionInitial = UnicodeCE::U_DT_INITIAL,
67 DecompositionIsolated = UnicodeCE::U_DT_ISOLATED,
68 DecompositionMedial = UnicodeCE::U_DT_MEDIAL,
69 DecompositionNarrow = UnicodeCE::U_DT_NARROW,
70 DecompositionNoBreak = UnicodeCE::U_DT_NOBREAK,
71 DecompositionSmall = UnicodeCE::U_DT_SMALL,
72 DecompositionSquare = UnicodeCE::U_DT_SQUARE,
73 DecompositionSub = UnicodeCE::U_DT_SUB,
74 DecompositionSuper = UnicodeCE::U_DT_SUPER,
75 DecompositionVertical = UnicodeCE::U_DT_VERTICAL,
76 DecompositionWide = UnicodeCE::U_DT_WIDE
77 };
78
79 enum CharCategory {
80 NoCategory = 0,
81 Other_NotAssigned = TO_MASK(UnicodeCE::U_GENERAL_OTHER_TYPES),
82 Letter_Uppercase = TO_MASK(UnicodeCE::U_UPPERCASE_LETTER),
83 Letter_Lowercase = TO_MASK(UnicodeCE::U_LOWERCASE_LETTER),
84 Letter_Titlecase = TO_MASK(UnicodeCE::U_TITLECASE_LETTER),
85 Letter_Modifier = TO_MASK(UnicodeCE::U_MODIFIER_LETTER),
86 Letter_Other = TO_MASK(UnicodeCE::U_OTHER_LETTER),
87
88 Mark_NonSpacing = TO_MASK(UnicodeCE::U_NON_SPACING_MARK),
89 Mark_Enclosing = TO_MASK(UnicodeCE::U_ENCLOSING_MARK),
90 Mark_SpacingCombining = TO_MASK(UnicodeCE::U_COMBINING_SPACING_MARK),
91
92 Number_DecimalDigit = TO_MASK(UnicodeCE::U_DECIMAL_DIGIT_NUMBER),
93 Number_Letter = TO_MASK(UnicodeCE::U_LETTER_NUMBER),
94 Number_Other = TO_MASK(UnicodeCE::U_OTHER_NUMBER),
95
96 Separator_Space = TO_MASK(UnicodeCE::U_SPACE_SEPARATOR),
97 Separator_Line = TO_MASK(UnicodeCE::U_LINE_SEPARATOR),
98 Separator_Paragraph = TO_MASK(UnicodeCE::U_PARAGRAPH_SEPARATOR),
99
100 Other_Control = TO_MASK(UnicodeCE::U_CONTROL_CHAR),
101 Other_Format = TO_MASK(UnicodeCE::U_FORMAT_CHAR),
102 Other_PrivateUse = TO_MASK(UnicodeCE::U_PRIVATE_USE_CHAR),
103 Other_Surrogate = TO_MASK(UnicodeCE::U_SURROGATE),
104
105 Punctuation_Dash = TO_MASK(UnicodeCE::U_DASH_PUNCTUATION),
106 Punctuation_Open = TO_MASK(UnicodeCE::U_START_PUNCTUATION),
107 Punctuation_Close = TO_MASK(UnicodeCE::U_END_PUNCTUATION),
108 Punctuation_Connector = TO_MASK(UnicodeCE::U_CONNECTOR_PUNCTUATION),
109 Punctuation_Other = TO_MASK(UnicodeCE::U_OTHER_PUNCTUATION),
110
111 Symbol_Math = TO_MASK(UnicodeCE::U_MATH_SYMBOL),
112 Symbol_Currency = TO_MASK(UnicodeCE::U_CURRENCY_SYMBOL),
113 Symbol_Modifier = TO_MASK(UnicodeCE::U_MODIFIER_SYMBOL),
114 Symbol_Other = TO_MASK(UnicodeCE::U_OTHER_SYMBOL),
115
116 Punctuation_InitialQuote = TO_MASK(UnicodeCE::U_INITIAL_PUNCTUATION),
117 Punctuation_FinalQuote = TO_MASK(UnicodeCE::U_FINAL_PUNCTUATION)
118 };
119
120 CharCategory category(unsigned int);
121
122 bool isSpace(UChar);
123 bool isLetter(UChar);
124 bool isPrintableChar(UChar);
125 bool isUpper(UChar);
126 bool isLower(UChar);
127 bool isPunct(UChar);
128 bool isDigit(UChar);
129 bool isAlphanumeric(UChar);
130 inline bool isSeparatorSpace(UChar c) { return category(c) == Separator_Space; }
131 inline bool isHighSurrogate(UChar c) { return (c & 0xfc00) == 0xd800; }
132 inline bool isLowSurrogate(UChar c) { return (c & 0xfc00) == 0xdc00; }
133
134 UChar toLower(UChar);
135 UChar toUpper(UChar);
136 UChar foldCase(UChar);
137 UChar toTitleCase(UChar);
138 int toLower(UChar* result, int resultLength, const UChar* source, int sourceLength, bool* isError);
139 int toUpper(UChar* result, int resultLength, const UChar* source, int sourceLength, bool* isError);
140 int foldCase(UChar* result, int resultLength, const UChar* source, int sourceLength, bool* isError);
141
142 int digitValue(UChar);
143
144 UChar mirroredChar(UChar32);
145 unsigned char combiningClass(UChar32);
146 DecompositionType decompositionType(UChar32);
147 Direction direction(UChar32);
148 inline bool isArabicChar(UChar32 c)
149 {
150 return c >= 0x0600 && c <= 0x06FF;
151 }
152
153 inline bool hasLineBreakingPropertyComplexContext(UChar32)
154 {
155 return false; // FIXME: implement!
156 }
157
158 inline int umemcasecmp(const UChar* a, const UChar* b, int len)
159 {
160 for (int i = 0; i < len; ++i) {
161 UChar c1 = foldCase(a[i]);
162 UChar c2 = foldCase(b[i]);
163 if (c1 != c2)
164 return c1 - c2;
165 }
166 return 0;
167 }
168
169 inline UChar32 surrogateToUcs4(UChar high, UChar low)
170 {
171 return (UChar32(high) << 10) + low - 0x35fdc00;
172 }
173
174 } // namespace Unicode
175 } // namespace WTF
176
177 #endif // WTF_UnicodeWinCE_h