]> git.saurik.com Git - apple/javascriptcore.git/blame - wtf/unicode/glib/UnicodeGLib.h
JavaScriptCore-554.1.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"
29#include <wtf/GOwnPtr.h>
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
155inline bool isFormatChar(UChar32 c)
156{
157 return g_unichar_type(c) == G_UNICODE_FORMAT;
158}
159
160inline bool isSeparatorSpace(UChar32 c)
161{
162 return g_unichar_type(c) == G_UNICODE_SPACE_SEPARATOR;
163}
164
165inline bool isPrintableChar(UChar32 c)
166{
167 return g_unichar_isprint(c);
168}
169
170inline bool isDigit(UChar32 c)
171{
172 return g_unichar_isdigit(c);
173}
174
175inline bool isPunct(UChar32 c)
176{
177 return g_unichar_ispunct(c);
178}
179
180inline bool hasLineBreakingPropertyComplexContext(UChar32 c)
181{
182 // FIXME
183 return false;
184}
185
186inline bool hasLineBreakingPropertyComplexContextOrIdeographic(UChar32 c)
187{
188 // FIXME
189 return false;
190}
191
192inline UChar32 mirroredChar(UChar32 c)
193{
194 gunichar mirror = 0;
195 g_unichar_get_mirror_char(c, &mirror);
196 return mirror;
197}
198
199inline CharCategory category(UChar32 c)
200{
201 if (c > 0xffff)
202 return NoCategory;
203
204 return (CharCategory) U_MASK(g_unichar_type(c));
205}
206
207Direction direction(UChar32);
208
209inline bool isLower(UChar32 c)
210{
211 return g_unichar_islower(c);
212}
213
214inline int digitValue(UChar32 c)
215{
216 return g_unichar_digit_value(c);
217}
218
219inline uint8_t combiningClass(UChar32 c)
220{
221 // FIXME
222 // return g_unichar_combining_class(c);
223 return 0;
224}
225
226inline DecompositionType decompositionType(UChar32 c)
227{
228 // FIXME
229 return DecompositionNone;
230}
231
232int umemcasecmp(const UChar*, const UChar*, int len);
233
234}
235}
236
237#endif
238