4 use vars qw($perl56 $perl58
7 $char $charid $from $to
15 use Chise_utils ':all';
17 if($^V and $^V ge v5.8){
19 }elsif($^V and $^V ge v5.6){
22 print STDERR "This versin is not supported.";
26 binmode(STDIN, ':encoding(utf8)');
27 binmode(STDOUT, ':encoding(utf8)');
30 %cmaps=("cns"=>"UniCNS-UCS2-H",
32 "jis"=>"UniJIS-UCS2-H",
33 "ks"=>"UniKS-UCS2-H");
35 foreach $target (keys %cmaps){
36 ($ciddb_filename{$target}=$cmaps{$target})=~s/\-UCS2\-H//;
39 foreach $target (keys %cmaps){
40 $ucsdb_filename{$target}="ucs-".$target;
45 print STDERR "Using ^M as delimiter.\n";
50 Usage: perl $0 <CMAP dir> <DB dir>
51 <CMAP dir> is the directory where
52 CMAP for UniCNS-UCS2-H, UniGB-UCS2-H, UniJIS-UCS2-H, UniKS-UCS2-H exist.
53 <DB dir> is the directory to store BDB data.
54 This creates the databases required by Omega/CHISE.
57 #my $cmapdir="/usr/local/share/texmf/dvipdfm/CMap-AcrobatReader5.0";
58 #my $db_home="./omegadb";
69 foreach $target (keys %ciddb_filename){
70 if(-f "$db_home/$ciddb_filename{$target}"){
71 print STDERR "Removing old DB $db_home/$ciddb_filename{$target}.\n";
72 unlink "$db_home/$ciddb_filename{$target}";
74 if(-f "$db_home/$ucsdb_filename{$target}"){
75 print STDERR "Removing old DB $db_home/$ucsdb_filename{$target}.\n";
76 unlink "$db_home/$ucsdb_filename{$target}";
78 $ciddb{$target}=new BerkeleyDB::Hash
79 -Filename => "$db_home/$ciddb_filename{$target}", -Flags => DB_CREATE
81 $ucsdb{$target}=new BerkeleyDB::Hash
82 -Filename => "$db_home/$ucsdb_filename{$target}", -Flags => DB_CREATE
86 foreach $target (keys %cmaps){
87 print STDERR "Getting ucs-$target map from Character DB...";
88 &get_db("ucs-$target");
89 foreach $char (sort keys %{$chardb{"ucs-$target"}}){
90 $char=decode('utf8',$char) if($perl58);
92 $charid=unpack("U",$char);
93 if($ucs=$chardb{"ucs-$target"}->{"?$char"}){
94 $mapto{$target}->{$ucs}=$charid;
95 $ucsdb{$target}->db_put($ucs,$charid);
98 print STDERR "done!\n";
101 foreach $target (keys %cmaps){
103 print STDERR "Reading $cmapdir/$cmaps{$target}...";
104 open(CMAP,"<$cmapdir/$cmaps{$target}") or die $!;
105 # taken from expandcmap.pl by taiji.
109 }elsif(/endcidrange/){
112 if(/<([\da-fA-F]+)>\s*<([\da-fA-F]+)>\s*(\d+)/){
113 ($from, $to, $cid) = (hex($1), hex($2), $3);
114 while ($from <= $to) {
115 # DB¤Î¥Þ¥Ã¥Ô¥ó¥°¥Æ¡¼¥Ö¥ë¤Ë¤Ê¤¤¤Î¤Ëcid¤¬¤¢¤ë¾ì¹ç¤Ï
116 # UCS ¤½¤Î¤Þ¤Þ¤Ç¤è¤¤¡©
118 if(defined($mapto{$target}->{$from})){
119 $charid=$mapto{$target}->{$from};
123 unless($ciddb{$target}->db_put($charid,$from)==0){
132 print STDERR "done!\n";
136 my $idsdb_filename="idsdb";
138 if(-f "$db_home/$idsdb_filename"){
139 print STDERR "Removing old DB: $db_home/$idsdb_filename.\n";
140 unlink "$db_home/$idsdb_filename";
142 $idsdb=new BerkeleyDB::Hash
143 -Filename => "$db_home/$idsdb_filename", -Flags => DB_CREATE
145 print STDERR "Making IDS DB...";
146 #&get_db("ideographic-structure");
148 #foreach $char (keys %{$chardb{"ideographic-structure"}}){
149 foreach $char (keys %{$chardb{"ids"}}){
150 $char=decode('utf8',$char) if($perl58);
152 # if($ids=$chardb{"ideographic-structure"}->{"?$char"}){
153 if($ids=$chardb{"ids"}->{"?$char"}){
154 $ids=decode('utf8', $ids) if($perl58);
155 $idsdb->db_put($ids,$char);
158 print STDERR "done\n";