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,
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() &&
666 .setAutolinkSupport(
false));
707 visitedClasses.insert(cd);
740 for (
const auto &fd : dd->
getFiles())
742 bool genSourceFile =
false;
753 for(
const auto &subdd : dd->
subDirs())
769 "maximum nesting level exceeded for directory {}: "
770 "check for possible recursive directory relation!",dd->
name());
779 bool tocExpand =
TRUE;
780 bool isDir = !dd->
subDirs().empty() ||
806 .setAutolinkSupport(
false));
819 for(
const auto &subdd : dd->
subDirs())
829 for (
const auto &fd : dd->
getFiles())
836 bool genSourceFile =
false;
841 else if (genSourceFile)
849 for (
const auto &fd : dd->
getFiles())
857 reference = fd->getReference();
858 outputBase = fd->getOutputFileBase();
871 .setAutolinkSupport(
false));
874 if (ftv && (src || doc))
878 reference,outputBase,
887 if (tocExpand && addToIndex)
892 for (
const auto &fd : dd->
getFiles())
899 !fd->isLinkableViaGroup(),
FALSE,&fd->getConcepts());
941 for (
const auto &fd : *fn)
943 if (fd->getDirDef()==
nullptr)
950 reference = fd->getReference();
951 outputBase = fd->getOutputFileBase();
990 for (
const auto &cd : cl)
998 if (cd->getLanguage()==SrcLangExt::VHDL)
1006 else if (sliceOpt && cd->compoundType() != ct)
1017 if (cd->isVisibleInHierarchy())
1029 bool hasChildren = visitedClasses.find(cd.get())==visitedClasses.end() &&
1033 if (cd->isLinkable())
1044 .setSingleLine(
true)
1045 .setAutolinkSupport(
false));
1046 ol.
endIndexItem(cd->getReference(),cd->getOutputFileBase());
1047 if (cd->isReference())
1050 ol.
docify(
" [external]");
1055 if (cd->getLanguage()!=SrcLangExt::VHDL)
1057 Doxygen::indexList->addContentsItem(hasChildren,cd->displayName(),cd->getReference(),cd->getOutputFileBase(),cd->anchor(),
FALSE,
FALSE,cd.get(),escapedName);
1062 ftv->
addContentsItem(hasChildren,cd->displayName(),cd->getReference(),cd->getOutputFileBase(),cd->anchor(),
FALSE,
FALSE,cd.get(),escapedName);
1079 if (cd->getLanguage()==SrcLangExt::VHDL && hasChildren)
1082 visitedClasses.insert(cd.get());
1084 else if (hasChildren)
1087 visitedClasses.insert(cd.get());
1126 for (
const auto &cd : cl)
1128 if (sliceOpt && cd->compoundType() != ct)
1134 if (cd->isVisibleInHierarchy())
1136 if (!cd->subClasses().empty())
1166 bool addToIndex = lne==
nullptr || lne->
visible();
1272 bool addToIndex = lne==
nullptr || lne->
visible();
1377 bool addToIndex = lne==
nullptr || lne->
visible();
1479 for (
const auto &fd: *fn)
1552 .setSingleLine(
true)
1553 .setLinkFromIndex(
true));
1584 if (dir->hasDocumentation())
1609 bool addToIndex = lne==
nullptr || lne->
visible();
1642 std::unordered_map<std::string,size_t> pathMap;
1643 std::vector<FilesInDir> outputFiles;
1648 for (
const auto &fd : *fn)
1651 if (path.
isEmpty()) path=
"[external]";
1652 auto it = pathMap.
find(path.
str());
1653 if (it!=pathMap.end())
1655 outputFiles.at(it->second).files.push_back(fd.get());
1659 pathMap.emplace(path.
str(),outputFiles.size());
1660 outputFiles.emplace_back(path);
1661 outputFiles.back().files.push_back(fd.get());
1667 std::stable_sort(outputFiles.begin(),
1669 [](
const auto &fp1,
const auto &fp2) { return qstricmp_sort(fp1.path,fp2.path)<0; });
1671 for (
auto &fp : outputFiles)
1676 for (
const auto &fp : outputFiles)
1678 for (
const auto &fd : fp.files)
1688 for (
const auto &fd : *fn)
1731 if (nd->isLinkableInProject()) count++;
1742 if (cd->isLinkableInProject()) count++;
1753template<
class ListType>
1757 for (
const auto &cdi : cl)
1783 if (ccd->isLinkableInProject() && !ccd->isImplicitTemplateInstance())
1822 if (lde->kind()==LayoutDocEntry::MemberDef)
1830 for (
const auto &md : *ml)
1833 if (md->visibleInIndex())
1848 if (lde->kind()==LayoutDocEntry::MemberDecl)
1856 for (
const auto &md : *ml)
1859 if (md->visibleInIndex())
1873 bool rootOnly,
bool addToIndex);
1876 bool rootOnly,
bool addToIndex)
1883 bool hasChildren = hasNestedNamespace ||
1903 bool isDir = hasChildren || visibleMembers>0;
1904 if (isLinkable || isDir)
1913 if (addToIndex && isDir)
1927 if (addToIndex && isDir)
1936 bool rootOnly,
bool addToIndex)
1938 for (
const auto &nd : nsLinkedMap)
1940 if (nd->isVisibleInHierarchy())
1948 bool rootOnly,
bool addToIndex)
1950 for (
const auto &nd : nsLinkedMap)
1952 if (nd->isVisibleInHierarchy())
2037 for (
const auto &nd : nsLinkedMap)
2046 for (
const auto &nd : nsLinkedMap)
2061 bool addToIndex = lne==
nullptr || lne->
visible();
2081 if (nd->isLinkableInProject())
2090 if (nd->getLanguage()==SrcLangExt::VHDL)
2100 bool hasBrief = !nd->briefDescription().isEmpty();
2108 nd->briefDescription(
true),
2110 .setSingleLine(
true)
2111 .setLinkFromIndex(
true));
2160 if (sliceOpt && cd->compoundType() != ct)
2164 if (cd->isLinkableInProject() && !cd->isImplicitTemplateInstance())
2166 if (!cd->isEmbeddedInOuterScope())
2188 if (cd->getLanguage()==SrcLangExt::VHDL &&
2201 if (sliceOpt && cd->compoundType() != ct)
2207 if (cd->isEmbeddedInOuterScope())
2213 if (cd->isLinkableInProject() && !cd->isImplicitTemplateInstance())
2216 if (cd->getLanguage()==SrcLangExt::VHDL)
2224 bool hasBrief = !cd->briefDescription().isEmpty();
2232 cd->briefDescription(
true),
2234 .setSingleLine(
true)
2235 .setLinkFromIndex(
true));
2251 return (c<127 && c>31);
2256 if (startLetter.
isEmpty())
return startLetter;
2257 const char *p = startLetter.
data();
2267 const char hex[]=
"0123456789abcdef";
2270 result+=
hex[
static_cast<unsigned char>(c)>>4];
2271 result+=
hex[
static_cast<unsigned char>(c)&0xf];
2293 if (sliceOpt && cd->compoundType() != ct)
2295 if (cd->isLinkableInProject() && !cd->isImplicitTemplateInstance())
2302 std::string letter =
getUTF8CharAt(cd->className().str(),index);
2303 if (!letter.empty())
2311 QCString alphaLinks =
"<div class=\"qindex\">";
2313 for (
const auto &letter : indexLettersUsed)
2315 if (!first) alphaLinks +=
" | ";
2318 alphaLinks +=
"<a class=\"qindex\" href=\"#letter_" +
2322 alphaLinks +=
"</div>\n";
2325 std::map<std::string, std::vector<const ClassDef*> > classesByLetter;
2332 if (sliceOpt && cd->compoundType() != ct)
2337 if (cd->isLinkableInProject() && !cd->isImplicitTemplateInstance())
2339 QCString className = cd->className();
2342 if (!letter.empty())
2345 auto it = classesByLetter.find(letter);
2346 if (it!=classesByLetter.end())
2348 it->second.push_back(cd.get());
2352 classesByLetter.emplace(letter, std::vector<const ClassDef*>({ cd.get() }));
2359 for (
auto &[letter,list] : classesByLetter)
2361 std::stable_sort(list.begin(), list.end(),
2362 [](
const auto &c1,
const auto &c2)
2364 QCString n1 = c1->className();
2365 QCString n2 = c2->className();
2366 return qstricmp_sort(n1.data()+getPrefixIndex(n1), n2.data()+getPrefixIndex(n2))<0;
2371 if (!classesByLetter.empty())
2375 for (
const auto &cl : classesByLetter)
2377 QCString parity = (counter++%2)==0 ?
"even" :
"odd";
2378 ol.
writeString(
"<dl class=\"classindex " + parity +
"\">\n");
2393 for (
const auto &cd : cl.second)
2412 cd->getOutputFileBase(),cd->anchor(),cname);
2446 bool addToIndex = lne==
nullptr || lne->
visible();
2475 bool addToIndex = lne==
nullptr || lne->
visible();
2504 bool addToIndex = lne==
nullptr || lne->
visible();
2533 bool addToIndex = lne==
nullptr || lne->
visible();
2596 bool addToIndex = lne==
nullptr || lne->
visible();
2660 LayoutNavEntry::ClassList,LayoutNavEntry::Classes,
2674 LayoutNavEntry::InterfaceList,LayoutNavEntry::Interfaces,
2677 "annotatedinterfaces",
2688 LayoutNavEntry::StructList,LayoutNavEntry::Structs,
2702 LayoutNavEntry::ExceptionList,LayoutNavEntry::Exceptions,
2705 "annotatedexceptions",
2727 if (fd && prevFileName!=fd->
name())
2732 prevFileName = fd->
name();
2768 int index =
static_cast<int>(type);
2769 const int numIndices = 4;
2770 ASSERT(index<numIndices);
2776 static writeLinkForMember_t writeLinkForMemberMap[numIndices] =
2786 bool firstSection=
TRUE;
2787 bool firstItem=
TRUE;
2790 for (
const auto &kv : memberIndexMap)
2794 auto it = memberIndexMap.find(page);
2795 if (it != memberIndexMap.end())
2806 if (mil==
nullptr || mil->empty())
continue;
2807 for (
const auto &md : *mil)
2809 const char *sep =
nullptr;
2810 bool isFunc=!md->isObjCMethod() &&
2811 (md->isFunction() || md->isSlot() || md->isSignal());
2814 if (name.
data()+startIndex!=prevName)
2817 tolower(name.
at(startIndex))!=tolower(prevName.
at(0))) &&
2832 else if (!useSections && first)
2843 if (isFunc) ol.
docify(
"()");
2848 sep =
" : ";
2849 prevName = name.
data()+startIndex;
2856 if (index<numIndices)
2859 writeLinkForMemberMap[index](ol,md,sep,prevDefName);
2875 bool hideFriendCompounds =
Config_getBool(HIDE_FRIEND_COMPOUNDS);
2885 if (!letter.empty())
2888 bool isFriendToHide = hideFriendCompounds &&
2892 if (!(md->
isFriend() && isFriendToHide) &&
2927 (md->
isFriend() && !isFriendToHide))
2944 if (!letter.empty())
2992 if (!letter.empty())
3044 if (!letter.empty())
3083 for (
const auto &[letter,list] : map)
3092 anchor=fullName+extension+
"#index_";
3094 anchor=fullName+
"_"+is+extension+
"#index_";
3132 return &cmhlInfo[hl];
3138 if (index.numDocumentedClassMembers(hl)==0)
return;
3144 bool quickLinksAfterSplitbar = !disableIndex && generateTreeView && fullSidebar;
3146 bool multiPageIndex=
FALSE;
3149 multiPageIndex=
TRUE;
3159 bool addToIndex = lne==
nullptr || lne->
visible();
3169 for (
const auto &[letter,list] : index.isClassIndexLetterUsed(hl))
3187 auto writeQuickLinks = [&,cap_letter=letter]()
3228 if (!disableIndex && !quickLinksAfterSplitbar)
3234 if (quickLinksAfterSplitbar)
3252 multiPageIndex ? letter : std::string(),
3253 index.isClassIndexLetterUsed(hl),
3268 bool addToIndex = lne==
nullptr || lne->
visible();
3321 return &fmhlInfo[hl];
3327 if (index.numDocumentedFileMembers(hl)==0)
return;
3333 bool quickLinksAfterSplitbar = !disableIndex && generateTreeView && fullSidebar;
3335 bool multiPageIndex=
FALSE;
3338 multiPageIndex=
TRUE;
3347 bool addToIndex = lne==
nullptr || lne->
visible();
3357 for (
const auto &[letter,list] : index.isFileIndexLetterUsed(hl))
3375 auto writeQuickLinks = [&,cap_letter=letter]()
3414 if (!disableIndex && !quickLinksAfterSplitbar)
3420 if (quickLinksAfterSplitbar)
3438 multiPageIndex ? letter : std::string(),
3439 index.isFileIndexLetterUsed(hl),
3451 bool addToIndex = lne==
nullptr || lne->
visible();
3502 return &nmhlInfo[hl];
3511 if (index.numDocumentedNamespaceMembers(hl)==0)
return;
3517 bool quickLinksAfterSplitbar = !disableIndex && generateTreeView && fullSidebar;
3519 bool multiPageIndex=
FALSE;
3522 multiPageIndex=
TRUE;
3531 bool addToIndex = lne==
nullptr || lne->
visible();
3541 for (
const auto &[letter,list] : index.isNamespaceIndexLetterUsed(hl))
3559 auto writeQuickLinks = [&,cap_letter=letter]()
3598 if (!disableIndex && !quickLinksAfterSplitbar)
3604 if (quickLinksAfterSplitbar)
3622 multiPageIndex ? letter : std::string(),
3623 index.isNamespaceIndexLetterUsed(hl),
3636 bool addToIndex = lne==
nullptr || lne->
visible();
3679 return &nmhlInfo[hl];
3688 if (index.numDocumentedModuleMembers(hl)==0)
return;
3694 bool quickLinksAfterSplitbar = !disableIndex && generateTreeView && fullSidebar;
3696 bool multiPageIndex=
FALSE;
3699 multiPageIndex=
TRUE;
3708 bool addToIndex = lne==
nullptr || lne->
visible();
3718 for (
const auto &[letter,list] : index.isModuleIndexLetterUsed(hl))
3736 auto writeQuickLinks = [&,cap_letter=letter]()
3775 if (!disableIndex && !quickLinksAfterSplitbar)
3781 if (quickLinksAfterSplitbar)
3799 multiPageIndex ? letter : std::string(),
3800 index.isModuleIndexLetterUsed(hl),
3816 bool addToIndex = lne==
nullptr || lne->
visible();
3845 bool addToIndex = lne==
nullptr || lne->
visible();
3869 QCString n=pd->getOutputFileBase();
3870 if (!pd->title().isEmpty())
3904 docPages=indexPages=0;
3907 if (pd->visibleInIndex() && !pd->hasParentPage())
3911 if (pd->documentedPage())
3935 bool addToIndex = lne==
nullptr || lne->
visible();
3936 if (!addToIndex)
return;
3943 QCString pageTitle, pageTitleAsHtml;
3946 pageTitle=pd->
name();
3955 hasSubPages,pageTitle,
3962 hasSubPages || hasSections,pageTitle,
3968 bool doIndent = (hasSections || hasSubPages) &&
4012 if ((pd->getOuterScope()==
nullptr ||
4014 pd->visibleInIndex()
4039 if (!gd->isReference())
4055 if (dd->isLinkableInProject())
4075 bool oldStripCommentsState =
Config_getBool(STRIP_CODE_COMMENTS);
4088 int s = legendDocs.
find(
"<center>");
4089 int e = legendDocs.
find(
"</center>");
4091 if (imgExt==
"svg" && s!=-1 && e!=-1)
4093 legendDocs = legendDocs.
left(s+8) +
"[!-- " +
"SVG 0 --]" + legendDocs.
mid(e);
4123 "maximum nesting level exceeded for group {}: check for possible recursive group relation!",gd->
name());
4136 size_t numSubItems = 0;
4139 if (ml->listType().isDocumentation())
4141 numSubItems += ml->size();
4146 numSubItems += gd->
getFiles().size();
4148 numSubItems += gd->
getDirs().size();
4151 bool isDir = hasSubGroups || hasSubPages || numSubItems>0;
4160 isDir,
TRUE,
nullptr,titleAsHtml);
4179 .setSingleLine(
true)
4180 .setAutolinkSupport(
false));
4186 ol.
docify(
" [external]");
4192 if (lde->kind()==LayoutDocEntry::MemberDef && addToIndex)
4200 for (
const auto &md : *ml)
4203 isDir = !enumList.
empty() && md->isEnumerate();
4204 if (md->isVisible() && !md->isAnonymous())
4207 md->qualifiedName(),md->getReference(),
4208 md->getOutputFileBase(),md->anchor(),
FALSE,addToIndex);
4213 for (
const auto &emd : enumList)
4215 if (emd->isVisible())
4218 emd->qualifiedName(),emd->getReference(),emd->getOutputFileBase(),
4219 emd->anchor(),
FALSE,addToIndex);
4228 else if (lde->kind()==LayoutDocEntry::GroupClasses && addToIndex)
4236 if (cd->isVisible() )
4239 LayoutDocManager::Class,
4247 else if (lde->kind()==LayoutDocEntry::GroupNamespaces && addToIndex &&
Config_getBool(SHOW_NAMESPACES))
4251 if (nd->isVisible())
4254 nd->displayName(),nd->getReference(),
4259 else if (lde->kind()==LayoutDocEntry::GroupConcepts && addToIndex)
4263 if (cd->isVisible())
4266 cd->displayName(),cd->getReference(),
4271 else if (lde->kind()==LayoutDocEntry::GroupFiles && addToIndex)
4273 for (
const auto &fd : gd->
getFiles())
4275 if (fd->isVisible())
4278 fd->displayName(),fd->getReference(),
4279 fd->getOutputFileBase(),
QCString(),
FALSE,fd->isLinkableViaGroup());
4283 else if (lde->kind()==LayoutDocEntry::GroupDirs && addToIndex)
4285 for (
const auto &dd : gd->
getDirs())
4287 if (dd->isVisible())
4290 dd->shortName(),dd->getReference(),
4295 else if (lde->kind()==LayoutDocEntry::GroupPageDocs && addToIndex)
4297 for (
const auto &pd : gd->
getPages())
4301 hasSubPages = pd->hasSubPages();
4302 bool hasSections = pd->hasSections();
4304 if (pd->title().isEmpty())
4305 pageTitle=pd->name();
4307 pageTitle =
parseCommentAsText(pd,
nullptr,pd->title(),pd->getDefFileName(),pd->getDefLine());
4310 hasSubPages || hasSections,
4315 hasSubPages || hasSections,
4319 if (hasSections || hasSubPages)
4325 pd->addSectionsToIndex();
4328 if (hasSections || hasSubPages)
4334 else if (lde->kind()==LayoutDocEntry::GroupNestedGroups)
4372 if (gd->isVisibleInHierarchy())
4395 bool addToIndex = lne==
nullptr || lne->
visible();
4456 FTVHelp* ftv,
bool addToIndex)
4459 bool isDir=visibleMembers>0;
4479 .setSingleLine(
true)
4480 .setAutolinkSupport(
false));
4485 ol.
docify(
" [external]");
4488 if (addToIndex && isDir)
4500 if (addToIndex && isDir)
4519 if (mod->isPrimaryInterface())
4544 bool addToIndex = lne==
nullptr || lne->
visible();
4603 for (
const auto &cd : concepts)
4605 if (cd->isLinkableInProject())
4610 cd->getOutputFileBase(),
QCString(),
false,cd->partOfGroups().empty(),cd);
4615 cd->getOutputFileBase(),
QCString(),
false,cd->partOfGroups().empty());
4622 bool rootOnly,
bool addToIndex);
4625 bool rootOnly,
bool addToIndex)
4627 for (
const auto &nd : nsLinkedMap)
4635 bool rootOnly,
bool addToIndex)
4689 if ((cd->getOuterScope()==
nullptr ||
4695 false,cd->localName(),cd->getReference(),cd->getOutputFileBase(),
4696 QCString(),
false,cd->partOfGroups().empty(),cd.get());
4700 false,cd->localName(),cd->getReference(),cd->getOutputFileBase(),
4701 QCString(),
false,cd->partOfGroups().empty(),cd.get());
4716 bool addToIndex = lne==
nullptr || lne->
visible();
4737 if (cd->isLinkableInProject())
4749 bool hasBrief = !cd->briefDescription().isEmpty();
4757 cd->briefDescription(
true),
4759 .setSingleLine(
true)
4760 .setLinkFromIndex(
true));
4820 for (
const auto &entry: lne->
children())
4822 if (entry->visible()) count++;
4827 for (
const auto &entry: lne->
children())
4829 if (entry->visible())
4831 ol.
writeString(
"<li><a href=\""+entry->url()+
"\"><span>"+
4832 fixSpaces(entry->title())+
"</span></a></li>\n");
4860 projPrefix=projectName+
" ";
4912 bool quickLinksAfterSplitbar = !disableIndex && generateTreeView && fullSidebar;
4914 if (!disableIndex && !quickLinksAfterSplitbar)
4920 if (quickLinksAfterSplitbar)
4925 bool headerWritten=
FALSE;
4950 .setSingleLine(
true));
4951 headerWritten =
TRUE;
4961 headerWritten =
TRUE;
4990 .setIndexWords(
true));
5029 msg(
"Generating main page...\n");
5072 if (index.numDocumentedPages()>0)
5087 if (index.numDocumentedModules()>0)
5093 if (index.numDocumentedGroups()>0)
5099 if (index.numDocumentedDirs()>0)
5105 if (
Config_getBool(SHOW_NAMESPACES) && (index.numDocumentedNamespaces()>0))
5115 if (index.numDocumentedConcepts()>0)
5121 if (index.numHierarchyInterfaces()>0)
5127 if (index.numHierarchyClasses()>0)
5141 if (index.numHierarchyExceptions()>0)
5147 if (index.numAnnotatedInterfacesPrinted()>0)
5153 if (index.numAnnotatedClassesPrinted()>0)
5163 if (index.numAnnotatedStructsPrinted()>0)
5169 if (index.numAnnotatedExceptionsPrinted()>0)
5184 if (index.numDocumentedModules()>0)
5190 if (index.numDocumentedGroups()>0)
5196 if (index.numDocumentedDirs()>0)
5202 if (index.numDocumentedNamespaces()>0)
5208 if (index.numDocumentedConcepts()>0)
5214 if (index.numAnnotatedInterfacesPrinted()>0)
5220 if (index.numAnnotatedClassesPrinted()>0)
5226 if (index.numAnnotatedStructsPrinted()>0)
5232 if (index.numAnnotatedExceptionsPrinted()>0)
5262 return s.startsWith(
"@ref") || s.startsWith(
"\\ref");
5266 for (
const auto &lne : entries)
5269 size_t idx =
static_cast<size_t>(kind);
5273 size_t newSize = idx+1;
5278 bool addToIndex=lne->visible();
5279 bool needsClosing=
FALSE;
5284 case LayoutNavEntry::MainPage:
5285 msg(
"Generating index page...\n");
5288 case LayoutNavEntry::Pages:
5289 msg(
"Generating page index...\n");
5292 case LayoutNavEntry::Topics:
5293 msg(
"Generating topic index...\n");
5296 case LayoutNavEntry::Modules:
5298 if (index.numDocumentedModules()>0 && addToIndex)
5306 case LayoutNavEntry::ModuleList:
5307 msg(
"Generating module index...\n");
5310 case LayoutNavEntry::ModuleMembers:
5311 msg(
"Generating module member index...\n");
5314 case LayoutNavEntry::Namespaces:
5319 if (index.numDocumentedNamespaces()>0 && addToIndex)
5327 msg(
"Generating namespace index...\n");
5333 case LayoutNavEntry::NamespaceList:
5338 msg(
"Generating namespace index...\n");
5343 case LayoutNavEntry::NamespaceMembers:
5344 msg(
"Generating namespace member index...\n");
5347 case LayoutNavEntry::Classes:
5348 if (index.numAnnotatedClasses()>0 && addToIndex)
5356 msg(
"Generating annotated compound index...\n");
5360 case LayoutNavEntry::Concepts:
5361 msg(
"Generating concept index...\n");
5364 case LayoutNavEntry::ClassList:
5365 msg(
"Generating annotated compound index...\n");
5368 case LayoutNavEntry::ClassIndex:
5369 msg(
"Generating alphabetical compound index...\n");
5372 case LayoutNavEntry::ClassHierarchy:
5373 msg(
"Generating hierarchical class index...\n");
5377 msg(
"Generating graphical class hierarchy...\n");
5381 case LayoutNavEntry::ClassMembers:
5384 msg(
"Generating member index...\n");
5388 case LayoutNavEntry::Interfaces:
5389 if (sliceOpt && index.numAnnotatedInterfaces()>0 && addToIndex)
5396 case LayoutNavEntry::InterfaceList:
5399 msg(
"Generating annotated interface index...\n");
5403 case LayoutNavEntry::InterfaceIndex:
5406 msg(
"Generating alphabetical interface index...\n");
5410 case LayoutNavEntry::InterfaceHierarchy:
5413 msg(
"Generating hierarchical interface index...\n");
5417 msg(
"Generating graphical interface hierarchy...\n");
5422 case LayoutNavEntry::Structs:
5423 if (sliceOpt && index.numAnnotatedStructs()>0 && addToIndex)
5430 case LayoutNavEntry::StructList:
5433 msg(
"Generating annotated struct index...\n");
5437 case LayoutNavEntry::StructIndex:
5440 msg(
"Generating alphabetical struct index...\n");
5444 case LayoutNavEntry::Exceptions:
5445 if (sliceOpt && index.numAnnotatedExceptions()>0 && addToIndex)
5452 case LayoutNavEntry::ExceptionList:
5455 msg(
"Generating annotated exception index...\n");
5459 case LayoutNavEntry::ExceptionIndex:
5462 msg(
"Generating alphabetical exception index...\n");
5466 case LayoutNavEntry::ExceptionHierarchy:
5469 msg(
"Generating hierarchical exception index...\n");
5473 msg(
"Generating graphical exception hierarchy...\n");
5478 case LayoutNavEntry::Files:
5480 if (
Config_getBool(SHOW_FILES) && index.numDocumentedFiles()>0 && addToIndex)
5488 msg(
"Generating file index...\n");
5493 case LayoutNavEntry::FileList:
5494 msg(
"Generating file index...\n");
5497 case LayoutNavEntry::FileGlobals:
5498 msg(
"Generating file member index...\n");
5501 case LayoutNavEntry::Examples:
5502 msg(
"Generating example index...\n");
5505 case LayoutNavEntry::User:
5510 bool isRelative=url.
at(0)==
'!';
5511 if (!url.
isEmpty() && !isRelative)
5519 case LayoutNavEntry::UserGroup:
5531 bool isRelative=url.
at(0)==
'!';
5549 case LayoutNavEntry::None:
5550 assert(kind != LayoutNavEntry::None);
5553 if (kind!=LayoutNavEntry::User && kind!=LayoutNavEntry::UserGroup)
5563 case LayoutNavEntry::Modules:
5564 case LayoutNavEntry::Namespaces:
5565 case LayoutNavEntry::Classes:
5566 case LayoutNavEntry::Files:
5567 case LayoutNavEntry::UserGroup:
5589 case LayoutNavEntry::MainPage:
return TRUE;
5590 case LayoutNavEntry::User:
return TRUE;
5591 case LayoutNavEntry::UserGroup:
return TRUE;
5592 case LayoutNavEntry::Pages:
return index.numIndexedPages()>0;
5593 case LayoutNavEntry::Topics:
return index.numDocumentedGroups()>0;
5594 case LayoutNavEntry::Modules:
return index.numDocumentedModules()>0;
5595 case LayoutNavEntry::ModuleList:
return index.numDocumentedModules()>0;
5597 case LayoutNavEntry::Namespaces:
return index.numDocumentedNamespaces()>0 && showNamespaces;
5598 case LayoutNavEntry::NamespaceList:
return index.numDocumentedNamespaces()>0 && showNamespaces;
5600 case LayoutNavEntry::Concepts:
return index.numDocumentedConcepts()>0;
5601 case LayoutNavEntry::Classes:
return index.numAnnotatedClasses()>0;
5602 case LayoutNavEntry::ClassList:
return index.numAnnotatedClasses()>0;
5603 case LayoutNavEntry::ClassIndex:
return index.numAnnotatedClasses()>0;
5604 case LayoutNavEntry::ClassHierarchy:
return index.numHierarchyClasses()>0;
5606 case LayoutNavEntry::Interfaces:
return index.numAnnotatedInterfaces()>0;
5607 case LayoutNavEntry::InterfaceList:
return index.numAnnotatedInterfaces()>0;
5608 case LayoutNavEntry::InterfaceIndex:
return index.numAnnotatedInterfaces()>0;
5609 case LayoutNavEntry::InterfaceHierarchy:
return index.numHierarchyInterfaces()>0;
5610 case LayoutNavEntry::Structs:
return index.numAnnotatedStructs()>0;
5611 case LayoutNavEntry::StructList:
return index.numAnnotatedStructs()>0;
5612 case LayoutNavEntry::StructIndex:
return index.numAnnotatedStructs()>0;
5613 case LayoutNavEntry::Exceptions:
return index.numAnnotatedExceptions()>0;
5614 case LayoutNavEntry::ExceptionList:
return index.numAnnotatedExceptions()>0;
5615 case LayoutNavEntry::ExceptionIndex:
return index.numAnnotatedExceptions()>0;
5616 case LayoutNavEntry::ExceptionHierarchy:
return index.numHierarchyExceptions()>0;
5617 case LayoutNavEntry::Files:
return index.numDocumentedFiles()>0 && showFiles;
5618 case LayoutNavEntry::FileList:
return index.numDocumentedFiles()>0 && showFiles;
5621 case LayoutNavEntry::None:
5622 assert(kind != LayoutNavEntry::None);
5630 std::function<std::size_t(std::size_t)> numDocumented,
5632 const T *(*getInfo)(
size_t hl),
5636 bool firstMember=
TRUE;
5637 for (std::size_t i=0;i<total;i++)
5639 if (numDocumented(i)>0)
5655 bool multiPageIndex=
FALSE;
5658 multiPageIndex=
TRUE;
5660 t <<
",children:[\n";
5661 bool firstLetter=
TRUE;
5662 for (
const auto &[letter,list] : getMemberList(i))
5664 if (!firstLetter) t <<
",\n";
5669 QCString fullName = getInfo(i)->fname;
5670 if (!multiPageIndex || firstLetter)
5671 anchor=fullName+extension+
"#index_";
5673 anchor=fullName+
"_"+is+extension+
"#index_";
5692 for (
const auto &entry : root->
children())
5698 bool firstChild =
TRUE;
5699 if (!first) t <<
",";
5700 t <<
"children:[\n";
5701 for (
const auto &entry : root->
children())
5705 if (!firstChild) t <<
",\n";
5708 if (
isURL(url)) url =
"^" + url;
5711 bool hasChildren=
FALSE;
5712 if (entry->kind()==LayoutNavEntry::ModuleMembers)
5714 auto numDoc = [](std::size_t i) {
5717 auto memList = [](std::size_t i) {
5722 if (entry->kind()==LayoutNavEntry::NamespaceMembers)
5724 auto numDoc = [](std::size_t i) {
5727 auto memList = [](std::size_t i) {
5732 else if (entry->kind()==LayoutNavEntry::ClassMembers)
5734 auto numDoc = [](std::size_t i) {
5737 auto memList = [](std::size_t i) {
5742 else if (entry->kind()==LayoutNavEntry::FileGlobals)
5744 auto numDoc = [](std::size_t i) {
5747 auto memList = [](std::size_t i) {
5756 if (hasChildren) t <<
"]";
5773 t <<
"var menudata={";
5775 if (hasChildren) t <<
"]";
A abstract class representing of a compound symbol.
virtual bool isVisibleInHierarchy() const =0
the class is visible in a class diagram, or class hierarchy
virtual const BaseClassList & baseClasses() const =0
Returns the list of base classes from which this class directly inherits.
virtual bool isSimple() const =0
virtual Protection protection() const =0
Return the protection level (Public,Protected,Private) in which this compound was found.
virtual bool isImplicitTemplateInstance() const =0
CompoundType
The various compound types.
virtual CompoundType compoundType() const =0
Returns the type of compound this is, i.e.
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 convertToHtml(const QCString &s, bool keepEntities)
QCString parseCommentAsText(const Definition *scope, const MemberDef *md, const QCString &doc, const QCString &fileName, int lineNr)
QCString correctURL(const QCString &url, const QCString &relPath)
Corrects URL url according to the relative path relPath.
QCString filterTitle(const QCString &title)
bool fileVisibleInIndex(const FileDef *fd, bool &genSourceFile)
bool isURL(const QCString &url)
Checks whether the given url starts with a supported protocol.
static QCString stripFromPath(const QCString &p, const StringVector &l)
void extractNamespaceName(const QCString &scopeName, QCString &className, QCString &namespaceName, bool allowEmptyClass)
QCString getLanguageSpecificSeparator(SrcLangExt lang, bool classScope)
Returns the scope separator to use given the programming language lang.
QCString getDotImageExtension()
int getPrefixIndex(const QCString &name)
QCString convertToId(const QCString &s)
void addHtmlExtensionIfMissing(QCString &fName)
A bunch of utility functions.
QCString fixSpaces(const QCString &s)