/
unicode.c
151 lines (130 loc) · 3.72 KB
/
unicode.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
/*
* unicode.h: Unicode support
*
* Author:
* Dietmar Maurer (dietmar@ximian.com)
*
* (C) 2001 Ximian, Inc.
*/
#include <config.h>
#include <glib.h>
#include <errno.h>
#include <mono/metadata/object.h>
#include <mono/metadata/unicode.h>
static MonoUnicodeCategory catmap[] = {
/* G_UNICODE_CONTROL = */ Control,
/* G_UNICODE_FORMAT = */ Format,
/* G_UNICODE_UNASSIGNED = */ OtherNotAssigned,
/* G_UNICODE_PRIVATE_USE = */ PrivateUse,
/* G_UNICODE_SURROGATE = */ Surrogate,
/* G_UNICODE_LOWERCASE_LETTER = */ LowercaseLetter,
/* G_UNICODE_MODIFIER_LETTER = */ ModifierLetter,
/* G_UNICODE_OTHER_LETTER = */ OtherLetter,
/* G_UNICODE_TITLECASE_LETTER = */ TitlecaseLetter,
/* G_UNICODE_UPPERCASE_LETTER = */ UppercaseLetter,
/* G_UNICODE_COMBINING_MARK = */ SpaceCombiningMark,
/* G_UNICODE_ENCLOSING_MARK = */ EnclosingMark,
/* G_UNICODE_NON_SPACING_MARK = */ NonSpacingMark,
/* G_UNICODE_DECIMAL_NUMBER = */ DecimalDigitNumber,
/* G_UNICODE_LETTER_NUMBER = */ LetterNumber,
/* G_UNICODE_OTHER_NUMBER = */ OtherNumber,
/* G_UNICODE_CONNECT_PUNCTUATION = */ ConnectorPunctuation,
/* G_UNICODE_DASH_PUNCTUATION = */ DashPunctuation,
/* G_UNICODE_CLOSE_PUNCTUATION = */ ClosePunctuation,
/* G_UNICODE_FINAL_PUNCTUATION = */ FinalQuotePunctuation,
/* G_UNICODE_INITIAL_PUNCTUATION = */ InitialQuotePunctuation,
/* G_UNICODE_OTHER_PUNCTUATION = */ OtherPunctuation,
/* G_UNICODE_OPEN_PUNCTUATION = */ OpenPunctuation,
/* G_UNICODE_CURRENCY_SYMBOL = */ CurrencySymbol,
/* G_UNICODE_MODIFIER_SYMBOL = */ ModifierSymbol,
/* G_UNICODE_MATH_SYMBOL = */ MathSymbol,
/* G_UNICODE_OTHER_SYMBOL = */ OtherSymbol,
/* G_UNICODE_LINE_SEPARATOR = */ LineSeperator,
/* G_UNICODE_PARAGRAPH_SEPARATOR = */ ParagraphSeperator,
/* G_UNICODE_SPACE_SEPARATOR = */ SpaceSeperator,
};
double
ves_icall_System_Char_GetNumericValue (gunichar2 c)
{
return (double)g_unichar_digit_value (c);
}
MonoUnicodeCategory
ves_icall_System_Char_GetUnicodeCategory (gunichar2 c)
{
return catmap [g_unichar_type (c)];
}
gboolean
ves_icall_System_Char_IsControl (gunichar2 c)
{
return g_unichar_iscntrl (c);
}
gboolean
ves_icall_System_Char_IsDigit (gunichar2 c)
{
return g_unichar_isdigit (c);
}
gboolean
ves_icall_System_Char_IsLetter (gunichar2 c)
{
return g_unichar_isalpha (c);
}
gboolean
ves_icall_System_Char_IsLower (gunichar2 c)
{
return g_unichar_islower (c);
}
gboolean
ves_icall_System_Char_IsUpper (gunichar2 c)
{
return g_unichar_isupper (c);
}
gboolean
ves_icall_System_Char_IsNumber (gunichar2 c)
{
GUnicodeType t = g_unichar_type (c);
return t == G_UNICODE_DECIMAL_NUMBER ||
t == G_UNICODE_LETTER_NUMBER ||
t == G_UNICODE_OTHER_NUMBER;
}
gboolean
ves_icall_System_Char_IsPunctuation (gunichar2 c)
{
return g_unichar_ispunct (c);
}
gboolean
ves_icall_System_Char_IsSeparator (gunichar2 c)
{
GUnicodeType t = g_unichar_type (c);
return (t == G_UNICODE_LINE_SEPARATOR ||
t == G_UNICODE_PARAGRAPH_SEPARATOR ||
t == G_UNICODE_SPACE_SEPARATOR);
}
gboolean
ves_icall_System_Char_IsSurrogate (gunichar2 c)
{
return (g_unichar_type (c) == G_UNICODE_SURROGATE);
}
gboolean
ves_icall_System_Char_IsSymbol (gunichar2 c)
{
GUnicodeType t = g_unichar_type (c);
return (t == G_UNICODE_CURRENCY_SYMBOL ||
t == G_UNICODE_MODIFIER_SYMBOL ||
t == G_UNICODE_MATH_SYMBOL ||
t == G_UNICODE_OTHER_SYMBOL);
}
gboolean
ves_icall_System_Char_IsWhiteSpace (gunichar2 c)
{
return g_unichar_isspace (c);
}
gunichar2
ves_icall_System_Char_ToLower (gunichar2 c)
{
return g_unichar_tolower (c);
}
gunichar2
ves_icall_System_Char_ToUpper (gunichar2 c)
{
return g_unichar_toupper (c);
}