File acroread-cidfont-config of Package ghostscript-cjk
#!/usr/bin/perl -w
#
# Copyright (c) 2004 SuSE Linux AG, Nuernberg, Germany. All rights reserved.
#
# Author: Mike Fabian <mfabian@suse.de>, 2004
#
=head1 NAME
acroread-cidfont-config - configures CID keyed fonts for use with acroread
=head1 SYNOPSIS
acroread-cidfont-config [B<OPTION>]...
=head1 DESCRIPTION
configures CID keyed fonts for use with acroread
=head1 OPTIONS
=over 4
=item B<-v>, B<--verbose>
print some messages to standard output.
=item B<-f>, B<--force>
overwrite existing files.
=item B<-r>, B<--remove-fakes>
remove faked CID keyed fonts again.
=back
=head1 AUTHOR
Mike Fabian <I<mfabian@suse.de>>.
=cut
use strict;
use English;
use Getopt::Long;
use File::Find;
my $OPT_VERBOSE;
my $OPT_FORCE;
my $OPT_REMOVE_FAKES;
my @directories = ("/usr/share/ghostscript", "/usr/lib/Acrobat", "/usr/lib/Adobe");
my $cmap_dir = "";
my $cidfont_dir = "";
my $acrobat_dir = "";
sub wanted {
return unless -d;
if (m@CMap@ && ! $cmap_dir) {
$cmap_dir = $File::Find::name if ($File::Find::dir =~ m@/usr/share/ghostscript/.*@);
}
if (m@CIDFont@ && ! $cidfont_dir) {
$cidfont_dir = $File::Find::name if ($File::Find::dir =~ m@/usr/share/ghostscript/.*@);
}
if (m@Font@ && ! $acrobat_dir) {
$acrobat_dir = $File::Find::name if ($File::Find::dir =~ m@/usr/lib/A.*@);
}
}
my %cidfont_replacements =
(
"HYGoThic-Medium-Acro" , "MunhwaGothic-Regular",
"HYSMyeongJo-Medium-Acro" , "Munhwa-Regular",
"HeiseiKakuGo-W5-Acro" , "WadaGo-Bold",
"HGPSoeiKakugothicUB" , "WadaGo-Bold",
"MS-Gothic" , "WadaGo-Bold",
"HGGothicB" , "WadaGo-Bold",
"HGPGothicB" , "WadaGo-Bold",
"HeiseiMin-W3-Acro" , "WadaMin-Bold",
"MS-Mincho" , "WadaMin-Bold",
"HGMinchoL" , "WadaMin-Bold",
"HGPMinchoL" , "WadaMin-Bold",
"MHei-Medium-Acro" , "MOEKai-Regular",
"MSung-Light-Acro" , "MOESung-Regular",
"ShanHeiSun-Light" , "MOESung-Regular",
"STSong-Light-Acro" , "unfortunately-no-replacement-available"
);
######################################################################
sub create_cmap_symlinks {
my $cwd;
chomp ($cwd = `pwd`);
chdir $cmap_dir || die "Can't cd to $cmap_dir: $!\n";
for my $file (glob ("*")) {
if ($OPT_VERBOSE) {
printf "symlink (\"$cmap_dir/$file\", \"$acrobat_dir/$file.cmap\")\n";
}
symlink ("$cmap_dir/$file", "$acrobat_dir/$file.cmap");
}
chdir $cwd ||die "Can't cd to $cwd: $!\n";
}
sub create_CMap_upr {
if ( ! -f "$acrobat_dir/CMap.upr" || $OPT_FORCE ) {
if ($OPT_VERBOSE) {
print "generating $acrobat_dir/CMap.upr ...\n";
}
my $cwd;
chomp ($cwd = `pwd`);
chdir $acrobat_dir || die "Can't cd to $acrobat_dir: $!\n";
open (CMAPUPR, ">CMap.upr") || die "can't open file $acrobat_dir/CMap.upr for writing: $!";
printf CMAPUPR "PS-Resources-1.0\n";
printf CMAPUPR "CMap\n";
printf CMAPUPR ".\n";
printf CMAPUPR "CMap\n";
for my $map (glob ("*.cmap")) {
$map =~ /(.*).cmap/;
printf CMAPUPR "$1=$map\n";
}
printf CMAPUPR ".\n";
close (CMAPUPR);
chdir $cwd || die "Can't cd to $cwd: $!\n";
} elsif ($OPT_VERBOSE) {
print "$acrobat_dir/CMap.upr already exists, skipping ...\n";
}
}
my $fake_tag = "faked by acroread-cidfont-config";
sub fake_cidfonts {
for my $font (keys %cidfont_replacements) {
if ( ! -f "$acrobat_dir/$font" || $OPT_FORCE) {
if ( -f "$cidfont_dir/$cidfont_replacements{$font}" ) {
my_system ("cp $cidfont_dir/$cidfont_replacements{$font} $acrobat_dir/$font");
my_system ("perl -pi -e \"s/$cidfont_replacements{$font}/$font/\" $acrobat_dir/$font");
my_system ("perl -pi -e \"s/(%%Title:.*)/\\1 ($fake_tag)/\" $acrobat_dir/$font");
} elsif ($OPT_VERBOSE) {
print "Replacement for $font does not exist, skipping ...\n";
}
} elsif ($OPT_VERBOSE) {
print "$acrobat_dir/$font already exists, skipping ...\n";
}
}
}
sub remove_fakes {
my $cwd;
chomp ($cwd = `pwd`);
chdir $acrobat_dir || die "Can't cd to $acrobat_dir: $!\n";
for my $file (glob ("*")) {
if (! my_system ("grep -q \"$fake_tag\" $file")) {
if ($OPT_VERBOSE) {
print "$file is faked, remove it\n";
}
unlink($file);
}
}
chdir $cwd || die "Can't cd to $cwd: $!\n";
}
sub search_executable {
for my $file (@_) {
if (-x $file) {
return $file;
}
}
return "";
}
sub search_directory {
for my $dir (@_) {
if (-d $dir) {
return $dir;
}
}
return "";
}
sub my_system {
my ($command) = @_;
if ($OPT_VERBOSE) {
print "executing: $command\n";
}
return system ($command);
}
sub usage {
print "Usage: acroread-cidfont-config [--verbose|v] [--force|v]\n";
exit 1;
}
######################################################################
# check if we are started as root
# only one of UID and USER must be set correctly
# Process command line options
my %opt;
unless (GetOptions(\%opt,
'verbose|v', \$OPT_VERBOSE,
'force|f', \$OPT_FORCE,
'remove-fakes|r', \$OPT_REMOVE_FAKES,
)) {
&usage();
exit 1;
}
if ($UID != 0 && $ENV{USER} !~ /root/) {
print "You must be root to start $0\n";
exit 1;
}
no warnings;
find(\&wanted, @directories);
use warnings;
if (! -d $cmap_dir || ! -d $cidfont_dir || ! -d $acrobat_dir) {
if ($OPT_VERBOSE) {
printf "a required directory is missing.\n";
}
exit 1;
}
if ($OPT_REMOVE_FAKES) {
remove_fakes();
exit 0;
}
create_cmap_symlinks ();
create_CMap_upr ();
fake_cidfonts ();
exit 0;