You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
239 lines
5.5 KiB
239 lines
5.5 KiB
//
|
|
// Display.h
|
|
//
|
|
// Display: Takes results of search and fills in the HTML templates
|
|
//
|
|
// Part of the ht://Dig package <http://www.htdig.org/>
|
|
// Copyright (c) 1995-2004 The ht://Dig Group
|
|
// For copyright details, see the file COPYING in your distribution
|
|
// or the GNU Library General Public License (LGPL) version 2 or later
|
|
// <http://www.gnu.org/copyleft/lgpl.html>
|
|
//
|
|
// $Id: Display.h,v 1.27 2004/05/28 13:15:24 lha Exp $
|
|
//
|
|
|
|
#ifndef _Display_h_
|
|
#define _Display_h_
|
|
|
|
#include "Object.h"
|
|
#include "ResultList.h"
|
|
#include "ResultMatch.h"
|
|
#include "TemplateList.h"
|
|
#include "cgi.h"
|
|
#include "StringMatch.h"
|
|
#include "List.h"
|
|
#include "DocumentDB.h"
|
|
#include "Database.h"
|
|
#include "Dictionary.h"
|
|
#include "HtRegex.h"
|
|
|
|
class Display : public Object
|
|
{
|
|
public:
|
|
//
|
|
// Construction/Destruction
|
|
//
|
|
// Display(const String& docFile, const String& indexFile, const String& excerptFile);
|
|
|
|
Display(Dictionary *selected_collections);
|
|
~Display();
|
|
|
|
void setStartTemplate(const String& templateName);
|
|
void setMatchTemplate(const String& templateName);
|
|
void setEndTemplate(const String& templateName);
|
|
|
|
// inline void setResults(ResultList *results);
|
|
// inline void setSearchWords(List *searchWords);
|
|
inline void setLimit(HtRegex *);
|
|
inline void setExclude(HtRegex *);
|
|
// inline void setAllWordsPattern(StringMatch *);
|
|
inline void setLogicalWords(char *);
|
|
inline void setOriginalWords(char *);
|
|
inline void setCGI(cgi *);
|
|
|
|
void display(int pageNumber);
|
|
void displayMatch(ResultMatch *match, DocumentRef *ref, int current);
|
|
void displayHTTPheaders();
|
|
void displayHeader();
|
|
void displayFooter();
|
|
void displayNomatch();
|
|
void displaySyntaxError(const String &);
|
|
|
|
int hasTemplateError() {return templateError;}
|
|
|
|
protected:
|
|
//
|
|
// Multiple database support
|
|
//
|
|
Dictionary *selected_collections;
|
|
|
|
//
|
|
// Search Policy
|
|
char *search_policy;
|
|
|
|
//
|
|
// The list of search results.
|
|
//
|
|
// ResultList *results;
|
|
|
|
//
|
|
// The database that contains documents.
|
|
//
|
|
// DocumentDB docDB;
|
|
|
|
//
|
|
// A list of words that we are searching for
|
|
//
|
|
// List *searchWords;
|
|
|
|
//
|
|
// Pattern that all result URLs must match or exclude
|
|
//
|
|
HtRegex *limitTo;
|
|
HtRegex *excludeFrom;
|
|
|
|
//
|
|
// Pattern of all the words
|
|
//
|
|
// StringMatch *allWordsPattern;
|
|
|
|
//
|
|
// Variables for substitution into text are stored in a dictionary
|
|
//
|
|
Dictionary vars;
|
|
|
|
//
|
|
// Since the creation of excerpts is somewhat time consuming, we will
|
|
// only compute them if they're actually going to be used. This is the
|
|
// flag that tells us if we will need the excerpt.
|
|
//
|
|
int needExcerpt;
|
|
|
|
//
|
|
// Since we might have errors we cannot recover from, this tells us
|
|
// what happened.
|
|
//
|
|
int templateError;
|
|
|
|
//
|
|
// To allow the result templates to be dependant on the match URL, we need
|
|
// the following:
|
|
//
|
|
StringMatch URLtemplate;
|
|
List URLtemplateList;
|
|
|
|
//
|
|
// To allow the star images to be dependant on the match URL, we need
|
|
// the following:
|
|
//
|
|
StringMatch URLimage;
|
|
List URLimageList;
|
|
|
|
//
|
|
// Maximum number of stars to display
|
|
//
|
|
int maxStars;
|
|
double maxScore;
|
|
double minScore;
|
|
|
|
//
|
|
// For display, we have different versions of the list of words.
|
|
//
|
|
String logicalWords;
|
|
String originalWords;
|
|
|
|
//
|
|
// To be able to recreate the URL that will get to us again, we need
|
|
// the info from the HTML form that called us.
|
|
//
|
|
cgi *input;
|
|
|
|
//
|
|
// Match output is done through templates. This is the interface to these
|
|
// templates.
|
|
//
|
|
TemplateList templates;
|
|
Template *currentTemplate;
|
|
|
|
//
|
|
// Methods...
|
|
//
|
|
List *buildMatchList();
|
|
void sort(List *);
|
|
|
|
int includeURL(const String&);
|
|
String *readFile(const String&);
|
|
void expandVariables(const String&);
|
|
void outputVariable(const String&);
|
|
String *excerpt(ResultMatch *match, DocumentRef *ref,
|
|
String urlanchor, int fanchor, int &first);
|
|
const String buildExcerpts(StringMatch *allWordsPattern,
|
|
ResultMatch *match, char *head,
|
|
String urlanchor, int fanchor );
|
|
String hilight(ResultMatch *match, const String& str,
|
|
const String& urlanchor, int fanchor);
|
|
void setupTemplates();
|
|
void setupImages();
|
|
String *generateStars(DocumentRef *, int);
|
|
void displayParsedFile(const String&);
|
|
void setVariables(int, List *);
|
|
void createURL(String &, int);
|
|
void logSearch(int, List *);
|
|
};
|
|
|
|
//*****************************************************************************
|
|
inline void
|
|
Display::setLimit(HtRegex *limit)
|
|
{
|
|
limitTo = limit;
|
|
}
|
|
|
|
inline void
|
|
Display::setExclude(HtRegex *exclude)
|
|
{
|
|
excludeFrom = exclude;
|
|
}
|
|
|
|
#if 0
|
|
inline void
|
|
Display::setAllWordsPattern(StringMatch *pattern)
|
|
{
|
|
allWordsPattern = pattern;
|
|
}
|
|
|
|
inline void
|
|
Display::setResults(ResultList *results)
|
|
{
|
|
this->results = results;
|
|
}
|
|
|
|
inline void
|
|
Display::setSearchWords(List *searchWords)
|
|
{
|
|
this->searchWords = searchWords;
|
|
}
|
|
#endif
|
|
|
|
inline void
|
|
Display::setLogicalWords(char *s)
|
|
{
|
|
logicalWords = s;
|
|
vars.Add("LOGICAL_WORDS", new String(logicalWords));
|
|
}
|
|
|
|
inline void
|
|
Display::setOriginalWords(char *s)
|
|
{
|
|
originalWords = s;
|
|
vars.Add("WORDS", new String(originalWords));
|
|
}
|
|
|
|
inline void
|
|
Display::setCGI(cgi *aCgi)
|
|
{
|
|
input = aCgi;
|
|
}
|
|
|
|
#endif
|
|
|