55#define MAX_ITEMS_BEFORE_MULTIPAGE_INDEX 200
56#define MAX_ITEMS_BEFORE_QUICK_INDEX 30
58constexpr auto alphaSepar =
"<div class=\"alphasepar\"></div>";
62static void countFiles(
int &htmlFiles,
int &files);
140 return p->classIndexLetterUsed[
static_cast<int>(e)];
145 return p->fileIndexLetterUsed[
static_cast<int>(e)];
150 return p->namespaceIndexLetterUsed[
static_cast<int>(e)];
155 return p->moduleIndexLetterUsed[
static_cast<int>(e)];
160 p->documentedClassMembers[i]=0;
161 p->classIndexLetterUsed[i].clear();
166 p->documentedFileMembers[i]=0;
167 p->fileIndexLetterUsed[i].clear();
172 p->documentedNamespaceMembers[i]=0;
173 p->namespaceIndexLetterUsed[i].clear();
178 p->documentedModuleMembers[i]=0;
179 p->moduleIndexLetterUsed[i].clear();
184 auto it = map.find(letter);
187 it->second.push_back(md);
191 map.emplace(letter,std::vector<const MemberDef*>({md}));
197 p->documentedClassMembers[i]++;
203 p->documentedFileMembers[i]++;
209 p->documentedNamespaceMembers[i]++;
215 p->documentedModuleMembers[i]++;
224 for (
auto &[name,list] : map)
226 std::stable_sort(list.begin(),list.end(),
236 int result = qstricmp_sort(md1->name(),md2->name());
239 result = qstricmp_sort(md1->qualifiedName(),md2->qualifiedName());
246 for (
auto &idx : p->classIndexLetterUsed)
248 sortMemberIndexList(idx);
250 for (
auto &idx : p->fileIndexLetterUsed)
252 sortMemberIndexList(idx);
254 for (
auto &idx : p->namespaceIndexLetterUsed)
256 sortMemberIndexList(idx);
258 for (
auto &idx : p->moduleIndexLetterUsed)
260 sortMemberIndexList(idx);
351 ol.
writeString(
" <div id=\"navrow4\" class=\"tabs3\">\n");
355 ol.
writeString(
" <div id=\"navrow3\" class=\"tabs2\">\n");
367 bool hl,
bool ,
bool &first)
405 const QCString &altSidebarName,
int hierarchyLevel,
const QCString &allMembersFile)
410 bool quickLinksAfterSplitbar = !disableIndex && generateTreeView && fullSidebar;
411 ol.
startFile(name,isSource,manName,title,hierarchyLevel);
413 if (!disableIndex && !quickLinksAfterSplitbar)
417 if (!additionalIndices)
422 if (quickLinksAfterSplitbar)
438 if (generateTreeView)
455 if (generateTreeview)
465 endFile(ol,generateTreeview,
true,navPath);
474 bool isDir = md->
isEnumerate() && std::any_of(enumList.
begin(),enumList.
end(),[](
const auto &emd) { return emd->hasDocumentation(); });
477 bool lAddToIndex = addToIndex && !namespaceMemberInFileDocs;
502 for (
const auto &emd : enumList)
504 if (emd->hasDocumentation())
507 lAddToIndex = addToIndex && !namespaceMemberInFileDocs;
509 emd->qualifiedName() : emd->name();
510 if (emd->getOuterScope()==def ||
515 ename,emd->getReference(),emd->getOutputFileBase(),emd->anchor(),
false,lAddToIndex && emd->getGroupDef()==
nullptr);
535 bool addToIndex=
true,
bool preventSeparateIndex=
false,
540 for (
const auto &cd : def->getClasses())
542 if (cd->isLinkable()) numClasses++;
547 for (
const auto &cd : *concepts)
549 if (cd->isLinkable()) numConcepts++;
552 bool hasMembers = !def->getMemberLists().empty() || !def->getMemberGroups().empty() || (numClasses>0) || (numConcepts>0);
554 def->getReference(),def->getOutputFileBase(),anchor,
555 hasMembers && !preventSeparateIndex,
560 if (hasMembers || numClasses>0 || numConcepts>0)
565 auto kind = lde->kind();
566 if (kind==LayoutDocEntry::MemberDef)
574 for (
const auto &md : *ml)
576 if (md->visibleInIndex())
584 else if (kind==LayoutDocEntry::NamespaceClasses ||
585 kind==LayoutDocEntry::FileClasses ||
586 kind==LayoutDocEntry::ClassNestedClasses ||
587 kind==LayoutDocEntry::ModuleClasses
590 for (
const auto &cd : def->getClasses())
592 if (cd->isLinkable() && (cd->partOfGroups().empty() || def->definitionType()==
Definition::TypeGroup))
596 addMembersToIndex(cd,LayoutDocManager::Class,cd->displayName(lde->kind()==LayoutDocEntry::FileClasses),cd->anchor(),
597 addToIndex && (isNestedClass || (cd->isSimple() && inlineSimpleStructs)),
598 preventSeparateIndex || cd->isEmbeddedInOuterScope());
602 else if ((kind==LayoutDocEntry::FileConcepts || kind==LayoutDocEntry::ModuleConcepts) && concepts)
604 for (
const auto &cd : *concepts)
606 if (cd->isLinkable() && (cd->partOfGroups().empty() || def->definitionType()==
Definition::TypeGroup))
609 cd->getReference(),cd->getOutputFileBase(),
QCString(),
628 if (bcl.empty())
return;
630 for (
const auto &bcd : bcl)
657 bool hasChildren = visitedClasses.find(cd)==visitedClasses.end() &&
672 .setAutolinkSupport(
false));
713 visitedClasses.insert(cd);
746 for (
const auto &fd : dd->
getFiles())
748 bool genSourceFile =
false;
759 for(
const auto &subdd : dd->
subDirs())
775 "maximum nesting level exceeded for directory {}: "
776 "check for possible recursive directory relation!",dd->
name());
785 bool tocExpand =
true;
786 bool isDir = !dd->
subDirs().empty() ||
812 .setAutolinkSupport(
false));
825 for(
const auto &subdd : dd->
subDirs())
835 for (
const auto &fd : dd->
getFiles())
842 bool genSourceFile =
false;
847 else if (genSourceFile)
855 for (
const auto &fd : dd->
getFiles())
863 reference = fd->getReference();
864 outputBase = fd->getOutputFileBase();
877 .setAutolinkSupport(
false));
880 if (ftv && (src || doc))
884 reference,outputBase,
893 if (tocExpand && addToIndex)
898 for (
const auto &fd : dd->
getFiles())
905 !fd->isLinkableViaGroup(),
false,&fd->getConcepts());
911 fd->getSourceFileBase(),
QCString(),
false,
true, fd);
947 for (
const auto &fd : *fn)
949 if (fd->getDirDef()==
nullptr)
956 reference = fd->getReference();
957 outputBase = fd->getOutputFileBase();
963 false,
false,fd.get());
974 false, fd->displayName(),
QCString(),
975 fd->getSourceFileBase(),
QCString(),
false,
true, fd.get());
996 for (
const auto &cd : cl)
999 if (cd->getLanguage()==SrcLangExt::VHDL)
1007 else if (sliceOpt && cd->compoundType() != ct)
1018 if (cd->isVisibleInHierarchy())
1030 bool hasChildren = visitedClasses.find(cd.get())==visitedClasses.end() &&
1034 if (cd->isLinkable())
1045 .setSingleLine(
true)
1046 .setAutolinkSupport(
false));
1047 ol.
endIndexItem(cd->getReference(),cd->getOutputFileBase());
1048 if (cd->isReference())
1051 ol.
docify(
" [external]");
1056 if (cd->getLanguage()!=SrcLangExt::VHDL)
1063 ftv->
addContentsItem(hasChildren,cd->displayName(),cd->getReference(),cd->getOutputFileBase(),cd->anchor(),
false,
false,cd.get(),escapedName);
1080 if (cd->getLanguage()==SrcLangExt::VHDL && hasChildren)
1083 visitedClasses.insert(cd.get());
1085 else if (hasChildren)
1088 visitedClasses.insert(cd.get());
1127 for (
const auto &cd : cl)
1129 if (sliceOpt && cd->compoundType() != ct)
1135 if (cd->isVisibleInHierarchy())
1137 if (!cd->subClasses().empty())
1167 bool addToIndex = lne==
nullptr || lne->
visible();
1273 bool addToIndex = lne==
nullptr || lne->
visible();
1378 bool addToIndex = lne==
nullptr || lne->
visible();
1480 for (
const auto &fd: *fn)
1553 .setSingleLine(
true)
1554 .setLinkFromIndex(
true));
1585 if (dir->hasDocumentation())
1610 bool addToIndex = lne==
nullptr || lne->
visible();
1643 std::unordered_map<std::string,size_t> pathMap;
1644 std::vector<FilesInDir> outputFiles;
1649 for (
const auto &fd : *fn)
1652 if (path.
isEmpty()) path=
"[external]";
1653 auto it = pathMap.
find(path.
str());
1654 if (it!=pathMap.end())
1656 outputFiles.at(it->second).files.push_back(fd.get());
1660 pathMap.emplace(path.
str(),outputFiles.size());
1661 outputFiles.emplace_back(path);
1662 outputFiles.back().files.push_back(fd.get());
1668 std::stable_sort(outputFiles.begin(),
1670 [](
const auto &fp1,
const auto &fp2) { return qstricmp_sort(fp1.path,fp2.path)<0; });
1672 for (
auto &fp : outputFiles)
1677 for (
const auto &fp : outputFiles)
1679 for (
const auto &fd : fp.files)
1689 for (
const auto &fd : *fn)
1732 if (nd->isLinkableInProject()) count++;
1743 if (cd->isLinkableInProject()) count++;
1754template<
class ListType>
1758 for (
const auto &cdi : cl)
1784 if (ccd->isLinkableInProject() && !ccd->isImplicitTemplateInstance())
1823 if (lde->kind()==LayoutDocEntry::MemberDef)
1831 for (
const auto &md : *ml)
1834 if (md->visibleInIndex())
1849 if (lde->kind()==LayoutDocEntry::MemberDecl)
1857 for (
const auto &md : *ml)
1860 if (md->visibleInIndex())
1874 bool rootOnly,
bool addToIndex);
1877 bool rootOnly,
bool addToIndex)
1884 bool hasChildren = hasNestedNamespace ||
1904 bool isDir = hasChildren || visibleMembers>0;
1905 if (isLinkable || isDir)
1914 if (addToIndex && isDir)
1928 if (addToIndex && isDir)
1937 bool rootOnly,
bool addToIndex)
1939 for (
const auto &nd : nsLinkedMap)
1941 if (nd->isVisibleInHierarchy())
1949 bool rootOnly,
bool addToIndex)
1951 for (
const auto &nd : nsLinkedMap)
1953 if (nd->isVisibleInHierarchy())
2038 for (
const auto &nd : nsLinkedMap)
2047 for (
const auto &nd : nsLinkedMap)
2062 bool addToIndex = lne==
nullptr || lne->
visible();
2082 if (nd->isLinkableInProject())
2091 if (nd->getLanguage()==SrcLangExt::VHDL)
2101 bool hasBrief = !nd->briefDescription().isEmpty();
2109 nd->briefDescription(
true),
2111 .setSingleLine(
true)
2112 .setLinkFromIndex(
true));
2161 if (sliceOpt && cd->compoundType() != ct)
2165 if (cd->isLinkableInProject() && !cd->isImplicitTemplateInstance())
2167 if (!cd->isEmbeddedInOuterScope())
2189 if (cd->getLanguage()==SrcLangExt::VHDL &&
2202 if (sliceOpt && cd->compoundType() != ct)
2208 if (cd->isEmbeddedInOuterScope())
2214 if (cd->isLinkableInProject() && !cd->isImplicitTemplateInstance())
2217 if (cd->getLanguage()==SrcLangExt::VHDL)
2225 bool hasBrief = !cd->briefDescription().isEmpty();
2233 cd->briefDescription(
true),
2235 .setSingleLine(
true)
2236 .setLinkFromIndex(
true));
2252 return (c<127 && c>31);
2257 if (startLetter.
isEmpty())
return startLetter;
2258 const char *p = startLetter.
data();
2268 const char hex[]=
"0123456789abcdef";
2271 result+=
hex[
static_cast<unsigned char>(c)>>4];
2272 result+=
hex[
static_cast<unsigned char>(c)&0xf];
2294 if (sliceOpt && cd->compoundType() != ct)
2299 if (cd->isLinkableInProject() && !cd->isImplicitTemplateInstance())
2303 std::string letter =
getUTF8CharAt(cd->className().str(),index);
2304 if (!letter.empty())
2312 QCString alphaLinks =
"<div class=\"qindex\">";
2314 for (
const auto &letter : indexLettersUsed)
2319 alphaLinks +=
"<a class=\"qindex\" href=\"#letter_" +
2323 alphaLinks +=
"</div>\n";
2326 std::map<std::string, std::vector<const ClassDef*> > classesByLetter;
2333 if (sliceOpt && cd->compoundType() != ct)
2338 if (cd->isLinkableInProject() && !cd->isImplicitTemplateInstance())
2340 QCString className = cd->className();
2343 if (!letter.empty())
2346 auto it = classesByLetter.find(letter);
2347 if (it!=classesByLetter.end())
2349 it->second.push_back(cd.get());
2353 classesByLetter.emplace(letter, std::vector<const ClassDef*>({ cd.get() }));
2360 for (
auto &[letter,list] : classesByLetter)
2362 std::stable_sort(list.begin(), list.end(),
2363 [](
const auto &c1,
const auto &c2)
2365 QCString n1 = c1->className();
2366 QCString n2 = c2->className();
2367 return qstricmp_sort(n1.data()+getPrefixIndex(n1), n2.data()+getPrefixIndex(n2))<0;
2372 if (!classesByLetter.empty())
2376 for (
const auto &cl : classesByLetter)
2378 QCString parity = (counter++%2)==0 ?
"even" :
"odd";
2379 ol.
writeString(
"<dl class=\"classindex " + parity +
"\">\n");
2394 for (
const auto &cd : cl.second)
2413 cd->getOutputFileBase(),cd->anchor(),cname);
2447 bool addToIndex = lne==
nullptr || lne->
visible();
2476 bool addToIndex = lne==
nullptr || lne->
visible();
2505 bool addToIndex = lne==
nullptr || lne->
visible();
2534 bool addToIndex = lne==
nullptr || lne->
visible();
2596 bool addToIndex = lne==
nullptr || lne->
visible();
2660 LayoutNavEntry::ClassList,LayoutNavEntry::Classes,
2674 LayoutNavEntry::InterfaceList,LayoutNavEntry::Interfaces,
2677 "annotatedinterfaces",
2688 LayoutNavEntry::StructList,LayoutNavEntry::Structs,
2702 LayoutNavEntry::ExceptionList,LayoutNavEntry::Exceptions,
2705 "annotatedexceptions",
2727 if (fd && prevFileName!=fd->
name())
2732 prevFileName = fd->
name();
2768 int index =
static_cast<int>(type);
2769 const int numIndices = 4;
2770 ASSERT(index<numIndices);
2776 static writeLinkForMember_t writeLinkForMemberMap[numIndices] =
2786 bool firstSection=
true;
2787 bool firstItem=
true;
2790 for (
const auto &kv : memberIndexMap)
2794 auto it = memberIndexMap.find(page);
2795 if (it != memberIndexMap.end())
2806 if (mil==
nullptr || mil->empty())
continue;
2807 for (
const auto &md : *mil)
2809 const char *sep =
nullptr;
2810 bool isFunc=!md->isObjCMethod() &&
2811 (md->isFunction() || md->isSlot() || md->isSignal());
2814 if (name.
data()+startIndex!=prevName)
2817 tolower(name.
at(startIndex))!=tolower(prevName.
at(0))) &&
2832 else if (!useSections && first)
2843 if (isFunc) ol.
docify(
"()");
2848 sep =
" : ";
2849 prevName = name.
data()+startIndex;
2856 if (index<numIndices)
2859 writeLinkForMemberMap[index](ol,md,sep,prevDefName);
2875 bool hideFriendCompounds =
Config_getBool(HIDE_FRIEND_COMPOUNDS);
2885 if (!letter.empty())
2888 bool isFriendToHide = hideFriendCompounds &&
2892 if (!(md->
isFriend() && isFriendToHide) &&
2927 (md->
isFriend() && !isFriendToHide))
2944 if (!letter.empty())
2992 if (!letter.empty())
3044 if (!letter.empty())
3083 for (
const auto &[letter,list] : map)
3092 anchor=fullName+extension+
"#index_";
3094 anchor=fullName+
"_"+is+extension+
"#index_";
3102<script type="text/javascript">
3103function updateNavHighlight() {
3104 var currentHash = window.location.hash;
3105 var navItems = document.querySelectorAll('#navrow4 .tablist li');
3107 for (var i = 0; i < navItems.length; i++) {
3108 var item = navItems[i];
3109 var link = item.querySelector('a');
3110 item.classList.remove('current');
3111 if (link && link.getAttribute('href') === currentHash) {
3112 item.classList.add('current');
3117 var target = document.querySelector(currentHash);
3119 target.scrollIntoView();
3123updateNavHighlight();
3124window.addEventListener('hashchange', updateNavHighlight);
3134 QCString alphaLinks =
"<div class=\"qindex\">";
3136 for (
const auto &[letter,list] : map)
3140 for (
const auto &[letterUC,letter] : usedLetters)
3149 anchor=fullName+extension+
"#index_";
3151 anchor=fullName+
"_"+is+extension+
"#index_";
3156 alphaLinks +=
"<a class=\"qindex\" href=\"" + anchor +
3160 alphaLinks +=
"</div>\n";
3193 return &cmhlInfo[hl];
3199 if (index.numDocumentedClassMembers(hl)==0)
return;
3205 bool quickLinksAfterSplitbar = !disableIndex && generateTreeView && fullSidebar;
3207 bool multiPageIndex=
false;
3210 multiPageIndex=
true;
3220 bool addToIndex = lne==
nullptr || lne->
visible();
3230 for (
const auto &[letter,list] : index.isClassIndexLetterUsed(hl))
3248 auto writeQuickLinks = [&,cap_letter=letter]()
3289 if (!disableIndex && !quickLinksAfterSplitbar)
3295 if (quickLinksAfterSplitbar)
3311 if (dynamicMenus || disableIndex)
3317 multiPageIndex ? letter : std::string(),
3318 index.isClassIndexLetterUsed(hl),
3333 bool addToIndex = lne==
nullptr || lne->
visible();
3386 return &fmhlInfo[hl];
3392 if (index.numDocumentedFileMembers(hl)==0)
return;
3398 bool quickLinksAfterSplitbar = !disableIndex && generateTreeView && fullSidebar;
3400 bool multiPageIndex=
false;
3403 multiPageIndex=
true;
3412 bool addToIndex = lne==
nullptr || lne->
visible();
3422 for (
const auto &[letter,list] : index.isFileIndexLetterUsed(hl))
3440 auto writeQuickLinks = [&,cap_letter=letter]()
3479 if (!disableIndex && !quickLinksAfterSplitbar)
3485 if (quickLinksAfterSplitbar)
3501 if (dynamicMenus || disableIndex)
3507 multiPageIndex ? letter : std::string(),
3508 index.isFileIndexLetterUsed(hl),
3571 return &nmhlInfo[hl];
3580 if (index.numDocumentedNamespaceMembers(hl)==0)
return;
3586 bool quickLinksAfterSplitbar = !disableIndex && generateTreeView && fullSidebar;
3588 bool multiPageIndex=
false;
3591 multiPageIndex=
true;
3600 bool addToIndex = lne==
nullptr || lne->
visible();
3610 for (
const auto &[letter,list] : index.isNamespaceIndexLetterUsed(hl))
3628 auto writeQuickLinks = [&,cap_letter=letter]()
3667 if (!disableIndex && !quickLinksAfterSplitbar)
3673 if (quickLinksAfterSplitbar)
3691 multiPageIndex ? letter : std::string(),
3692 index.isNamespaceIndexLetterUsed(hl),
3748 return &nmhlInfo[hl];
3757 if (index.numDocumentedModuleMembers(hl)==0)
return;
3763 bool quickLinksAfterSplitbar = !disableIndex && generateTreeView && fullSidebar;
3765 bool multiPageIndex=
false;
3768 multiPageIndex=
true;
3777 bool addToIndex = lne==
nullptr || lne->
visible();
3787 for (
const auto &[letter,list] : index.isModuleIndexLetterUsed(hl))
3805 auto writeQuickLinks = [&,cap_letter=letter]()
3844 if (!disableIndex && !quickLinksAfterSplitbar)
3850 if (quickLinksAfterSplitbar)
3866 if (dynamicMenus || disableIndex)
3872 multiPageIndex ? letter : std::string(),
3873 index.isModuleIndexLetterUsed(hl),
3889 bool addToIndex = lne==
nullptr || lne->
visible();
3918 bool addToIndex = lne==
nullptr || lne->
visible();
3942 QCString n=pd->getOutputFileBase();
3943 if (!pd->title().isEmpty())
3977 docPages=indexPages=0;
3980 if (pd->visibleInIndex() && !pd->hasParentPage())
3984 if (pd->documentedPage())
3997 bool addToIndex = lne==
nullptr || lne->
visible();
3998 if (!addToIndex)
return;
4005 QCString pageTitle, pageTitleAsHtml;
4008 pageTitle=pd->
name();
4017 hasSubPages,pageTitle,
4019 QCString(),hasSubPages,
true,pd,pageTitleAsHtml);
4024 hasSubPages || hasSections,pageTitle,
4026 QCString(),hasSubPages,
true,pd,pageTitleAsHtml);
4030 bool doIndent = (hasSections || hasSubPages) && !reuseRoot;
4100 if (!gd->isReference())
4116 if (dd->isLinkableInProject())
4136 bool oldStripCommentsState =
Config_getBool(STRIP_CODE_COMMENTS);
4149 int s = legendDocs.
find(
"<center>");
4150 int e = legendDocs.
find(
"</center>");
4152 if (imgExt==
"svg" && s!=-1 && e!=-1)
4154 legendDocs = legendDocs.
left(s+8) +
"[!-- " +
"SVG 0 --]" + legendDocs.
mid(e);
4184 "maximum nesting level exceeded for group {}: check for possible recursive group relation!",gd->
name());
4197 size_t numSubItems = 0;
4200 if (ml->listType().isDocumentation())
4202 numSubItems += ml->size();
4207 numSubItems += gd->
getFiles().size();
4209 numSubItems += gd->
getDirs().size();
4212 bool isDir = hasSubGroups || hasSubPages || numSubItems>0;
4221 isDir,
true,
nullptr,titleAsHtml);
4228 false,
false,gd,titleAsHtml);
4240 .setSingleLine(
true)
4241 .setAutolinkSupport(
false));
4247 ol.
docify(
" [external]");
4253 if (lde->kind()==LayoutDocEntry::MemberDef && addToIndex)
4261 for (
const auto &md : *ml)
4264 isDir = !enumList.
empty() && md->isEnumerate();
4265 if (md->isVisible() && !md->isAnonymous())
4268 md->qualifiedName(),md->getReference(),
4269 md->getOutputFileBase(),md->anchor(),
false,addToIndex);
4274 for (
const auto &emd : enumList)
4276 if (emd->isVisible())
4279 emd->qualifiedName(),emd->getReference(),emd->getOutputFileBase(),
4280 emd->anchor(),
false,addToIndex);
4289 else if (lde->kind()==LayoutDocEntry::GroupClasses && addToIndex)
4297 if (cd->isVisible() )
4300 LayoutDocManager::Class,
4308 else if (lde->kind()==LayoutDocEntry::GroupNamespaces && addToIndex &&
Config_getBool(SHOW_NAMESPACES))
4312 if (nd->isVisible())
4315 nd->displayName(),nd->getReference(),
4320 else if (lde->kind()==LayoutDocEntry::GroupConcepts && addToIndex)
4324 if (cd->isVisible())
4327 cd->displayName(),cd->getReference(),
4328 cd->getOutputFileBase(),
QCString(),
false,addToIndex);
4332 else if (lde->kind()==LayoutDocEntry::GroupFiles && addToIndex)
4334 for (
const auto &fd : gd->
getFiles())
4336 if (fd->isVisible())
4339 fd->displayName(),fd->getReference(),
4340 fd->getOutputFileBase(),
QCString(),
false,fd->isLinkableViaGroup());
4344 else if (lde->kind()==LayoutDocEntry::GroupDirs && addToIndex)
4346 for (
const auto &dd : gd->
getDirs())
4348 if (dd->isVisible())
4351 dd->shortName(),dd->getReference(),
4352 dd->getOutputFileBase(),
QCString(),
false,
false);
4356 else if (lde->kind()==LayoutDocEntry::GroupPageDocs && addToIndex)
4358 for (
const auto &pd : gd->
getPages())
4366 pageTitle=pd->
name();
4371 hasSubPages || hasSections,
4376 hasSubPages || hasSections,
4380 if (hasSections || hasSubPages)
4389 if (hasSections || hasSubPages)
4395 else if (lde->kind()==LayoutDocEntry::GroupNestedGroups)
4456 bool addToIndex = lne==
nullptr || lne->
visible();
4517 FTVHelp* ftv,
bool addToIndex)
4520 bool isDir=visibleMembers>0;
4540 .setSingleLine(
true)
4541 .setAutolinkSupport(
false));
4546 ol.
docify(
" [external]");
4549 if (addToIndex && isDir)
4561 if (addToIndex && isDir)
4605 bool addToIndex = lne==
nullptr || lne->
visible();
4664 for (
const auto &cd : concepts)
4666 if (cd->isLinkableInProject())
4671 cd->getOutputFileBase(),
QCString(),
false,cd->partOfGroups().empty(),cd);
4676 cd->getOutputFileBase(),
QCString(),
false,cd->partOfGroups().empty());
4683 bool rootOnly,
bool addToIndex);
4686 bool rootOnly,
bool addToIndex)
4688 for (
const auto &nd : nsLinkedMap)
4696 bool rootOnly,
bool addToIndex)
4750 if ((cd->getOuterScope()==
nullptr ||
4756 false,cd->localName(),cd->getReference(),cd->getOutputFileBase(),
4757 QCString(),
false,cd->partOfGroups().empty(),cd.get());
4761 false,cd->localName(),cd->getReference(),cd->getOutputFileBase(),
4762 QCString(),
false,cd->partOfGroups().empty(),cd.get());
4777 bool addToIndex = lne==
nullptr || lne->
visible();
4798 if (cd->isLinkableInProject())
4810 bool hasBrief = !cd->briefDescription().isEmpty();
4818 cd->briefDescription(
true),
4820 .setSingleLine(
true)
4821 .setLinkFromIndex(
true));
4883 if (entry->visible()) count++;
4888 for (
const auto &entry: lne->
children())
4890 if (entry->visible())
4892 ol.
writeString(
"<li><a href=\""+entry->url()+
"\"><span>"+
4893 fixSpaces(entry->title())+
"</span></a></li>\n");
4921 projPrefix=projectName+
" ";
4973 bool quickLinksAfterSplitbar = !disableIndex && generateTreeView && fullSidebar;
4975 if (!disableIndex && !quickLinksAfterSplitbar)
4981 if (quickLinksAfterSplitbar)
4986 bool headerWritten=
false;
5011 .setSingleLine(
true));
5012 headerWritten =
true;
5022 headerWritten =
true;
5051 .setIndexWords(
true));
5090 msg(
"Generating main page...\n");
5133 if (index.numDocumentedPages()>0)
5148 if (index.numDocumentedModules()>0)
5154 if (index.numDocumentedGroups()>0)
5160 if (index.numDocumentedDirs()>0)
5166 if (
Config_getBool(SHOW_NAMESPACES) && (index.numDocumentedNamespaces()>0))
5176 if (index.numDocumentedConcepts()>0)
5182 if (index.numHierarchyInterfaces()>0)
5188 if (index.numHierarchyClasses()>0)
5202 if (index.numHierarchyExceptions()>0)
5208 if (index.numAnnotatedInterfacesPrinted()>0)
5214 if (index.numAnnotatedClassesPrinted()>0)
5224 if (index.numAnnotatedStructsPrinted()>0)
5230 if (index.numAnnotatedExceptionsPrinted()>0)
5245 if (index.numDocumentedModules()>0)
5251 if (index.numDocumentedGroups()>0)
5257 if (index.numDocumentedDirs()>0)
5263 if (index.numDocumentedNamespaces()>0)
5269 if (index.numDocumentedConcepts()>0)
5275 if (index.numAnnotatedInterfacesPrinted()>0)
5281 if (index.numAnnotatedClassesPrinted()>0)
5287 if (index.numAnnotatedStructsPrinted()>0)
5293 if (index.numAnnotatedExceptionsPrinted()>0)
5323 return s.startsWith(
"@ref") || s.startsWith(
"\\ref");
5327 for (
const auto &lne : entries)
5330 size_t idx =
static_cast<size_t>(kind);
5334 size_t newSize = idx+1;
5336 for (
size_t i=oldSize; i<newSize; i++)
indexWritten.at(i)=
false;
5339 bool addToIndex=lne->
visible();
5340 bool needsClosing=
false;
5345 case LayoutNavEntry::MainPage:
5346 msg(
"Generating index page...\n");
5349 case LayoutNavEntry::Pages:
5350 msg(
"Generating page index...\n");
5353 case LayoutNavEntry::Topics:
5354 msg(
"Generating topic index...\n");
5357 case LayoutNavEntry::Modules:
5359 if (index.numDocumentedModules()>0 && addToIndex)
5367 case LayoutNavEntry::ModuleList:
5368 msg(
"Generating module index...\n");
5371 case LayoutNavEntry::ModuleMembers:
5372 msg(
"Generating module member index...\n");
5375 case LayoutNavEntry::Namespaces:
5380 if (index.numDocumentedNamespaces()>0 && addToIndex)
5388 msg(
"Generating namespace index...\n");
5394 case LayoutNavEntry::NamespaceList:
5399 msg(
"Generating namespace index...\n");
5404 case LayoutNavEntry::NamespaceMembers:
5405 msg(
"Generating namespace member index...\n");
5408 case LayoutNavEntry::Classes:
5409 if (index.numAnnotatedClasses()>0 && addToIndex)
5417 msg(
"Generating annotated compound index...\n");
5421 case LayoutNavEntry::Concepts:
5422 msg(
"Generating concept index...\n");
5425 case LayoutNavEntry::ClassList:
5426 msg(
"Generating annotated compound index...\n");
5429 case LayoutNavEntry::ClassIndex:
5430 msg(
"Generating alphabetical compound index...\n");
5433 case LayoutNavEntry::ClassHierarchy:
5434 msg(
"Generating hierarchical class index...\n");
5438 msg(
"Generating graphical class hierarchy...\n");
5442 case LayoutNavEntry::ClassMembers:
5445 msg(
"Generating member index...\n");
5449 case LayoutNavEntry::Interfaces:
5450 if (sliceOpt && index.numAnnotatedInterfaces()>0 && addToIndex)
5457 case LayoutNavEntry::InterfaceList:
5460 msg(
"Generating annotated interface index...\n");
5464 case LayoutNavEntry::InterfaceIndex:
5467 msg(
"Generating alphabetical interface index...\n");
5471 case LayoutNavEntry::InterfaceHierarchy:
5474 msg(
"Generating hierarchical interface index...\n");
5478 msg(
"Generating graphical interface hierarchy...\n");
5483 case LayoutNavEntry::Structs:
5484 if (sliceOpt && index.numAnnotatedStructs()>0 && addToIndex)
5491 case LayoutNavEntry::StructList:
5494 msg(
"Generating annotated struct index...\n");
5498 case LayoutNavEntry::StructIndex:
5501 msg(
"Generating alphabetical struct index...\n");
5505 case LayoutNavEntry::Exceptions:
5506 if (sliceOpt && index.numAnnotatedExceptions()>0 && addToIndex)
5513 case LayoutNavEntry::ExceptionList:
5516 msg(
"Generating annotated exception index...\n");
5520 case LayoutNavEntry::ExceptionIndex:
5523 msg(
"Generating alphabetical exception index...\n");
5527 case LayoutNavEntry::ExceptionHierarchy:
5530 msg(
"Generating hierarchical exception index...\n");
5534 msg(
"Generating graphical exception hierarchy...\n");
5539 case LayoutNavEntry::Files:
5541 if (
Config_getBool(SHOW_FILES) && index.numDocumentedFiles()>0 && addToIndex)
5549 msg(
"Generating file index...\n");
5554 case LayoutNavEntry::FileList:
5555 msg(
"Generating file index...\n");
5558 case LayoutNavEntry::FileGlobals:
5559 msg(
"Generating file member index...\n");
5562 case LayoutNavEntry::Examples:
5563 msg(
"Generating example index...\n");
5566 case LayoutNavEntry::User:
5571 bool isRelative=url.
at(0)==
'!';
5572 if (!url.
isEmpty() && !isRelative)
5580 case LayoutNavEntry::UserGroup:
5592 bool isRelative=url.
at(0)==
'!';
5610 case LayoutNavEntry::None:
5611 assert(kind != LayoutNavEntry::None);
5614 if (kind!=LayoutNavEntry::User && kind!=LayoutNavEntry::UserGroup)
5624 case LayoutNavEntry::Modules:
5625 case LayoutNavEntry::Namespaces:
5626 case LayoutNavEntry::Classes:
5627 case LayoutNavEntry::Files:
5628 case LayoutNavEntry::UserGroup:
5650 case LayoutNavEntry::MainPage:
return true;
5651 case LayoutNavEntry::User:
return true;
5652 case LayoutNavEntry::UserGroup:
return true;
5653 case LayoutNavEntry::Pages:
return index.numIndexedPages()>0;
5654 case LayoutNavEntry::Topics:
return index.numDocumentedGroups()>0;
5655 case LayoutNavEntry::Modules:
return index.numDocumentedModules()>0;
5656 case LayoutNavEntry::ModuleList:
return index.numDocumentedModules()>0;
5658 case LayoutNavEntry::Namespaces:
return index.numDocumentedNamespaces()>0 && showNamespaces;
5659 case LayoutNavEntry::NamespaceList:
return index.numDocumentedNamespaces()>0 && showNamespaces;
5661 case LayoutNavEntry::Concepts:
return index.numDocumentedConcepts()>0;
5662 case LayoutNavEntry::Classes:
return index.numAnnotatedClasses()>0;
5663 case LayoutNavEntry::ClassList:
return index.numAnnotatedClasses()>0;
5664 case LayoutNavEntry::ClassIndex:
return index.numAnnotatedClasses()>0;
5665 case LayoutNavEntry::ClassHierarchy:
return index.numHierarchyClasses()>0;
5667 case LayoutNavEntry::Interfaces:
return index.numAnnotatedInterfaces()>0;
5668 case LayoutNavEntry::InterfaceList:
return index.numAnnotatedInterfaces()>0;
5669 case LayoutNavEntry::InterfaceIndex:
return index.numAnnotatedInterfaces()>0;
5670 case LayoutNavEntry::InterfaceHierarchy:
return index.numHierarchyInterfaces()>0;
5671 case LayoutNavEntry::Structs:
return index.numAnnotatedStructs()>0;
5672 case LayoutNavEntry::StructList:
return index.numAnnotatedStructs()>0;
5673 case LayoutNavEntry::StructIndex:
return index.numAnnotatedStructs()>0;
5674 case LayoutNavEntry::Exceptions:
return index.numAnnotatedExceptions()>0;
5675 case LayoutNavEntry::ExceptionList:
return index.numAnnotatedExceptions()>0;
5676 case LayoutNavEntry::ExceptionIndex:
return index.numAnnotatedExceptions()>0;
5677 case LayoutNavEntry::ExceptionHierarchy:
return index.numHierarchyExceptions()>0;
5678 case LayoutNavEntry::Files:
return index.numDocumentedFiles()>0 && showFiles;
5679 case LayoutNavEntry::FileList:
return index.numDocumentedFiles()>0 && showFiles;
5682 case LayoutNavEntry::None:
5683 assert(kind != LayoutNavEntry::None);
5691 std::function<std::size_t(std::size_t)> numDocumented,
5693 const T *(*getInfo)(
size_t hl),
5697 bool firstMember=
true;
5698 for (std::size_t i=0;i<total;i++)
5700 if (numDocumented(i)>0)
5716 bool multiPageIndex=
false;
5719 multiPageIndex=
true;
5721 t <<
",children:[\n";
5722 bool firstLetter=
true;
5723 for (
const auto &[letter,list] : getMemberList(i))
5725 if (!firstLetter) t <<
",\n";
5730 QCString fullName = getInfo(i)->fname;
5731 if (!multiPageIndex || firstLetter)
5732 anchor=fullName+extension+
"#index_";
5734 anchor=fullName+
"_"+is+extension+
"#index_";
5753 for (
const auto &entry : root->
children())
5759 bool firstChild =
true;
5760 if (!first) t <<
",";
5761 t <<
"children:[\n";
5762 for (
const auto &entry : root->
children())
5766 if (!firstChild) t <<
",\n";
5769 if (
isURL(url)) url =
"^" + url;
5772 bool hasChildren=
false;
5773 if (entry->kind()==LayoutNavEntry::ModuleMembers)
5775 auto numDoc = [](std::size_t i) {
5778 auto memList = [](std::size_t i) {
5783 if (entry->kind()==LayoutNavEntry::NamespaceMembers)
5785 auto numDoc = [](std::size_t i) {
5788 auto memList = [](std::size_t i) {
5793 else if (entry->kind()==LayoutNavEntry::ClassMembers)
5795 auto numDoc = [](std::size_t i) {
5798 auto memList = [](std::size_t i) {
5803 else if (entry->kind()==LayoutNavEntry::FileGlobals)
5805 auto numDoc = [](std::size_t i) {
5808 auto memList = [](std::size_t i) {
5817 if (hasChildren) t <<
"]";
5834 t <<
"var menudata={";
5836 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 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 briefFile() const =0
virtual QCString getOutputFileBase() const =0
virtual Definition * getOuterScope() const =0
virtual bool isReference() const =0
virtual QCString displayName(bool includeScope=true) 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, const QCString &nameAsHtml=QCString())
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
void addContentsItem(bool isDir, const QCString &name, const QCString &ref, const QCString &file, const QCString &anchor, bool separateIndex=false, bool addToNavIndex=false, const Definition *def=nullptr, const QCString &nameAsHtml=QCString())
void addIndexFile(const QCString &name)
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 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 QCString anonymousMemberPrefix() 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 MemberDef * toAnonymousMember() 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
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 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 endTextBlock(bool paraBreak=false)
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 startHeaderSection()
void docify(const QCString &s)
void generateDoc(const QCString &fileName, int startLine, const Definition *ctx, const MemberDef *md, const QCString &docStr, const DocOptions &options)
void startParagraph(const QCString &classDef=QCString())
void endIndexSection(IndexSection is)
void startProjectNumber()
void pushGeneratorState()
void disableAllBut(OutputType o)
void startTextBlock(bool dense=false)
void startFile(const QCString &name, bool isSource, const QCString &manName, const QCString &title, int hierarchyLevel=0)
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.
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.
int find(char c, int index=0, bool cs=true) const
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.
virtual QCString trAll()=0
virtual QCString trCompoundListDescription()=0
virtual QCString trTopicIndex()=0
virtual QCString trClassHierarchyDescription()=0
virtual QCString trNamespaceDocumentation()=0
virtual QCString trTopics()=0
virtual QCString trDocumentation(const QCString &projName)=0
virtual QCString trDirIndex()=0
virtual QCString trExceptionHierarchy()=0
virtual QCString trConceptIndex()=0
virtual QCString trModuleIndex()=0
virtual QCString trDirectories()=0
virtual QCString trExceptionDocumentation()=0
virtual QCString trFileIndex()=0
virtual QCString trNamespaceIndex()=0
virtual QCString trGotoGraphicalHierarchy()=0
virtual QCString trSequences()=0
virtual QCString trHierarchicalIndex()=0
virtual QCString trExceptionListDescription()=0
virtual QCString trInterfaceIndex()=0
virtual QCString trFunctionAndProc()=0
virtual QCString trModules()=0
virtual QCString trFileListDescription(bool extractAll)=0
virtual QCString trConceptList()=0
virtual QCString trInterfaceList()=0
virtual QCString trVariables()=0
virtual QCString trFunctions()=0
virtual QCString trFileMembersDescriptionTotal(FileMemberHighlight::Enum hl)=0
virtual QCString trExceptionHierarchyDescription()=0
virtual QCString trModulesListDescription(bool extractAll)=0
virtual QCString trFileDocumentation()=0
virtual QCString trEnumerationValues()=0
virtual QCString trConstants()=0
virtual QCString trRelatedPagesDescription()=0
virtual QCString trCompoundMembers()=0
virtual QCString trStructDocumentation()=0
virtual QCString trInterfaceHierarchyDescription()=0
virtual QCString trExamplesDescription()=0
virtual QCString trCompoundIndex()=0
virtual QCString trModulesMembers()=0
virtual QCString trInterfaceHierarchy()=0
virtual QCString trClassDocumentation()=0
virtual QCString trLegendDocs()=0
virtual QCString trExceptionList()=0
virtual QCString trModuleDocumentation()=0
virtual QCString trGeneratedBy()=0
virtual QCString trRelatedPages()=0
virtual QCString trTopicDocumentation()=0
virtual QCString trTypeDocumentation()=0
virtual QCString trClassHierarchy()=0
virtual QCString trNamespaceList()=0
virtual QCString trEnumerations()=0
virtual QCString trNamespaceMembersDescriptionTotal(NamespaceMemberHighlight::Enum hl)=0
virtual QCString trModulesIndex()=0
virtual QCString trFileMembers()=0
virtual QCString trDirDocumentation()=0
virtual QCString trNamespaceListDescription(bool extractAll)=0
virtual QCString trCompoundIndexFortran()=0
virtual QCString trStructIndex()=0
virtual QCString trGotoTextualHierarchy()=0
virtual QCString trTopicListDescription()=0
virtual QCString trFileList()=0
virtual QCString trEvents()=0
virtual QCString trExamples()=0
virtual QCString trNamespaceMembers()=0
virtual QCString trCompoundMembersDescriptionTotal(ClassMemberHighlight::Enum hl)=0
virtual QCString trStructList()=0
virtual QCString trSubprograms()=0
virtual QCString trStructListDescription()=0
virtual QCString trModuleMembersDescriptionTotal(ModuleMemberHighlight::Enum hl)=0
virtual QCString trLegendTitle()=0
virtual QCString trDictionaries()=0
virtual QCString trMainPage()=0
virtual QCString trInterfaceListDescription()=0
virtual QCString trRelatedSymbols()=0
virtual QCString trConceptDocumentation()=0
virtual QCString trExceptionIndex()=0
virtual QCString trReferenceManual()=0
virtual QCString trInterfaceDocumentation()=0
virtual QCString trCompoundList()=0
virtual QCString trDesignUnitIndex()=0
virtual QCString trProperties()=0
virtual QCString trConceptListDescription(bool extractAll)=0
virtual QCString trCode()=0
virtual QCString trTypedefs()=0
virtual QCString trDefines()=0
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)
std::map< std::string, std::string > StringMap
Definition * toDefinition(DefinitionMutable *dm)
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 void writePages(PageDef *pd, FTVHelp *ftv, bool reuseRoot=false)
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 startQuickIndexList(OutputList &ol, bool letterTabs=false)
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 writeDirIndex(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)
void addMembersToIndex(T *def, LayoutDocManager::LayoutPart part, const QCString &name, const QCString &anchor, bool addToIndex=true, bool preventSeparateIndex=false, const ConceptLinkedRefMap *concepts=nullptr)
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 void writeFileLinkForMember(OutputList &ol, const MemberDef *md, const QCString &separator, QCString &prevFileName)
static const MmhlInfo * getMmhlInfo(size_t hl)
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)
static int countClassesInTreeList(const ClassLinkedMap &cl, ClassDef::CompoundType ct)
static void writeAlphabeticalInterfaceIndex(OutputList &ol)
static void endQuickIndexItem(OutputList &ol)
static void writeMemberIndex(OutputList &ol, const Index::MemberIndexMap &map, QCString fullName, bool multiPage)
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)
void startFile(OutputList &ol, const QCString &name, bool isSource, const QCString &manName, const QCString &title, HighlightedItem hli, bool additionalIndices, const QCString &altSidebarName, int hierarchyLevel, const QCString &allMembersFile)
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)
@ 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 convertToJSString(const QCString &s, bool keepEntities, bool singleQuotes)
QCString parseCommentAsHtml(const Definition *scope, const MemberDef *member, const QCString &doc, const QCString &fileName, int lineNr)
QCString convertToHtml(const QCString &s, bool keepEntities)
QCString parseCommentAsText(const Definition *scope, const MemberDef *md, const QCString &doc, const QCString &fileName, int lineNr)
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.
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()
QCString stripFromPath(const QCString &path)
int getPrefixIndex(const QCString &name)
QCString convertToId(const QCString &s)
void addHtmlExtensionIfMissing(QCString &fName)
A bunch of utility functions.
QCString fixSpaces(const QCString &s)