2 * unicode.h: Unicode support
5 * Dietmar Maurer (dietmar@ximian.com)
7 * (C) 2001 Ximian, Inc.
14 #include <mono/metadata/object.h>
15 #include <mono/metadata/unicode.h>
16 #include <mono/metadata/exception.h>
18 static const MonoUnicodeCategory catmap[] = {
19 /* G_UNICODE_CONTROL = */ Control,
20 /* G_UNICODE_FORMAT = */ Format,
21 /* G_UNICODE_UNASSIGNED = */ OtherNotAssigned,
22 /* G_UNICODE_PRIVATE_USE = */ PrivateUse,
23 /* G_UNICODE_SURROGATE = */ Surrogate,
24 /* G_UNICODE_LOWERCASE_LETTER = */ LowercaseLetter,
25 /* G_UNICODE_MODIFIER_LETTER = */ ModifierLetter,
26 /* G_UNICODE_OTHER_LETTER = */ OtherLetter,
27 /* G_UNICODE_TITLECASE_LETTER = */ TitlecaseLetter,
28 /* G_UNICODE_UPPERCASE_LETTER = */ UppercaseLetter,
29 /* G_UNICODE_COMBINING_MARK = */ SpaceCombiningMark,
30 /* G_UNICODE_ENCLOSING_MARK = */ EnclosingMark,
31 /* G_UNICODE_NON_SPACING_MARK = */ NonSpacingMark,
32 /* G_UNICODE_DECIMAL_NUMBER = */ DecimalDigitNumber,
33 /* G_UNICODE_LETTER_NUMBER = */ LetterNumber,
34 /* G_UNICODE_OTHER_NUMBER = */ OtherNumber,
35 /* G_UNICODE_CONNECT_PUNCTUATION = */ ConnectorPunctuation,
36 /* G_UNICODE_DASH_PUNCTUATION = */ DashPunctuation,
37 /* G_UNICODE_CLOSE_PUNCTUATION = */ ClosePunctuation,
38 /* G_UNICODE_FINAL_PUNCTUATION = */ FinalQuotePunctuation,
39 /* G_UNICODE_INITIAL_PUNCTUATION = */ InitialQuotePunctuation,
40 /* G_UNICODE_OTHER_PUNCTUATION = */ OtherPunctuation,
41 /* G_UNICODE_OPEN_PUNCTUATION = */ OpenPunctuation,
42 /* G_UNICODE_CURRENCY_SYMBOL = */ CurrencySymbol,
43 /* G_UNICODE_MODIFIER_SYMBOL = */ ModifierSymbol,
44 /* G_UNICODE_MATH_SYMBOL = */ MathSymbol,
45 /* G_UNICODE_OTHER_SYMBOL = */ OtherSymbol,
46 /* G_UNICODE_LINE_SEPARATOR = */ LineSeperator,
47 /* G_UNICODE_PARAGRAPH_SEPARATOR = */ ParagraphSeperator,
48 /* G_UNICODE_SPACE_SEPARATOR = */ SpaceSeperator,
52 ves_icall_System_Char_GetNumericValue (gunichar2 c)
56 return (double)g_unichar_digit_value (c);
60 ves_icall_System_Char_GetUnicodeCategory (gunichar2 c)
64 return catmap [g_unichar_type (c)];
68 ves_icall_System_Char_IsControl (gunichar2 c)
72 return g_unichar_iscntrl (c);
76 ves_icall_System_Char_IsDigit (gunichar2 c)
80 return g_unichar_isdigit (c);
84 ves_icall_System_Char_IsLetter (gunichar2 c)
88 return g_unichar_isalpha (c);
92 ves_icall_System_Char_IsLower (gunichar2 c)
96 return g_unichar_islower (c);
100 ves_icall_System_Char_IsUpper (gunichar2 c)
104 return g_unichar_isupper (c);
108 ves_icall_System_Char_IsNumber (gunichar2 c)
110 GUnicodeType t = g_unichar_type (c);
114 return t == G_UNICODE_DECIMAL_NUMBER ||
115 t == G_UNICODE_LETTER_NUMBER ||
116 t == G_UNICODE_OTHER_NUMBER;
120 ves_icall_System_Char_IsPunctuation (gunichar2 c)
122 GUnicodeType t = g_unichar_type (c);
125 /* The .NET spec is very specific about what IsPunctuation is */
126 return (t == G_UNICODE_CONNECT_PUNCTUATION || t == G_UNICODE_DASH_PUNCTUATION ||
127 t == G_UNICODE_OPEN_PUNCTUATION || t == G_UNICODE_CLOSE_PUNCTUATION ||
128 t == G_UNICODE_INITIAL_PUNCTUATION || t == G_UNICODE_FINAL_PUNCTUATION ||
129 t == G_UNICODE_OTHER_PUNCTUATION);
133 ves_icall_System_Char_IsSeparator (gunichar2 c)
135 GUnicodeType t = g_unichar_type (c);
139 return (t == G_UNICODE_LINE_SEPARATOR ||
140 t == G_UNICODE_PARAGRAPH_SEPARATOR ||
141 t == G_UNICODE_SPACE_SEPARATOR);
145 ves_icall_System_Char_IsSurrogate (gunichar2 c)
149 return (g_unichar_type (c) == G_UNICODE_SURROGATE);
153 ves_icall_System_Char_IsSymbol (gunichar2 c)
155 GUnicodeType t = g_unichar_type (c);
159 return (t == G_UNICODE_CURRENCY_SYMBOL ||
160 t == G_UNICODE_MODIFIER_SYMBOL ||
161 t == G_UNICODE_MATH_SYMBOL ||
162 t == G_UNICODE_OTHER_SYMBOL);
166 ves_icall_System_Char_IsWhiteSpace (gunichar2 c)
170 return g_unichar_isspace (c);
174 ves_icall_System_Char_ToLower (gunichar2 c)
178 return g_unichar_tolower (c);
182 ves_icall_System_Char_ToUpper (gunichar2 c)
186 return g_unichar_toupper (c);