]> git.saurik.com Git - apple/javascriptcore.git/blame - wtf/unicode/glib/UnicodeGLib.h
JavaScriptCore-576.tar.gz
[apple/javascriptcore.git] / wtf / unicode / glib / UnicodeGLib.h
CommitLineData
ba379fdc
A
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) 2008 Jürg Billeter <j@bitron.ch>
6 * Copyright (C) 2008 Dominik Röttsches <dominik.roettsches@access-company.com>
7 *
8 * This library is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Library General Public
10 * License as published by the Free Software Foundation; either
11 * version 2 of the License, or (at your option) any later version.
12 *
13 * This library is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 * Library General Public License for more details.
17 *
18 * You should have received a copy of the GNU Library General Public License
19 * along with this library; see the file COPYING.LIB. If not, write to
20 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
21 * Boston, MA 02110-1301, USA.
22 *
23 */
24
25#ifndef UnicodeGLib_h
26#define UnicodeGLib_h
27
28#include "UnicodeMacrosFromICU.h"
f9bf01c6 29#include <wtf/gtk/GOwnPtr.h>
ba379fdc
A
30
31#include <glib.h>
32#include <pango/pango.h>
33#include <stdint.h>
34#include <stdlib.h>
35#include <string.h>
36
37typedef uint16_t UChar;
38typedef int32_t UChar32;
39
40namespace WTF {
41namespace Unicode {
42
43enum Direction {
44 LeftToRight,
45 RightToLeft,
46 EuropeanNumber,
47 EuropeanNumberSeparator,
48 EuropeanNumberTerminator,
49 ArabicNumber,
50 CommonNumberSeparator,
51 BlockSeparator,
52 SegmentSeparator,
53 WhiteSpaceNeutral,
54 OtherNeutral,
55 LeftToRightEmbedding,
56 LeftToRightOverride,
57 RightToLeftArabic,
58 RightToLeftEmbedding,
59 RightToLeftOverride,
60 PopDirectionalFormat,
61 NonSpacingMark,
62 BoundaryNeutral
63};
64
65enum DecompositionType {
66 DecompositionNone,
67 DecompositionCanonical,
68 DecompositionCompat,
69 DecompositionCircle,
70 DecompositionFinal,
71 DecompositionFont,
72 DecompositionFraction,
73 DecompositionInitial,
74 DecompositionIsolated,
75 DecompositionMedial,
76 DecompositionNarrow,
77 DecompositionNoBreak,
78 DecompositionSmall,
79 DecompositionSquare,
80 DecompositionSub,
81 DecompositionSuper,
82 DecompositionVertical,
83 DecompositionWide,
84};
85
86enum CharCategory {
87 NoCategory = 0,
88 Other_NotAssigned = U_MASK(G_UNICODE_UNASSIGNED),
89 Letter_Uppercase = U_MASK(G_UNICODE_UPPERCASE_LETTER),
90 Letter_Lowercase = U_MASK(G_UNICODE_LOWERCASE_LETTER),
91 Letter_Titlecase = U_MASK(G_UNICODE_TITLECASE_LETTER),
92 Letter_Modifier = U_MASK(G_UNICODE_MODIFIER_LETTER),
93 Letter_Other = U_MASK(G_UNICODE_OTHER_LETTER),
94
95 Mark_NonSpacing = U_MASK(G_UNICODE_NON_SPACING_MARK),
96 Mark_Enclosing = U_MASK(G_UNICODE_ENCLOSING_MARK),
97 Mark_SpacingCombining = U_MASK(G_UNICODE_COMBINING_MARK),
98
99 Number_DecimalDigit = U_MASK(G_UNICODE_DECIMAL_NUMBER),
100 Number_Letter = U_MASK(G_UNICODE_LETTER_NUMBER),
101 Number_Other = U_MASK(G_UNICODE_OTHER_NUMBER),
102
103 Separator_Space = U_MASK(G_UNICODE_SPACE_SEPARATOR),
104 Separator_Line = U_MASK(G_UNICODE_LINE_SEPARATOR),
105 Separator_Paragraph = U_MASK(G_UNICODE_PARAGRAPH_SEPARATOR),
106
107 Other_Control = U_MASK(G_UNICODE_CONTROL),
108 Other_Format = U_MASK(G_UNICODE_FORMAT),
109 Other_PrivateUse = U_MASK(G_UNICODE_PRIVATE_USE),
110 Other_Surrogate = U_MASK(G_UNICODE_SURROGATE),
111
112 Punctuation_Dash = U_MASK(G_UNICODE_DASH_PUNCTUATION),
113 Punctuation_Open = U_MASK(G_UNICODE_OPEN_PUNCTUATION),
114 Punctuation_Close = U_MASK(G_UNICODE_CLOSE_PUNCTUATION),
115 Punctuation_Connector = U_MASK(G_UNICODE_CONNECT_PUNCTUATION),
116 Punctuation_Other = U_MASK(G_UNICODE_OTHER_PUNCTUATION),
117
118 Symbol_Math = U_MASK(G_UNICODE_MATH_SYMBOL),
119 Symbol_Currency = U_MASK(G_UNICODE_CURRENCY_SYMBOL),
120 Symbol_Modifier = U_MASK(G_UNICODE_MODIFIER_SYMBOL),
121 Symbol_Other = U_MASK(G_UNICODE_OTHER_SYMBOL),
122
123 Punctuation_InitialQuote = U_MASK(G_UNICODE_INITIAL_PUNCTUATION),
124 Punctuation_FinalQuote = U_MASK(G_UNICODE_FINAL_PUNCTUATION)
125};
126
127UChar32 foldCase(UChar32);
128
129int foldCase(UChar* result, int resultLength, const UChar* src, int srcLength, bool* error);
130
131int toLower(UChar* result, int resultLength, const UChar* src, int srcLength, bool* error);
132
133inline UChar32 toLower(UChar32 c)
134{
135 return g_unichar_tolower(c);
136}
137
138inline UChar32 toUpper(UChar32 c)
139{
140 return g_unichar_toupper(c);
141}
142
143int toUpper(UChar* result, int resultLength, const UChar* src, int srcLength, bool* error);
144
145inline UChar32 toTitleCase(UChar32 c)
146{
147 return g_unichar_totitle(c);
148}
149
150inline bool isArabicChar(UChar32 c)
151{
152 return c >= 0x0600 && c <= 0x06FF;
153}
154
f9bf01c6
A
155inline bool isAlphanumeric(UChar32 c)
156{
157 return g_unichar_isalnum(c);
158}
159
ba379fdc
A
160inline bool isFormatChar(UChar32 c)
161{
162 return g_unichar_type(c) == G_UNICODE_FORMAT;
163}
164
165inline bool isSeparatorSpace(UChar32 c)
166{
167 return g_unichar_type(c) == G_UNICODE_SPACE_SEPARATOR;
168}
169
170inline bool isPrintableChar(UChar32 c)
171{
172 return g_unichar_isprint(c);
173}
174
175inline bool isDigit(UChar32 c)
176{
177 return g_unichar_isdigit(c);
178}
179
180inline bool isPunct(UChar32 c)
181{
182 return g_unichar_ispunct(c);
183}
184
185inline bool hasLineBreakingPropertyComplexContext(UChar32 c)
186{
187 // FIXME
188 return false;
189}
190
191inline bool hasLineBreakingPropertyComplexContextOrIdeographic(UChar32 c)
192{
193 // FIXME
194 return false;
195}
196
197inline UChar32 mirroredChar(UChar32 c)
198{
199 gunichar mirror = 0;
200 g_unichar_get_mirror_char(c, &mirror);
201 return mirror;
202}
203
204inline CharCategory category(UChar32 c)
205{
206 if (c > 0xffff)
207 return NoCategory;
208
209 return (CharCategory) U_MASK(g_unichar_type(c));
210}
211
212Direction direction(UChar32);
213
214inline bool isLower(UChar32 c)
215{
216 return g_unichar_islower(c);
217}
218
219inline int digitValue(UChar32 c)
220{
221 return g_unichar_digit_value(c);
222}
223
224inline uint8_t combiningClass(UChar32 c)
225{
226 // FIXME
227 // return g_unichar_combining_class(c);
228 return 0;
229}
230
231inline DecompositionType decompositionType(UChar32 c)
232{
233 // FIXME
234 return DecompositionNone;
235}
236
237int umemcasecmp(const UChar*, const UChar*, int len);
238
239}
240}
241
242#endif
243