#!/usr/local/bin/perl

# gendc
#
# andy powell <a.powell@ukoln.ac.uk>
#
# $Id: gendc,v 1.5 1997/03/20 12:35:58 lisap Exp $
#
# Generate Dublin Core META tags suitable for embedding in an HTML document.

use Getopt::Std;

$rcfile = "$ENV{'HOME'}/.gendcrc";

sub newrc {
    open(RC, ">$rcfile") || die "Can't create $rcfile";
    print RC <<EOF;
# ELEMENT;SCHEME;LINK;Default value
title;;;
subject;;;
description;;;
creator;;;
creator.email;;;
#publisher;;;
#contributor;;;
#date;;;
#type;;;
format;imt;http://sunsite.auc.dk/RFC/rfc/rfc1521.html;text/html
identifier;;;
relation.ischildof;;;http://www.ukoln.ac.uk/
#source;;;
#language;;;
#coverage;;;
#rights;;;
EOF
    close(RC);
}

sub loadrc {
    if (open(RC, "<$rcfile")) {
	while(<RC>) {
	    chop;
	    if (/^#/) {
		push(@prompt, $_);
		next;
	    }
	    my ($element, $scheme, $link, $defval) = split(/;/);
	    my $sub .= "(SCHEME=$scheme)" if ($scheme);
	    my $key = "$element $sub";
	    push(@prompt, $key);
	    $Element{$key} = $element;
	    $Scheme{$key} = $scheme;
	    $Link{$key} = $link;
	    $Defval{$key} = $defval;
	    $Sub{$key} = $sub;
	}
	close(RC);
    }
}

sub saverc {
    open(RC, ">$rcfile") || die "Can't save settings";
    foreach (@prompt) {
	if (/^#/) {
	    print RC "$_\n";;
	    next;
	}
	print RC "$Element{$_};$Scheme{$_};$Link{$_};$Defval{$_}\n";
    }
    close(RC);
}

sub ask {
    local($q, $a) = @_;

    print STDERR "$q";
    print STDERR " [$a]" if ($a);
    print STDERR " : ";
    chop($newa = <STDIN>);
    if ($newa eq ' ') {
	return('');
    }
    $newa =~ s/^\s*//;
    $newa =~ s/\s*$//;
    $newa =~ s/;/:/g; # Sigh, simple hack - ';' is the separator in the RC file
    $a = $newa if ($newa);
    return($a);
}

getopts('f');

&newrc unless (-f $rcfile);
&loadrc;

print STDERR <<EOF;
Default values are shown in [].  Hit RETURN to get the default.
Type alternate text to replace the default, hit the SPACEBAR
to delete default.

EOF

# Prompt for values
foreach (@prompt) {
    next if (/^#/);
    $Defval{$_} = &ask($_, $Defval{$_});
}

&saverc;

# print STDOUT "<META NAME=\"package\" CONTENT=\"(TYPE=begin)(VERSION=0.2) Dublin Core\">\n" if ($opt_f);
foreach (@prompt) {
    next if (/^#/);
    $key = $_;
    next unless ($Defval{$key});
    print STDOUT "<META NAME=\"DC.$Element{$key}\" CONTENT=\"";
    print STDOUT "$Sub{$key} " if ($Sub{$key});
    print STDOUT "$Defval{$key}\">\n";
    print STDOUT "<LINK REL=\"SCHEMA.dc\" HREF=\"http://purl.org/metadata/dublin_core_elements#$Element{$key}\">\n" if ($opt_f);
    print STDOUT "<LINK REL=\"SCHEMA.$Scheme{$key}\" HREF=\"$Link{$key}\">\n" if ($Link{$key} && $opt_f);
}
# print STDOUT "<META NAME=\"package\" CONTENT=\"(TYPE=end)(VERSION=0.2) Dublin Core\">\n" if ($opt_f);

# Print Alta-Vista metadata
print STDOUT "<META NAME=\"description\" CONTENT=\"$Defval{'description '}\">\n" if ($Defval{'description '});
print STDOUT "<META NAME=\"keywords\" CONTENT=\"$Defval{'subject '}\">\n" if ($Defval{'subject '});
