43 if (std::holds_alternative<const Definition *>(
info))
51 else if (std::holds_alternative<const SectionInfo *>(
info))
65 for (
size_t i=0;i<
word.length();i++)
73 static const char *
hex =
"0123456789ABCDEF";
74 unsigned char uc =
static_cast<unsigned char>(
word.at(i));
94 bool lastIsSpace=
true;
95 for (
size_t si=0; si<title.
length(); si++)
97 char c = title.
at(si);
98 if (c==
'@' || c==
'\\')
104 while (si<title.
length() && (
isId(c) || c==
':')) c = title.
at(++si);
112 for (
size_t tsi = si; tsi<title.
length(); ++tsi)
114 if (title.
at(tsi)==
'>')
122 else if (
isId(c) || c==
':')
128 else if (!lastIsSpace)
135 if (di>0 && title.
at(di-1)==
' ') di--;
141 while ((i=title.
find(
' ',p))!=-1)
143 std::string word = title.
mid(p,i-p).
str();
144 indices.push_back(p);
147 if (p<
static_cast<int>(title.
length()))
149 std::string word = title.
mid(p).
str();
150 indices.push_back(p);
156#define SEARCH_INDEX_ALL 0
157#define SEARCH_INDEX_CLASSES 1
158#define SEARCH_INDEX_INTERFACES 2
159#define SEARCH_INDEX_STRUCTS 3
160#define SEARCH_INDEX_EXCEPTIONS 4
161#define SEARCH_INDEX_NAMESPACES 5
162#define SEARCH_INDEX_FILES 6
163#define SEARCH_INDEX_FUNCTIONS 7
164#define SEARCH_INDEX_VARIABLES 8
165#define SEARCH_INDEX_TYPEDEFS 9
166#define SEARCH_INDEX_SEQUENCES 10
167#define SEARCH_INDEX_DICTIONARIES 11
168#define SEARCH_INDEX_ENUMS 12
169#define SEARCH_INDEX_ENUMVALUES 13
170#define SEARCH_INDEX_PROPERTIES 14
171#define SEARCH_INDEX_EVENTS 15
172#define SEARCH_INDEX_RELATED 16
173#define SEARCH_INDEX_DEFINES 17
174#define SEARCH_INDEX_GROUPS 18
175#define SEARCH_INDEX_PAGES 19
176#define SEARCH_INDEX_CONCEPTS 20
177#define SEARCH_INDEX_MODULES 21
183 {
"classes" , []() {
return theTranslator->trClasses(); }, {} },
184 {
"interfaces" , []() {
return theTranslator->trSliceInterfaces(); }, {} },
185 {
"structs" , []() {
return theTranslator->trStructs(); }, {} },
186 {
"exceptions" , []() {
return theTranslator->trExceptions(); }, {} },
187 {
"namespaces" , []() {
return Config_getBool(OPTIMIZE_OUTPUT_SLICE) ?
191 {
"functions" , []() {
return Config_getBool(OPTIMIZE_OUTPUT_SLICE) ?
194 {
"variables" , []() {
return Config_getBool(OPTIMIZE_OUTPUT_SLICE) ?
197 {
"typedefs" , []() {
return theTranslator->trTypedefs(); }, {} },
198 {
"sequences" , []() {
return theTranslator->trSequences(); }, {} },
199 {
"dictionaries", []() {
return theTranslator->trDictionaries(); }, {} },
200 {
"enums" , []() {
return theTranslator->trEnumerations(); }, {} },
201 {
"enumvalues" , []() {
return theTranslator->trEnumerationValues(); }, {} },
202 {
"properties" , []() {
return theTranslator->trProperties(); }, {} },
203 {
"events" , []() {
return theTranslator->trEvents(); }, {} },
204 {
"related" , []() {
return theTranslator->trFriends(); }, {} },
205 {
"defines" , []() {
return theTranslator->trDefines(); }, {} },
208 {
"concepts" , []() {
return theTranslator->trConcept(
true,
false); }, {} },
209 {
"modules" , []() {
return theTranslator->trModule(
true,
false); }, {} }
230 bool isFriendToHide = hideFriendCompounds &&
234 if (!(md->
isFriend() && isFriendToHide))
275 (md->
isFriend() && !isFriendToHide))
281 else if (isLinkable &&
335 if (cd->isLinkable())
368 if (nd->isLinkable())
379 if (cd->isLinkable())
390 if (mod->isLinkable() && mod->isPrimaryInterface())
401 for (
const auto &fd : *fn)
404 if (fd->isLinkable())
418 for (
const auto &md : *mn)
431 for (
const auto &md : *mn)
441 if (gd->isLinkable())
446 for (
int index : tokenIndices)
457 if (pd->isLinkable())
462 for (
int index : tokenIndices)
476 for (
int index : tokenIndices)
485 for (
const auto §ionInfo : sm)
487 if (sectionInfo->level()>0)
493 for (
int index : tokenIndices)
504 for (
auto &[name,symList] : sii.symbolMap)
511 std::stable_sort(symList.begin(),
513 [](
const auto &t1,
const auto &t2)
515 int eq = qstricmp_sort(t1.word,t2.word);
516 return eq==0 ? qstricmp_sort(t1.title,t2.title)<0 : eq<0;
527 t <<
"var indexSectionsWithContent =\n";
532 if (!sii.symbolMap.empty())
535 t <<
" " << j <<
": \"";
537 std::string previous_letter;
538 for (
const auto &[letter,list] : sii.symbolMap)
540 if (letter != previous_letter)
542 if ( letter ==
"\"" ) t <<
"\\";
544 previous_letter = letter;
553 t <<
"var indexSectionNames =\n";
558 if (!sii.symbolMap.empty())
561 t <<
" " << j <<
": \"" << sii.name <<
"\"";
567 t <<
"var indexSectionLabels =\n";
572 if (!sii.symbolMap.empty())
575 t <<
" " << j <<
": \"" <<
convertToXML(sii.getText()) <<
"\"";
588 return std::holds_alternative<const Definition *>(info);
592 return isDef(info) ? std::get<const Definition *>(info) :
nullptr;
596 return std::holds_alternative<const SectionInfo *>(info);
600 return isSection(info) ? std::get<const SectionInfo *>(info) :
nullptr;
607 err(
"Failed to open file '{}' for writing...\n",dataFileName);
611 ti <<
"var searchData=\n";
624 bool firstEntry=
TRUE;
629 for (
auto it = list.begin(); it!=list.end();)
653 ti <<
" ['" <<
id <<
"_" << cnt++ <<
"',['";
682 if (!extLinksInWindow || ref.
isEmpty())
714 bool overloadedFunction = ((prevScope!=
nullptr && scope==prevScope) || (scope && scope==nextScope)) &&
718 if (overloadedFunction)
778 ti <<
"'" << name <<
"'";
799 std::size_t numThreads =
static_cast<std::size_t
>(
Config_getInt(NUM_PROC_THREADS));
803 std::vector< std::future<int> > results;
807 for (
const auto &[letter,symList] : sii.symbolMap)
810 baseName.
sprintf(
"%s_%x",sii.name.data(),p);
811 QCString dataFileName = searchDirName +
"/"+baseName+
".js";
812 auto &list = symList;
813 auto processFile = [p,baseName,dataFileName,&list]()
818 results.emplace_back(threadPool.
queue(processFile));
823 for (
auto &f : results) f.get();
830 for (
const auto &[letter,symList] : sii.symbolMap)
833 baseName.
sprintf(
"%s_%x",sii.name.data(),p);
834 QCString dataFileName = searchDirName +
"/"+baseName+
".js";
862 list.push_back(
term);
A abstract class representing of a compound symbol.
virtual bool isImplicitTemplateInstance() const =0
The common base class of all entity definitions found in the sources.
virtual const QCString & localName() const =0
virtual SrcLangExt getLanguage() const =0
Returns the programming language this definition was written in.
virtual QCString getDefFileName() const =0
virtual bool isLinkable() const =0
virtual int getDefLine() const =0
virtual DefType definitionType() const =0
virtual QCString anchor() const =0
virtual const FileDef * getBodyDef() const =0
virtual QCString getReference() const =0
virtual QCString qualifiedName() const =0
virtual QCString getOutputFileBase() const =0
virtual Definition * getOuterScope() const =0
virtual const QCString & name() const =0
static NamespaceLinkedMap * namespaceLinkedMap
static ConceptLinkedMap * conceptLinkedMap
static std::unique_ptr< PageDef > mainPage
static FileNameLinkedMap * inputNameLinkedMap
static ClassLinkedMap * classLinkedMap
static MemberNameLinkedMap * functionNameLinkedMap
static NamespaceDefMutable * globalScope
static IndexList * indexList
static PageLinkedMap * pageLinkedMap
static MemberNameLinkedMap * memberNameLinkedMap
static GroupLinkedMap * groupLinkedMap
A model of a file symbol.
A model of a group of symbols.
A model of a class/file/namespace member symbol.
virtual QCString typeString() const =0
virtual bool isSignal() const =0
virtual bool isFriend() const =0
virtual bool isForeign() const =0
virtual bool isRelated() const =0
virtual bool isSequence() const =0
virtual const ClassDef * getClassDef() const =0
virtual GroupDef * getGroupDef()=0
virtual bool isTypedef() const =0
virtual bool isSlot() const =0
virtual const FileDef * getFileDef() const =0
virtual bool isEvent() const =0
virtual bool isFunction() const =0
virtual bool isDictionary() const =0
virtual MemberDef * resolveAlias()=0
virtual bool isDefine() const =0
virtual const NamespaceDef * getNamespaceDef() const =0
virtual bool isEnumerate() const =0
virtual bool isVariable() const =0
virtual QCString argsString() const =0
virtual bool isCallable() const =0
virtual bool isEnumValue() const =0
virtual bool isProperty() const =0
static ModuleManager & instance()
An abstract interface of a namespace symbol.
This is an alternative implementation of QCString.
int find(char c, int index=0, bool cs=TRUE) const
size_t length() const
Returns the length of the string, not counting the 0-terminator.
QCString mid(size_t index, size_t len=static_cast< size_t >(-1)) const
char & at(size_t i)
Returns a reference to the character at index i.
bool isEmpty() const
Returns TRUE iff the string is empty.
void resize(size_t newlen)
const std::string & str() const
QCString & sprintf(const char *format,...)
static ResourceMgr & instance()
Returns the one and only instance of this class.
class that provide information about a section.
Definition * definition() const
QCString fileName() const
static SectionManager & instance()
returns a reference to the singleton
Text streaming class that buffers data.
std::string str() const
Return the contents of the buffer as a std::string object.
Class managing a pool of worker threads.
auto queue(F &&f, Args &&... args) -> std::future< decltype(f(args...))>
Queue the callable function f for the threads to execute.
ClassDef * toClassDef(Definition *d)
#define Config_getInt(name)
#define Config_getBool(name)
#define Config_getString(name)
std::vector< int > IntVector
static constexpr auto hex
GroupDef * toGroupDef(Definition *d)
Translator * theTranslator
MemberDef * toMemberDef(Definition *d)
std::ofstream openOutputStream(const QCString &name, bool append=false)
NamespaceDef * toNamespaceDef(Definition *d)
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 addMemberToSearchIndex(const MemberDef *md)
#define SEARCH_INDEX_TYPEDEFS
#define SEARCH_INDEX_STRUCTS
static void splitSearchTokens(QCString &title, IntVector &indices)
#define SEARCH_INDEX_NAMESPACES
void createJavaScriptSearchIndex()
#define SEARCH_INDEX_CONCEPTS
#define SEARCH_INDEX_EVENTS
static std::array< SearchIndexInfo, NUM_SEARCH_INDICES > g_searchIndexInfo
#define SEARCH_INDEX_DEFINES
#define SEARCH_INDEX_ENUMS
#define SEARCH_INDEX_FILES
#define SEARCH_INDEX_DICTIONARIES
#define SEARCH_INDEX_PAGES
static void writeJavasScriptSearchDataPage(const QCString &baseName, const QCString &dataFileName, const SearchIndexList &list)
static void writeJavascriptSearchData(const QCString &searchDirName)
#define SEARCH_INDEX_GROUPS
#define SEARCH_INDEX_INTERFACES
const std::array< SearchIndexInfo, NUM_SEARCH_INDICES > & getSearchIndices()
#define SEARCH_INDEX_SEQUENCES
#define SEARCH_INDEX_PROPERTIES
#define SEARCH_INDEX_ENUMVALUES
#define SEARCH_INDEX_FUNCTIONS
#define SEARCH_INDEX_VARIABLES
#define SEARCH_INDEX_MODULES
#define SEARCH_INDEX_CLASSES
#define SEARCH_INDEX_RELATED
void writeJavaScriptSearchIndex()
#define SEARCH_INDEX_EXCEPTIONS
Javascript based search engine.
std::vector< SearchTerm > SearchIndexList
List of search terms.
void add(const SearchTerm &term)
QCString title
title to show in the output for this search result
std::variant< std::monostate, const Definition *, const SectionInfo * > LinkInfo
QCString word
lower case word that is indexed (e.g. name of a symbol, or word from a title)
LinkInfo info
definition to link to
QCString termEncoded() const
encoded version of the search term
std::string convertUTF8ToLower(const std::string &input)
Converts the input string into a lower case version, also taking into account non-ASCII characters th...
std::string getUTF8CharAt(const std::string &input, size_t pos)
Returns the UTF8 character found at byte position pos in the input string.
QCString externalRef(const QCString &relPath, const QCString &ref, bool href)
QCString parseCommentAsHtml(const Definition *scope, const MemberDef *member, const QCString &doc, const QCString &fileName, int lineNr)
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.
void addHtmlExtensionIfMissing(QCString &fName)
A bunch of utility functions.