#! perl -w
use strict;

# You may wish to modify the following line
#############################################
my $texmf = "$ENV{HOME}/gnu/Linux/lib/texmf.PS";

my $configps = "$texmf/dvips/config/config.ps";

mkdir "pfb_install_tmp_$$" || die;
system "cp *.afm *.pfb pfb_install_tmp_$$";
chdir "pfb_install_tmp_$$" || die;

sub my_system {
  my ($line) = @_;
  print STDERR ">> $line\n";
  system "$line";
}
die "usage: $0 family normal.afm bold.afm italics.afm bolditalics.afm"
  unless $#ARGV == 4;
my ($family, $a, $b, $c, $d) = @ARGV;
my @caps = qw/normalcaps smallcaps/; # allcaps is still missing
my @shape = qw/upright slant italic uprightitalic/;
my @width = qw/normal condensed extended/;
my @series = qw/medium bold/;

my $extended = 2;
my $condensed = .7;
my $slant = .33;
my $italic = .33; # should be read from the afm file
unlink "psfonts.map";
open(FD, ">t1$family.fd") || die "cannot open t1$family.fd for writing: $!";
print FD "\\ProvidesFile{t1$family.fd}\n";
print FD "\\DeclareFontFamily{T1}{$family}{}\n";
open(TEX, ">sample.tex") || die "Cannot open sample.tex for writing: $!";
print TEX "\\documentclass[12pt,a4paper]{article}\\pagestyle{empty}\\begin{document}\n";
foreach my $caps (@caps){
  foreach my $shape (@shape){
    foreach my $width (@width){
      foreach my $series (@series){
	my $shortseries = "";
	$shortseries .= "b" if $series eq "bold";
	$shortseries .= "c" if $width eq "condensed";
	$shortseries .= "x" if $width eq "extended";
	$shortseries = "m" if $shortseries eq "";
	
	my $shortshape = "";
	$shortshape .= "sc" if $caps eq "smallcaps";
	$shortshape .= "sl" if $shape eq "slant";
	$shortshape .= "it" if $shape eq "italic";
	$shortshape .= "ui" if $shape eq "uprightitalic";
	$shortshape = "n" if $shortshape eq "";

	# Calcul des paramètres à donner à ttf2tfm
	my $e = 1;
	$e = $extended if $width eq "extended";
	$e = $condensed if $width eq "condensed";

	my $s = 0;
	$s = $slant if $shape eq "slant";
	$s = $italic * $e if $shape eq "uprightitalic";

	my $arg="";
	$arg .= "-e $e ";
	$arg .= "-s $s ";
	$arg .= ($caps eq "smallcaps") ? "-V " : "-v ";
#	$arg = "-v ";

	# Calcul du nom du fichier destination
	my $raw="ttf-${family}-${series}-${shape}=${caps}-${width}-raw--10";
	my $resultat="ttf-${family}-${series}-${shape}=${caps}-${width}-cork--10";

	# Calcul du nom du fichier dont on va partir
	# Calcul du nom du fichier dont on va partir
	my $file=$a;
	if( $shape =~ m/italic/ ){
	  if( $series eq "medium" ){ $file = $c }
	  else { 
	    if( not defined $d ){ $file = $c }
	    else { $file = $d }
	  }
	} else {
	  if( $series eq "medium" ){ $file = $a }
	  else {
	    if( not defined $b ){ $file = $a }
	    else { $file = $b }
	  }
	}
	$file =~ s/\.afm$//i;

#	my_system "afm2tfm $file.afm -T ec.enc $arg $resultat.vpl RAW_$resultat.tfm | perl -p -e 's/\$/ \" ECEncoding ReEncodeFont \" /; s/\$/ <ec.enc <$file.pfb/;' >> psfonts.map";
	my_system "afm2tfm $file.afm -T ec.enc $arg $resultat.vpl RAW_$resultat.tfm | perl -p -e 's/\$/ <$file.pfb/' >> psfonts.map";
	my_system "vptovf $resultat";
	unlink "$resultat.vpl";
	     
	print FD "\\DeclareFontShape{T1}{$family}{$shortseries}{$shortshape}{<->$resultat}{}\n";

	print TEX "\\fontencoding{T1}\\fontfamily{$family}\\fontseries{$shortseries}\\fontshape{$shortshape}\\selectfont The quick naïve brown fox...\\par\n";
      }
    }
  }
}

print TEX "\\end{document}\n";
close TEX;
close FD;

open(STY, ">font-$family.sty") || die "Cannot open font-$family.sty for writing: $!";
print STY "\\ProvidesFile{font-$family.sty}\n";
print STY "\\ProvidesPackage{font-$family}\n";
print STY "\\expandafter\\newif\\csname if\@$family\@default\\endcsname\n";
print STY "\\csname \@$family\@defaultfalse\\endcsname\n";
print STY "\\DeclareOption{default}{\\csname \@$family\@defaulttrue\\endcsname}\n";
print STY "\\ProcessOptions\n";
print STY "\\expandafter\\def\\csname text$family\\endcsname#1{{\\fontencoding{T1}\\fontfamily{$family}\\selectfont #1}}";
print STY "\\csname if\@$family\@default\\endcsname\n";
print STY "  \\def\\encodingdefault{T1}";
print STY "  \\def\\familydefault{$family}";
print STY "  \\def\\bfdefault{b}";
print STY "\\fi\n";
close STY;

open(TEX, ">test.tex") || die "Cannot open test.tex: $!";
print TEX <<EOF;
\\documentclass[12pt,a4paper]{article}
\\usepackage[latin1]{inputenc}
\\usepackage[default]{font-$family}
\\pagestyle{empty}
\\begin{document}
!`THE DAZED BROWN FOX QUICKLY GAVE 12345--67890 JUMPS!)
?`But aren't Kafka's Schlo{\\ss} and {\\AE}sop's {\\OE}uvres
often na{\\"\\i}ve  vis-\\`a-vis the d{\\ae}monic ph{\\oe}nix's official r\\^ole
in fluffy souffl\\'es?'
\\end{document}
EOF
close TEX;

system "latex --interaction=nonstopmode test.tex";
system "dvips -E -o test.ps test.dvi";
system "latex --interaction=nonstopmode sample.tex";
system "dvips -o sample.ps sample.dvi";

mkdir "$texmf", 0777 ||  die "Cannot mkdir $texmf: $!";
mkdir "$texmf/tex", 0777 ||  die "Cannot mkdir $texmf/tex/: $!";
mkdir "$texmf/tex/latex", 0777 ||  die "Cannot mkdir $texmf/tex/latex: $!";
mkdir "$texmf/tex/latex/$family", 0777 ||  die "Cannot mkdir $texmf/tex/latex/$family: $!";
mkdir "$texmf/fonts", 0777 ||  die "Cannot mkdir $texmf/fonts: $!";
mkdir "$texmf/fonts/type1", 0777 ||  die "Cannot mkdir $texmf/fonts/type1: $!";
mkdir "$texmf/fonts/type1/$family", 0777 ||  die "Cannot mkdir $texmf/fonts/type1/$family: $!";
mkdir "$texmf/fonts/afm", 0777 ||  die "Cannot mkdir $texmf/fonts/afm: $!";
mkdir "$texmf/fonts/afm/$family", 0777 ||  die "Cannot mkdir $texmf/fonts/afm/$family: $!";
mkdir "$texmf/fonts/vf/", 0777 ||  die "Cannot mkdir $texmf/fonts/vf/$family: $!";
mkdir "$texmf/fonts/vf/$family", 0777 ||  die "Cannot mkdir $texmf/fonts/vf/$family: $!";
mkdir "$texmf/fonts/tfm/", 0777 ||  die "Cannot mkdir $texmf/fonts/tfm/$family: $!";
mkdir "$texmf/fonts/tfm/$family", 0777 ||  die "Cannot mkdir $texmf/fonts/tfm/$family: $!";

system "cp *.vf $texmf/fonts/vf/$family";
system "cp *.tfm $texmf/fonts/tfm/$family";
system "cp *.afm $texmf/fonts/afm/$family";
system "cp *.pfb $texmf/fonts/type1/$family";
system "cp font-$family.sty $texmf/tex/latex/$family";
system "cp t1$family.fd $texmf/tex/latex/$family";
#system "cp ot1$family.fd $texmf/tex/latex/$family";
#system "cp u$family.fd $texmf/tex/latex/$family";

system "cp psfonts.map $texmf/dvips/config/$family.map";
open(CONF, ">>$configps") || die "Cannot open $configps for appending: $!";
print CONF "\np +$family.map\n";
close CONF;

print STDERR "\n\nRemember to run texhash (ou mktexlsr)\n";

__END__
