#!/bin/sh
# Arguments:
# $1 = directory to search in
# $2 = filename to produce
# $3- = search string
if test -z "$1"; then
echo "Search error : missing files to search"
exit -1
fi
if test -z "$2"; then
echo "Search error : missing target filename"
exit -1
fi
if test -z "$3"; then
echo "Search error : missing search string"
exit -1
fi
# Build the search criteria string...not so funky, but works
SEARCH_CRITERIA="$3"
SEARCH_WORDS="$3"
if test -n "$4"; then
SEARCH_WORDS="$SEARCH_WORDS $4"
SEARCH_CRITERIA="$SEARCH_CRITERIA AND $4"
fi
if test -n "$5"; then
SEARCH_WORDS="$SEARCH_WORDS $5"
SEARCH_CRITERIA="$SEARCH_CRITERIA AND $5"
fi
if test -n "$6"; then
SEARCH_WORDS="$SEARCH_WORDS $6"
SEARCH_CRITERIA="$SEARCH_CRITERIA AND $6"
fi
if test -n "$7"; then
SEARCH_WORDS="$SEARCH_WORDS $7"
SEARCH_CRITERIA="$SEARCH_CRITERIA AND $7"
fi
if test -n "$8"; then
SEARCH_WORDS="$SEARCH_WORDS $8"
SEARCH_CRITERIA="$SEARCH_CRITERIA AND $8"
fi
if test -n "$9"; then
SEARCH_WORDS="$SEARCH_WORDS $9"
SEARCH_CRITERIA="$SEARCH_CRITERIA AND $9"
fi
DOCUMENT="
Search results
KVirc documentation
Search results for \"$SEARCH_CRITERIA\" |
"
FILES_TO_SEARCH=`find $1 -name "*.html"`
if test -z "$FILES_TO_SEARCH"; then
DOCUMENT="$DOCUMENT Internal error: no files to search
Main index"
echo "$DOCUMENT" > $2
exit 0
fi
# Now grep the files
SEARCH_RESULT=""
for a_word in $SEARCH_WORDS; do
if test -z "$SEARCH_RESULT"; then
SEARCH_RESULT=`grep -i -l $a_word $FILES_TO_SEARCH`
else
SEARCH_RESULT=`grep -i -l $a_word $SEARCH_RESULT`
fi
if test -z "$SEARCH_RESULT"; then
DOCUMENT="$DOCUMENT No matches found |
Main index"
echo "$DOCUMENT" > $2
exit 0
fi
done
DOCS_COUNT="0"
for a_file in $SEARCH_RESULT; do
RESULT_DESCRIPTION="["
for a_word in $SEARCH_WORDS; do
WORD_MATCHES=`grep -i -h -c $a_word "$a_file"`
RESULT_DESCRIPTION="$RESULT_DESCRIPTION $a_word:$WORD_MATCHES "
done
RESULT_DESCRIPTION="$RESULT_DESCRIPTION ]"
DOC_TITLE=`grep -i -h "" "$a_file" | sed -e 's/title/b/g'`
if test -z "$DOC_TITLE"; then
DOC_TITLE="Untitled"
fi
DOC_PREMATCH=`grep -i -h -A 30 "searchbody" "$a_file" | tac | tail -n 30 | tac`
DOC_MATCH=`echo "$DOC_PREMATCH" | sed -e 's/<[a-zA-Z0-9 _ \=\"\#\%\&\/\.]*>/ /g'`
DOC_MATCH=`echo "$DOC_MATCH" | sed -e 's/\</g'`
DOC_MATCH=`echo "$DOC_MATCH" | sed -e 's/>/\>/g'`
DOC_MATCH=`echo "$DOC_MATCH" | grep -h "[a-zA-Z0-9{}]"`
DOC_MATCH=`echo "$DOC_MATCH" | sed -e 's/^[ ]*//'`
DOC_MATCH=`echo "$DOC_MATCH" | tac | tail -n 10 | tac`
if test -z "$DOC_MATCH"; then
DOC_MATCH="No document body found"
fi
DOCS_COUNT=`expr $DOCS_COUNT + 1`
DOCUMENT="$DOCUMENT $DOCS_COUNT. $DOC_TITLE
...$DOC_MATCH...
$RESULT_DESCRIPTION |
"
done
DOCUMENT="$DOCUMENT
Found $DOCS_COUNT matches