Blame maint/createhtmlindex.in

Packit 0848f5
#! /usr/bin/env perl
Packit 0848f5
# -*- mode: perl; -*-
Packit 0848f5
#
Packit 0848f5
# Create an index of web pages for MPICH
Packit 0848f5
#
Packit 0848f5
# Default values
Packit 0848f5
# Root for the pages
Packit 0848f5
$WWWRoot=`pwd`;
Packit 0848f5
chop $WWWRoot;
Packit 0848f5
# Base address (installation address)
Packit 0848f5
# $URLBase = "http://";
Packit 0848f5
# End of line character (\r\n is DOS-friendly)
Packit 0848f5
$eol = "\r\n";
Packit 0848f5
# Number of colums in table of names
Packit 0848f5
$TableCols = 3;
Packit 0848f5
#
Packit 0848f5
# Process arguments for any changes
Packit 0848f5
foreach $_ (@ARGV) {
Packit 0848f5
    if (/-?(-[^=]*)=(.*)/) {
Packit 0848f5
	$argname = $1;
Packit 0848f5
	$argval  = $2;
Packit 0848f5
    }
Packit 0848f5
    else {
Packit 0848f5
	$argname = $1;
Packit 0848f5
	$argval  = "";
Packit 0848f5
    }
Packit 0848f5
    if ($argname =~ /-wwwroot/) {
Packit 0848f5
	$WWWRoot = $argval;
Packit 0848f5
    }
Packit 0848f5
    elsif ($argname =~ /-urlbase/) {
Packit 0848f5
	$URLBase = $argval;
Packit 0848f5
    }
Packit 0848f5
    elsif ($argname eq "-help") {
Packit 0848f5
	print STDOUT "createhtmlindex [ -wwwroot=directory ] [ -urlbase=base ]\n";
Packit 0848f5
	print STDOUT "Build the www index pages for MPICH.";
Packit 0848f5
	print STDOUT "This must be run in the root of an MPICH tree; it may\n
Packit 0848f5
be run in a VPATH directory after configuring.\n";
Packit 0848f5
	exit 1;
Packit 0848f5
    }
Packit 0848f5
    else {
Packit 0848f5
	print STDERR "Unknown argument $_\n";
Packit 0848f5
	exit 1;
Packit 0848f5
    }
Packit 0848f5
}
Packit 0848f5
Packit 0848f5
# Create the main index
Packit 0848f5
open( OUTFD, ">$WWWRoot/www/index.html" ) ||
Packit 0848f5
    die "Cannot open $WWWRoot/www/index.html\n";
Packit 0848f5
Packit 0848f5
&AddHeader( "Web pages for MPI" );
Packit 0848f5
Packit 0848f5
print OUTFD "

MPI Commands

$eol";
Packit 0848f5
&AddDirectoryContents( "www", "www1" );
Packit 0848f5
Packit 0848f5
print OUTFD "

MPI Routines and Constants

$eol";
Packit 0848f5
if (-f "www/www3/mpi.cit") {
Packit 0848f5
    &createRedirects("www/www3", "mpi.cit");
Packit 0848f5
}
Packit 0848f5
else {
Packit 0848f5
    print STDERR "Could not find mapping file\n";
Packit 0848f5
}
Packit 0848f5
&AddDirectoryContents( "www", "www3" );
Packit 0848f5
Packit 0848f5
#print OUTFD "

MPE Routines

$eol";
Packit 0848f5
#&AddDirectoryContents( "www", "www4" );
Packit 0848f5
Packit 0848f5
&AddTrailer( );
Packit 0848f5
Packit 0848f5
close( OUTFD );
Packit 0848f5
Packit 0848f5
# Create the sectional indices
Packit 0848f5
open( OUTFD, ">$WWWRoot/www/www1/index.htm" ) ||
Packit 0848f5
    die "Cannot open $WWWRoot/www/www1/index.htm\n";
Packit 0848f5
Packit 0848f5
&AddHeader( "Manpages for MPICH" );
Packit 0848f5
&AddDirectoryContents( "www/www1", "." );
Packit 0848f5
&AddTrailer( );
Packit 0848f5
close( OUTFD );
Packit 0848f5
Packit 0848f5
open( OUTFD, ">$WWWRoot/www/www3/index.htm" ) ||
Packit 0848f5
    die "Cannot open $WWWRoot/www/www3/index.htm\n";
Packit 0848f5
Packit 0848f5
&AddHeader( "Web pages for MPI Routines and Constants" );
Packit 0848f5
&AddDirectoryContents( "www/www3", "." );
Packit 0848f5
&AddTrailer( );
Packit 0848f5
close( OUTFD );
Packit 0848f5
Packit 0848f5
# open( OUTFD, ">$WWWRoot/www/www4/index.htm" ) ||
Packit 0848f5
#     die "Cannot open $WWWRoot/www/www4/index.htm\n";
Packit 0848f5
Packit 0848f5
# &AddHeader( "Web pages for MPE Routines" );
Packit 0848f5
# &AddDirectoryContents( "www/www4", "." );
Packit 0848f5
# &AddTrailer( );
Packit 0848f5
# close( OUTFD );
Packit 0848f5
Packit 0848f5
Packit 0848f5
0;
Packit 0848f5
# ---------------------------------------------------------------------------
Packit 0848f5
# Support routines.
Packit 0848f5
# All write to OUTFD and use $eol for end-of-line
Packit 0848f5
# ---------------------------------------------------------------------------
Packit 0848f5
sub AddHeader {
Packit 0848f5
    my $title = $_[0];
Packit 0848f5
    print OUTFD "<HTML>$eol<HEAD>$eol<TITLE>$title</TITLE>$eol";
Packit 0848f5
    print OUTFD "$eol";
Packit 0848f5
    print OUTFD "</HEAD>$eol<BODY BGCOLOR=\"FFFFFF\">$eol";
Packit 0848f5
    print OUTFD "

$title

$eol";
Packit 0848f5
}
Packit 0848f5
Packit 0848f5
sub AddTrailer {
Packit 0848f5
    print OUTFD "</BODY>$eol</HTML>$eol";
Packit 0848f5
}
Packit 0848f5
Packit 0848f5
# For the items (mostly MPI constants) that are within a single web page,
Packit 0848f5
# create a redirect page for them.  This allows us to point to a location
Packit 0848f5
# on the page, rather than just a page which is what a file link would
Packit 0848f5
# accomplish
Packit 0848f5
sub createRedirects {
Packit 0848f5
    $rootdir = $_[0];
Packit 0848f5
    $mapfile = $_[1];
Packit 0848f5
    open( MAPFD, "<$rootdir/$mapfile" ) || die "Cannot open map file $mapfile\n";
Packit 0848f5
    while (<MAPFD>) {
Packit 0848f5
	@fields = split(/\+/);
Packit 0848f5
	$name = $fields[1];
Packit 0848f5
	$url  = $fields[8];
Packit 0848f5
	if ($url =~ /(.*)\/([^\/]*)\.([HTMLhtml]*)#(.*)/) {
Packit 0848f5
	    $rooturl  = $1;
Packit 0848f5
	    $basefile = $2;
Packit 0848f5
	    $ext      = $3;
Packit 0848f5
	    $anchor   = $4;
Packit 0848f5
	    if ($basefile ne $anchor) {
Packit 0848f5
		open(RFD, ">$rootdir/$anchor.htm") || die "Cannot open redirect file $anchor.htm\n";
Packit 0848f5
		print RFD "<html><head><meta http-equiv=\"refresh\" content=\"0; url=$basefile.$ext#$anchor\" /></head></html>\n";
Packit 0848f5
		close RFD;
Packit 0848f5
	    }
Packit 0848f5
	}
Packit 0848f5
	else {
Packit 0848f5
	    print STDERR "Could not decode $url\n";
Packit 0848f5
	}
Packit 0848f5
Packit 0848f5
    }
Packit 0848f5
    close MAPFD;
Packit 0848f5
}
Packit 0848f5
Packit 0848f5
# Take all .htm and .html files and add them to the OUTFD file.
Packit 0848f5
# This works in two steps:
Packit 0848f5
# 1. Read and sort the contents of the directory into the array
Packit 0848f5
# @HTMLFiles
Packit 0848f5
# 2. Use the routine MakeHTMLTable to create a table with a given
Packit 0848f5
# number of columns, adding the links within the columns
Packit 0848f5
@HTMLFiles = ();
Packit 0848f5
# Look in $1/$2 for files, but make links relative to $2
Packit 0848f5
sub AddDirectoryContents {
Packit 0848f5
    my $rootdir = $_[0];
Packit 0848f5
    my $dirname = $_[1];
Packit 0848f5
Packit 0848f5
    # 1 Read the files
Packit 0848f5
    @HTMLFiles = ();
Packit 0848f5
    opendir DIR, "$rootdir/$dirname";
Packit 0848f5
    if ($dirname eq ".") {
Packit 0848f5
	$prefixname = "";
Packit 0848f5
    }
Packit 0848f5
    else {
Packit 0848f5
	$prefixname = "$dirname/";
Packit 0848f5
    }
Packit 0848f5
    while ($filename = readdir DIR) {
Packit 0848f5
	if ($filename =~ /index\.html?/) { next; }
Packit 0848f5
	if ($filename =~ /.*\.html?$/) {
Packit 0848f5
	    $HTMLFiles[$#HTMLFiles+1] = "$prefixname$filename";
Packit 0848f5
	}
Packit 0848f5
    }
Packit 0848f5
    closedir DIR;
Packit 0848f5
Packit 0848f5
    @HTMLFiles = sort( @HTMLFiles );
Packit 0848f5
Packit 0848f5
    # Format the table
Packit 0848f5
    &MakeHTMLTable;
Packit 0848f5
}
Packit 0848f5
# MakeHTMLTable takes an array of items and turns them into a table with
Packit 0848f5
# $TableCols columns.
Packit 0848f5
#
Packit 0848f5
sub MakeHTMLTable {
Packit 0848f5
    my $nvals = $#HTMLFiles;
Packit 0848f5
Packit 0848f5
    my $nrows = int ( ($nvals + $TableCols - 1) / $TableCols );
Packit 0848f5
    print OUTFD "$eol";
Packit 0848f5
    for ($j=0; $j<$nrows; $j++) {
Packit 0848f5
	print OUTFD "";
Packit 0848f5
	for ($e=0; $e<$TableCols; $e++) {
Packit 0848f5
	    $filename = $HTMLFiles[$j + $e * $nrows];
Packit 0848f5
	    $linkname = $filename;
Packit 0848f5
	    $linkname =~ s/\.html?//;
Packit 0848f5
	    $linkname =~ s/.*\///;
Packit 0848f5
	    if ($filename ne "") {
Packit 0848f5
		$line = "$linkname";
Packit 0848f5
	    }
Packit 0848f5
	    else {
Packit 0848f5
		$line = "";
Packit 0848f5
	    }
Packit 0848f5
	    print OUTFD "$line$eol";
Packit 0848f5
	}
Packit 0848f5
	print OUTFD "$eol";
Packit 0848f5
    }
Packit 0848f5
    print OUTFD "$eol";
Packit 0848f5
}