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,isSource,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)
1520 .setSingleLine(
true)
1521 .setLinkFromIndex(
true));
1552 if (dir->hasDocumentation())
1577 bool addToIndex = lne==
nullptr || lne->
visible();
1610 std::unordered_map<std::string,size_t> pathMap;
1611 std::vector<FilesInDir> outputFiles;
1616 for (
const auto &fd : *fn)
1619 if (path.
isEmpty()) path=
"[external]";
1620 auto it = pathMap.
find(path.
str());
1621 if (it!=pathMap.end())
1623 outputFiles.at(it->second).files.push_back(fd.get());
1627 pathMap.emplace(path.
str(),outputFiles.size());
1628 outputFiles.emplace_back(path);
1629 outputFiles.back().files.push_back(fd.get());
1635 std::stable_sort(outputFiles.begin(),
1637 [](
const auto &fp1,
const auto &fp2) { return qstricmp_sort(fp1.path,fp2.path)<0; });
1639 for (
auto &fp : outputFiles)
1644 for (
const auto &fp : outputFiles)
1646 for (
const auto &fd : fp.files)
1656 for (
const auto &fd : *fn)
1699 if (nd->isLinkableInProject()) count++;
1710 if (cd->isLinkableInProject()) count++;
1721template<
class ListType>
1725 for (
const auto &cdi : cl)
1751 if (ccd->isLinkableInProject() && !ccd->isImplicitTemplateInstance())
1789 if (lde->kind()==LayoutDocEntry::MemberDef)
1797 for (
const auto &md : *ml)
1800 if (md->visibleInIndex())
1815 if (lde->kind()==LayoutDocEntry::MemberDecl)
1823 for (
const auto &md : *ml)
1826 if (md->visibleInIndex())
1840 bool rootOnly,
bool addToIndex);
1843 bool rootOnly,
bool addToIndex)
1850 bool hasChildren = hasNestedNamespace ||
1870 bool isDir = hasChildren || visibleMembers>0;
1871 if (isLinkable || isDir)
1880 if (addToIndex && isDir)
1894 if (addToIndex && isDir)
1903 bool rootOnly,
bool addToIndex)
1905 for (
const auto &nd : nsLinkedMap)
1907 if (nd->isVisibleInHierarchy())
1915 bool rootOnly,
bool addToIndex)
1917 for (
const auto &nd : nsLinkedMap)
1919 if (nd->isVisibleInHierarchy())
2004 for (
const auto &nd : nsLinkedMap)
2013 for (
const auto &nd : nsLinkedMap)
2028 bool addToIndex = lne==
nullptr || lne->
visible();
2048 if (nd->isLinkableInProject())
2057 if (nd->getLanguage()==SrcLangExt::VHDL)
2067 bool hasBrief = !nd->briefDescription().isEmpty();
2075 nd->briefDescription(
true),
2077 .setSingleLine(
true)
2078 .setLinkFromIndex(
true));
2127 if (sliceOpt && cd->compoundType() != ct)
2131 if (cd->isLinkableInProject() && !cd->isImplicitTemplateInstance())
2133 if (!cd->isEmbeddedInOuterScope())
2155 if (cd->getLanguage()==SrcLangExt::VHDL &&
2168 if (sliceOpt && cd->compoundType() != ct)
2174 if (cd->isEmbeddedInOuterScope())
2180 if (cd->isLinkableInProject() && !cd->isImplicitTemplateInstance())
2183 if (cd->getLanguage()==SrcLangExt::VHDL)
2191 bool hasBrief = !cd->briefDescription().isEmpty();
2199 cd->briefDescription(
true),
2201 .setSingleLine(
true)
2202 .setLinkFromIndex(
true));
2218 return (c<127 && c>31);
2223 if (startLetter.
isEmpty())
return startLetter;
2224 const char *p = startLetter.
data();
2234 const char hex[]=
"0123456789abcdef";
2237 result+=
hex[
static_cast<unsigned char>(c)>>4];
2238 result+=
hex[
static_cast<unsigned char>(c)&0xf];
2280 if (sliceOpt && cd->compoundType() != ct)
2282 if (cd->isLinkableInProject() && !cd->isImplicitTemplateInstance())
2289 std::string letter =
getUTF8CharAt(cd->className().str(),index);
2290 if (!letter.empty())
2298 QCString alphaLinks =
"<div class=\"qindex\">";
2300 for (
const auto &letter : indexLettersUsed)
2302 if (!first) alphaLinks +=
" | ";
2305 alphaLinks +=
"<a class=\"qindex\" href=\"#letter_" +
2309 alphaLinks +=
"</div>\n";
2312 std::map<std::string, std::vector<const ClassDef*> > classesByLetter;
2319 if (sliceOpt && cd->compoundType() != ct)
2324 if (cd->isLinkableInProject() && !cd->isImplicitTemplateInstance())
2326 QCString className = cd->className();
2329 if (!letter.empty())
2332 auto it = classesByLetter.find(letter);
2333 if (it!=classesByLetter.end())
2335 it->second.push_back(cd.get());
2339 classesByLetter.emplace(letter, std::vector<const ClassDef*>({ cd.get() }));
2346 for (
auto &[letter,list] : classesByLetter)
2348 std::stable_sort(list.begin(), list.end(),
2349 [](
const auto &c1,
const auto &c2)
2351 QCString n1 = c1->className();
2352 QCString n2 = c2->className();
2353 return qstricmp_sort(n1.data()+getPrefixIndex(n1), n2.data()+getPrefixIndex(n2))<0;
2358 if (!classesByLetter.empty())
2362 for (
const auto &cl : classesByLetter)
2364 QCString parity = (counter++%2)==0 ?
"even" :
"odd";
2365 ol.
writeString(
"<dl class=\"classindex " + parity +
"\">\n");
2380 for (
const auto &cd : cl.second)
2399 cd->getOutputFileBase(),cd->anchor(),cname);
2433 bool addToIndex = lne==
nullptr || lne->
visible();
2462 bool addToIndex = lne==
nullptr || lne->
visible();
2491 bool addToIndex = lne==
nullptr || lne->
visible();
2520 bool addToIndex = lne==
nullptr || lne->
visible();
2583 bool addToIndex = lne==
nullptr || lne->
visible();
2647 LayoutNavEntry::ClassList,LayoutNavEntry::Classes,
2661 LayoutNavEntry::InterfaceList,LayoutNavEntry::Interfaces,
2664 "annotatedinterfaces",
2675 LayoutNavEntry::StructList,LayoutNavEntry::Structs,
2689 LayoutNavEntry::ExceptionList,LayoutNavEntry::Exceptions,
2692 "annotatedexceptions",
2714 if (fd && prevFileName!=fd->
name())
2719 prevFileName = fd->
name();
2755 int index =
static_cast<int>(type);
2756 const int numIndices = 4;
2757 ASSERT(index<numIndices);
2763 static writeLinkForMember_t writeLinkForMemberMap[numIndices] =
2773 bool firstSection=
TRUE;
2774 bool firstItem=
TRUE;
2777 for (
const auto &kv : memberIndexMap)
2781 auto it = memberIndexMap.find(page);
2782 if (it != memberIndexMap.end())
2793 if (mil==
nullptr || mil->empty())
continue;
2794 for (
const auto &md : *mil)
2796 const char *sep =
nullptr;
2797 bool isFunc=!md->isObjCMethod() &&
2798 (md->isFunction() || md->isSlot() || md->isSignal());
2801 if (name.
data()+startIndex!=prevName)
2804 tolower(name.
at(startIndex))!=tolower(prevName.
at(0))) &&
2819 else if (!useSections && first)
2830 if (isFunc) ol.
docify(
"()");
2835 sep =
" : ";
2836 prevName = name.
data()+startIndex;
2843 if (index<numIndices)
2846 writeLinkForMemberMap[index](ol,md,sep,prevDefName);
2862 bool hideFriendCompounds =
Config_getBool(HIDE_FRIEND_COMPOUNDS);
2872 if (!letter.empty())
2875 bool isFriendToHide = hideFriendCompounds &&
2879 if (!(md->
isFriend() && isFriendToHide) &&
2914 (md->
isFriend() && !isFriendToHide))
2931 if (!letter.empty())
2979 if (!letter.empty())
3031 if (!letter.empty())
3070 for (
const auto &[letter,list] : map)
3079 anchor=fullName+extension+
"#index_";
3081 anchor=fullName+
"_"+is+extension+
"#index_";
3119 return &cmhlInfo[hl];
3125 if (index.numDocumentedClassMembers(hl)==0)
return;
3131 bool quickLinksAfterSplitbar = !disableIndex && generateTreeView && fullSidebar;
3133 bool multiPageIndex=
FALSE;
3136 multiPageIndex=
TRUE;
3146 bool addToIndex = lne==
nullptr || lne->
visible();
3156 for (
const auto &[letter,list] : index.isClassIndexLetterUsed(hl))
3174 auto writeQuickLinks = [&,cap_letter=letter]()
3215 if (!disableIndex && !quickLinksAfterSplitbar)
3221 if (quickLinksAfterSplitbar)
3239 multiPageIndex ? letter : std::string(),
3240 index.isClassIndexLetterUsed(hl),
3255 bool addToIndex = lne==
nullptr || lne->
visible();
3308 return &fmhlInfo[hl];
3314 if (index.numDocumentedFileMembers(hl)==0)
return;
3320 bool quickLinksAfterSplitbar = !disableIndex && generateTreeView && fullSidebar;
3322 bool multiPageIndex=
FALSE;
3325 multiPageIndex=
TRUE;
3334 bool addToIndex = lne==
nullptr || lne->
visible();
3344 for (
const auto &[letter,list] : index.isFileIndexLetterUsed(hl))
3362 auto writeQuickLinks = [&,cap_letter=letter]()
3401 if (!disableIndex && !quickLinksAfterSplitbar)
3407 if (quickLinksAfterSplitbar)
3425 multiPageIndex ? letter : std::string(),
3426 index.isFileIndexLetterUsed(hl),
3438 bool addToIndex = lne==
nullptr || lne->
visible();
3489 return &nmhlInfo[hl];
3498 if (index.numDocumentedNamespaceMembers(hl)==0)
return;
3504 bool quickLinksAfterSplitbar = !disableIndex && generateTreeView && fullSidebar;
3506 bool multiPageIndex=
FALSE;
3509 multiPageIndex=
TRUE;
3518 bool addToIndex = lne==
nullptr || lne->
visible();
3528 for (
const auto &[letter,list] : index.isNamespaceIndexLetterUsed(hl))
3546 auto writeQuickLinks = [&,cap_letter=letter]()
3585 if (!disableIndex && !quickLinksAfterSplitbar)
3591 if (quickLinksAfterSplitbar)
3609 multiPageIndex ? letter : std::string(),
3610 index.isNamespaceIndexLetterUsed(hl),
3623 bool addToIndex = lne==
nullptr || lne->
visible();
3666 return &nmhlInfo[hl];
3675 if (index.numDocumentedModuleMembers(hl)==0)
return;
3681 bool quickLinksAfterSplitbar = !disableIndex && generateTreeView && fullSidebar;
3683 bool multiPageIndex=
FALSE;
3686 multiPageIndex=
TRUE;
3695 bool addToIndex = lne==
nullptr || lne->
visible();
3705 for (
const auto &[letter,list] : index.isModuleIndexLetterUsed(hl))
3723 auto writeQuickLinks = [&,cap_letter=letter]()
3762 if (!disableIndex && !quickLinksAfterSplitbar)
3768 if (quickLinksAfterSplitbar)
3786 multiPageIndex ? letter : std::string(),
3787 index.isModuleIndexLetterUsed(hl),
3803 bool addToIndex = lne==
nullptr || lne->
visible();
3832 bool addToIndex = lne==
nullptr || lne->
visible();
3856 QCString n=pd->getOutputFileBase();
3857 if (!pd->title().isEmpty())
3891 docPages=indexPages=0;
3894 if (pd->visibleInIndex() && !pd->hasParentPage())
3898 if (pd->documentedPage())
3922 bool addToIndex = lne==
nullptr || lne->
visible();
3923 if (!addToIndex)
return;
3930 QCString pageTitle, pageTitleAsHtml;
3933 pageTitle=pd->
name();
3942 hasSubPages,pageTitle,
3949 hasSubPages || hasSections,pageTitle,
3955 bool doIndent = (hasSections || hasSubPages) &&
3999 if ((pd->getOuterScope()==
nullptr ||
4001 pd->visibleInIndex()
4026 if (!gd->isReference())
4042 if (dd->isLinkableInProject())
4062 bool oldStripCommentsState =
Config_getBool(STRIP_CODE_COMMENTS);
4075 int s = legendDocs.
find(
"<center>");
4076 int e = legendDocs.
find(
"</center>");
4078 if (imgExt==
"svg" && s!=-1 && e!=-1)
4080 legendDocs = legendDocs.
left(s+8) +
"[!-- " +
"SVG 0 --]" + legendDocs.
mid(e);
4110 "maximum nesting level exceeded for group {}: check for possible recursive group relation!",gd->
name());
4123 size_t numSubItems = 0;
4126 if (ml->listType().isDocumentation())
4128 numSubItems += ml->size();
4133 numSubItems += gd->
getFiles().size();
4135 numSubItems += gd->
getDirs().size();
4138 bool isDir = hasSubGroups || hasSubPages || numSubItems>0;
4147 isDir,
TRUE,
nullptr,titleAsHtml);
4166 .setSingleLine(
true));
4172 ol.
docify(
" [external]");
4178 if (lde->kind()==LayoutDocEntry::MemberDef && addToIndex)
4186 for (
const auto &md : *ml)
4189 isDir = !enumList.
empty() && md->isEnumerate();
4190 if (md->isVisible() && !md->isAnonymous())
4193 md->qualifiedName(),md->getReference(),
4194 md->getOutputFileBase(),md->anchor(),
FALSE,addToIndex);
4199 for (
const auto &emd : enumList)
4201 if (emd->isVisible())
4204 emd->qualifiedName(),emd->getReference(),emd->getOutputFileBase(),
4205 emd->anchor(),
FALSE,addToIndex);
4214 else if (lde->kind()==LayoutDocEntry::GroupClasses && addToIndex)
4222 if (cd->isVisible() )
4225 LayoutDocManager::Class,
4233 else if (lde->kind()==LayoutDocEntry::GroupNamespaces && addToIndex &&
Config_getBool(SHOW_NAMESPACES))
4237 if (nd->isVisible())
4240 nd->displayName(),nd->getReference(),
4245 else if (lde->kind()==LayoutDocEntry::GroupConcepts && addToIndex)
4249 if (cd->isVisible())
4252 cd->displayName(),cd->getReference(),
4257 else if (lde->kind()==LayoutDocEntry::GroupFiles && addToIndex)
4259 for (
const auto &fd : gd->
getFiles())
4261 if (fd->isVisible())
4264 fd->displayName(),fd->getReference(),
4265 fd->getOutputFileBase(),
QCString(),
FALSE,fd->isLinkableViaGroup());
4269 else if (lde->kind()==LayoutDocEntry::GroupDirs && addToIndex)
4271 for (
const auto &dd : gd->
getDirs())
4273 if (dd->isVisible())
4276 dd->shortName(),dd->getReference(),
4281 else if (lde->kind()==LayoutDocEntry::GroupPageDocs && addToIndex)
4283 for (
const auto &pd : gd->
getPages())
4287 hasSubPages = pd->hasSubPages();
4288 bool hasSections = pd->hasSections();
4290 if (pd->title().isEmpty())
4291 pageTitle=pd->name();
4293 pageTitle =
parseCommentAsText(pd,
nullptr,pd->title(),pd->getDefFileName(),pd->getDefLine());
4296 hasSubPages || hasSections,
4301 hasSubPages || hasSections,
4305 if (hasSections || hasSubPages)
4311 pd->addSectionsToIndex();
4314 if (hasSections || hasSubPages)
4320 else if (lde->kind()==LayoutDocEntry::GroupNestedGroups)
4358 if (gd->isVisibleInHierarchy())
4381 bool addToIndex = lne==
nullptr || lne->
visible();
4442 FTVHelp* ftv,
bool addToIndex)
4445 bool isDir=visibleMembers>0;
4464 ol.
docify(
" [external]");
4467 if (addToIndex && isDir)
4479 if (addToIndex && isDir)
4498 if (mod->isPrimaryInterface())
4523 bool addToIndex = lne==
nullptr || lne->
visible();
4582 for (
const auto &cd : concepts)
4584 if (cd->isLinkableInProject())
4589 cd->getOutputFileBase(),
QCString(),
false,cd->partOfGroups().empty(),cd);
4594 cd->getOutputFileBase(),
QCString(),
false,cd->partOfGroups().empty());
4601 bool rootOnly,
bool addToIndex);
4604 bool rootOnly,
bool addToIndex)
4606 for (
const auto &nd : nsLinkedMap)
4614 bool rootOnly,
bool addToIndex)
4668 if ((cd->getOuterScope()==
nullptr ||
4674 false,cd->localName(),cd->getReference(),cd->getOutputFileBase(),
4675 QCString(),
false,cd->partOfGroups().empty(),cd.get());
4679 false,cd->localName(),cd->getReference(),cd->getOutputFileBase(),
4680 QCString(),
false,cd->partOfGroups().empty(),cd.get());
4695 bool addToIndex = lne==
nullptr || lne->
visible();
4716 if (cd->isLinkableInProject())
4728 bool hasBrief = !cd->briefDescription().isEmpty();
4736 cd->briefDescription(
true),
4738 .setSingleLine(
true)
4739 .setLinkFromIndex(
true));
4799 for (
const auto &entry: lne->
children())
4801 if (entry->visible()) count++;
4806 for (
const auto &entry: lne->
children())
4808 if (entry->visible())
4810 ol.
writeString(
"<li><a href=\""+entry->url()+
"\"><span>"+
4811 fixSpaces(entry->title())+
"</span></a></li>\n");
4839 projPrefix=projectName+
" ";
4891 bool quickLinksAfterSplitbar = !disableIndex && generateTreeView && fullSidebar;
4893 if (!disableIndex && !quickLinksAfterSplitbar)
4899 if (quickLinksAfterSplitbar)
4904 bool headerWritten=
FALSE;
4929 .setSingleLine(
true));
4930 headerWritten =
TRUE;
4940 headerWritten =
TRUE;
4969 .setIndexWords(
true));
5008 msg(
"Generating main page...\n");
5051 if (index.numDocumentedPages()>0)
5066 if (index.numDocumentedModules()>0)
5072 if (index.numDocumentedGroups()>0)
5078 if (index.numDocumentedDirs()>0)
5084 if (
Config_getBool(SHOW_NAMESPACES) && (index.numDocumentedNamespaces()>0))
5094 if (index.numDocumentedConcepts()>0)
5100 if (index.numHierarchyInterfaces()>0)
5106 if (index.numHierarchyClasses()>0)
5120 if (index.numHierarchyExceptions()>0)
5126 if (index.numAnnotatedInterfacesPrinted()>0)
5132 if (index.numAnnotatedClassesPrinted()>0)
5142 if (index.numAnnotatedStructsPrinted()>0)
5148 if (index.numAnnotatedExceptionsPrinted()>0)
5163 if (index.numDocumentedModules()>0)
5169 if (index.numDocumentedGroups()>0)
5175 if (index.numDocumentedDirs()>0)
5181 if (index.numDocumentedNamespaces()>0)
5187 if (index.numDocumentedConcepts()>0)
5193 if (index.numAnnotatedInterfacesPrinted()>0)
5199 if (index.numAnnotatedClassesPrinted()>0)
5205 if (index.numAnnotatedStructsPrinted()>0)
5211 if (index.numAnnotatedExceptionsPrinted()>0)
5241 return s.startsWith(
"@ref") || s.startsWith(
"\\ref");
5245 for (
const auto &lne : entries)
5248 size_t idx =
static_cast<size_t>(kind);
5252 size_t newSize = idx+1;
5257 bool addToIndex=lne->visible();
5258 bool needsClosing=
FALSE;
5263 case LayoutNavEntry::MainPage:
5264 msg(
"Generating index page...\n");
5267 case LayoutNavEntry::Pages:
5268 msg(
"Generating page index...\n");
5271 case LayoutNavEntry::Topics:
5272 msg(
"Generating topic index...\n");
5275 case LayoutNavEntry::Modules:
5277 if (index.numDocumentedModules()>0 && addToIndex)
5285 case LayoutNavEntry::ModuleList:
5286 msg(
"Generating module index...\n");
5289 case LayoutNavEntry::ModuleMembers:
5290 msg(
"Generating module member index...\n");
5293 case LayoutNavEntry::Namespaces:
5298 if (index.numDocumentedNamespaces()>0 && addToIndex)
5306 msg(
"Generating namespace index...\n");
5312 case LayoutNavEntry::NamespaceList:
5317 msg(
"Generating namespace index...\n");
5322 case LayoutNavEntry::NamespaceMembers:
5323 msg(
"Generating namespace member index...\n");
5326 case LayoutNavEntry::Classes:
5327 if (index.numAnnotatedClasses()>0 && addToIndex)
5335 msg(
"Generating annotated compound index...\n");
5339 case LayoutNavEntry::Concepts:
5340 msg(
"Generating concept index...\n");
5343 case LayoutNavEntry::ClassList:
5344 msg(
"Generating annotated compound index...\n");
5347 case LayoutNavEntry::ClassIndex:
5348 msg(
"Generating alphabetical compound index...\n");
5351 case LayoutNavEntry::ClassHierarchy:
5352 msg(
"Generating hierarchical class index...\n");
5356 msg(
"Generating graphical class hierarchy...\n");
5360 case LayoutNavEntry::ClassMembers:
5363 msg(
"Generating member index...\n");
5367 case LayoutNavEntry::Interfaces:
5368 if (sliceOpt && index.numAnnotatedInterfaces()>0 && addToIndex)
5375 case LayoutNavEntry::InterfaceList:
5378 msg(
"Generating annotated interface index...\n");
5382 case LayoutNavEntry::InterfaceIndex:
5385 msg(
"Generating alphabetical interface index...\n");
5389 case LayoutNavEntry::InterfaceHierarchy:
5392 msg(
"Generating hierarchical interface index...\n");
5396 msg(
"Generating graphical interface hierarchy...\n");
5401 case LayoutNavEntry::Structs:
5402 if (sliceOpt && index.numAnnotatedStructs()>0 && addToIndex)
5409 case LayoutNavEntry::StructList:
5412 msg(
"Generating annotated struct index...\n");
5416 case LayoutNavEntry::StructIndex:
5419 msg(
"Generating alphabetical struct index...\n");
5423 case LayoutNavEntry::Exceptions:
5424 if (sliceOpt && index.numAnnotatedExceptions()>0 && addToIndex)
5431 case LayoutNavEntry::ExceptionList:
5434 msg(
"Generating annotated exception index...\n");
5438 case LayoutNavEntry::ExceptionIndex:
5441 msg(
"Generating alphabetical exception index...\n");
5445 case LayoutNavEntry::ExceptionHierarchy:
5448 msg(
"Generating hierarchical exception index...\n");
5452 msg(
"Generating graphical exception hierarchy...\n");
5457 case LayoutNavEntry::Files:
5459 if (
Config_getBool(SHOW_FILES) && index.numDocumentedFiles()>0 && addToIndex)
5467 msg(
"Generating file index...\n");
5472 case LayoutNavEntry::FileList:
5473 msg(
"Generating file index...\n");
5476 case LayoutNavEntry::FileGlobals:
5477 msg(
"Generating file member index...\n");
5480 case LayoutNavEntry::Examples:
5481 msg(
"Generating example index...\n");
5484 case LayoutNavEntry::User:
5489 bool isRelative=url.
at(0)==
'!';
5490 if (!url.
isEmpty() && !isRelative)
5498 case LayoutNavEntry::UserGroup:
5510 bool isRelative=url.
at(0)==
'!';
5528 case LayoutNavEntry::None:
5529 assert(kind != LayoutNavEntry::None);
5532 if (kind!=LayoutNavEntry::User && kind!=LayoutNavEntry::UserGroup)
5542 case LayoutNavEntry::Modules:
5543 case LayoutNavEntry::Namespaces:
5544 case LayoutNavEntry::Classes:
5545 case LayoutNavEntry::Files:
5546 case LayoutNavEntry::UserGroup:
5568 case LayoutNavEntry::MainPage:
return TRUE;
5569 case LayoutNavEntry::User:
return TRUE;
5570 case LayoutNavEntry::UserGroup:
return TRUE;
5571 case LayoutNavEntry::Pages:
return index.numIndexedPages()>0;
5572 case LayoutNavEntry::Topics:
return index.numDocumentedGroups()>0;
5573 case LayoutNavEntry::Modules:
return index.numDocumentedModules()>0;
5574 case LayoutNavEntry::ModuleList:
return index.numDocumentedModules()>0;
5576 case LayoutNavEntry::Namespaces:
return index.numDocumentedNamespaces()>0 && showNamespaces;
5577 case LayoutNavEntry::NamespaceList:
return index.numDocumentedNamespaces()>0 && showNamespaces;
5579 case LayoutNavEntry::Concepts:
return index.numDocumentedConcepts()>0;
5580 case LayoutNavEntry::Classes:
return index.numAnnotatedClasses()>0;
5581 case LayoutNavEntry::ClassList:
return index.numAnnotatedClasses()>0;
5582 case LayoutNavEntry::ClassIndex:
return index.numAnnotatedClasses()>0;
5583 case LayoutNavEntry::ClassHierarchy:
return index.numHierarchyClasses()>0;
5585 case LayoutNavEntry::Interfaces:
return index.numAnnotatedInterfaces()>0;
5586 case LayoutNavEntry::InterfaceList:
return index.numAnnotatedInterfaces()>0;
5587 case LayoutNavEntry::InterfaceIndex:
return index.numAnnotatedInterfaces()>0;
5588 case LayoutNavEntry::InterfaceHierarchy:
return index.numHierarchyInterfaces()>0;
5589 case LayoutNavEntry::Structs:
return index.numAnnotatedStructs()>0;
5590 case LayoutNavEntry::StructList:
return index.numAnnotatedStructs()>0;
5591 case LayoutNavEntry::StructIndex:
return index.numAnnotatedStructs()>0;
5592 case LayoutNavEntry::Exceptions:
return index.numAnnotatedExceptions()>0;
5593 case LayoutNavEntry::ExceptionList:
return index.numAnnotatedExceptions()>0;
5594 case LayoutNavEntry::ExceptionIndex:
return index.numAnnotatedExceptions()>0;
5595 case LayoutNavEntry::ExceptionHierarchy:
return index.numHierarchyExceptions()>0;
5596 case LayoutNavEntry::Files:
return index.numDocumentedFiles()>0 && showFiles;
5597 case LayoutNavEntry::FileList:
return index.numDocumentedFiles()>0 && showFiles;
5600 case LayoutNavEntry::None:
5601 assert(kind != LayoutNavEntry::None);
5609 std::function<std::size_t(std::size_t)> numDocumented,
5611 const T *(*getInfo)(
size_t hl),
5615 bool firstMember=
TRUE;
5616 for (std::size_t i=0;i<total;i++)
5618 if (numDocumented(i)>0)
5634 bool multiPageIndex=
FALSE;
5637 multiPageIndex=
TRUE;
5639 t <<
",children:[\n";
5640 bool firstLetter=
TRUE;
5641 for (
const auto &[letter,list] : getMemberList(i))
5643 if (!firstLetter) t <<
",\n";
5648 QCString fullName = getInfo(i)->fname;
5649 if (!multiPageIndex || firstLetter)
5650 anchor=fullName+extension+
"#index_";
5652 anchor=fullName+
"_"+is+extension+
"#index_";
5671 for (
const auto &entry : root->
children())
5677 bool firstChild =
TRUE;
5678 if (!first) t <<
",";
5679 t <<
"children:[\n";
5680 for (
const auto &entry : root->
children())
5684 if (!firstChild) t <<
",\n";
5687 if (
isURL(url)) url =
"^" + url;
5690 bool hasChildren=
FALSE;
5691 if (entry->kind()==LayoutNavEntry::ModuleMembers)
5693 auto numDoc = [](std::size_t i) {
5696 auto memList = [](std::size_t i) {
5701 if (entry->kind()==LayoutNavEntry::NamespaceMembers)
5703 auto numDoc = [](std::size_t i) {
5706 auto memList = [](std::size_t i) {
5711 else if (entry->kind()==LayoutNavEntry::ClassMembers)
5713 auto numDoc = [](std::size_t i) {
5716 auto memList = [](std::size_t i) {
5721 else if (entry->kind()==LayoutNavEntry::FileGlobals)
5723 auto numDoc = [](std::size_t i) {
5726 auto memList = [](std::size_t i) {
5735 if (hasChildren) t <<
"]";
5752 t <<
"var menudata={";
5754 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 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)
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)
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)
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 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)