#!/usr/bin/perl

use Font::TTF::Font;
use Getopt::Std;

getopts('f:l:n:qs:t:');
$font = Font::TTF::Font->open($ARGV[0]) || die "Can't open font file $ARGV[0]";

$font = ttfname($font, $opt_f, $opt_l, $opt_n, $opt_q, $opt_s, $opt_t);

$font->out($ARGV[1]);

sub ttfname
{
    my ($font, $opt_f, $opt_l, $opt_n, $opt_q, $opt_s, $opt_t) = @_;
    my ($name) = $font->{'name'}->read;

    if (defined $opt_s)
    {
        my ($fh) = IO::File->new("< $opt_s") || die "Can't open $opt_s";
        local ($/);
        $opt_n = join('', <$fh>);
        $fh->close();
    }

    if (defined $opt_t)
    {
        $name->set_name($opt_t, $opt_n, $opt_l);
    }
    else
    {
        my ($subfamily) = $name->find_name(2);
        my ($family, $full, $post, $unique, @time);

        if ($opt_f)
        {
            $full = $opt_f;
            $family = $opt_f;
            unless (lc($subfamily) eq 'regular' || lc($subfamily) eq 'standard')
            {
                unless ($family =~ s/\s+$subfamily$//i)
                {
                    $family =~ s/\s+(.*?)$//oi;
                    $subfamily = $1;
                }
            }
        }
        else
        {
            $family = $opt_n;
            if (lc($subfamily) eq 'regular' || lc($subfamily) eq 'standard')
            { $full = $family; }
            else
            { $full = "$family $subfamily"; }
        }

        @time = gmtime($font->{'head'}->getdate);
        $unique = $name->find_name(8) . ":$full:$time[3]-$time[4]-$time[5]";
        $post = $family;
        $post =~ s/[\s\[\](){}<>\/%]//og;
        $post .= "-$subfamily";

# make sure post name set
        $name->{'strings'}[6][1][0]{0} = $post;
        $name->{'strings'}[6][3][1]{1033} = $post;

# now update all the interesting name fields
        $name->set_name(1, $family, $opt_l);
        $name->set_name(2, $subfamily, $opt_l);
        $name->set_name(3, $unique, $opt_l);
        $name->set_name(4, $full, $opt_l);
        $name->set_name(6, $post, $opt_l);
        $name->set_name(16, $family, $opt_l);
        $name->set_name(17, $subfamily, $opt_l);
        $name->set_name(18, $full, $opt_l);
    }
    return $font;
}
