56#define MAX_ITEMS_BEFORE_MULTIPAGE_INDEX 200
57#define MAX_ITEMS_BEFORE_QUICK_INDEX 30
59constexpr auto alphaSepar =
"<div class=\"alphasepar\"></div>";
63static void countFiles(
int &htmlFiles,
int &files);
141 return p->classIndexLetterUsed[
static_cast<int>(e)];
146 return p->fileIndexLetterUsed[
static_cast<int>(e)];
151 return p->namespaceIndexLetterUsed[
static_cast<int>(e)];
156 return p->moduleIndexLetterUsed[
static_cast<int>(e)];
161 p->documentedClassMembers[i]=0;
162 p->classIndexLetterUsed[i].clear();
167 p->documentedFileMembers[i]=0;
168 p->fileIndexLetterUsed[i].clear();
173 p->documentedNamespaceMembers[i]=0;
174 p->namespaceIndexLetterUsed[i].clear();
179 p->documentedModuleMembers[i]=0;
180 p->moduleIndexLetterUsed[i].clear();
185 auto it = map.find(letter);
188 it->second.push_back(md);
192 map.emplace(letter,std::vector<const MemberDef*>({md}));
198 p->documentedClassMembers[i]++;
204 p->documentedFileMembers[i]++;
210 p->documentedNamespaceMembers[i]++;
216 p->documentedModuleMembers[i]++;
225 for (
auto &[name,list] : map)
227 std::stable_sort(list.begin(),list.end(),
237 int result = dstricmp_sort(md1->name(),md2->name());
240 result = dstricmp_sort(md1->qualifiedName(),md2->qualifiedName());
247 for (
auto &idx : p->classIndexLetterUsed)
249 sortMemberIndexList(idx);
251 for (
auto &idx : p->fileIndexLetterUsed)
253 sortMemberIndexList(idx);
255 for (
auto &idx : p->namespaceIndexLetterUsed)
257 sortMemberIndexList(idx);
259 for (
auto &idx : p->moduleIndexLetterUsed)
261 sortMemberIndexList(idx);
352 ol.
writeString(
" <div id=\"navrow4\" class=\"tabs3\">\n");
356 ol.
writeString(
" <div id=\"navrow3\" class=\"tabs2\">\n");
368 bool hl,
bool ,
bool &first)
406 const DString &altSidebarName,
int hierarchyLevel,
const DString &allMembersFile)
411 bool quickLinksAfterSplitbar = !disableIndex && generateTreeView && fullSidebar;
412 ol.
startFile(name,isSource,manName,title,hierarchyLevel);
414 if (!disableIndex && !quickLinksAfterSplitbar)
418 if (!additionalIndices)
423 if (quickLinksAfterSplitbar)
439 if (generateTreeView)
456 if (generateTreeview)
466 endFile(ol,generateTreeview,
true,navPath);
475 bool isDir = md->
isEnumerate() && std::any_of(enumList.
begin(),enumList.
end(),[](
const auto &emd) { return emd->hasDocumentation(); });
478 bool lAddToIndex = addToIndex && !namespaceMemberInFileDocs;
499 for (
const auto &emd : enumList)
501 if (emd->hasDocumentation())
504 lAddToIndex = addToIndex && !namespaceMemberInFileDocs;
506 emd->qualifiedName() : emd->name();
507 if (emd->getOuterScope()==def ||
512 ename,emd->getReference(),emd->getOutputFileBase(),emd->anchor(),
false,lAddToIndex && emd->getGroupDef()==
nullptr);
532 bool addToIndex=
true,
bool preventSeparateIndex=
false,
537 for (
const auto &cd : def->getClasses())
539 if (cd->isLinkable()) numClasses++;
544 for (
const auto &cd : *concepts)
546 if (cd->isLinkable()) numConcepts++;
549 bool hasMembers = !def->getMemberLists().empty() || !def->getMemberGroups().empty() || (numClasses>0) || (numConcepts>0);
551 def->getReference(),def->getOutputFileBase(),anchor,
552 hasMembers && !preventSeparateIndex,
557 if (hasMembers || numClasses>0 || numConcepts>0)
562 auto kind = lde->kind();
563 if (kind==LayoutDocEntry::MemberDef)
571 for (
const auto &md : *ml)
573 if (md->visibleInIndex())
581 else if (kind==LayoutDocEntry::NamespaceClasses ||
582 kind==LayoutDocEntry::FileClasses ||
583 kind==LayoutDocEntry::ClassNestedClasses ||
584 kind==LayoutDocEntry::ModuleClasses
587 for (
const auto &cd : def->getClasses())
589 if (cd->isLinkable() && (cd->partOfGroups().empty() || def->definitionType()==
Definition::TypeGroup))
593 addMembersToIndex(cd,LayoutDocManager::Class,cd->displayName(lde->kind()==LayoutDocEntry::FileClasses),cd->anchor(),
594 addToIndex && (isNestedClass || (cd->isSimple() && inlineSimpleStructs)),
595 preventSeparateIndex || cd->isEmbeddedInOuterScope());
599 else if ((kind==LayoutDocEntry::FileConcepts || kind==LayoutDocEntry::ModuleConcepts) && concepts)
601 for (
const auto &cd : *concepts)
603 if (cd->isLinkable() && (cd->partOfGroups().empty() || def->definitionType()==
Definition::TypeGroup))
606 cd->getReference(),cd->getOutputFileBase(),
DString(),
625 if (bcl.empty())
return;
627 for (
const auto &bcd : bcl)
654 bool hasChildren = visitedClasses.find(cd)==visitedClasses.end() &&
669 .setAutolinkSupport(
false));
710 visitedClasses.insert(cd);
743 for (
const auto &fd : dd->
getFiles())
745 bool genSourceFile =
false;
746 if (fd->visibleInIndex(genSourceFile))
756 for(
const auto &subdd : dd->
subDirs())
772 "maximum nesting level exceeded for directory {}: "
773 "check for possible recursive directory relation!",dd->
name());
782 bool tocExpand =
true;
783 bool isDir = !dd->
subDirs().empty() ||
809 .setAutolinkSupport(
false));
822 for(
const auto &subdd : dd->
subDirs())
832 for (
const auto &fd : dd->
getFiles())
839 bool genSourceFile =
false;
840 if (fd->visibleInIndex(genSourceFile))
844 else if (genSourceFile)
852 for (
const auto &fd : dd->
getFiles())
855 bool doc = fd->visibleInIndex(src);
860 reference = fd->getReference();
861 outputBase = fd->getOutputFileBase();
874 .setAutolinkSupport(
false));
877 if (ftv && (src || doc))
881 reference,outputBase,
890 if (tocExpand && addToIndex)
895 for (
const auto &fd : dd->
getFiles())
898 bool doc = fd->visibleInIndex(src);
902 !fd->isLinkableViaGroup(),
false,&fd->getConcepts());
908 fd->getSourceFileBase(),
DString(),
false,
true, fd);
944 for (
const auto &fd : *fn)
946 if (fd->getDirDef()==
nullptr)
949 bool doc = fd->visibleInIndex(src);
953 reference = fd->getReference();
954 outputBase = fd->getOutputFileBase();
959 reference, outputBase,
DString(),
960 false,
false,fd.get());
971 false, fd->displayName(),
DString(),
972 fd->getSourceFileBase(),
DString(),
false,
true, fd.get());
993 for (
const auto &cd : cl)
996 if (cd->getLanguage()==SrcLangExt::VHDL)
1004 else if (sliceOpt && cd->compoundType() != ct)
1015 if (cd->isVisibleInHierarchy())
1027 bool hasChildren = visitedClasses.find(cd.get())==visitedClasses.end() &&
1031 if (cd->isLinkable())
1042 .setSingleLine(
true)
1043 .setAutolinkSupport(
false));
1044 ol.
endIndexItem(cd->getReference(),cd->getOutputFileBase());
1045 if (cd->isReference())
1048 ol.
docify(
" [external]");
1053 if (cd->getLanguage()!=SrcLangExt::VHDL)
1060 ftv->
addContentsItem(hasChildren,cd->displayName(),cd->getReference(),cd->getOutputFileBase(),cd->anchor(),
false,
false,cd.get(),escapedName);
1077 if (cd->getLanguage()==SrcLangExt::VHDL && hasChildren)
1080 visitedClasses.insert(cd.get());
1082 else if (hasChildren)
1085 visitedClasses.insert(cd.get());
1124 for (
const auto &cd : cl)
1126 if (sliceOpt && cd->compoundType() != ct)
1132 if (cd->isVisibleInHierarchy())
1134 if (!cd->subClasses().empty())
1164 bool addToIndex = lne==
nullptr || lne->
visible();
1270 bool addToIndex = lne==
nullptr || lne->
visible();
1375 bool addToIndex = lne==
nullptr || lne->
visible();
1477 for (
const auto &fd: *fn)
1480 bool doc = fd->visibleInIndex(src);
1550 .setSingleLine(
true)
1551 .setLinkFromIndex(
true));
1582 if (dir->hasDocumentation())
1607 bool addToIndex = lne==
nullptr || lne->
visible();
1640 std::unordered_map<std::string,size_t> pathMap;
1641 std::vector<FilesInDir> outputFiles;
1646 for (
const auto &fd : *fn)
1649 if (path.
empty()) path=
"[external]";
1650 auto it = pathMap.
find(path.
str());
1651 if (it!=pathMap.end())
1653 outputFiles.at(it->second).files.push_back(fd.get());
1657 pathMap.emplace(path.
str(),outputFiles.size());
1658 outputFiles.emplace_back(path);
1659 outputFiles.back().files.push_back(fd.get());
1665 std::stable_sort(outputFiles.begin(),
1667 [](
const auto &fp1,
const auto &fp2) { return dstricmp_sort(fp1.path,fp2.path)<0; });
1669 for (
auto &fp : outputFiles)
1674 for (
const auto &fp : outputFiles)
1676 for (
const auto &fd : fp.files)
1686 for (
const auto &fd : *fn)
1729 if (nd->isLinkableInProject()) count++;
1740 if (cd->isLinkableInProject()) count++;
1751template<
class ListType>
1755 for (
const auto &cdi : cl)
1781 if (ccd->isLinkableInProject() && !ccd->isImplicitTemplateInstance())
1820 if (lde->kind()==LayoutDocEntry::MemberDef)
1828 for (
const auto &md : *ml)
1831 if (md->visibleInIndex())
1846 if (lde->kind()==LayoutDocEntry::MemberDecl)
1854 for (
const auto &md : *ml)
1857 if (md->visibleInIndex())
1871 bool rootOnly,
bool addToIndex);
1874 bool rootOnly,
bool addToIndex)
1881 bool hasChildren = hasNestedNamespace ||
1901 bool isDir = hasChildren || visibleMembers>0;
1902 if (isLinkable || isDir)
1911 if (addToIndex && isDir)
1925 if (addToIndex && isDir)
1934 bool rootOnly,
bool addToIndex)
1936 for (
const auto &nd : nsLinkedMap)
1938 if (nd->isVisibleInHierarchy())
1946 bool rootOnly,
bool addToIndex)
1948 for (
const auto &nd : nsLinkedMap)
1950 if (nd->isVisibleInHierarchy())
2035 for (
const auto &nd : nsLinkedMap)
2044 for (
const auto &nd : nsLinkedMap)
2059 bool addToIndex = lne==
nullptr || lne->
visible();
2079 if (nd->isLinkableInProject())
2088 if (nd->getLanguage()==SrcLangExt::VHDL)
2098 bool hasBrief = !nd->briefDescription().empty();
2106 nd->briefDescription(
true),
2108 .setSingleLine(
true)
2109 .setLinkFromIndex(
true));
2158 if (sliceOpt && cd->compoundType() != ct)
2162 if (cd->isLinkableInProject() && !cd->isImplicitTemplateInstance())
2164 if (!cd->isEmbeddedInOuterScope())
2186 if (cd->getLanguage()==SrcLangExt::VHDL &&
2199 if (sliceOpt && cd->compoundType() != ct)
2205 if (cd->isEmbeddedInOuterScope())
2211 if (cd->isLinkableInProject() && !cd->isImplicitTemplateInstance())
2214 if (cd->getLanguage()==SrcLangExt::VHDL)
2222 bool hasBrief = !cd->briefDescription().empty();
2230 cd->briefDescription(
true),
2232 .setSingleLine(
true)
2233 .setLinkFromIndex(
true));
2249 return (c<127 && c>31);
2254 if (startLetter.
empty())
return startLetter;
2255 const char *p = startLetter.
data();
2265 const char hex[]=
"0123456789abcdef";
2268 result+=hex[
static_cast<unsigned char>(c)>>4];
2269 result+=hex[
static_cast<unsigned char>(c)&0xf];
2291 if (sliceOpt && cd->compoundType() != ct)
2296 if (cd->isLinkableInProject() && !cd->isImplicitTemplateInstance())
2300 std::string letter =
getUTF8CharAt(cd->className().str(),index);
2301 if (!letter.empty())
2309 DString alphaLinks =
"<div class=\"qindex\">";
2311 for (
const auto &letter : indexLettersUsed)
2316 alphaLinks +=
"<a class=\"qindex\" href=\"#letter_" +
2320 alphaLinks +=
"</div>\n";
2323 std::map<std::string, std::vector<const ClassDef*> > classesByLetter;
2330 if (sliceOpt && cd->compoundType() != ct)
2335 if (cd->isLinkableInProject() && !cd->isImplicitTemplateInstance())
2337 DString className = cd->className();
2340 if (!letter.empty())
2343 auto it = classesByLetter.find(letter);
2344 if (it!=classesByLetter.end())
2346 it->second.push_back(cd.get());
2350 classesByLetter.emplace(letter, std::vector<const ClassDef*>({ cd.get() }));
2357 for (
auto &[letter,list] : classesByLetter)
2359 std::stable_sort(list.begin(), list.end(),
2360 [](
const auto &c1,
const auto &c2)
2362 DString n1 = c1->className();
2363 DString n2 = c2->className();
2364 return dstricmp_sort(n1.data()+getPrefixIndex(n1), n2.data()+getPrefixIndex(n2))<0;
2369 if (!classesByLetter.empty())
2373 for (
const auto &cl : classesByLetter)
2375 DString parity = (counter++%2)==0 ?
"even" :
"odd";
2376 ol.
writeString(
"<dl class=\"classindex " + parity +
"\">\n");
2391 for (
const auto &cd : cl.second)
2410 cd->getOutputFileBase(),cd->anchor(),cname);
2411 if (!namesp.
empty())
2444 bool addToIndex = lne==
nullptr || lne->
visible();
2473 bool addToIndex = lne==
nullptr || lne->
visible();
2502 bool addToIndex = lne==
nullptr || lne->
visible();
2531 bool addToIndex = lne==
nullptr || lne->
visible();
2593 bool addToIndex = lne==
nullptr || lne->
visible();
2657 LayoutNavEntry::ClassList,LayoutNavEntry::Classes,
2671 LayoutNavEntry::InterfaceList,LayoutNavEntry::Interfaces,
2674 "annotatedinterfaces",
2685 LayoutNavEntry::StructList,LayoutNavEntry::Structs,
2699 LayoutNavEntry::ExceptionList,LayoutNavEntry::Exceptions,
2702 "annotatedexceptions",
2724 if (fd && prevFileName!=fd->
name())
2729 prevFileName = fd->
name();
2765 int index =
static_cast<int>(type);
2766 const int numIndices = 4;
2767 ASSERT(index<numIndices);
2773 static writeLinkForMember_t writeLinkForMemberMap[numIndices] =
2783 bool firstSection=
true;
2784 bool firstItem=
true;
2787 for (
const auto &kv : memberIndexMap)
2791 auto it = memberIndexMap.find(page);
2792 if (it != memberIndexMap.end())
2803 if (mil==
nullptr || mil->empty())
continue;
2804 for (
const auto &md : *mil)
2806 const char *sep =
nullptr;
2807 bool isFunc=!md->isObjCMethod() &&
2808 (md->isFunction() || md->isSlot() || md->isSignal());
2811 if (name.
data()+startIndex!=prevName)
2813 if ((prevName.
empty() ||
2814 tolower(name.
at(startIndex))!=tolower(prevName.
at(0))) &&
2821 DString title =
"- "+letter+
" -";
2829 else if (!useSections && first)
2840 if (isFunc) ol.
docify(
"()");
2845 sep =
" : ";
2846 prevName = name.
data()+startIndex;
2853 if (index<numIndices)
2856 writeLinkForMemberMap[index](ol,md,sep,prevDefName);
2872 bool hideFriendCompounds =
Config_getBool(HIDE_FRIEND_COMPOUNDS);
2882 if (!letter.empty())
2885 bool isFriendToHide = hideFriendCompounds &&
2889 if (!(md->
isFriend() && isFriendToHide) &&
2924 (md->
isFriend() && !isFriendToHide))
2941 if (!letter.empty())
2989 if (!letter.empty())
3041 if (!letter.empty())
3076 DString fullName,
bool multiPage)
3080 for (
const auto &[letter,list] : map)
3089 anchor=fullName+extension+
"#index_";
3091 anchor=fullName+
"_"+is+extension+
"#index_";
3099<script type="text/javascript">
3100function updateNavHighlight() {
3101 var currentHash = window.location.hash;
3102 var navItems = document.querySelectorAll('#navrow4 .tablist li');
3104 for (var i = 0; i < navItems.length; i++) {
3105 var item = navItems[i];
3106 var link = item.querySelector('a');
3107 item.classList.remove('current');
3108 if (link && link.getAttribute('href') === currentHash) {
3109 item.classList.add('current');
3114 var target = document.querySelector(currentHash);
3116 target.scrollIntoView();
3120updateNavHighlight();
3121window.addEventListener('hashchange', updateNavHighlight);
3131 DString alphaLinks =
"<div class=\"qindex\">";
3133 for (
const auto &[letter,list] : map)
3137 for (
const auto &[letterUC,letter] : usedLetters)
3146 anchor=fullName+extension+
"#index_";
3148 anchor=fullName+
"_"+is+extension+
"#index_";
3153 alphaLinks +=
"<a class=\"qindex\" href=\"" + anchor +
3157 alphaLinks +=
"</div>\n";
3190 return &cmhlInfo[hl];
3196 if (index.numDocumentedClassMembers(hl)==0)
return;
3202 bool quickLinksAfterSplitbar = !disableIndex && generateTreeView && fullSidebar;
3204 bool multiPageIndex=
false;
3207 multiPageIndex=
true;
3217 bool addToIndex = lne==
nullptr || lne->
visible();
3227 for (
const auto &[letter,list] : index.isClassIndexLetterUsed(hl))
3245 auto writeQuickLinks = [&,cap_letter=letter]()
3286 if (!disableIndex && !quickLinksAfterSplitbar)
3292 if (quickLinksAfterSplitbar)
3308 if (dynamicMenus || disableIndex)
3314 multiPageIndex ? letter : std::string(),
3315 index.isClassIndexLetterUsed(hl),
3330 bool addToIndex = lne==
nullptr || lne->
visible();
3383 return &fmhlInfo[hl];
3389 if (index.numDocumentedFileMembers(hl)==0)
return;
3395 bool quickLinksAfterSplitbar = !disableIndex && generateTreeView && fullSidebar;
3397 bool multiPageIndex=
false;
3400 multiPageIndex=
true;
3409 bool addToIndex = lne==
nullptr || lne->
visible();
3419 for (
const auto &[letter,list] : index.isFileIndexLetterUsed(hl))
3437 auto writeQuickLinks = [&,cap_letter=letter]()
3476 if (!disableIndex && !quickLinksAfterSplitbar)
3482 if (quickLinksAfterSplitbar)
3498 if (dynamicMenus || disableIndex)
3504 multiPageIndex ? letter : std::string(),
3505 index.isFileIndexLetterUsed(hl),
3568 return &nmhlInfo[hl];
3577 if (index.numDocumentedNamespaceMembers(hl)==0)
return;
3583 bool quickLinksAfterSplitbar = !disableIndex && generateTreeView && fullSidebar;
3585 bool multiPageIndex=
false;
3588 multiPageIndex=
true;
3597 bool addToIndex = lne==
nullptr || lne->
visible();
3607 for (
const auto &[letter,list] : index.isNamespaceIndexLetterUsed(hl))
3625 auto writeQuickLinks = [&,cap_letter=letter]()
3664 if (!disableIndex && !quickLinksAfterSplitbar)
3670 if (quickLinksAfterSplitbar)
3688 multiPageIndex ? letter : std::string(),
3689 index.isNamespaceIndexLetterUsed(hl),
3745 return &nmhlInfo[hl];
3754 if (index.numDocumentedModuleMembers(hl)==0)
return;
3760 bool quickLinksAfterSplitbar = !disableIndex && generateTreeView && fullSidebar;
3762 bool multiPageIndex=
false;
3765 multiPageIndex=
true;
3774 bool addToIndex = lne==
nullptr || lne->
visible();
3784 for (
const auto &[letter,list] : index.isModuleIndexLetterUsed(hl))
3802 auto writeQuickLinks = [&,cap_letter=letter]()
3841 if (!disableIndex && !quickLinksAfterSplitbar)
3847 if (quickLinksAfterSplitbar)
3863 if (dynamicMenus || disableIndex)
3869 multiPageIndex ? letter : std::string(),
3870 index.isModuleIndexLetterUsed(hl),
3886 bool addToIndex = lne==
nullptr || lne->
visible();
3915 bool addToIndex = lne==
nullptr || lne->
visible();
3939 DString n=pd->getOutputFileBase();
3940 if (!pd->title().empty())
3974 docPages=indexPages=0;
3977 if (pd->visibleInIndex() && !pd->hasParentPage())
3981 if (pd->documentedPage())
3994 bool addToIndex = lne==
nullptr || lne->
visible();
3995 if (!addToIndex)
return;
4002 DString pageTitle, pageTitleAsHtml;
4005 pageTitle=pd->
name();
4014 hasSubPages,pageTitle,
4016 DString(),hasSubPages,
true,pd,pageTitleAsHtml);
4021 hasSubPages || hasSections,pageTitle,
4023 DString(),hasSubPages,
true,pd,pageTitleAsHtml);
4027 bool doIndent = (hasSections || hasSubPages) && !reuseRoot;
4097 if (!gd->isReference())
4113 if (dd->isLinkableInProject())
4133 bool oldStripCommentsState =
Config_getBool(STRIP_CODE_COMMENTS);
4146 size_t s = legendDocs.
find(
"<center>");
4147 size_t e = legendDocs.
find(
"</center>");
4151 legendDocs = legendDocs.
left(s+8) +
"[!-- SVG 0 --]" + legendDocs.
mid(e);
4181 "maximum nesting level exceeded for group {}: check for possible recursive group relation!",gd->
name());
4194 size_t numSubItems = 0;
4197 if (ml->listType().isDocumentation())
4199 numSubItems += ml->size();
4204 numSubItems += gd->
getFiles().size();
4206 numSubItems += gd->
getDirs().size();
4209 bool isDir = hasSubGroups || hasSubPages || numSubItems>0;
4218 isDir,
true,
nullptr,titleAsHtml);
4225 false,
false,gd,titleAsHtml);
4237 .setSingleLine(
true)
4238 .setAutolinkSupport(
false));
4244 ol.
docify(
" [external]");
4250 if (lde->kind()==LayoutDocEntry::MemberDef && addToIndex)
4258 for (
const auto &md : *ml)
4261 isDir = !enumList.
empty() && md->isEnumerate();
4262 if (md->isVisible() && !md->isAnonymous())
4265 md->qualifiedName(),md->getReference(),
4266 md->getOutputFileBase(),md->anchor(),
false,addToIndex);
4271 for (
const auto &emd : enumList)
4273 if (emd->isVisible())
4276 emd->qualifiedName(),emd->getReference(),emd->getOutputFileBase(),
4277 emd->anchor(),
false,addToIndex);
4286 else if (lde->kind()==LayoutDocEntry::GroupClasses && addToIndex)
4294 if (cd->isVisible() )
4297 LayoutDocManager::Class,
4305 else if (lde->kind()==LayoutDocEntry::GroupNamespaces && addToIndex &&
Config_getBool(SHOW_NAMESPACES))
4309 if (nd->isVisible())
4312 nd->displayName(),nd->getReference(),
4317 else if (lde->kind()==LayoutDocEntry::GroupConcepts && addToIndex)
4321 if (cd->isVisible())
4324 cd->displayName(),cd->getReference(),
4325 cd->getOutputFileBase(),
DString(),
false,addToIndex);
4329 else if (lde->kind()==LayoutDocEntry::GroupFiles && addToIndex)
4331 for (
const auto &fd : gd->
getFiles())
4333 if (fd->isVisible())
4336 fd->displayName(),fd->getReference(),
4337 fd->getOutputFileBase(),
DString(),
false,fd->isLinkableViaGroup());
4341 else if (lde->kind()==LayoutDocEntry::GroupDirs && addToIndex)
4343 for (
const auto &dd : gd->
getDirs())
4345 if (dd->isVisible())
4348 dd->shortName(),dd->getReference(),
4349 dd->getOutputFileBase(),
DString(),
false,
false);
4353 else if (lde->kind()==LayoutDocEntry::GroupPageDocs && addToIndex)
4355 for (
const auto &pd : gd->
getPages())
4363 pageTitle=pd->
name();
4368 hasSubPages || hasSections,
4373 hasSubPages || hasSections,
4377 if (hasSections || hasSubPages)
4386 if (hasSections || hasSubPages)
4392 else if (lde->kind()==LayoutDocEntry::GroupNestedGroups)
4453 bool addToIndex = lne==
nullptr || lne->
visible();
4514 FTVHelp* ftv,
bool addToIndex)
4517 bool isDir=visibleMembers>0;
4537 .setSingleLine(
true)
4538 .setAutolinkSupport(
false));
4543 ol.
docify(
" [external]");
4546 if (addToIndex && isDir)
4558 if (addToIndex && isDir)
4602 bool addToIndex = lne==
nullptr || lne->
visible();
4661 for (
const auto &cd : concepts)
4663 if (cd->isLinkableInProject())
4668 cd->getOutputFileBase(),
DString(),
false,cd->partOfGroups().
empty(),cd);
4673 cd->getOutputFileBase(),
DString(),
false,cd->partOfGroups().
empty());
4680 bool rootOnly,
bool addToIndex);
4683 bool rootOnly,
bool addToIndex)
4685 for (
const auto &nd : nsLinkedMap)
4693 bool rootOnly,
bool addToIndex)
4747 if ((cd->getOuterScope()==
nullptr ||
4753 false,cd->localName(),cd->getReference(),cd->getOutputFileBase(),
4758 false,cd->localName(),cd->getReference(),cd->getOutputFileBase(),
4774 bool addToIndex = lne==
nullptr || lne->
visible();
4795 if (cd->isLinkableInProject())
4807 bool hasBrief = !cd->briefDescription().empty();
4815 cd->briefDescription(
true),
4817 .setSingleLine(
true)
4818 .setLinkFromIndex(
true));
4880 if (entry->visible()) count++;
4885 for (
const auto &entry: lne->
children())
4887 if (entry->visible())
4889 ol.
writeString(
"<li><a href=\""+entry->url()+
"\"><span>"+
4916 if (!projectName.
empty())
4918 projPrefix=projectName+
" ";
4970 bool quickLinksAfterSplitbar = !disableIndex && generateTreeView && fullSidebar;
4972 if (!disableIndex && !quickLinksAfterSplitbar)
4978 if (quickLinksAfterSplitbar)
4983 bool headerWritten=
false;
5008 .setSingleLine(
true));
5009 headerWritten =
true;
5014 if (!projectName.
empty())
5019 headerWritten =
true;
5048 .setIndexWords(
true));
5087 msg(
"Generating main page...\n");
5096 if (projPrefix.
empty())
5130 if (index.numDocumentedPages()>0)
5145 if (index.numDocumentedModules()>0)
5151 if (index.numDocumentedGroups()>0)
5157 if (index.numDocumentedDirs()>0)
5163 if (
Config_getBool(SHOW_NAMESPACES) && (index.numDocumentedNamespaces()>0))
5173 if (index.numDocumentedConcepts()>0)
5179 if (index.numHierarchyInterfaces()>0)
5185 if (index.numHierarchyClasses()>0)
5199 if (index.numHierarchyExceptions()>0)
5205 if (index.numAnnotatedInterfacesPrinted()>0)
5211 if (index.numAnnotatedClassesPrinted()>0)
5221 if (index.numAnnotatedStructsPrinted()>0)
5227 if (index.numAnnotatedExceptionsPrinted()>0)
5242 if (index.numDocumentedModules()>0)
5248 if (index.numDocumentedGroups()>0)
5254 if (index.numDocumentedDirs()>0)
5260 if (index.numDocumentedNamespaces()>0)
5266 if (index.numDocumentedConcepts()>0)
5272 if (index.numAnnotatedInterfacesPrinted()>0)
5278 if (index.numAnnotatedClassesPrinted()>0)
5284 if (index.numAnnotatedStructsPrinted()>0)
5290 if (index.numAnnotatedExceptionsPrinted()>0)
5318 auto isRef = [](
const DString &s)
5320 return s.startsWith(
"@ref") || s.startsWith(
"\\ref");
5324 for (
const auto &lne : entries)
5327 size_t idx =
static_cast<size_t>(kind);
5331 size_t newSize = idx+1;
5333 for (
size_t i=oldSize; i<newSize; i++)
indexWritten.at(i)=
false;
5336 bool addToIndex=lne->
visible();
5337 bool needsClosing=
false;
5342 case LayoutNavEntry::MainPage:
5343 msg(
"Generating index page...\n");
5346 case LayoutNavEntry::Pages:
5347 msg(
"Generating page index...\n");
5350 case LayoutNavEntry::Topics:
5351 msg(
"Generating topic index...\n");
5354 case LayoutNavEntry::Modules:
5356 if (index.numDocumentedModules()>0 && addToIndex)
5364 case LayoutNavEntry::ModuleList:
5365 msg(
"Generating module index...\n");
5368 case LayoutNavEntry::ModuleMembers:
5369 msg(
"Generating module member index...\n");
5372 case LayoutNavEntry::Namespaces:
5377 if (index.numDocumentedNamespaces()>0 && addToIndex)
5385 msg(
"Generating namespace index...\n");
5391 case LayoutNavEntry::NamespaceList:
5396 msg(
"Generating namespace index...\n");
5401 case LayoutNavEntry::NamespaceMembers:
5402 msg(
"Generating namespace member index...\n");
5405 case LayoutNavEntry::Classes:
5406 if (index.numAnnotatedClasses()>0 && addToIndex)
5414 msg(
"Generating annotated compound index...\n");
5418 case LayoutNavEntry::Concepts:
5419 msg(
"Generating concept index...\n");
5422 case LayoutNavEntry::ClassList:
5423 msg(
"Generating annotated compound index...\n");
5426 case LayoutNavEntry::ClassIndex:
5427 msg(
"Generating alphabetical compound index...\n");
5430 case LayoutNavEntry::ClassHierarchy:
5431 msg(
"Generating hierarchical class index...\n");
5435 msg(
"Generating graphical class hierarchy...\n");
5439 case LayoutNavEntry::ClassMembers:
5442 msg(
"Generating member index...\n");
5446 case LayoutNavEntry::Interfaces:
5447 if (sliceOpt && index.numAnnotatedInterfaces()>0 && addToIndex)
5454 case LayoutNavEntry::InterfaceList:
5457 msg(
"Generating annotated interface index...\n");
5461 case LayoutNavEntry::InterfaceIndex:
5464 msg(
"Generating alphabetical interface index...\n");
5468 case LayoutNavEntry::InterfaceHierarchy:
5471 msg(
"Generating hierarchical interface index...\n");
5475 msg(
"Generating graphical interface hierarchy...\n");
5480 case LayoutNavEntry::Structs:
5481 if (sliceOpt && index.numAnnotatedStructs()>0 && addToIndex)
5488 case LayoutNavEntry::StructList:
5491 msg(
"Generating annotated struct index...\n");
5495 case LayoutNavEntry::StructIndex:
5498 msg(
"Generating alphabetical struct index...\n");
5502 case LayoutNavEntry::Exceptions:
5503 if (sliceOpt && index.numAnnotatedExceptions()>0 && addToIndex)
5510 case LayoutNavEntry::ExceptionList:
5513 msg(
"Generating annotated exception index...\n");
5517 case LayoutNavEntry::ExceptionIndex:
5520 msg(
"Generating alphabetical exception index...\n");
5524 case LayoutNavEntry::ExceptionHierarchy:
5527 msg(
"Generating hierarchical exception index...\n");
5531 msg(
"Generating graphical exception hierarchy...\n");
5536 case LayoutNavEntry::Files:
5538 if (
Config_getBool(SHOW_FILES) && index.numDocumentedFiles()>0 && addToIndex)
5546 msg(
"Generating file index...\n");
5551 case LayoutNavEntry::FileList:
5552 msg(
"Generating file index...\n");
5555 case LayoutNavEntry::FileGlobals:
5556 msg(
"Generating file member index...\n");
5559 case LayoutNavEntry::Examples:
5560 msg(
"Generating example index...\n");
5563 case LayoutNavEntry::User:
5568 bool isRelative=url.
at(0)==
'!';
5569 if (!url.
empty() && !isRelative)
5577 case LayoutNavEntry::UserGroup:
5589 bool isRelative=url.
at(0)==
'!';
5607 case LayoutNavEntry::None:
5608 assert(kind != LayoutNavEntry::None);
5611 if (kind!=LayoutNavEntry::User && kind!=LayoutNavEntry::UserGroup)
5621 case LayoutNavEntry::Modules:
5622 case LayoutNavEntry::Namespaces:
5623 case LayoutNavEntry::Classes:
5624 case LayoutNavEntry::Files:
5625 case LayoutNavEntry::UserGroup:
5647 case LayoutNavEntry::MainPage:
return true;
5648 case LayoutNavEntry::User:
return true;
5649 case LayoutNavEntry::UserGroup:
return true;
5650 case LayoutNavEntry::Pages:
return index.numIndexedPages()>0;
5651 case LayoutNavEntry::Topics:
return index.numDocumentedGroups()>0;
5652 case LayoutNavEntry::Modules:
return index.numDocumentedModules()>0;
5653 case LayoutNavEntry::ModuleList:
return index.numDocumentedModules()>0;
5655 case LayoutNavEntry::Namespaces:
return index.numDocumentedNamespaces()>0 && showNamespaces;
5656 case LayoutNavEntry::NamespaceList:
return index.numDocumentedNamespaces()>0 && showNamespaces;
5658 case LayoutNavEntry::Concepts:
return index.numDocumentedConcepts()>0;
5659 case LayoutNavEntry::Classes:
return index.numAnnotatedClasses()>0;
5660 case LayoutNavEntry::ClassList:
return index.numAnnotatedClasses()>0;
5661 case LayoutNavEntry::ClassIndex:
return index.numAnnotatedClasses()>0;
5662 case LayoutNavEntry::ClassHierarchy:
return index.numHierarchyClasses()>0;
5664 case LayoutNavEntry::Interfaces:
return index.numAnnotatedInterfaces()>0;
5665 case LayoutNavEntry::InterfaceList:
return index.numAnnotatedInterfaces()>0;
5666 case LayoutNavEntry::InterfaceIndex:
return index.numAnnotatedInterfaces()>0;
5667 case LayoutNavEntry::InterfaceHierarchy:
return index.numHierarchyInterfaces()>0;
5668 case LayoutNavEntry::Structs:
return index.numAnnotatedStructs()>0;
5669 case LayoutNavEntry::StructList:
return index.numAnnotatedStructs()>0;
5670 case LayoutNavEntry::StructIndex:
return index.numAnnotatedStructs()>0;
5671 case LayoutNavEntry::Exceptions:
return index.numAnnotatedExceptions()>0;
5672 case LayoutNavEntry::ExceptionList:
return index.numAnnotatedExceptions()>0;
5673 case LayoutNavEntry::ExceptionIndex:
return index.numAnnotatedExceptions()>0;
5674 case LayoutNavEntry::ExceptionHierarchy:
return index.numHierarchyExceptions()>0;
5675 case LayoutNavEntry::Files:
return index.numDocumentedFiles()>0 && showFiles;
5676 case LayoutNavEntry::FileList:
return index.numDocumentedFiles()>0 && showFiles;
5679 case LayoutNavEntry::None:
5680 assert(kind != LayoutNavEntry::None);
5688 std::function<std::size_t(std::size_t)> numDocumented,
5690 const T *(*getInfo)(
size_t hl),
5694 bool firstMember=
true;
5695 for (std::size_t i=0;i<total;i++)
5697 if (numDocumented(i)>0)
5713 bool multiPageIndex=
false;
5716 multiPageIndex=
true;
5718 t <<
",children:[\n";
5719 bool firstLetter=
true;
5720 for (
const auto &[letter,list] : getMemberList(i))
5722 if (!firstLetter) t <<
",\n";
5727 DString fullName = getInfo(i)->fname;
5728 if (!multiPageIndex || firstLetter)
5729 anchor=fullName+extension+
"#index_";
5731 anchor=fullName+
"_"+is+extension+
"#index_";
5750 for (
const auto &entry : root->
children())
5756 bool firstChild =
true;
5757 if (!first) t <<
",";
5758 t <<
"children:[\n";
5759 for (
const auto &entry : root->
children())
5763 if (!firstChild) t <<
",\n";
5766 if (
isURL(url)) url =
"^" + url;
5769 bool hasChildren=
false;
5770 if (entry->kind()==LayoutNavEntry::ModuleMembers)
5772 auto numDoc = [](std::size_t i) {
5775 auto memList = [](std::size_t i) {
5780 if (entry->kind()==LayoutNavEntry::NamespaceMembers)
5782 auto numDoc = [](std::size_t i) {
5785 auto memList = [](std::size_t i) {
5790 else if (entry->kind()==LayoutNavEntry::ClassMembers)
5792 auto numDoc = [](std::size_t i) {
5795 auto memList = [](std::size_t i) {
5800 else if (entry->kind()==LayoutNavEntry::FileGlobals)
5802 auto numDoc = [](std::size_t i) {
5805 auto memList = [](std::size_t i) {
5814 if (hasChildren) t <<
"]";
5831 t <<
"var menudata={";
5833 if (hasChildren) t <<
"]";
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. class/struct/union/...
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 DString crawlFileName
A String class for use with Doxygen wrapping std::string and adding some additional functionality off...
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()).
DString & replace(size_t index, size_t len, const char *s)
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.
DString & prepend(const char *s)
size_t find(char c, size_t pos=0) const
DString left(size_t len) 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.
bool startsWith(const char *s) 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 DString briefDescription(bool abbreviate=false) const =0
virtual bool isVisible() const =0
virtual DString briefFile() const =0
virtual SrcLangExt getLanguage() const =0
Returns the programming language this definition was written in.
virtual bool hasSections() const =0
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 int briefLine() const =0
virtual bool hasDocumentation() const =0
virtual bool isLinkableInProject() const =0
virtual bool isAnonymous() const =0
virtual DString navigationPathAsString() const =0
virtual DString displayName(bool includeScope=true) const =0
virtual DString qualifiedName() const =0
virtual DString anchor() const =0
virtual DString getReference() const =0
virtual const GroupList & partOfGroups() const =0
virtual Definition * getOuterScope() const =0
virtual DString getSourceFileBase() const =0
virtual bool isReference() const =0
virtual DString getOutputFileBase() const =0
virtual void writePageNavigation(OutputList &) const =0
virtual void writeSummaryLinks(OutputList &) const =0
A model of a directory symbol.
virtual const DString 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 DString &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 PageLinkedMap * pageLinkedMap
static DString htmlFileExtension
static DirLinkedMap * dirLinkedMap
static GroupLinkedMap * groupLinkedMap
A class that generates a dynamic tree view side panel.
void addContentsItem(bool isDir, const DString &name, const DString &ref, const DString &file, const DString &anchor, bool separateIndex, bool addToNavIndex, const Definition *def, const DString &nameAsHtml=DString())
void generateTreeViewInline(TextStream &t)
A model of a file symbol.
virtual DString getPath() const =0
virtual DString includeName() const =0
virtual bool generateSourceFile() const =0
virtual bool isDocumentationFile() const =0
A model of a group of symbols.
virtual DString groupTitle() const =0
virtual const DirList & getDirs() const =0
virtual const GroupList & getSubGroups() 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
static DString fixSpaces(const DString &s)
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
void addIndexFile(const DString &name)
void addContentsItem(bool isDir, const DString &name, const DString &ref, const DString &file, const DString &anchor, bool separateIndex=false, bool addToNavIndex=false, const Definition *def=nullptr, const DString &nameAsHtml=DString())
void enable()
enable the indices
void disable()
disable the indices
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 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 DString typeString() 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
iterator begin() 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 writeFooter(const DString &navPath)
void startTitleHead(const DString &fileName)
void parseText(const DString &textStr)
void endTitleHead(const DString &fileName, const DString &name)
void disable(OutputType o)
void startParagraph(const DString &classDef=DString())
void writeObjectLink(const DString &ref, const DString &file, const DString &anchor, const DString &name)
void enable(OutputType o)
void endIndexItem(const DString &ref, const DString &file)
void endTextBlock(bool paraBreak=false)
void docify(const DString &s)
void writeGraphicalHierarchy(DotGfxHierarchyTable &g)
void startHeaderSection()
void endIndexSection(IndexSection is)
void writeString(const DString &text)
void endIndexValue(const DString &name, bool b)
void startProjectNumber()
void endSection(const DString &lab, SectionType t)
void startIndexItem(const DString &ref, const DString &file)
void pushGeneratorState()
void startFile(const DString &name, bool isSource, const DString &manName, const DString &title, int hierarchyLevel=0)
void disableAllBut(OutputType o)
void startTextBlock(bool dense=false)
void startPageDoc(const DString &pageTitle)
void startIndexValue(bool b)
void startTextLink(const DString &file, const DString &anchor)
void writeSplitBar(const DString &name, const DString &allMembersFile)
void generateDoc(const DString &fileName, int startLine, const Definition *ctx, const MemberDef *md, const DString &docStr, const DocOptions &options)
void startSection(const DString &lab, const DString &title, SectionType t)
void startIndexListItem()
void writeQuickLinks(HighlightedItem hli, const DString &file, bool extraTabs=false)
void startIndexSection(IndexSection is)
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 DString title() const =0
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.
virtual DString trCompoundMembers()=0
virtual DString trFileDocumentation()=0
virtual DString trFunctionAndProc()=0
virtual DString trTypedefs()=0
virtual DString trConceptList()=0
virtual DString trTopics()=0
virtual DString trModulesMembers()=0
virtual DString trEnumerations()=0
virtual DString trFileMembersDescriptionTotal(FileMemberHighlight::Enum hl)=0
virtual DString trExceptionDocumentation()=0
virtual DString trInterfaceIndex()=0
virtual DString trNamespaceMembers()=0
virtual DString trNamespaceList()=0
virtual DString trExceptionList()=0
virtual DString trCode()=0
virtual DString trClassDocumentation()=0
virtual DString trHierarchicalIndex()=0
virtual DString trExceptionHierarchyDescription()=0
virtual DString trInterfaceList()=0
virtual DString trSequences()=0
virtual DString trFunctions()=0
virtual DString trReferenceManual()=0
virtual DString trInterfaceListDescription()=0
virtual DString trConceptIndex()=0
virtual DString trTopicIndex()=0
virtual DString trGotoTextualHierarchy()=0
virtual DString trExceptionHierarchy()=0
virtual DString trCompoundList()=0
virtual DString trModuleIndex()=0
virtual DString trInterfaceHierarchy()=0
virtual DString trTypeDocumentation()=0
virtual DString trInterfaceDocumentation()=0
virtual DString trStructListDescription()=0
virtual DString trDocumentation(const DString &projName)=0
virtual DString trExamplesDescription()=0
virtual DString trNamespaceDocumentation()=0
virtual DString trFileList()=0
virtual DString trModules()=0
virtual DString trLegendDocs()=0
virtual DString trDefines()=0
virtual DString trRelatedPages()=0
virtual DString trLegendTitle()=0
virtual DString trRelatedSymbols()=0
virtual DString trFileMembers()=0
virtual DString trDirectories()=0
virtual DString trInterfaceHierarchyDescription()=0
virtual DString trStructIndex()=0
virtual DString trExceptionIndex()=0
virtual DString trModuleDocumentation()=0
virtual DString trExceptionListDescription()=0
virtual DString trProperties()=0
virtual DString trRelatedPagesDescription()=0
virtual DString trCompoundIndexFortran()=0
virtual DString trCompoundListDescription()=0
virtual DString trTopicListDescription()=0
virtual DString trModulesIndex()=0
virtual DString trModuleMembersDescriptionTotal(ModuleMemberHighlight::Enum hl)=0
virtual DString trFileListDescription(bool extractAll)=0
virtual DString trClassHierarchyDescription()=0
virtual DString trConceptListDescription(bool extractAll)=0
virtual DString trSubprograms()=0
virtual DString trAll()=0
virtual DString trTopicDocumentation()=0
virtual DString trGeneratedBy()=0
virtual DString trVariables()=0
virtual DString trConceptDocumentation()=0
virtual DString trEnumerationValues()=0
virtual DString trDirDocumentation()=0
virtual DString trModulesListDescription(bool extractAll)=0
virtual DString trStructList()=0
virtual DString trNamespaceListDescription(bool extractAll)=0
virtual DString trCompoundMembersDescriptionTotal(ClassMemberHighlight::Enum hl)=0
virtual DString trClassHierarchy()=0
virtual DString trDirIndex()=0
virtual DString trCompoundIndex()=0
virtual DString trDesignUnitIndex()=0
virtual DString trConstants()=0
virtual DString trStructDocumentation()=0
virtual DString trMainPage()=0
virtual DString trEvents()=0
virtual DString trDictionaries()=0
virtual DString trFileIndex()=0
virtual DString trExamples()=0
virtual DString trNamespaceMembersDescriptionTotal(NamespaceMemberHighlight::Enum hl)=0
virtual DString trGotoGraphicalHierarchy()=0
virtual DString trNamespaceIndex()=0
static DString 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)
std::map< std::string, std::string > StringMap
Definition * toDefinition(DefinitionMutable *dm)
DString parseCommentAsText(const Definition *scope, const MemberDef *md, const DString &doc, const DString &fileName, int lineNr)
DString parseCommentAsHtml(const Definition *scope, const MemberDef *member, const DString &doc, const DString &fileName, int lineNr)
static void addMembersToIndex()
DString substitute(const DString &s, const DString &src, const DString &dst)
substitute all occurrences of src in s by dst
int dstricmp(const char *s1, const char *s2)
uint32_t dstrlen(const char *str)
Returns the length of string str, or 0 if a null pointer is passed.
bool compareFileDefs(const FileDef *fd1, const FileDef *fd2)
std::unique_ptr< FileDef > createFileDef(const DString &p, const DString &n, const DString &ref, const DString &dn)
constexpr auto JAVASCRIPT_LICENSE_TEXT
static void writePages(PageDef *pd, FTVHelp *ftv, bool reuseRoot=false)
static void writeConceptTreeInsideNamespace(const NamespaceLinkedRefMap &nsLinkedMap, FTVHelp *ftv, bool rootOnly, bool addToIndex)
static DString letterToLabel(const DString &startLetter)
static void writeClassTreeInsideNamespaceElement(const NamespaceDef *nd, FTVHelp *ftv, bool rootOnly, bool addToIndex, ClassDef::CompoundType ct)
static void writeIndexHierarchyEntries(OutputList &ol, const LayoutNavEntryList &entries)
static void writeClassTreeToOutput(OutputList &ol, const BaseClassList &bcl, int level, FTVHelp *ftv, bool addToIndex, ClassDefSet &visitedClasses)
#define MAX_ITEMS_BEFORE_QUICK_INDEX
static void startQuickIndexList(OutputList &ol, bool letterTabs=false)
static void writeFileLinkForMember(OutputList &ol, const MemberDef *md, const DString &separator, DString &prevFileName)
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 startQuickIndexItem(OutputList &ol, const DString &l, bool hl, bool, bool &first)
static void writeAlphabeticalExceptionIndex(OutputList &ol)
static void writeDirIndex(OutputList &ol)
static void writeClassMemberIndex(OutputList &ol)
void writeGraphInfo(OutputList &ol)
static std::vector< bool > indexWritten
static int countConcepts()
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 writeAnnotatedInterfaceIndex(OutputList &ol)
static void writePageIndex(OutputList &ol)
void endTitle(OutputList &ol, const DString &fileName, const DString &name)
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 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)
constexpr auto alphaSepar
static void writeGraphicalExceptionHierarchy(OutputList &ol)
static const MmhlInfo * getMmhlInfo(size_t hl)
static void writeClassLinkForMember(OutputList &ol, const MemberDef *md, const DString &separator, DString &prevClassName)
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 writeExampleIndex(OutputList &ol)
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 writeModuleLinkForMember(OutputList &ol, const MemberDef *md, const DString &separator, DString &prevModuleName)
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 writeNamespaceLinkForMember(OutputList &ol, const MemberDef *md, const DString &separator, DString &prevNamespaceName)
void writeIndexHierarchy(OutputList &ol)
static void writeMemberIndex(OutputList &ol, const Index::MemberIndexMap &map, DString fullName, bool multiPage)
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
void endFileWithNavPath(OutputList &ol, const DefinitionMutable *d, bool showPageNavigation)
static void writeConceptIndex(OutputList &ol)
void endFile(OutputList &ol, bool skipNavIndex, bool skipEndContents, const DString &navPath)
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)
void startTitle(OutputList &ol, const DString &fileName, const DefinitionMutable *def)
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 writeQuickMemberIndex(OutputList &ol, const Index::MemberIndexMap &map, const std::string &page, DString fullName, bool multiPage)
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)
void startFile(OutputList &ol, const DString &name, bool isSource, const DString &manName, const DString &title, HighlightedItem hli, bool additionalIndices, const DString &altSidebarName, int hierarchyLevel, const DString &allMembersFile)
@ isNamespaceDocumentation
Translator * theTranslator
std::vector< std::unique_ptr< LayoutNavEntry > > LayoutNavEntryList
#define warn(file, line, fmt,...)
std::ofstream openOutputStream(const DString &name, bool append=false)
bool namespaceHasNestedNamespace(const NamespaceDef *nd)
bool namespaceHasNestedClass(const NamespaceDef *nd, bool filterClasses, ClassDef::CompoundType ct)
NamespaceDef * getResolvedNamespace(const DString &name)
bool namespaceHasNestedConcept(const NamespaceDef *nd)
Portable versions of functions that are platform dependent.
const LayoutNavEntry::Kind fallbackKind
AnnotatedIndexContext(int numAnno, int numPrint, LayoutNavEntry::Kind lk, LayoutNavEntry::Kind fk, const DString &title, const DString &intro, ClassDef::CompoundType ct, const DString &fn, HighlightedItem hi)
const DString listDefaultTitleText
const DString fileBaseName
const ClassDef::CompoundType compoundType
const HighlightedItem hiItem
const LayoutNavEntry::Kind listKind
const DString listDefaultIntroText
Helper class representing a class member in the navigation menu.
CmhlInfo(const char *fn, const DString &t)
Helper class to pass options when calling OutputList::generateDoc().
Helper class representing a file member in the navigation menu.
FmhlInfo(const char *fn, const DString &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
LayoutNavEntry * find(LayoutNavEntry::Kind k, const DString &file=DString()) const
Helper class representing a module member in the navigation menu.
MmhlInfo(const char *fn, const DString &t)
Helper class representing a namespace member in the navigation menu.
NmhlInfo(const char *fn, const DString &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.
bool isURL(const DString &url)
Checks whether the given url starts with a supported protocol.
DString filterTitle(const DString &title)
DString correctURL(const DString &url, const DString &relPath)
Corrects URL url according to the relative path relPath.
DString convertToJSString(const DString &s, bool keepEntities, bool singleQuotes)
DString convertToId(const DString &s)
DString convertToHtml(const DString &s, bool keepEntities)
void addHtmlExtensionIfMissing(DString &fName)
void extractNamespaceName(const DString &scopeName, DString &className, DString &namespaceName, bool allowEmptyClass)
int getPrefixIndex(const DString &name)
DString getLanguageSpecificSeparator(SrcLangExt lang, bool classScope)
DString getDotImageExtension()
DString stripFromPath(const DString &path)
A bunch of utility functions.