mirror of
https://github.com/apache/httpd.git
synced 2025-05-17 15:21:13 +03:00
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@84875 13f79535-47bb-0310-9956-ffa450edef68
257 lines
7.2 KiB
Perl
257 lines
7.2 KiB
Perl
#!/usr/local/bin/perl5 -w
|
|
# ====================================================================
|
|
# The Apache Software License, Version 1.1
|
|
#
|
|
# Copyright (c) 2000 The Apache Software Foundation. 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. The end-user documentation included with the redistribution,
|
|
# if any, must include the following acknowledgment:
|
|
# "This product includes software developed by the
|
|
# Apache Software Foundation (http://www.apache.org/)."
|
|
# Alternately, this acknowledgment may appear in the software itself,
|
|
# if and wherever such third-party acknowledgments normally appear.
|
|
#
|
|
# 4. The names "Apache" and "Apache Software Foundation" must
|
|
# not be used to endorse or promote products derived from this
|
|
# software without prior written permission. For written
|
|
# permission, please contact apache@apache.org.
|
|
#
|
|
# 5. Products derived from this software may not be called "Apache",
|
|
# nor may "Apache" appear in their name, without prior written
|
|
# permission of the Apache Software Foundation.
|
|
#
|
|
# THIS SOFTWARE IS PROVIDED ``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 SOFTWARE FOUNDATION 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.
|
|
# ====================================================================
|
|
#
|
|
# This software consists of voluntary contributions made by many
|
|
# individuals on behalf of the Apache Software Foundation. For more
|
|
# information on the Apache Software Foundation, please see
|
|
# <http://www.apache.org/>.
|
|
#
|
|
# 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);
|