glib2 0.20.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/ChangeLog +3023 -0
- data/README +28 -0
- data/Rakefile +87 -0
- data/extconf.rb +61 -0
- data/sample/bookmarkfile.rb +66 -0
- data/sample/completion.rb +45 -0
- data/sample/idle.rb +41 -0
- data/sample/iochannel.rb +44 -0
- data/sample/keyfile.rb +62 -0
- data/sample/shell.rb +36 -0
- data/sample/spawn.rb +25 -0
- data/sample/timeout.rb +28 -0
- data/sample/timeout2.rb +35 -0
- data/sample/timer.rb +40 -0
- data/sample/type-register.rb +103 -0
- data/sample/type-register2.rb +104 -0
- data/sample/utils.rb +54 -0
- data/src/glib-enum-types.c +1032 -0
- data/src/glib-enum-types.h +140 -0
- data/src/lib/glib-mkenums.rb +199 -0
- data/src/lib/glib2.rb +220 -0
- data/src/lib/mkmf-gnome2.rb +390 -0
- data/src/lib/pkg-config.rb +137 -0
- data/src/rbgcompat.h +30 -0
- data/src/rbglib.c +320 -0
- data/src/rbglib.h +96 -0
- data/src/rbglib_bookmarkfile.c +595 -0
- data/src/rbglib_completion.c +192 -0
- data/src/rbglib_convert.c +195 -0
- data/src/rbglib_error.c +95 -0
- data/src/rbglib_fileutils.c +83 -0
- data/src/rbglib_i18n.c +44 -0
- data/src/rbglib_int64.c +157 -0
- data/src/rbglib_iochannel.c +883 -0
- data/src/rbglib_keyfile.c +846 -0
- data/src/rbglib_maincontext.c +917 -0
- data/src/rbglib_mainloop.c +87 -0
- data/src/rbglib_messages.c +150 -0
- data/src/rbglib_pollfd.c +111 -0
- data/src/rbglib_shell.c +68 -0
- data/src/rbglib_source.c +190 -0
- data/src/rbglib_spawn.c +345 -0
- data/src/rbglib_threads.c +51 -0
- data/src/rbglib_timer.c +127 -0
- data/src/rbglib_unicode.c +611 -0
- data/src/rbglib_utils.c +386 -0
- data/src/rbglib_win32.c +136 -0
- data/src/rbgobj_boxed.c +251 -0
- data/src/rbgobj_closure.c +337 -0
- data/src/rbgobj_convert.c +167 -0
- data/src/rbgobj_enums.c +961 -0
- data/src/rbgobj_fundamental.c +30 -0
- data/src/rbgobj_object.c +892 -0
- data/src/rbgobj_param.c +390 -0
- data/src/rbgobj_paramspecs.c +305 -0
- data/src/rbgobj_signal.c +963 -0
- data/src/rbgobj_strv.c +61 -0
- data/src/rbgobj_type.c +851 -0
- data/src/rbgobj_typeinstance.c +121 -0
- data/src/rbgobj_typeinterface.c +148 -0
- data/src/rbgobj_typemodule.c +66 -0
- data/src/rbgobj_typeplugin.c +49 -0
- data/src/rbgobj_value.c +313 -0
- data/src/rbgobj_valuearray.c +59 -0
- data/src/rbgobj_valuetypes.c +298 -0
- data/src/rbgobject.c +406 -0
- data/src/rbgobject.h +265 -0
- data/src/rbgprivate.h +88 -0
- data/src/rbgutil.c +222 -0
- data/src/rbgutil.h +82 -0
- data/src/rbgutil_callback.c +231 -0
- data/test/glib-test-init.rb +6 -0
- data/test/glib-test-utils.rb +12 -0
- data/test/run-test.rb +25 -0
- data/test/test_enum.rb +99 -0
- data/test/test_file_utils.rb +15 -0
- data/test/test_glib2.rb +120 -0
- data/test/test_iochannel.rb +275 -0
- data/test/test_key_file.rb +38 -0
- data/test/test_mkenums.rb +25 -0
- data/test/test_signal.rb +20 -0
- data/test/test_timeout.rb +28 -0
- data/test/test_unicode.rb +369 -0
- data/test/test_utils.rb +37 -0
- data/test/test_win32.rb +13 -0
- metadata +165 -0
@@ -0,0 +1,846 @@
|
|
1
|
+
/* -*- c-file-style: "ruby"; indent-tabs-mode: nil -*- */
|
2
|
+
/************************************************
|
3
|
+
|
4
|
+
rbglib_keyfile.c -
|
5
|
+
|
6
|
+
$Author: sakai $
|
7
|
+
$Date: 2007/06/16 02:46:28 $
|
8
|
+
|
9
|
+
Copyright (C) 2006 Masao Mutoh
|
10
|
+
************************************************/
|
11
|
+
|
12
|
+
#include "rbgprivate.h"
|
13
|
+
|
14
|
+
#if GLIB_CHECK_VERSION(2,6,0)
|
15
|
+
/************************************************/
|
16
|
+
static GKeyFile*
|
17
|
+
keyfile_copy(const GKeyFile* keyfile)
|
18
|
+
{
|
19
|
+
// GKeyFile* new_keyfile;
|
20
|
+
g_return_val_if_fail (keyfile != NULL, NULL);
|
21
|
+
/*
|
22
|
+
new_keyfile = g_key_file_new();
|
23
|
+
*new_keyfile = (GKeyFile*)*keyfile;
|
24
|
+
return new_keyfile;
|
25
|
+
*/
|
26
|
+
return (GKeyFile*)keyfile;
|
27
|
+
}
|
28
|
+
|
29
|
+
|
30
|
+
GType
|
31
|
+
g_key_file_get_type(void)
|
32
|
+
{
|
33
|
+
static GType our_type = 0;
|
34
|
+
if (our_type == 0)
|
35
|
+
our_type = g_boxed_type_register_static("GKeyFile",
|
36
|
+
(GBoxedCopyFunc)keyfile_copy,
|
37
|
+
(GBoxedFreeFunc)g_key_file_free);
|
38
|
+
return our_type;
|
39
|
+
}
|
40
|
+
/************************************************/
|
41
|
+
|
42
|
+
#define _SELF(self) ((GKeyFile*)(RVAL2BOXED(self, G_TYPE_KEY_FILE)))
|
43
|
+
|
44
|
+
static VALUE
|
45
|
+
keyfile_initialize(self)
|
46
|
+
VALUE self;
|
47
|
+
{
|
48
|
+
G_INITIALIZE(self, g_key_file_new());
|
49
|
+
return Qnil;
|
50
|
+
}
|
51
|
+
|
52
|
+
static VALUE
|
53
|
+
keyfile_set_list_separator(self, sep)
|
54
|
+
VALUE self, sep;
|
55
|
+
{
|
56
|
+
g_key_file_set_list_separator(_SELF(self), NUM2INT(sep));
|
57
|
+
return self;
|
58
|
+
}
|
59
|
+
|
60
|
+
static VALUE
|
61
|
+
keyfile_load_from_file(argc, argv, self)
|
62
|
+
int argc;
|
63
|
+
VALUE *argv;
|
64
|
+
VALUE self;
|
65
|
+
{
|
66
|
+
VALUE file, flags;
|
67
|
+
GError* error = NULL;
|
68
|
+
gboolean ret;
|
69
|
+
GKeyFileFlags gflags = G_KEY_FILE_KEEP_COMMENTS | G_KEY_FILE_KEEP_TRANSLATIONS;
|
70
|
+
|
71
|
+
rb_scan_args(argc, argv, "11", &file, &flags);
|
72
|
+
|
73
|
+
if (!NIL_P(flags)){
|
74
|
+
gflags = RVAL2GFLAGS(flags, G_TYPE_KEY_FILE_FLAGS);
|
75
|
+
}
|
76
|
+
|
77
|
+
ret = g_key_file_load_from_file(_SELF(self),
|
78
|
+
(const gchar*)RVAL2CSTR(file),
|
79
|
+
gflags, &error);
|
80
|
+
|
81
|
+
if (! ret) RAISE_GERROR(error);
|
82
|
+
|
83
|
+
return self;
|
84
|
+
}
|
85
|
+
|
86
|
+
static VALUE
|
87
|
+
keyfile_load_from_data(argc, argv, self)
|
88
|
+
int argc;
|
89
|
+
VALUE *argv;
|
90
|
+
VALUE self;
|
91
|
+
{
|
92
|
+
VALUE data, flags;
|
93
|
+
GError* error = NULL;
|
94
|
+
gboolean ret;
|
95
|
+
GKeyFileFlags gflags = G_KEY_FILE_KEEP_COMMENTS | G_KEY_FILE_KEEP_TRANSLATIONS;
|
96
|
+
|
97
|
+
rb_scan_args(argc, argv, "11", &data, &flags);
|
98
|
+
|
99
|
+
if (!NIL_P(flags)){
|
100
|
+
gflags = RVAL2GFLAGS(flags, G_TYPE_KEY_FILE_FLAGS);
|
101
|
+
}
|
102
|
+
StringValue(data);
|
103
|
+
|
104
|
+
ret = g_key_file_load_from_data(_SELF(self),
|
105
|
+
(const gchar*)RVAL2CSTR(data),
|
106
|
+
(gsize)RSTRING_LEN(data),
|
107
|
+
gflags, &error);
|
108
|
+
|
109
|
+
if (! ret) RAISE_GERROR(error);
|
110
|
+
|
111
|
+
return self;
|
112
|
+
}
|
113
|
+
|
114
|
+
static VALUE
|
115
|
+
keyfile_load_from_data_dirs(argc, argv, self)
|
116
|
+
int argc;
|
117
|
+
VALUE *argv;
|
118
|
+
VALUE self;
|
119
|
+
{
|
120
|
+
VALUE file, flags;
|
121
|
+
GError* error = NULL;
|
122
|
+
gboolean ret;
|
123
|
+
gchar* full_path;
|
124
|
+
GKeyFileFlags gflags = G_KEY_FILE_KEEP_COMMENTS | G_KEY_FILE_KEEP_TRANSLATIONS;
|
125
|
+
|
126
|
+
rb_scan_args(argc, argv, "11", &file, &flags);
|
127
|
+
|
128
|
+
if (!NIL_P(flags)){
|
129
|
+
gflags = RVAL2GFLAGS(flags, G_TYPE_KEY_FILE_FLAGS);
|
130
|
+
}
|
131
|
+
StringValue(file);
|
132
|
+
|
133
|
+
ret = g_key_file_load_from_data_dirs(_SELF(self),
|
134
|
+
(const gchar*)RVAL2CSTR(file),
|
135
|
+
&full_path,
|
136
|
+
gflags, &error);
|
137
|
+
|
138
|
+
if (! ret) RAISE_GERROR(error);
|
139
|
+
|
140
|
+
return full_path ? CSTR2RVAL(full_path) : Qnil;
|
141
|
+
}
|
142
|
+
|
143
|
+
#if GLIB_CHECK_VERSION(2, 14, 0)
|
144
|
+
static VALUE
|
145
|
+
keyfile_load_from_dirs(int argc, VALUE *argv, VALUE self)
|
146
|
+
{
|
147
|
+
VALUE rb_file, rb_search_dirs, rb_flags;
|
148
|
+
GError* error = NULL;
|
149
|
+
gboolean success;
|
150
|
+
const gchar *file;
|
151
|
+
gchar **search_dirs;
|
152
|
+
gchar* full_path;
|
153
|
+
GKeyFileFlags flags;
|
154
|
+
|
155
|
+
rb_scan_args(argc, argv, "12", &rb_file, &rb_search_dirs, &rb_flags);
|
156
|
+
|
157
|
+
file = RVAL2CSTR(rb_file);
|
158
|
+
if (NIL_P(rb_search_dirs)) {
|
159
|
+
search_dirs = NULL;
|
160
|
+
}
|
161
|
+
else {
|
162
|
+
long i, len;
|
163
|
+
|
164
|
+
Check_Type(rb_search_dirs, T_ARRAY);
|
165
|
+
len = RARRAY_LEN(rb_search_dirs);
|
166
|
+
search_dirs = ALLOCA_N(gchar *, len + 1);
|
167
|
+
for (i = 0; i < len; i++) {
|
168
|
+
search_dirs[i] = RVAL2CSTR(RARRAY_PTR(rb_search_dirs)[i]);
|
169
|
+
}
|
170
|
+
search_dirs[i] = NULL;
|
171
|
+
}
|
172
|
+
flags = G_KEY_FILE_KEEP_COMMENTS | G_KEY_FILE_KEEP_TRANSLATIONS;
|
173
|
+
if (!NIL_P(rb_flags))
|
174
|
+
flags = RVAL2GFLAGS(rb_flags, G_TYPE_KEY_FILE_FLAGS);
|
175
|
+
|
176
|
+
if (search_dirs)
|
177
|
+
success = g_key_file_load_from_dirs(_SELF(self), file,
|
178
|
+
(const gchar **)search_dirs,
|
179
|
+
&full_path, flags, &error);
|
180
|
+
else
|
181
|
+
success = g_key_file_load_from_data_dirs(_SELF(self), file,
|
182
|
+
&full_path, flags, &error);
|
183
|
+
|
184
|
+
if (!success)
|
185
|
+
RAISE_GERROR(error);
|
186
|
+
|
187
|
+
return CSTR2RVAL(full_path);
|
188
|
+
}
|
189
|
+
#endif
|
190
|
+
|
191
|
+
static VALUE
|
192
|
+
keyfile_to_data(self)
|
193
|
+
VALUE self;
|
194
|
+
{
|
195
|
+
gsize length;
|
196
|
+
GError* error = NULL;
|
197
|
+
gchar* data = g_key_file_to_data(_SELF(self), &length, &error);
|
198
|
+
|
199
|
+
if (error) RAISE_GERROR(error);
|
200
|
+
|
201
|
+
return rb_str_new(data, length);
|
202
|
+
}
|
203
|
+
|
204
|
+
static VALUE
|
205
|
+
keyfile_get_start_group(self)
|
206
|
+
VALUE self;
|
207
|
+
{
|
208
|
+
return CSTR2RVAL(g_key_file_get_start_group(_SELF(self)));
|
209
|
+
}
|
210
|
+
|
211
|
+
static VALUE
|
212
|
+
keyfile_get_groups(self)
|
213
|
+
VALUE self;
|
214
|
+
{
|
215
|
+
gsize length;
|
216
|
+
int i;
|
217
|
+
gchar** groups = g_key_file_get_groups(_SELF(self), &length);
|
218
|
+
VALUE ary = rb_ary_new();
|
219
|
+
|
220
|
+
for (i = 0; i < length; i++){
|
221
|
+
rb_ary_push(ary, CSTR2RVAL(groups[i]));
|
222
|
+
}
|
223
|
+
|
224
|
+
g_strfreev(groups);
|
225
|
+
|
226
|
+
return ary;
|
227
|
+
}
|
228
|
+
|
229
|
+
static VALUE
|
230
|
+
keyfile_get_keys(self, group_name)
|
231
|
+
VALUE self, group_name;
|
232
|
+
{
|
233
|
+
gsize length;
|
234
|
+
int i;
|
235
|
+
GError* error = NULL;
|
236
|
+
gchar** keys = g_key_file_get_keys(_SELF(self),
|
237
|
+
(const gchar*)RVAL2CSTR(group_name),
|
238
|
+
&length, &error);
|
239
|
+
VALUE ary = rb_ary_new();
|
240
|
+
|
241
|
+
if (error) RAISE_GERROR(error);
|
242
|
+
|
243
|
+
for (i = 0; i < length; i++){
|
244
|
+
rb_ary_push(ary, CSTR2RVAL(keys[i]));
|
245
|
+
}
|
246
|
+
|
247
|
+
g_strfreev(keys);
|
248
|
+
|
249
|
+
return ary;
|
250
|
+
}
|
251
|
+
|
252
|
+
static VALUE
|
253
|
+
keyfile_has_group(self, group_name)
|
254
|
+
VALUE self, group_name;
|
255
|
+
{
|
256
|
+
return CBOOL2RVAL(g_key_file_has_group(_SELF(self),
|
257
|
+
(const gchar*)RVAL2CSTR(group_name)));
|
258
|
+
}
|
259
|
+
|
260
|
+
static VALUE
|
261
|
+
keyfile_has_key(self, group_name, key)
|
262
|
+
VALUE self, group_name, key;
|
263
|
+
{
|
264
|
+
GError* error = NULL;
|
265
|
+
gboolean ret = g_key_file_has_key(_SELF(self),
|
266
|
+
(const gchar*)RVAL2CSTR(group_name),
|
267
|
+
(const gchar*)RVAL2CSTR(key),
|
268
|
+
&error);
|
269
|
+
|
270
|
+
if (error) RAISE_GERROR(error);
|
271
|
+
|
272
|
+
return CBOOL2RVAL(ret);
|
273
|
+
}
|
274
|
+
|
275
|
+
static VALUE
|
276
|
+
keyfile_get_value(self, group_name, key)
|
277
|
+
VALUE self, group_name, key;
|
278
|
+
{
|
279
|
+
GError* error = NULL;
|
280
|
+
gchar* ret = g_key_file_get_value(_SELF(self),
|
281
|
+
(const gchar*)RVAL2CSTR(group_name),
|
282
|
+
(const gchar*)RVAL2CSTR(key),
|
283
|
+
&error);
|
284
|
+
|
285
|
+
if (error) RAISE_GERROR(error);
|
286
|
+
|
287
|
+
return ret ? CSTR2RVAL2(ret) : Qnil;
|
288
|
+
}
|
289
|
+
|
290
|
+
static VALUE
|
291
|
+
keyfile_get_string(self, group_name, key)
|
292
|
+
VALUE self, group_name, key;
|
293
|
+
{
|
294
|
+
GError* error = NULL;
|
295
|
+
gchar* ret = g_key_file_get_string(_SELF(self),
|
296
|
+
(const gchar*)RVAL2CSTR(group_name),
|
297
|
+
(const gchar*)RVAL2CSTR(key),
|
298
|
+
&error);
|
299
|
+
|
300
|
+
if (error) RAISE_GERROR(error);
|
301
|
+
|
302
|
+
return ret ? CSTR2RVAL2(ret) : Qnil;
|
303
|
+
}
|
304
|
+
|
305
|
+
static VALUE
|
306
|
+
keyfile_get_locale_string(argc, argv, self)
|
307
|
+
int argc;
|
308
|
+
VALUE *argv;
|
309
|
+
VALUE self;
|
310
|
+
{
|
311
|
+
VALUE group_name, key, locale;
|
312
|
+
GError* error = NULL;
|
313
|
+
gchar* ret;
|
314
|
+
|
315
|
+
rb_scan_args(argc, argv, "21", &group_name, &key, &locale);
|
316
|
+
|
317
|
+
ret = g_key_file_get_locale_string(_SELF(self),
|
318
|
+
(const gchar*)RVAL2CSTR(group_name),
|
319
|
+
(const gchar*)RVAL2CSTR(key),
|
320
|
+
(const gchar*)(NIL_P(locale) ? NULL : RVAL2CSTR(locale)),
|
321
|
+
&error);
|
322
|
+
|
323
|
+
if (error) RAISE_GERROR(error);
|
324
|
+
|
325
|
+
return ret ? CSTR2RVAL2(ret) : Qnil;
|
326
|
+
}
|
327
|
+
|
328
|
+
static VALUE
|
329
|
+
keyfile_get_boolean(self, group_name, key)
|
330
|
+
VALUE self, group_name, key;
|
331
|
+
{
|
332
|
+
GError* error = NULL;
|
333
|
+
gboolean ret = g_key_file_get_boolean(_SELF(self),
|
334
|
+
(const gchar*)RVAL2CSTR(group_name),
|
335
|
+
(const gchar*)RVAL2CSTR(key),
|
336
|
+
&error);
|
337
|
+
|
338
|
+
if (error) RAISE_GERROR(error);
|
339
|
+
|
340
|
+
return CBOOL2RVAL(ret);
|
341
|
+
}
|
342
|
+
|
343
|
+
static VALUE
|
344
|
+
keyfile_get_integer(self, group_name, key)
|
345
|
+
VALUE self, group_name, key;
|
346
|
+
{
|
347
|
+
GError* error = NULL;
|
348
|
+
gint ret = g_key_file_get_integer(_SELF(self),
|
349
|
+
(const gchar*)RVAL2CSTR(group_name),
|
350
|
+
(const gchar*)RVAL2CSTR(key),
|
351
|
+
&error);
|
352
|
+
|
353
|
+
if (error) RAISE_GERROR(error);
|
354
|
+
|
355
|
+
return INT2NUM(ret);
|
356
|
+
}
|
357
|
+
|
358
|
+
#if GLIB_CHECK_VERSION(2,12,0)
|
359
|
+
static VALUE
|
360
|
+
keyfile_get_double(self, group_name, key)
|
361
|
+
VALUE self, group_name, key;
|
362
|
+
{
|
363
|
+
GError* error = NULL;
|
364
|
+
gdouble ret = g_key_file_get_double(_SELF(self),
|
365
|
+
(const gchar*)RVAL2CSTR(group_name),
|
366
|
+
(const gchar*)RVAL2CSTR(key),
|
367
|
+
&error);
|
368
|
+
|
369
|
+
if (error) RAISE_GERROR(error);
|
370
|
+
|
371
|
+
return rb_float_new(ret);
|
372
|
+
}
|
373
|
+
#endif
|
374
|
+
|
375
|
+
static VALUE
|
376
|
+
keyfile_get_string_list(self, group_name, key)
|
377
|
+
VALUE self, group_name, key;
|
378
|
+
{
|
379
|
+
VALUE ary;
|
380
|
+
gint i;
|
381
|
+
gsize length;
|
382
|
+
GError* error = NULL;
|
383
|
+
gchar** ret = g_key_file_get_string_list(_SELF(self),
|
384
|
+
(const gchar*)RVAL2CSTR(group_name),
|
385
|
+
(const gchar*)RVAL2CSTR(key),
|
386
|
+
&length, &error);
|
387
|
+
|
388
|
+
if (error) RAISE_GERROR(error);
|
389
|
+
|
390
|
+
ary = rb_ary_new();
|
391
|
+
for(i = 0; i < length; i++){
|
392
|
+
rb_ary_push(ary, CSTR2RVAL(ret[i]));
|
393
|
+
}
|
394
|
+
|
395
|
+
g_strfreev(ret);
|
396
|
+
return ary;
|
397
|
+
}
|
398
|
+
|
399
|
+
static VALUE
|
400
|
+
keyfile_get_locale_string_list(argc, argv, self)
|
401
|
+
int argc;
|
402
|
+
VALUE *argv;
|
403
|
+
VALUE self;
|
404
|
+
{
|
405
|
+
VALUE group_name, key, locale;
|
406
|
+
GError* error = NULL;
|
407
|
+
VALUE ary;
|
408
|
+
gint i;
|
409
|
+
gsize length;
|
410
|
+
gchar** ret;
|
411
|
+
|
412
|
+
rb_scan_args(argc, argv, "21", &group_name, &key, &locale);
|
413
|
+
|
414
|
+
ret = g_key_file_get_locale_string_list(_SELF(self),
|
415
|
+
(const gchar*)RVAL2CSTR(group_name),
|
416
|
+
(const gchar*)RVAL2CSTR(key),
|
417
|
+
(const gchar*)(NIL_P(locale) ? NULL : RVAL2CSTR(locale)),
|
418
|
+
&length, &error);
|
419
|
+
|
420
|
+
if (error) RAISE_GERROR(error);
|
421
|
+
|
422
|
+
ary = rb_ary_new();
|
423
|
+
for(i = 0; i < length; i++){
|
424
|
+
rb_ary_push(ary, CSTR2RVAL(ret[i]));
|
425
|
+
}
|
426
|
+
|
427
|
+
g_strfreev(ret);
|
428
|
+
return ary;
|
429
|
+
}
|
430
|
+
|
431
|
+
static VALUE
|
432
|
+
keyfile_get_boolean_list(self, group_name, key)
|
433
|
+
VALUE self, group_name, key;
|
434
|
+
{
|
435
|
+
VALUE ary;
|
436
|
+
gint i;
|
437
|
+
gsize length;
|
438
|
+
GError* error = NULL;
|
439
|
+
gboolean* ret = g_key_file_get_boolean_list(_SELF(self),
|
440
|
+
(const gchar*)RVAL2CSTR(group_name),
|
441
|
+
(const gchar*)RVAL2CSTR(key),
|
442
|
+
&length, &error);
|
443
|
+
|
444
|
+
if (error) RAISE_GERROR(error);
|
445
|
+
|
446
|
+
ary = rb_ary_new();
|
447
|
+
for(i = 0; i < length; i++){
|
448
|
+
rb_ary_push(ary, CBOOL2RVAL(ret[i]));
|
449
|
+
}
|
450
|
+
return ary;
|
451
|
+
}
|
452
|
+
|
453
|
+
static VALUE
|
454
|
+
keyfile_get_integer_list(self, group_name, key)
|
455
|
+
VALUE self, group_name, key;
|
456
|
+
{
|
457
|
+
VALUE ary;
|
458
|
+
gint i;
|
459
|
+
gsize length;
|
460
|
+
GError* error = NULL;
|
461
|
+
gint* ret = g_key_file_get_integer_list(_SELF(self),
|
462
|
+
(const gchar*)RVAL2CSTR(group_name),
|
463
|
+
(const gchar*)RVAL2CSTR(key),
|
464
|
+
&length, &error);
|
465
|
+
|
466
|
+
if (error) RAISE_GERROR(error);
|
467
|
+
|
468
|
+
ary = rb_ary_new();
|
469
|
+
for(i = 0; i < length; i++){
|
470
|
+
rb_ary_push(ary, INT2NUM(ret[i]));
|
471
|
+
}
|
472
|
+
return ary;
|
473
|
+
}
|
474
|
+
|
475
|
+
#if GLIB_CHECK_VERSION(2,12,0)
|
476
|
+
static VALUE
|
477
|
+
keyfile_get_double_list(self, group_name, key)
|
478
|
+
VALUE self, group_name, key;
|
479
|
+
{
|
480
|
+
VALUE ary;
|
481
|
+
gint i;
|
482
|
+
gsize length;
|
483
|
+
GError* error = NULL;
|
484
|
+
gdouble* ret = g_key_file_get_double_list(_SELF(self),
|
485
|
+
(const gchar*)RVAL2CSTR(group_name),
|
486
|
+
(const gchar*)RVAL2CSTR(key),
|
487
|
+
&length, &error);
|
488
|
+
|
489
|
+
if (error) RAISE_GERROR(error);
|
490
|
+
|
491
|
+
ary = rb_ary_new();
|
492
|
+
for(i = 0; i < length; i++){
|
493
|
+
rb_ary_push(ary, rb_float_new(ret[i]));
|
494
|
+
}
|
495
|
+
return ary;
|
496
|
+
}
|
497
|
+
#endif
|
498
|
+
|
499
|
+
static VALUE
|
500
|
+
keyfile_get_comment(self, group_name, key)
|
501
|
+
VALUE self, group_name, key;
|
502
|
+
{
|
503
|
+
GError* error = NULL;
|
504
|
+
gchar* ret = g_key_file_get_comment(_SELF(self),
|
505
|
+
(const gchar*)RVAL2CSTR(group_name),
|
506
|
+
(const gchar*)RVAL2CSTR(key),
|
507
|
+
&error);
|
508
|
+
|
509
|
+
if (error) RAISE_GERROR(error);
|
510
|
+
|
511
|
+
return CSTR2RVAL2(ret);
|
512
|
+
}
|
513
|
+
|
514
|
+
static VALUE
|
515
|
+
keyfile_set_value(self, group_name, key, value)
|
516
|
+
VALUE self, group_name, key, value;
|
517
|
+
{
|
518
|
+
g_key_file_set_value(_SELF(self), (const gchar*)RVAL2CSTR(group_name),
|
519
|
+
(const gchar*)RVAL2CSTR(key),
|
520
|
+
(const gchar*)RVAL2CSTR(value));
|
521
|
+
return self;
|
522
|
+
}
|
523
|
+
|
524
|
+
static VALUE
|
525
|
+
keyfile_set_string(self, group_name, key, string)
|
526
|
+
VALUE self, group_name, key, string;
|
527
|
+
{
|
528
|
+
g_key_file_set_string(_SELF(self), (const gchar*)RVAL2CSTR(group_name),
|
529
|
+
(const gchar*)RVAL2CSTR(key),
|
530
|
+
(const gchar*)RVAL2CSTR(string));
|
531
|
+
return self;
|
532
|
+
}
|
533
|
+
|
534
|
+
static VALUE
|
535
|
+
keyfile_set_locale_string(self, group_name, key, locale, locale_string)
|
536
|
+
VALUE self, group_name, key, locale, locale_string;
|
537
|
+
{
|
538
|
+
g_key_file_set_locale_string(_SELF(self), (const gchar*)RVAL2CSTR(group_name),
|
539
|
+
(const gchar*)RVAL2CSTR(key),
|
540
|
+
(const gchar*)RVAL2CSTR(locale),
|
541
|
+
(const gchar*)RVAL2CSTR(locale_string));
|
542
|
+
return self;
|
543
|
+
}
|
544
|
+
|
545
|
+
static VALUE
|
546
|
+
keyfile_set_boolean(self, group_name, key, value)
|
547
|
+
VALUE self, group_name, key, value;
|
548
|
+
{
|
549
|
+
g_key_file_set_boolean(_SELF(self), (const gchar*)RVAL2CSTR(group_name),
|
550
|
+
(const gchar*)RVAL2CSTR(key),
|
551
|
+
RVAL2CBOOL(value));
|
552
|
+
return self;
|
553
|
+
}
|
554
|
+
|
555
|
+
static VALUE
|
556
|
+
keyfile_set_integer(self, group_name, key, value)
|
557
|
+
VALUE self, group_name, key, value;
|
558
|
+
{
|
559
|
+
g_key_file_set_integer(_SELF(self), (const gchar*)RVAL2CSTR(group_name),
|
560
|
+
(const gchar*)RVAL2CSTR(key),
|
561
|
+
NUM2INT(value));
|
562
|
+
return self;
|
563
|
+
}
|
564
|
+
|
565
|
+
#if GLIB_CHECK_VERSION(2,12,0)
|
566
|
+
static VALUE
|
567
|
+
keyfile_set_double(self, group_name, key, value)
|
568
|
+
VALUE self, group_name, key, value;
|
569
|
+
{
|
570
|
+
g_key_file_set_double(_SELF(self), (const gchar*)RVAL2CSTR(group_name),
|
571
|
+
(const gchar*)RVAL2CSTR(key),
|
572
|
+
NUM2DBL(value));
|
573
|
+
return self;
|
574
|
+
}
|
575
|
+
#endif
|
576
|
+
|
577
|
+
static VALUE
|
578
|
+
keyfile_set_string_list(self, group_name, key, list)
|
579
|
+
VALUE self, group_name, key, list;
|
580
|
+
{
|
581
|
+
gint len = RARRAY_LEN(list);
|
582
|
+
gchar** glist = ALLOCA_N(gchar*, len);
|
583
|
+
gint i;
|
584
|
+
|
585
|
+
for (i = 0; i < len; i++){
|
586
|
+
glist[i] = RVAL2CSTR(RARRAY_PTR(list)[i]);
|
587
|
+
}
|
588
|
+
|
589
|
+
g_key_file_set_string_list(_SELF(self),
|
590
|
+
(const gchar*)RVAL2CSTR(group_name),
|
591
|
+
(const gchar*)RVAL2CSTR(key),
|
592
|
+
(const gchar**)glist, len);
|
593
|
+
return self;
|
594
|
+
}
|
595
|
+
|
596
|
+
static VALUE
|
597
|
+
keyfile_set_locale_string_list(self, group_name, key, locale, list)
|
598
|
+
VALUE self, group_name, key, locale, list;
|
599
|
+
{
|
600
|
+
gint len = RARRAY_LEN(list);
|
601
|
+
gchar** glist = ALLOCA_N(gchar*, len);
|
602
|
+
gint i;
|
603
|
+
|
604
|
+
for (i = 0; i < len; i++){
|
605
|
+
glist[i] = RVAL2CSTR(RARRAY_PTR(list)[i]);
|
606
|
+
}
|
607
|
+
|
608
|
+
g_key_file_set_locale_string_list(_SELF(self), (const gchar*)RVAL2CSTR(group_name),
|
609
|
+
(const gchar*)RVAL2CSTR(key),
|
610
|
+
(const gchar*)RVAL2CSTR(locale),
|
611
|
+
(const gchar**)glist, len);
|
612
|
+
|
613
|
+
return self;
|
614
|
+
}
|
615
|
+
|
616
|
+
static VALUE
|
617
|
+
keyfile_set_boolean_list(self, group_name, key, list)
|
618
|
+
VALUE self, group_name, key, list;
|
619
|
+
{
|
620
|
+
gint len = RARRAY_LEN(list);
|
621
|
+
gboolean* glist = ALLOCA_N(gboolean, len);
|
622
|
+
gint i;
|
623
|
+
|
624
|
+
for (i = 0; i < len; i++){
|
625
|
+
glist[i] = RVAL2CBOOL(RARRAY_PTR(list)[i]);
|
626
|
+
}
|
627
|
+
|
628
|
+
g_key_file_set_boolean_list(_SELF(self),
|
629
|
+
(const gchar*)RVAL2CSTR(group_name),
|
630
|
+
(const gchar*)RVAL2CSTR(key),
|
631
|
+
glist, len);
|
632
|
+
return self;
|
633
|
+
}
|
634
|
+
|
635
|
+
static VALUE
|
636
|
+
keyfile_set_integer_list(self, group_name, key, list)
|
637
|
+
VALUE self, group_name, key, list;
|
638
|
+
{
|
639
|
+
gint len = RARRAY_LEN(list);
|
640
|
+
gint* glist = ALLOCA_N(gint, len);
|
641
|
+
gint i;
|
642
|
+
|
643
|
+
for (i = 0; i < len; i++){
|
644
|
+
glist[i] = RVAL2CBOOL(RARRAY_PTR(list)[i]);
|
645
|
+
}
|
646
|
+
|
647
|
+
g_key_file_set_integer_list(_SELF(self),
|
648
|
+
(const gchar*)RVAL2CSTR(group_name),
|
649
|
+
(const gchar*)RVAL2CSTR(key),
|
650
|
+
glist, len);
|
651
|
+
return self;
|
652
|
+
}
|
653
|
+
|
654
|
+
#if GLIB_CHECK_VERSION(2,12,0)
|
655
|
+
static VALUE
|
656
|
+
keyfile_set_double_list(self, group_name, key, list)
|
657
|
+
VALUE self, group_name, key, list;
|
658
|
+
{
|
659
|
+
gint len = RARRAY_LEN(list);
|
660
|
+
gdouble* glist = ALLOCA_N(gdouble, len);
|
661
|
+
gint i;
|
662
|
+
|
663
|
+
for (i = 0; i < len; i++){
|
664
|
+
glist[i] = RVAL2CBOOL(RARRAY_PTR(list)[i]);
|
665
|
+
}
|
666
|
+
|
667
|
+
g_key_file_set_double_list(_SELF(self),
|
668
|
+
(const gchar*)RVAL2CSTR(group_name),
|
669
|
+
(const gchar*)RVAL2CSTR(key),
|
670
|
+
glist, len);
|
671
|
+
return self;
|
672
|
+
}
|
673
|
+
#endif
|
674
|
+
|
675
|
+
static VALUE
|
676
|
+
keyfile_set_comment(self, group_name, key, comment)
|
677
|
+
VALUE self, group_name, key, comment;
|
678
|
+
{
|
679
|
+
GError* error = NULL;
|
680
|
+
g_key_file_set_comment(_SELF(self), (const gchar*)RVAL2CSTR(group_name),
|
681
|
+
(const gchar*)(NIL_P(key) ? NULL : RVAL2CSTR(key)),
|
682
|
+
(const gchar*)RVAL2CSTR(comment), &error);
|
683
|
+
|
684
|
+
if (error) RAISE_GERROR(error);
|
685
|
+
|
686
|
+
return self;
|
687
|
+
}
|
688
|
+
|
689
|
+
static VALUE
|
690
|
+
keyfile_remove_group(self, group_name)
|
691
|
+
VALUE self, group_name;
|
692
|
+
{
|
693
|
+
GError* error = NULL;
|
694
|
+
g_key_file_remove_group(_SELF(self), (const gchar*)RVAL2CSTR(group_name), &error);
|
695
|
+
|
696
|
+
if (error) RAISE_GERROR(error);
|
697
|
+
|
698
|
+
return self;
|
699
|
+
}
|
700
|
+
|
701
|
+
static VALUE
|
702
|
+
keyfile_remove_key(self, group_name, key)
|
703
|
+
VALUE self, group_name, key;
|
704
|
+
{
|
705
|
+
GError* error = NULL;
|
706
|
+
g_key_file_remove_key(_SELF(self),
|
707
|
+
(const gchar*)RVAL2CSTR(group_name),
|
708
|
+
(const gchar*)RVAL2CSTR(key),
|
709
|
+
&error);
|
710
|
+
|
711
|
+
if (error) RAISE_GERROR(error);
|
712
|
+
|
713
|
+
return self;
|
714
|
+
}
|
715
|
+
|
716
|
+
|
717
|
+
static VALUE
|
718
|
+
keyfile_remove_comment(self, group_name, key)
|
719
|
+
VALUE self, group_name, key;
|
720
|
+
{
|
721
|
+
GError* error = NULL;
|
722
|
+
g_key_file_remove_comment(_SELF(self),
|
723
|
+
(const gchar*)RVAL2CSTR(group_name),
|
724
|
+
(const gchar*)RVAL2CSTR(key),
|
725
|
+
&error);
|
726
|
+
|
727
|
+
if (error) RAISE_GERROR(error);
|
728
|
+
|
729
|
+
return self;
|
730
|
+
}
|
731
|
+
#endif
|
732
|
+
|
733
|
+
void
|
734
|
+
Init_glib_keyfile()
|
735
|
+
{
|
736
|
+
#if GLIB_CHECK_VERSION(2,6,0)
|
737
|
+
VALUE kf = G_DEF_CLASS(G_TYPE_KEY_FILE, "KeyFile", mGLib);
|
738
|
+
G_DEF_ERROR(G_KEY_FILE_ERROR, "KeyFileError", mGLib,
|
739
|
+
rb_eRuntimeError, G_TYPE_KEY_FILE_ERROR);
|
740
|
+
|
741
|
+
rb_define_method(kf, "initialize", keyfile_initialize, 0);
|
742
|
+
rb_define_method(kf, "set_list_separator", keyfile_set_list_separator, 1);
|
743
|
+
rb_define_method(kf, "load_from_file", keyfile_load_from_file, -1);
|
744
|
+
rb_define_method(kf, "load_from_data", keyfile_load_from_data, -1);
|
745
|
+
rb_define_method(kf, "load_from_data_dirs", keyfile_load_from_data_dirs, -1);
|
746
|
+
#if GLIB_CHECK_VERSION(2, 14, 0)
|
747
|
+
rb_define_method(kf, "load_from_dirs", keyfile_load_from_dirs, -1);
|
748
|
+
#endif
|
749
|
+
rb_define_method(kf, "to_data", keyfile_to_data, 0);
|
750
|
+
rb_define_method(kf, "start_group", keyfile_get_start_group, 0);
|
751
|
+
rb_define_method(kf, "groups", keyfile_get_groups, 0);
|
752
|
+
rb_define_method(kf, "get_keys", keyfile_get_keys, 1);
|
753
|
+
rb_define_method(kf, "has_group?", keyfile_has_group, 1);
|
754
|
+
rb_define_method(kf, "has_key?", keyfile_has_key, 2);
|
755
|
+
rb_define_method(kf, "get_value", keyfile_get_value, 2);
|
756
|
+
rb_define_method(kf, "get_string", keyfile_get_string, 2);
|
757
|
+
rb_define_method(kf, "get_locale_string", keyfile_get_locale_string, -1);
|
758
|
+
rb_define_method(kf, "get_boolean", keyfile_get_boolean, 2);
|
759
|
+
rb_define_method(kf, "get_integer", keyfile_get_integer, 2);
|
760
|
+
#if GLIB_CHECK_VERSION(2,12,0)
|
761
|
+
rb_define_method(kf, "get_double", keyfile_get_double, 2);
|
762
|
+
#endif
|
763
|
+
rb_define_method(kf, "get_string_list", keyfile_get_string_list, 2);
|
764
|
+
rb_define_method(kf, "get_locale_string_list", keyfile_get_locale_string_list, -1);
|
765
|
+
rb_define_method(kf, "get_boolean_list", keyfile_get_boolean_list, 2);
|
766
|
+
rb_define_method(kf, "get_integer_list", keyfile_get_integer_list, 2);
|
767
|
+
#if GLIB_CHECK_VERSION(2,12,0)
|
768
|
+
rb_define_method(kf, "get_double_list", keyfile_get_double_list, 2);
|
769
|
+
#endif
|
770
|
+
rb_define_method(kf, "get_comment", keyfile_get_comment, 2);
|
771
|
+
rb_define_method(kf, "set_value", keyfile_set_value, 3);
|
772
|
+
rb_define_method(kf, "set_string", keyfile_set_string, 3);
|
773
|
+
rb_define_method(kf, "set_locale_string", keyfile_set_locale_string, 4);
|
774
|
+
rb_define_method(kf, "set_boolean", keyfile_set_boolean, 3);
|
775
|
+
rb_define_method(kf, "set_integer", keyfile_set_integer, 3);
|
776
|
+
#if GLIB_CHECK_VERSION(2,12,0)
|
777
|
+
rb_define_method(kf, "set_double", keyfile_set_double, 3);
|
778
|
+
#endif
|
779
|
+
rb_define_method(kf, "set_string_list", keyfile_set_string_list, 3);
|
780
|
+
rb_define_method(kf, "set_locale_string_list", keyfile_set_locale_string_list, 4);
|
781
|
+
rb_define_method(kf, "set_boolean_list", keyfile_set_boolean_list, 3);
|
782
|
+
rb_define_method(kf, "set_integer_list", keyfile_set_integer_list, 3);
|
783
|
+
#if GLIB_CHECK_VERSION(2,12,0)
|
784
|
+
rb_define_method(kf, "set_double_list", keyfile_set_double_list, 3);
|
785
|
+
#endif
|
786
|
+
rb_define_method(kf, "set_comment", keyfile_set_comment, 3);
|
787
|
+
rb_define_method(kf, "remove_group", keyfile_remove_group, 1);
|
788
|
+
rb_define_method(kf, "remove_key", keyfile_remove_key, 2);
|
789
|
+
rb_define_method(kf, "remove_comment", keyfile_remove_comment, 2);
|
790
|
+
|
791
|
+
/* GKeyFileFlags */
|
792
|
+
G_DEF_CLASS(G_TYPE_KEY_FILE_FLAGS, "Flags", kf);
|
793
|
+
G_DEF_CONSTANTS(kf, G_TYPE_KEY_FILE_FLAGS, "G_KEY_FILE_");
|
794
|
+
|
795
|
+
#if GLIB_CHECK_VERSION(2, 14, 0)
|
796
|
+
/* Defines for handling freedesktop.org Desktop files */
|
797
|
+
rb_define_const(kf, "DESKTOP_GROUP", CSTR2RVAL(G_KEY_FILE_DESKTOP_GROUP));
|
798
|
+
|
799
|
+
rb_define_const(kf, "DESKTOP_KEY_TYPE",
|
800
|
+
CSTR2RVAL(G_KEY_FILE_DESKTOP_KEY_TYPE));
|
801
|
+
rb_define_const(kf, "DESKTOP_KEY_VERSION",
|
802
|
+
CSTR2RVAL(G_KEY_FILE_DESKTOP_KEY_VERSION));
|
803
|
+
rb_define_const(kf, "DESKTOP_KEY_NAME",
|
804
|
+
CSTR2RVAL(G_KEY_FILE_DESKTOP_KEY_NAME));
|
805
|
+
rb_define_const(kf, "DESKTOP_KEY_GENERIC_NAME",
|
806
|
+
CSTR2RVAL(G_KEY_FILE_DESKTOP_KEY_GENERIC_NAME));
|
807
|
+
rb_define_const(kf, "DESKTOP_KEY_NO_DISPLAY",
|
808
|
+
CSTR2RVAL(G_KEY_FILE_DESKTOP_KEY_NO_DISPLAY));
|
809
|
+
rb_define_const(kf, "DESKTOP_KEY_COMMENT",
|
810
|
+
CSTR2RVAL(G_KEY_FILE_DESKTOP_KEY_COMMENT));
|
811
|
+
rb_define_const(kf, "DESKTOP_KEY_ICON",
|
812
|
+
CSTR2RVAL(G_KEY_FILE_DESKTOP_KEY_ICON));
|
813
|
+
rb_define_const(kf, "DESKTOP_KEY_HIDDEN",
|
814
|
+
CSTR2RVAL(G_KEY_FILE_DESKTOP_KEY_HIDDEN));
|
815
|
+
rb_define_const(kf, "DESKTOP_KEY_ONLY_SHOW_IN",
|
816
|
+
CSTR2RVAL(G_KEY_FILE_DESKTOP_KEY_ONLY_SHOW_IN));
|
817
|
+
rb_define_const(kf, "DESKTOP_KEY_NOT_SHOW_IN",
|
818
|
+
CSTR2RVAL(G_KEY_FILE_DESKTOP_KEY_NOT_SHOW_IN));
|
819
|
+
rb_define_const(kf, "DESKTOP_KEY_TRY_EXEC",
|
820
|
+
CSTR2RVAL(G_KEY_FILE_DESKTOP_KEY_TRY_EXEC));
|
821
|
+
rb_define_const(kf, "DESKTOP_KEY_EXEC",
|
822
|
+
CSTR2RVAL(G_KEY_FILE_DESKTOP_KEY_EXEC));
|
823
|
+
rb_define_const(kf, "DESKTOP_KEY_PATH",
|
824
|
+
CSTR2RVAL(G_KEY_FILE_DESKTOP_KEY_PATH));
|
825
|
+
rb_define_const(kf, "DESKTOP_KEY_TERMINAL",
|
826
|
+
CSTR2RVAL(G_KEY_FILE_DESKTOP_KEY_TERMINAL));
|
827
|
+
rb_define_const(kf, "DESKTOP_KEY_MIME_TYPE",
|
828
|
+
CSTR2RVAL(G_KEY_FILE_DESKTOP_KEY_MIME_TYPE));
|
829
|
+
rb_define_const(kf, "DESKTOP_KEY_CATEGORIES",
|
830
|
+
CSTR2RVAL(G_KEY_FILE_DESKTOP_KEY_CATEGORIES));
|
831
|
+
rb_define_const(kf, "DESKTOP_KEY_STARTUP_NOTIFY",
|
832
|
+
CSTR2RVAL(G_KEY_FILE_DESKTOP_KEY_STARTUP_NOTIFY));
|
833
|
+
rb_define_const(kf, "DESKTOP_KEY_STARTUP_WM_CLASS",
|
834
|
+
CSTR2RVAL(G_KEY_FILE_DESKTOP_KEY_STARTUP_WM_CLASS));
|
835
|
+
rb_define_const(kf, "DESKTOP_KEY_URL",
|
836
|
+
CSTR2RVAL(G_KEY_FILE_DESKTOP_KEY_URL));
|
837
|
+
|
838
|
+
rb_define_const(kf, "DESKTOP_TYPE_APPLICATION",
|
839
|
+
CSTR2RVAL(G_KEY_FILE_DESKTOP_TYPE_APPLICATION));
|
840
|
+
rb_define_const(kf, "DESKTOP_TYPE_LINK",
|
841
|
+
CSTR2RVAL(G_KEY_FILE_DESKTOP_TYPE_LINK));
|
842
|
+
rb_define_const(kf, "DESKTOP_TYPE_DIRECTORY",
|
843
|
+
CSTR2RVAL(G_KEY_FILE_DESKTOP_TYPE_DIRECTORY));
|
844
|
+
#endif
|
845
|
+
#endif
|
846
|
+
}
|