#!/usr/bin/perl
# Given an HTML file and a list of names, add hyperlinks to all
# occurances of each name in the list.
#
# David Edwards <edwards@dee-engineering.com> Wed Jan 24 21:33:15 EST 2001
# Ver 1.1 - Sat Jun 9 21:56:16 EDT 2001
$SRC_EXT='.c';
$HTML_EXT='.html';
$EMAIL='edwards@dee-engineering.com';
#
# Check for proper number of arguments on command line.
#
if ( scalar @ARGV < 2) {
$prog_name = $0;
$prog_name =~ s/^.*\///;
# Do :set ts=8 before modifying the below help
print << "END";
Usage: $prog_name name_list source_file(s)...
name_list
Path spec of a file with one name per line. The source
files are searched for all names in name_list and made
into hyper links.
source_file(s)...
List of one or more HTML files to serach through.
Exmample:
$prog_name dependency.lst *.htm?
This example will search all HTML for each name in
"dependency.lst" change it from "name" to:
<a href="name.c.html">name<\\a>
Each occurance of $EMAIL is also changed
to a mailto tag.
NOTE: If an entry in name_list has a period in it, then
"$SRC_EXT" will not be appended to the link name.
END
exit 1;
}
#
# Read in the name list
#
open(IN,"$ARGV[0]") || die "Unable to open $ARGV[0]: $!";
while (<IN>) {
chomp($_);
push(@names,$_);
}
close(IN) || warn "Problem closing $ARGV[0]: $!\n";
shift(@ARGV); # Discard uneeded name_list
#
# Search through all the input files
#
foreach $fname (@ARGV) {
print "Processing $fname\n";
unless (open(IN,"$fname")) {
warn "Unable to open $fname: $!";
next;
}
open(OUT,">$fname.tmp") || die "Unable to create $fname.tmp: $!";
while (<IN>) {
foreach $name (@names) {
if ($name =~ /\./) {
s/(\b)$name(\b)/$1<a href="$name$HTML_EXT">$name<\/a>$2/g;
} else {
s/(\b)$name(\b)/$1<a href="$name$SRC_EXT$HTML_EXT">$name<\/a>$2/g;
};
}
s/\Q$EMAIL\E/<a href="mailto:$EMAIL">$EMAIL<\/a>/g;
print OUT;
}
close(IN);
close(OUT);
}