Hi, I didn't find a mail adress of those who maintain MagicPoint, so I send this patch to this list. This patch fixes some things in mgp2html: - the HTML code correct contains a doc type header now - all opening tags which *should* have a closing tag are closed now - if the charset is given in the mgp file this is also put in a html meta tag. - <, > and & are encoded in the corresponding html entity now Please apply that patch to the upstram MagicPoint distribution. Ciao Bjoern
--- mgp2html.pl.in 1999-08-30 10:20:15.000000000 +0200
+++ mgp2html.pl.in 2003-07-09 08:56:47.232575760 +0200
@@ -59,6 +59,7 @@
$filtermode = 0;
$filtercmd = "";
$filterinput = "";
+my @mainoutput;
while ($_ = $ARGV[0], /^-/) {
shift;
@@ -77,12 +78,13 @@
$mgpfontsize = $mgpdefaultfontsize;
$| = 1;
-&prologue;
while (<>) {
s/\n$//;
$_ = '' if (/^#/o);
-
+ s/&/&/g; # this first! :)
+ s/</</g;
+ s/>/>/g;
if ($_ eq '' || $_ =~ /^[^%]/) {
$line++;
$cont = 0 if ($cont == 2);
@@ -106,9 +108,18 @@
&cmds($_);
}
&pageepilogue;
+&alignreset;
&epilogue;
+
+&prologue; # the only function writing directly to stdout, the
+ # rest unshifts into @mainoutput ...
+print for reverse (@mainoutput);
exit 0;
+sub printit { # we need to parse for charset, and put that into the html
+ # header, so print out most stuff in the end and store first
+ unshift @mainoutput, shift;
+}
sub cmds {
local($_) = @_;
@@ -117,7 +128,6 @@
if (/^%page/i) {
&fontreset;
if ($page != -1) {
- &alignreset;
&pageepilogue;
} else {
$page = 0;
@@ -152,20 +162,19 @@
if (!$doimage) {
# don't use images
} elsif (scalar(@dir) == 2 || scalar(@dir) == 3) {
- print "<IMG SRC=\"$dir[1]\" ALT=\"$dir[1]\">\n";
+ printit "<img src=\"$dir[1]\" ALT=\"$dir[1]\">\n";
} elsif (scalar(@dir) == 4) {
# interpretation wrong
- print "<IMG SRC=\"$dir[1]\" WIDTH=$dir[3]% HEIGHT=$dir[3]% ALT=\"$dir[1]\">\n";
+ printit "<img src=\"$dir[1]\" width=$dir[3]% height=$dir[3]% ALT=\"$dir[1]\">\n";
} elsif (scalar(@dir) >= 5) {
# interpretation wrong
- print "<IMG SRC=\"$dir[1]\" WIDTH=$dir[3]% HEIGHT=$dir[4]% ALT=\"$dir[1]\">\n";
+ printit "<img src=\"$dir[1]\" width=$dir[3]% height=$dir[4]% alt=\"$dir[1]\">\n";
}
} elsif ($dir[0] eq 'nodefault') {
$nodefault++;
} elsif ($dir[0] =~ /^(left|leftfill|right|center)$/) {
$dir[0] =~ tr/A-Z/a-z/;
&fontreset;
- &alignreset;
&alignmode($dir[0]);
&fontchange;
} elsif ($dir[0] =~ /^filter$/) {
@@ -182,6 +191,9 @@
$dir[1] =~ s/\"//g;
$mgpfontsize = $dir[1];
&fontchange;
+ } elsif ($dir[0] =~ /^charset$/) {
+ $dir[1] =~ s/\"//g;
+ $charset = $dir[1];
} elsif (grep($dir[0] eq $_, @keywords)) {
# unsupported directive with 1 parameter
} else {
@@ -191,7 +203,12 @@
}
sub prologue {
+ print "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\n";
+ print " \"http://www.w3.org/TR/html4/loose.dtd\">\n";
print "<HTML>\n";
+ print "<head>";
+ print "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=$charset\">\n" if ($charset);
+ print "</head>\n";
print "<BODY";
print " TEXT=" . $colortext if ($colortext ne '');
print " BGCOLOR=" . $colorbg if ($colorbg ne '');
@@ -207,17 +224,17 @@
sub epilogue {
if ($htmldefaultfontsize > 0){
- print "</FONT>\n";
+ printit "</font>\n";
}
- print <<EOF;
+ printit <<EOF;
</BODY>
</HTML>
EOF
}
sub pageprologue {
- print <<EOF
-<HR>
+ printit <<EOF
+<hr />
EOF
}
@@ -225,8 +242,8 @@
&output_eol;
$page++;
&doindent(0);
- print <<EOF
-(page $page)<BR>
+ printit <<EOF
+<div align=center>(page $page)</div><br />
EOF
}
@@ -244,28 +261,28 @@
if (length($str)) {
$str =~ s/http:\/\/\S*/<A HREF=$&>$&<\/A>/g;
if ($indent) {
- print "\t" x $indent . "<LI>" . $str;
+ printit "\t" x $indent . "<li>" . $str . "</li>";
$endline = "\n";
} else {
- print $str;
- $endline = "<BR>\n";
+ printit $str;
+ $endline = "<br />\n";
}
$outputsomething++;
} else {
- $endline = "<BR>\n";
+ $endline = "<br />\n";
}
} else {
$endline = "";
if (length($str)) {
$str =~ s/http:\/\/\S*/<A HREF=$&>$&<\/A>/g;
- print $str;
+ printit $str;
$outputsomething++;
}
}
}
sub output_eol {
- print $endline;
+ printit $endline;
$endline = "";
}
@@ -274,13 +291,13 @@
if ($indent > $level) {
while ($indent > $level) {
- print "\t" x $indent . "</UL>\n";
+ printit "\t" x $indent . "</ul>\n";
$indent--;
}
} else {
while ($indent < $level) {
$indent++;
- print "\t" x $indent . "<UL>\n";
+ printit "\t" x $indent . "<ul>\n";
}
}
}
@@ -289,13 +306,13 @@
return if ($alignmode eq '');
if ($alignmode eq 'left') {
- print "</DIV>\n";
+ printit "</div>\n";
} elsif ($alignmode eq 'leftfill') {
- print "</DIV>\n";
+ printit "</div>\n";
} elsif ($alignmode eq 'right') {
- print "</DIV>\n";
+ printit "</div>\n";
} elsif ($alignmode eq 'center') {
- print "</DIV>\n";
+ printit "</div>\n";
} else {
die "unknown alignment $alignmode\n";
}
@@ -305,15 +322,16 @@
sub alignmode {
local($mode) = @_;
+ &alignreset;
$alignmode = $mode;
if ($alignmode eq 'left') {
- print "<DIV ALIGN=LEFT>\n";
+ printit "<div align=left>\n";
} elsif ($alignmode eq 'leftfill') {
- print "<DIV ALIGN=LEFT>\n";
+ printit "<div align=left>\n";
} elsif ($alignmode eq 'right') {
- print "<DIV ALIGN=RIGHT>\n";
+ printit "<div align=right>\n";
} elsif ($alignmode eq 'center') {
- print "<DIV ALIGN=CENTER>\n";
+ printit "<div align=center>\n";
} else {
die "unknown alignment $mode\n";
}
@@ -345,9 +363,9 @@
. " | " . $filtercmd;
}
&output_eol;
- print "<PRE>\n";
+ printit "<pre>\n";
system($filtercmd);
- print "</PRE>\n";
+ printit "</pre>\n";
$filterinput = "";
$filtermode = 0;
}
@@ -366,17 +384,17 @@
$fs = $htmlfontsizemax if ($fsh > $htmlfontsizemax);
}
if (($fs != 0) || (($colormode == 1) && ($colorlast ne $htmlfontcol))){
- print "<FONT";
+ printit "<font";
if ($fs != 0) {
- print " SIZE=";
- print "+" if ($fs >= 0);
- print $fs;
+ printit " size=";
+ printit "+" if ($fs >= 0);
+ printit $fs;
}
if (($colormode == 1) && ($colorlast ne $htmlfontcol)) {
- print " COLOR=\"" . $htmlfontcol . "\"";
+ printit " color=\"" . $htmlfontcol . "\"";
$colorlast = $htmlfontcol;
}
- print ">";
+ printit ">";
$infont = 1;
}
}
@@ -384,7 +402,7 @@
sub fontreset {
$colorlast = "";
if ($infont == 1) {
- print "</FONT>";
+ printit "</font>";
}
$infont = 0;
}
Attachment:
pgp0l04mAu31N.pgp
Description: PGP signature