- (
- $r->{"written"},
- $r->{"phonetic"},
- $r->{"meaning"},
- $r->{"category"},
- $r->{"learned"},
- $rest,
- )=split /\t/;
- next if $r->{"written"} eq "";
- die "Excessive argument: $rest" if defined $rest;
- while ($r->{"meaning"}=~s/\s*<([-\w]+)>\s*//) {
- my $keyword=$1;
- $r->{"meaning_keyword"}{$keyword}=1;
- $keyword{$keyword}=1;
+ ($r->{"kanji"},$r->{"kana"},$rest)=($1,$2,$3);
+ if (!$r->{"kana"}) {
+ $r->{"kana"}=$r->{"kanji"};
+ delete $r->{"kanji"};
+ }
+ while ($rest) {
+ $rest=~s{^\s*([^/]+?)\s*/}{}
+ or do { warn "Unparsable english: $s\n"; $errors_wait_key_count++; return; };
+ my($english)=($1);
+ push @{$r->{"english"}},$english;
+ }
+ $r->{"line"}=$line;
+ $r->{"orig"}=$s;
+ return $r;
+}
+
+sub to_chk($$)
+{
+ my($s,$type)=@_;
+
+ local $_=$s;
+ $_=lc $_;
+ s/\bto\b//g if $type eq "english";
+ s/\s//g;
+ s/[(][^)]*[)]//g;
+ return $_;
+}
+
+sub edict_read($)
+{
+ my($pathname)=@_;
+
+ local *EDICT;
+ open EDICT,"<:utf8",$pathname or die "open \"$pathname\": $!";
+ my %check=(
+ #"kanji"=>{}, # exists...
+ #"kana"=>{}, # exists...
+ "identify"=>{},
+ );
+ while (<EDICT>) {
+ my $r=edict_line_parse() or next;
+ next if /\Q(laceno)\E/;
+ push @R,$r;
+ push @{$kana_to_r{$r->{"kana"}}},$r;
+ keys(%check);
+ while (my($field,$hashref)=each(%check)) {
+ my $val;
+ $val=identify $r if $field eq "identify";
+ $val||=$r->{$field};
+ next if $val eq "悪い にくい"; # fixup: <20050522015353.GA31030@kashome.dyn.jankratochvil.net>
+ my $origvalref=\$hashref->{$val};
+ warn "field{$field} check duplicity: ".identify($r,"at"=>1)." vs. ".identify($$origvalref,"at"=>1)
+ if $$origvalref;
+ $$origvalref=$r;