Source Code (Use browser search to find items of interest.)
Class Index
khelpcenter'HTMLSearch (./kdebase/khelpcenter/khc_htmlsearch.h:30)
class HTMLSearch
{
public:
HTMLSearch(MatchList *list) { matchList = list;}
void search(const char *query);
private:
int processDir(const char *dirname, const char *query);
int processFiles(const char *dirname, const char *query);
int countOccurrences(const char *filename, const char *query);
QString readTitle(const char *filename);
private:
QString searchPath;
MatchList *matchList;
};
khelpcenter'HTMLSearch::readTitle() (./kdebase/khelpcenter/helpcenter/htmlsearch.cpp:33)
QString HTMLSearch::readTitle(const char *filename)
{
QString title;
QFile file(filename);
if (file.open(IO_ReadOnly))
{
QTextStream stream(&file);
QString buffer;
int pos;
do
{
buffer = stream.readLine();
if (stream.eof())
return filename;
}
while ((pos = buffer.find("<TITLE>", 0, FALSE)) < 0);
title = buffer.right(buffer.length() - pos - 7);
if ((pos = title.find("</TITLE>", 0, FALSE )) > 0)
title.truncate(pos);
else
{
do
{
buffer = stream.readLine();
title += buffer;
if (stream.eof())
return title;
}
while ((pos = buffer.find("</TITLE>", 0, FALSE)) < 0);
if ((pos = title.find("</TITLE>", 0, FALSE)) > 0)
title.truncate(pos);
}
}
return title;
}
khelpcenter'HTMLSearch::countOccurrences() (./kdebase/khelpcenter/helpcenter/htmlsearch.cpp:74)
int HTMLSearch::countOccurrences(const char *filename, const char *str)
{
int count = 0;
QString cmd = "grep -i -c "; // -i ignore case, -c count occurrences
cmd += str;
cmd += ' ';
cmd += filename;
FILE *fp = popen(cmd, "r");
if (fp)
{
char buffer[80];
fgets(buffer, 80, fp);
count = atoi(buffer);
while (!feof(fp)) fgetc(fp);
pclose(fp);
}
return count;
}
khelpcenter'HTMLSearch::processFiles() (./kdebase/khelpcenter/helpcenter/htmlsearch.cpp:99)
int HTMLSearch::processFiles(const char *dirname, const char *query)
{
QDir files(dirname, "*.html", 0, QDir::Files | QDir::Readable);
if (!files.exists())
return 0;
QStringList fileList = files.entryList();
QStringList::Iterator itFile;
for ( itFile = fileList.begin(); !itFile->isNull(); ++itFile)
{
QString filename = dirname;
filename += "/";
filename += *itFile;
int weight = countOccurrences(filename, query);
if (weight > 1)
{
QString url = "file:";
url += filename;
QString title = readTitle(filename);
Match *match = new Match(title, url);
match->setWeight(weight);
matchList->inSort(match);
}
}
return 1;
}
khelpcenter'HTMLSearch::processDir() (./kdebase/khelpcenter/helpcenter/htmlsearch.cpp:132)
int HTMLSearch::processDir(const char *dirname, const char *query)
{
QDir dir(dirname, "*", 0, QDir::Dirs);
if (!dir.exists())
return 0;
QStringList dirList = dir.entryList();
QStringList::Iterator itDir;
for ( itDir = dirList.begin(); !itDir->isNull(); ++itDir)
{
if (itDir->at(0) == '.')
continue;
QString filename = dirname;
filename += "/";
filename += *itDir;
processFiles(filename, query);
processDir(filename, query);
}
return 1;
}
khelpcenter'HTMLSearch::search() (./kdebase/khelpcenter/helpcenter/htmlsearch.cpp:157)
void HTMLSearch::search (const char *query)
{
cerr << "HTMLSearch::search not implemented\n";
/*
QString dir = KApplication::kde_htmldir();
dir += "/en/"; //change this for i18n!!!
processDir(dir, query);
*/
}
khelpcenter'HTMLSearch::readTitle() (./kdebase/khelpcenter/khc_htmlsearch.cc:35)
QString HTMLSearch::readTitle(const char *filename)
{
QString title;
QFile file(filename);
if (file.open(IO_ReadOnly))
{
QTextStream stream(&file);
QString buffer;
int pos;
do
{
buffer = stream.readLine();
if (stream.eof())
return filename;
}
while ((pos = buffer.find("<TITLE>", 0, FALSE)) < 0);
title = buffer.right(buffer.length() - pos - 7);
if ((pos = title.find("</TITLE>", 0, FALSE )) > 0)
title.truncate(pos);
else
{
do
{
buffer = stream.readLine();
title += buffer;
if (stream.eof())
return title;
}
while ((pos = buffer.find("</TITLE>", 0, FALSE)) < 0);
if ((pos = title.find("</TITLE>", 0, FALSE)) > 0)
title.truncate(pos);
}
}
return title;
}
khelpcenter'HTMLSearch::countOccurrences() (./kdebase/khelpcenter/khc_htmlsearch.cc:76)
int HTMLSearch::countOccurrences(const char *filename, const char *str)
{
int count = 0;
QString cmd = "grep -i -c "; // -i ignore case, -c count occurrences
cmd += str;
cmd += ' ';
cmd += filename;
FILE *fp = popen(cmd, "r");
if (fp)
{
char buffer[80];
fgets(buffer, 80, fp);
count = atoi(buffer);
while (!feof(fp)) fgetc(fp);
pclose(fp);
}
return count;
}
khelpcenter'HTMLSearch::processFiles() (./kdebase/khelpcenter/khc_htmlsearch.cc:101)
int HTMLSearch::processFiles(const char *dirname, const char *query)
{
QDir files(dirname, "*.html", 0, QDir::Files | QDir::Readable);
if (!files.exists())
return 0;
QStringList fileList = files.entryList();
QStringList::Iterator itFile;
for ( itFile = fileList.begin(); !(*itFile).isNull(); ++itFile)
{
QString filename = dirname;
filename += "/";
filename += *itFile;
int weight = countOccurrences(filename, query);
if (weight > 1)
{
QString url = "file:";
url += filename;
QString title = readTitle(filename);
Match *match = new Match(title, url);
match->setWeight(weight);
matchList->inSort(match);
}
}
return 1;
}
khelpcenter'HTMLSearch::processDir() (./kdebase/khelpcenter/khc_htmlsearch.cc:134)
int HTMLSearch::processDir(const char *dirname, const char *query)
{
QDir dir(dirname, "*", 0, QDir::Dirs);
if (!dir.exists())
return 0;
QStringList dirList = dir.entryList();
QStringList::Iterator itDir;
for ( itDir = dirList.begin(); !(*itDir).isNull(); ++itDir)
{
if ((*itDir).at(0) == '.')
continue;
QString filename = dirname;
filename += "/";
filename += *itDir;
processFiles(filename, query);
processDir(filename, query);
}
return 1;
}
khelpcenter'HTMLSearch::search() (./kdebase/khelpcenter/khc_htmlsearch.cc:159)
void HTMLSearch::search (const char *query)
{
QStringList list = KGlobal::dirs()->findDirs("html", "default");
for( QStringList::Iterator it=list.begin(); it!=list.end(); it++)
processDir(*it, query);
}