21#include <unordered_map>
56 auto it =
m_urls.find(idx);
63 if (hiPriority) it->second.freq|=1;
75 if (ctx==
nullptr)
return;
83 if (!isSourceFile) baseUrl=url;
123 if (lang==SrcLangExt::Java || lang==SrcLangExt::CSharp)
127 else if (lang==SrcLangExt::Fortran)
170 m_urls.emplace(it->second,
URL(name,url));
176 if (word.
length()<2)
return -1;
189 uint32_t c1=
static_cast<uint8_t
>(word[0]);
190 uint32_t c2=
static_cast<uint8_t
>(word[1]);
200 if (idx<0 || idx>=
static_cast<int>(
m_index.size()))
return;
205 m_index[idx].emplace_back(wStr);
206 it =
m_words.emplace( wStr.
str(),
static_cast<int>(
m_index[idx].size())-1 ).first;
223 !((word[i]==
'_' || word[i]==
':' || (word[i]>=
'a' && word[i]<=
'z')) &&
224 (word[i+1]>=
'A' && word[i+1]<=
'Z')))
228 if (word[i]!=0 && i>=1)
243 f.put(
static_cast<int>((index>>24)&0xff));
244 f.put(
static_cast<int>((index>>16)&0xff));
245 f.put(
static_cast<int>((index>>8)&0xff));
246 f.put(
static_cast<int>(index&0xff));
252 for (
size_t i=0;i<l;i++) f.put(s[i]);
260 size_t wordsOffset = size;
264 const auto &wlist =
m_index[i];
267 for (
const auto &iw : wlist)
269 size_t ws = iw.word().length()+1;
278 size_t offset=wordsOffset;
281 const auto &wlist =
m_index[i];
284 indexOffsets[i]=offset;
285 for (
const auto &iw : wlist)
287 offset+= iw.word().length()+1;
297 size_t padding = size;
299 padding = size - padding;
301 std::vector<size_t> wordStatOffsets(
m_words.size());
308 const auto &wlist =
m_index[i];
311 for (
const auto &iw : wlist)
314 wordStatOffsets[count++] = size;
315 size+=4 + iw.urls().size() * 8;
319 std::vector<size_t> urlOffsets(
m_urls.size());
320 for (
const auto &udi :
m_urls)
322 urlOffsets[udi.first]=size;
323 size+=udi.second.name.length()+1+
324 udi.second.url.length()+1;
332 f.put(
'D'); f.put(
'O'); f.put(
'X'); f.put(
'S');
342 const auto &wlist =
m_index[i];
345 for (
const auto &iw : wlist)
348 writeInt(f,wordStatOffsets[count++]);
354 for (
size_t i=0;i<padding;i++) f.put(0);
358 const auto &wlist =
m_index[i];
361 for (
const auto &iw : wlist)
363 size_t numUrls = iw.urls().size();
365 for (
const auto &ui : iw.urls())
367 writeInt(f,urlOffsets[ui.second.urlIdx]);
374 for (
const auto &udi :
m_urls)
425 return (
toClassDef(ctx))->compoundTypeString();
497 if (!text.
isEmpty()) text+=
' ';
507 t <<
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
512 t <<
" <field name=\"type\">" << doc.type <<
"</field>\n";
513 t <<
" <field name=\"name\">" <<
convertToXML(doc.name) <<
"</field>\n";
514 if (!doc.args.isEmpty())
516 t <<
" <field name=\"args\">" <<
convertToXML(doc.args) <<
"</field>\n";
518 if (!doc.extId.isEmpty())
520 t <<
" <field name=\"tag\">" <<
convertToXML(doc.extId) <<
"</field>\n";
522 t <<
" <field name=\"url\">" <<
convertToXML(doc.url) <<
"</field>\n";
523 t <<
" <field name=\"keywords\">" <<
convertToXML(doc.importantText) <<
"</field>\n";
524 t <<
" <field name=\"text\">" <<
convertToXML(doc.normalText) <<
"</field>\n";
531 err(
"Failed to open file {} for writing!\n",fileName);
542 if (searchEngine && serverBasedSearch)
A abstract class representing of a compound symbol.
virtual QCString compoundTypeString() const =0
Returns the type of compound as a string.
The common base class of all entity definitions found in the sources.
virtual SrcLangExt getLanguage() const =0
Returns the programming language this definition was written in.
virtual DefType definitionType() const =0
virtual QCString qualifiedName() const =0
virtual QCString getOutputFileBase() const =0
virtual const QCString & name() const =0
static SearchIndexIntf searchIndex
A model of a group of symbols.
virtual QCString groupTitle() const =0
A model of a class/file/namespace member symbol.
virtual bool isSignal() const =0
virtual bool isFriend() const =0
virtual bool isForeign() const =0
virtual bool isRelated() const =0
virtual bool isTypedef() const =0
virtual bool isSlot() const =0
virtual bool isEvent() const =0
virtual bool isFunction() const =0
virtual bool isDefine() const =0
virtual bool isEnumerate() const =0
virtual bool isVariable() const =0
virtual bool isEnumValue() const =0
virtual bool isProperty() const =0
A model of a page symbol.
virtual bool hasTitle() const =0
virtual QCString title() const =0
This is an alternative implementation of QCString.
QCString & prepend(const char *s)
size_t length() const
Returns the length of the string, not counting the 0-terminator.
bool isEmpty() const
Returns TRUE iff the string is empty.
const std::string & str() const
const char * data() const
Returns a pointer to the contents of the string in the form of a 0-terminated C string.
void addUrlIndex(int, bool)
void addWord(const QCString &word, bool hiPriority)
SearchDocEntry * m_current
void write(const QCString &file)
std::map< std::string, SearchDocEntry > m_docEntries
void setCurrentDoc(const Definition *ctx, const QCString &anchor, bool isSourceFile)
std::map< int, URL > m_urls
void addWordRec(const QCString &word, bool hiPrio, bool recurse)
void addWord(const QCString &word, bool hiPriority)
std::vector< std::vector< IndexWord > > m_index
std::unordered_map< std::string, int > m_words
std::unordered_map< std::string, int > m_url2IdMap
void write(const QCString &file)
void setCurrentDoc(const Definition *ctx, const QCString &anchor, bool isSourceFile)
ClassDef * toClassDef(Definition *d)
#define Config_getBool(name)
#define Config_getString(name)
FileDef * toFileDef(Definition *d)
GroupDef * toGroupDef(Definition *d)
Translator * theTranslator
MemberDef * toMemberDef(Definition *d)
std::ofstream openOutputStream(const QCString &name, bool append=false)
PageDef * toPageDef(Definition *d)
Portable versions of functions that are platform dependent.
QCString substitute(const QCString &s, const QCString &src, const QCString &dst)
substitute all occurrences of src in s by dst
static void writeString(std::ostream &f, const QCString &s)
static std::mutex g_searchIndexMutex
static void writeInt(std::ostream &f, size_t index)
static int charsToIndex(const QCString &word)
const size_t numIndexEntries
static QCString definitionToName(const Definition *ctx)
Web server based search engine.
void finalizeSearchIndexer()
QCString stripPath(const QCString &s)
QCString filterTitle(const QCString &title)
QCString convertToXML(const QCString &s, bool keepEntities)
QCString getLanguageSpecificSeparator(SrcLangExt lang, bool classScope)
Returns the scope separator to use given the programming language lang.
int getPrefixIndex(const QCString &name)
void addHtmlExtensionIfMissing(QCString &fName)
A bunch of utility functions.