-# chiseperl.pl --- some useful funcions for using libchise with SWIG\r
-#\r
-# Copyright (C) 2005 Koichi Kamichi.\r
-#\r
-# global : $chise_ds, @chise_feature, @chise_ft, $chise_newid\r
-# function : void init_chise();\r
-# void close_chise();\r
-# void update_chise();\r
-# void search_newid();\r
-# $var get_feature_value($feature, $char_id);\r
-# $var set_feature_value($feature, $char_id, $value);\r
-# $var create_new_char($feature, $value);\r
-\r
-use chise_tools;\r
-use chise;\r
-\r
-sub init_chise{\r
- $chise_ds = chise::CHISE_DS_open(0, $chise::chise_system_db_dir, 0, 0755);\r
- chise_tools::listup_feature($chise_ds);\r
- @chise_feature = split(/\n/, chise_tools::get_char($chise_tools::feature));\r
- @chise_ft = ();\r
- foreach(@chise_feature){\r
- push(@chise_ft, chise::chise_ds_get_feature($chise_ds, chise_tools::get_uchar($_)));\r
- }\r
- $chise_newid = 0x0F0000;\r
-}\r
-\r
-sub get_feature_value{ # feature, char_id -> 0 or value\r
- if(scalar(@_) != 2){\r
- return 0;\r
- }\r
- my $ft = chise::chise_ds_get_feature($chise_ds, chise_tools::get_uchar($_[0]));\r
- chise_tools::clear_buffer;\r
- chise::chise_char_gets_feature_value($_[1], $ft,\r
- $chise_tools::buffer, $chise_tools::buffer_size);\r
- return chise_tools::get_char($chise_tools::buffer);\r
-}\r
-\r
-sub set_feature_value{ # feature, char_id, value -> result\r
- if(scalar(@_) != 3){\r
- return 0;\r
- }\r
- my $ft = chise::chise_ds_get_feature($chise_ds, chise_tools::get_uchar($_[0]));\r
- chise::chise_char_set_feature_value($_[1], $ft, chise_tools::get_uchar($_[2]));\r
- return 1;\r
-}\r
-\r
-sub close_chise{\r
- chise::CHISE_DS_close($chise_ds);\r
-}\r
-\r
-sub create_new_char{ # feature, value -> assinged char_id\r
- &search_newid;\r
- &set_feature_value($_[0], $chise_newid, $_[1]);\r
- $chise_newid++;\r
- return $chise_newid - 1;\r
-}\r
-\r
-sub search_newid{ # search new char_id and update $chise_newid\r
- while(1){\r
- my $found = 0;\r
- foreach(@chise_ft){\r
- chise_tools::clear_buffer;\r
- chise::chise_char_gets_feature_value($chise_newid, $_, $chise_tools::buffer, $chise_tools::buffer_size);\r
- if(length(chise_tools::get_char($chise_tools::buffer)) != 0){\r
- $found = 1;\r
- last;\r
- }\r
- }\r
- if($found == 0){\r
- last;\r
- }\r
- $chise_newid++;\r
- }\r
-}\r
-\r
-sub update_chise{ # save added data to database\r
- foreach(@chise_ft){\r
- chise::chise_feature_sync($_);\r
- }\r
-}\r
-\r
-1;\r
+# chiseperl.pl --- some useful funcions for using libchise with SWIG
+#
+# Copyright (C) 2005,2006 KAMICHI Koichi.
+#
+# global : $chise_ds, @chise_feature, @chise_ft, $chise_newid
+# function : void init_chise();
+# void close_chise();
+# void update_chise();
+# void search_newid();
+# $var get_feature_value($feature, $char_id);
+# $var set_feature_value($feature, $char_id, $value);
+# $var create_new_char($feature, $value);
+# $char_id decode_char($feature_char, $int);
+
+use chise;
+
+sub init_chise{
+ $chise_ds = chise::CHISE_DS_open($chise::CONCORD_Backend_Berkeley_DB,
+ $chise::chise_system_db_dir, 0, 0755);
+ chise::listup_feature($chise_ds);
+ @chise_feature = split(/\n/, chise::get_char($chise::feature));
+ @chise_ft = ();
+ foreach(@chise_feature){
+ push(@chise_ft, chise::chise_ds_get_feature($chise_ds, chise::get_uchar($_)));
+ }
+ $chise_newid = 0x0F0000;
+}
+
+sub get_feature_value{ # feature, char_id -> 0 or value
+ if(scalar(@_) != 2){
+ return 0;
+ }
+ my $ft = chise::chise_ds_get_feature($chise_ds, chise::get_uchar($_[0]));
+ chise::clear_buffer;
+ chise::chise_char_gets_feature_value($_[1], $ft,
+ $chise::buffer, $chise::buffer_size);
+ return chise::get_char($chise::buffer);
+}
+
+sub set_feature_value{ # feature, char_id, value -> result
+ if(scalar(@_) != 3){
+ return 0;
+ }
+ my $ft = chise::chise_ds_get_feature($chise_ds, chise::get_uchar($_[0]));
+ chise::chise_char_set_feature_value($_[1], $ft, chise::get_uchar($_[2]));
+ return 1;
+}
+
+sub close_chise{
+ chise::CHISE_DS_close($chise_ds);
+}
+
+sub create_new_char{ # feature, value -> assinged char_id
+ &search_newid;
+ &set_feature_value($_[0], $chise_newid, $_[1]);
+ $chise_newid++;
+ return $chise_newid - 1;
+}
+
+sub search_newid{ # search new char_id and update $chise_newid
+ while(1){
+ my $found = 0;
+ foreach(@chise_ft){
+ chise::clear_buffer;
+ chise::chise_char_gets_feature_value($chise_newid, $_, $chise::buffer, $chise::buffer_size);
+ if(length(chise::get_char($chise::buffer)) != 0){
+ $found = 1;
+ last;
+ }
+ }
+ if($found == 0){
+ last;
+ }
+ $chise_newid++;
+ }
+}
+
+sub update_chise{ # save added data to database
+ foreach(@chise_ft){
+ chise::chise_feature_sync($_);
+ }
+}
+
+sub decode_char{ # feature, int -> charID, 0
+ if(scalar(@_) != 2){
+ return 0;
+ }
+ return chise::chise_ds_decode_char($chise_ds, chise::get_uchar($_[0]), $_[1]);
+}
+
+1;