]> granicus.if.org Git - apache/commitdiff
New CGI script to do single-neuron searching of the online
authorKen Coar <coar@apache.org>
Sun, 4 May 1997 20:48:40 +0000 (20:48 +0000)
committerKen Coar <coar@apache.org>
Sun, 4 May 1997 20:48:40 +0000 (20:48 +0000)
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

docs/manual/search/manual-index.cgi [new file with mode: 0644]

diff --git a/docs/manual/search/manual-index.cgi b/docs/manual/search/manual-index.cgi
new file mode 100644 (file)
index 0000000..8f54abc
--- /dev/null
@@ -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 <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 = "/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 = <<EOHT;
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+  <TITLE>$title
+  </TITLE>
+ </HEAD>
+ <BODY BGCOLOR="white">
+  <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="Word to find: ">
+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!");
+           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 = <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");
+           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 ("  <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;
+  <HR>
+ </BODY>
+</HTML>
+EOHT
+
+printf ($HTML);
+exit (0);