# $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 ResumeToFancyHTML {
    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 4.0 Transitional//EN\">";
    print $fh "<html>\n<head>\n";
    print $fh "<title>", $sname, "'s Resume</title>\n";
    print $fh "  <META NAME=\"GENERATOR\" CONTENT=\"XML to Syntactically Formatted HTML resume generator written by Erik Nygren\">\n";
    print $fh "  <!-- Autogenerated from XML version with RCS ID:\n\t"
	, $resume->getElText("rcsinfo"), " -->\n\n";

    print $fh "<STYLE type=\"text/css\">";
    print $fh "      H1 { font-family: lucida, helvetica, verdana, ariel, helvetica, sans-serif ;  font-size: 2em }\n";
    print $fh "</STYLE>\n";

    print $fh "</head>\n\n<body bgcolor=\"#fffff7\" text=\"black\" link=\"#AA3333\" vlink=\"#7d7d7d\">\n\n";

    print $fh "<table width=100%><tr><td width=20%></td><td>\n";    
    print $fh "<p><br>&nbsp;<table border=0 width=100%>\n";
    print $fh "<tr><th align=center colspan=3><h1>\n"
	, $sname, "</h1></th></tr>\n";
    my $addr = $si->getEl("address");
    my $cityline = $addr->getElText("city").", "
	. $addr->getElText("state"). "  "
	    . $addr->getElText("zipcode");
    print $fh "<tr><td><strong><a href=\"mailto:", $si->getElText("email")
	, "\">", $si->getElText("email")
	    , "</a></strong></td><td>&nbsp;&nbsp;&nbsp;</td>";
    print $fh "<td align=right><strong>", $addr->getElText("street"), "</strong></td></tr>\n";
    print $fh "<tr><td><strong>", $si->getElText("phone")
	, "</strong></td><td>&nbsp;&nbsp;&nbsp;</td>"
	    , "<td align=right><strong>", $cityline, "</strong></td></tr>\n";
    print $fh "<tr><td align=center colspan=3><strong><a href=\""
	, $si->getElText("homepage")
	, "\">", $si->getElText("homepage"), "</a></strong></td></tr>\n";
    print $fh "</table>\n</td></td><td width=5%></td></tr><tr><td><br></td></tr>";

    my $sect;
    for $sect (@sects) {
	print $fh "<P><tr><td width=20% valign=top><h3>"
	    , $sect->getElText("sectionname"), "</h3></td><td valign=top>\n";
	my $block;
	for $block ($sect->getEls("block")) {

	    # format the block headers, either:
	    # 
	    # location
	    # position        date
	    #
	    # or
	    #
	    # location        date	    
	    #
	    print $fh "<table width=100%>";
	    if ($block->getEl("location") && ($block->getEl("position"))) {
		print $fh "<tr><td colspan=2><strong>"
		    ,$block->getElText("location"),
		    "</strong></td></tr>\n";
		print $fh "<tr><td><em>", $block->getElText("position")
		    , "</em></td>\n" 
		    if $block->getEl("position");
		print $fh "<td align=right>";
		print $fh formatWhen($block->getEl("when"))
		    if $block->getEl("when");
		print $fh "</td></tr>";
	    } elsif ($block->getEl("location")) {
		print $fh "<tr><td><strong>"
		    ,$block->getElText("location"),
		    "</strong></td>\n";
		print $fh "<td align=right>";
		print $fh formatWhen($block->getEl("when"))
		    if $block->getEl("when");
		print $fh "</td></tr>";		
	    }

	    print $fh "<tr><td colspan=2>";
	    my $par;
	    foreach $par ($block->getEls("par")) {
		print $fh formatPar($par), "<p>\n";
	    }
	    print $fh "</td></tr>";
	    print $fh "<tr><td colspan=2>&nbsp;</td></tr></table>";
	}
	print $fh "</td></tr>\n";
    }
    print $fh "</table>";
    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);

ResumeToFancyHTML(\*STDOUT, $resume);
