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);
}