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.
107 lines
2.9 KiB
107 lines
2.9 KiB
//
|
|
// TemplateList.cc
|
|
//
|
|
//
|
|
// TemplateList: As it sounds--a list of search result templates. Reads the
|
|
// configuration and any template files from disk, then retrieves
|
|
// the relevant template for display.
|
|
//
|
|
// 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: TemplateList.cc,v 1.11 2004/05/28 13:15:24 lha Exp $
|
|
//
|
|
|
|
#ifdef HAVE_CONFIG_H
|
|
#include "htconfig.h"
|
|
#endif /* HAVE_CONFIG_H */
|
|
|
|
#include "TemplateList.h"
|
|
#include "URL.h"
|
|
#include "QuotedStringList.h"
|
|
|
|
//*****************************************************************************
|
|
TemplateList::TemplateList()
|
|
{
|
|
}
|
|
|
|
|
|
//*****************************************************************************
|
|
TemplateList::~TemplateList()
|
|
{
|
|
}
|
|
|
|
|
|
//*****************************************************************************
|
|
// Return the template that belongs to the given internal template
|
|
// name. If no template can be found, NULL is returned.
|
|
//
|
|
Template *
|
|
TemplateList::get(const String& internalName)
|
|
{
|
|
for (int i = 0; i < internalNames.Count(); i++)
|
|
{
|
|
const String *s = (const String *) internalNames[i];
|
|
if (mystrcasecmp(*s, internalName) == 0)
|
|
return (Template *) templates[i];
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
|
|
//*****************************************************************************
|
|
// Create a list of templates from a configuration string. The string
|
|
// will have triplets of: display name, internal name, and filename.
|
|
// There are two special cases for the internal name: builtin-long and
|
|
// builtin-short. These will cause a hardcoded template to be
|
|
// created. All other templates are read in from the specified
|
|
// filename.
|
|
//
|
|
int
|
|
TemplateList::createFromString(const String& str)
|
|
{
|
|
QuotedStringList sl(str, "\t \r\n");
|
|
String display, internal, file;
|
|
Template *t;
|
|
|
|
if ( sl.Count() % 3) return 0; // Make sure we have a multiple of three
|
|
|
|
for (int i = 0; i < sl.Count(); i += 3)
|
|
{
|
|
display = sl[i];
|
|
decodeURL(display);
|
|
internal = sl[i + 1];
|
|
file = sl[i + 2];
|
|
displayNames.Add(new String(display));
|
|
internalNames.Add(new String(internal));
|
|
|
|
t = new Template();
|
|
|
|
if (mystrcasecmp((char*)file, "builtin-long") == 0)
|
|
{
|
|
String s;
|
|
s << "<dl><dt><strong><a href=\"$&(URL)\">$&(TITLE)</a></strong>";
|
|
s << "$(STARSLEFT)\n";
|
|
s << "</dt><dd>$(EXCERPT)<br>\n";
|
|
s << "<em><a href=\"$&(URL)\">$&(URL)</a></em>\n";
|
|
s << " <font size=\"-1\">$(MODIFIED), $(SIZE) bytes</font>\n";
|
|
s << "</dd></dl>\n";
|
|
t->setMatchTemplate((char*)s);
|
|
}
|
|
else if (mystrcasecmp((char*)file, "builtin-short") == 0)
|
|
{
|
|
t->setMatchTemplate("$(STARSRIGHT) <strong><a href=\"$&(URL)\">$&(TITLE)</a></strong><br>\n");
|
|
}
|
|
else
|
|
{
|
|
t->createFromFile((char*)file);
|
|
}
|
|
templates.Add(t);
|
|
}
|
|
|
|
return 1;
|
|
}
|