# $Header$
#
# FILE:    ResumeToPlainHTML.pm
# AUTHORS: Erik Nygren (nygren@mit.edu)
#
# Converts a resume from XML into plain HTML.
#

require 5.002;

use strict;

require XML::Element;


# Returns a string containing HTML formatted version of <when>...</when>
sub formatWhen {
    my ($when) = @_;
    if ($when->getEl("when.from")) {
	return $when->getElText("when.from") . "-" 
	    . $when->getElText("when.to");
    } else {
	return $when->getText();
    }
}

# Returns a string containing HTML formatted version of <par>...</par>
sub formatPar {
    my ($par) = @_;
    my $s = "";
    foreach ($par->getKids) {
	if (ref $_) {
	    if ($_->getTag eq "cite") {
		$s .= "<cite>".($_->getText)."</cite>";
	    } else {
		die "unknown tag in formatPar\n";
	    }
	} else {
	    $s .= $_;
	}
    }
    return $s;
}

# Takes in a file handle and a resume XML Element and 
# writes a plain HTML resume out to the file...
sub ResumeToPlainHTML {
    my ($fh, $resume) = @_;
    my $si = $resume->getEl("subjectinfo");
    my @sects = $resume->getEls("section");
    my $sname = $si->getEl("name")->getText();
    print $fh "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 2.0//EN\">\n";
    print $fh "<html>\n<head>\n";
    print $fh "  <META NAME=\"GENERATOR\" CONTENT=\"XML to Plain HTML resume generator written by Erik Nygren\">\n";
    print $fh "  <title>", $sname, "'s Resume</title>\n";
    print $fh "  <!-- Autogenerated from XML version with RCS ID:\n\t"
	, $resume->getElText("rcsinfo"), " -->\n";
    print $fh "</head><body bgcolor=\"white\" text=\"black\" link=\"red\" vlink=\"blue\">\n";
    
    print $fh "<p><hr noshade></p>";
    print $fh "<h1>", $sname, "</h1>\n";
    print $fh "<p><hr noshade></p>";
    my $addr = $si->getEl("address");
    print $fh "<p><em>"
	, $addr->getElText("street"), "<br>\n"
	, $addr->getElText("city"), ", "
	, $addr->getElText("state"), "  "
	, $addr->getElText("zipcode"), "<br>\n"
	, $si->getElText("phone"), "<br>\n"
	    , "<br>\n";
    print $fh "<a href=\"mailto:", $si->getElText("email")
	, "\">", $si->getElText("email"), "</a><br>\n";
    print $fh "<a href=\"", $si->getElText("homepage")
	, "\">", $si->getElText("homepage"), "</a><br>\n";
    print $fh "</em></p>";
    print $fh "<p><hr noshade></p>";
    my $sect;
    for $sect (@sects) {
	print $fh "<p><br><h2>", $sect->getElText("sectionname"), "</h2>\n";
	print $fh "<dl>\n";
	my $block;
	for $block ($sect->getEls("block")) {
	    if ($block->getEl("location")
		|| ($block->getEl("position"))) {
		print $fh "<dt>\n";
		print $fh "<br><strong>",$block->getElText("location"),
		        "</strong>\n" 
		    if $block->getEl("location");
		print $fh "<br><em>", $block->getElText("position"), "</em>\n" 
		    if $block->getEl("position");
		print $fh "<br><em>", formatWhen($block->getEl("when")), "</em>\n" 
		    if $block->getEl("when");
		print $fh "</dt>\n";
	    }
	    print $fh "<dd>\n";
	    my $par;
	    foreach $par ($block->getEls("par")) {
		print $fh "<p>", formatPar($par), "</p>\n";
	    }
	    print $fh "</dd>\n";	    
	}
	print $fh "</p></dl>\n";
    }
    print $fh "<p><hr noshade></p>";
    print $fh "</body>\n</html>\n";

}


use vars qw/ $infn $outfn $ptree $resume /;

$infn = $ARGV[0];
$outfn = $ARGV[1];

$ptree = XML::Element->parseFromFile($infn);

$resume = $ptree->getEl("resume");
#$resume->printDebug;
die "resume not found in file\n" unless ($resume);

ResumeToPlainHTML(\*STDOUT, $resume);
