#!/usr/bin/perl
##
##  article.txt2html.pl -- Convert original article into HTML preview
##

#   read original article text
print STDOUT "++ reading  article.txt\n";
open(FP, "<article.txt") || die;
my $txt = '';
$txt .= $_ while (<FP>);
close(FP);

#   start by escaping
my $html = $txt;
$html =~ s|&|&amp;|sg;
$html =~ s|<|&lt;|sg;
$html =~ s|>|&gt;|sg;

#   split into text and attachment parts
$html =~ m|^(.+)\n_____+\n(.+)$|s;
my ($html1, $html2) = ($1, $2);

#   translate the text part
$html1 =~ s|C&lt;(.+?)&gt;|<tt>$1</tt>|sg;
$html1 =~ s|I&lt;(.+?)&gt;|<i>$1</i>|sg;
$html1 =~ s|U&lt;(.+?)&gt;|<a href="$1">$1</a>|sg;
$html1 =~ s|\n([^\n]+)\n==+\s*\n|\n<h1>$1</h1>\n|sg;
$html1 =~ s|\n([^\n]+)\n~~+\s*\n|\n<h2>$1</h2>\n|sg;
$html1 =~ s|\n([^\n]+)\n--+\s*\n|\n<h3>$1</h3>\n|sg;
$html1 =~ s|\n\n+|\n<p/>\n|sg;
$html1 =~ s/((Ralf|Thomas|Michael|Christoph).+?\S+\@[^\n]+)/<i><font size="-1">$1<\/font><\/i>/sg;
$html1 =~ s/((Listing|Table|Figure)_(\d+))/<a href="#$1">$2 $3<\/a>/sg;

#   translate the attachment parts
$html2 =~ s;\n((?:Table|Listing)[^\n]+)\n-{78}\s*\n(.+?\n)-{78};
           \n<p/><table cellspacing=1 cellpadding=1><tr><td bgcolor="000000">
           <table cellspacing=0 cellpadding=5>
           <tr><td bgcolor="#000000"><font color="#ffffff">$1</font></td></tr>
           <tr><td bgcolor="#ffffff"><pre>$2</pre></td></tr>
           </table>
           </td></tr></table><p/>;sg;
$html2 =~ s;\n(Figure[^\n]+)\n-{78}\s*\n\s*(.+?)\s*\n-{78};
           \n<p/><table cellspacing=1 cellpadding=1><tr><td bgcolor="000000">
           <table cellspacing=0 cellpadding=5>
           <tr><td bgcolor="#000000"><font color="#ffffff">$1</font></td></tr>
           <tr><td bgcolor="#ffffff"><img src="$2" alt=""></td></tr>
           </table>
           </td></tr></table><p/>;sg;
$html2 =~ s|<img src="([^"]+)"(\s+alt="")?>|&doimg($1)|sge;
$html2 =~ s/((Listing|Table|Figure)_(\d+))/<a name="$1">$2 $3<\/a>/sg;
sub doimg {
    my ($src) = @_;
    $src =~ s|^\s+||s;
    $src =~ s|\s+$||s;
    my ($base, $ext) = ($src =~ m|^(.+?)\.([^.]+)$|);
    if ($ext eq 'fig') {
        if (not -f "$base.png") {
            print STDOUT "++ creating $base.png\n";
            system("fig2dev -L png -m 1.0 $base.fig $base.png");
        }
        $src = "<img src=\"$base.png\" alt=\"\">";
    }
    return $src;
}

#   join together again and surround with HTML environment
my ($html1a, $html1b) = ($html1 =~ m|^(.+?)(Regarding configuration.+)$|s);
$html = # "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\n" .
        # "<html>\n" .
        # "<head>\n" . 
        # "<style type=\"text/css\"><!--\n" .
        # "BODY { margin: 20px; }\n" .
        # "H1,H2 { font-family: tahoma,helvetica,lucida,arial,sans-serif; }\n" .
        # "H3,H4 { font-family: tahoma,helvetica,lucida,arial,sans-serif; margin-bottom: 6px; }\n" .
        # "--></style>\n" .
        # "<title>OpenPKG: SysAdmin magazine article</title>\n" . 
        # "</head>\n" . 
        # "<body>\n" . 
        "<table><tr>" .
        "<td valign=\"top\" style=\"width: 45%;\">\n" . 
        # "<img src=\"article.logo.png\" alt=\"\"><p/>\n" .
        $html1a . 
        "</td>" .
        "<td width=20>" .
        "&nbsp;&nbsp;" .
        "</td>" .
        "<td valign=top width=\"45%\">\n" . 
        $html1b . 
        "</td>" .
        "</tr></table>\n" . 
        "<p/>\n" .
        "<table width=200><tr><td>\n" . 
        $html2 . 
        "</td></tr></table>\n" . 
        "";
        # "</body>\n" .
        # "</html>\n";

#   write to HTML preview file
print STDOUT "++ creating article.html\n";
open(FP, ">article.html") || die;
print FP $html;
close(FP);

