From: Ken Coar Date: Sun, 4 May 1997 20:48:40 +0000 (+0000) Subject: New CGI script to do single-neuron searching of the online X-Git-Tag: APACHE_1_2b11~18 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=c2860838d923e32953f755ba6058d04ebb6f4f86;p=apache New CGI script to do single-neuron searching of the online documentation (actually, of a pre-built index of same). git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@78105 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/docs/manual/search/manual-index.cgi b/docs/manual/search/manual-index.cgi new file mode 100644 index 0000000000..8f54abcdd9 --- /dev/null +++ b/docs/manual/search/manual-index.cgi @@ -0,0 +1,229 @@ +#!/usr/local/bin/perl -w +# ==================================================================== +# Copyright (c) 1995-1997 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://www.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://www.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 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 = "/export/pub/apache/docs/index.txt"; + +#*** +#*** +# You shouldn't have to modify anything else. +#*** +#*** + +# +# 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 statis HTML code. Lets' do the standard page +# header. +# +$HTML = < + + + $title + + + +
+ +
+

+ Apache Documentation Search +

+

+ 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 exact word you type will be + listed. +

+

+ Documents containing the search word are not listed in any + sort of priority order. +

+ +EOHT + +printf ($HTML); + +# +# Now set up the next section, which is only displayed if we've been +# given a word to find. +# +$HTML = < +

+ Results of Search for $word +

+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!"); + leave 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 = ; + 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 ("

\n Sorry, no matches found.\n

\n"); + leave 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 ("

Total of %d match", scalar (@files)); + # + # Be smart about plurals. + # + if (scalar (@files) != 1) { + printf ("es") ; + } + printf (" found.\n

\n"); + # + # Right. Now display the files as they're listed. + # + printf ("
    \n"); + foreach (@files) { + printf ("
  1. "); + printf ("$_\n"); + printf ("
  2. \n"); + } + printf ("
\n"); + # + # C'est tout! + # + } + +# +# Back to common code - the exit path. Display the page trailer. +# +$HTML = < + + +EOHT + +printf ($HTML); +exit (0);