}
}
else{
-# # fall back if DB inconsistency exists.
+# never fall back.
# unless(@res){
+# # fall back if DB inconsistency exists.
if(&get_db($atr)){
foreach $char (keys %{$chardb{$atr}}){
if($chardb{$atr}->{$char} eq $value){
}
}
}
- foreach (keys %res){
- if($res{$_}==$i){
- push @res,$_;
- }
- }
- return @res;
+ return grep {defined($res{$_}) and $res{$_}==$i} (keys %res);
}
sub de_er{
my($er)=@_;
my($output_char,$atr,$value);
+ my($prefix,$suffix);
+ $er=~/^(amp|&)?(.+?)(;)?$/
+ and $prefix=$1,$er=$2,$suffix=$3;
+ $prefix or $prefix="",$suffix or $suffix="";
if($er=~/^\d+$/){
$output_char=pack("U",$er);
}elsif($er=~/^U[\+\-]([a-fA-F\d]+)/){
$output_char=pack("U",hex($1));
- }elsif($er=~/(?:I\-)?($er_prefix_re)\-?([0-9a-fA-F]+)/){
+ }elsif($er=~/^(?:I\-)?($er_prefix_re)\-?([0-9a-fA-F]+)$/){
($atr,$value)=($1,$2);
unless($er_alias{$atr}=~/daikanwa|gt/){
$value=hex($value);
($output_char)=&get_chars_matching($er_alias{$atr},$value);
}
if($output_char){
- return $output_char;
+ return $output_char;
}else{
- return $er;
+ return $prefix.$er.$suffix;
}
}