55 auto it =
m_urls.find(idx);
62 if (hiPriority) it->second.freq|=1;
74 if (ctx==
nullptr)
return;
82 if (!isSourceFile) baseUrl=url;
122 if (lang==SrcLangExt::Java || lang==SrcLangExt::CSharp)
126 else if (lang==SrcLangExt::Fortran)
169 m_urls.emplace(it->second,
URL(name,url));
175 if (word.
length()<2)
return -1;
188 uint32_t c1=
static_cast<uint8_t
>(word[0]);
189 uint32_t c2=
static_cast<uint8_t
>(word[1]);
195 if (word.
empty())
return;
199 if (idx<0 || idx>=
static_cast<int>(
m_index.size()))
return;
204 m_index[idx].emplace_back(wStr);
205 it =
m_words.emplace( wStr.
str(),
static_cast<int>(
m_index[idx].size())-1 ).first;
222 !((word[i]==
'_' || word[i]==
':' || (word[i]>=
'a' && word[i]<=
'z')) &&
223 (word[i+1]>=
'A' && word[i+1]<=
'Z')))
227 if (word[i]!=0 && i>=1)
242 f.put(
static_cast<int>((index>>24)&0xff));
243 f.put(
static_cast<int>((index>>16)&0xff));
244 f.put(
static_cast<int>((index>>8)&0xff));
245 f.put(
static_cast<int>(index&0xff));
251 for (
size_t i=0;i<l;i++) f.put(s[i]);
259 size_t wordsOffset = size;
263 const auto &wlist =
m_index[i];
266 for (
const auto &iw : wlist)
268 size_t ws = iw.word().length()+1;
277 size_t offset=wordsOffset;
280 const auto &wlist =
m_index[i];
283 indexOffsets[i]=offset;
284 for (
const auto &iw : wlist)
286 offset+= iw.word().length()+1;
296 size_t padding = size;
298 padding = size - padding;
300 std::vector<size_t> wordStatOffsets(
m_words.size());
307 const auto &wlist =
m_index[i];
310 for (
const auto &iw : wlist)
313 wordStatOffsets[count++] = size;
314 size+=4 + iw.urls().size() * 8;
318 std::vector<size_t> urlOffsets(
m_urls.size());
319 for (
const auto &udi :
m_urls)
321 urlOffsets[udi.first]=size;
322 size+=udi.second.name.length()+1+
323 udi.second.url.length()+1;
331 f.put(
'D'); f.put(
'O'); f.put(
'X'); f.put(
'S');
341 const auto &wlist =
m_index[i];
344 for (
const auto &iw : wlist)
347 writeInt(f,wordStatOffsets[count++]);
353 for (
size_t i=0;i<padding;i++) f.put(0);
357 const auto &wlist =
m_index[i];
360 for (
const auto &iw : wlist)
362 size_t numUrls = iw.urls().size();
364 for (
const auto &ui : iw.urls())
366 writeInt(f,urlOffsets[ui.second.urlIdx]);
373 for (
const auto &udi :
m_urls)
424 return (
toClassDef(ctx))->compoundTypeString();
496 if (!text.
empty()) text+=
' ';
506 t <<
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
511 t <<
" <field name=\"type\">" << doc.type <<
"</field>\n";
512 t <<
" <field name=\"name\">" <<
convertToXML(doc.name) <<
"</field>\n";
513 if (!doc.args.empty())
515 t <<
" <field name=\"args\">" <<
convertToXML(doc.args) <<
"</field>\n";
517 if (!doc.extId.empty())
519 t <<
" <field name=\"tag\">" <<
convertToXML(doc.extId) <<
"</field>\n";
521 t <<
" <field name=\"url\">" <<
convertToXML(doc.url) <<
"</field>\n";
522 t <<
" <field name=\"keywords\">" <<
convertToXML(doc.importantText) <<
"</field>\n";
523 t <<
" <field name=\"text\">" <<
convertToXML(doc.normalText) <<
"</field>\n";
530 err(
"Failed to open file {} for writing!\n",fileName);
541 if (searchEngine && serverBasedSearch)
A abstract class representing of a compound symbol.
virtual DString compoundTypeString() const =0
Returns the type of compound as a string.
A String class for use with Doxygen wrapping std::string and adding some additional functionality off...
bool empty() const
Returns true iff the string is empty (std::string compatible alias for isEmpty()).
DString & prepend(const char *s)
size_t find(char c, size_t pos=0) const
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.
size_t length() const
Returns the length of the string, not counting the 0-terminator.
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 const DString & name() const =0
virtual DString qualifiedName() const =0
virtual DString getOutputFileBase() const =0
static SearchIndexIntf searchIndex
A model of a group of symbols.
virtual DString 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 DString title() const =0
void addUrlIndex(int, bool)
void setCurrentDoc(const Definition *ctx, const DString &anchor, bool isSourceFile)
SearchDocEntry * m_current
void write(const DString &file)
std::map< std::string, SearchDocEntry > m_docEntries
void addWord(const DString &word, bool hiPriority)
void addWord(const DString &word, bool hiPriority)
std::map< int, URL > m_urls
std::vector< std::vector< IndexWord > > m_index
void write(const DString &file)
std::unordered_map< std::string, int > m_words
std::unordered_map< std::string, int > m_url2IdMap
void addWordRec(const DString &word, bool hiPrio, bool recurse)
void setCurrentDoc(const Definition *ctx, const DString &anchor, bool isSourceFile)
virtual DString trGroup(bool first_capital, bool singular)=0
virtual DString trPackage(const DString &name)=0
virtual DString trNamespace(bool first_capital, bool singular)=0
virtual DString trSubprogram(bool first_capital, bool singular)=0
virtual DString trModule(bool first_capital, bool singular)=0
virtual DString trMember(bool first_capital, bool singular)=0
virtual DString trPage(bool first_capital, bool singular)=0
ClassDef * toClassDef(Definition *d)
#define Config_getBool(name)
#define Config_getString(name)
DString substitute(const DString &s, const DString &src, const DString &dst)
substitute all occurrences of src in s by dst
bool isId(char c)
Returns true if c is a valid character for an identifier.
FileDef * toFileDef(Definition *d)
GroupDef * toGroupDef(Definition *d)
Translator * theTranslator
MemberDef * toMemberDef(Definition *d)
std::ofstream openOutputStream(const DString &name, bool append=false)
PageDef * toPageDef(Definition *d)
Portable versions of functions that are platform dependent.
static std::mutex g_searchIndexMutex
static DString definitionToName(const Definition *ctx)
static void writeInt(std::ostream &f, size_t index)
const size_t numIndexEntries
static void writeString(std::ostream &f, const DString &s)
static int charsToIndex(const DString &word)
Web server based search engine.
void finalizeSearchIndexer()
DString filterTitle(const DString &title)
void addHtmlExtensionIfMissing(DString &fName)
DString convertToXML(const DString &s, bool keepEntities, const bool citeEntry)
int getPrefixIndex(const DString &name)
DString getLanguageSpecificSeparator(SrcLangExt lang, bool classScope)
DString stripPath(const DString &s)
A bunch of utility functions.