55#define MAX_ITEMS_BEFORE_MULTIPAGE_INDEX 200
56#define MAX_ITEMS_BEFORE_QUICK_INDEX 30
60static void countFiles(
int &htmlFiles,
int &files);
138 return p->classIndexLetterUsed[
static_cast<int>(e)];
143 return p->fileIndexLetterUsed[
static_cast<int>(e)];
148 return p->namespaceIndexLetterUsed[
static_cast<int>(e)];
153 return p->moduleIndexLetterUsed[
static_cast<int>(e)];
158 p->documentedClassMembers[i]=0;
159 p->classIndexLetterUsed[i].clear();
164 p->documentedFileMembers[i]=0;
165 p->fileIndexLetterUsed[i].clear();
170 p->documentedNamespaceMembers[i]=0;
171 p->namespaceIndexLetterUsed[i].clear();
176 p->documentedModuleMembers[i]=0;
177 p->moduleIndexLetterUsed[i].clear();
182 auto it = map.find(letter);
185 it->second.push_back(md);
189 map.emplace(letter,std::vector<const MemberDef*>({md}));
195 p->documentedClassMembers[i]++;
201 p->documentedFileMembers[i]++;
207 p->documentedNamespaceMembers[i]++;
213 p->documentedModuleMembers[i]++;
222 for (
auto &[name,list] : map)
224 std::stable_sort(list.begin(),list.end(),
234 int result = qstricmp_sort(md1->name(),md2->name());
237 result = qstricmp_sort(md1->qualifiedName(),md2->qualifiedName());
244 for (
auto &idx : p->classIndexLetterUsed)
246 sortMemberIndexList(idx);
248 for (
auto &idx : p->fileIndexLetterUsed)
250 sortMemberIndexList(idx);
252 for (
auto &idx : p->namespaceIndexLetterUsed)
254 sortMemberIndexList(idx);
256 for (
auto &idx : p->moduleIndexLetterUsed)
258 sortMemberIndexList(idx);
349 ol.
writeString(
" <div id=\"navrow4\" class=\"tabs3\">\n");
353 ol.
writeString(
" <div id=\"navrow3\" class=\"tabs2\">\n");
365 bool hl,
bool ,
bool &first)
403 const QCString &altSidebarName,
int hierarchyLevel,
const QCString &allMembersFile)
408 bool quickLinksAfterSplitbar = !disableIndex && generateTreeView && fullSidebar;
409 ol.
startFile(name,manName,title,hierarchyLevel);
411 if (!disableIndex && !quickLinksAfterSplitbar)
415 if (!additionalIndices)
420 if (quickLinksAfterSplitbar)
436 if (generateTreeView)
453 if (generateTreeview)
476 bool lAddToIndex = addToIndex && !namespaceMemberInFileDocs;
497 for (
const auto &emd : enumList)
499 if (!hideUndocMembers || emd->hasDocumentation())
502 lAddToIndex = addToIndex && !namespaceMemberInFileDocs;
504 emd->qualifiedName() : emd->name();
505 if (emd->getOuterScope()==def ||
510 ename,emd->getReference(),emd->getOutputFileBase(),emd->anchor(),
FALSE,lAddToIndex && emd->getGroupDef()==
nullptr);
530 bool addToIndex=
TRUE,
bool preventSeparateIndex=
FALSE,
535 for (
const auto &cd : def->getClasses())
537 if (cd->isLinkable()) numClasses++;
542 for (
const auto &cd : *concepts)
544 if (cd->isLinkable()) numConcepts++;
547 bool hasMembers = !def->getMemberLists().empty() || !def->getMemberGroups().empty() || (numClasses>0) || (numConcepts>0);
549 def->getReference(),def->getOutputFileBase(),anchor,
550 hasMembers && !preventSeparateIndex,
554 if (hasMembers || numClasses>0 || numConcepts>0)
559 auto kind = lde->kind();
560 if (kind==LayoutDocEntry::MemberDef)
568 for (
const auto &md : *ml)
570 if (md->visibleInIndex())
578 else if (kind==LayoutDocEntry::NamespaceClasses ||
579 kind==LayoutDocEntry::FileClasses ||
580 kind==LayoutDocEntry::ClassNestedClasses ||
581 kind==LayoutDocEntry::ModuleClasses
584 for (
const auto &cd : def->getClasses())
586 if (cd->isLinkable() && (cd->partOfGroups().empty() || def->definitionType()==
Definition::TypeGroup))
590 addMembersToIndex(cd,LayoutDocManager::Class,cd->displayName(lde->kind()==LayoutDocEntry::FileClasses),cd->anchor(),
591 addToIndex && (isNestedClass || (cd->isSimple() && inlineSimpleStructs)),
592 preventSeparateIndex || cd->isEmbeddedInOuterScope());
596 else if ((kind==LayoutDocEntry::FileConcepts || kind==LayoutDocEntry::ModuleConcepts) && concepts)
598 for (
const auto &cd : *concepts)
600 if (cd->isLinkable() && (cd->partOfGroups().empty() || def->definitionType()==
Definition::TypeGroup))
603 cd->getReference(),cd->getOutputFileBase(),
QCString(),
622 if (bcl.empty())
return;
624 for (
const auto &bcd : bcl)
651 bool hasChildren = visitedClasses.find(cd)==visitedClasses.end() &&
699 visitedClasses.insert(cd);
732 for (
const auto &fd : dd->
getFiles())
734 bool genSourceFile =
false;
745 for(
const auto &subdd : dd->
subDirs())
761 "maximum nesting level exceeded for directory {}: "
762 "check for possible recursive directory relation!",dd->
name());
771 bool tocExpand =
TRUE;
772 bool isDir = !dd->
subDirs().empty() ||
804 for(
const auto &subdd : dd->
subDirs())
814 for (
const auto &fd : dd->
getFiles())
821 bool genSourceFile =
false;
826 else if (genSourceFile)
834 for (
const auto &fd : dd->
getFiles())
842 reference = fd->getReference();
843 outputBase = fd->getOutputFileBase();
852 if (ftv && (src || doc))
856 reference,outputBase,
865 if (tocExpand && addToIndex)
870 for (
const auto &fd : dd->
getFiles())
877 !fd->isLinkableViaGroup(),
FALSE,&fd->getConcepts());
919 for (
const auto &fd : *fn)
921 if (fd->getDirDef()==
nullptr)
928 reference = fd->getReference();
929 outputBase = fd->getOutputFileBase();
968 for (
const auto &cd : cl)
976 if (cd->getLanguage()==SrcLangExt::VHDL)
984 else if (sliceOpt && cd->compoundType() != ct)
995 if (cd->isVisibleInHierarchy())
1007 bool hasChildren = visitedClasses.find(cd.get())==visitedClasses.end() &&
1010 if (cd->isLinkable())
1016 ol.
endIndexItem(cd->getReference(),cd->getOutputFileBase());
1017 if (cd->isReference())
1020 ol.
docify(
" [external]");
1025 if (cd->getLanguage()!=SrcLangExt::VHDL)
1026 Doxygen::indexList->addContentsItem(hasChildren,cd->displayName(),cd->getReference(),cd->getOutputFileBase(),cd->anchor(),
FALSE,
FALSE);
1030 ftv->
addContentsItem(hasChildren,cd->displayName(),cd->getReference(),cd->getOutputFileBase(),cd->anchor(),
FALSE,
FALSE,cd.get());
1047 if (cd->getLanguage()==SrcLangExt::VHDL && hasChildren)
1050 visitedClasses.insert(cd.get());
1052 else if (hasChildren)
1055 visitedClasses.insert(cd.get());
1094 for (
const auto &cd : cl)
1096 if (sliceOpt && cd->compoundType() != ct)
1102 if (cd->isVisibleInHierarchy())
1104 if (!cd->subClasses().empty())
1134 bool addToIndex = lne==
nullptr || lne->
visible();
1240 bool addToIndex = lne==
nullptr || lne->
visible();
1345 bool addToIndex = lne==
nullptr || lne->
visible();
1447 for (
const auto &fd: *fn)
1554 bool addToIndex = lne==
nullptr || lne->
visible();
1587 std::unordered_map<std::string,size_t> pathMap;
1588 std::vector<FilesInDir> outputFiles;
1593 for (
const auto &fd : *fn)
1596 if (path.
isEmpty()) path=
"[external]";
1597 auto it = pathMap.
find(path.
str());
1598 if (it!=pathMap.end())
1600 outputFiles.at(it->second).files.push_back(fd.get());
1604 pathMap.emplace(path.
str(),outputFiles.size());
1605 outputFiles.emplace_back(path);
1606 outputFiles.back().files.push_back(fd.get());
1612 std::stable_sort(outputFiles.begin(),
1614 [](
const auto &fp1,
const auto &fp2) { return qstricmp_sort(fp1.path,fp2.path)<0; });
1616 for (
auto &fp : outputFiles)
1621 for (
const auto &fp : outputFiles)
1623 for (
const auto &fd : fp.files)
1633 for (
const auto &fd : *fn)
1676 if (nd->isLinkableInProject()) count++;
1687 if (cd->isLinkableInProject()) count++;
1698template<
class ListType>
1702 for (
const auto &cdi : cl)
1728 if (ccd->isLinkableInProject() && !ccd->isImplicitTemplateInstance())
1766 if (lde->kind()==LayoutDocEntry::MemberDef)
1774 for (
const auto &md : *ml)
1777 if (md->visibleInIndex())
1792 if (lde->kind()==LayoutDocEntry::MemberDecl)
1800 for (
const auto &md : *ml)
1803 if (md->visibleInIndex())
1817 bool rootOnly,
bool addToIndex);
1820 bool rootOnly,
bool addToIndex)
1827 bool hasChildren = hasNestedNamespace ||
1847 bool isDir = hasChildren || visibleMembers>0;
1848 if (isLinkable || isDir)
1857 if (addToIndex && isDir)
1871 if (addToIndex && isDir)
1880 bool rootOnly,
bool addToIndex)
1882 for (
const auto &nd : nsLinkedMap)
1884 if (nd->isVisibleInHierarchy())
1892 bool rootOnly,
bool addToIndex)
1894 for (
const auto &nd : nsLinkedMap)
1896 if (nd->isVisibleInHierarchy())
1981 for (
const auto &nd : nsLinkedMap)
1990 for (
const auto &nd : nsLinkedMap)
2005 bool addToIndex = lne==
nullptr || lne->
visible();
2025 if (nd->isLinkableInProject())
2034 if (nd->getLanguage()==SrcLangExt::VHDL)
2044 bool hasBrief = !nd->briefDescription().isEmpty();
2050 nd->briefFile(),nd->briefLine(),
2052 nd->briefDescription(
TRUE),
2109 if (sliceOpt && cd->compoundType() != ct)
2113 if (cd->isLinkableInProject() && !cd->isImplicitTemplateInstance())
2115 if (!cd->isEmbeddedInOuterScope())
2137 if (cd->getLanguage()==SrcLangExt::VHDL &&
2150 if (sliceOpt && cd->compoundType() != ct)
2156 if (cd->isEmbeddedInOuterScope())
2162 if (cd->isLinkableInProject() && !cd->isImplicitTemplateInstance())
2165 if (cd->getLanguage()==SrcLangExt::VHDL)
2173 bool hasBrief = !cd->briefDescription().isEmpty();
2178 cd->briefFile(),cd->briefLine(),
2180 cd->briefDescription(
TRUE),
2203 return (c<127 && c>31);
2208 if (startLetter.
isEmpty())
return startLetter;
2209 const char *p = startLetter.
data();
2219 const char hex[]=
"0123456789abcdef";
2222 result+=
hex[
static_cast<unsigned char>(c)>>4];
2223 result+=
hex[
static_cast<unsigned char>(c)&0xf];
2265 if (sliceOpt && cd->compoundType() != ct)
2267 if (cd->isLinkableInProject() && !cd->isImplicitTemplateInstance())
2274 std::string letter =
getUTF8CharAt(cd->className().str(),index);
2275 if (!letter.empty())
2283 QCString alphaLinks =
"<div class=\"qindex\">";
2285 for (
const auto &letter : indexLettersUsed)
2287 if (!first) alphaLinks +=
" | ";
2290 alphaLinks +=
"<a class=\"qindex\" href=\"#letter_" +
2294 alphaLinks +=
"</div>\n";
2297 std::map<std::string, std::vector<const ClassDef*> > classesByLetter;
2304 if (sliceOpt && cd->compoundType() != ct)
2309 if (cd->isLinkableInProject() && !cd->isImplicitTemplateInstance())
2311 QCString className = cd->className();
2314 if (!letter.empty())
2317 auto it = classesByLetter.find(letter);
2318 if (it!=classesByLetter.end())
2320 it->second.push_back(cd.get());
2324 classesByLetter.emplace(letter, std::vector<const ClassDef*>({ cd.get() }));
2331 for (
auto &[letter,list] : classesByLetter)
2333 std::stable_sort(list.begin(), list.end(),
2334 [](
const auto &c1,
const auto &c2)
2336 QCString n1 = c1->className();
2337 QCString n2 = c2->className();
2338 return qstricmp_sort(n1.data()+getPrefixIndex(n1), n2.data()+getPrefixIndex(n2))<0;
2343 if (!classesByLetter.empty())
2347 for (
const auto &cl : classesByLetter)
2349 QCString parity = (counter++%2)==0 ?
"even" :
"odd";
2350 ol.
writeString(
"<dl class=\"classindex " + parity +
"\">\n");
2365 for (
const auto &cd : cl.second)
2384 cd->getOutputFileBase(),cd->anchor(),cname);
2418 bool addToIndex = lne==
nullptr || lne->
visible();
2447 bool addToIndex = lne==
nullptr || lne->
visible();
2476 bool addToIndex = lne==
nullptr || lne->
visible();
2505 bool addToIndex = lne==
nullptr || lne->
visible();
2568 bool addToIndex = lne==
nullptr || lne->
visible();
2632 LayoutNavEntry::ClassList,LayoutNavEntry::Classes,
2646 LayoutNavEntry::InterfaceList,LayoutNavEntry::Interfaces,
2649 "annotatedinterfaces",
2660 LayoutNavEntry::StructList,LayoutNavEntry::Structs,
2674 LayoutNavEntry::ExceptionList,LayoutNavEntry::Exceptions,
2677 "annotatedexceptions",
2699 if (fd && prevFileName!=fd->
name())
2704 prevFileName = fd->
name();
2740 int index =
static_cast<int>(type);
2741 const int numIndices = 4;
2742 ASSERT(index<numIndices);
2748 static writeLinkForMember_t writeLinkForMemberMap[numIndices] =
2758 bool firstSection=
TRUE;
2759 bool firstItem=
TRUE;
2762 for (
const auto &kv : memberIndexMap)
2766 auto it = memberIndexMap.find(page);
2767 if (it != memberIndexMap.end())
2778 if (mil==
nullptr || mil->empty())
continue;
2779 for (
const auto &md : *mil)
2781 const char *sep =
nullptr;
2782 bool isFunc=!md->isObjCMethod() &&
2783 (md->isFunction() || md->isSlot() || md->isSignal());
2786 if (name.
data()+startIndex!=prevName)
2789 tolower(name.
at(startIndex))!=tolower(prevName.
at(0))) &&
2804 else if (!useSections && first)
2815 if (isFunc) ol.
docify(
"()");
2820 sep =
" : ";
2821 prevName = name.
data()+startIndex;
2828 if (index<numIndices)
2831 writeLinkForMemberMap[index](ol,md,sep,prevDefName);
2847 bool hideFriendCompounds =
Config_getBool(HIDE_FRIEND_COMPOUNDS);
2857 if (!letter.empty())
2860 bool isFriendToHide = hideFriendCompounds &&
2864 if (!(md->
isFriend() && isFriendToHide) &&
2899 (md->
isFriend() && !isFriendToHide))
2916 if (!letter.empty())
2964 if (!letter.empty())
3016 if (!letter.empty())
3055 for (
const auto &[letter,list] : map)
3064 anchor=fullName+extension+
"#index_";
3066 anchor=fullName+
"_"+is+extension+
"#index_";
3104 return &cmhlInfo[hl];
3110 if (index.numDocumentedClassMembers(hl)==0)
return;
3116 bool quickLinksAfterSplitbar = !disableIndex && generateTreeView && fullSidebar;
3118 bool multiPageIndex=
FALSE;
3121 multiPageIndex=
TRUE;
3131 bool addToIndex = lne==
nullptr || lne->
visible();
3141 for (
const auto &[letter,list] : index.isClassIndexLetterUsed(hl))
3159 auto writeQuickLinks = [&,cap_letter=letter]()
3200 if (!disableIndex && !quickLinksAfterSplitbar)
3206 if (quickLinksAfterSplitbar)
3224 multiPageIndex ? letter : std::string(),
3225 index.isClassIndexLetterUsed(hl),
3240 bool addToIndex = lne==
nullptr || lne->
visible();
3293 return &fmhlInfo[hl];
3299 if (index.numDocumentedFileMembers(hl)==0)
return;
3305 bool quickLinksAfterSplitbar = !disableIndex && generateTreeView && fullSidebar;
3307 bool multiPageIndex=
FALSE;
3310 multiPageIndex=
TRUE;
3319 bool addToIndex = lne==
nullptr || lne->
visible();
3329 for (
const auto &[letter,list] : index.isFileIndexLetterUsed(hl))
3347 auto writeQuickLinks = [&,cap_letter=letter]()
3386 if (!disableIndex && !quickLinksAfterSplitbar)
3392 if (quickLinksAfterSplitbar)
3410 multiPageIndex ? letter : std::string(),
3411 index.isFileIndexLetterUsed(hl),
3423 bool addToIndex = lne==
nullptr || lne->
visible();
3474 return &nmhlInfo[hl];
3483 if (index.numDocumentedNamespaceMembers(hl)==0)
return;
3489 bool quickLinksAfterSplitbar = !disableIndex && generateTreeView && fullSidebar;
3491 bool multiPageIndex=
FALSE;
3494 multiPageIndex=
TRUE;
3503 bool addToIndex = lne==
nullptr || lne->
visible();
3513 for (
const auto &[letter,list] : index.isNamespaceIndexLetterUsed(hl))
3531 auto writeQuickLinks = [&,cap_letter=letter]()
3570 if (!disableIndex && !quickLinksAfterSplitbar)
3576 if (quickLinksAfterSplitbar)
3594 multiPageIndex ? letter : std::string(),
3595 index.isNamespaceIndexLetterUsed(hl),
3608 bool addToIndex = lne==
nullptr || lne->
visible();
3651 return &nmhlInfo[hl];
3660 if (index.numDocumentedModuleMembers(hl)==0)
return;
3666 bool quickLinksAfterSplitbar = !disableIndex && generateTreeView && fullSidebar;
3668 bool multiPageIndex=
FALSE;
3671 multiPageIndex=
TRUE;
3680 bool addToIndex = lne==
nullptr || lne->
visible();
3690 for (
const auto &[letter,list] : index.isModuleIndexLetterUsed(hl))
3708 auto writeQuickLinks = [&,cap_letter=letter]()
3747 if (!disableIndex && !quickLinksAfterSplitbar)
3753 if (quickLinksAfterSplitbar)
3771 multiPageIndex ? letter : std::string(),
3772 index.isModuleIndexLetterUsed(hl),
3788 bool addToIndex = lne==
nullptr || lne->
visible();
3817 bool addToIndex = lne==
nullptr || lne->
visible();
3841 QCString n=pd->getOutputFileBase();
3842 if (!pd->title().isEmpty())
3876 docPages=indexPages=0;
3879 if (pd->visibleInIndex() && !pd->hasParentPage())
3883 if (pd->documentedPage())
3907 bool addToIndex = lne==
nullptr || lne->
visible();
3908 if (!addToIndex)
return;
3918 pageTitle=pd->
name();
3926 hasSubPages,pageTitle,
3933 hasSubPages || hasSections,pageTitle,
3939 bool doIndent = (hasSections || hasSubPages) &&
3983 if ((pd->getOuterScope()==
nullptr ||
3985 pd->visibleInIndex()
4010 if (!gd->isReference())
4026 if (dd->isLinkableInProject())
4046 bool oldStripCommentsState =
Config_getBool(STRIP_CODE_COMMENTS);
4059 int s = legendDocs.
find(
"<center>");
4060 int e = legendDocs.
find(
"</center>");
4062 if (imgExt==
"svg" && s!=-1 && e!=-1)
4064 legendDocs = legendDocs.
left(s+8) +
"[!-- " +
"SVG 0 --]" + legendDocs.
mid(e);
4095 "maximum nesting level exceeded for group {}: check for possible recursive group relation!",gd->
name());
4108 size_t numSubItems = 0;
4111 if (ml->listType().isDocumentation())
4113 numSubItems += ml->size();
4118 numSubItems += gd->
getFiles().size();
4120 numSubItems += gd->
getDirs().size();
4123 bool isDir = hasSubGroups || hasSubPages || numSubItems>0;
4150 ol.
docify(
" [external]");
4156 if (lde->kind()==LayoutDocEntry::MemberDef && addToIndex)
4164 for (
const auto &md : *ml)
4167 isDir = !enumList.
empty() && md->isEnumerate();
4168 if (md->isVisible() && !md->isAnonymous())
4171 md->qualifiedName(),md->getReference(),
4172 md->getOutputFileBase(),md->anchor(),
FALSE,addToIndex);
4177 for (
const auto &emd : enumList)
4179 if (emd->isVisible())
4182 emd->qualifiedName(),emd->getReference(),emd->getOutputFileBase(),
4183 emd->anchor(),
FALSE,addToIndex);
4192 else if (lde->kind()==LayoutDocEntry::GroupClasses && addToIndex)
4200 if (cd->isVisible() )
4203 LayoutDocManager::Class,
4211 else if (lde->kind()==LayoutDocEntry::GroupNamespaces && addToIndex &&
Config_getBool(SHOW_NAMESPACES))
4215 if (nd->isVisible())
4218 nd->displayName(),nd->getReference(),
4223 else if (lde->kind()==LayoutDocEntry::GroupConcepts && addToIndex)
4227 if (cd->isVisible())
4230 cd->displayName(),cd->getReference(),
4235 else if (lde->kind()==LayoutDocEntry::GroupFiles && addToIndex)
4237 for (
const auto &fd : gd->
getFiles())
4239 if (fd->isVisible())
4242 fd->displayName(),fd->getReference(),
4243 fd->getOutputFileBase(),
QCString(),
FALSE,fd->isLinkableViaGroup());
4247 else if (lde->kind()==LayoutDocEntry::GroupDirs && addToIndex)
4249 for (
const auto &dd : gd->
getDirs())
4251 if (dd->isVisible())
4254 dd->shortName(),dd->getReference(),
4259 else if (lde->kind()==LayoutDocEntry::GroupPageDocs && addToIndex)
4261 for (
const auto &pd : gd->
getPages())
4265 hasSubPages = pd->hasSubPages();
4266 bool hasSections = pd->hasSections();
4268 hasSubPages || hasSections,
4273 hasSubPages || hasSections,
4275 if (hasSections || hasSubPages)
4281 pd->addSectionsToIndex();
4284 if (hasSections || hasSubPages)
4290 else if (lde->kind()==LayoutDocEntry::GroupNestedGroups)
4328 if (gd->isVisibleInHierarchy())
4351 bool addToIndex = lne==
nullptr || lne->
visible();
4412 FTVHelp* ftv,
bool addToIndex)
4415 bool isDir=visibleMembers>0;
4434 ol.
docify(
" [external]");
4437 if (addToIndex && isDir)
4449 if (addToIndex && isDir)
4468 if (mod->isPrimaryInterface())
4493 bool addToIndex = lne==
nullptr || lne->
visible();
4552 for (
const auto &cd : concepts)
4554 if (cd->isLinkableInProject())
4559 cd->getOutputFileBase(),
QCString(),
false,cd->partOfGroups().empty(),cd);
4564 cd->getOutputFileBase(),
QCString(),
false,cd->partOfGroups().empty());
4571 bool rootOnly,
bool addToIndex);
4574 bool rootOnly,
bool addToIndex)
4576 for (
const auto &nd : nsLinkedMap)
4584 bool rootOnly,
bool addToIndex)
4638 if ((cd->getOuterScope()==
nullptr ||
4644 false,cd->localName(),cd->getReference(),cd->getOutputFileBase(),
4645 QCString(),
false,cd->partOfGroups().empty(),cd.get());
4649 false,cd->localName(),cd->getReference(),cd->getOutputFileBase(),
4650 QCString(),
false,cd->partOfGroups().empty(),cd.get());
4665 bool addToIndex = lne==
nullptr || lne->
visible();
4686 if (cd->isLinkableInProject())
4698 bool hasBrief = !cd->briefDescription().isEmpty();
4704 cd->briefFile(),cd->briefLine(),
4706 cd->briefDescription(
TRUE),
4774 for (
const auto &entry: lne->
children())
4776 if (entry->visible()) count++;
4781 for (
const auto &entry: lne->
children())
4783 if (entry->visible())
4785 ol.
writeString(
"<li><a href=\""+entry->url()+
"\"><span>"+
4786 fixSpaces(entry->title())+
"</span></a></li>\n");
4814 projPrefix=projectName+
" ";
4861 bool quickLinksAfterSplitbar = !disableIndex && generateTreeView && fullSidebar;
4863 if (!disableIndex && !quickLinksAfterSplitbar)
4869 if (quickLinksAfterSplitbar)
4874 bool headerWritten=
FALSE;
4896 headerWritten =
TRUE;
4906 headerWritten =
TRUE;
4970 msg(
"Generating main page...\n");
5009 if (index.numDocumentedPages()>0)
5024 if (index.numDocumentedModules()>0)
5030 if (index.numDocumentedGroups()>0)
5036 if (
Config_getBool(SHOW_NAMESPACES) && (index.numDocumentedNamespaces()>0))
5046 if (index.numDocumentedConcepts()>0)
5052 if (index.numHierarchyInterfaces()>0)
5058 if (index.numHierarchyClasses()>0)
5072 if (index.numHierarchyExceptions()>0)
5078 if (index.numAnnotatedInterfacesPrinted()>0)
5084 if (index.numAnnotatedClassesPrinted()>0)
5094 if (index.numAnnotatedStructsPrinted()>0)
5100 if (index.numAnnotatedExceptionsPrinted()>0)
5115 if (index.numDocumentedModules()>0)
5121 if (index.numDocumentedGroups()>0)
5127 if (index.numDocumentedNamespaces()>0)
5133 if (index.numDocumentedConcepts()>0)
5139 if (index.numAnnotatedInterfacesPrinted()>0)
5145 if (index.numAnnotatedClassesPrinted()>0)
5151 if (index.numAnnotatedStructsPrinted()>0)
5157 if (index.numAnnotatedExceptionsPrinted()>0)
5187 return s.startsWith(
"@ref") || s.startsWith(
"\\ref");
5191 for (
const auto &lne : entries)
5194 size_t idx =
static_cast<size_t>(kind);
5198 size_t newSize = idx+1;
5203 bool addToIndex=lne->visible();
5204 bool needsClosing=
FALSE;
5209 case LayoutNavEntry::MainPage:
5210 msg(
"Generating index page...\n");
5213 case LayoutNavEntry::Pages:
5214 msg(
"Generating page index...\n");
5217 case LayoutNavEntry::Topics:
5218 msg(
"Generating topic index...\n");
5221 case LayoutNavEntry::Modules:
5223 if (index.numDocumentedModules()>0 && addToIndex)
5231 case LayoutNavEntry::ModuleList:
5232 msg(
"Generating module index...\n");
5235 case LayoutNavEntry::ModuleMembers:
5236 msg(
"Generating module member index...\n");
5239 case LayoutNavEntry::Namespaces:
5244 if (index.numDocumentedNamespaces()>0 && addToIndex)
5252 msg(
"Generating namespace index...\n");
5258 case LayoutNavEntry::NamespaceList:
5263 msg(
"Generating namespace index...\n");
5268 case LayoutNavEntry::NamespaceMembers:
5269 msg(
"Generating namespace member index...\n");
5272 case LayoutNavEntry::Classes:
5273 if (index.numAnnotatedClasses()>0 && addToIndex)
5281 msg(
"Generating annotated compound index...\n");
5285 case LayoutNavEntry::Concepts:
5286 msg(
"Generating concept index...\n");
5289 case LayoutNavEntry::ClassList:
5290 msg(
"Generating annotated compound index...\n");
5293 case LayoutNavEntry::ClassIndex:
5294 msg(
"Generating alphabetical compound index...\n");
5297 case LayoutNavEntry::ClassHierarchy:
5298 msg(
"Generating hierarchical class index...\n");
5302 msg(
"Generating graphical class hierarchy...\n");
5306 case LayoutNavEntry::ClassMembers:
5309 msg(
"Generating member index...\n");
5313 case LayoutNavEntry::Interfaces:
5314 if (sliceOpt && index.numAnnotatedInterfaces()>0 && addToIndex)
5321 case LayoutNavEntry::InterfaceList:
5324 msg(
"Generating annotated interface index...\n");
5328 case LayoutNavEntry::InterfaceIndex:
5331 msg(
"Generating alphabetical interface index...\n");
5335 case LayoutNavEntry::InterfaceHierarchy:
5338 msg(
"Generating hierarchical interface index...\n");
5342 msg(
"Generating graphical interface hierarchy...\n");
5347 case LayoutNavEntry::Structs:
5348 if (sliceOpt && index.numAnnotatedStructs()>0 && addToIndex)
5355 case LayoutNavEntry::StructList:
5358 msg(
"Generating annotated struct index...\n");
5362 case LayoutNavEntry::StructIndex:
5365 msg(
"Generating alphabetical struct index...\n");
5369 case LayoutNavEntry::Exceptions:
5370 if (sliceOpt && index.numAnnotatedExceptions()>0 && addToIndex)
5377 case LayoutNavEntry::ExceptionList:
5380 msg(
"Generating annotated exception index...\n");
5384 case LayoutNavEntry::ExceptionIndex:
5387 msg(
"Generating alphabetical exception index...\n");
5391 case LayoutNavEntry::ExceptionHierarchy:
5394 msg(
"Generating hierarchical exception index...\n");
5398 msg(
"Generating graphical exception hierarchy...\n");
5403 case LayoutNavEntry::Files:
5405 if (
Config_getBool(SHOW_FILES) && index.numDocumentedFiles()>0 && addToIndex)
5413 msg(
"Generating file index...\n");
5418 case LayoutNavEntry::FileList:
5419 msg(
"Generating file index...\n");
5422 case LayoutNavEntry::FileGlobals:
5423 msg(
"Generating file member index...\n");
5426 case LayoutNavEntry::Examples:
5427 msg(
"Generating example index...\n");
5430 case LayoutNavEntry::User:
5435 bool isRelative=url.
at(0)==
'!';
5436 if (!url.
isEmpty() && !isRelative)
5444 case LayoutNavEntry::UserGroup:
5456 bool isRelative=url.
at(0)==
'!';
5474 case LayoutNavEntry::None:
5475 assert(kind != LayoutNavEntry::None);
5478 if (kind!=LayoutNavEntry::User && kind!=LayoutNavEntry::UserGroup)
5488 case LayoutNavEntry::Modules:
5489 case LayoutNavEntry::Namespaces:
5490 case LayoutNavEntry::Classes:
5491 case LayoutNavEntry::Files:
5492 case LayoutNavEntry::UserGroup:
5511 case LayoutNavEntry::MainPage:
return TRUE;
5512 case LayoutNavEntry::User:
return TRUE;
5513 case LayoutNavEntry::UserGroup:
return TRUE;
5514 case LayoutNavEntry::Pages:
return index.numIndexedPages()>0;
5515 case LayoutNavEntry::Topics:
return index.numDocumentedGroups()>0;
5516 case LayoutNavEntry::Modules:
return index.numDocumentedModules()>0;
5517 case LayoutNavEntry::ModuleList:
return index.numDocumentedModules()>0;
5519 case LayoutNavEntry::Namespaces:
return index.numDocumentedNamespaces()>0 && showNamespaces;
5520 case LayoutNavEntry::NamespaceList:
return index.numDocumentedNamespaces()>0 && showNamespaces;
5522 case LayoutNavEntry::Concepts:
return index.numDocumentedConcepts()>0;
5523 case LayoutNavEntry::Classes:
return index.numAnnotatedClasses()>0;
5524 case LayoutNavEntry::ClassList:
return index.numAnnotatedClasses()>0;
5525 case LayoutNavEntry::ClassIndex:
return index.numAnnotatedClasses()>0;
5526 case LayoutNavEntry::ClassHierarchy:
return index.numHierarchyClasses()>0;
5528 case LayoutNavEntry::Interfaces:
return index.numAnnotatedInterfaces()>0;
5529 case LayoutNavEntry::InterfaceList:
return index.numAnnotatedInterfaces()>0;
5530 case LayoutNavEntry::InterfaceIndex:
return index.numAnnotatedInterfaces()>0;
5531 case LayoutNavEntry::InterfaceHierarchy:
return index.numHierarchyInterfaces()>0;
5532 case LayoutNavEntry::Structs:
return index.numAnnotatedStructs()>0;
5533 case LayoutNavEntry::StructList:
return index.numAnnotatedStructs()>0;
5534 case LayoutNavEntry::StructIndex:
return index.numAnnotatedStructs()>0;
5535 case LayoutNavEntry::Exceptions:
return index.numAnnotatedExceptions()>0;
5536 case LayoutNavEntry::ExceptionList:
return index.numAnnotatedExceptions()>0;
5537 case LayoutNavEntry::ExceptionIndex:
return index.numAnnotatedExceptions()>0;
5538 case LayoutNavEntry::ExceptionHierarchy:
return index.numHierarchyExceptions()>0;
5539 case LayoutNavEntry::Files:
return index.numDocumentedFiles()>0 && showFiles;
5540 case LayoutNavEntry::FileList:
return index.numDocumentedFiles()>0 && showFiles;
5543 case LayoutNavEntry::None:
5544 assert(kind != LayoutNavEntry::None);
5552 std::function<std::size_t(std::size_t)> numDocumented,
5554 const T *(*getInfo)(
size_t hl),
5558 bool firstMember=
TRUE;
5559 for (std::size_t i=0;i<total;i++)
5561 if (numDocumented(i)>0)
5577 bool multiPageIndex=
FALSE;
5580 multiPageIndex=
TRUE;
5582 t <<
",children:[\n";
5583 bool firstLetter=
TRUE;
5584 for (
const auto &[letter,list] : getMemberList(i))
5586 if (!firstLetter) t <<
",\n";
5591 QCString fullName = getInfo(i)->fname;
5592 if (!multiPageIndex || firstLetter)
5593 anchor=fullName+extension+
"#index_";
5595 anchor=fullName+
"_"+is+extension+
"#index_";
5614 for (
const auto &entry : root->
children())
5620 bool firstChild =
TRUE;
5621 if (!first) t <<
",";
5622 t <<
"children:[\n";
5623 for (
const auto &entry : root->
children())
5627 if (!firstChild) t <<
",\n";
5630 if (
isURL(url)) url =
"^" + url;
5633 bool hasChildren=
FALSE;
5634 if (entry->kind()==LayoutNavEntry::ModuleMembers)
5636 auto numDoc = [](std::size_t i) {
5639 auto memList = [](std::size_t i) {
5644 if (entry->kind()==LayoutNavEntry::NamespaceMembers)
5646 auto numDoc = [](std::size_t i) {
5649 auto memList = [](std::size_t i) {
5654 else if (entry->kind()==LayoutNavEntry::ClassMembers)
5656 auto numDoc = [](std::size_t i) {
5659 auto memList = [](std::size_t i) {
5664 else if (entry->kind()==LayoutNavEntry::FileGlobals)
5666 auto numDoc = [](std::size_t i) {
5669 auto memList = [](std::size_t i) {
5678 if (hasChildren) t <<
"]";
5695 t <<
"var menudata={";
5697 if (hasChildren) t <<
"]";
const ClassDef * classDef() const
std::string letter() const
AlphaIndexTableCell(int row, int col, const std::string &letter, const ClassDef *cd)
A abstract class representing of a compound symbol.
virtual bool isVisibleInHierarchy() const =0
the class is visible in a class diagram, or class hierarchy
virtual const BaseClassList & baseClasses() const =0
Returns the list of base classes from which this class directly inherits.
virtual bool isSimple() const =0
virtual Protection protection() const =0
Return the protection level (Public,Protected,Private) in which this compound was found.
virtual bool isImplicitTemplateInstance() const =0
CompoundType
The various compound types.
virtual CompoundType compoundType() const =0
Returns the type of compound this is, i.e.
virtual ClassLinkedRefMap getClasses() const =0
returns the classes nested into this class
virtual const BaseClassList & subClasses() const =0
Returns the list of sub classes that directly derive from this class.
static const QCString crawlFileName
The common base class of all entity definitions found in the sources.
virtual bool isVisible() const =0
virtual const QCString & localName() const =0
virtual SrcLangExt getLanguage() const =0
Returns the programming language this definition was written in.
virtual bool hasSections() const =0
virtual QCString navigationPathAsString() const =0
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 int briefLine() const =0
virtual bool hasDocumentation() const =0
virtual bool isLinkableInProject() const =0
virtual QCString briefDescription(bool abbreviate=FALSE) const =0
virtual bool isAnonymous() const =0
virtual QCString getReference() const =0
virtual QCString getSourceFileBase() const =0
virtual const GroupList & partOfGroups() const =0
virtual QCString qualifiedName() const =0
virtual QCString displayName(bool includeScope=TRUE) const =0
virtual QCString briefFile() const =0
virtual QCString getOutputFileBase() const =0
virtual Definition * getOuterScope() const =0
virtual bool isReference() const =0
virtual const QCString & name() const =0
virtual void writePageNavigation(OutputList &) const =0
virtual void writeSummaryLinks(OutputList &) const =0
A model of a directory symbol.
virtual const QCString shortName() const =0
virtual const DirList & subDirs() const =0
virtual const FileList & getFiles() const =0
Represents a graphical class hierarchy.
Representation of a legend explaining the meaning of boxes, arrows, and colors.
void writeGraph(const QCString &path)
static NamespaceLinkedMap * namespaceLinkedMap
static ConceptLinkedMap * conceptLinkedMap
static std::unique_ptr< PageDef > mainPage
static FileNameLinkedMap * inputNameLinkedMap
static ClassLinkedMap * classLinkedMap
static PageLinkedMap * exampleLinkedMap
static NamespaceDefMutable * globalScope
static IndexList * indexList
static ClassLinkedMap * hiddenClassLinkedMap
static QCString htmlFileExtension
static PageLinkedMap * pageLinkedMap
static DirLinkedMap * dirLinkedMap
static GroupLinkedMap * groupLinkedMap
A class that generates a dynamic tree view side panel.
void addContentsItem(bool isDir, const QCString &name, const QCString &ref, const QCString &file, const QCString &anchor, bool separateIndex, bool addToNavIndex, const Definition *def)
void generateTreeViewInline(TextStream &t)
A model of a file symbol.
virtual QCString includeName() const =0
virtual QCString getPath() const =0
virtual bool generateSourceFile() const =0
virtual bool isDocumentationFile() const =0
A model of a group of symbols.
virtual const DirList & getDirs() const =0
virtual const GroupList & getSubGroups() const =0
virtual QCString groupTitle() const =0
virtual const FileList & getFiles() const =0
virtual const MemberLists & getMemberLists() const =0
virtual const ConceptLinkedRefMap & getConcepts() const =0
virtual const PageLinkedRefMap & getPages() const =0
virtual const NamespaceLinkedRefMap & getNamespaces() const =0
virtual bool isASubGroup() const =0
virtual bool isVisibleInHierarchy() const =0
virtual const ClassLinkedRefMap & getClasses() const =0
virtual MemberList * getMemberList(MemberListType lt) const =0
void incrementDocumentedNamespaceMembers(int i, const std::string &letter, const MemberDef *md)
int numAnnotatedInterfacesPrinted() const
void addClassMemberNameToIndex(const MemberDef *md)
std::vector< const MemberDef * > MemberIndexList
void resetDocumentedNamespaceMembers(int i)
int numDocumentedFiles() const
int numDocumentedNamespaces() const
int numIndexedPages() const
int numAnnotatedClassesPrinted() const
int numDocumentedGroups() const
void resetDocumentedModuleMembers(int i)
int numDocumentedModules() const
void incrementDocumentedFileMembers(int i, const std::string &letter, const MemberDef *md)
int numAnnotatedStructs() const
int numDocumentedConcepts() const
void addNamespaceMemberNameToIndex(const MemberDef *md)
void resetDocumentedClassMembers(int i)
int numAnnotatedStructsPrinted() const
void incrementDocumentedClassMembers(int i, const std::string &letter, const MemberDef *md)
MemberIndexMap isClassIndexLetterUsed(ClassMemberHighlight::Enum e) const
void addFileMemberNameToIndex(const MemberDef *md)
void incrementDocumentedModuleMembers(int i, const std::string &letter, const MemberDef *md)
int numHierarchyInterfaces() const
int numDocumentedClassMembers(ClassMemberHighlight::Enum e) const
int numDocumentedModuleMembers(ModuleMemberHighlight::Enum e) const
void addModuleMemberNameToIndex(const MemberDef *md)
int numDocumentedNamespaceMembers(NamespaceMemberHighlight::Enum e) const
int numDocumentedPages() const
int numHierarchyExceptions() const
int numAnnotatedExceptionsPrinted() const
int numDocumentedFileMembers(FileMemberHighlight::Enum e) const
int numAnnotatedExceptions() const
MemberIndexMap isFileIndexLetterUsed(FileMemberHighlight::Enum e) const
void sortMemberIndexLists()
std::map< std::string, MemberIndexList > MemberIndexMap
static Index & instance()
void countDataStructures()
int numHierarchyClasses() const
MemberIndexMap isModuleIndexLetterUsed(ModuleMemberHighlight::Enum e) const
void resetDocumentedFileMembers(int i)
int numDocumentedDirs() const
int numAnnotatedInterfaces() const
std::unique_ptr< Private > p
int numAnnotatedClasses() const
MemberIndexMap isNamespaceIndexLetterUsed(NamespaceMemberHighlight::Enum e) const
static LayoutDocManager & instance()
Returns a reference to this singleton.
LayoutNavEntry * rootNavEntry() const
returns the (invisible) root of the navigation tree.
std::unique_ptr< ClassDef > Ptr
const T * find(const std::string &key) const
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 MemberVector & enumFieldList() const =0
virtual const FileDef * getFileDef() const =0
virtual bool isEvent() const =0
virtual bool isFunction() const =0
virtual bool isDictionary() const =0
virtual const ModuleDef * getModuleDef() const =0
virtual bool isDefine() const =0
virtual const NamespaceDef * getNamespaceDef() const =0
virtual bool isEnumerate() const =0
virtual bool isVariable() const =0
virtual bool isStrong() const =0
virtual const MemberDef * getEnumScope() const =0
virtual bool isEnumValue() const =0
virtual bool isProperty() const =0
A list of MemberDef objects as shown in documentation sections.
A vector of MemberDef object.
bool empty() const noexcept
virtual MemberList * getMemberList(MemberListType lt) const =0
virtual int countVisibleMembers() const =0
virtual bool isPrimaryInterface() const =0
virtual const ConceptLinkedRefMap & getConcepts() const =0
virtual const ClassLinkedRefMap & getClasses() const =0
int numDocumentedModules() const
static ModuleManager & instance()
An abstract interface of a namespace symbol.
virtual MemberList * getMemberList(MemberListType lt) const =0
virtual ConceptLinkedRefMap getConcepts() const =0
virtual ClassLinkedRefMap getStructs() const =0
virtual ClassLinkedRefMap getExceptions() const =0
virtual NamespaceLinkedRefMap getNamespaces() const =0
virtual int countVisibleMembers() const =0
virtual ClassLinkedRefMap getClasses() const =0
virtual ClassLinkedRefMap getInterfaces() const =0
Class representing a list of output generators that are written to in parallel.
void endTextBlock(bool paraBreak=FALSE)
void writeString(const QCString &text)
void startIndexItem(const QCString &ref, const QCString &file)
void endTitleHead(const QCString &fileName, const QCString &name)
void endSection(const QCString &lab, SectionType t)
void endIndexValue(const QCString &name, bool b)
void disable(OutputType o)
void startTitleHead(const QCString &fileName)
void enable(OutputType o)
void writeObjectLink(const QCString &ref, const QCString &file, const QCString &anchor, const QCString &name)
void endIndexItem(const QCString &ref, const QCString &file)
void writeGraphicalHierarchy(DotGfxHierarchyTable &g)
void startFile(const QCString &name, const QCString &manName, const QCString &title, int hierarchyLevel=0)
void startHeaderSection()
void docify(const QCString &s)
void startParagraph(const QCString &classDef=QCString())
void endIndexSection(IndexSection is)
void startProjectNumber()
void startTextBlock(bool dense=FALSE)
void generateDoc(const QCString &fileName, int startLine, const Definition *ctx, const MemberDef *md, const QCString &docStr, bool indexWords, bool isExample, const QCString &exampleName, bool singleLine, bool linkFromIndex, bool markdownSupport)
void pushGeneratorState()
void disableAllBut(OutputType o)
void startIndexValue(bool b)
void startPageDoc(const QCString &pageTitle)
void writeSplitBar(const QCString &name, const QCString &allMembersFile)
void writeFooter(const QCString &navPath)
void startIndexListItem()
void parseText(const QCString &textStr)
void startSection(const QCString &lab, const QCString &title, SectionType t)
void startIndexSection(IndexSection is)
void startTextLink(const QCString &file, const QCString &anchor)
void writeQuickLinks(HighlightedItem hli, const QCString &file, bool extraTabs=false)
A model of a page symbol.
virtual void addSectionsToIndex()=0
virtual bool visibleInIndex() const =0
virtual const PageLinkedRefMap & getSubPages() const =0
virtual bool hasSubPages() const =0
virtual QCString title() const =0
This is an alternative implementation of QCString.
int find(char c, int index=0, bool cs=TRUE) const
QCString & prepend(const char *s)
size_t length() const
Returns the length of the string, not counting the 0-terminator.
bool startsWith(const char *s) const
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.
const std::string & str() const
QCString & replace(size_t index, size_t len, const char *s)
const char * data() const
Returns a pointer to the contents of the string in the form of a 0-terminated C string.
QCString left(size_t len) const
class that provide information about a section.
static SectionManager & instance()
returns a reference to the singleton
static constexpr int Subsection
Text streaming class that buffers data.
std::string str() const
Return the contents of the buffer as a std::string object.
static QCString getProtectionName(int prot)
static VhdlClasses convert(Protection prot)
bool classHasVisibleRoot(const BaseClassList &bcl)
bool classVisibleInIndex(const ClassDef *cd)
bool classHasVisibleChildren(const ClassDef *cd)
std::vector< BaseClassDef > BaseClassList
std::unordered_set< const ClassDef * > ClassDefSet
#define Config_updateBool(name, value)
#define Config_getBool(name)
#define Config_getString(name)
Definition * toDefinition(DefinitionMutable *dm)
static constexpr auto hex
static void addMembersToIndex()
std::unique_ptr< FileDef > createFileDef(const QCString &p, const QCString &n, const QCString &ref, const QCString &dn)
bool compareFileDefs(const FileDef *fd1, const FileDef *fd2)
constexpr auto JAVASCRIPT_LICENSE_TEXT
static bool quickLinkVisible(LayoutNavEntry::Kind kind)
static void writeConceptTreeInsideNamespace(const NamespaceLinkedRefMap &nsLinkedMap, FTVHelp *ftv, bool rootOnly, bool addToIndex)
static void writeClassTreeInsideNamespaceElement(const NamespaceDef *nd, FTVHelp *ftv, bool rootOnly, bool addToIndex, ClassDef::CompoundType ct)
void startTitle(OutputList &ol, const QCString &fileName, const DefinitionMutable *def)
static void writeIndexHierarchyEntries(OutputList &ol, const LayoutNavEntryList &entries)
static void writeClassTreeToOutput(OutputList &ol, const BaseClassList &bcl, int level, FTVHelp *ftv, bool addToIndex, ClassDefSet &visitedClasses)
void endFile(OutputList &ol, bool skipNavIndex, bool skipEndContents, const QCString &navPath)
#define MAX_ITEMS_BEFORE_QUICK_INDEX
static void writeFileMemberIndexFiltered(OutputList &ol, FileMemberHighlight::Enum hl)
#define MAX_ITEMS_BEFORE_MULTIPAGE_INDEX
static void writeNamespaceTree(const NamespaceLinkedRefMap &nsLinkedMap, FTVHelp *ftv, bool rootOnly, bool addToIndex)
static bool renderQuickLinksAsJs(std::ostream &t, LayoutNavEntry *root, bool first)
static void writeGraphicalClassHierarchy(OutputList &ol)
static void writeAnnotatedStructIndex(OutputList &ol)
static void writeAlphabeticalExceptionIndex(OutputList &ol)
static void writeClassMemberIndex(OutputList &ol)
void writeGraphInfo(OutputList &ol)
static std::vector< bool > indexWritten
static int countConcepts()
void endTitle(OutputList &ol, const QCString &fileName, const QCString &name)
static void writeAnnotatedIndex(OutputList &ol)
static void writeClassMemberIndexFiltered(OutputList &ol, ClassMemberHighlight::Enum hl)
static void writeAnnotatedClassList(OutputList &ol, ClassDef::CompoundType ct)
static void writeFileIndex(OutputList &ol)
static void writeGraphicalInterfaceHierarchy(OutputList &ol)
static void endQuickIndexList(OutputList &ol)
static void writeAlphabeticalIndex(OutputList &ol)
static int countClassHierarchy(ClassDef::CompoundType ct)
static void startQuickIndexItem(OutputList &ol, const QCString &l, bool hl, bool, bool &first)
static void writeAnnotatedInterfaceIndex(OutputList &ol)
static void writePageIndex(OutputList &ol)
static void writeNamespaceIndex(OutputList &ol)
static void writeClassTreeInsideNamespace(const NamespaceLinkedRefMap &nsLinkedMap, FTVHelp *ftv, bool rootOnly, bool addToIndex, ClassDef::CompoundType ct)
void renderMemberIndicesAsJs(std::ostream &t, std::function< std::size_t(std::size_t)> numDocumented, std::function< Index::MemberIndexMap(std::size_t)> getMemberList, const T *(*getInfo)(size_t hl), std::size_t total)
static void writeAnnotatedExceptionIndex(OutputList &ol)
static void writeHierarchicalInterfaceIndex(OutputList &ol)
static void writeNamespaceMembers(const NamespaceDef *nd, bool addToIndex)
static void countRelatedPages(int &docPages, int &indexPages)
static void writeUserGroupStubPage(OutputList &ol, LayoutNavEntry *lne)
static void writeNamespaceMemberIndexFiltered(OutputList &ol, NamespaceMemberHighlight::Enum hl)
static void writeNamespaceTreeElement(const NamespaceDef *nd, FTVHelp *ftv, bool rootOnly, bool addToIndex)
static bool mainPageHasOwnTitle()
static void writeTopicIndex(OutputList &ol)
static void writeClassTree(const ListType &cl, FTVHelp *ftv, bool addToIndex, bool globalOnly, ClassDef::CompoundType ct)
static void writeModuleMemberIndex(OutputList &ol)
static void writeConceptRootList(FTVHelp *ftv, bool addToIndex)
static const FmhlInfo * getFmhlInfo(size_t hl)
static void writeGraphicalExceptionHierarchy(OutputList &ol)
static void writeFileLinkForMember(OutputList &ol, const MemberDef *md, const QCString &separator, QCString &prevFileName)
static const MmhlInfo * getMmhlInfo(size_t hl)
static void writePages(PageDef *pd, FTVHelp *ftv)
static void countFiles(int &htmlFiles, int &files)
static void writeClassHierarchy(OutputList &ol, FTVHelp *ftv, bool addToIndex, ClassDef::CompoundType ct)
static void writeSingleFileIndex(OutputList &ol, const FileDef *fd)
static void writeNamespaceLinkForMember(OutputList &ol, const MemberDef *md, const QCString &separator, QCString &prevNamespaceName)
static void writeExampleIndex(OutputList &ol)
void startFile(OutputList &ol, const QCString &name, const QCString &manName, const QCString &title, HighlightedItem hli, bool additionalIndices, const QCString &altSidebarName, int hierarchyLevel, const QCString &allMembersFile)
static int countClassesInTreeList(const ClassLinkedMap &cl, ClassDef::CompoundType ct)
static void writeAlphabeticalInterfaceIndex(OutputList &ol)
static void endQuickIndexItem(OutputList &ol)
static void writeAnnotatedIndexGeneric(OutputList &ol, const AnnotatedIndexContext ctx)
static const NmhlInfo * getNmhlInfo(size_t hl)
const ClassDef * get_pointer(const Ptr &p)
static int countAnnotatedClasses(int *cp, ClassDef::CompoundType ct)
static void writeAlphabeticalStructIndex(OutputList &ol)
static void writeGroupHierarchy(OutputList &ol, FTVHelp *ftv, bool addToIndex)
static void writeModuleMembers(const ModuleDef *mod, bool addToIndex)
static void writeConceptTreeInsideNamespaceElement(const NamespaceDef *nd, FTVHelp *ftv, bool rootOnly, bool addToIndex)
static const CmhlInfo * getCmhlInfo(size_t hl)
static void writeDirHierarchy(OutputList &ol, FTVHelp *ftv, bool addToIndex)
std::set< std::string > UsedIndexLetters
static void writeConceptList(const ConceptLinkedRefMap &concepts, FTVHelp *ftv, bool addToIndex)
static void writeClassLinkForMember(OutputList &ol, const MemberDef *md, const QCString &separator, QCString &prevClassName)
void writeIndexHierarchy(OutputList &ol)
static void writeModuleList(OutputList &ol, FTVHelp *ftv, bool addToIndex)
static bool dirHasVisibleChildren(const DirDef *dd)
static int countNamespaces()
static void endIndexHierarchy(OutputList &ol, int level)
const int maxItemsBeforeQuickIndex
static QCString letterToLabel(const QCString &startLetter)
static void writeQuickMemberIndex(OutputList &ol, const Index::MemberIndexMap &map, const std::string &page, QCString fullName, bool multiPage)
void endFileWithNavPath(OutputList &ol, const DefinitionMutable *d, bool showPageNavigation)
static void writeConceptIndex(OutputList &ol)
static void writeModuleLinkForMember(OutputList &ol, const MemberDef *md, const QCString &separator, QCString &prevModuleName)
static void writeModuleIndex(OutputList &ol)
static void MemberIndexMap_add(Index::MemberIndexMap &map, const std::string &letter, const MemberDef *md)
static void writeIndex(OutputList &ol)
static void writeDirTreeNode(OutputList &ol, const DirDef *dd, int level, FTVHelp *ftv, bool addToIndex)
static void startIndexHierarchy(OutputList &ol, int level)
static bool quickLinkVisible(LayoutNavEntry::Kind kind)
static void writeModuleTreeNode(OutputList &ol, const ModuleDef *mod, FTVHelp *ftv, bool addToIndex)
static void writeHierarchicalExceptionIndex(OutputList &ol)
static void writeNamespaceMemberIndex(OutputList &ol)
static void writeHierarchicalIndex(OutputList &ol)
static void writeMenuData()
static void writeGroupTreeNode(OutputList &ol, const GroupDef *gd, int level, FTVHelp *ftv, bool addToIndex)
static void writeMemberToIndex(const Definition *def, const MemberDef *md, bool addToIndex)
static void writeMemberList(OutputList &ol, bool useSections, const std::string &page, const Index::MemberIndexMap &memberIndexMap, Definition::DefType type)
static void writeFileMemberIndex(OutputList &ol)
static void writeClassTreeForList(OutputList &ol, const ClassLinkedMap &cl, bool &started, FTVHelp *ftv, bool addToIndex, ClassDef::CompoundType ct, ClassDefSet &visitedClasses)
static void writeModuleMemberIndexFiltered(OutputList &ol, ModuleMemberHighlight::Enum hl)
static void writeAlphabeticalClassList(OutputList &ol, ClassDef::CompoundType ct, int)
static void startQuickIndexList(OutputList &ol, bool letterTabs=FALSE)
@ isNamespaceDocumentation
Translator * theTranslator
std::vector< std::unique_ptr< LayoutNavEntry > > LayoutNavEntryList
#define warn(file, line, fmt,...)
std::ofstream openOutputStream(const QCString &name, bool append=false)
bool namespaceHasNestedNamespace(const NamespaceDef *nd)
bool namespaceHasNestedClass(const NamespaceDef *nd, bool filterClasses, ClassDef::CompoundType ct)
NamespaceDef * getResolvedNamespace(const QCString &name)
bool namespaceHasNestedConcept(const NamespaceDef *nd)
Portable versions of functions that are platform dependent.
int qstricmp(const char *s1, const char *s2)
QCString substitute(const QCString &s, const QCString &src, const QCString &dst)
substitute all occurrences of src in s by dst
uint32_t qstrlen(const char *str)
Returns the length of string str, or 0 if a null pointer is passed.
const LayoutNavEntry::Kind fallbackKind
AnnotatedIndexContext(int numAnno, int numPrint, LayoutNavEntry::Kind lk, LayoutNavEntry::Kind fk, const QCString &title, const QCString &intro, ClassDef::CompoundType ct, const QCString &fn, HighlightedItem hi)
const ClassDef::CompoundType compoundType
const HighlightedItem hiItem
const QCString fileBaseName
const LayoutNavEntry::Kind listKind
const QCString listDefaultTitleText
const QCString listDefaultIntroText
Helper class representing a class member in the navigation menu.
CmhlInfo(const char *fn, const QCString &t)
Helper class representing a file member in the navigation menu.
FmhlInfo(const char *fn, const QCString &t)
std::array< MemberIndexMap, ModuleMemberHighlight::Total > moduleIndexLetterUsed
std::array< MemberIndexMap, ClassMemberHighlight::Total > classIndexLetterUsed
int annotatedExceptionsPrinted
int annotatedStructsPrinted
std::array< int, FileMemberHighlight::Total > documentedFileMembers
std::array< MemberIndexMap, FileMemberHighlight::Total > fileIndexLetterUsed
std::array< int, ModuleMemberHighlight::Total > documentedModuleMembers
int annotatedInterfacesPrinted
std::array< int, NamespaceMemberHighlight::Total > documentedNamespaceMembers
std::array< int, ClassMemberHighlight::Total > documentedClassMembers
std::array< MemberIndexMap, NamespaceMemberHighlight::Total > namespaceIndexLetterUsed
int annotatedClassesPrinted
Represents of a member declaration list with configurable title and subtitle.
Represents of a member definition list with configurable title.
Base class for the layout of a navigation item at the top of the HTML pages.
const LayoutNavEntryList & children() const
QCString baseFile() const
LayoutNavEntry * find(LayoutNavEntry::Kind k, const QCString &file=QCString()) const
Helper class representing a module member in the navigation menu.
MmhlInfo(const char *fn, const QCString &t)
Helper class representing a namespace member in the navigation menu.
NmhlInfo(const char *fn, const QCString &t)
std::string convertUTF8ToUpper(const std::string &input)
Converts the input string into a upper case version, also taking into account non-ASCII characters th...
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.
Various UTF8 related helper functions.
QCString correctURL(const QCString &url, const QCString &relPath)
Corrects URL url according to the relative path relPath.
QCString filterTitle(const QCString &title)
bool fileVisibleInIndex(const FileDef *fd, bool &genSourceFile)
bool isURL(const QCString &url)
Checks whether the given url starts with a supported protocol.
static QCString stripFromPath(const QCString &p, const StringVector &l)
QCString convertToJSString(const QCString &s)
void extractNamespaceName(const QCString &scopeName, QCString &className, QCString &namespaceName, bool allowEmptyClass)
QCString getLanguageSpecificSeparator(SrcLangExt lang, bool classScope)
Returns the scope separator to use given the programming language lang.
QCString getDotImageExtension()
int getPrefixIndex(const QCString &name)
QCString convertToId(const QCString &s)
void addHtmlExtensionIfMissing(QCString &fName)
A bunch of utility functions.
QCString fixSpaces(const QCString &s)