Added decode_char method.
[chise/kage.git] / tools / chiseperl.pl
1 # chiseperl.pl --- some useful funcions for using libchise with SWIG\r
2 #\r
3 # Copyright (C) 2005 Koichi Kamichi.\r
4 #\r
5 # global : $chise_ds, @chise_feature, @chise_ft, $chise_newid\r
6 # function : void init_chise();\r
7 #            void close_chise();\r
8 #            void update_chise();\r
9 #            void search_newid();\r
10 #            $var get_feature_value($feature, $char_id);\r
11 #            $var set_feature_value($feature, $char_id, $value);\r
12 #            $var create_new_char($feature, $value);\r
13 #            $char_id decode_char($feature_char, $int);\r
14 \r
15 use chise_tools;\r
16 use chise;\r
17 \r
18 sub init_chise{\r
19   $chise_ds = chise::CHISE_DS_open(0, $chise::chise_system_db_dir, 0, 0755);\r
20   chise_tools::listup_feature($chise_ds);\r
21   @chise_feature = split(/\n/, chise_tools::get_char($chise_tools::feature));\r
22   @chise_ft = ();\r
23   foreach(@chise_feature){\r
24     push(@chise_ft, chise::chise_ds_get_feature($chise_ds, chise_tools::get_uchar($_)));\r
25   }\r
26   $chise_newid = 0x0F0000;\r
27 }\r
28 \r
29 sub get_feature_value{ # feature, char_id -> 0 or value\r
30   if(scalar(@_) != 2){\r
31     return 0;\r
32   }\r
33   my $ft = chise::chise_ds_get_feature($chise_ds, chise_tools::get_uchar($_[0]));\r
34   chise_tools::clear_buffer;\r
35   chise::chise_char_gets_feature_value($_[1], $ft,\r
36                                        $chise_tools::buffer, $chise_tools::buffer_size);\r
37   return chise_tools::get_char($chise_tools::buffer);\r
38 }\r
39 \r
40 sub set_feature_value{ # feature, char_id, value -> result\r
41   if(scalar(@_) != 3){\r
42     return 0;\r
43   }\r
44   my $ft = chise::chise_ds_get_feature($chise_ds, chise_tools::get_uchar($_[0]));\r
45   chise::chise_char_set_feature_value($_[1], $ft, chise_tools::get_uchar($_[2]));\r
46   return 1;\r
47 }\r
48 \r
49 sub close_chise{\r
50   chise::CHISE_DS_close($chise_ds);\r
51 }\r
52 \r
53 sub create_new_char{ # feature, value -> assinged char_id\r
54   &search_newid;\r
55   &set_feature_value($_[0], $chise_newid, $_[1]);\r
56   $chise_newid++;\r
57   return $chise_newid - 1;\r
58 }\r
59 \r
60 sub search_newid{ # search new char_id and update $chise_newid\r
61   while(1){\r
62     my $found = 0;\r
63     foreach(@chise_ft){\r
64       chise_tools::clear_buffer;\r
65       chise::chise_char_gets_feature_value($chise_newid, $_, $chise_tools::buffer, $chise_tools::buffer_size);\r
66       if(length(chise_tools::get_char($chise_tools::buffer)) != 0){\r
67         $found = 1;\r
68         last;\r
69       }\r
70     }\r
71     if($found == 0){\r
72       last;\r
73     }\r
74     $chise_newid++;\r
75   }\r
76 }\r
77 \r
78 sub update_chise{ # save added data to database\r
79   foreach(@chise_ft){\r
80     chise::chise_feature_sync($_);\r
81   }\r
82 }\r
83 \r
84 sub decode_char{ # feature, int -> charID, 0\r
85   if(scalar(@_) != 2){\r
86     return 0;\r
87   }\r
88   return chise::chise_ds_decode_char($chise_ds, chise_tools::get_uchar($_[0]), $_[1]);\r
89 }\r
90 \r
91 1;\r