2 # CHISE.pm by Shigeki Moro
3 # $Id: CHISE.pm,v 1.1 2003-02-02 12:25:10 moro Exp $
10 my $DB_HOME = '/usr/local/lib/xemacs-21.4.10/i686-pc-linux/char-db';
13 my %alias_reverse = ();
14 for (glob "$DB_HOME/system-char-id/*") {
22 $alias_reverse{$i} = $_;
26 'radical','ideographic-radical',
27 'strokes','total-strokes',
30 #--------------------------------------------------------#
35 my $class = ref($invocant) || $invocant;
38 my $key = ($self->chars)[0]; # 要エラーチェック
40 for my $dbname (glob "$DB_HOME/system-char-id/*") {
41 $value = &getvalue($dbname, $key);
43 $dbname =~ s/^.*\/([^\/]+)$/$1/;
44 $result->{$alias_reverse{$dbname}} = $value;
47 return bless $result, $class;
53 my $class = ref($invocant) || $invocant;
56 for my $i (keys %$self) {
57 $result->{$alias_reverse{$alias{$i}}} = $$self{$i};
59 return bless $result, $class;
65 for my $i (keys %$self) {
66 print "$i => $$self{$i}\n";
73 my $self = $model->define_char(%$model, @_);
80 delete $$model{$_} foreach (@_);
81 my $self = $model->define_char(%$model);
86 # 例: $s->morohashi_daikanwa
87 for my $attrname (keys %alias) {
88 my $slot = __PACKAGE__ . "::$attrname";
92 my $dbname = exists $alias{$attrname}
93 ? $alias_reverse{$alias{$attrname}}
95 return $self->{$dbname};
98 #for my $attrname (keys %alias) {
99 # my $slot = __PACKAGE__ . "::$attrname";
104 # for my $i ($self->chars) {
105 # my $j = &getvalue("$DB_HOME/system-char-id/$alias{$attrname}", $i);
106 # push @result, $j if $j;
116 for my $i ($self->chars) {
118 # To Do: 私用域のはさないようにしないと。
126 my($all_attr, $common_attr) = (0, 0);
127 for my $i (&cup(keys %$a, keys %$b)) {
128 if ($a->{$i} eq $b->{$i}) {
132 $all_attr++ if (exists $a->{$i});
133 $all_attr++ if (exists $b->{$i});
136 return $all_attr ? ($common_attr / $all_attr) : 0;
139 #--------------------------------------------------------#
145 for my $attrname (keys %$self) {
147 my $dbname = exists $alias{$attrname} ? $alias{$attrname} : $attrname;
148 if (-f "$DB_HOME/$dbname/system-char-id") {
149 @tmp = (&getvalue("$DB_HOME/$dbname/system-char-id", $$self{$attrname}));
150 @result = &cap(\@result, \@tmp);
151 } elsif (-f "$DB_HOME/system-char-id/$dbname") {
152 @tmp = &getkeys("$DB_HOME/system-char-id/$dbname", $$self{$attrname});
153 @result = &cap(\@result, \@tmp);
155 die "cannot find $attrname: $! $BerkeleyDB::Error\n";
163 my($dbname, $key) = @_;
164 tie my %h, "BerkeleyDB::Hash",
165 -Filename => $dbname;
166 my $value = $h{$key};
173 my($dbname, $value) = @_;
174 tie my %h, "BerkeleyDB::Hash",
175 -Filename => $dbname;
177 for my $key (keys %h) {
178 push @keys, $key if ($h{$key} eq $value);
189 } elsif ($$a[0] eq '*') { # '*'は全体合
191 } elsif ($$b[0] eq '*') {
196 for my $i (@$a, @$b) {
198 push @result, $i if ($result{$i} == 2);
211 for my $i (@_) { $result{$i}++; }
215 #--------------------------------------------------------#