#!/usr/bin/perl

use File::Basename;
use Getopt::Long;

unless ( GetOptions (

	"c=s"		=> \$config,
	"config=s"	=> \$config,

	"h"		=> \$usage,
	"help"		=> \$usage,

	"i=s"		=> \$input,		# input afm
	"input-afm=s"	=> \$input,

	"cc=s"		=> \$composition_info,	# user-supplied composition info

	"n=s"		=> \$fontname,		# original fontname
	"fontname=s"	=> \$fontname,

	"e=s"		=> \$encoding,		# encoding, Ogonki usually.
	"encoding=s"	=> \$encoding,

	"t=s"		=> \$target_encoding,	# target encoding, Adobe usually.
	"target-encoding=s" => \$target_encoding,

	"p=s"		=> \$composefile,	# compose.ps usually
	"compose-file=s" => \$composefile,



	"output-fontname=s" => \$output_fontname, # new fontname
	
	"output-ps=s"	=> \$output_ps,
	
	"output-afm=s"	=> \$output_afm,


)) { Usage(); exit(1); }

# Usage help
( Usage(), die "\n" ) if ($usage);

# Load in config
$config = "$ENV{CROPS_CONFIG}" unless ($config);
$config = "/etc/crops/crops.conf" unless ($config);
do "$config" or die "Can't load '$config' ($!)";

# Check arguments
"$input" or die "No --input-afm file specified\n";
$basename = basename($input); $basename =~ s#\..*$##;
die "Invalid input .afm filename: '${input}'\n" if (! (-e "$input" ));
if (! ($fontname)) {
	open (AFM_O, "< $input") or die "Can't open '$input' ($!)";
	while (<AFM_O>) {
		if ( $_ =~ /^FontName +(.*)/ ) {
			$fontname = $1; last;
		}
	}
	close(AFM_O);
	die "Can't determine FontName from '$input'\n" if (! ($fontname));
}
$encoding = "$DEFAULT_ENCODING" unless ($encoding);
$target_encoding = "$DEFAULT_TARGET_ENCODING" unless ($target_encoding);
$encoding_file_afm = "${ENCDIR}/${encoding}.afm";
$target_encoding_file_afm = "${ENCDIR}/${target_encoding}.afm";
$encoding_file_enc = "${ENCDIR}/${encoding}.enc";
$target_encoding_file_enc = "${ENCDIR}/${target_encoding}.enc";
$composefile = "$DEFAULT_COMPOSE_FILE" unless ($composefile);
$output_afm = "${FONTDIR}/${basename}-o.afm" unless ($output_afm);
$output_ps = "${FONTDIR}/${basename}-o.ps" unless ($output_ps);
$output_fontname = "$fontname" . "$FONT_SUFFIX" unless ($output_fontname);
$composition_info = "${basename}-c.afm" unless ($composition_info);
die "Invalid character composition file --cc: '$composition_info'\n"
	if (! (-e "$composition_info" ));


# Print summary
#if (0) {
#	for my $p (qw/config input composition_info fontname encoding encoding_file_afm target_encoding_file_afm encoding_file_enc target_encoding_file_enc composefile output_fontname output_ps output_afm/) {
#		print "$p : ${$p}\n";
#	}
#}


# Action starts here
if ($config ) { $str = "--config '$config'"; }
@commands = (
  "composeglyphs $str -i '$input' -c '$composition_info' -o '$output_ps' -n '$output_fontname' -a '$output_afm' -e '$encoding_file_afm' -t '$target_encoding_file_afm'",
);

# Read in registered fonts
open (FIN, "< $DATADIR/fonts.info") or die "Can't open '$DATADIR/fonts.info' ($!)\n";
my @sstack;
while (<FIN>) {
	my $ln = $_;  /(\S+)\s+(\S+)\s+(\S+)/; ($fx, $ox, $nx) = ($1, $2, $3);
	if ( "$fx" eq "$basename" ) { print "Warning: overwriting information for file '${fx}.afm' (font '$ox')\n";
	} else { push (@sstack, $ln); }
}
close(FIN);

# Add our new font and write whole file back
push (@sstack, "$basename      $fontname       $output_fontname\n");
open (FIN, "> $DATADIR/fonts.info") or die "Can't open '$DATADIR/fonts.info' ($!)\n";
print FIN "$_" foreach (@sstack); close(FIN);
undef @sstack;


RunShellCmd($_) foreach (@commands);

print "$fontname ";

exit(0);


#
# CODE END, only helper functions below
# TODO: Turn to manpage
sub Usage {
        print STDERR "See crops-addfont(1) man page for usage instructions\n";
}

