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)
472 bool isDir = md->
isEnumerate() && std::any_of(enumList.
begin(),enumList.
end(),[](
const auto &emd) { return emd->hasDocumentation(); });
475 bool lAddToIndex = addToIndex && !namespaceMemberInFileDocs;
496 for (
const auto &emd : enumList)
498 if (emd->hasDocumentation())
501 lAddToIndex = addToIndex && !namespaceMemberInFileDocs;
503 emd->qualifiedName() : emd->name();
504 if (emd->getOuterScope()==def ||
509 ename,emd->getReference(),emd->getOutputFileBase(),emd->anchor(),
FALSE,lAddToIndex && emd->getGroupDef()==
nullptr);
529 bool addToIndex=
TRUE,
bool preventSeparateIndex=
FALSE,
534 for (
const auto &cd : def->getClasses())
536 if (cd->isLinkable()) numClasses++;
541 for (
const auto &cd : *concepts)
543 if (cd->isLinkable()) numConcepts++;
546 bool hasMembers = !def->getMemberLists().empty() || !def->getMemberGroups().empty() || (numClasses>0) || (numConcepts>0);
548 def->getReference(),def->getOutputFileBase(),anchor,
549 hasMembers && !preventSeparateIndex,
553 if (hasMembers || numClasses>0 || numConcepts>0)
558 auto kind = lde->kind();
559 if (kind==LayoutDocEntry::MemberDef)
567 for (
const auto &md : *ml)
569 if (md->visibleInIndex())
577 else if (kind==LayoutDocEntry::NamespaceClasses ||
578 kind==LayoutDocEntry::FileClasses ||
579 kind==LayoutDocEntry::ClassNestedClasses ||
580 kind==LayoutDocEntry::ModuleClasses
583 for (
const auto &cd : def->getClasses())
585 if (cd->isLinkable() && (cd->partOfGroups().empty() || def->definitionType()==
Definition::TypeGroup))
589 addMembersToIndex(cd,LayoutDocManager::Class,cd->displayName(lde->kind()==LayoutDocEntry::FileClasses),cd->anchor(),
590 addToIndex && (isNestedClass || (cd->isSimple() && inlineSimpleStructs)),
591 preventSeparateIndex || cd->isEmbeddedInOuterScope());
595 else if ((kind==LayoutDocEntry::FileConcepts || kind==LayoutDocEntry::ModuleConcepts) && concepts)
597 for (
const auto &cd : *concepts)
599 if (cd->isLinkable() && (cd->partOfGroups().empty() || def->definitionType()==
Definition::TypeGroup))
602 cd->getReference(),cd->getOutputFileBase(),
QCString(),
621 if (bcl.empty())
return;
623 for (
const auto &bcd : bcl)
650 bool hasChildren = visitedClasses.find(cd)==visitedClasses.end() &&
664 .setAutolinkSupport(
false));
705 visitedClasses.insert(cd);
738 for (
const auto &fd : dd->
getFiles())
740 bool genSourceFile =
false;
751 for(
const auto &subdd : dd->
subDirs())
767 "maximum nesting level exceeded for directory {}: "
768 "check for possible recursive directory relation!",dd->
name());
777 bool tocExpand =
TRUE;
778 bool isDir = !dd->
subDirs().empty() ||
804 .setAutolinkSupport(
false));
817 for(
const auto &subdd : dd->
subDirs())
827 for (
const auto &fd : dd->
getFiles())
834 bool genSourceFile =
false;
839 else if (genSourceFile)
847 for (
const auto &fd : dd->
getFiles())
855 reference = fd->getReference();
856 outputBase = fd->getOutputFileBase();
869 .setAutolinkSupport(
false));
872 if (ftv && (src || doc))
876 reference,outputBase,
885 if (tocExpand && addToIndex)
890 for (
const auto &fd : dd->
getFiles())
897 !fd->isLinkableViaGroup(),
FALSE,&fd->getConcepts());
939 for (
const auto &fd : *fn)
941 if (fd->getDirDef()==
nullptr)
948 reference = fd->getReference();
949 outputBase = fd->getOutputFileBase();
988 for (
const auto &cd : cl)
996 if (cd->getLanguage()==SrcLangExt::VHDL)
1004 else if (sliceOpt && cd->compoundType() != ct)
1015 if (cd->isVisibleInHierarchy())
1027 bool hasChildren = visitedClasses.find(cd.get())==visitedClasses.end() &&
1030 if (cd->isLinkable())
1041 .setSingleLine(
true)
1042 .setAutolinkSupport(
false));
1043 ol.
endIndexItem(cd->getReference(),cd->getOutputFileBase());
1044 if (cd->isReference())
1047 ol.
docify(
" [external]");
1052 if (cd->getLanguage()!=SrcLangExt::VHDL)
1053 Doxygen::indexList->addContentsItem(hasChildren,cd->displayName(),cd->getReference(),cd->getOutputFileBase(),cd->anchor(),
FALSE,
FALSE);
1057 ftv->
addContentsItem(hasChildren,cd->displayName(),cd->getReference(),cd->getOutputFileBase(),cd->anchor(),
FALSE,
FALSE,cd.get());
1074 if (cd->getLanguage()==SrcLangExt::VHDL && hasChildren)
1077 visitedClasses.insert(cd.get());
1079 else if (hasChildren)
1082 visitedClasses.insert(cd.get());
1121 for (
const auto &cd : cl)
1123 if (sliceOpt && cd->compoundType() != ct)
1129 if (cd->isVisibleInHierarchy())
1131 if (!cd->subClasses().empty())
1161 bool addToIndex = lne==
nullptr || lne->
visible();
1267 bool addToIndex = lne==
nullptr || lne->
visible();
1372 bool addToIndex = lne==
nullptr || lne->
visible();
1474 for (
const auto &fd: *fn)
1547 .setSingleLine(
true)
1548 .setLinkFromIndex(
true));
1579 if (dir->hasDocumentation())
1604 bool addToIndex = lne==
nullptr || lne->
visible();
1637 std::unordered_map<std::string,size_t> pathMap;
1638 std::vector<FilesInDir> outputFiles;
1643 for (
const auto &fd : *fn)
1646 if (path.
isEmpty()) path=
"[external]";
1647 auto it = pathMap.
find(path.
str());
1648 if (it!=pathMap.end())
1650 outputFiles.at(it->second).files.push_back(fd.get());
1654 pathMap.emplace(path.
str(),outputFiles.size());
1655 outputFiles.emplace_back(path);
1656 outputFiles.back().files.push_back(fd.get());
1662 std::stable_sort(outputFiles.begin(),
1664 [](
const auto &fp1,
const auto &fp2) { return qstricmp_sort(fp1.path,fp2.path)<0; });
1666 for (
auto &fp : outputFiles)
1671 for (
const auto &fp : outputFiles)
1673 for (
const auto &fd : fp.files)
1683 for (
const auto &fd : *fn)
1726 if (nd->isLinkableInProject()) count++;
1737 if (cd->isLinkableInProject()) count++;
1748template<
class ListType>
1752 for (
const auto &cdi : cl)
1778 if (ccd->isLinkableInProject() && !ccd->isImplicitTemplateInstance())
1816 if (lde->kind()==LayoutDocEntry::MemberDef)
1824 for (
const auto &md : *ml)
1827 if (md->visibleInIndex())
1842 if (lde->kind()==LayoutDocEntry::MemberDecl)
1850 for (
const auto &md : *ml)
1853 if (md->visibleInIndex())
1867 bool rootOnly,
bool addToIndex);
1870 bool rootOnly,
bool addToIndex)
1877 bool hasChildren = hasNestedNamespace ||
1897 bool isDir = hasChildren || visibleMembers>0;
1898 if (isLinkable || isDir)
1907 if (addToIndex && isDir)
1921 if (addToIndex && isDir)
1930 bool rootOnly,
bool addToIndex)
1932 for (
const auto &nd : nsLinkedMap)
1934 if (nd->isVisibleInHierarchy())
1942 bool rootOnly,
bool addToIndex)
1944 for (
const auto &nd : nsLinkedMap)
1946 if (nd->isVisibleInHierarchy())
2031 for (
const auto &nd : nsLinkedMap)
2040 for (
const auto &nd : nsLinkedMap)
2055 bool addToIndex = lne==
nullptr || lne->
visible();
2075 if (nd->isLinkableInProject())
2084 if (nd->getLanguage()==SrcLangExt::VHDL)
2094 bool hasBrief = !nd->briefDescription().isEmpty();
2102 nd->briefDescription(
true),
2104 .setSingleLine(
true)
2105 .setLinkFromIndex(
true));
2154 if (sliceOpt && cd->compoundType() != ct)
2158 if (cd->isLinkableInProject() && !cd->isImplicitTemplateInstance())
2160 if (!cd->isEmbeddedInOuterScope())
2182 if (cd->getLanguage()==SrcLangExt::VHDL &&
2195 if (sliceOpt && cd->compoundType() != ct)
2201 if (cd->isEmbeddedInOuterScope())
2207 if (cd->isLinkableInProject() && !cd->isImplicitTemplateInstance())
2210 if (cd->getLanguage()==SrcLangExt::VHDL)
2218 bool hasBrief = !cd->briefDescription().isEmpty();
2226 cd->briefDescription(
true),
2228 .setSingleLine(
true)
2229 .setLinkFromIndex(
true));
2245 return (c<127 && c>31);
2250 if (startLetter.
isEmpty())
return startLetter;
2251 const char *p = startLetter.
data();
2261 const char hex[]=
"0123456789abcdef";
2264 result+=
hex[
static_cast<unsigned char>(c)>>4];
2265 result+=
hex[
static_cast<unsigned char>(c)&0xf];
2307 if (sliceOpt && cd->compoundType() != ct)
2309 if (cd->isLinkableInProject() && !cd->isImplicitTemplateInstance())
2316 std::string letter =
getUTF8CharAt(cd->className().str(),index);
2317 if (!letter.empty())
2325 QCString alphaLinks =
"<div class=\"qindex\">";
2327 for (
const auto &letter : indexLettersUsed)
2329 if (!first) alphaLinks +=
" | ";
2332 alphaLinks +=
"<a class=\"qindex\" href=\"#letter_" +
2336 alphaLinks +=
"</div>\n";
2339 std::map<std::string, std::vector<const ClassDef*> > classesByLetter;
2346 if (sliceOpt && cd->compoundType() != ct)
2351 if (cd->isLinkableInProject() && !cd->isImplicitTemplateInstance())
2353 QCString className = cd->className();
2356 if (!letter.empty())
2359 auto it = classesByLetter.find(letter);
2360 if (it!=classesByLetter.end())
2362 it->second.push_back(cd.get());
2366 classesByLetter.emplace(letter, std::vector<const ClassDef*>({ cd.get() }));
2373 for (
auto &[letter,list] : classesByLetter)
2375 std::stable_sort(list.begin(), list.end(),
2376 [](
const auto &c1,
const auto &c2)
2378 QCString n1 = c1->className();
2379 QCString n2 = c2->className();
2380 return qstricmp_sort(n1.data()+getPrefixIndex(n1), n2.data()+getPrefixIndex(n2))<0;
2385 if (!classesByLetter.empty())
2389 for (
const auto &cl : classesByLetter)
2391 QCString parity = (counter++%2)==0 ?
"even" :
"odd";
2392 ol.
writeString(
"<dl class=\"classindex " + parity +
"\">\n");
2407 for (
const auto &cd : cl.second)
2426 cd->getOutputFileBase(),cd->anchor(),cname);
2460 bool addToIndex = lne==
nullptr || lne->
visible();
2489 bool addToIndex = lne==
nullptr || lne->
visible();
2518 bool addToIndex = lne==
nullptr || lne->
visible();
2547 bool addToIndex = lne==
nullptr || lne->
visible();
2610 bool addToIndex = lne==
nullptr || lne->
visible();
2674 LayoutNavEntry::ClassList,LayoutNavEntry::Classes,
2688 LayoutNavEntry::InterfaceList,LayoutNavEntry::Interfaces,
2691 "annotatedinterfaces",
2702 LayoutNavEntry::StructList,LayoutNavEntry::Structs,
2716 LayoutNavEntry::ExceptionList,LayoutNavEntry::Exceptions,
2719 "annotatedexceptions",
2741 if (fd && prevFileName!=fd->
name())
2746 prevFileName = fd->
name();
2782 int index =
static_cast<int>(type);
2783 const int numIndices = 4;
2784 ASSERT(index<numIndices);
2790 static writeLinkForMember_t writeLinkForMemberMap[numIndices] =
2800 bool firstSection=
TRUE;
2801 bool firstItem=
TRUE;
2804 for (
const auto &kv : memberIndexMap)
2808 auto it = memberIndexMap.find(page);
2809 if (it != memberIndexMap.end())
2820 if (mil==
nullptr || mil->empty())
continue;
2821 for (
const auto &md : *mil)
2823 const char *sep =
nullptr;
2824 bool isFunc=!md->isObjCMethod() &&
2825 (md->isFunction() || md->isSlot() || md->isSignal());
2828 if (name.
data()+startIndex!=prevName)
2831 tolower(name.
at(startIndex))!=tolower(prevName.
at(0))) &&
2846 else if (!useSections && first)
2857 if (isFunc) ol.
docify(
"()");
2862 sep =
" : ";
2863 prevName = name.
data()+startIndex;
2870 if (index<numIndices)
2873 writeLinkForMemberMap[index](ol,md,sep,prevDefName);
2889 bool hideFriendCompounds =
Config_getBool(HIDE_FRIEND_COMPOUNDS);
2899 if (!letter.empty())
2902 bool isFriendToHide = hideFriendCompounds &&
2906 if (!(md->
isFriend() && isFriendToHide) &&
2941 (md->
isFriend() && !isFriendToHide))
2958 if (!letter.empty())
3006 if (!letter.empty())
3058 if (!letter.empty())
3097 for (
const auto &[letter,list] : map)
3106 anchor=fullName+extension+
"#index_";
3108 anchor=fullName+
"_"+is+extension+
"#index_";
3146 return &cmhlInfo[hl];
3152 if (index.numDocumentedClassMembers(hl)==0)
return;
3158 bool quickLinksAfterSplitbar = !disableIndex && generateTreeView && fullSidebar;
3160 bool multiPageIndex=
FALSE;
3163 multiPageIndex=
TRUE;
3173 bool addToIndex = lne==
nullptr || lne->
visible();
3183 for (
const auto &[letter,list] : index.isClassIndexLetterUsed(hl))
3201 auto writeQuickLinks = [&,cap_letter=letter]()
3242 if (!disableIndex && !quickLinksAfterSplitbar)
3248 if (quickLinksAfterSplitbar)
3266 multiPageIndex ? letter : std::string(),
3267 index.isClassIndexLetterUsed(hl),
3282 bool addToIndex = lne==
nullptr || lne->
visible();
3335 return &fmhlInfo[hl];
3341 if (index.numDocumentedFileMembers(hl)==0)
return;
3347 bool quickLinksAfterSplitbar = !disableIndex && generateTreeView && fullSidebar;
3349 bool multiPageIndex=
FALSE;
3352 multiPageIndex=
TRUE;
3361 bool addToIndex = lne==
nullptr || lne->
visible();
3371 for (
const auto &[letter,list] : index.isFileIndexLetterUsed(hl))
3389 auto writeQuickLinks = [&,cap_letter=letter]()
3428 if (!disableIndex && !quickLinksAfterSplitbar)
3434 if (quickLinksAfterSplitbar)
3452 multiPageIndex ? letter : std::string(),
3453 index.isFileIndexLetterUsed(hl),
3465 bool addToIndex = lne==
nullptr || lne->
visible();
3516 return &nmhlInfo[hl];
3525 if (index.numDocumentedNamespaceMembers(hl)==0)
return;
3531 bool quickLinksAfterSplitbar = !disableIndex && generateTreeView && fullSidebar;
3533 bool multiPageIndex=
FALSE;
3536 multiPageIndex=
TRUE;
3545 bool addToIndex = lne==
nullptr || lne->
visible();
3555 for (
const auto &[letter,list] : index.isNamespaceIndexLetterUsed(hl))
3573 auto writeQuickLinks = [&,cap_letter=letter]()
3612 if (!disableIndex && !quickLinksAfterSplitbar)
3618 if (quickLinksAfterSplitbar)
3636 multiPageIndex ? letter : std::string(),
3637 index.isNamespaceIndexLetterUsed(hl),
3650 bool addToIndex = lne==
nullptr || lne->
visible();
3693 return &nmhlInfo[hl];
3702 if (index.numDocumentedModuleMembers(hl)==0)
return;
3708 bool quickLinksAfterSplitbar = !disableIndex && generateTreeView && fullSidebar;
3710 bool multiPageIndex=
FALSE;
3713 multiPageIndex=
TRUE;
3722 bool addToIndex = lne==
nullptr || lne->
visible();
3732 for (
const auto &[letter,list] : index.isModuleIndexLetterUsed(hl))
3750 auto writeQuickLinks = [&,cap_letter=letter]()
3789 if (!disableIndex && !quickLinksAfterSplitbar)
3795 if (quickLinksAfterSplitbar)
3813 multiPageIndex ? letter : std::string(),
3814 index.isModuleIndexLetterUsed(hl),
3830 bool addToIndex = lne==
nullptr || lne->
visible();
3859 bool addToIndex = lne==
nullptr || lne->
visible();
3883 QCString n=pd->getOutputFileBase();
3884 if (!pd->title().isEmpty())
3918 docPages=indexPages=0;
3921 if (pd->visibleInIndex() && !pd->hasParentPage())
3925 if (pd->documentedPage())
3949 bool addToIndex = lne==
nullptr || lne->
visible();
3950 if (!addToIndex)
return;
3957 QCString pageTitle, pageTitleAsHtml;
3960 pageTitle=pd->
name();
3969 hasSubPages,pageTitle,
3976 hasSubPages || hasSections,pageTitle,
3982 bool doIndent = (hasSections || hasSubPages) &&
4026 if ((pd->getOuterScope()==
nullptr ||
4028 pd->visibleInIndex()
4053 if (!gd->isReference())
4069 if (dd->isLinkableInProject())
4089 bool oldStripCommentsState =
Config_getBool(STRIP_CODE_COMMENTS);
4102 int s = legendDocs.
find(
"<center>");
4103 int e = legendDocs.
find(
"</center>");
4105 if (imgExt==
"svg" && s!=-1 && e!=-1)
4107 legendDocs = legendDocs.
left(s+8) +
"[!-- " +
"SVG 0 --]" + legendDocs.
mid(e);
4137 "maximum nesting level exceeded for group {}: check for possible recursive group relation!",gd->
name());
4150 size_t numSubItems = 0;
4153 if (ml->listType().isDocumentation())
4155 numSubItems += ml->size();
4160 numSubItems += gd->
getFiles().size();
4162 numSubItems += gd->
getDirs().size();
4165 bool isDir = hasSubGroups || hasSubPages || numSubItems>0;
4174 isDir,
TRUE,
nullptr,titleAsHtml);
4193 .setSingleLine(
true)
4194 .setAutolinkSupport(
false));
4200 ol.
docify(
" [external]");
4206 if (lde->kind()==LayoutDocEntry::MemberDef && addToIndex)
4214 for (
const auto &md : *ml)
4217 isDir = !enumList.
empty() && md->isEnumerate();
4218 if (md->isVisible() && !md->isAnonymous())
4221 md->qualifiedName(),md->getReference(),
4222 md->getOutputFileBase(),md->anchor(),
FALSE,addToIndex);
4227 for (
const auto &emd : enumList)
4229 if (emd->isVisible())
4232 emd->qualifiedName(),emd->getReference(),emd->getOutputFileBase(),
4233 emd->anchor(),
FALSE,addToIndex);
4242 else if (lde->kind()==LayoutDocEntry::GroupClasses && addToIndex)
4250 if (cd->isVisible() )
4253 LayoutDocManager::Class,
4261 else if (lde->kind()==LayoutDocEntry::GroupNamespaces && addToIndex &&
Config_getBool(SHOW_NAMESPACES))
4265 if (nd->isVisible())
4268 nd->displayName(),nd->getReference(),
4273 else if (lde->kind()==LayoutDocEntry::GroupConcepts && addToIndex)
4277 if (cd->isVisible())
4280 cd->displayName(),cd->getReference(),
4285 else if (lde->kind()==LayoutDocEntry::GroupFiles && addToIndex)
4287 for (
const auto &fd : gd->
getFiles())
4289 if (fd->isVisible())
4292 fd->displayName(),fd->getReference(),
4293 fd->getOutputFileBase(),
QCString(),
FALSE,fd->isLinkableViaGroup());
4297 else if (lde->kind()==LayoutDocEntry::GroupDirs && addToIndex)
4299 for (
const auto &dd : gd->
getDirs())
4301 if (dd->isVisible())
4304 dd->shortName(),dd->getReference(),
4309 else if (lde->kind()==LayoutDocEntry::GroupPageDocs && addToIndex)
4311 for (
const auto &pd : gd->
getPages())
4315 hasSubPages = pd->hasSubPages();
4316 bool hasSections = pd->hasSections();
4318 if (pd->title().isEmpty())
4319 pageTitle=pd->name();
4321 pageTitle =
parseCommentAsText(pd,
nullptr,pd->title(),pd->getDefFileName(),pd->getDefLine());
4324 hasSubPages || hasSections,
4329 hasSubPages || hasSections,
4333 if (hasSections || hasSubPages)
4339 pd->addSectionsToIndex();
4342 if (hasSections || hasSubPages)
4348 else if (lde->kind()==LayoutDocEntry::GroupNestedGroups)
4386 if (gd->isVisibleInHierarchy())
4409 bool addToIndex = lne==
nullptr || lne->
visible();
4470 FTVHelp* ftv,
bool addToIndex)
4473 bool isDir=visibleMembers>0;
4493 .setSingleLine(
true)
4494 .setAutolinkSupport(
false));
4499 ol.
docify(
" [external]");
4502 if (addToIndex && isDir)
4514 if (addToIndex && isDir)
4533 if (mod->isPrimaryInterface())
4558 bool addToIndex = lne==
nullptr || lne->
visible();
4617 for (
const auto &cd : concepts)
4619 if (cd->isLinkableInProject())
4624 cd->getOutputFileBase(),
QCString(),
false,cd->partOfGroups().empty(),cd);
4629 cd->getOutputFileBase(),
QCString(),
false,cd->partOfGroups().empty());
4636 bool rootOnly,
bool addToIndex);
4639 bool rootOnly,
bool addToIndex)
4641 for (
const auto &nd : nsLinkedMap)
4649 bool rootOnly,
bool addToIndex)
4703 if ((cd->getOuterScope()==
nullptr ||
4709 false,cd->localName(),cd->getReference(),cd->getOutputFileBase(),
4710 QCString(),
false,cd->partOfGroups().empty(),cd.get());
4714 false,cd->localName(),cd->getReference(),cd->getOutputFileBase(),
4715 QCString(),
false,cd->partOfGroups().empty(),cd.get());
4730 bool addToIndex = lne==
nullptr || lne->
visible();
4751 if (cd->isLinkableInProject())
4763 bool hasBrief = !cd->briefDescription().isEmpty();
4771 cd->briefDescription(
true),
4773 .setSingleLine(
true)
4774 .setLinkFromIndex(
true));
4834 for (
const auto &entry: lne->
children())
4836 if (entry->visible()) count++;
4841 for (
const auto &entry: lne->
children())
4843 if (entry->visible())
4845 ol.
writeString(
"<li><a href=\""+entry->url()+
"\"><span>"+
4846 fixSpaces(entry->title())+
"</span></a></li>\n");
4874 projPrefix=projectName+
" ";
4926 bool quickLinksAfterSplitbar = !disableIndex && generateTreeView && fullSidebar;
4928 if (!disableIndex && !quickLinksAfterSplitbar)
4934 if (quickLinksAfterSplitbar)
4939 bool headerWritten=
FALSE;
4964 .setSingleLine(
true));
4965 headerWritten =
TRUE;
4975 headerWritten =
TRUE;
5004 .setIndexWords(
true));
5043 msg(
"Generating main page...\n");
5086 if (index.numDocumentedPages()>0)
5101 if (index.numDocumentedModules()>0)
5107 if (index.numDocumentedGroups()>0)
5113 if (index.numDocumentedDirs()>0)
5119 if (
Config_getBool(SHOW_NAMESPACES) && (index.numDocumentedNamespaces()>0))
5129 if (index.numDocumentedConcepts()>0)
5135 if (index.numHierarchyInterfaces()>0)
5141 if (index.numHierarchyClasses()>0)
5155 if (index.numHierarchyExceptions()>0)
5161 if (index.numAnnotatedInterfacesPrinted()>0)
5167 if (index.numAnnotatedClassesPrinted()>0)
5177 if (index.numAnnotatedStructsPrinted()>0)
5183 if (index.numAnnotatedExceptionsPrinted()>0)
5198 if (index.numDocumentedModules()>0)
5204 if (index.numDocumentedGroups()>0)
5210 if (index.numDocumentedDirs()>0)
5216 if (index.numDocumentedNamespaces()>0)
5222 if (index.numDocumentedConcepts()>0)
5228 if (index.numAnnotatedInterfacesPrinted()>0)
5234 if (index.numAnnotatedClassesPrinted()>0)
5240 if (index.numAnnotatedStructsPrinted()>0)
5246 if (index.numAnnotatedExceptionsPrinted()>0)
5276 return s.startsWith(
"@ref") || s.startsWith(
"\\ref");
5280 for (
const auto &lne : entries)
5283 size_t idx =
static_cast<size_t>(kind);
5287 size_t newSize = idx+1;
5292 bool addToIndex=lne->visible();
5293 bool needsClosing=
FALSE;
5298 case LayoutNavEntry::MainPage:
5299 msg(
"Generating index page...\n");
5302 case LayoutNavEntry::Pages:
5303 msg(
"Generating page index...\n");
5306 case LayoutNavEntry::Topics:
5307 msg(
"Generating topic index...\n");
5310 case LayoutNavEntry::Modules:
5312 if (index.numDocumentedModules()>0 && addToIndex)
5320 case LayoutNavEntry::ModuleList:
5321 msg(
"Generating module index...\n");
5324 case LayoutNavEntry::ModuleMembers:
5325 msg(
"Generating module member index...\n");
5328 case LayoutNavEntry::Namespaces:
5333 if (index.numDocumentedNamespaces()>0 && addToIndex)
5341 msg(
"Generating namespace index...\n");
5347 case LayoutNavEntry::NamespaceList:
5352 msg(
"Generating namespace index...\n");
5357 case LayoutNavEntry::NamespaceMembers:
5358 msg(
"Generating namespace member index...\n");
5361 case LayoutNavEntry::Classes:
5362 if (index.numAnnotatedClasses()>0 && addToIndex)
5370 msg(
"Generating annotated compound index...\n");
5374 case LayoutNavEntry::Concepts:
5375 msg(
"Generating concept index...\n");
5378 case LayoutNavEntry::ClassList:
5379 msg(
"Generating annotated compound index...\n");
5382 case LayoutNavEntry::ClassIndex:
5383 msg(
"Generating alphabetical compound index...\n");
5386 case LayoutNavEntry::ClassHierarchy:
5387 msg(
"Generating hierarchical class index...\n");
5391 msg(
"Generating graphical class hierarchy...\n");
5395 case LayoutNavEntry::ClassMembers:
5398 msg(
"Generating member index...\n");
5402 case LayoutNavEntry::Interfaces:
5403 if (sliceOpt && index.numAnnotatedInterfaces()>0 && addToIndex)
5410 case LayoutNavEntry::InterfaceList:
5413 msg(
"Generating annotated interface index...\n");
5417 case LayoutNavEntry::InterfaceIndex:
5420 msg(
"Generating alphabetical interface index...\n");
5424 case LayoutNavEntry::InterfaceHierarchy:
5427 msg(
"Generating hierarchical interface index...\n");
5431 msg(
"Generating graphical interface hierarchy...\n");
5436 case LayoutNavEntry::Structs:
5437 if (sliceOpt && index.numAnnotatedStructs()>0 && addToIndex)
5444 case LayoutNavEntry::StructList:
5447 msg(
"Generating annotated struct index...\n");
5451 case LayoutNavEntry::StructIndex:
5454 msg(
"Generating alphabetical struct index...\n");
5458 case LayoutNavEntry::Exceptions:
5459 if (sliceOpt && index.numAnnotatedExceptions()>0 && addToIndex)
5466 case LayoutNavEntry::ExceptionList:
5469 msg(
"Generating annotated exception index...\n");
5473 case LayoutNavEntry::ExceptionIndex:
5476 msg(
"Generating alphabetical exception index...\n");
5480 case LayoutNavEntry::ExceptionHierarchy:
5483 msg(
"Generating hierarchical exception index...\n");
5487 msg(
"Generating graphical exception hierarchy...\n");
5492 case LayoutNavEntry::Files:
5494 if (
Config_getBool(SHOW_FILES) && index.numDocumentedFiles()>0 && addToIndex)
5502 msg(
"Generating file index...\n");
5507 case LayoutNavEntry::FileList:
5508 msg(
"Generating file index...\n");
5511 case LayoutNavEntry::FileGlobals:
5512 msg(
"Generating file member index...\n");
5515 case LayoutNavEntry::Examples:
5516 msg(
"Generating example index...\n");
5519 case LayoutNavEntry::User:
5524 bool isRelative=url.
at(0)==
'!';
5525 if (!url.
isEmpty() && !isRelative)
5533 case LayoutNavEntry::UserGroup:
5545 bool isRelative=url.
at(0)==
'!';
5563 case LayoutNavEntry::None:
5564 assert(kind != LayoutNavEntry::None);
5567 if (kind!=LayoutNavEntry::User && kind!=LayoutNavEntry::UserGroup)
5577 case LayoutNavEntry::Modules:
5578 case LayoutNavEntry::Namespaces:
5579 case LayoutNavEntry::Classes:
5580 case LayoutNavEntry::Files:
5581 case LayoutNavEntry::UserGroup:
5603 case LayoutNavEntry::MainPage:
return TRUE;
5604 case LayoutNavEntry::User:
return TRUE;
5605 case LayoutNavEntry::UserGroup:
return TRUE;
5606 case LayoutNavEntry::Pages:
return index.numIndexedPages()>0;
5607 case LayoutNavEntry::Topics:
return index.numDocumentedGroups()>0;
5608 case LayoutNavEntry::Modules:
return index.numDocumentedModules()>0;
5609 case LayoutNavEntry::ModuleList:
return index.numDocumentedModules()>0;
5611 case LayoutNavEntry::Namespaces:
return index.numDocumentedNamespaces()>0 && showNamespaces;
5612 case LayoutNavEntry::NamespaceList:
return index.numDocumentedNamespaces()>0 && showNamespaces;
5614 case LayoutNavEntry::Concepts:
return index.numDocumentedConcepts()>0;
5615 case LayoutNavEntry::Classes:
return index.numAnnotatedClasses()>0;
5616 case LayoutNavEntry::ClassList:
return index.numAnnotatedClasses()>0;
5617 case LayoutNavEntry::ClassIndex:
return index.numAnnotatedClasses()>0;
5618 case LayoutNavEntry::ClassHierarchy:
return index.numHierarchyClasses()>0;
5620 case LayoutNavEntry::Interfaces:
return index.numAnnotatedInterfaces()>0;
5621 case LayoutNavEntry::InterfaceList:
return index.numAnnotatedInterfaces()>0;
5622 case LayoutNavEntry::InterfaceIndex:
return index.numAnnotatedInterfaces()>0;
5623 case LayoutNavEntry::InterfaceHierarchy:
return index.numHierarchyInterfaces()>0;
5624 case LayoutNavEntry::Structs:
return index.numAnnotatedStructs()>0;
5625 case LayoutNavEntry::StructList:
return index.numAnnotatedStructs()>0;
5626 case LayoutNavEntry::StructIndex:
return index.numAnnotatedStructs()>0;
5627 case LayoutNavEntry::Exceptions:
return index.numAnnotatedExceptions()>0;
5628 case LayoutNavEntry::ExceptionList:
return index.numAnnotatedExceptions()>0;
5629 case LayoutNavEntry::ExceptionIndex:
return index.numAnnotatedExceptions()>0;
5630 case LayoutNavEntry::ExceptionHierarchy:
return index.numHierarchyExceptions()>0;
5631 case LayoutNavEntry::Files:
return index.numDocumentedFiles()>0 && showFiles;
5632 case LayoutNavEntry::FileList:
return index.numDocumentedFiles()>0 && showFiles;
5635 case LayoutNavEntry::None:
5636 assert(kind != LayoutNavEntry::None);
5644 std::function<std::size_t(std::size_t)> numDocumented,
5646 const T *(*getInfo)(
size_t hl),
5650 bool firstMember=
TRUE;
5651 for (std::size_t i=0;i<total;i++)
5653 if (numDocumented(i)>0)
5669 bool multiPageIndex=
FALSE;
5672 multiPageIndex=
TRUE;
5674 t <<
",children:[\n";
5675 bool firstLetter=
TRUE;
5676 for (
const auto &[letter,list] : getMemberList(i))
5678 if (!firstLetter) t <<
",\n";
5683 QCString fullName = getInfo(i)->fname;
5684 if (!multiPageIndex || firstLetter)
5685 anchor=fullName+extension+
"#index_";
5687 anchor=fullName+
"_"+is+extension+
"#index_";
5706 for (
const auto &entry : root->
children())
5712 bool firstChild =
TRUE;
5713 if (!first) t <<
",";
5714 t <<
"children:[\n";
5715 for (
const auto &entry : root->
children())
5719 if (!firstChild) t <<
",\n";
5722 if (
isURL(url)) url =
"^" + url;
5725 bool hasChildren=
FALSE;
5726 if (entry->kind()==LayoutNavEntry::ModuleMembers)
5728 auto numDoc = [](std::size_t i) {
5731 auto memList = [](std::size_t i) {
5736 if (entry->kind()==LayoutNavEntry::NamespaceMembers)
5738 auto numDoc = [](std::size_t i) {
5741 auto memList = [](std::size_t i) {
5746 else if (entry->kind()==LayoutNavEntry::ClassMembers)
5748 auto numDoc = [](std::size_t i) {
5751 auto memList = [](std::size_t i) {
5756 else if (entry->kind()==LayoutNavEntry::FileGlobals)
5758 auto numDoc = [](std::size_t i) {
5761 auto memList = [](std::size_t i) {
5770 if (hasChildren) t <<
"]";
5787 t <<
"var menudata={";
5789 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
iterator begin() noexcept
virtual MemberList * getMemberList(MemberListType lt) const =0
virtual int countVisibleMembers() const =0
virtual bool isPrimaryInterface() const =0
virtual const ConceptLinkedRefMap & getConcepts() const =0
virtual const ClassLinkedRefMap & getClasses() const =0
int numDocumentedModules() const
static ModuleManager & instance()
An abstract interface of a namespace symbol.
virtual MemberList * getMemberList(MemberListType lt) const =0
virtual ConceptLinkedRefMap getConcepts() const =0
virtual ClassLinkedRefMap getStructs() const =0
virtual ClassLinkedRefMap getExceptions() const =0
virtual NamespaceLinkedRefMap getNamespaces() const =0
virtual int countVisibleMembers() const =0
virtual ClassLinkedRefMap getClasses() const =0
virtual ClassLinkedRefMap getInterfaces() const =0
Class representing a list of output generators that are written to in parallel.
void endTextBlock(bool paraBreak=FALSE)
void writeString(const QCString &text)
void startIndexItem(const QCString &ref, const QCString &file)
void endTitleHead(const QCString &fileName, const QCString &name)
void endSection(const QCString &lab, SectionType t)
void endIndexValue(const QCString &name, bool b)
void disable(OutputType o)
void startTitleHead(const QCString &fileName)
void enable(OutputType o)
void writeObjectLink(const QCString &ref, const QCString &file, const QCString &anchor, const QCString &name)
void endIndexItem(const QCString &ref, const QCString &file)
void writeGraphicalHierarchy(DotGfxHierarchyTable &g)
void startHeaderSection()
void docify(const QCString &s)
void generateDoc(const QCString &fileName, int startLine, const Definition *ctx, const MemberDef *md, const QCString &docStr, const DocOptions &options)
void startParagraph(const QCString &classDef=QCString())
void endIndexSection(IndexSection is)
void startProjectNumber()
void startTextBlock(bool dense=FALSE)
void pushGeneratorState()
void disableAllBut(OutputType o)
void startFile(const QCString &name, bool isSource, const QCString &manName, const QCString &title, int hierarchyLevel=0)
void startIndexValue(bool b)
void startPageDoc(const QCString &pageTitle)
void writeSplitBar(const QCString &name, const QCString &allMembersFile)
void writeFooter(const QCString &navPath)
void startIndexListItem()
void parseText(const QCString &textStr)
void startSection(const QCString &lab, const QCString &title, SectionType t)
void startIndexSection(IndexSection is)
void startTextLink(const QCString &file, const QCString &anchor)
void writeQuickLinks(HighlightedItem hli, const QCString &file, bool extraTabs=false)
A model of a page symbol.
virtual void addSectionsToIndex()=0
virtual bool visibleInIndex() const =0
virtual const PageLinkedRefMap & getSubPages() const =0
virtual bool hasSubPages() const =0
virtual QCString title() const =0
This is an alternative implementation of QCString.
int find(char c, int index=0, bool cs=TRUE) const
QCString & prepend(const char *s)
size_t length() const
Returns the length of the string, not counting the 0-terminator.
bool startsWith(const char *s) const
QCString mid(size_t index, size_t len=static_cast< size_t >(-1)) const
char & at(size_t i)
Returns a reference to the character at index i.
bool isEmpty() const
Returns TRUE iff the string is empty.
const std::string & str() const
QCString & replace(size_t index, size_t len, const char *s)
const char * data() const
Returns a pointer to the contents of the string in the form of a 0-terminated C string.
QCString left(size_t len) const
class that provide information about a section.
static SectionManager & instance()
returns a reference to the singleton
static constexpr int Subsection
Text streaming class that buffers data.
std::string str() const
Return the contents of the buffer as a std::string object.
static QCString getProtectionName(int prot)
static VhdlClasses convert(Protection prot)
bool classHasVisibleRoot(const BaseClassList &bcl)
bool classVisibleInIndex(const ClassDef *cd)
bool classHasVisibleChildren(const ClassDef *cd)
std::vector< BaseClassDef > BaseClassList
std::unordered_set< const ClassDef * > ClassDefSet
#define Config_updateBool(name, value)
#define Config_getBool(name)
#define Config_getString(name)
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)