#!/usr/bin/perl5 -w # ==================================================================== # Copyright (c) 1995-2000 The Apache Group. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in # the documentation and/or other materials provided with the # distribution. # # 3. All advertising materials mentioning features or use of this # software must display the following acknowledgment: # "This product includes software developed by the Apache Group # for use in the Apache HTTP server project (http://httpd.apache.org/)." # # 4. The names "Apache Server" and "Apache Group" must not be used to # endorse or promote products derived from this software without # prior written permission. # # 5. Redistributions of any form whatsoever must retain the following # acknowledgment: # "This product includes software developed by the Apache Group # for use in the Apache HTTP server project (http://httpd.apache.org/)." # # THIS SOFTWARE IS PROVIDED BY THE APACHE GROUP ``AS IS'' AND ANY # EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR # PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE APACHE GROUP OR # ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT # NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, # STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED # OF THE POSSIBILITY OF SUCH DAMAGE. # ==================================================================== # # manual-index.cgi script # originally written by Ken Coar <Coar@DECUS.Org> in May 1997 # # This script either displays a form in order to find documents in which # a word appears, or displays the results of such a search. It is # called as a CGI script. # # [FILE]PATH_INFO is the prefix to add to to the files names found in # the index (URL prefix, not filesystem prefix), and QUERY_STRING is the # word to be found. # #*** #*** # You may need to tweak the following line to point to the correct # location of the index file on your system (it's in the # apache/htdocs/manual directory of the Apache distribution tree). #*** #*** $INDEX = "/www/apache.org/manual-index-data"; #*** #*** # You shouldn't have to modify anything else. #*** #*** $HTML = ""; # # If we have a FILEPATH_INFO or PATH_INFO, it's there to remap the # documents to the manual root directory. If this script is already in # that directory, this isn't needed. # $prefix = $ENV{'FILEPATH_INFO'} || $ENV{'PATH_INFO'}; $prefix .= "/" if ($prefix && ($prefix !~ m:/$:)); # # QUERY_STRING, if present, contains the word for which we are to # search. We also use its [non]presence to determine wha we display. # $word = $ENV{'QUERY_STRING'}; # # Make sure our HTTP header makes it to the server by causing Perl to do # a fflush() after every write to STDOUT. # select (STDOUT); $| = 1; printf ("Content-type: text/html\n\n"); # # Fine, now buffering can go back to normal. # $| = 0; # # Set up the HTML page title $title = "Apache Documentation Search"; $title .= ": Results for \"$word\"" if ($word); # # We'll re-use the HTML scalar several times; we use it with here # documents for multi-line static HTML code. Lets' do the standard page # header. # $HTML = <<EOHT; <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> <HTML> <HEAD> <TITLE>$title </TITLE> </HEAD> <!-- Background white, links blue (unvisited), navy (visited), red (active) --> <BODY BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#000080" ALINK="#FF0000" > <DIV ALIGN="CENTER"> <IMG SRC="${prefix}images/sub.gif" ALT="" > </DIV> <H1 ALIGN="CENTER"> Apache Documentation Search </H1> <P> This script performs a very simple search across the Apache documentation for any single case-insensitive word. No combinations, wildcards, regular expressions, word-stubbing, or other fancy options are supported; this is just to help you find topics quickly. Only those pages which include the <EM>exact</EM> word you type will be listed. </P> <P> Documents containing the search word are <EM>not</EM> listed in any sort of priority order. </P> <ISINDEX PROMPT="Enter word to find and press ENTER: "> EOHT printf ($HTML); # # Now set up the next section, which is only displayed if we've been # given a word to find. # $HTML = <<EOHT; <HR> <H2> Results of Search for <SAMP>$word</SAMP> </H2> EOHT # # We enblock the next section so problems can drop out to the common # closure code. # QUERY: { if ($word) { # # Try and open the index file; complain bitterly if we can't. # if (! open (INDEX, "<$INDEX")) { printf ("Can't find documentation index!"); last QUERY; } # # Got it; display the search-results header. # printf ($HTML); # # Read the entire index in and turn it into an hash for the # lookup. # @index = <INDEX>; close (INDEX); chomp (@index); foreach (@index) { ($key, $files) = split (/:/, $_); $Index{$key} = $files; } # # The dictionary is all lowercase words. Smash our query value # and try to find it. # $word = lc ($word); if (! exists ($Index{$word})) { printf (" <P>\n <EM>Sorry, no matches found.</EM>\n </P>\n"); last QUERY; } # # Found an entry, so turn the hash value (a comma-separated list # of relative file names) into an array for display. # Incidentally, tell the user how many there are. # @files = split (/,/, $Index{$word}); printf (" <P>Total of %d match", scalar (@files)); # # Be smart about plurals. # if (scalar (@files) != 1) { printf ("es") ; } printf (" found.\n </P>\n"); # # Right. Now display the files as they're listed. # printf (" <OL>\n"); foreach (@files) { printf (" <LI><A HREF=\"${prefix}$_\">"); printf ("<SAMP>$_</SAMP></A>\n"); printf (" </LI>\n"); } printf (" </OL>\n"); # # C'est tout! # } } # # Back to common code - the exit path. Display the page trailer. # $HTML = <<EOHT; <A HREF="/" ><IMG SRC="/images/apache_home.gif" ALT="Home" ></A> <HR> </BODY> </HTML> EOHT printf ($HTML); exit (0);