45 if (std::holds_alternative<const Definition *>(
info))
53 else if (std::holds_alternative<const SectionInfo *>(
info))
71 if (c<0 || isalnum(c))
77 static const char *hex =
"0123456789ABCDEF";
78 unsigned char uc =
static_cast<unsigned char>(
word.
at(i));
94 if (title.
empty())
return;
98 bool lastIsSpace=
true;
99 for (
size_t si=0; si<title.
length(); si++)
101 char c = title.
at(si);
102 if (c==
'@' || c==
'\\')
108 while (si<title.
length() && (
isId(c) || c==
':')) c = title.
at(++si);
116 for (
size_t tsi = si; tsi<title.
length(); ++tsi)
118 if (title.
at(tsi)==
'>')
126 else if (
isId(c) || c==
':')
132 else if (!lastIsSpace)
139 if (di>0 && title.
at(di-1)==
' ') di--;
147 std::string word = title.
mid(p,i-p).
str();
148 indices.push_back(p);
153 std::string word = title.
mid(p).
str();
154 indices.push_back(p);
160#define SEARCH_INDEX_ALL 0
161#define SEARCH_INDEX_CLASSES 1
162#define SEARCH_INDEX_INTERFACES 2
163#define SEARCH_INDEX_STRUCTS 3
164#define SEARCH_INDEX_EXCEPTIONS 4
165#define SEARCH_INDEX_NAMESPACES 5
166#define SEARCH_INDEX_FILES 6
167#define SEARCH_INDEX_FUNCTIONS 7
168#define SEARCH_INDEX_VARIABLES 8
169#define SEARCH_INDEX_TYPEDEFS 9
170#define SEARCH_INDEX_SEQUENCES 10
171#define SEARCH_INDEX_DICTIONARIES 11
172#define SEARCH_INDEX_ENUMS 12
173#define SEARCH_INDEX_ENUMVALUES 13
174#define SEARCH_INDEX_PROPERTIES 14
175#define SEARCH_INDEX_EVENTS 15
176#define SEARCH_INDEX_RELATED 16
177#define SEARCH_INDEX_DEFINES 17
178#define SEARCH_INDEX_GROUPS 18
179#define SEARCH_INDEX_PAGES 19
180#define SEARCH_INDEX_CONCEPTS 20
181#define SEARCH_INDEX_MODULES 21
191 {
"namespaces" , []() {
return Config_getBool(OPTIMIZE_OUTPUT_SLICE) ?
195 {
"functions" , []() {
return Config_getBool(OPTIMIZE_OUTPUT_SLICE) ?
198 {
"variables" , []() {
return Config_getBool(OPTIMIZE_OUTPUT_SLICE) ?
234 bool isFriendToHide = hideFriendCompounds &&
238 if (!(md->
isFriend() && isFriendToHide))
279 (md->
isFriend() && !isFriendToHide))
285 else if (isLinkable &&
339 if (cd->isLinkable())
372 if (nd->isLinkable())
383 if (cd->isLinkable())
394 if (mod->isLinkable() && mod->isPrimaryInterface())
405 for (
const auto &fd : *fn)
408 if (fd->isLinkable())
422 for (
const auto &md : *mn)
435 for (
const auto &md : *mn)
445 if (gd->isLinkable())
450 for (
size_t index : tokenIndices)
461 if (pd->isLinkable())
466 for (
size_t index : tokenIndices)
480 for (
size_t index : tokenIndices)
489 for (
const auto §ionInfo : sm)
491 if (sectionInfo->level()>0)
497 for (
size_t index : tokenIndices)
508 for (
auto &[name,symList] : sii.symbolMap)
515 std::stable_sort(symList.begin(),
517 [](
const auto &t1,
const auto &t2)
519 int eq = dstricmp_sort(t1.word,t2.word);
520 return eq==0 ? dstricmp_sort(t1.title,t2.title)<0 : eq<0;
531 t <<
"var indexSectionsWithContent =\n";
536 if (!sii.symbolMap.empty())
539 t <<
" " << j <<
": \"";
541 std::string previous_letter;
542 for (
const auto &[letter,list] : sii.symbolMap)
544 if (letter != previous_letter)
546 if ( letter ==
"\"" ) t <<
"\\";
548 previous_letter = letter;
557 t <<
"var indexSectionNames =\n";
562 if (!sii.symbolMap.empty())
571 t <<
"var indexSectionLabels =\n";
576 if (!sii.symbolMap.empty())
592 return std::holds_alternative<const Definition *>(info);
596 return isDef(info) ? std::get<const Definition *>(info) :
nullptr;
600 return std::holds_alternative<const SectionInfo *>(info);
604 return isSection(info) ? std::get<const SectionInfo *>(info) :
nullptr;
611 err(
"Failed to open file '{}' for writing...\n",dataFileName);
615 ti <<
"var searchData=\n";
628 bool firstEntry=
true;
633 for (
auto it = list.begin(); it!=list.end();)
657 ti <<
" ['" <<
id <<
"_" << cnt++ <<
"',['";
686 if (!extLinksInWindow || ref.
empty())
718 bool overloadedFunction = ((prevScope!=
nullptr && scope==prevScope) || (scope && scope==nextScope)) &&
722 if (overloadedFunction)
804 std::size_t numThreads =
static_cast<std::size_t
>(
Config_getInt(NUM_PROC_THREADS));
808 std::vector< std::future<int> > results;
812 for (
const auto &[letter,symList] : sii.symbolMap)
815 baseName.
sprintf(
"%s_%x",sii.name.data(),p);
816 DString dataFileName = searchDirName +
"/"+baseName+
".js";
817 auto &list = symList;
818 auto processFile = [p,baseName,dataFileName,&list]()
823 results.emplace_back(threadPool.
queue(processFile));
828 for (
auto &f : results) f.get();
835 for (
const auto &[letter,symList] : sii.symbolMap)
838 baseName.
sprintf(
"%s_%x",sii.name.data(),p);
839 DString dataFileName = searchDirName +
"/"+baseName+
".js";
867 list.push_back(
term);
A abstract class representing of a compound symbol.
virtual bool isImplicitTemplateInstance() const =0
A String class for use with Doxygen wrapping std::string and adding some additional functionality off...
void resize(size_t newlen)
DString mid(size_t index, size_t len=npos) const
bool empty() const
Returns true iff the string is empty (std::string compatible alias for isEmpty()).
static constexpr size_t npos
value used to indicate 'not found' or 'to the end of the string', matching std::string::npos
char & at(size_t i)
Returns a reference to the character at index i.
size_t find(char c, size_t pos=0) const
DString & sprintf(const char *format,...)
const std::string & str() const
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 DString getDefFileName() const =0
virtual bool isLinkable() const =0
virtual int getDefLine() const =0
virtual DefType definitionType() const =0
virtual const DString & name() const =0
virtual const DString & localName() const =0
virtual const FileDef * getBodyDef() const =0
virtual DString qualifiedName() const =0
virtual DString anchor() const =0
virtual DString getReference() const =0
virtual Definition * getOuterScope() const =0
virtual DString getOutputFileBase() 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.
void addStyleSheetFile(const DString &name)
A model of a class/file/namespace member symbol.
virtual bool isSignal() const =0
virtual bool isFriend() const =0
virtual DString argsString() 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 DString typeString() 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.
static ResourceMgr & instance()
Returns the one and only instance of this class.
class that provide information about a section.
Definition * definition() 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.
virtual DString trTypedefs()=0
virtual DString trExceptions()=0
virtual DString trEnumerations()=0
virtual DString trClasses()=0
virtual DString trGroup(bool first_capital, bool singular)=0
virtual DString trNamespace(bool first_capital, bool singular)=0
virtual DString trStructs()=0
virtual DString trSequences()=0
virtual DString trFunctions()=0
virtual DString trFriends()=0
virtual DString trOperations()=0
virtual DString trGlobalNamespace()=0
virtual DString trModules()=0
virtual DString trDefines()=0
virtual DString trModule(bool first_capital, bool singular)=0
virtual DString trProperties()=0
virtual DString trConcept(bool first_capital, bool singular)=0
virtual DString trSliceInterfaces()=0
virtual DString trAll()=0
virtual DString trVariables()=0
virtual DString trEnumerationValues()=0
virtual DString trPage(bool first_capital, bool singular)=0
virtual DString trFile(bool first_capital, bool singular)=0
virtual DString trConstants()=0
virtual DString trEvents()=0
virtual DString trDictionaries()=0
ClassDef * toClassDef(Definition *d)
#define Config_getInt(name)
#define Config_getBool(name)
#define Config_getString(name)
std::vector< size_t > SizeVector
DString parseCommentAsHtml(const Definition *scope, const MemberDef *member, const DString &doc, const DString &fileName, int lineNr)
DString substitute(const DString &s, const DString &src, const DString &dst)
substitute all occurrences of src in s by dst
bool isId(int c)
Returns true if c is a valid character for an identifier.
GroupDef * toGroupDef(Definition *d)
Translator * theTranslator
MemberDef * toMemberDef(Definition *d)
std::ofstream openOutputStream(const DString &name, bool append=false)
NamespaceDef * toNamespaceDef(Definition *d)
PageDef * toPageDef(Definition *d)
Portable versions of functions that are platform dependent.
static void addMemberToSearchIndex(const MemberDef *md)
#define SEARCH_INDEX_TYPEDEFS
#define SEARCH_INDEX_STRUCTS
static void writeJavascriptSearchData(const DString &searchDirName)
#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
#define SEARCH_INDEX_GROUPS
#define SEARCH_INDEX_INTERFACES
static void writeJavasScriptSearchDataPage(const DString &baseName, const DString &dataFileName, const SearchIndexList &list)
const std::array< SearchIndexInfo, NUM_SEARCH_INDICES > & getSearchIndices()
#define SEARCH_INDEX_SEQUENCES
#define SEARCH_INDEX_PROPERTIES
#define SEARCH_INDEX_ENUMVALUES
static void splitSearchTokens(DString &title, SizeVector &indices)
#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)
DString word
lower case word that is indexed (e.g. name of a symbol, or word from a title)
std::variant< std::monostate, const Definition *, const SectionInfo * > LinkInfo
LinkInfo info
definition to link to
SearchTerm(const DString &w, const Definition *d)
DString title
title to show in the output for this search result
DString 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.
DString filterTitle(const DString &title)
DString convertToJSString(const DString &s, bool keepEntities, bool singleQuotes)
void addHtmlExtensionIfMissing(DString &fName)
DString convertToXML(const DString &s, bool keepEntities, const bool citeEntry)
DString getLanguageSpecificSeparator(SrcLangExt lang, bool classScope)
DString externalRef(const DString &relPath, const DString &ref)
A bunch of utility functions.