|
Packit |
1c1d7e |
/******************************************************************************
|
|
Packit |
1c1d7e |
*
|
|
Packit |
1c1d7e |
*
|
|
Packit |
1c1d7e |
*
|
|
Packit |
1c1d7e |
* Copyright (C) 1997-2015 by Dimitri van Heesch.
|
|
Packit |
1c1d7e |
*
|
|
Packit |
1c1d7e |
* Permission to use, copy, modify, and distribute this software and its
|
|
Packit |
1c1d7e |
* documentation under the terms of the GNU General Public License is hereby
|
|
Packit |
1c1d7e |
* granted. No representations are made about the suitability of this software
|
|
Packit |
1c1d7e |
* for any purpose. It is provided "as is" without express or implied warranty.
|
|
Packit |
1c1d7e |
* See the GNU General Public License for more details.
|
|
Packit |
1c1d7e |
*
|
|
Packit |
1c1d7e |
* Documents produced by Doxygen are derivative works derived from the
|
|
Packit |
1c1d7e |
* input used in their production; they are not affected by this license.
|
|
Packit |
1c1d7e |
*
|
|
Packit |
1c1d7e |
*/
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
#ifndef _SEARCHINDEX_H
|
|
Packit |
1c1d7e |
#define _SEARCHINDEX_H
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
#include <qintdict.h>
|
|
Packit |
1c1d7e |
#include <qlist.h>
|
|
Packit |
1c1d7e |
#include <qdict.h>
|
|
Packit |
1c1d7e |
#include <qintdict.h>
|
|
Packit |
1c1d7e |
#include <qvector.h>
|
|
Packit |
1c1d7e |
#include "sortdict.h"
|
|
Packit |
1c1d7e |
#include "definition.h"
|
|
Packit |
1c1d7e |
#include "util.h"
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
class FTextStream;
|
|
Packit |
1c1d7e |
class Definition;
|
|
Packit |
1c1d7e |
class MemberDef;
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
/*! Initialize the search indexer */
|
|
Packit |
1c1d7e |
void initSearchIndexer();
|
|
Packit |
1c1d7e |
/*! Cleanup the search indexer */
|
|
Packit |
1c1d7e |
void finializeSearchIndexer();
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
//------- server side search index ----------------------
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
struct URL
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
URL(const char *n,const char *u) : name(n), url(u) {}
|
|
Packit |
1c1d7e |
QCString name;
|
|
Packit |
1c1d7e |
QCString url;
|
|
Packit |
1c1d7e |
};
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
struct URLInfo
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
URLInfo(int idx,int f) : urlIdx(idx), freq(f) {}
|
|
Packit |
1c1d7e |
int urlIdx;
|
|
Packit |
1c1d7e |
int freq;
|
|
Packit |
1c1d7e |
};
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
class IndexWord
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
public:
|
|
Packit |
1c1d7e |
IndexWord(const char *word);
|
|
Packit |
1c1d7e |
void addUrlIndex(int,bool);
|
|
Packit |
1c1d7e |
const QIntDict<URLInfo> &urls() const { return m_urls; }
|
|
Packit |
1c1d7e |
QCString word() const { return m_word; }
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
private:
|
|
Packit |
1c1d7e |
QCString m_word;
|
|
Packit |
1c1d7e |
QIntDict<URLInfo> m_urls;
|
|
Packit |
1c1d7e |
};
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
class SearchIndexIntf
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
public:
|
|
Packit |
1c1d7e |
enum Kind { Internal, External };
|
|
Packit |
1c1d7e |
SearchIndexIntf(Kind k) : m_kind(k) {}
|
|
Packit |
1c1d7e |
virtual ~SearchIndexIntf() {}
|
|
Packit |
1c1d7e |
virtual void setCurrentDoc(Definition *ctx,const char *anchor,bool isSourceFile) = 0;
|
|
Packit |
1c1d7e |
virtual void addWord(const char *word,bool hiPriority) = 0;
|
|
Packit |
1c1d7e |
virtual void write(const char *file) = 0;
|
|
Packit |
1c1d7e |
Kind kind() const { return m_kind; }
|
|
Packit |
1c1d7e |
private:
|
|
Packit |
1c1d7e |
Kind m_kind;
|
|
Packit |
1c1d7e |
};
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
class SearchIndex : public SearchIndexIntf
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
public:
|
|
Packit |
1c1d7e |
SearchIndex();
|
|
Packit |
1c1d7e |
void setCurrentDoc(Definition *ctx,const char *anchor,bool isSourceFile);
|
|
Packit |
1c1d7e |
void addWord(const char *word,bool hiPriority);
|
|
Packit |
1c1d7e |
void write(const char *file);
|
|
Packit |
1c1d7e |
private:
|
|
Packit |
1c1d7e |
void addWord(const char *word,bool hiPrio,bool recurse);
|
|
Packit |
1c1d7e |
QDict<IndexWord> m_words;
|
|
Packit |
1c1d7e |
QVector< QList<IndexWord> > m_index;
|
|
Packit |
1c1d7e |
QDict<int> m_url2IdMap;
|
|
Packit |
1c1d7e |
QIntDict<URL> m_urls;
|
|
Packit |
1c1d7e |
int m_urlIndex;
|
|
Packit |
1c1d7e |
};
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
class SearchIndexExternal : public SearchIndexIntf
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
struct Private;
|
|
Packit |
1c1d7e |
public:
|
|
Packit |
1c1d7e |
SearchIndexExternal();
|
|
Packit |
1c1d7e |
~SearchIndexExternal();
|
|
Packit |
1c1d7e |
void setCurrentDoc(Definition *ctx,const char *anchor,bool isSourceFile);
|
|
Packit |
1c1d7e |
void addWord(const char *word,bool hiPriority);
|
|
Packit |
1c1d7e |
void write(const char *file);
|
|
Packit |
1c1d7e |
private:
|
|
Packit |
1c1d7e |
Private *p;
|
|
Packit |
1c1d7e |
};
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
//------- client side search index ----------------------
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
#define SEARCH_INDEX_ALL 0
|
|
Packit |
1c1d7e |
#define SEARCH_INDEX_CLASSES 1
|
|
Packit |
1c1d7e |
#define SEARCH_INDEX_NAMESPACES 2
|
|
Packit |
1c1d7e |
#define SEARCH_INDEX_FILES 3
|
|
Packit |
1c1d7e |
#define SEARCH_INDEX_FUNCTIONS 4
|
|
Packit |
1c1d7e |
#define SEARCH_INDEX_VARIABLES 5
|
|
Packit |
1c1d7e |
#define SEARCH_INDEX_TYPEDEFS 6
|
|
Packit |
1c1d7e |
#define SEARCH_INDEX_ENUMS 7
|
|
Packit |
1c1d7e |
#define SEARCH_INDEX_ENUMVALUES 8
|
|
Packit |
1c1d7e |
#define SEARCH_INDEX_PROPERTIES 9
|
|
Packit |
1c1d7e |
#define SEARCH_INDEX_EVENTS 10
|
|
Packit |
1c1d7e |
#define SEARCH_INDEX_RELATED 11
|
|
Packit |
1c1d7e |
#define SEARCH_INDEX_DEFINES 12
|
|
Packit |
1c1d7e |
#define SEARCH_INDEX_GROUPS 13
|
|
Packit |
1c1d7e |
#define SEARCH_INDEX_PAGES 14
|
|
Packit |
1c1d7e |
#define NUM_SEARCH_INDICES 15
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
class SearchDefinitionList : public QList<Definition>
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
public:
|
|
Packit |
1c1d7e |
SearchDefinitionList(const QCString &id,const QCString &name) : m_id(id), m_name(name) {}
|
|
Packit |
1c1d7e |
QCString id() const { return m_id; }
|
|
Packit |
1c1d7e |
QCString name() const { return m_name; }
|
|
Packit |
1c1d7e |
private:
|
|
Packit |
1c1d7e |
QCString m_id;
|
|
Packit |
1c1d7e |
QCString m_name;
|
|
Packit |
1c1d7e |
};
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
class SearchIndexList : public SDict< SearchDefinitionList >
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
public:
|
|
Packit |
1c1d7e |
typedef Definition ElementType;
|
|
Packit |
1c1d7e |
SearchIndexList(uint letter);
|
|
Packit |
1c1d7e |
~SearchIndexList();
|
|
Packit |
1c1d7e |
void append(Definition *d);
|
|
Packit |
1c1d7e |
uint letter() const;
|
|
Packit |
1c1d7e |
private:
|
|
Packit |
1c1d7e |
int compareValues(const SearchDefinitionList *md1, const SearchDefinitionList *md2) const;
|
|
Packit |
1c1d7e |
uint m_letter;
|
|
Packit |
1c1d7e |
};
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
struct SearchIndexInfo
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
LetterToIndexMap<SearchIndexList> symbolList;
|
|
Packit |
1c1d7e |
QCString name;
|
|
Packit |
1c1d7e |
QCString text;
|
|
Packit |
1c1d7e |
};
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void createJavascriptSearchIndex();
|
|
Packit |
1c1d7e |
void writeJavascriptSearchIndex();
|
|
Packit |
1c1d7e |
const SearchIndexInfo *getSearchIndices();
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
#endif
|