Index: webmagick.in
===================================================================
RCS file: /cvsroot/webmagick/WebMagick/webmagick.in,v
retrieving revision 1.117
retrieving revision 1.123
diff -u -r1.117 -r1.123
--- webmagick.in	23 Oct 2002 16:14:47 -0000	1.117
+++ webmagick.in	30 Jan 2003 12:22:14 -0000	1.123
@@ -1,6 +1,6 @@
 #! @PERL@ 
 #
-# $Id: webmagick.in,v 1.117 2002/10/23 16:14:47 clindell Exp $
+# $Id: webmagick.in,v 1.123 2003/01/30 12:22:14 ache Exp $
 #
 # You are looking at the main PERL script for WebMagick, a package to
 # intelligently create HTML and JavaScript index files and imagemaps
@@ -2173,17 +2173,14 @@
     print( INDEX $framespechtml );
     print( INDEX "<NOFRAMES>\n" );
     print( INDEX "<BODY\n" );
-    unless ("$opt_stylesheet" ne '')
-    {
-	    print( INDEX "  TEXT=\"${opt_colorfore}\"\n" );
-	    print( INDEX "  BGCOLOR=\"${opt_colorback}\"\n" )
-		if $opt_colorback ne 'false';
-	    print( INDEX "  BACKGROUND=\"$iconImageUrls{background}\"\n" )
-		if defined $iconImageUrls{background};
-	    print( INDEX "  LINK=\"${opt_colorlink}\"\n" );
-	    print( INDEX "  VLINK=\"${opt_colorvlink}\"\n" );
-	    print( INDEX "  ALINK=\"${opt_coloralink}\"");
-    }
+    print( INDEX "  TEXT=\"${opt_colorfore}\"\n" );
+    print( INDEX "  BGCOLOR=\"${opt_colorback}\"\n" )
+	if $opt_colorback ne 'false';
+    print( INDEX "  BACKGROUND=\"$iconImageUrls{background}\"\n" )
+	if defined $iconImageUrls{background};
+    print( INDEX "  LINK=\"${opt_colorlink}\"\n" );
+    print( INDEX "  VLINK=\"${opt_colorvlink}\"\n" );
+    print( INDEX "  ALINK=\"${opt_coloralink}\"");
     print( INDEX ">\n" );
     print( INDEX $indexhtml );
     print( INDEX "</BODY>\n</NOFRAMES>\n</HTML>" );
@@ -2242,17 +2239,14 @@
     
     print( INDEX "</HEAD>\n" );
     print( INDEX "<BODY\n" );
-    unless ("$opt_stylesheet" ne '')
-    {
-	    print( INDEX "  TEXT=\"${opt_dircolorfore}\"\n" );
-	    print( INDEX "  BGCOLOR=\"${opt_dircolorback}\"\n" )
-		if $opt_dircolorback ne 'false';
-	    print( INDEX "  BACKGROUND=\"$iconImageUrls{dirbackground}\"\n" )
-		if defined $iconImageUrls{dirbackground};
-	    print( INDEX "  LINK=\"${opt_dircolorlink}\"\n" );
-	    print( INDEX "  VLINK=\"${opt_dircolorvlink}\"\n" );
-	    print( INDEX "  ALINK=\"${opt_dircoloralink}\"" );
-	}
+    print( INDEX "  TEXT=\"${opt_dircolorfore}\"\n" );
+    print( INDEX "  BGCOLOR=\"${opt_dircolorback}\"\n" )
+	if $opt_dircolorback ne 'false';
+    print( INDEX "  BACKGROUND=\"$iconImageUrls{dirbackground}\"\n" )
+	if defined $iconImageUrls{dirbackground};
+    print( INDEX "  LINK=\"${opt_dircolorlink}\"\n" );
+    print( INDEX "  VLINK=\"${opt_dircolorvlink}\"\n" );
+    print( INDEX "  ALINK=\"${opt_dircoloralink}\"" );
     print( INDEX ">\n");
     print( INDEX $pagedirhtml );
     print( INDEX "</BODY></HTML>\n" );
@@ -2379,16 +2373,13 @@
 
     print( INDEX "</HEAD>\n" );
     print( INDEX "<BODY\n" );
-    unless ("$opt_stylesheet" ne '')
-    {
-	    print( INDEX "  TEXT=\"${opt_colorfore}\"\n" );
-	    print( INDEX "  BGCOLOR=\"${opt_colorback}\"\n" );
-	    print( INDEX "  BACKGROUND=\"$iconImageUrls{background}\"\n" )
-		if defined $iconImageUrls{background};
-	    print( INDEX "  LINK=\"${opt_colorlink}\"\n" );
-	    print( INDEX "  VLINK=\"${opt_colorvlink}\"\n" );
-	    print( INDEX "  ALINK=\"${opt_coloralink}\"" );
-    }
+    print( INDEX "  TEXT=\"${opt_colorfore}\"\n" );
+    print( INDEX "  BGCOLOR=\"${opt_colorback}\"\n" );
+    print( INDEX "  BACKGROUND=\"$iconImageUrls{background}\"\n" )
+	if defined $iconImageUrls{background};
+    print( INDEX "  LINK=\"${opt_colorlink}\"\n" );
+    print( INDEX "  VLINK=\"${opt_colorvlink}\"\n" );
+    print( INDEX "  ALINK=\"${opt_coloralink}\"" );
     print( INDEX ">\n");
 
     print( INDEX "${opt_header}\n" ) if ("$opt_header" ne '');
@@ -2397,8 +2388,12 @@
     if( $numimages > 0 ) {
 	# Total HACK!!!
 	if( !$opt_frames || $opt_framestyle == 1 ) {
-	    print( INDEX "<p><FONT SIZE=\"-1\">${opt_msg_index_of_files}\"$imageNames[$pageNumber - 1][0]\" ${opt_msg_index_through}",
-		  " \"$imageNames[$pageNumber - 1][$numimages-1]\"</FONT></p>\n" );
+	    print( INDEX "<p><FONT SIZE=\"-1\">${opt_msg_index_of_files}\"",
+		  escapehtml($imageNames[$pageNumber - 1][0]),
+		  "\" ${opt_msg_index_through}",
+		  " \"",
+		  escapehtml($imageNames[$pageNumber - 1][$numimages-1]),
+		  "\"</FONT></p>\n" );
 	}
 	print( INDEX "$indexbar<BR>\n" );
 
@@ -2433,22 +2428,30 @@
 	
 	    my $pic = $imageNames[$pageNumber - 1][$imageNum];
 	    my $pichtml;
+	    my $altlabel;
 	    my $target = '';
+
 	    if ($opt_pichtml && $opt_frames && "$opt_pichtmltarget" ne '') {
 		$target = " TARGET=\"${opt_pichtmltarget}\"";
 	    }
+	    if (defined($imageLabels{$pic})) {
+		$altlabel = $imageLabels{$pic};
+	    } else {
+		($altlabel = $pic) =~ s/(.*)\.\w+$/$1/i;
+		$altlabel =~ y/_/ /; # Usual space replacement in file name
+	    }
+	    $altlabel = escapehtml($altlabel);
 
 	    if ( $opt_pichtml ) {
 			
 			$pichtml = $pic . $opt_pichtmlext;
-
 			open( PICHTML, ">$pichtml")
 			    || die("$0: Failed to open file $pichtml for output\n$@\n");
 			print( PICHTML "<HTML>\n<HEAD>\n" );
 			# Charset is better before title
 			print( PICHTML "  <META HTTP-EQUIV=\"Content-Type\" CONTENT=\"text/html; charset=${opt_metacharset}\">\n" )
 			    if( "$opt_metacharset" ne '' );
-			print( PICHTML "  <TITLE>$pic</TITLE>\n" );
+			print( PICHTML "  <TITLE>${altlabel}</TITLE>\n" );
 
 			# Meta tags
 			print( PICHTML "  <META NAME=\"GENERATOR\" CONTENT=\"WebMagick/$webmagickInfo{version} [WebMagick]\">\n" );
@@ -2469,28 +2472,19 @@
 
 			print( PICHTML "</HEAD>\n" );
 			print( PICHTML "<BODY\n" );
-			unless ("$opt_stylesheet" ne '')
-	    		{
-				print( PICHTML "  TEXT=\"${opt_colorfore}\"\n" );
-				print( PICHTML "  BGCOLOR=\"${opt_colorback}\"\n" );
-				print( PICHTML "  BACKGROUND=\"$iconImageUrls{background}\"\n" )
-				    if defined $iconImageUrls{background};
-				print( PICHTML "  LINK=\"${opt_colorlink}\"\n" );
-				print( PICHTML "  VLINK=\"${opt_colorvlink}\"\n" );
-				print( PICHTML "  ALINK=\"${opt_coloralink}\"");
-			}
+			print( PICHTML "  TEXT=\"${opt_colorfore}\"\n" );
+			print( PICHTML "  BGCOLOR=\"${opt_colorback}\"\n" );
+			print( PICHTML "  BACKGROUND=\"$iconImageUrls{background}\"\n" )
+			    if defined $iconImageUrls{background};
+			print( PICHTML "  LINK=\"${opt_colorlink}\"\n" );
+			print( PICHTML "  VLINK=\"${opt_colorvlink}\"\n" );
+			print( PICHTML "  ALINK=\"${opt_coloralink}\"");
 			print( PICHTML ">\n" );
 
 			print( PICHTML "$opt_pichtmltop") if ("$opt_pichtmltop" ne '');
 
 			if ($opt_pichtmlputtitle) {
-			    print ( PICHTML "${opt_pichtmltitlestart}");
-			    if (defined( $imageLabels{$pic})) {
-				print( PICHTML "$imageLabels{$pic}");
-			    } else {
-				print( PICHTML "$pic");
-			    }
-			    print ( PICHTML "${opt_pichtmltitleend}");
+			    print ( PICHTML "${opt_pichtmltitlestart}${altlabel}${opt_pichtmltitleend}");
 			}
 
 			if ($opt_pichtmlnav) {
@@ -2526,9 +2520,9 @@
 				} else {
 					print ( PICHTML "<A${target} HREF=\"");
 					if ($imageNum == 0 && $pageNumber != 1) {
-						print ( PICHTML $imageNames[$pageNumber - 2][$#{$imageNames[$pageNumber - 2]}]);
+						print ( PICHTML escapeurl($imageNames[$pageNumber - 2][$#{$imageNames[$pageNumber - 2]}]) );
 					} else {
-						print ( PICHTML $imageNames[$pageNumber - 1][${imageNum} - 1]);
+						print ( PICHTML escapeurl($imageNames[$pageNumber - 1][${imageNum} - 1]) );
 					}
 					print ( PICHTML $opt_pichtmlext);
 					print ( PICHTML "\"><IMG SRC=\"$iconImageUrls{'prev'}\"",
@@ -2543,9 +2537,9 @@
 				} else {
 					print ( PICHTML "<A${target} HREF=\"");
 					if (($imageNum == $#{$imageNames[$pageNumber - 1]}) && $pageNumber != $numPages) {
-						print ( PICHTML $imageNames[$pageNumber][0]);
+						print ( PICHTML escapeurl($imageNames[$pageNumber][0]) );
 					} else {
-						print ( PICHTML $imageNames[$pageNumber - 1][${imageNum} + 1]);
+						print ( PICHTML escapeurl($imageNames[$pageNumber - 1][${imageNum} + 1]) );
 					}
 					print ( PICHTML $opt_pichtmlext);
 					print ( PICHTML "\"><IMG SRC=\"$iconImageUrls{'next'}\"",
@@ -2556,10 +2550,10 @@
 				print ( PICHTML "</NOBR><BR>");
 			}
 
-			if ( $pic =~ /\.(jpg|jpeg?|gif|xbm|png)$/i ) {
-			    print( PICHTML "<IMG SRC=\"$pic\" ALT=\"\">" );
+			if ($pic =~ /\.(jpg|jpeg?|gif|xbm|png)$/i) {
+			    print( PICHTML "<IMG SRC=\"", escapeurl($pic), "\" ALT=\"${altlabel}\">" );
 			} else {
-			    print( PICHTML "<A HREF=\"", escapeurl($pic), "\"><BIG><B>$pic</B></A> ", fsize($pic), "</BIG>" );
+			    print( PICHTML "<A HREF=\"", escapeurl($pic), "\"><BIG><B>", escapehtml($pic), "</B></A> ", fsize($pic), "</BIG>" );
 			}
 
 			print( PICHTML "$opt_pichtmlbottom\n") if ("$opt_pichtmlbottom" ne '');
@@ -2601,12 +2595,16 @@
 			# TODO: make sure the thumbnails are created, and get some image sizes
 			# TODO: save the labels in a new array, maybe same with sizes
 			if ( $thumbImageSizes{$pic}) {
-				print (INDEX "<IMG SRC=\"", $opt_cachedir, "/", escapeurl($pic), ".\L${opt_cacheformat}", "\" $thumbImageSizes{$pic} BORDER=0>");
+				print (INDEX "<IMG SRC=\"", $opt_cachedir, "/", escapeurl($pic), ".\L${opt_cacheformat}",
+				       "\" $thumbImageSizes{$pic} ALT=\"${altlabel}\" BORDER=0>");
 			} else {
-				print (INDEX "<IMG SRC=\"", escapeurl($pic), "\" BORDER=0>");
+				print (INDEX "<IMG SRC=\"", escapeurl($pic),
+				       "\" ALT=\"${altlabel}\" BORDER=0>");
 			}
 			
-			print (INDEX "</A><BR><FONT SIZE=\"-1\">" . $tableImageLabels{$imageNames[$pageNumber - 1][$imageNum]} . "</FONT></TD>\n");
+			print (INDEX "</A><BR><FONT SIZE=\"-1\">",
+				escapehtml($tableImageLabels{$imageNames[$pageNumber - 1][$imageNum]}),
+				"</FONT></TD>\n");
 						
 			if ($imageNum%$opt_columns == ($opt_columns - 1))
 			{
@@ -4296,6 +4294,7 @@
     s/&/&amp;/g;
     s/>/&gt;/g;
     s/</&lt;/g;
+    s/\"/&quot;/g;  # because we use "xxx" form sometimes
     return( $_ );
 }
 
@@ -4324,22 +4323,10 @@
 # Escape unsafe characters in URLs
 #		
 sub escapeurl {
+    no locale;
     local($_) = @_;
-    s/\%/%25/g;		# % (must substitute first!)
-    s/\"/%22/g;		# "
-    s/\#/%23/g;		# #
-    s/\</%3C/g;		# <
-    s/\>/%3E/g;		# >
-    s/\[/%5B/g;		# [
-    #s/\\/%5C/g;		# \
-    s/\]/%5D/g;		# ]
-    s/\^/%5E/g;		# ^
-    s/\`/%60/g;		# `
-    s/\{/%7B/g;		# {
-    s/\|/%7C/g;		# |
-    s/\}/%7D/g;		# }
-    s/\~/%7E/g;		# ~
-    s/ /%20/g;          # " "
+    # ' is here because some bots (Google) goes crazy on "xxx'xxx"
+    s/([][\x00-\x20"#%'<>^`{|}~\x7F-\xFF])/sprintf("%%%02x", ord($1))/eg;
     s:\\:/:g; # replace \ with / for better URLs
     return( $_ );
 }
