3 // Copyright (C) 2005,2006 KAMICHI Koichi.
5 // reference : http://www.swig.org/Doc1.3/Perl5.html
6 // sample.c included to libchise
23 unsigned char *get_uchar(char *argv){
24 return (unsigned char *)argv;
27 char *get_char(unsigned char *argv){
31 unsigned char *feature;
32 int feature_size = 102400;
33 unsigned char *buffer;
34 int buffer_size = 1024;
38 for(i = 0; i < buffer_size; i++){
43 void allocate_buffer(){
44 feature = (unsigned char *)malloc(feature_size * sizeof(unsigned char));
45 buffer = (unsigned char *)malloc(buffer_size * sizeof(unsigned char));
53 name_map_func (CHISE_DS *ds, unsigned char *name)
55 strcat((char *)feature, (char *)name);
56 strcat((char *)feature, (char *)"\n");
59 void listup_feature(CHISE_DS *ds){
61 for(i = 0; i < feature_size; i++){
64 chise_ds_foreach_char_feature_name (ds, &name_map_func);
72 chise::allocate_buffer();
73 my $chise_ds = chise::CHISE_DS_open($chise::CHISE_DS_Berkeley_DB,
74 $chise::chise_system_db_dir,
77 chise::listup_feature($chise_ds);
78 my @chise_feature = split(/\n/, chise::get_char($chise::feature));
81 chise_ds => $chise_ds,
82 chise_feature => \@chise_feature,
83 chise_newid => $chise_newid}, $class;
88 if(define($self->{chise_ds})){ # Strange to say, chise_ds has already unavailable
89 chise::CHISE_DS_close($self->{chise_ds});
92 sub get_feature_list{ # original
94 my $hash = $self->{chise_feature};
99 return chise::chise_ds_get_ccs($self->{chise_ds},
100 chise::get_uchar($_[0]));
104 return chise::chise_ds_get_feature($self->{chise_ds},
105 chise::get_uchar($_[0]));
109 return chise::chise_ds_get_property($self->{chise_ds},
110 chise::get_uchar($_[0]));
114 return chise::chise_ds_decode_char($self->{chise_ds},
115 chise::get_uchar($_[0]),
120 return chise::chise_ccs_decode($_[0],
123 sub feature_gets_property_value{ # use feature/property strings directly
125 chise::clear_buffer();
126 chise::chise_feature_gets_property_value($self->ds_get_feature($_[0]),
127 $self->ds_get_property($_[1]),
129 $chise::buffer_size);
130 return chise::get_char($chise::buffer);
132 sub feature_gets_property_value_by_handle{
134 chise::clear_buffer();
135 chise::chise_feature_gets_property_value($_[0],
138 $chise::buffer_size);
139 return chise::get_char($chise::buffer);
141 sub char_gets_feature_value{ # use feature string directly
143 chise::clear_buffer();
144 chise::chise_char_gets_feature_value($_[0],
145 $self->ds_get_feature($_[1]),
147 $chise::buffer_size);
148 return chise::get_char($chise::buffer);
150 sub char_gets_feature_value_by_handle{
152 chise::clear_buffer();
153 chise::chise_char_gets_feature_value($_[0],
156 $chise::buffer_size);
157 return chise::get_char($chise::buffer);
161 return chise::get_char($chise::chise_system_db_dir);
165 return chise::get_char($chise::chise_db_dir);
167 sub db_format_version{
169 return chise::get_char($chise::chise_db_format_version);
173 return chise::get_char(chise::chise_ds_location($self->{chise_ds}));
175 sub get_newid{ # original : search new char_id and update $chise_newid
177 if($self->{chise_newid} < 0){
178 $self->{chise_newid} = 0x0F0000;
179 my @feature = $self->get_feature_list();
183 if($self->char_gets_feature_value($self->{chise_newid}, $_) ne ""){
191 $self->{chise_newid}++;
194 return $self->{chise_newid};