glib2 1.0.3 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/ext/glib2/extconf.rb +1 -0
- data/ext/glib2/glib2.def +23 -0
- data/ext/glib2/rbgcompat.h +19 -5
- data/ext/glib2/rbglib.c +607 -160
- data/ext/glib2/rbglib.h +81 -26
- data/ext/glib2/rbglib2conversions.h +57 -0
- data/ext/glib2/rbglib_bookmarkfile.c +117 -107
- data/ext/glib2/rbglib_completion.c +37 -26
- data/ext/glib2/rbglib_convert.c +42 -30
- data/ext/glib2/rbglib_error.c +20 -10
- data/ext/glib2/rbglib_fileutils.c +48 -37
- data/ext/glib2/rbglib_i18n.c +24 -14
- data/ext/glib2/rbglib_int64.c +24 -16
- data/ext/glib2/rbglib_iochannel.c +146 -204
- data/ext/glib2/rbglib_iochannel_win32_socket.c +56 -0
- data/ext/glib2/rbglib_iochannelerror.c +49 -0
- data/ext/glib2/rbglib_keyfile.c +171 -182
- data/ext/glib2/rbglib_maincontext.c +107 -92
- data/ext/glib2/rbglib_mainloop.c +34 -21
- data/ext/glib2/rbglib_messages.c +53 -44
- data/ext/glib2/rbglib_pollfd.c +37 -26
- data/ext/glib2/rbglib_shell.c +29 -22
- data/ext/glib2/rbglib_shellerror.c +34 -0
- data/ext/glib2/rbglib_source.c +49 -36
- data/ext/glib2/rbglib_spawn.c +50 -61
- data/ext/glib2/rbglib_spawnerror.c +53 -0
- data/ext/glib2/rbglib_threads.c +28 -16
- data/ext/glib2/rbglib_timer.c +35 -24
- data/ext/glib2/rbglib_ucs4.c +79 -0
- data/ext/glib2/rbglib_unichar.c +209 -0
- data/ext/glib2/rbglib_unicode.c +34 -584
- data/ext/glib2/rbglib_utf16.c +78 -0
- data/ext/glib2/rbglib_utf8.c +259 -0
- data/ext/glib2/rbglib_utils.c +95 -91
- data/ext/glib2/rbglib_win32.c +52 -45
- data/ext/glib2/rbglibdeprecated.c +56 -0
- data/ext/glib2/rbglibdeprecated.h +34 -0
- data/ext/glib2/rbgobj_boxed.c +40 -33
- data/ext/glib2/rbgobj_closure.c +45 -34
- data/ext/glib2/rbgobj_convert.c +19 -9
- data/ext/glib2/rbgobj_enumflags.c +109 -0
- data/ext/glib2/rbgobj_enums.c +67 -646
- data/ext/glib2/rbgobj_flags.c +522 -0
- data/ext/glib2/rbgobj_fundamental.c +19 -6
- data/ext/glib2/rbgobj_object.c +90 -81
- data/ext/glib2/rbgobj_param.c +78 -83
- data/ext/glib2/rbgobj_paramspecs.c +20 -12
- data/ext/glib2/rbgobj_signal.c +248 -193
- data/ext/glib2/rbgobj_strv.c +20 -10
- data/ext/glib2/rbgobj_type.c +153 -149
- data/ext/glib2/rbgobj_typeinstance.c +49 -39
- data/ext/glib2/rbgobj_typeinterface.c +37 -27
- data/ext/glib2/rbgobj_typemodule.c +39 -29
- data/ext/glib2/rbgobj_typeplugin.c +36 -26
- data/ext/glib2/rbgobj_value.c +41 -11
- data/ext/glib2/rbgobj_valuearray.c +59 -23
- data/ext/glib2/rbgobj_valuetypes.c +27 -17
- data/ext/glib2/rbgobject.c +26 -40
- data/ext/glib2/rbgobject.h +38 -20
- data/ext/glib2/rbgprivate.h +87 -5
- data/ext/glib2/rbgutil.c +52 -238
- data/ext/glib2/rbgutil.h +55 -42
- data/ext/glib2/rbgutil_callback.c +47 -12
- data/ext/glib2/rbgutil_list.c +173 -0
- data/ext/glib2/rbgutil_list.h +85 -0
- data/ext/glib2/rbgutildeprecated.c +252 -0
- data/ext/glib2/rbgutildeprecated.h +63 -0
- data/lib/glib-mkenums.rb +2 -2
- data/lib/glib2.rb +2 -25
- data/lib/glib2/deprecatable.rb +149 -0
- data/lib/gnome2-raketask.rb +45 -15
- data/lib/gnome2-win32-binary-downloader.rb +1 -1
- data/lib/mkmf-gnome2.rb +37 -18
- data/test/test_flags.rb +129 -0
- data/test/test_key_file.rb +6 -2
- data/test/test_spawn.rb +33 -0
- metadata +26 -7
- data/ChangeLog +0 -3513
data/ext/glib2/rbglib_unicode.c
CHANGED
@@ -1,124 +1,39 @@
|
|
1
1
|
/* -*- c-file-style: "ruby"; indent-tabs-mode: nil -*- */
|
2
|
-
|
2
|
+
/*
|
3
|
+
* Copyright (C) 2011 Ruby-GNOME2 Project Team
|
4
|
+
* Copyright (C) 2006 Kouhei Sutou
|
5
|
+
*
|
6
|
+
* This library is free software; you can redistribute it and/or
|
7
|
+
* modify it under the terms of the GNU Lesser General Public
|
8
|
+
* License as published by the Free Software Foundation; either
|
9
|
+
* version 2.1 of the License, or (at your option) any later version.
|
10
|
+
*
|
11
|
+
* This library is distributed in the hope that it will be useful,
|
12
|
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
13
|
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
14
|
+
* Lesser General Public License for more details.
|
15
|
+
*
|
16
|
+
* You should have received a copy of the GNU Lesser General Public
|
17
|
+
* License along with this library; if not, write to the Free Software
|
18
|
+
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
19
|
+
* MA 02110-1301 USA
|
20
|
+
*/
|
3
21
|
|
4
|
-
rbglib_unicode.c -
|
5
|
-
|
6
|
-
$Author: ktou $
|
7
|
-
$Date: 2007/08/30 10:16:35 $
|
8
|
-
|
9
|
-
Copyright (C) 2006 Kouhei Sutou
|
10
|
-
|
11
|
-
**********************************************************************/
|
12
22
|
#include "rbgprivate.h"
|
13
23
|
#include "rbglib.h"
|
14
24
|
|
15
|
-
|
16
|
-
rbg_ucs4_to_rval_len(const gchar* ucs4, gsize len)
|
17
|
-
{
|
18
|
-
const gchar *ucs4_encoding;
|
19
|
-
#if G_BYTE_ORDER == G_LITTLE_ENDIAN
|
20
|
-
ucs4_encoding = "UTF-32LE";
|
21
|
-
#else
|
22
|
-
ucs4_encoding = "UTF-32BE";
|
23
|
-
#endif
|
24
|
-
|
25
|
-
return CSTR2RVAL_LEN_ENC(ucs4, len, ucs4_encoding);
|
26
|
-
}
|
27
|
-
|
28
|
-
static VALUE
|
29
|
-
rbg_utf16_to_rval_len(const gchar* utf16, gsize len)
|
30
|
-
{
|
31
|
-
const gchar *utf16_encoding;
|
32
|
-
#if G_BYTE_ORDER == G_LITTLE_ENDIAN
|
33
|
-
utf16_encoding = "UTF-16LE";
|
34
|
-
#else
|
35
|
-
utf16_encoding = "UTF-16BE";
|
36
|
-
#endif
|
37
|
-
|
38
|
-
return CSTR2RVAL_LEN_ENC(utf16, len, utf16_encoding);
|
39
|
-
}
|
25
|
+
#define RG_TARGET_NAMESPACE mUnicode
|
40
26
|
|
41
27
|
static VALUE
|
42
|
-
rbglib_m_charset(VALUE self)
|
28
|
+
rbglib_m_charset(G_GNUC_UNUSED VALUE self)
|
43
29
|
{
|
44
30
|
const char *charset;
|
45
31
|
g_get_charset(&charset);
|
46
32
|
return CSTR2RVAL(charset);
|
47
33
|
}
|
48
34
|
|
49
|
-
#define DEF_IS_UNICHAR(name) \
|
50
|
-
static VALUE \
|
51
|
-
rbglib_m_unichar_is ## name(VALUE self, VALUE unichar) \
|
52
|
-
{ \
|
53
|
-
return CBOOL2RVAL(g_unichar_is ## name(NUM2UINT(unichar))); \
|
54
|
-
}
|
55
|
-
|
56
|
-
DEF_IS_UNICHAR(alnum)
|
57
|
-
DEF_IS_UNICHAR(alpha)
|
58
|
-
DEF_IS_UNICHAR(cntrl)
|
59
|
-
DEF_IS_UNICHAR(digit)
|
60
|
-
DEF_IS_UNICHAR(graph)
|
61
|
-
DEF_IS_UNICHAR(lower)
|
62
|
-
DEF_IS_UNICHAR(print)
|
63
|
-
DEF_IS_UNICHAR(punct)
|
64
|
-
DEF_IS_UNICHAR(space)
|
65
|
-
DEF_IS_UNICHAR(upper)
|
66
|
-
DEF_IS_UNICHAR(xdigit)
|
67
|
-
DEF_IS_UNICHAR(title)
|
68
|
-
DEF_IS_UNICHAR(defined)
|
69
|
-
DEF_IS_UNICHAR(wide)
|
70
|
-
#if GLIB_CHECK_VERSION(2,12,0)
|
71
|
-
DEF_IS_UNICHAR(wide_cjk)
|
72
|
-
#endif
|
73
|
-
|
74
|
-
#undef DEF_IS_UNICHAR
|
75
|
-
|
76
|
-
static VALUE
|
77
|
-
rbglib_m_unichar_toupper(VALUE self, VALUE unichar)
|
78
|
-
{
|
79
|
-
return UINT2NUM(g_unichar_toupper(NUM2UINT(unichar)));
|
80
|
-
}
|
81
|
-
|
82
|
-
static VALUE
|
83
|
-
rbglib_m_unichar_tolower(VALUE self, VALUE unichar)
|
84
|
-
{
|
85
|
-
return UINT2NUM(g_unichar_tolower(NUM2UINT(unichar)));
|
86
|
-
}
|
87
|
-
|
88
|
-
static VALUE
|
89
|
-
rbglib_m_unichar_totitle(VALUE self, VALUE unichar)
|
90
|
-
{
|
91
|
-
return UINT2NUM(g_unichar_totitle(NUM2UINT(unichar)));
|
92
|
-
}
|
93
|
-
|
94
|
-
static VALUE
|
95
|
-
rbglib_m_unichar_digit_value(VALUE self, VALUE unichar)
|
96
|
-
{
|
97
|
-
return INT2NUM(g_unichar_digit_value(NUM2UINT(unichar)));
|
98
|
-
}
|
99
|
-
|
100
|
-
static VALUE
|
101
|
-
rbglib_m_unichar_xdigit_value(VALUE self, VALUE unichar)
|
102
|
-
{
|
103
|
-
return INT2NUM(g_unichar_xdigit_value(NUM2UINT(unichar)));
|
104
|
-
}
|
105
|
-
|
106
35
|
static VALUE
|
107
|
-
|
108
|
-
{
|
109
|
-
return GENUM2RVAL(g_unichar_type(NUM2UINT(unichar)),
|
110
|
-
G_TYPE_UNICODE_TYPE);
|
111
|
-
}
|
112
|
-
|
113
|
-
static VALUE
|
114
|
-
rbglib_m_unichar_break_type(VALUE self, VALUE unichar)
|
115
|
-
{
|
116
|
-
return GENUM2RVAL(g_unichar_break_type(NUM2UINT(unichar)),
|
117
|
-
G_TYPE_UNICODE_BREAK_TYPE);
|
118
|
-
}
|
119
|
-
|
120
|
-
static VALUE
|
121
|
-
rbglib_m_unicode_canonical_ordering(VALUE self, VALUE rb_ucs4)
|
36
|
+
rg_s_canonical_ordering(G_GNUC_UNUSED VALUE self, VALUE rb_ucs4)
|
122
37
|
{
|
123
38
|
VALUE normalized_ucs4;
|
124
39
|
gchar *original_str;
|
@@ -129,512 +44,47 @@ rbglib_m_unicode_canonical_ordering(VALUE self, VALUE rb_ucs4)
|
|
129
44
|
len = RSTRING_LEN(rb_ucs4);
|
130
45
|
ucs4 = g_memdup(original_str, len);
|
131
46
|
g_unicode_canonical_ordering(ucs4, len);
|
132
|
-
normalized_ucs4 =
|
47
|
+
normalized_ucs4 = CSTR2RVAL_LEN_UCS4((const char *)ucs4, len);
|
133
48
|
g_free(ucs4);
|
134
49
|
return normalized_ucs4;
|
135
50
|
}
|
136
51
|
|
137
52
|
static VALUE
|
138
|
-
|
53
|
+
rg_s_canonical_decomposition(G_GNUC_UNUSED VALUE self, VALUE unichar)
|
139
54
|
{
|
140
55
|
VALUE normalized_ucs4;
|
141
56
|
gunichar *ucs4;
|
142
57
|
gsize len;
|
143
58
|
|
144
59
|
ucs4 = g_unicode_canonical_decomposition(NUM2UINT(unichar), &len);
|
145
|
-
normalized_ucs4 =
|
60
|
+
normalized_ucs4 = CSTR2RVAL_LEN_UCS4((const char *)ucs4,
|
146
61
|
len * sizeof(gunichar));
|
147
62
|
g_free(ucs4);
|
148
63
|
return normalized_ucs4;
|
149
64
|
}
|
150
65
|
|
151
|
-
#if GLIB_CHECK_VERSION(2,4,0)
|
152
|
-
static VALUE
|
153
|
-
rbglib_m_unichar_get_mirror_char(VALUE self, VALUE unichar)
|
154
|
-
{
|
155
|
-
gunichar mirrored_char;
|
156
|
-
|
157
|
-
if (g_unichar_get_mirror_char(NUM2UINT(unichar), &mirrored_char)) {
|
158
|
-
return UINT2NUM(mirrored_char);
|
159
|
-
} else {
|
160
|
-
return unichar;
|
161
|
-
}
|
162
|
-
}
|
163
|
-
#endif
|
164
|
-
|
165
|
-
#if GLIB_CHECK_VERSION(2,14,0)
|
166
|
-
static VALUE
|
167
|
-
rbglib_m_unichar_combining_class(VALUE self, VALUE unichar)
|
168
|
-
{
|
169
|
-
return INT2NUM(g_unichar_combining_class(NUM2UINT(unichar)));
|
170
|
-
}
|
171
|
-
|
172
|
-
static VALUE
|
173
|
-
rbglib_m_unichar_get_script(VALUE self, VALUE unichar)
|
174
|
-
{
|
175
|
-
return GENUM2RVAL(g_unichar_get_script(NUM2UINT(unichar)),
|
176
|
-
G_TYPE_UNICODE_SCRIPT);
|
177
|
-
}
|
178
|
-
|
179
|
-
static VALUE
|
180
|
-
rbglib_m_unichar_ismark(VALUE self, VALUE unichar)
|
181
|
-
{
|
182
|
-
return CBOOL2RVAL(g_unichar_ismark(NUM2UINT(unichar)));
|
183
|
-
}
|
184
|
-
|
185
|
-
static VALUE
|
186
|
-
rbglib_m_unichar_iszerowidth(VALUE self, VALUE unichar)
|
187
|
-
{
|
188
|
-
return CBOOL2RVAL(g_unichar_iszerowidth(NUM2UINT(unichar)));
|
189
|
-
}
|
190
|
-
#endif
|
191
|
-
|
192
|
-
static VALUE
|
193
|
-
rbglib_m_utf8_get_char(int argc, VALUE *argv, VALUE self)
|
194
|
-
{
|
195
|
-
VALUE utf8, validate;
|
196
|
-
gunichar result;
|
197
|
-
|
198
|
-
rb_scan_args(argc, argv, "11", &utf8, &validate);
|
199
|
-
|
200
|
-
if (RVAL2CBOOL(validate)) {
|
201
|
-
StringValue(utf8);
|
202
|
-
result = g_utf8_get_char_validated(RSTRING_PTR(utf8),
|
203
|
-
RSTRING_LEN(utf8));
|
204
|
-
if (result == (gunichar)-1) {
|
205
|
-
return INT2NUM(-1);
|
206
|
-
} else if (result == (gunichar)-2) {
|
207
|
-
return INT2NUM(-2);
|
208
|
-
}
|
209
|
-
} else {
|
210
|
-
result = g_utf8_get_char(StringValueCStr(utf8));
|
211
|
-
}
|
212
|
-
|
213
|
-
return UINT2NUM(result);
|
214
|
-
}
|
215
|
-
|
216
|
-
static VALUE
|
217
|
-
rbglib_m_utf8_strlen(VALUE self, VALUE rb_utf8)
|
218
|
-
{
|
219
|
-
gchar *utf8;
|
220
|
-
|
221
|
-
utf8 = StringValueCStr(rb_utf8);
|
222
|
-
return INT2NUM(g_utf8_strlen(utf8, RSTRING_LEN(rb_utf8)));
|
223
|
-
}
|
224
|
-
|
225
|
-
static VALUE
|
226
|
-
rbglib_m_utf8_strreverse(VALUE self, VALUE rb_utf8)
|
227
|
-
{
|
228
|
-
VALUE result;
|
229
|
-
gchar *utf8, *reversed_utf8;
|
230
|
-
|
231
|
-
utf8 = StringValueCStr(rb_utf8);
|
232
|
-
reversed_utf8 = g_utf8_strreverse(utf8, RSTRING_LEN(rb_utf8));
|
233
|
-
result = CSTR2RVAL(reversed_utf8);
|
234
|
-
g_free(reversed_utf8);
|
235
|
-
return result;
|
236
|
-
}
|
237
|
-
|
238
|
-
static VALUE
|
239
|
-
rbglib_m_utf8_validate(VALUE self, VALUE str)
|
240
|
-
{
|
241
|
-
StringValue(str);
|
242
|
-
return CBOOL2RVAL(g_utf8_validate(RSTRING_PTR(str), RSTRING_LEN(str),
|
243
|
-
NULL));
|
244
|
-
}
|
245
|
-
|
246
|
-
static VALUE
|
247
|
-
rbglib_m_utf8_strup(VALUE self, VALUE rb_utf8)
|
248
|
-
{
|
249
|
-
VALUE result;
|
250
|
-
gchar *utf8, *upcased_utf8;
|
251
|
-
|
252
|
-
utf8 = StringValueCStr(rb_utf8);
|
253
|
-
upcased_utf8 = g_utf8_strup(utf8, RSTRING_LEN(rb_utf8));
|
254
|
-
result = CSTR2RVAL(upcased_utf8);
|
255
|
-
g_free(upcased_utf8);
|
256
|
-
return result;
|
257
|
-
}
|
258
|
-
|
259
|
-
static VALUE
|
260
|
-
rbglib_m_utf8_strdown(VALUE self, VALUE rb_utf8)
|
261
|
-
{
|
262
|
-
VALUE result;
|
263
|
-
gchar *utf8, *downcased_utf8;
|
264
|
-
|
265
|
-
utf8 = StringValueCStr(rb_utf8);
|
266
|
-
downcased_utf8 = g_utf8_strdown(utf8, RSTRING_LEN(rb_utf8));
|
267
|
-
result = CSTR2RVAL(downcased_utf8);
|
268
|
-
g_free(downcased_utf8);
|
269
|
-
return result;
|
270
|
-
}
|
271
|
-
|
272
|
-
static VALUE
|
273
|
-
rbglib_m_utf8_casefold(VALUE self, VALUE rb_utf8)
|
274
|
-
{
|
275
|
-
VALUE result;
|
276
|
-
gchar *utf8, *casefolded_utf8;
|
277
|
-
|
278
|
-
utf8 = StringValueCStr(rb_utf8);
|
279
|
-
casefolded_utf8 = g_utf8_casefold(utf8, RSTRING_LEN(rb_utf8));
|
280
|
-
result = CSTR2RVAL(casefolded_utf8);
|
281
|
-
g_free(casefolded_utf8);
|
282
|
-
return result;
|
283
|
-
}
|
284
|
-
|
285
|
-
static VALUE
|
286
|
-
rbglib_m_utf8_normalize(int argc, VALUE *argv, VALUE self)
|
287
|
-
{
|
288
|
-
VALUE rb_utf8, rb_mode, result;
|
289
|
-
gchar *utf8, *normalized_utf8;
|
290
|
-
GNormalizeMode mode = G_NORMALIZE_DEFAULT;
|
291
|
-
|
292
|
-
rb_scan_args(argc, argv, "11", &rb_utf8, &rb_mode);
|
293
|
-
|
294
|
-
if (!NIL_P(rb_mode))
|
295
|
-
mode = RVAL2GENUM(rb_mode, G_TYPE_NORMALIZE_MODE);
|
296
|
-
|
297
|
-
utf8 = StringValueCStr(rb_utf8);
|
298
|
-
normalized_utf8 = g_utf8_normalize(utf8, RSTRING_LEN(rb_utf8), mode);
|
299
|
-
result = CSTR2RVAL(normalized_utf8);
|
300
|
-
g_free(normalized_utf8);
|
301
|
-
return result;
|
302
|
-
}
|
303
|
-
|
304
|
-
static VALUE
|
305
|
-
rbglib_m_utf8_collate(VALUE self, VALUE utf8a, VALUE utf8b)
|
306
|
-
{
|
307
|
-
return INT2NUM(g_utf8_collate(StringValueCStr(utf8a),
|
308
|
-
StringValueCStr(utf8b)));
|
309
|
-
}
|
310
|
-
|
311
|
-
static VALUE
|
312
|
-
rbglib_m_utf8_collate_key(int argc, VALUE *argv, VALUE self)
|
313
|
-
{
|
314
|
-
VALUE result, rb_utf8, for_filename;
|
315
|
-
gchar *key, *utf8;
|
316
|
-
gssize len;
|
317
|
-
|
318
|
-
rb_scan_args(argc, argv, "11", &rb_utf8, &for_filename);
|
319
|
-
|
320
|
-
utf8 = StringValueCStr(rb_utf8);
|
321
|
-
len = RSTRING_LEN(rb_utf8);
|
322
|
-
#if GLIB_CHECK_VERSION(2,8,0)
|
323
|
-
if (RVAL2CBOOL(for_filename))
|
324
|
-
key = g_utf8_collate_key_for_filename(utf8, len);
|
325
|
-
else
|
326
|
-
#endif
|
327
|
-
key = g_utf8_collate_key(utf8, len);
|
328
|
-
|
329
|
-
result = CSTR2RVAL(key);
|
330
|
-
g_free(key);
|
331
|
-
return result;
|
332
|
-
}
|
333
|
-
|
334
|
-
static VALUE
|
335
|
-
rbglib_m_utf8_to_utf16(VALUE self, VALUE rb_utf8)
|
336
|
-
{
|
337
|
-
VALUE result;
|
338
|
-
gchar *utf8;
|
339
|
-
gunichar2 *utf16;
|
340
|
-
glong len, items_written;
|
341
|
-
GError *error = NULL;
|
342
|
-
|
343
|
-
utf8 = StringValueCStr(rb_utf8);
|
344
|
-
len = RSTRING_LEN(rb_utf8);
|
345
|
-
|
346
|
-
utf16 = g_utf8_to_utf16(utf8, len, NULL, &items_written, &error);
|
347
|
-
|
348
|
-
if (error)
|
349
|
-
RAISE_GERROR(error);
|
350
|
-
|
351
|
-
result = rbg_utf16_to_rval_len((char *)utf16,
|
352
|
-
items_written * sizeof(*utf16));
|
353
|
-
g_free(utf16);
|
354
|
-
return result;
|
355
|
-
}
|
356
|
-
|
357
|
-
static VALUE
|
358
|
-
rbglib_m_utf8_to_ucs4(int argc, VALUE *argv, VALUE self)
|
359
|
-
{
|
360
|
-
VALUE result, rb_utf8, is_fast;
|
361
|
-
gchar *utf8;
|
362
|
-
gunichar *ucs4;
|
363
|
-
glong len, items_written;
|
364
|
-
|
365
|
-
rb_scan_args(argc, argv, "11", &rb_utf8, &is_fast);
|
366
|
-
|
367
|
-
utf8 = StringValueCStr(rb_utf8);
|
368
|
-
len = RSTRING_LEN(rb_utf8);
|
369
|
-
|
370
|
-
if (RVAL2CBOOL(is_fast)) {
|
371
|
-
ucs4 = g_utf8_to_ucs4_fast(utf8, len, &items_written);
|
372
|
-
} else {
|
373
|
-
GError *error = NULL;
|
374
|
-
ucs4 = g_utf8_to_ucs4(utf8, len, NULL, &items_written, &error);
|
375
|
-
|
376
|
-
if (error)
|
377
|
-
RAISE_GERROR(error);
|
378
|
-
}
|
379
|
-
|
380
|
-
result = rbg_ucs4_to_rval_len((char *)ucs4, items_written * sizeof(*ucs4));
|
381
|
-
g_free(ucs4);
|
382
|
-
return result;
|
383
|
-
}
|
384
|
-
|
385
|
-
static VALUE
|
386
|
-
rbglib_m_utf16_to_ucs4(VALUE self, VALUE rb_utf16)
|
387
|
-
{
|
388
|
-
VALUE result;
|
389
|
-
gunichar *ucs4;
|
390
|
-
gunichar2 *utf16;
|
391
|
-
glong len, items_written;
|
392
|
-
GError *error = NULL;
|
393
|
-
|
394
|
-
utf16 = (gunichar2 *)StringValueCStr(rb_utf16);
|
395
|
-
len = RSTRING_LEN(rb_utf16) / sizeof(*utf16);
|
396
|
-
|
397
|
-
ucs4 = g_utf16_to_ucs4(utf16, len, NULL, &items_written, &error);
|
398
|
-
|
399
|
-
if (error)
|
400
|
-
RAISE_GERROR(error);
|
401
|
-
|
402
|
-
result = rbg_ucs4_to_rval_len((char *)ucs4, items_written * sizeof(*ucs4));
|
403
|
-
g_free(ucs4);
|
404
|
-
return result;
|
405
|
-
}
|
406
|
-
|
407
|
-
static VALUE
|
408
|
-
rbglib_m_utf16_to_utf8(VALUE self, VALUE rb_utf16)
|
409
|
-
{
|
410
|
-
VALUE result;
|
411
|
-
gchar *utf8;
|
412
|
-
gunichar2 *utf16;
|
413
|
-
glong len, items_written;
|
414
|
-
GError *error = NULL;
|
415
|
-
|
416
|
-
utf16 = (gunichar2 *)StringValueCStr(rb_utf16);
|
417
|
-
len = RSTRING_LEN(rb_utf16) / sizeof(*utf16);
|
418
|
-
|
419
|
-
utf8 = g_utf16_to_utf8(utf16, len, NULL, &items_written, &error);
|
420
|
-
|
421
|
-
if (error)
|
422
|
-
RAISE_GERROR(error);
|
423
|
-
|
424
|
-
result = CSTR2RVAL_LEN(utf8, items_written * sizeof(*utf8));
|
425
|
-
g_free(utf8);
|
426
|
-
return result;
|
427
|
-
}
|
428
|
-
|
429
|
-
static VALUE
|
430
|
-
rbglib_m_ucs4_to_utf16(VALUE self, VALUE rb_ucs4)
|
431
|
-
{
|
432
|
-
VALUE result;
|
433
|
-
gunichar *ucs4;
|
434
|
-
gunichar2 *utf16;
|
435
|
-
glong len, items_written;
|
436
|
-
GError *error = NULL;
|
437
|
-
|
438
|
-
ucs4 = (gunichar *)StringValuePtr(rb_ucs4);
|
439
|
-
len = RSTRING_LEN(rb_ucs4) / sizeof(*ucs4);
|
440
|
-
|
441
|
-
utf16 = g_ucs4_to_utf16(ucs4, len, NULL, &items_written, &error);
|
442
|
-
|
443
|
-
if (error)
|
444
|
-
RAISE_GERROR(error);
|
445
|
-
|
446
|
-
result = rbg_utf16_to_rval_len((char *)utf16,
|
447
|
-
items_written * sizeof(*utf16));
|
448
|
-
g_free(utf16);
|
449
|
-
return result;
|
450
|
-
}
|
451
|
-
|
452
|
-
static VALUE
|
453
|
-
rbglib_m_ucs4_to_utf8(VALUE self, VALUE rb_ucs4)
|
454
|
-
{
|
455
|
-
VALUE result;
|
456
|
-
gunichar *ucs4;
|
457
|
-
gchar *utf8;
|
458
|
-
glong len, items_written;
|
459
|
-
GError *error = NULL;
|
460
|
-
|
461
|
-
ucs4 = (gunichar *)StringValuePtr(rb_ucs4);
|
462
|
-
len = RSTRING_LEN(rb_ucs4) / sizeof(*ucs4);
|
463
|
-
|
464
|
-
utf8 = g_ucs4_to_utf8(ucs4, len, NULL, &items_written, &error);
|
465
|
-
|
466
|
-
if (error)
|
467
|
-
RAISE_GERROR(error);
|
468
|
-
|
469
|
-
result = CSTR2RVAL_LEN(utf8, items_written);
|
470
|
-
g_free(utf8);
|
471
|
-
return result;
|
472
|
-
}
|
473
|
-
|
474
|
-
static VALUE
|
475
|
-
rbglib_m_unichar_to_utf8(VALUE self, VALUE unichar)
|
476
|
-
{
|
477
|
-
gchar utf8[6];
|
478
|
-
gint len;
|
479
|
-
|
480
|
-
len = g_unichar_to_utf8(NUM2UINT(unichar), utf8);
|
481
|
-
return CSTR2RVAL_LEN(utf8, len);
|
482
|
-
}
|
483
|
-
|
484
66
|
void
|
485
67
|
Init_glib_unicode(void)
|
486
68
|
{
|
487
|
-
VALUE
|
488
|
-
|
489
|
-
mGLibUniChar = rb_define_module_under(mGLib, "UniChar");
|
490
|
-
mGLibUnicode = rb_define_module_under(mGLib, "Unicode");
|
491
|
-
mGLibUTF8 = rb_define_module_under(mGLib, "UTF8");
|
492
|
-
mGLibUTF16 = rb_define_module_under(mGLib, "UTF16");
|
493
|
-
mGLibUCS4 = rb_define_module_under(mGLib, "UCS4");
|
69
|
+
VALUE RG_TARGET_NAMESPACE = rb_define_module_under(mGLib, "Unicode");
|
494
70
|
|
495
71
|
/* GUnicodeType */
|
496
|
-
G_DEF_CLASS(G_TYPE_UNICODE_TYPE, "Type",
|
497
|
-
G_DEF_CONSTANTS(
|
72
|
+
G_DEF_CLASS(G_TYPE_UNICODE_TYPE, "Type", RG_TARGET_NAMESPACE);
|
73
|
+
G_DEF_CONSTANTS(RG_TARGET_NAMESPACE, G_TYPE_UNICODE_TYPE, "G_UNICODE_");
|
498
74
|
/* GUnicodeBreakType */
|
499
|
-
G_DEF_CLASS(G_TYPE_UNICODE_BREAK_TYPE, "BreakType",
|
500
|
-
G_DEF_CONSTANTS(
|
75
|
+
G_DEF_CLASS(G_TYPE_UNICODE_BREAK_TYPE, "BreakType", RG_TARGET_NAMESPACE);
|
76
|
+
G_DEF_CONSTANTS(RG_TARGET_NAMESPACE, G_TYPE_UNICODE_BREAK_TYPE, "G_UNICODE_");
|
501
77
|
|
502
78
|
#if GLIB_CHECK_VERSION(2,14,0)
|
503
79
|
/* GUnicodeScript */
|
504
|
-
G_DEF_CLASS(G_TYPE_UNICODE_SCRIPT, "Script",
|
505
|
-
G_DEF_CONSTANTS(
|
80
|
+
G_DEF_CLASS(G_TYPE_UNICODE_SCRIPT, "Script", RG_TARGET_NAMESPACE);
|
81
|
+
G_DEF_CONSTANTS(RG_TARGET_NAMESPACE, G_TYPE_UNICODE_SCRIPT, "G_UNICODE_");
|
506
82
|
#endif
|
507
83
|
|
508
84
|
G_DEF_CLASS(G_TYPE_NORMALIZE_MODE, "NormalizeMode", mGLib);
|
509
85
|
|
510
86
|
rb_define_module_function(mGLib, "charset", rbglib_m_charset, 0);
|
511
87
|
|
512
|
-
|
513
|
-
|
514
|
-
rb_define_module_function(mGLibUniChar, "alpha?",
|
515
|
-
rbglib_m_unichar_isalpha, 1);
|
516
|
-
rb_define_module_function(mGLibUniChar, "cntrl?",
|
517
|
-
rbglib_m_unichar_iscntrl, 1);
|
518
|
-
rb_define_module_function(mGLibUniChar, "digit?",
|
519
|
-
rbglib_m_unichar_isdigit, 1);
|
520
|
-
rb_define_module_function(mGLibUniChar, "graph?",
|
521
|
-
rbglib_m_unichar_isgraph, 1);
|
522
|
-
rb_define_module_function(mGLibUniChar, "lower?",
|
523
|
-
rbglib_m_unichar_islower, 1);
|
524
|
-
rb_define_module_function(mGLibUniChar, "print?",
|
525
|
-
rbglib_m_unichar_isprint, 1);
|
526
|
-
rb_define_module_function(mGLibUniChar, "punct?",
|
527
|
-
rbglib_m_unichar_ispunct, 1);
|
528
|
-
rb_define_module_function(mGLibUniChar, "space?",
|
529
|
-
rbglib_m_unichar_isspace, 1);
|
530
|
-
rb_define_module_function(mGLibUniChar, "upper?",
|
531
|
-
rbglib_m_unichar_isupper, 1);
|
532
|
-
rb_define_module_function(mGLibUniChar, "xdigit?",
|
533
|
-
rbglib_m_unichar_isxdigit, 1);
|
534
|
-
rb_define_module_function(mGLibUniChar, "title?",
|
535
|
-
rbglib_m_unichar_istitle, 1);
|
536
|
-
rb_define_module_function(mGLibUniChar, "defined?",
|
537
|
-
rbglib_m_unichar_isdefined, 1);
|
538
|
-
rb_define_module_function(mGLibUniChar, "wide?",
|
539
|
-
rbglib_m_unichar_iswide, 1);
|
540
|
-
#if GLIB_CHECK_VERSION(2,12,0)
|
541
|
-
rb_define_module_function(mGLibUniChar, "wide_cjk?",
|
542
|
-
rbglib_m_unichar_iswide_cjk, 1);
|
543
|
-
#endif
|
544
|
-
|
545
|
-
rb_define_module_function(mGLibUniChar, "to_upper",
|
546
|
-
rbglib_m_unichar_toupper, 1);
|
547
|
-
rb_define_module_function(mGLibUniChar, "to_lower",
|
548
|
-
rbglib_m_unichar_tolower, 1);
|
549
|
-
rb_define_module_function(mGLibUniChar, "to_title",
|
550
|
-
rbglib_m_unichar_totitle, 1);
|
551
|
-
|
552
|
-
rb_define_module_function(mGLibUniChar, "digit_value",
|
553
|
-
rbglib_m_unichar_digit_value, 1);
|
554
|
-
rb_define_module_function(mGLibUniChar, "xdigit_value",
|
555
|
-
rbglib_m_unichar_xdigit_value, 1);
|
556
|
-
|
557
|
-
rb_define_module_function(mGLibUniChar, "type", rbglib_m_unichar_type, 1);
|
558
|
-
rb_define_module_function(mGLibUniChar, "break_type",
|
559
|
-
rbglib_m_unichar_break_type, 1);
|
560
|
-
|
561
|
-
rb_define_singleton_method(mGLibUnicode, "canonical_ordering",
|
562
|
-
rbglib_m_unicode_canonical_ordering, 1);
|
563
|
-
rb_define_singleton_method(mGLibUnicode, "canonical_decomposition",
|
564
|
-
rbglib_m_unicode_canonical_decomposition, 1);
|
565
|
-
|
566
|
-
#if GLIB_CHECK_VERSION(2,4,0)
|
567
|
-
rb_define_module_function(mGLibUniChar, "get_mirror_char",
|
568
|
-
rbglib_m_unichar_get_mirror_char, 1);
|
569
|
-
#endif
|
570
|
-
|
571
|
-
#if GLIB_CHECK_VERSION(2,14,0)
|
572
|
-
rb_define_module_function(mGLibUniChar, "combining_class",
|
573
|
-
rbglib_m_unichar_combining_class, 1);
|
574
|
-
rb_define_module_function(mGLibUniChar, "get_script",
|
575
|
-
rbglib_m_unichar_get_script, 1);
|
576
|
-
rb_define_module_function(mGLibUniChar, "mark?",
|
577
|
-
rbglib_m_unichar_ismark, 1);
|
578
|
-
rb_define_module_function(mGLibUniChar, "zero_width?",
|
579
|
-
rbglib_m_unichar_iszerowidth, 1);
|
580
|
-
#endif
|
581
|
-
|
582
|
-
/*
|
583
|
-
Not implemented.
|
584
|
-
g_utf8_next_char
|
585
|
-
*/
|
586
|
-
rb_define_module_function(mGLibUTF8, "get_char",
|
587
|
-
rbglib_m_utf8_get_char, -1);
|
588
|
-
/*
|
589
|
-
Not implemented.
|
590
|
-
g_utf8_offset_to_pointer
|
591
|
-
g_utf8_pointer_to_offset
|
592
|
-
g_utf8_prev_char
|
593
|
-
g_utf8_find_next_char
|
594
|
-
g_utf8_find_prev_char
|
595
|
-
g_utf8_prev_char
|
596
|
-
*/
|
597
|
-
rb_define_module_function(mGLibUTF8, "size", rbglib_m_utf8_strlen, 1);
|
598
|
-
/*
|
599
|
-
Not implemented.
|
600
|
-
g_utf8_strncpy
|
601
|
-
g_utf8_strrchr
|
602
|
-
*/
|
603
|
-
rb_define_module_function(mGLibUTF8, "reverse",
|
604
|
-
rbglib_m_utf8_strreverse, 1);
|
605
|
-
rb_define_module_function(mGLibUTF8, "validate",
|
606
|
-
rbglib_m_utf8_validate, 1);
|
607
|
-
|
608
|
-
rb_define_module_function(mGLibUTF8, "upcase",
|
609
|
-
rbglib_m_utf8_strup, 1);
|
610
|
-
rb_define_module_function(mGLibUTF8, "downcase",
|
611
|
-
rbglib_m_utf8_strdown, 1);
|
612
|
-
rb_define_module_function(mGLibUTF8, "casefold",
|
613
|
-
rbglib_m_utf8_casefold, 1);
|
614
|
-
|
615
|
-
rb_define_module_function(mGLibUTF8, "normalize",
|
616
|
-
rbglib_m_utf8_normalize, -1);
|
617
|
-
|
618
|
-
rb_define_module_function(mGLibUTF8, "collate",
|
619
|
-
rbglib_m_utf8_collate, 2);
|
620
|
-
rb_define_module_function(mGLibUTF8, "collate_key",
|
621
|
-
rbglib_m_utf8_collate_key, -1);
|
622
|
-
|
623
|
-
rb_define_module_function(mGLibUTF8, "to_utf16",
|
624
|
-
rbglib_m_utf8_to_utf16, 1);
|
625
|
-
rb_define_module_function(mGLibUTF8, "to_ucs4",
|
626
|
-
rbglib_m_utf8_to_ucs4, -1);
|
627
|
-
|
628
|
-
rb_define_module_function(mGLibUTF16, "to_ucs4",
|
629
|
-
rbglib_m_utf16_to_ucs4, 1);
|
630
|
-
rb_define_module_function(mGLibUTF16, "to_utf8",
|
631
|
-
rbglib_m_utf16_to_utf8, 1);
|
632
|
-
|
633
|
-
rb_define_module_function(mGLibUCS4, "to_utf16",
|
634
|
-
rbglib_m_ucs4_to_utf16, 1);
|
635
|
-
rb_define_module_function(mGLibUCS4, "to_utf8",
|
636
|
-
rbglib_m_ucs4_to_utf8, 1);
|
637
|
-
|
638
|
-
rb_define_module_function(mGLibUniChar, "to_utf8",
|
639
|
-
rbglib_m_unichar_to_utf8, 1);
|
88
|
+
RG_DEF_SMETHOD(canonical_ordering, 1);
|
89
|
+
RG_DEF_SMETHOD(canonical_decomposition, 1);
|
640
90
|
}
|