55#define MAX_ITEMS_BEFORE_MULTIPAGE_INDEX 200
56#define MAX_ITEMS_BEFORE_QUICK_INDEX 30
60static void countFiles(
int &htmlFiles,
int &files);
138 return p->classIndexLetterUsed[
static_cast<int>(e)];
143 return p->fileIndexLetterUsed[
static_cast<int>(e)];
148 return p->namespaceIndexLetterUsed[
static_cast<int>(e)];
153 return p->moduleIndexLetterUsed[
static_cast<int>(e)];
158 p->documentedClassMembers[i]=0;
159 p->classIndexLetterUsed[i].clear();
164 p->documentedFileMembers[i]=0;
165 p->fileIndexLetterUsed[i].clear();
170 p->documentedNamespaceMembers[i]=0;
171 p->namespaceIndexLetterUsed[i].clear();
176 p->documentedModuleMembers[i]=0;
177 p->moduleIndexLetterUsed[i].clear();
182 auto it = map.find(letter);
185 it->second.push_back(md);
189 map.emplace(letter,std::vector<const MemberDef*>({md}));
195 p->documentedClassMembers[i]++;
201 p->documentedFileMembers[i]++;
207 p->documentedNamespaceMembers[i]++;
213 p->documentedModuleMembers[i]++;
222 for (
auto &[name,list] : map)
224 std::stable_sort(list.begin(),list.end(),
234 int result = qstricmp_sort(md1->name(),md2->name());
237 result = qstricmp_sort(md1->qualifiedName(),md2->qualifiedName());
244 for (
auto &idx : p->classIndexLetterUsed)
246 sortMemberIndexList(idx);
248 for (
auto &idx : p->fileIndexLetterUsed)
250 sortMemberIndexList(idx);
252 for (
auto &idx : p->namespaceIndexLetterUsed)
254 sortMemberIndexList(idx);
256 for (
auto &idx : p->moduleIndexLetterUsed)
258 sortMemberIndexList(idx);
349 ol.
writeString(
" <div id=\"navrow4\" class=\"tabs3\">\n");
353 ol.
writeString(
" <div id=\"navrow3\" class=\"tabs2\">\n");
365 bool hl,
bool ,
bool &first)
403 const QCString &altSidebarName,
int hierarchyLevel,
const QCString &allMembersFile)
408 bool quickLinksAfterSplitbar = !disableIndex && generateTreeView && fullSidebar;
409 ol.
startFile(name,manName,title,hierarchyLevel);
411 if (!disableIndex && !quickLinksAfterSplitbar)
415 if (!additionalIndices)
420 if (quickLinksAfterSplitbar)
436 if (generateTreeView)
453 if (generateTreeview)
476 bool lAddToIndex = addToIndex && !namespaceMemberInFileDocs;
497 for (
const auto &emd : enumList)
499 if (!hideUndocMembers || emd->hasDocumentation())
502 lAddToIndex = addToIndex && !namespaceMemberInFileDocs;
504 emd->qualifiedName() : emd->name();
505 if (emd->getOuterScope()==def ||
510 ename,emd->getReference(),emd->getOutputFileBase(),emd->anchor(),
FALSE,lAddToIndex && emd->getGroupDef()==
nullptr);
530 bool addToIndex=
TRUE,
bool preventSeparateIndex=
FALSE,
535 for (
const auto &cd : def->getClasses())
537 if (cd->isLinkable()) numClasses++;
542 for (
const auto &cd : *concepts)
544 if (cd->isLinkable()) numConcepts++;
547 bool hasMembers = !def->getMemberLists().empty() || !def->getMemberGroups().empty() || (numClasses>0) || (numConcepts>0);
549 def->getReference(),def->getOutputFileBase(),anchor,
550 hasMembers && !preventSeparateIndex,
554 if (hasMembers || numClasses>0 || numConcepts>0)
559 auto kind = lde->kind();
560 if (kind==LayoutDocEntry::MemberDef)
568 for (
const auto &md : *ml)
570 if (md->visibleInIndex())
578 else if (kind==LayoutDocEntry::NamespaceClasses ||
579 kind==LayoutDocEntry::FileClasses ||
580 kind==LayoutDocEntry::ClassNestedClasses ||
581 kind==LayoutDocEntry::ModuleClasses
584 for (
const auto &cd : def->getClasses())
586 if (cd->isLinkable() && (cd->partOfGroups().empty() || def->definitionType()==
Definition::TypeGroup))
590 addMembersToIndex(cd,LayoutDocManager::Class,cd->displayName(lde->kind()==LayoutDocEntry::FileClasses),cd->anchor(),
591 addToIndex && (isNestedClass || (cd->isSimple() && inlineSimpleStructs)),
592 preventSeparateIndex || cd->isEmbeddedInOuterScope());
596 else if ((kind==LayoutDocEntry::FileConcepts || kind==LayoutDocEntry::ModuleConcepts) && concepts)
598 for (
const auto &cd : *concepts)
600 if (cd->isLinkable() && (cd->partOfGroups().empty() || def->definitionType()==
Definition::TypeGroup))
603 cd->getReference(),cd->getOutputFileBase(),
QCString(),
622 if (bcl.empty())
return;
624 for (
const auto &bcd : bcl)
651 bool hasChildren = visitedClasses.find(cd)==visitedClasses.end() &&
699 visitedClasses.insert(cd);
732 for (
const auto &fd : dd->
getFiles())
734 bool genSourceFile =
false;
745 for(
const auto &subdd : dd->
subDirs())
761 "maximum nesting level exceeded for directory {}: "
762 "check for possible recursive directory relation!",dd->
name());
771 bool tocExpand =
TRUE;
772 bool isDir = !dd->
subDirs().empty() ||
804 for(
const auto &subdd : dd->
subDirs())
814 for (
const auto &fd : dd->
getFiles())
821 bool genSourceFile =
false;
826 else if (genSourceFile)
834 for (
const auto &fd : dd->
getFiles())
842 reference = fd->getReference();
843 outputBase = fd->getOutputFileBase();
852 if (ftv && (src || doc))
856 reference,outputBase,
865 if (tocExpand && addToIndex)
870 for (
const auto &fd : dd->
getFiles())
877 !fd->isLinkableViaGroup(),
FALSE,&fd->getConcepts());
919 for (
const auto &fd : *fn)
921 if (fd->getDirDef()==
nullptr)
928 reference = fd->getReference();
929 outputBase = fd->getOutputFileBase();
968 for (
const auto &cd : cl)
976 if (cd->getLanguage()==SrcLangExt::VHDL)
984 else if (sliceOpt && cd->compoundType() != ct)
995 if (cd->isVisibleInHierarchy())
1007 bool hasChildren = visitedClasses.find(cd.get())==visitedClasses.end() &&
1010 if (cd->isLinkable())
1016 ol.
endIndexItem(cd->getReference(),cd->getOutputFileBase());
1017 if (cd->isReference())
1020 ol.
docify(
" [external]");
1025 if (cd->getLanguage()!=SrcLangExt::VHDL)
1026 Doxygen::indexList->addContentsItem(hasChildren,cd->displayName(),cd->getReference(),cd->getOutputFileBase(),cd->anchor(),
FALSE,
FALSE);
1030 ftv->
addContentsItem(hasChildren,cd->displayName(),cd->getReference(),cd->getOutputFileBase(),cd->anchor(),
FALSE,
FALSE,cd.get());
1047 if (cd->getLanguage()==SrcLangExt::VHDL && hasChildren)
1050 visitedClasses.insert(cd.get());
1052 else if (hasChildren)
1055 visitedClasses.insert(cd.get());
1094 for (
const auto &cd : cl)
1096 if (sliceOpt && cd->compoundType() != ct)
1102 if (cd->isVisibleInHierarchy())
1104 if (!cd->subClasses().empty())
1134 bool addToIndex = lne==
nullptr || lne->
visible();
1240 bool addToIndex = lne==
nullptr || lne->
visible();
1345 bool addToIndex = lne==
nullptr || lne->
visible();
1447 for (
const auto &fd: *fn)
1556 if (dir->hasDocumentation())
1581 bool addToIndex = lne==
nullptr || lne->
visible();
1614 std::unordered_map<std::string,size_t> pathMap;
1615 std::vector<FilesInDir> outputFiles;
1620 for (
const auto &fd : *fn)
1623 if (path.
isEmpty()) path=
"[external]";
1624 auto it = pathMap.
find(path.
str());
1625 if (it!=pathMap.end())
1627 outputFiles.at(it->second).files.push_back(fd.get());
1631 pathMap.emplace(path.
str(),outputFiles.size());
1632 outputFiles.emplace_back(path);
1633 outputFiles.back().files.push_back(fd.get());
1639 std::stable_sort(outputFiles.begin(),
1641 [](
const auto &fp1,
const auto &fp2) { return qstricmp_sort(fp1.path,fp2.path)<0; });
1643 for (
auto &fp : outputFiles)
1648 for (
const auto &fp : outputFiles)
1650 for (
const auto &fd : fp.files)
1660 for (
const auto &fd : *fn)
1703 if (nd->isLinkableInProject()) count++;
1714 if (cd->isLinkableInProject()) count++;
1725template<
class ListType>
1729 for (
const auto &cdi : cl)
1755 if (ccd->isLinkableInProject() && !ccd->isImplicitTemplateInstance())
1793 if (lde->kind()==LayoutDocEntry::MemberDef)
1801 for (
const auto &md : *ml)
1804 if (md->visibleInIndex())
1819 if (lde->kind()==LayoutDocEntry::MemberDecl)
1827 for (
const auto &md : *ml)
1830 if (md->visibleInIndex())
1844 bool rootOnly,
bool addToIndex);
1847 bool rootOnly,
bool addToIndex)
1854 bool hasChildren = hasNestedNamespace ||
1874 bool isDir = hasChildren || visibleMembers>0;
1875 if (isLinkable || isDir)
1884 if (addToIndex && isDir)
1898 if (addToIndex && isDir)
1907 bool rootOnly,
bool addToIndex)
1909 for (
const auto &nd : nsLinkedMap)
1911 if (nd->isVisibleInHierarchy())
1919 bool rootOnly,
bool addToIndex)
1921 for (
const auto &nd : nsLinkedMap)
1923 if (nd->isVisibleInHierarchy())
2008 for (
const auto &nd : nsLinkedMap)
2017 for (
const auto &nd : nsLinkedMap)
2032 bool addToIndex = lne==
nullptr || lne->
visible();
2052 if (nd->isLinkableInProject())
2061 if (nd->getLanguage()==SrcLangExt::VHDL)
2071 bool hasBrief = !nd->briefDescription().isEmpty();
2077 nd->briefFile(),nd->briefLine(),
2079 nd->briefDescription(
TRUE),
2135 if (sliceOpt && cd->compoundType() != ct)
2139 if (cd->isLinkableInProject() && !cd->isImplicitTemplateInstance())
2141 if (!cd->isEmbeddedInOuterScope())
2163 if (cd->getLanguage()==SrcLangExt::VHDL &&
2176 if (sliceOpt && cd->compoundType() != ct)
2182 if (cd->isEmbeddedInOuterScope())
2188 if (cd->isLinkableInProject() && !cd->isImplicitTemplateInstance())
2191 if (cd->getLanguage()==SrcLangExt::VHDL)
2199 bool hasBrief = !cd->briefDescription().isEmpty();
2204 cd->briefFile(),cd->briefLine(),
2206 cd->briefDescription(
TRUE),
2228 return (c<127 && c>31);
2233 if (startLetter.
isEmpty())
return startLetter;
2234 const char *p = startLetter.
data();
2244 const char hex[]=
"0123456789abcdef";
2247 result+=
hex[
static_cast<unsigned char>(c)>>4];
2248 result+=
hex[
static_cast<unsigned char>(c)&0xf];
2290 if (sliceOpt && cd->compoundType() != ct)
2292 if (cd->isLinkableInProject() && !cd->isImplicitTemplateInstance())
2299 std::string letter =
getUTF8CharAt(cd->className().str(),index);
2300 if (!letter.empty())
2308 QCString alphaLinks =
"<div class=\"qindex\">";
2310 for (
const auto &letter : indexLettersUsed)
2312 if (!first) alphaLinks +=
" | ";
2315 alphaLinks +=
"<a class=\"qindex\" href=\"#letter_" +
2319 alphaLinks +=
"</div>\n";
2322 std::map<std::string, std::vector<const ClassDef*> > classesByLetter;
2329 if (sliceOpt && cd->compoundType() != ct)
2334 if (cd->isLinkableInProject() && !cd->isImplicitTemplateInstance())
2336 QCString className = cd->className();
2339 if (!letter.empty())
2342 auto it = classesByLetter.find(letter);
2343 if (it!=classesByLetter.end())
2345 it->second.push_back(cd.get());
2349 classesByLetter.emplace(letter, std::vector<const ClassDef*>({ cd.get() }));
2356 for (
auto &[letter,list] : classesByLetter)
2358 std::stable_sort(list.begin(), list.end(),
2359 [](
const auto &c1,
const auto &c2)
2361 QCString n1 = c1->className();
2362 QCString n2 = c2->className();
2363 return qstricmp_sort(n1.data()+getPrefixIndex(n1), n2.data()+getPrefixIndex(n2))<0;
2368 if (!classesByLetter.empty())
2372 for (
const auto &cl : classesByLetter)
2374 QCString parity = (counter++%2)==0 ?
"even" :
"odd";
2375 ol.
writeString(
"<dl class=\"classindex " + parity +
"\">\n");
2390 for (
const auto &cd : cl.second)
2409 cd->getOutputFileBase(),cd->anchor(),cname);
2443 bool addToIndex = lne==
nullptr || lne->
visible();
2472 bool addToIndex = lne==
nullptr || lne->
visible();
2501 bool addToIndex = lne==
nullptr || lne->
visible();
2530 bool addToIndex = lne==
nullptr || lne->
visible();
2593 bool addToIndex = lne==
nullptr || lne->
visible();
2657 LayoutNavEntry::ClassList,LayoutNavEntry::Classes,
2671 LayoutNavEntry::InterfaceList,LayoutNavEntry::Interfaces,
2674 "annotatedinterfaces",
2685 LayoutNavEntry::StructList,LayoutNavEntry::Structs,
2699 LayoutNavEntry::ExceptionList,LayoutNavEntry::Exceptions,
2702 "annotatedexceptions",
2724 if (fd && prevFileName!=fd->
name())
2729 prevFileName = fd->
name();
2765 int index =
static_cast<int>(type);
2766 const int numIndices = 4;
2767 ASSERT(index<numIndices);
2773 static writeLinkForMember_t writeLinkForMemberMap[numIndices] =
2783 bool firstSection=
TRUE;
2784 bool firstItem=
TRUE;
2787 for (
const auto &kv : memberIndexMap)
2791 auto it = memberIndexMap.find(page);
2792 if (it != memberIndexMap.end())
2803 if (mil==
nullptr || mil->empty())
continue;
2804 for (
const auto &md : *mil)
2806 const char *sep =
nullptr;
2807 bool isFunc=!md->isObjCMethod() &&
2808 (md->isFunction() || md->isSlot() || md->isSignal());
2811 if (name.
data()+startIndex!=prevName)
2814 tolower(name.
at(startIndex))!=tolower(prevName.
at(0))) &&
2829 else if (!useSections && first)
2840 if (isFunc) ol.
docify(
"()");
2845 sep =
" : ";
2846 prevName = name.
data()+startIndex;
2853 if (index<numIndices)
2856 writeLinkForMemberMap[index](ol,md,sep,prevDefName);
2872 bool hideFriendCompounds =
Config_getBool(HIDE_FRIEND_COMPOUNDS);
2882 if (!letter.empty())
2885 bool isFriendToHide = hideFriendCompounds &&
2889 if (!(md->
isFriend() && isFriendToHide) &&
2924 (md->
isFriend() && !isFriendToHide))
2941 if (!letter.empty())
2989 if (!letter.empty())
3041 if (!letter.empty())
3080 for (
const auto &[letter,list] : map)
3089 anchor=fullName+extension+
"#index_";
3091 anchor=fullName+
"_"+is+extension+
"#index_";
3129 return &cmhlInfo[hl];
3135 if (index.numDocumentedClassMembers(hl)==0)
return;
3141 bool quickLinksAfterSplitbar = !disableIndex && generateTreeView && fullSidebar;
3143 bool multiPageIndex=
FALSE;
3146 multiPageIndex=
TRUE;
3156 bool addToIndex = lne==
nullptr || lne->
visible();
3166 for (
const auto &[letter,list] : index.isClassIndexLetterUsed(hl))
3184 auto writeQuickLinks = [&,cap_letter=letter]()
3225 if (!disableIndex && !quickLinksAfterSplitbar)
3231 if (quickLinksAfterSplitbar)
3249 multiPageIndex ? letter : std::string(),
3250 index.isClassIndexLetterUsed(hl),
3265 bool addToIndex = lne==
nullptr || lne->
visible();
3318 return &fmhlInfo[hl];
3324 if (index.numDocumentedFileMembers(hl)==0)
return;
3330 bool quickLinksAfterSplitbar = !disableIndex && generateTreeView && fullSidebar;
3332 bool multiPageIndex=
FALSE;
3335 multiPageIndex=
TRUE;
3344 bool addToIndex = lne==
nullptr || lne->
visible();
3354 for (
const auto &[letter,list] : index.isFileIndexLetterUsed(hl))
3372 auto writeQuickLinks = [&,cap_letter=letter]()
3411 if (!disableIndex && !quickLinksAfterSplitbar)
3417 if (quickLinksAfterSplitbar)
3435 multiPageIndex ? letter : std::string(),
3436 index.isFileIndexLetterUsed(hl),
3448 bool addToIndex = lne==
nullptr || lne->
visible();
3499 return &nmhlInfo[hl];
3508 if (index.numDocumentedNamespaceMembers(hl)==0)
return;
3514 bool quickLinksAfterSplitbar = !disableIndex && generateTreeView && fullSidebar;
3516 bool multiPageIndex=
FALSE;
3519 multiPageIndex=
TRUE;
3528 bool addToIndex = lne==
nullptr || lne->
visible();
3538 for (
const auto &[letter,list] : index.isNamespaceIndexLetterUsed(hl))
3556 auto writeQuickLinks = [&,cap_letter=letter]()
3595 if (!disableIndex && !quickLinksAfterSplitbar)
3601 if (quickLinksAfterSplitbar)
3619 multiPageIndex ? letter : std::string(),
3620 index.isNamespaceIndexLetterUsed(hl),
3633 bool addToIndex = lne==
nullptr || lne->
visible();
3676 return &nmhlInfo[hl];
3685 if (index.numDocumentedModuleMembers(hl)==0)
return;
3691 bool quickLinksAfterSplitbar = !disableIndex && generateTreeView && fullSidebar;
3693 bool multiPageIndex=
FALSE;
3696 multiPageIndex=
TRUE;
3705 bool addToIndex = lne==
nullptr || lne->
visible();
3715 for (
const auto &[letter,list] : index.isModuleIndexLetterUsed(hl))
3733 auto writeQuickLinks = [&,cap_letter=letter]()
3772 if (!disableIndex && !quickLinksAfterSplitbar)
3778 if (quickLinksAfterSplitbar)
3796 multiPageIndex ? letter : std::string(),
3797 index.isModuleIndexLetterUsed(hl),
3813 bool addToIndex = lne==
nullptr || lne->
visible();
3842 bool addToIndex = lne==
nullptr || lne->
visible();
3866 QCString n=pd->getOutputFileBase();
3867 if (!pd->title().isEmpty())
3901 docPages=indexPages=0;
3904 if (pd->visibleInIndex() && !pd->hasParentPage())
3908 if (pd->documentedPage())
3932 bool addToIndex = lne==
nullptr || lne->
visible();
3933 if (!addToIndex)
return;
3940 QCString pageTitle, pageTitleAsHtml;
3943 pageTitle=pd->
name();
3952 hasSubPages,pageTitle,
3959 hasSubPages || hasSections,pageTitle,
3965 bool doIndent = (hasSections || hasSubPages) &&
4009 if ((pd->getOuterScope()==
nullptr ||
4011 pd->visibleInIndex()
4036 if (!gd->isReference())
4052 if (dd->isLinkableInProject())
4072 bool oldStripCommentsState =
Config_getBool(STRIP_CODE_COMMENTS);
4085 int s = legendDocs.
find(
"<center>");
4086 int e = legendDocs.
find(
"</center>");
4088 if (imgExt==
"svg" && s!=-1 && e!=-1)
4090 legendDocs = legendDocs.
left(s+8) +
"[!-- " +
"SVG 0 --]" + legendDocs.
mid(e);
4121 "maximum nesting level exceeded for group {}: check for possible recursive group relation!",gd->
name());
4134 size_t numSubItems = 0;
4137 if (ml->listType().isDocumentation())
4139 numSubItems += ml->size();
4144 numSubItems += gd->
getFiles().size();
4146 numSubItems += gd->
getDirs().size();
4149 bool isDir = hasSubGroups || hasSubPages || numSubItems>0;
4158 isDir,
TRUE,
nullptr,titleAsHtml);
4179 ol.
docify(
" [external]");
4185 if (lde->kind()==LayoutDocEntry::MemberDef && addToIndex)
4193 for (
const auto &md : *ml)
4196 isDir = !enumList.
empty() && md->isEnumerate();
4197 if (md->isVisible() && !md->isAnonymous())
4200 md->qualifiedName(),md->getReference(),
4201 md->getOutputFileBase(),md->anchor(),
FALSE,addToIndex);
4206 for (
const auto &emd : enumList)
4208 if (emd->isVisible())
4211 emd->qualifiedName(),emd->getReference(),emd->getOutputFileBase(),
4212 emd->anchor(),
FALSE,addToIndex);
4221 else if (lde->kind()==LayoutDocEntry::GroupClasses && addToIndex)
4229 if (cd->isVisible() )
4232 LayoutDocManager::Class,
4240 else if (lde->kind()==LayoutDocEntry::GroupNamespaces && addToIndex &&
Config_getBool(SHOW_NAMESPACES))
4244 if (nd->isVisible())
4247 nd->displayName(),nd->getReference(),
4252 else if (lde->kind()==LayoutDocEntry::GroupConcepts && addToIndex)
4256 if (cd->isVisible())
4259 cd->displayName(),cd->getReference(),
4264 else if (lde->kind()==LayoutDocEntry::GroupFiles && addToIndex)
4266 for (
const auto &fd : gd->
getFiles())
4268 if (fd->isVisible())
4271 fd->displayName(),fd->getReference(),
4272 fd->getOutputFileBase(),
QCString(),
FALSE,fd->isLinkableViaGroup());
4276 else if (lde->kind()==LayoutDocEntry::GroupDirs && addToIndex)
4278 for (
const auto &dd : gd->
getDirs())
4280 if (dd->isVisible())
4283 dd->shortName(),dd->getReference(),
4288 else if (lde->kind()==LayoutDocEntry::GroupPageDocs && addToIndex)
4290 for (
const auto &pd : gd->
getPages())
4294 hasSubPages = pd->hasSubPages();
4295 bool hasSections = pd->hasSections();
4297 if (pd->title().isEmpty())
4298 pageTitle=pd->name();
4300 pageTitle =
parseCommentAsText(pd,
nullptr,pd->title(),pd->getDefFileName(),pd->getDefLine());
4303 hasSubPages || hasSections,
4308 hasSubPages || hasSections,
4312 if (hasSections || hasSubPages)
4318 pd->addSectionsToIndex();
4321 if (hasSections || hasSubPages)
4327 else if (lde->kind()==LayoutDocEntry::GroupNestedGroups)
4365 if (gd->isVisibleInHierarchy())
4388 bool addToIndex = lne==
nullptr || lne->
visible();
4449 FTVHelp* ftv,
bool addToIndex)
4452 bool isDir=visibleMembers>0;
4471 ol.
docify(
" [external]");
4474 if (addToIndex && isDir)
4486 if (addToIndex && isDir)
4505 if (mod->isPrimaryInterface())
4530 bool addToIndex = lne==
nullptr || lne->
visible();
4589 for (
const auto &cd : concepts)
4591 if (cd->isLinkableInProject())
4596 cd->getOutputFileBase(),
QCString(),
false,cd->partOfGroups().empty(),cd);
4601 cd->getOutputFileBase(),
QCString(),
false,cd->partOfGroups().empty());
4608 bool rootOnly,
bool addToIndex);
4611 bool rootOnly,
bool addToIndex)
4613 for (
const auto &nd : nsLinkedMap)
4621 bool rootOnly,
bool addToIndex)
4675 if ((cd->getOuterScope()==
nullptr ||
4681 false,cd->localName(),cd->getReference(),cd->getOutputFileBase(),
4682 QCString(),
false,cd->partOfGroups().empty(),cd.get());
4686 false,cd->localName(),cd->getReference(),cd->getOutputFileBase(),
4687 QCString(),
false,cd->partOfGroups().empty(),cd.get());
4702 bool addToIndex = lne==
nullptr || lne->
visible();
4723 if (cd->isLinkableInProject())
4735 bool hasBrief = !cd->briefDescription().isEmpty();
4741 cd->briefFile(),cd->briefLine(),
4743 cd->briefDescription(
TRUE),
4810 for (
const auto &entry: lne->
children())
4812 if (entry->visible()) count++;
4817 for (
const auto &entry: lne->
children())
4819 if (entry->visible())
4821 ol.
writeString(
"<li><a href=\""+entry->url()+
"\"><span>"+
4822 fixSpaces(entry->title())+
"</span></a></li>\n");
4850 projPrefix=projectName+
" ";
4902 bool quickLinksAfterSplitbar = !disableIndex && generateTreeView && fullSidebar;
4904 if (!disableIndex && !quickLinksAfterSplitbar)
4910 if (quickLinksAfterSplitbar)
4915 bool headerWritten=
FALSE;
4937 headerWritten =
TRUE;
4947 headerWritten =
TRUE;
5011 msg(
"Generating main page...\n");
5050 if (index.numDocumentedPages()>0)
5065 if (index.numDocumentedModules()>0)
5071 if (index.numDocumentedGroups()>0)
5077 if (index.numDocumentedDirs()>0)
5083 if (
Config_getBool(SHOW_NAMESPACES) && (index.numDocumentedNamespaces()>0))
5093 if (index.numDocumentedConcepts()>0)
5099 if (index.numHierarchyInterfaces()>0)
5105 if (index.numHierarchyClasses()>0)
5119 if (index.numHierarchyExceptions()>0)
5125 if (index.numAnnotatedInterfacesPrinted()>0)
5131 if (index.numAnnotatedClassesPrinted()>0)
5141 if (index.numAnnotatedStructsPrinted()>0)
5147 if (index.numAnnotatedExceptionsPrinted()>0)
5162 if (index.numDocumentedModules()>0)
5168 if (index.numDocumentedGroups()>0)
5174 if (index.numDocumentedDirs()>0)
5180 if (index.numDocumentedNamespaces()>0)
5186 if (index.numDocumentedConcepts()>0)
5192 if (index.numAnnotatedInterfacesPrinted()>0)
5198 if (index.numAnnotatedClassesPrinted()>0)
5204 if (index.numAnnotatedStructsPrinted()>0)
5210 if (index.numAnnotatedExceptionsPrinted()>0)
5240 return s.startsWith(
"@ref") || s.startsWith(
"\\ref");
5244 for (
const auto &lne : entries)
5247 size_t idx =
static_cast<size_t>(kind);
5251 size_t newSize = idx+1;
5256 bool addToIndex=lne->visible();
5257 bool needsClosing=
FALSE;
5262 case LayoutNavEntry::MainPage:
5263 msg(
"Generating index page...\n");
5266 case LayoutNavEntry::Pages:
5267 msg(
"Generating page index...\n");
5270 case LayoutNavEntry::Topics:
5271 msg(
"Generating topic index...\n");
5274 case LayoutNavEntry::Modules:
5276 if (index.numDocumentedModules()>0 && addToIndex)
5284 case LayoutNavEntry::ModuleList:
5285 msg(
"Generating module index...\n");
5288 case LayoutNavEntry::ModuleMembers:
5289 msg(
"Generating module member index...\n");
5292 case LayoutNavEntry::Namespaces:
5297 if (index.numDocumentedNamespaces()>0 && addToIndex)
5305 msg(
"Generating namespace index...\n");
5311 case LayoutNavEntry::NamespaceList:
5316 msg(
"Generating namespace index...\n");
5321 case LayoutNavEntry::NamespaceMembers:
5322 msg(
"Generating namespace member index...\n");
5325 case LayoutNavEntry::Classes:
5326 if (index.numAnnotatedClasses()>0 && addToIndex)
5334 msg(
"Generating annotated compound index...\n");
5338 case LayoutNavEntry::Concepts:
5339 msg(
"Generating concept index...\n");
5342 case LayoutNavEntry::ClassList:
5343 msg(
"Generating annotated compound index...\n");
5346 case LayoutNavEntry::ClassIndex:
5347 msg(
"Generating alphabetical compound index...\n");
5350 case LayoutNavEntry::ClassHierarchy:
5351 msg(
"Generating hierarchical class index...\n");
5355 msg(
"Generating graphical class hierarchy...\n");
5359 case LayoutNavEntry::ClassMembers:
5362 msg(
"Generating member index...\n");
5366 case LayoutNavEntry::Interfaces:
5367 if (sliceOpt && index.numAnnotatedInterfaces()>0 && addToIndex)
5374 case LayoutNavEntry::InterfaceList:
5377 msg(
"Generating annotated interface index...\n");
5381 case LayoutNavEntry::InterfaceIndex:
5384 msg(
"Generating alphabetical interface index...\n");
5388 case LayoutNavEntry::InterfaceHierarchy:
5391 msg(
"Generating hierarchical interface index...\n");
5395 msg(
"Generating graphical interface hierarchy...\n");
5400 case LayoutNavEntry::Structs:
5401 if (sliceOpt && index.numAnnotatedStructs()>0 && addToIndex)
5408 case LayoutNavEntry::StructList:
5411 msg(
"Generating annotated struct index...\n");
5415 case LayoutNavEntry::StructIndex:
5418 msg(
"Generating alphabetical struct index...\n");
5422 case LayoutNavEntry::Exceptions:
5423 if (sliceOpt && index.numAnnotatedExceptions()>0 && addToIndex)
5430 case LayoutNavEntry::ExceptionList:
5433 msg(
"Generating annotated exception index...\n");
5437 case LayoutNavEntry::ExceptionIndex:
5440 msg(
"Generating alphabetical exception index...\n");
5444 case LayoutNavEntry::ExceptionHierarchy:
5447 msg(
"Generating hierarchical exception index...\n");
5451 msg(
"Generating graphical exception hierarchy...\n");
5456 case LayoutNavEntry::Files:
5458 if (
Config_getBool(SHOW_FILES) && index.numDocumentedFiles()>0 && addToIndex)
5466 msg(
"Generating file index...\n");
5471 case LayoutNavEntry::FileList:
5472 msg(
"Generating file index...\n");
5475 case LayoutNavEntry::FileGlobals:
5476 msg(
"Generating file member index...\n");
5479 case LayoutNavEntry::Examples:
5480 msg(
"Generating example index...\n");
5483 case LayoutNavEntry::User:
5488 bool isRelative=url.
at(0)==
'!';
5489 if (!url.
isEmpty() && !isRelative)
5497 case LayoutNavEntry::UserGroup:
5509 bool isRelative=url.
at(0)==
'!';
5527 case LayoutNavEntry::None:
5528 assert(kind != LayoutNavEntry::None);
5531 if (kind!=LayoutNavEntry::User && kind!=LayoutNavEntry::UserGroup)
5541 case LayoutNavEntry::Modules:
5542 case LayoutNavEntry::Namespaces:
5543 case LayoutNavEntry::Classes:
5544 case LayoutNavEntry::Files:
5545 case LayoutNavEntry::UserGroup:
5567 case LayoutNavEntry::MainPage:
return TRUE;
5568 case LayoutNavEntry::User:
return TRUE;
5569 case LayoutNavEntry::UserGroup:
return TRUE;
5570 case LayoutNavEntry::Pages:
return index.numIndexedPages()>0;
5571 case LayoutNavEntry::Topics:
return index.numDocumentedGroups()>0;
5572 case LayoutNavEntry::Modules:
return index.numDocumentedModules()>0;
5573 case LayoutNavEntry::ModuleList:
return index.numDocumentedModules()>0;
5575 case LayoutNavEntry::Namespaces:
return index.numDocumentedNamespaces()>0 && showNamespaces;
5576 case LayoutNavEntry::NamespaceList:
return index.numDocumentedNamespaces()>0 && showNamespaces;
5578 case LayoutNavEntry::Concepts:
return index.numDocumentedConcepts()>0;
5579 case LayoutNavEntry::Classes:
return index.numAnnotatedClasses()>0;
5580 case LayoutNavEntry::ClassList:
return index.numAnnotatedClasses()>0;
5581 case LayoutNavEntry::ClassIndex:
return index.numAnnotatedClasses()>0;
5582 case LayoutNavEntry::ClassHierarchy:
return index.numHierarchyClasses()>0;
5584 case LayoutNavEntry::Interfaces:
return index.numAnnotatedInterfaces()>0;
5585 case LayoutNavEntry::InterfaceList:
return index.numAnnotatedInterfaces()>0;
5586 case LayoutNavEntry::InterfaceIndex:
return index.numAnnotatedInterfaces()>0;
5587 case LayoutNavEntry::InterfaceHierarchy:
return index.numHierarchyInterfaces()>0;
5588 case LayoutNavEntry::Structs:
return index.numAnnotatedStructs()>0;
5589 case LayoutNavEntry::StructList:
return index.numAnnotatedStructs()>0;
5590 case LayoutNavEntry::StructIndex:
return index.numAnnotatedStructs()>0;
5591 case LayoutNavEntry::Exceptions:
return index.numAnnotatedExceptions()>0;
5592 case LayoutNavEntry::ExceptionList:
return index.numAnnotatedExceptions()>0;
5593 case LayoutNavEntry::ExceptionIndex:
return index.numAnnotatedExceptions()>0;
5594 case LayoutNavEntry::ExceptionHierarchy:
return index.numHierarchyExceptions()>0;
5595 case LayoutNavEntry::Files:
return index.numDocumentedFiles()>0 && showFiles;
5596 case LayoutNavEntry::FileList:
return index.numDocumentedFiles()>0 && showFiles;
5599 case LayoutNavEntry::None:
5600 assert(kind != LayoutNavEntry::None);
5608 std::function<std::size_t(std::size_t)> numDocumented,
5610 const T *(*getInfo)(
size_t hl),
5614 bool firstMember=
TRUE;
5615 for (std::size_t i=0;i<total;i++)
5617 if (numDocumented(i)>0)
5633 bool multiPageIndex=
FALSE;
5636 multiPageIndex=
TRUE;
5638 t <<
",children:[\n";
5639 bool firstLetter=
TRUE;
5640 for (
const auto &[letter,list] : getMemberList(i))
5642 if (!firstLetter) t <<
",\n";
5647 QCString fullName = getInfo(i)->fname;
5648 if (!multiPageIndex || firstLetter)
5649 anchor=fullName+extension+
"#index_";
5651 anchor=fullName+
"_"+is+extension+
"#index_";
5670 for (
const auto &entry : root->
children())
5676 bool firstChild =
TRUE;
5677 if (!first) t <<
",";
5678 t <<
"children:[\n";
5679 for (
const auto &entry : root->
children())
5683 if (!firstChild) t <<
",\n";
5686 if (
isURL(url)) url =
"^" + url;
5689 bool hasChildren=
FALSE;
5690 if (entry->kind()==LayoutNavEntry::ModuleMembers)
5692 auto numDoc = [](std::size_t i) {
5695 auto memList = [](std::size_t i) {
5700 if (entry->kind()==LayoutNavEntry::NamespaceMembers)
5702 auto numDoc = [](std::size_t i) {
5705 auto memList = [](std::size_t i) {
5710 else if (entry->kind()==LayoutNavEntry::ClassMembers)
5712 auto numDoc = [](std::size_t i) {
5715 auto memList = [](std::size_t i) {
5720 else if (entry->kind()==LayoutNavEntry::FileGlobals)
5722 auto numDoc = [](std::size_t i) {
5725 auto memList = [](std::size_t i) {
5734 if (hasChildren) t <<
"]";
5751 t <<
"var menudata={";
5753 if (hasChildren) t <<
"]";
const ClassDef * classDef() const
std::string letter() const
AlphaIndexTableCell(int row, int col, const std::string &letter, const ClassDef *cd)
A abstract class representing of a compound symbol.
virtual bool isVisibleInHierarchy() const =0
the class is visible in a class diagram, or class hierarchy
virtual const BaseClassList & baseClasses() const =0
Returns the list of base classes from which this class directly inherits.
virtual bool isSimple() const =0
virtual Protection protection() const =0
Return the protection level (Public,Protected,Private) in which this compound was found.
virtual bool isImplicitTemplateInstance() const =0
CompoundType
The various compound types.
virtual CompoundType compoundType() const =0
Returns the type of compound this is, i.e.
virtual ClassLinkedRefMap getClasses() const =0
returns the classes nested into this class
virtual const BaseClassList & subClasses() const =0
Returns the list of sub classes that directly derive from this class.
static const QCString crawlFileName
The common base class of all entity definitions found in the sources.
virtual bool isVisible() const =0
virtual const QCString & localName() const =0
virtual SrcLangExt getLanguage() const =0
Returns the programming language this definition was written in.
virtual bool hasSections() const =0
virtual QCString navigationPathAsString() const =0
virtual QCString getDefFileName() const =0
virtual bool isLinkable() const =0
virtual int getDefLine() const =0
virtual DefType definitionType() const =0
virtual QCString anchor() const =0
virtual int briefLine() const =0
virtual bool hasDocumentation() const =0
virtual bool isLinkableInProject() const =0
virtual QCString briefDescription(bool abbreviate=FALSE) const =0
virtual bool isAnonymous() const =0
virtual QCString getReference() const =0
virtual QCString getSourceFileBase() const =0
virtual const GroupList & partOfGroups() const =0
virtual QCString qualifiedName() const =0
virtual QCString displayName(bool includeScope=TRUE) const =0
virtual QCString briefFile() const =0
virtual QCString getOutputFileBase() const =0
virtual Definition * getOuterScope() const =0
virtual bool isReference() const =0
virtual const QCString & name() const =0
virtual void writePageNavigation(OutputList &) const =0
virtual void writeSummaryLinks(OutputList &) const =0
A model of a directory symbol.
virtual const QCString shortName() const =0
virtual const DirList & subDirs() const =0
virtual const FileList & getFiles() const =0
Represents a graphical class hierarchy.
Representation of a legend explaining the meaning of boxes, arrows, and colors.
void writeGraph(const QCString &path)
static NamespaceLinkedMap * namespaceLinkedMap
static ConceptLinkedMap * conceptLinkedMap
static std::unique_ptr< PageDef > mainPage
static FileNameLinkedMap * inputNameLinkedMap
static ClassLinkedMap * classLinkedMap
static PageLinkedMap * exampleLinkedMap
static NamespaceDefMutable * globalScope
static IndexList * indexList
static ClassLinkedMap * hiddenClassLinkedMap
static QCString htmlFileExtension
static PageLinkedMap * pageLinkedMap
static DirLinkedMap * dirLinkedMap
static GroupLinkedMap * groupLinkedMap
A class that generates a dynamic tree view side panel.
void addContentsItem(bool isDir, const QCString &name, const QCString &ref, const QCString &file, const QCString &anchor, bool separateIndex, bool addToNavIndex, const Definition *def, 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 const ModuleDef * getModuleDef() const =0
virtual bool isDefine() const =0
virtual const NamespaceDef * getNamespaceDef() const =0
virtual bool isEnumerate() const =0
virtual bool isVariable() const =0
virtual bool isStrong() const =0
virtual const MemberDef * getEnumScope() const =0
virtual bool isEnumValue() const =0
virtual bool isProperty() const =0
A list of MemberDef objects as shown in documentation sections.
A vector of MemberDef object.
bool empty() const noexcept
virtual MemberList * getMemberList(MemberListType lt) const =0
virtual int countVisibleMembers() const =0
virtual bool isPrimaryInterface() const =0
virtual const ConceptLinkedRefMap & getConcepts() const =0
virtual const ClassLinkedRefMap & getClasses() const =0
int numDocumentedModules() const
static ModuleManager & instance()
An abstract interface of a namespace symbol.
virtual MemberList * getMemberList(MemberListType lt) const =0
virtual ConceptLinkedRefMap getConcepts() const =0
virtual ClassLinkedRefMap getStructs() const =0
virtual ClassLinkedRefMap getExceptions() const =0
virtual NamespaceLinkedRefMap getNamespaces() const =0
virtual int countVisibleMembers() const =0
virtual ClassLinkedRefMap getClasses() const =0
virtual ClassLinkedRefMap getInterfaces() const =0
Class representing a list of output generators that are written to in parallel.
void endTextBlock(bool paraBreak=FALSE)
void writeString(const QCString &text)
void startIndexItem(const QCString &ref, const QCString &file)
void endTitleHead(const QCString &fileName, const QCString &name)
void endSection(const QCString &lab, SectionType t)
void endIndexValue(const QCString &name, bool b)
void disable(OutputType o)
void startTitleHead(const QCString &fileName)
void enable(OutputType o)
void writeObjectLink(const QCString &ref, const QCString &file, const QCString &anchor, const QCString &name)
void endIndexItem(const QCString &ref, const QCString &file)
void writeGraphicalHierarchy(DotGfxHierarchyTable &g)
void startFile(const QCString &name, const QCString &manName, const QCString &title, int hierarchyLevel=0)
void startHeaderSection()
void docify(const QCString &s)
void startParagraph(const QCString &classDef=QCString())
void endIndexSection(IndexSection is)
void startProjectNumber()
void startTextBlock(bool dense=FALSE)
void pushGeneratorState()
void disableAllBut(OutputType o)
void startIndexValue(bool b)
void startPageDoc(const QCString &pageTitle)
void writeSplitBar(const QCString &name, const QCString &allMembersFile)
void generateDoc(const QCString &fileName, int startLine, const Definition *ctx, const MemberDef *md, const QCString &docStr, bool indexWords, bool isExample, const QCString &exampleName, bool singleLine, bool linkFromIndex, bool markdownSupport=Config_getBool(MARKDOWN_SUPPORT), bool autolinkSupport=Config_getBool(AUTOLINK_SUPPORT))
void writeFooter(const QCString &navPath)
void startIndexListItem()
void parseText(const QCString &textStr)
void startSection(const QCString &lab, const QCString &title, SectionType t)
void startIndexSection(IndexSection is)
void startTextLink(const QCString &file, const QCString &anchor)
void writeQuickLinks(HighlightedItem hli, const QCString &file, bool extraTabs=false)
A model of a page symbol.
virtual void addSectionsToIndex()=0
virtual bool visibleInIndex() const =0
virtual const PageLinkedRefMap & getSubPages() const =0
virtual bool hasSubPages() const =0
virtual QCString title() const =0
This is an alternative implementation of QCString.
int find(char c, int index=0, bool cs=TRUE) const
QCString & prepend(const char *s)
size_t length() const
Returns the length of the string, not counting the 0-terminator.
bool startsWith(const char *s) const
QCString mid(size_t index, size_t len=static_cast< size_t >(-1)) const
char & at(size_t i)
Returns a reference to the character at index i.
bool isEmpty() const
Returns TRUE iff the string is empty.
const std::string & str() const
QCString & replace(size_t index, size_t len, const char *s)
const char * data() const
Returns a pointer to the contents of the string in the form of a 0-terminated C string.
QCString left(size_t len) const
class that provide information about a section.
static SectionManager & instance()
returns a reference to the singleton
static constexpr int Subsection
Text streaming class that buffers data.
std::string str() const
Return the contents of the buffer as a std::string object.
static QCString getProtectionName(int prot)
static VhdlClasses convert(Protection prot)
bool classHasVisibleRoot(const BaseClassList &bcl)
bool classVisibleInIndex(const ClassDef *cd)
bool classHasVisibleChildren(const ClassDef *cd)
std::vector< BaseClassDef > BaseClassList
std::unordered_set< const ClassDef * > ClassDefSet
#define Config_updateBool(name, value)
#define Config_getBool(name)
#define Config_getString(name)
Definition * toDefinition(DefinitionMutable *dm)
static constexpr auto hex
static void addMembersToIndex()
std::unique_ptr< FileDef > createFileDef(const QCString &p, const QCString &n, const QCString &ref, const QCString &dn)
bool compareFileDefs(const FileDef *fd1, const FileDef *fd2)
constexpr auto JAVASCRIPT_LICENSE_TEXT
static bool quickLinkVisible(LayoutNavEntry::Kind kind)
static void writeConceptTreeInsideNamespace(const NamespaceLinkedRefMap &nsLinkedMap, FTVHelp *ftv, bool rootOnly, bool addToIndex)
static void writeClassTreeInsideNamespaceElement(const NamespaceDef *nd, FTVHelp *ftv, bool rootOnly, bool addToIndex, ClassDef::CompoundType ct)
void startTitle(OutputList &ol, const QCString &fileName, const DefinitionMutable *def)
static void writeIndexHierarchyEntries(OutputList &ol, const LayoutNavEntryList &entries)
static void writeClassTreeToOutput(OutputList &ol, const BaseClassList &bcl, int level, FTVHelp *ftv, bool addToIndex, ClassDefSet &visitedClasses)
void endFile(OutputList &ol, bool skipNavIndex, bool skipEndContents, const QCString &navPath)
#define MAX_ITEMS_BEFORE_QUICK_INDEX
static void writeFileMemberIndexFiltered(OutputList &ol, FileMemberHighlight::Enum hl)
#define MAX_ITEMS_BEFORE_MULTIPAGE_INDEX
static void writeNamespaceTree(const NamespaceLinkedRefMap &nsLinkedMap, FTVHelp *ftv, bool rootOnly, bool addToIndex)
static bool renderQuickLinksAsJs(std::ostream &t, LayoutNavEntry *root, bool first)
static void writeGraphicalClassHierarchy(OutputList &ol)
static void writeAnnotatedStructIndex(OutputList &ol)
static void writeAlphabeticalExceptionIndex(OutputList &ol)
static void 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 bool mainPageHasOwnTitle()
static void writeTopicIndex(OutputList &ol)
static void writeClassTree(const ListType &cl, FTVHelp *ftv, bool addToIndex, bool globalOnly, ClassDef::CompoundType ct)
static void writeModuleMemberIndex(OutputList &ol)
static void writeConceptRootList(FTVHelp *ftv, bool addToIndex)
static const FmhlInfo * getFmhlInfo(size_t hl)
static void writeGraphicalExceptionHierarchy(OutputList &ol)
static void writeFileLinkForMember(OutputList &ol, const MemberDef *md, const QCString &separator, QCString &prevFileName)
static const MmhlInfo * getMmhlInfo(size_t hl)
static void writePages(PageDef *pd, FTVHelp *ftv)
static void countFiles(int &htmlFiles, int &files)
static void writeClassHierarchy(OutputList &ol, FTVHelp *ftv, bool addToIndex, ClassDef::CompoundType ct)
static void writeSingleFileIndex(OutputList &ol, const FileDef *fd)
static void writeNamespaceLinkForMember(OutputList &ol, const MemberDef *md, const QCString &separator, QCString &prevNamespaceName)
static void writeExampleIndex(OutputList &ol)
void startFile(OutputList &ol, const QCString &name, const QCString &manName, const QCString &title, HighlightedItem hli, bool additionalIndices, const QCString &altSidebarName, int hierarchyLevel, const QCString &allMembersFile)
static int countClassesInTreeList(const ClassLinkedMap &cl, ClassDef::CompoundType ct)
static void writeAlphabeticalInterfaceIndex(OutputList &ol)
static void endQuickIndexItem(OutputList &ol)
static void writeAnnotatedIndexGeneric(OutputList &ol, const AnnotatedIndexContext ctx)
static const NmhlInfo * getNmhlInfo(size_t hl)
const ClassDef * get_pointer(const Ptr &p)
static int countAnnotatedClasses(int *cp, ClassDef::CompoundType ct)
static void writeAlphabeticalStructIndex(OutputList &ol)
static void writeGroupHierarchy(OutputList &ol, FTVHelp *ftv, bool addToIndex)
static void writeModuleMembers(const ModuleDef *mod, bool addToIndex)
static void writeConceptTreeInsideNamespaceElement(const NamespaceDef *nd, FTVHelp *ftv, bool rootOnly, bool addToIndex)
static const CmhlInfo * getCmhlInfo(size_t hl)
static void writeDirHierarchy(OutputList &ol, FTVHelp *ftv, bool addToIndex)
std::set< std::string > UsedIndexLetters
static void writeConceptList(const ConceptLinkedRefMap &concepts, FTVHelp *ftv, bool addToIndex)
static void writeClassLinkForMember(OutputList &ol, const MemberDef *md, const QCString &separator, QCString &prevClassName)
void writeIndexHierarchy(OutputList &ol)
static void writeModuleList(OutputList &ol, FTVHelp *ftv, bool addToIndex)
static bool dirHasVisibleChildren(const DirDef *dd)
static int countNamespaces()
static void endIndexHierarchy(OutputList &ol, int level)
const int maxItemsBeforeQuickIndex
static QCString letterToLabel(const QCString &startLetter)
static void writeQuickMemberIndex(OutputList &ol, const Index::MemberIndexMap &map, const std::string &page, QCString fullName, bool multiPage)
void endFileWithNavPath(OutputList &ol, const DefinitionMutable *d, bool showPageNavigation)
static void writeConceptIndex(OutputList &ol)
static void writeModuleLinkForMember(OutputList &ol, const MemberDef *md, const QCString &separator, QCString &prevModuleName)
static void writeModuleIndex(OutputList &ol)
static void MemberIndexMap_add(Index::MemberIndexMap &map, const std::string &letter, const MemberDef *md)
static void writeIndex(OutputList &ol)
static void writeDirTreeNode(OutputList &ol, const DirDef *dd, int level, FTVHelp *ftv, bool addToIndex)
static void startIndexHierarchy(OutputList &ol, int level)
static bool quickLinkVisible(LayoutNavEntry::Kind kind)
static void writeModuleTreeNode(OutputList &ol, const ModuleDef *mod, FTVHelp *ftv, bool addToIndex)
static void writeHierarchicalExceptionIndex(OutputList &ol)
static void writeNamespaceMemberIndex(OutputList &ol)
static void writeHierarchicalIndex(OutputList &ol)
static void writeMenuData()
static void writeGroupTreeNode(OutputList &ol, const GroupDef *gd, int level, FTVHelp *ftv, bool addToIndex)
static void writeMemberToIndex(const Definition *def, const MemberDef *md, bool addToIndex)
static void writeMemberList(OutputList &ol, bool useSections, const std::string &page, const Index::MemberIndexMap &memberIndexMap, Definition::DefType type)
static void writeFileMemberIndex(OutputList &ol)
static void writeClassTreeForList(OutputList &ol, const ClassLinkedMap &cl, bool &started, FTVHelp *ftv, bool addToIndex, ClassDef::CompoundType ct, ClassDefSet &visitedClasses)
static void writeModuleMemberIndexFiltered(OutputList &ol, ModuleMemberHighlight::Enum hl)
static void writeAlphabeticalClassList(OutputList &ol, ClassDef::CompoundType ct, int)
static void startQuickIndexList(OutputList &ol, bool letterTabs=FALSE)
@ isNamespaceDocumentation
Translator * theTranslator
std::vector< std::unique_ptr< LayoutNavEntry > > LayoutNavEntryList
#define warn(file, line, fmt,...)
std::ofstream openOutputStream(const QCString &name, bool append=false)
bool namespaceHasNestedNamespace(const NamespaceDef *nd)
bool namespaceHasNestedClass(const NamespaceDef *nd, bool filterClasses, ClassDef::CompoundType ct)
NamespaceDef * getResolvedNamespace(const QCString &name)
bool namespaceHasNestedConcept(const NamespaceDef *nd)
Portable versions of functions that are platform dependent.
int qstricmp(const char *s1, const char *s2)
QCString substitute(const QCString &s, const QCString &src, const QCString &dst)
substitute all occurrences of src in s by dst
uint32_t qstrlen(const char *str)
Returns the length of string str, or 0 if a null pointer is passed.
const LayoutNavEntry::Kind fallbackKind
AnnotatedIndexContext(int numAnno, int numPrint, LayoutNavEntry::Kind lk, LayoutNavEntry::Kind fk, const QCString &title, const QCString &intro, ClassDef::CompoundType ct, const QCString &fn, HighlightedItem hi)
const ClassDef::CompoundType compoundType
const HighlightedItem hiItem
const QCString fileBaseName
const LayoutNavEntry::Kind listKind
const QCString listDefaultTitleText
const QCString listDefaultIntroText
Helper class representing a class member in the navigation menu.
CmhlInfo(const char *fn, const QCString &t)
Helper class representing a file member in the navigation menu.
FmhlInfo(const char *fn, const QCString &t)
std::array< MemberIndexMap, ModuleMemberHighlight::Total > moduleIndexLetterUsed
std::array< MemberIndexMap, ClassMemberHighlight::Total > classIndexLetterUsed
int annotatedExceptionsPrinted
int annotatedStructsPrinted
std::array< int, FileMemberHighlight::Total > documentedFileMembers
std::array< MemberIndexMap, FileMemberHighlight::Total > fileIndexLetterUsed
std::array< int, ModuleMemberHighlight::Total > documentedModuleMembers
int annotatedInterfacesPrinted
std::array< int, NamespaceMemberHighlight::Total > documentedNamespaceMembers
std::array< int, ClassMemberHighlight::Total > documentedClassMembers
std::array< MemberIndexMap, NamespaceMemberHighlight::Total > namespaceIndexLetterUsed
int annotatedClassesPrinted
Represents of a member declaration list with configurable title and subtitle.
Represents of a member definition list with configurable title.
Base class for the layout of a navigation item at the top of the HTML pages.
const LayoutNavEntryList & children() const
QCString baseFile() const
LayoutNavEntry * find(LayoutNavEntry::Kind k, const QCString &file=QCString()) const
Helper class representing a module member in the navigation menu.
MmhlInfo(const char *fn, const QCString &t)
Helper class representing a namespace member in the navigation menu.
NmhlInfo(const char *fn, const QCString &t)
std::string convertUTF8ToUpper(const std::string &input)
Converts the input string into a upper case version, also taking into account non-ASCII characters th...
std::string convertUTF8ToLower(const std::string &input)
Converts the input string into a lower case version, also taking into account non-ASCII characters th...
std::string getUTF8CharAt(const std::string &input, size_t pos)
Returns the UTF8 character found at byte position pos in the input string.
Various UTF8 related helper functions.
QCString 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 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)