1 #include "tomoe-rb.h"
2 
3 #define _SELF(obj) RVAL2TDIC(obj)
4 
5 static VALUE mTomoe;
6 
7 static VALUE
td_s_load(VALUE self,VALUE name)8 td_s_load(VALUE self, VALUE name)
9 {
10     VALUE loaded = Qfalse;
11     VALUE normalized_name;
12     TomoeModule *module;
13 
14     normalized_name = rb_funcall(name, rb_intern("downcase"), 0);
15     module = tomoe_dict_load_module(RVAL2CSTR(normalized_name));
16     if (module)
17     {
18         gchar *type_name, *class_name;
19         GType type;
20 
21         class_name = g_strconcat("Dict", RVAL2CSTR(name), NULL);
22         type_name = g_strconcat("Tomoe", class_name, NULL);
23         type = g_type_from_name(type_name);
24         if (type) {
25             if (!rb_const_defined(mTomoe, rb_intern(class_name)))
26                 G_DEF_CLASS3(type_name, class_name, mTomoe);
27 
28             if (rbgobj_lookup_class_by_gtype(type, Qnil))
29                 loaded = Qtrue;
30         }
31         g_free(class_name);
32         g_free(type_name);
33     }
34 
35     return loaded;
36 }
37 
38 static VALUE
td_s_default_module_dir(VALUE self)39 td_s_default_module_dir(VALUE self)
40 {
41     return CSTR2RVAL(tomoe_dict_get_default_module_dir());
42 }
43 
44 static VALUE
td_s_set_default_module_dir(VALUE self,VALUE dir)45 td_s_set_default_module_dir(VALUE self, VALUE dir)
46 {
47     tomoe_dict_set_default_module_dir(RVAL2CSTR2(dir));
48     return Qnil;
49 }
50 
51 static VALUE
td_get_char(VALUE self,VALUE utf8)52 td_get_char(VALUE self, VALUE utf8)
53 {
54     return GOBJ2RVALU(tomoe_dict_get_char(_SELF(self), RVAL2CSTR(utf8)));
55 }
56 
57 static VALUE
td_register_char(VALUE self,VALUE chr)58 td_register_char(VALUE self, VALUE chr)
59 {
60     return CBOOL2RVAL(tomoe_dict_register_char(_SELF(self), RVAL2TCHR(chr)));
61 }
62 
63 static VALUE
td_unregister_char(VALUE self,VALUE utf8)64 td_unregister_char(VALUE self, VALUE utf8)
65 {
66     return CBOOL2RVAL(tomoe_dict_unregister_char(_SELF(self), RVAL2CSTR(utf8)));
67 }
68 
69 static VALUE
td_search(VALUE self,VALUE query)70 td_search(VALUE self, VALUE query)
71 {
72     return GLIST2ARYF(tomoe_dict_search(_SELF(self), RVAL2TQRY(query)));
73 }
74 
75 static VALUE
td_get_available_private_utf8(VALUE self)76 td_get_available_private_utf8(VALUE self)
77 {
78     return CSTR2RVAL2(tomoe_dict_get_available_private_utf8(_SELF(self)));
79 }
80 
81 static VALUE
td_flush(VALUE self)82 td_flush(VALUE self)
83 {
84     return CBOOL2RVAL(tomoe_dict_flush(_SELF(self)));
85 }
86 
87 static VALUE
td_copy(VALUE self,VALUE dest_dict)88 td_copy(VALUE self, VALUE dest_dict)
89 {
90     return CBOOL2RVAL(tomoe_dict_copy(_SELF(self), RVAL2TDIC(dest_dict)));
91 }
92 
93 void
_tomoe_rb_init_tomoe_dict(VALUE _mTomoe)94 _tomoe_rb_init_tomoe_dict(VALUE _mTomoe)
95 {
96     VALUE cTomoeDict;
97 
98     mTomoe = _mTomoe;
99     cTomoeDict = G_DEF_CLASS(TOMOE_TYPE_DICT, "Dict", mTomoe);
100 
101     rb_define_singleton_method(cTomoeDict, "load", td_s_load, 1);
102     rb_define_singleton_method(cTomoeDict, "default_module_dir",
103                                td_s_default_module_dir, 0);
104     rb_define_singleton_method(cTomoeDict, "set_default_module_dir",
105                                td_s_set_default_module_dir, 1);
106     rb_define_singleton_method(cTomoeDict, "default_module_dir=",
107                                td_s_set_default_module_dir, 1);
108 
109     rb_define_method(cTomoeDict, "[]", td_get_char, 1);
110     rb_define_method(cTomoeDict, "register", td_register_char, 1);
111     rb_define_method(cTomoeDict, "unregister", td_unregister_char, 1);
112 
113     rb_define_method(cTomoeDict, "search", td_search, 1);
114 
115     rb_define_method(cTomoeDict, "available_private_utf8",
116                      td_get_available_private_utf8, 0);
117     rb_define_method(cTomoeDict, "flush", td_flush, 0);
118     rb_define_method(cTomoeDict, "copy", td_copy, 1);
119 }
120