#!/usr/bin/perl
###!/usr/local/bin/perl
$dd = '/'; # directory-delimiter
### $Id: makemap,v 1.4 1997/07/03 14:16:18 RRM Exp $
### File: makemap
### Written by Herbert W. Swan <dprhws@edp.Arco.com>
### Version 1.0, December 22, 1995
### This is part of the 96.1 release of LaTeX2HTML by Nikos Drakos
## Copyright (C) 1995 by Herbert W. Swan
## This program is free software; you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published by
## the Free Software Foundation; either version 2 of the License, or
## (at your option) any later version.
## This program is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
## GNU General Public License for more details.
## You should have received a copy of the GNU General Public License
## along with this program; if not, write to the Free Software
## Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
## Change Log (for initials see file Changes):
## $Log: makemap,v $
## Revision 1.4 1997/07/03 14:16:18 RRM
## - added HTML comments with the USEMAP option
## - the $labels can be given as a filename (test existence) or a prefix
##
## Revision 1.3 1997/07/03 07:24:47 RRM
## - Extended to also process for client-side image-maps, via <USEMAP> tags
## - introduced a $dd directory-delimiter, for customisation
##
## Revision 1.2 1996/12/23 01:41:16 JCL
## o added informative comments and CVS log history
## o changed usage of <date> to an OS independent construction, the
## patch is from Piet van Oostrum.
## o moved most of the code into a main function
##
##
## HWS -- Dec 22, 1995 -- created
#
# LaTeX2HTML image map script
#
# NOTE: The following configuration variable MUST be set to either
# "NCSA" or "CERN" to reflect the type of server you are using;
# or "USEMAP" (AXR)
$SERVER = "NCSA";
#
# Get the command-line arguments:
#
die "Usage: makemap map_template [dest_directory]\n" unless @ARGV;
$template_file = $ARGV[0];
$dest_dir = ".";
$dest_dir = $ARGV[1] if ($#ARGV >= 1);
# print $#ARGV, ":", $dest_dir, "\n";
$map_file = "";
$Date = &get_date;
&main;
sub main {
#
# Next, try to open the template file.
#
open (TEMPLATE, "<$template_file") || die "Can't open $template_file\n";
while (<TEMPLATE>) {
next if /^(\s*\#.*|\s*)$/; # Ignore comments;
#
# Associate the contents of a labels.pl file with a URL.
#
if (/^\+(\S+)\s+(\S+)/) {
$labels = (-f ${1})? ${1} : "${1}labels.pl";
$URL = $2;
open (LABELS, "<$labels") || die "Can't open $labels\n";
while (<LABELS>) {
eval if (/^\$/);
}
close (LABELS);
next;
}
#
# Proceed to the next map file.
#
elsif (/(\S*):\s*$/) {
close (MAP) if (length($map_file));
$map_file = "$dest_dir${dd}$1";
open (MAP, ">$map_file") ||
die "Can't open $map_file for output.";
if ( $SERVER eq "USEMAP" ) {
($tag_name = $1) =~ s/\.map//g;
print (MAP "<!-- Image map, generated by makemap 1.2 at $Date\n");
print (MAP " from source $template_file using $labels -->\n\n");
print (MAP "<MAP NAME=\"$tag_name\">\n");
} else {
print (MAP "# Created by makemap 1.2\n");
print (MAP "# ", $Date);
print (MAP "#\n\n\n");
}
next;
}
#
# Continue mapping coordinates to URL's:
#
else {
$url = $_;
@array = split(/[ \t\n]+/);
$op = @array[1];
if (!/\//) {
($symbol = @array[0]) =~ s/://g;
$url = $symbol unless ($url = $external_labels{$symbol});
next unless $url;
if ($SERVER eq "NCSA") {
print MAP ("$op $url @array[2..$#array]\n");
} elsif ($SERVER eq "CERN") {
print MAP ("$op @array[2..$#array] $url\n");
} elsif ($SERVER eq "USEMAP") {
print MAP ("<AREA SHAPE=\"$op\" ALT=\"\" "
. "COORDS=\"@array[2],@array[3]\"\n HREF=\"$url\">\n");
} else {
print STDERR "Unknown map-server $SERVER, ignoring:\n";
print STDERR ("$op @array[2..$#array] $url\n");
}
} elsif ($SERVER eq "USEMAP") {
print MAP ("<AREA SHAPE=\"$op\" ALT=\"\" "
. "COORDS=\"@array[2],@array[3]\"\n HREF=\"@array[0]\">\n");
#
# Explicit URL's simply get copied.
#
} else {
print MAP ("$op @array[0] @array[2..$#array]\n");
}
}
}
#
# EOF on input. Finish up.
#
close (TEMPLATE);
print MAP "</MAP>\n" if ($SERVER eq "USEMAP");
close (MAP) if (length($map_file));
}
sub get_date {
local(@lt) = localtime;
local($d,$m,$y) = @lt[3,4,5];
sprintf("%d/%d/%d", $m+1, $d, 1900+$y);
}