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)
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());
947 for (
const auto &fd : *fn)
949 if (fd->getDirDef()==
nullptr)
956 reference = fd->getReference();
957 outputBase = fd->getOutputFileBase();
996 for (
const auto &cd : cl)
1004 if (cd->getLanguage()==SrcLangExt::VHDL)
1012 else if (sliceOpt && cd->compoundType() != ct)
1023 if (cd->isVisibleInHierarchy())
1035 bool hasChildren = visitedClasses.find(cd.get())==visitedClasses.end() &&
1039 if (cd->isLinkable())
1050 .setSingleLine(
true)
1051 .setAutolinkSupport(
false));
1052 ol.
endIndexItem(cd->getReference(),cd->getOutputFileBase());
1053 if (cd->isReference())
1056 ol.
docify(
" [external]");
1061 if (cd->getLanguage()!=SrcLangExt::VHDL)
1063 Doxygen::indexList->addContentsItem(hasChildren,cd->displayName(),cd->getReference(),cd->getOutputFileBase(),cd->anchor(),
FALSE,
FALSE,cd.get(),escapedName);
1068 ftv->
addContentsItem(hasChildren,cd->displayName(),cd->getReference(),cd->getOutputFileBase(),cd->anchor(),
FALSE,
FALSE,cd.get(),escapedName);
1085 if (cd->getLanguage()==SrcLangExt::VHDL && hasChildren)
1088 visitedClasses.insert(cd.get());
1090 else if (hasChildren)
1093 visitedClasses.insert(cd.get());
1132 for (
const auto &cd : cl)
1134 if (sliceOpt && cd->compoundType() != ct)
1140 if (cd->isVisibleInHierarchy())
1142 if (!cd->subClasses().empty())
1172 bool addToIndex = lne==
nullptr || lne->
visible();
1278 bool addToIndex = lne==
nullptr || lne->
visible();
1383 bool addToIndex = lne==
nullptr || lne->
visible();
1485 for (
const auto &fd: *fn)
1558 .setSingleLine(
true)
1559 .setLinkFromIndex(
true));
1590 if (dir->hasDocumentation())
1615 bool addToIndex = lne==
nullptr || lne->
visible();
1648 std::unordered_map<std::string,size_t> pathMap;
1649 std::vector<FilesInDir> outputFiles;
1654 for (
const auto &fd : *fn)
1657 if (path.
isEmpty()) path=
"[external]";
1658 auto it = pathMap.
find(path.
str());
1659 if (it!=pathMap.end())
1661 outputFiles.at(it->second).files.push_back(fd.get());
1665 pathMap.emplace(path.
str(),outputFiles.size());
1666 outputFiles.emplace_back(path);
1667 outputFiles.back().files.push_back(fd.get());
1673 std::stable_sort(outputFiles.begin(),
1675 [](
const auto &fp1,
const auto &fp2) { return qstricmp_sort(fp1.path,fp2.path)<0; });
1677 for (
auto &fp : outputFiles)
1682 for (
const auto &fp : outputFiles)
1684 for (
const auto &fd : fp.files)
1694 for (
const auto &fd : *fn)
1737 if (nd->isLinkableInProject()) count++;
1748 if (cd->isLinkableInProject()) count++;
1759template<
class ListType>
1763 for (
const auto &cdi : cl)
1789 if (ccd->isLinkableInProject() && !ccd->isImplicitTemplateInstance())
1828 if (lde->kind()==LayoutDocEntry::MemberDef)
1836 for (
const auto &md : *ml)
1839 if (md->visibleInIndex())
1854 if (lde->kind()==LayoutDocEntry::MemberDecl)
1862 for (
const auto &md : *ml)
1865 if (md->visibleInIndex())
1879 bool rootOnly,
bool addToIndex);
1882 bool rootOnly,
bool addToIndex)
1889 bool hasChildren = hasNestedNamespace ||
1909 bool isDir = hasChildren || visibleMembers>0;
1910 if (isLinkable || isDir)
1919 if (addToIndex && isDir)
1933 if (addToIndex && isDir)
1942 bool rootOnly,
bool addToIndex)
1944 for (
const auto &nd : nsLinkedMap)
1946 if (nd->isVisibleInHierarchy())
1954 bool rootOnly,
bool addToIndex)
1956 for (
const auto &nd : nsLinkedMap)
1958 if (nd->isVisibleInHierarchy())
2043 for (
const auto &nd : nsLinkedMap)
2052 for (
const auto &nd : nsLinkedMap)
2067 bool addToIndex = lne==
nullptr || lne->
visible();
2087 if (nd->isLinkableInProject())
2096 if (nd->getLanguage()==SrcLangExt::VHDL)
2106 bool hasBrief = !nd->briefDescription().isEmpty();
2114 nd->briefDescription(
true),
2116 .setSingleLine(
true)
2117 .setLinkFromIndex(
true));
2166 if (sliceOpt && cd->compoundType() != ct)
2170 if (cd->isLinkableInProject() && !cd->isImplicitTemplateInstance())
2172 if (!cd->isEmbeddedInOuterScope())
2194 if (cd->getLanguage()==SrcLangExt::VHDL &&
2207 if (sliceOpt && cd->compoundType() != ct)
2213 if (cd->isEmbeddedInOuterScope())
2219 if (cd->isLinkableInProject() && !cd->isImplicitTemplateInstance())
2222 if (cd->getLanguage()==SrcLangExt::VHDL)
2230 bool hasBrief = !cd->briefDescription().isEmpty();
2238 cd->briefDescription(
true),
2240 .setSingleLine(
true)
2241 .setLinkFromIndex(
true));
2257 return (c<127 && c>31);
2262 if (startLetter.
isEmpty())
return startLetter;
2263 const char *p = startLetter.
data();
2273 const char hex[]=
"0123456789abcdef";
2276 result+=
hex[
static_cast<unsigned char>(c)>>4];
2277 result+=
hex[
static_cast<unsigned char>(c)&0xf];
2299 if (sliceOpt && cd->compoundType() != ct)
2301 if (cd->isLinkableInProject() && !cd->isImplicitTemplateInstance())
2308 std::string letter =
getUTF8CharAt(cd->className().str(),index);
2309 if (!letter.empty())
2317 QCString alphaLinks =
"<div class=\"qindex\">";
2319 for (
const auto &letter : indexLettersUsed)
2324 alphaLinks +=
"<a class=\"qindex\" href=\"#letter_" +
2328 alphaLinks +=
"</div>\n";
2331 std::map<std::string, std::vector<const ClassDef*> > classesByLetter;
2338 if (sliceOpt && cd->compoundType() != ct)
2343 if (cd->isLinkableInProject() && !cd->isImplicitTemplateInstance())
2345 QCString className = cd->className();
2348 if (!letter.empty())
2351 auto it = classesByLetter.find(letter);
2352 if (it!=classesByLetter.end())
2354 it->second.push_back(cd.get());
2358 classesByLetter.emplace(letter, std::vector<const ClassDef*>({ cd.get() }));
2365 for (
auto &[letter,list] : classesByLetter)
2367 std::stable_sort(list.begin(), list.end(),
2368 [](
const auto &c1,
const auto &c2)
2370 QCString n1 = c1->className();
2371 QCString n2 = c2->className();
2372 return qstricmp_sort(n1.data()+getPrefixIndex(n1), n2.data()+getPrefixIndex(n2))<0;
2377 if (!classesByLetter.empty())
2381 for (
const auto &cl : classesByLetter)
2383 QCString parity = (counter++%2)==0 ?
"even" :
"odd";
2384 ol.
writeString(
"<dl class=\"classindex " + parity +
"\">\n");
2399 for (
const auto &cd : cl.second)
2418 cd->getOutputFileBase(),cd->anchor(),cname);
2452 bool addToIndex = lne==
nullptr || lne->
visible();
2481 bool addToIndex = lne==
nullptr || lne->
visible();
2510 bool addToIndex = lne==
nullptr || lne->
visible();
2539 bool addToIndex = lne==
nullptr || lne->
visible();
2602 bool addToIndex = lne==
nullptr || lne->
visible();
2666 LayoutNavEntry::ClassList,LayoutNavEntry::Classes,
2680 LayoutNavEntry::InterfaceList,LayoutNavEntry::Interfaces,
2683 "annotatedinterfaces",
2694 LayoutNavEntry::StructList,LayoutNavEntry::Structs,
2708 LayoutNavEntry::ExceptionList,LayoutNavEntry::Exceptions,
2711 "annotatedexceptions",
2733 if (fd && prevFileName!=fd->
name())
2738 prevFileName = fd->
name();
2774 int index =
static_cast<int>(type);
2775 const int numIndices = 4;
2776 ASSERT(index<numIndices);
2782 static writeLinkForMember_t writeLinkForMemberMap[numIndices] =
2792 bool firstSection=
TRUE;
2793 bool firstItem=
TRUE;
2796 for (
const auto &kv : memberIndexMap)
2800 auto it = memberIndexMap.find(page);
2801 if (it != memberIndexMap.end())
2812 if (mil==
nullptr || mil->empty())
continue;
2813 for (
const auto &md : *mil)
2815 const char *sep =
nullptr;
2816 bool isFunc=!md->isObjCMethod() &&
2817 (md->isFunction() || md->isSlot() || md->isSignal());
2820 if (name.
data()+startIndex!=prevName)
2823 tolower(name.
at(startIndex))!=tolower(prevName.
at(0))) &&
2838 else if (!useSections && first)
2849 if (isFunc) ol.
docify(
"()");
2854 sep =
" : ";
2855 prevName = name.
data()+startIndex;
2862 if (index<numIndices)
2865 writeLinkForMemberMap[index](ol,md,sep,prevDefName);
2881 bool hideFriendCompounds =
Config_getBool(HIDE_FRIEND_COMPOUNDS);
2891 if (!letter.empty())
2894 bool isFriendToHide = hideFriendCompounds &&
2898 if (!(md->
isFriend() && isFriendToHide) &&
2933 (md->
isFriend() && !isFriendToHide))
2950 if (!letter.empty())
2998 if (!letter.empty())
3050 if (!letter.empty())
3089 for (
const auto &[letter,list] : map)
3098 anchor=fullName+extension+
"#index_";
3100 anchor=fullName+
"_"+is+extension+
"#index_";
3108<script type="text/javascript">
3109function updateNavHighlight() {
3110 var currentHash = window.location.hash;
3111 var navItems = document.querySelectorAll('#navrow4 .tablist li');
3113 for (var i = 0; i < navItems.length; i++) {
3114 var item = navItems[i];
3115 var link = item.querySelector('a');
3116 item.classList.remove('current');
3117 if (link && link.getAttribute('href') === currentHash) {
3118 item.classList.add('current');
3123 var target = document.querySelector(currentHash);
3125 target.scrollIntoView();
3129updateNavHighlight();
3130window.addEventListener('hashchange', updateNavHighlight);
3140 QCString alphaLinks =
"<div class=\"qindex\">";
3142 for (
const auto &[letter,list] : map)
3146 for (
const auto &[letterUC,letter] : usedLetters)
3155 anchor=fullName+extension+
"#index_";
3157 anchor=fullName+
"_"+is+extension+
"#index_";
3162 alphaLinks +=
"<a class=\"qindex\" href=\"" + anchor +
3166 alphaLinks +=
"</div>\n";
3199 return &cmhlInfo[hl];
3205 if (index.numDocumentedClassMembers(hl)==0)
return;
3211 bool quickLinksAfterSplitbar = !disableIndex && generateTreeView && fullSidebar;
3213 bool multiPageIndex=
FALSE;
3216 multiPageIndex=
TRUE;
3226 bool addToIndex = lne==
nullptr || lne->
visible();
3236 for (
const auto &[letter,list] : index.isClassIndexLetterUsed(hl))
3254 auto writeQuickLinks = [&,cap_letter=letter]()
3295 if (!disableIndex && !quickLinksAfterSplitbar)
3301 if (quickLinksAfterSplitbar)
3317 if (dynamicMenus || disableIndex)
3323 multiPageIndex ? letter : std::string(),
3324 index.isClassIndexLetterUsed(hl),
3339 bool addToIndex = lne==
nullptr || lne->
visible();
3392 return &fmhlInfo[hl];
3398 if (index.numDocumentedFileMembers(hl)==0)
return;
3404 bool quickLinksAfterSplitbar = !disableIndex && generateTreeView && fullSidebar;
3406 bool multiPageIndex=
FALSE;
3409 multiPageIndex=
TRUE;
3418 bool addToIndex = lne==
nullptr || lne->
visible();
3428 for (
const auto &[letter,list] : index.isFileIndexLetterUsed(hl))
3446 auto writeQuickLinks = [&,cap_letter=letter]()
3485 if (!disableIndex && !quickLinksAfterSplitbar)
3491 if (quickLinksAfterSplitbar)
3507 if (dynamicMenus || disableIndex)
3513 multiPageIndex ? letter : std::string(),
3514 index.isFileIndexLetterUsed(hl),
3577 return &nmhlInfo[hl];
3586 if (index.numDocumentedNamespaceMembers(hl)==0)
return;
3592 bool quickLinksAfterSplitbar = !disableIndex && generateTreeView && fullSidebar;
3594 bool multiPageIndex=
FALSE;
3597 multiPageIndex=
TRUE;
3606 bool addToIndex = lne==
nullptr || lne->
visible();
3616 for (
const auto &[letter,list] : index.isNamespaceIndexLetterUsed(hl))
3634 auto writeQuickLinks = [&,cap_letter=letter]()
3673 if (!disableIndex && !quickLinksAfterSplitbar)
3679 if (quickLinksAfterSplitbar)
3697 multiPageIndex ? letter : std::string(),
3698 index.isNamespaceIndexLetterUsed(hl),
3754 return &nmhlInfo[hl];
3763 if (index.numDocumentedModuleMembers(hl)==0)
return;
3769 bool quickLinksAfterSplitbar = !disableIndex && generateTreeView && fullSidebar;
3771 bool multiPageIndex=
FALSE;
3774 multiPageIndex=
TRUE;
3783 bool addToIndex = lne==
nullptr || lne->
visible();
3793 for (
const auto &[letter,list] : index.isModuleIndexLetterUsed(hl))
3811 auto writeQuickLinks = [&,cap_letter=letter]()
3850 if (!disableIndex && !quickLinksAfterSplitbar)
3856 if (quickLinksAfterSplitbar)
3872 if (dynamicMenus || disableIndex)
3878 multiPageIndex ? letter : std::string(),
3879 index.isModuleIndexLetterUsed(hl),
3895 bool addToIndex = lne==
nullptr || lne->
visible();
3924 bool addToIndex = lne==
nullptr || lne->
visible();
3948 QCString n=pd->getOutputFileBase();
3949 if (!pd->title().isEmpty())
3983 docPages=indexPages=0;
3986 if (pd->visibleInIndex() && !pd->hasParentPage())
3990 if (pd->documentedPage())
4003 bool addToIndex = lne==
nullptr || lne->
visible();
4004 if (!addToIndex)
return;
4011 QCString pageTitle, pageTitleAsHtml;
4014 pageTitle=pd->
name();
4023 hasSubPages,pageTitle,
4030 hasSubPages || hasSections,pageTitle,
4036 bool doIndent = (hasSections || hasSubPages) && !reuseRoot;
4106 if (!gd->isReference())
4122 if (dd->isLinkableInProject())
4142 bool oldStripCommentsState =
Config_getBool(STRIP_CODE_COMMENTS);
4155 int s = legendDocs.
find(
"<center>");
4156 int e = legendDocs.
find(
"</center>");
4158 if (imgExt==
"svg" && s!=-1 && e!=-1)
4160 legendDocs = legendDocs.
left(s+8) +
"[!-- " +
"SVG 0 --]" + legendDocs.
mid(e);
4190 "maximum nesting level exceeded for group {}: check for possible recursive group relation!",gd->
name());
4203 size_t numSubItems = 0;
4206 if (ml->listType().isDocumentation())
4208 numSubItems += ml->size();
4213 numSubItems += gd->
getFiles().size();
4215 numSubItems += gd->
getDirs().size();
4218 bool isDir = hasSubGroups || hasSubPages || numSubItems>0;
4227 isDir,
TRUE,
nullptr,titleAsHtml);
4246 .setSingleLine(
true)
4247 .setAutolinkSupport(
false));
4253 ol.
docify(
" [external]");
4259 if (lde->kind()==LayoutDocEntry::MemberDef && addToIndex)
4267 for (
const auto &md : *ml)
4270 isDir = !enumList.
empty() && md->isEnumerate();
4271 if (md->isVisible() && !md->isAnonymous())
4274 md->qualifiedName(),md->getReference(),
4275 md->getOutputFileBase(),md->anchor(),
FALSE,addToIndex);
4280 for (
const auto &emd : enumList)
4282 if (emd->isVisible())
4285 emd->qualifiedName(),emd->getReference(),emd->getOutputFileBase(),
4286 emd->anchor(),
FALSE,addToIndex);
4295 else if (lde->kind()==LayoutDocEntry::GroupClasses && addToIndex)
4303 if (cd->isVisible() )
4306 LayoutDocManager::Class,
4314 else if (lde->kind()==LayoutDocEntry::GroupNamespaces && addToIndex &&
Config_getBool(SHOW_NAMESPACES))
4318 if (nd->isVisible())
4321 nd->displayName(),nd->getReference(),
4326 else if (lde->kind()==LayoutDocEntry::GroupConcepts && addToIndex)
4330 if (cd->isVisible())
4333 cd->displayName(),cd->getReference(),
4338 else if (lde->kind()==LayoutDocEntry::GroupFiles && addToIndex)
4340 for (
const auto &fd : gd->
getFiles())
4342 if (fd->isVisible())
4345 fd->displayName(),fd->getReference(),
4346 fd->getOutputFileBase(),
QCString(),
FALSE,fd->isLinkableViaGroup());
4350 else if (lde->kind()==LayoutDocEntry::GroupDirs && addToIndex)
4352 for (
const auto &dd : gd->
getDirs())
4354 if (dd->isVisible())
4357 dd->shortName(),dd->getReference(),
4362 else if (lde->kind()==LayoutDocEntry::GroupPageDocs && addToIndex)
4364 for (
const auto &pd : gd->
getPages())
4372 pageTitle=pd->
name();
4377 hasSubPages || hasSections,
4382 hasSubPages || hasSections,
4386 if (hasSections || hasSubPages)
4395 if (hasSections || hasSubPages)
4401 else if (lde->kind()==LayoutDocEntry::GroupNestedGroups)
4462 bool addToIndex = lne==
nullptr || lne->
visible();
4523 FTVHelp* ftv,
bool addToIndex)
4526 bool isDir=visibleMembers>0;
4546 .setSingleLine(
true)
4547 .setAutolinkSupport(
false));
4552 ol.
docify(
" [external]");
4555 if (addToIndex && isDir)
4567 if (addToIndex && isDir)
4611 bool addToIndex = lne==
nullptr || lne->
visible();
4670 for (
const auto &cd : concepts)
4672 if (cd->isLinkableInProject())
4677 cd->getOutputFileBase(),
QCString(),
false,cd->partOfGroups().empty(),cd);
4682 cd->getOutputFileBase(),
QCString(),
false,cd->partOfGroups().empty());
4689 bool rootOnly,
bool addToIndex);
4692 bool rootOnly,
bool addToIndex)
4694 for (
const auto &nd : nsLinkedMap)
4702 bool rootOnly,
bool addToIndex)
4756 if ((cd->getOuterScope()==
nullptr ||
4762 false,cd->localName(),cd->getReference(),cd->getOutputFileBase(),
4763 QCString(),
false,cd->partOfGroups().empty(),cd.get());
4767 false,cd->localName(),cd->getReference(),cd->getOutputFileBase(),
4768 QCString(),
false,cd->partOfGroups().empty(),cd.get());
4783 bool addToIndex = lne==
nullptr || lne->
visible();
4804 if (cd->isLinkableInProject())
4816 bool hasBrief = !cd->briefDescription().isEmpty();
4824 cd->briefDescription(
true),
4826 .setSingleLine(
true)
4827 .setLinkFromIndex(
true));
4889 if (entry->visible()) count++;
4894 for (
const auto &entry: lne->
children())
4896 if (entry->visible())
4898 ol.
writeString(
"<li><a href=\""+entry->url()+
"\"><span>"+
4899 fixSpaces(entry->title())+
"</span></a></li>\n");
4927 projPrefix=projectName+
" ";
4979 bool quickLinksAfterSplitbar = !disableIndex && generateTreeView && fullSidebar;
4981 if (!disableIndex && !quickLinksAfterSplitbar)
4987 if (quickLinksAfterSplitbar)
4992 bool headerWritten=
FALSE;
5017 .setSingleLine(
true));
5018 headerWritten =
TRUE;
5028 headerWritten =
TRUE;
5057 .setIndexWords(
true));
5096 msg(
"Generating main page...\n");
5139 if (index.numDocumentedPages()>0)
5154 if (index.numDocumentedModules()>0)
5160 if (index.numDocumentedGroups()>0)
5166 if (index.numDocumentedDirs()>0)
5172 if (
Config_getBool(SHOW_NAMESPACES) && (index.numDocumentedNamespaces()>0))
5182 if (index.numDocumentedConcepts()>0)
5188 if (index.numHierarchyInterfaces()>0)
5194 if (index.numHierarchyClasses()>0)
5208 if (index.numHierarchyExceptions()>0)
5214 if (index.numAnnotatedInterfacesPrinted()>0)
5220 if (index.numAnnotatedClassesPrinted()>0)
5230 if (index.numAnnotatedStructsPrinted()>0)
5236 if (index.numAnnotatedExceptionsPrinted()>0)
5251 if (index.numDocumentedModules()>0)
5257 if (index.numDocumentedGroups()>0)
5263 if (index.numDocumentedDirs()>0)
5269 if (index.numDocumentedNamespaces()>0)
5275 if (index.numDocumentedConcepts()>0)
5281 if (index.numAnnotatedInterfacesPrinted()>0)
5287 if (index.numAnnotatedClassesPrinted()>0)
5293 if (index.numAnnotatedStructsPrinted()>0)
5299 if (index.numAnnotatedExceptionsPrinted()>0)
5329 return s.startsWith(
"@ref") || s.startsWith(
"\\ref");
5333 for (
const auto &lne : entries)
5336 size_t idx =
static_cast<size_t>(kind);
5340 size_t newSize = idx+1;
5345 bool addToIndex=lne->
visible();
5346 bool needsClosing=
FALSE;
5351 case LayoutNavEntry::MainPage:
5352 msg(
"Generating index page...\n");
5355 case LayoutNavEntry::Pages:
5356 msg(
"Generating page index...\n");
5359 case LayoutNavEntry::Topics:
5360 msg(
"Generating topic index...\n");
5363 case LayoutNavEntry::Modules:
5365 if (index.numDocumentedModules()>0 && addToIndex)
5373 case LayoutNavEntry::ModuleList:
5374 msg(
"Generating module index...\n");
5377 case LayoutNavEntry::ModuleMembers:
5378 msg(
"Generating module member index...\n");
5381 case LayoutNavEntry::Namespaces:
5386 if (index.numDocumentedNamespaces()>0 && addToIndex)
5394 msg(
"Generating namespace index...\n");
5400 case LayoutNavEntry::NamespaceList:
5405 msg(
"Generating namespace index...\n");
5410 case LayoutNavEntry::NamespaceMembers:
5411 msg(
"Generating namespace member index...\n");
5414 case LayoutNavEntry::Classes:
5415 if (index.numAnnotatedClasses()>0 && addToIndex)
5423 msg(
"Generating annotated compound index...\n");
5427 case LayoutNavEntry::Concepts:
5428 msg(
"Generating concept index...\n");
5431 case LayoutNavEntry::ClassList:
5432 msg(
"Generating annotated compound index...\n");
5435 case LayoutNavEntry::ClassIndex:
5436 msg(
"Generating alphabetical compound index...\n");
5439 case LayoutNavEntry::ClassHierarchy:
5440 msg(
"Generating hierarchical class index...\n");
5444 msg(
"Generating graphical class hierarchy...\n");
5448 case LayoutNavEntry::ClassMembers:
5451 msg(
"Generating member index...\n");
5455 case LayoutNavEntry::Interfaces:
5456 if (sliceOpt && index.numAnnotatedInterfaces()>0 && addToIndex)
5463 case LayoutNavEntry::InterfaceList:
5466 msg(
"Generating annotated interface index...\n");
5470 case LayoutNavEntry::InterfaceIndex:
5473 msg(
"Generating alphabetical interface index...\n");
5477 case LayoutNavEntry::InterfaceHierarchy:
5480 msg(
"Generating hierarchical interface index...\n");
5484 msg(
"Generating graphical interface hierarchy...\n");
5489 case LayoutNavEntry::Structs:
5490 if (sliceOpt && index.numAnnotatedStructs()>0 && addToIndex)
5497 case LayoutNavEntry::StructList:
5500 msg(
"Generating annotated struct index...\n");
5504 case LayoutNavEntry::StructIndex:
5507 msg(
"Generating alphabetical struct index...\n");
5511 case LayoutNavEntry::Exceptions:
5512 if (sliceOpt && index.numAnnotatedExceptions()>0 && addToIndex)
5519 case LayoutNavEntry::ExceptionList:
5522 msg(
"Generating annotated exception index...\n");
5526 case LayoutNavEntry::ExceptionIndex:
5529 msg(
"Generating alphabetical exception index...\n");
5533 case LayoutNavEntry::ExceptionHierarchy:
5536 msg(
"Generating hierarchical exception index...\n");
5540 msg(
"Generating graphical exception hierarchy...\n");
5545 case LayoutNavEntry::Files:
5547 if (
Config_getBool(SHOW_FILES) && index.numDocumentedFiles()>0 && addToIndex)
5555 msg(
"Generating file index...\n");
5560 case LayoutNavEntry::FileList:
5561 msg(
"Generating file index...\n");
5564 case LayoutNavEntry::FileGlobals:
5565 msg(
"Generating file member index...\n");
5568 case LayoutNavEntry::Examples:
5569 msg(
"Generating example index...\n");
5572 case LayoutNavEntry::User:
5577 bool isRelative=url.
at(0)==
'!';
5578 if (!url.
isEmpty() && !isRelative)
5586 case LayoutNavEntry::UserGroup:
5598 bool isRelative=url.
at(0)==
'!';
5616 case LayoutNavEntry::None:
5617 assert(kind != LayoutNavEntry::None);
5620 if (kind!=LayoutNavEntry::User && kind!=LayoutNavEntry::UserGroup)
5630 case LayoutNavEntry::Modules:
5631 case LayoutNavEntry::Namespaces:
5632 case LayoutNavEntry::Classes:
5633 case LayoutNavEntry::Files:
5634 case LayoutNavEntry::UserGroup:
5656 case LayoutNavEntry::MainPage:
return TRUE;
5657 case LayoutNavEntry::User:
return TRUE;
5658 case LayoutNavEntry::UserGroup:
return TRUE;
5659 case LayoutNavEntry::Pages:
return index.numIndexedPages()>0;
5660 case LayoutNavEntry::Topics:
return index.numDocumentedGroups()>0;
5661 case LayoutNavEntry::Modules:
return index.numDocumentedModules()>0;
5662 case LayoutNavEntry::ModuleList:
return index.numDocumentedModules()>0;
5664 case LayoutNavEntry::Namespaces:
return index.numDocumentedNamespaces()>0 && showNamespaces;
5665 case LayoutNavEntry::NamespaceList:
return index.numDocumentedNamespaces()>0 && showNamespaces;
5667 case LayoutNavEntry::Concepts:
return index.numDocumentedConcepts()>0;
5668 case LayoutNavEntry::Classes:
return index.numAnnotatedClasses()>0;
5669 case LayoutNavEntry::ClassList:
return index.numAnnotatedClasses()>0;
5670 case LayoutNavEntry::ClassIndex:
return index.numAnnotatedClasses()>0;
5671 case LayoutNavEntry::ClassHierarchy:
return index.numHierarchyClasses()>0;
5673 case LayoutNavEntry::Interfaces:
return index.numAnnotatedInterfaces()>0;
5674 case LayoutNavEntry::InterfaceList:
return index.numAnnotatedInterfaces()>0;
5675 case LayoutNavEntry::InterfaceIndex:
return index.numAnnotatedInterfaces()>0;
5676 case LayoutNavEntry::InterfaceHierarchy:
return index.numHierarchyInterfaces()>0;
5677 case LayoutNavEntry::Structs:
return index.numAnnotatedStructs()>0;
5678 case LayoutNavEntry::StructList:
return index.numAnnotatedStructs()>0;
5679 case LayoutNavEntry::StructIndex:
return index.numAnnotatedStructs()>0;
5680 case LayoutNavEntry::Exceptions:
return index.numAnnotatedExceptions()>0;
5681 case LayoutNavEntry::ExceptionList:
return index.numAnnotatedExceptions()>0;
5682 case LayoutNavEntry::ExceptionIndex:
return index.numAnnotatedExceptions()>0;
5683 case LayoutNavEntry::ExceptionHierarchy:
return index.numHierarchyExceptions()>0;
5684 case LayoutNavEntry::Files:
return index.numDocumentedFiles()>0 && showFiles;
5685 case LayoutNavEntry::FileList:
return index.numDocumentedFiles()>0 && showFiles;
5688 case LayoutNavEntry::None:
5689 assert(kind != LayoutNavEntry::None);
5697 std::function<std::size_t(std::size_t)> numDocumented,
5699 const T *(*getInfo)(
size_t hl),
5703 bool firstMember=
TRUE;
5704 for (std::size_t i=0;i<total;i++)
5706 if (numDocumented(i)>0)
5722 bool multiPageIndex=
FALSE;
5725 multiPageIndex=
TRUE;
5727 t <<
",children:[\n";
5728 bool firstLetter=
TRUE;
5729 for (
const auto &[letter,list] : getMemberList(i))
5731 if (!firstLetter) t <<
",\n";
5736 QCString fullName = getInfo(i)->fname;
5737 if (!multiPageIndex || firstLetter)
5738 anchor=fullName+extension+
"#index_";
5740 anchor=fullName+
"_"+is+extension+
"#index_";
5759 for (
const auto &entry : root->
children())
5765 bool firstChild =
TRUE;
5766 if (!first) t <<
",";
5767 t <<
"children:[\n";
5768 for (
const auto &entry : root->
children())
5772 if (!firstChild) t <<
",\n";
5775 if (
isURL(url)) url =
"^" + url;
5778 bool hasChildren=
FALSE;
5779 if (entry->kind()==LayoutNavEntry::ModuleMembers)
5781 auto numDoc = [](std::size_t i) {
5784 auto memList = [](std::size_t i) {
5789 if (entry->kind()==LayoutNavEntry::NamespaceMembers)
5791 auto numDoc = [](std::size_t i) {
5794 auto memList = [](std::size_t i) {
5799 else if (entry->kind()==LayoutNavEntry::ClassMembers)
5801 auto numDoc = [](std::size_t i) {
5804 auto memList = [](std::size_t i) {
5809 else if (entry->kind()==LayoutNavEntry::FileGlobals)
5811 auto numDoc = [](std::size_t i) {
5814 auto memList = [](std::size_t i) {
5823 if (hasChildren) t <<
"]";
5840 t <<
"var menudata={";
5842 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 displayName(bool includeScope=TRUE) const =0
virtual QCString briefFile() const =0
virtual QCString getOutputFileBase() const =0
virtual Definition * getOuterScope() const =0
virtual bool isReference() const =0
virtual const QCString & name() const =0
virtual void writePageNavigation(OutputList &) const =0
virtual void writeSummaryLinks(OutputList &) const =0
A model of a directory symbol.
virtual const QCString shortName() const =0
virtual const DirList & subDirs() const =0
virtual const FileList & getFiles() const =0
Represents a graphical class hierarchy.
Representation of a legend explaining the meaning of boxes, arrows, and colors.
void writeGraph(const QCString &path)
static NamespaceLinkedMap * namespaceLinkedMap
static ConceptLinkedMap * conceptLinkedMap
static std::unique_ptr< PageDef > mainPage
static FileNameLinkedMap * inputNameLinkedMap
static ClassLinkedMap * classLinkedMap
static PageLinkedMap * exampleLinkedMap
static NamespaceDefMutable * globalScope
static IndexList * indexList
static ClassLinkedMap * hiddenClassLinkedMap
static QCString htmlFileExtension
static PageLinkedMap * pageLinkedMap
static DirLinkedMap * dirLinkedMap
static GroupLinkedMap * groupLinkedMap
A class that generates a dynamic tree view side panel.
void addContentsItem(bool isDir, const QCString &name, const QCString &ref, const QCString &file, const QCString &anchor, bool separateIndex, bool addToNavIndex, const Definition *def, 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
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 endTextBlock(bool paraBreak=FALSE)
void writeString(const QCString &text)
void startIndexItem(const QCString &ref, const QCString &file)
void endTitleHead(const QCString &fileName, const QCString &name)
void endSection(const QCString &lab, SectionType t)
void endIndexValue(const QCString &name, bool b)
void disable(OutputType o)
void startTitleHead(const QCString &fileName)
void enable(OutputType o)
void writeObjectLink(const QCString &ref, const QCString &file, const QCString &anchor, const QCString &name)
void endIndexItem(const QCString &ref, const QCString &file)
void writeGraphicalHierarchy(DotGfxHierarchyTable &g)
void 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 startTextBlock(bool dense=FALSE)
void pushGeneratorState()
void disableAllBut(OutputType o)
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.
int find(char c, int index=0, bool cs=TRUE) const
QCString & prepend(const char *s)
size_t length() const
Returns the length of the string, not counting the 0-terminator.
bool startsWith(const char *s) const
QCString mid(size_t index, size_t len=static_cast< size_t >(-1)) const
char & at(size_t i)
Returns a reference to the character at index i.
bool isEmpty() const
Returns TRUE iff the string is empty.
const std::string & str() const
QCString & replace(size_t index, size_t len, const char *s)
const char * data() const
Returns a pointer to the contents of the string in the form of a 0-terminated C string.
QCString left(size_t len) const
class that provide information about a section.
static SectionManager & instance()
returns a reference to the singleton
static constexpr int Subsection
Text streaming class that buffers data.
std::string str() const
Return the contents of the buffer as a std::string object.
static QCString getProtectionName(int prot)
static VhdlClasses convert(Protection prot)
bool classHasVisibleRoot(const BaseClassList &bcl)
bool classVisibleInIndex(const ClassDef *cd)
bool classHasVisibleChildren(const ClassDef *cd)
std::vector< BaseClassDef > BaseClassList
std::unordered_set< const ClassDef * > ClassDefSet
#define Config_updateBool(name, value)
#define Config_getBool(name)
#define Config_getString(name)
std::map< std::string, std::string > StringMap
Definition * toDefinition(DefinitionMutable *dm)
static constexpr auto hex
static void addMembersToIndex()
std::unique_ptr< FileDef > createFileDef(const QCString &p, const QCString &n, const QCString &ref, const QCString &dn)
bool compareFileDefs(const FileDef *fd1, const FileDef *fd2)
constexpr auto JAVASCRIPT_LICENSE_TEXT
static bool quickLinkVisible(LayoutNavEntry::Kind kind)
static void 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 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)
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)
static void startQuickIndexList(OutputList &ol, bool letterTabs=FALSE)
@ isNamespaceDocumentation
Translator * theTranslator
std::vector< std::unique_ptr< LayoutNavEntry > > LayoutNavEntryList
#define warn(file, line, fmt,...)
std::ofstream openOutputStream(const QCString &name, bool append=false)
bool namespaceHasNestedNamespace(const NamespaceDef *nd)
bool namespaceHasNestedClass(const NamespaceDef *nd, bool filterClasses, ClassDef::CompoundType ct)
NamespaceDef * getResolvedNamespace(const QCString &name)
bool namespaceHasNestedConcept(const NamespaceDef *nd)
Portable versions of functions that are platform dependent.
int qstricmp(const char *s1, const char *s2)
QCString substitute(const QCString &s, const QCString &src, const QCString &dst)
substitute all occurrences of src in s by dst
uint32_t qstrlen(const char *str)
Returns the length of string str, or 0 if a null pointer is passed.
const LayoutNavEntry::Kind fallbackKind
AnnotatedIndexContext(int numAnno, int numPrint, LayoutNavEntry::Kind lk, LayoutNavEntry::Kind fk, const QCString &title, const QCString &intro, ClassDef::CompoundType ct, const QCString &fn, HighlightedItem hi)
const ClassDef::CompoundType compoundType
const HighlightedItem hiItem
const QCString fileBaseName
const LayoutNavEntry::Kind listKind
const QCString listDefaultTitleText
const QCString listDefaultIntroText
Helper class representing a class member in the navigation menu.
CmhlInfo(const char *fn, const QCString &t)
Helper class representing a file member in the navigation menu.
FmhlInfo(const char *fn, const QCString &t)
std::array< MemberIndexMap, ModuleMemberHighlight::Total > moduleIndexLetterUsed
std::array< MemberIndexMap, ClassMemberHighlight::Total > classIndexLetterUsed
int annotatedExceptionsPrinted
int annotatedStructsPrinted
std::array< int, FileMemberHighlight::Total > documentedFileMembers
std::array< MemberIndexMap, FileMemberHighlight::Total > fileIndexLetterUsed
std::array< int, ModuleMemberHighlight::Total > documentedModuleMembers
int annotatedInterfacesPrinted
std::array< int, NamespaceMemberHighlight::Total > documentedNamespaceMembers
std::array< int, ClassMemberHighlight::Total > documentedClassMembers
std::array< MemberIndexMap, NamespaceMemberHighlight::Total > namespaceIndexLetterUsed
int annotatedClassesPrinted
Represents of a member declaration list with configurable title and subtitle.
Represents of a member definition list with configurable title.
Base class for the layout of a navigation item at the top of the HTML pages.
const LayoutNavEntryList & children() const
QCString baseFile() const
LayoutNavEntry * find(LayoutNavEntry::Kind k, const QCString &file=QCString()) const
Helper class representing a module member in the navigation menu.
MmhlInfo(const char *fn, const QCString &t)
Helper class representing a namespace member in the navigation menu.
NmhlInfo(const char *fn, const QCString &t)
std::string convertUTF8ToUpper(const std::string &input)
Converts the input string into a upper case version, also taking into account non-ASCII characters th...
std::string convertUTF8ToLower(const std::string &input)
Converts the input string into a lower case version, also taking into account non-ASCII characters th...
std::string getUTF8CharAt(const std::string &input, size_t pos)
Returns the UTF8 character found at byte position pos in the input string.
Various UTF8 related helper functions.
QCString 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.
static QCString stripFromPath(const QCString &p, const StringVector &l)
void extractNamespaceName(const QCString &scopeName, QCString &className, QCString &namespaceName, bool allowEmptyClass)
QCString getLanguageSpecificSeparator(SrcLangExt lang, bool classScope)
Returns the scope separator to use given the programming language lang.
QCString getDotImageExtension()
int getPrefixIndex(const QCString &name)
QCString convertToId(const QCString &s)
void addHtmlExtensionIfMissing(QCString &fName)
A bunch of utility functions.
QCString fixSpaces(const QCString &s)