228 lines
4.8 KiB
Perl
228 lines
4.8 KiB
Perl
#!/usr/bin/perl
|
|
#
|
|
# Copyright (c) 1998
|
|
# Sergey A. Babkin. All rights reserved.
|
|
#
|
|
# Redistribution and use in source and binary forms, with or without
|
|
# modification, are permitted provided that the following conditions
|
|
# are met:
|
|
# 1. Redistributions of source code must retain the above copyright
|
|
# notice, this list of conditions and the following disclaimer.
|
|
# 2. Redistributions in binary form must reproduce the above copyright
|
|
# notice, this list of conditions and the following disclaimer in the
|
|
# documentation and/or other materials provided with the distribution.
|
|
#
|
|
# THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
|
|
# WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
|
|
# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
|
#
|
|
# Sergey A. Babkin (sab123@hotmail.com, babkin@bellatlantic.net)
|
|
#
|
|
|
|
#
|
|
# Script that reads the Type1 font files and prints out the fonts.scale
|
|
# lines for them
|
|
#
|
|
|
|
# other substrings (regexps) that are considered irrelevant
|
|
# and sould be removed from the font names:
|
|
@wrongstr= (
|
|
"koi8r",
|
|
"koi8",
|
|
"cp1251",
|
|
"ibm1251",
|
|
"win1251",
|
|
"cp866",
|
|
"ibm866",
|
|
"iso8859[1-9]",
|
|
"iso8859",
|
|
"isolatin[0-9]",
|
|
"isolatin",
|
|
"latin[0-9]",
|
|
"^ER ",
|
|
"^K8 ",
|
|
);
|
|
|
|
sub usage
|
|
{
|
|
print STDERR "Use: \n";
|
|
print STDERR " t1fdir [-g] <foundry> <encoding>... [ -f <file>...]\n";
|
|
print STDERR "or\n";
|
|
print STDERR " t1fdir -d fonts.scale fonts.alias <foundry> <encoding>... [ -f <file>...]\n";
|
|
}
|
|
|
|
$ghost=0;
|
|
if( $ARGV[0] eq "-g" ) {
|
|
shift @ARGV;
|
|
$ghost=1;
|
|
} elsif( $ARGV[0] eq "-d" ) {
|
|
shift @ARGV;
|
|
$files=1;
|
|
$scalef=shift @ARGV;
|
|
$aliasf=shift @ARGV;
|
|
}
|
|
|
|
if($#ARGV<2) {
|
|
&usage();
|
|
exit 1;
|
|
}
|
|
|
|
$foundry=$ARGV[0];
|
|
shift @ARGV;
|
|
|
|
while($#ARGV>=0) {
|
|
if($ARGV[0] eq "-f") {
|
|
shift @ARGV;
|
|
last;
|
|
}
|
|
push(@encodings,$ARGV[0]);
|
|
shift @ARGV;
|
|
}
|
|
|
|
if($files) {
|
|
open(SCALEF, ">>$scalef") || die "Can't write to $scalef";
|
|
open(ALIASF, ">>$aliasf") || die "Can't write to $aliasf";
|
|
}
|
|
for $name (@ARGV) {
|
|
|
|
$familyname="";
|
|
$fullname="";
|
|
$fontname="";
|
|
$weight="";
|
|
$angle=0;
|
|
|
|
open(FILE,"<$name") || die "Unable to open file $name\n";
|
|
|
|
$type="p"; # by default
|
|
|
|
while(<FILE>) {
|
|
if(/eexec/) { last; }
|
|
if(/^\/FamilyName.*\((.+)\)/ ) { $familyname= $1; }
|
|
if(/^\/FullName.*\((.+)\)/ ) { $fullname= $1; }
|
|
if(/^\/FontName.*\((.+)\)/ ) { $fontname= $1; }
|
|
if(/^\/Weight.*\((.+)\)/ ) { $weight= $1; }
|
|
if(/^\/ItalicAngle.*(\d+)/ ) { $angle= $1+0; }
|
|
if(/^\/isFixedPitch/) {
|
|
if(/true/) {
|
|
$type="m";
|
|
} else {
|
|
$type="p";
|
|
}
|
|
}
|
|
}
|
|
|
|
# now try to interpret this information
|
|
|
|
$allinfo= $familyname ." ". $fullname ." ". $fontname ." ". $weight;
|
|
$lcallinfo=$allinfo;
|
|
$lcallinfo=~tr[A-Z][a-z];
|
|
|
|
$familyname.="_"; # just a delimiter for substitutions
|
|
$familyname=~s/Bold([^a-z])/$1/g;
|
|
$familyname=~s/Italic([^a-z])/$1/g;
|
|
$familyname=~s/Oblique([^a-z])/$1/g;
|
|
$familyname=~s/Roman([^a-z])/$1/g;
|
|
|
|
for $i (@wrongstr) { # for uppercase- and space- sensitive strings
|
|
$familyname =~ s/$i//g;
|
|
}
|
|
|
|
$familyname=~tr[A-Z][a-z];
|
|
$familyname=~tr[A-Za-z0-9][]cd;
|
|
|
|
for $i (@wrongstr) { # for case-insensitive strings
|
|
$familyname =~ s/$i//g;
|
|
}
|
|
|
|
if( $familyname eq "") {
|
|
$familyname="unknown";
|
|
}
|
|
|
|
$fn=$name;
|
|
$fn=~ s/.*\///g;
|
|
|
|
$n=0;
|
|
for $encoding (@encodings) {
|
|
$n++;
|
|
if($ghost) {
|
|
printf("/%s-", uc(substr($familyname,0,1)).substr($familyname,1));
|
|
|
|
$r=1;
|
|
|
|
if( $allinfo =~ /Bold[^a-z]/
|
|
|| $lcallinfo =~ /\bbold\b/ ) {
|
|
printf("Bold");
|
|
$r=0;
|
|
}
|
|
if( $allinfo =~ /Italic[^a-z]/
|
|
|| $lcallinfo =~ /\bitalic\b/
|
|
|| $angle>0 ) {
|
|
printf("Italic");
|
|
$r=0;
|
|
} elsif( $allinfo =~ /Oblique[^a-z]/
|
|
|| $lcallinfo =~ /\boblique\b/
|
|
|| $angle<0 ) {
|
|
printf("Oblique");
|
|
$r=0;
|
|
}
|
|
|
|
if($r) {
|
|
printf("Roman");
|
|
}
|
|
|
|
printf("-%s\t (%s) ;\n",$encoding,$fn);
|
|
} else {
|
|
$xenc=$encoding;
|
|
$xenc =~ s/\-/_/g;
|
|
|
|
$srec = sprintf("-%s-%s_%s-",$foundry,$familyname,$xenc);
|
|
$arec = sprintf("-%s-%s-",$foundry,$familyname);
|
|
|
|
if( $allinfo =~ /Bold[^a-z]/
|
|
|| $lcallinfo =~ /\bbold\b/ ) {
|
|
$srec .= "bold-";
|
|
$arec .= "bold-";
|
|
} else {
|
|
$srec .= "medium-";
|
|
$arec .= "medium-";
|
|
}
|
|
|
|
if( $allinfo =~ /Italic[^a-z]/
|
|
|| $lcallinfo =~ /\bitalic\b/
|
|
|| $angle>0 ) {
|
|
$srec .= "i-";
|
|
$arec .= "i-";
|
|
} elsif( $allinfo =~ /Oblique[^a-z]/
|
|
|| $lcallinfo =~ /\boblique\b/
|
|
|| $angle<0 ) {
|
|
$srec .= "o-";
|
|
$arec .= "o-";
|
|
} else {
|
|
$srec .= "r-";
|
|
$arec .= "r-";
|
|
}
|
|
|
|
$srec .= sprintf("normal--0-0-0-0-%s-0-adobe-fontspecific",$type,$encoding);
|
|
$arec .= sprintf("normal--0-0-0-0-%s-0-%s",$type,$encoding);
|
|
|
|
if($files) {
|
|
if($n==1) {
|
|
printf(SCALEF "%s %s\n",$fn,$srec);
|
|
printf(ALIASF "%s %s\n",$arec,$srec);
|
|
$srec1=$srec;
|
|
} else {
|
|
printf(ALIASF "%s %s\n",$arec,$srec1);
|
|
}
|
|
} else {
|
|
printf("%s %s\n",$fn,$arec);
|
|
}
|
|
}
|
|
}
|
|
|
|
close(FILE);
|
|
}
|
|
if($files) {
|
|
close(SCALEF);
|
|
close(ALIASF);
|
|
}
|